﻿PriceReviewMgr = createClass();
var g = {};
PriceReviewMgr.prototype.init = function(args) {
    defaults = { parentDiv: "", fare: null, adults: 1, children: 0, infants: 0, taxMode: "including", tripType:"", searchType: "" };

	for(var pr in defaults)
        this[pr] = isDefined(args[pr]) ?args[pr] :defaults[pr];
        
    var fare = this.fare;
    var priceMgr = this;
    
    var widths = [ 154, 161, 155, 103];
    var captions = [ "Passenger Type", "No. of Passengers", "Price per person", "Total" ];
    var breakup = fare.get('fareBreakup');
    
    var fareTotal = 0;
    var taxTotal = 0;
    var priceTb = [];
    
    var paxTypes = [ ['Adult', this.adults]];
    if(this.children != 0) paxTypes.push(['Child', this.children]);
    if(this.infants != 0) paxTypes.push(['Infant', this.infants]);
    
    this.format = function(val) {
        return "<span style='font-family: tahoma'>" + 
			        fare.get('currency') + "</span>" + "&nbsp;" + Math.ceil(val*100)/100;
    };
    
    var f;
    for(var i=0; i<paxTypes.length; i++) {
        f = breakup.get(paxTypes[i][0]);
        fareTotal += (f.base + f.tax) * paxTypes[i][1];
        taxTotal += f.tax * paxTypes[i][1];
        priceTb.push([ paxTypes[i][0], paxTypes[i][1], this.format(f.base), this.format(f.base*paxTypes[i][1])]);
    }
    fareTotal -= fare.get('discount');
    var PromotinalDiscount=0;

    if((this.searchType == "D") && (this.tripType == "RT"))
      	PromotinalDiscount=fare.ob.get('promodiscount');
    else
      	PromotinalDiscount=fare.get('promodiscount');

    fareTotal -= PromotinalDiscount;
      this.hide = function() {
        this.domMgr.parent.style.display = "none";        
    };

    this.show = function() {
        this.domMgr.parent.style.display = "";
    };

    var header1 = {
	    tagName: "div",
	    cssClass: "header1",
        layout: "&nbsp;Pricing Details"
    };
    
    var header2 = {
	    tagName: "div",
	    cssClass: "header2",
	    foreach: { startIndex: 0, stopIndex: 3, indexKey: "caption" },
        layout: {
            tagName: "div",
            cssClass: "col",
            style: { width: function(mgr) { return widths[mgr.indices.caption] + "px"; } },
            layout: function(el, mgr) {
                el.innerHTML = captions[mgr.indices.caption];
            }
        }
    };
    
    var priceRow = {
    	tagName: "div",
	    cssClass: "row",
	    foreach: { startIndex: 0, stopIndex: 3, indexKey: "col" },
        layout: {
            tagName: "div",
            cssClass: "col",
            style: { 
                width: function(mgr) { 
                    return widths[mgr.indices.col]-1 + "px";                    
                },
                borderRightWidth: function(mgr) { return (mgr.indices.col == 3) ?"0px" :"1px"; } 
            },
            layout: function(el, mgr) {
                el.innerHTML = priceTb[mgr.indices.row][mgr.indices.col]; 
            }
        }
    };

    var priceRows = {
        tagName: "div",
        foreach: { startIndex: 0, stopIndex: priceTb.length-1, indexKey: "row" },
        layout: priceRow
    };

    var taxes = {
        tagName: "div",
        cssClass: "tax",
        style: { display: (/including/i.test(this.taxMode)) ?"" :"none" },
        layout: [{
            tagName: "div",
            cssClass: "col1",
            layout: "Taxes & Fees"
        },{            
            tagName: "div",
            cssClass: "col2",
            layout: function(el, mgr) { el.innerHTML = priceMgr.format(taxTotal); }
        }]        
    };
    
    var PromoRow = {
        tagName: "div",
        cssClass: "tax",
        style: { display: (PromotinalDiscount > 0) ?"" :"none" },
        layout: [{
            tagName: "div",
            cssClass: "col1",
            layout: "Discount Voucher"
        },{            
            tagName: "div",
            cssClass: "col2",
            layout: function(el, mgr) { el.innerHTML = "-&nbsp;" + priceMgr.format(PromotinalDiscount); }
        }]        
    };
    var discountRow = {
        tagName: "div",
        cssClass: "tax",
        style: { display: (fare.get('discount') > 0) ?"" :"none" },
        layout: [{
            tagName: "div",
            cssClass: "col1",
            layout: "Discounts"
        },{            
            tagName: "div",
            cssClass: "col2",
            layout: function(el, mgr) { el.innerHTML = "-&nbsp;" + priceMgr.format(fare.get('discount')); }
        }]        
    };
    var total = {
    	tagName: "div",
        cssClass: "total",
        layout: [{            
            tagName: "div",
            cssClass: "col2",
            layout: function(el, mgr) { el.innerHTML = priceMgr.format(fareTotal); }
        },{
            tagName: "div",
            cssClass: "col1",
            layout: "Total cost of all Passengers " + this.taxMode + " Taxes & Fees"
        }] 
    };
    
    this.layout = {
        parent: priceMgr.parentDiv,
        layout: {
            tagName: "div",
            cssClass: "priceReview",
            layout: [ header1, header2, priceRows, taxes, discountRow, PromoRow, total ]
        }
    };
    this.domMgr = new DomMgr(this.layout);
    this.domMgr.create();
    this.domMgr.update();
};