YAHOO.namespace("booking");


Ext.namespace("paxes");


paxes.record = Ext.data.Record.create(['value', 'text', 'misc']);

paxes.init = function(cfg, commonMeal) {
	if (!commonMeal) {
		Ext.each(cfg, function(ctrl) {
			Ext.getCmp(ctrl.paxId).on("select", function(cmp) {
				paxes.paxChange_sm(ctrl.paxId, ctrl.mealId, ctrl.child, ctrl.childIndex, ctrl.extrabed);
			});
			Ext.getCmp(ctrl.mealId).on("select", function(cmp) {
				paxes.paxChange_sm(ctrl.paxId, ctrl.mealId, ctrl.child, ctrl.childIndex, ctrl.extrabed);
			});
		});
	} else {
		Ext.each(cfg.ctrls, function(ctrl) {
			Ext.getCmp(ctrl.paxId).on("select", function(cmp) {
				paxes.paxChange_cm(cfg.ctrls, cfg.mealId);
			});
		});
		Ext.getCmp(cfg.mealId).on("select", function(cmp) {
			paxes.paxChange_cm(cfg.ctrls, cfg.mealId);
		});
	}
}

paxes.paxChange_cm = function(ctrls, mealId) {
	var paxCmps = [];
	var extrabedPaxCmps = [];
	var mealCmps = [];
	Ext.each(ctrls, function(ctrl) {
		if (ctrl.extrabed == "true") {
			extrabedPaxCmps.push(Ext.getCmp(ctrl.paxId));
		} else {
			paxCmps.push(Ext.getCmp(ctrl.paxId));
		}
		mealCmps.push(Ext.getCmp(ctrl.mealId));
	});

	var mealCmp = Ext.getCmp(mealId);
	paxes.load_cm(paxCmps, extrabedPaxCmps, mealCmps, mealCmp);
}

paxes.load_cm = function(paxCmps, extrabedPaxCmps, mealCmps, mealCmp) {
	var paxIds = [];
	var extrabedPaxIds = [];
	Ext.each(paxCmps, function(paxCmp) {
		paxIds.push(paxCmp.getValue());
	});
	Ext.each(extrabedPaxCmps, function(paxCmp) {
		extrabedPaxIds.push(paxCmp.getValue());
	});
	var mealStore = new Ext.data.Store({
		proxy: new Ext.ux.data.DwrProxy({
			apiActionToHandlerMap : {
				read : {
					dwrFunction : accommodationBookingService.getPaxesCommonMealsJSON,
					getDwrArgsFunction : function(trans) {
						return [ mealCmp.getValue(), paxIds, extrabedPaxIds];
					}
				}
			}
		}),
		reader: new Ext.data.JsonReader({
			root : 'rows[0]',
			fields : [
				{name: 'value'},
				{name: 'text'},
				{name: 'misc'}
			]
		})
	});
	
	mealStore.load({
		callback: function(r, success) {
			if (success) {
				Ext.each(mealCmps, function(curMealCmp, index) {
					curMealCmp.store.removeAll();
					curMealCmp.store.add(r);
					curMealCmp.setValue(mealCmp.getValue());
				});
				
				Ext.each(paxCmps, function(paxCmp, index) {
					var paxStore = new Ext.data.Store({
						reader: new Ext.data.JsonReader({
							root : 'rows[' + (index + 1) + ']',
							fields : [
								{name: 'value'},
								{name: 'text'},
								{name: 'misc'}
							]
						})
					});
					paxStore.on("load", function(store, records, options) {
						paxCmp.store.removeAll();
						paxCmp.store.add(records);
						paxCmp.setValue(paxCmp.getValue());
					});
					paxStore.loadData(mealStore.reader.jsonData);
				});
			}
		}
	});
	
}



paxes.paxChange_sm = function(paxId, mealId, child, childIndex, extrabed) {
	var paxCmp = Ext.getCmp(paxId);
	var mealCmp = Ext.getCmp(mealId);
	paxes.load_sm(paxCmp, mealCmp, child, childIndex, extrabed);
}

paxes.load_sm = function(paxCmp, mealCmp, child, childIndex, extrabed) {
	var paxStore = new Ext.data.Store({
		proxy: new Ext.ux.data.DwrProxy({
			apiActionToHandlerMap : {
				read : {
					dwrFunction : accommodationBookingService.getPaxesMealsJSON,
					getDwrArgsFunction : function(trans) {
						return [ paxCmp.getValue(), mealCmp.getValue(), child, childIndex, extrabed ];
					}
				}
			}
		}),
		reader: new Ext.data.JsonReader({
			root : 'rows[0]',
			fields : [
				{name: 'value'},
				{name: 'text'},
				{name: 'misc'}
			]
		})
	});
	paxStore.load({
		callback: function(r, success) {
			if (success) {
				paxCmp.store.removeAll();
				paxCmp.store.add(r);
				paxCmp.setValue(paxCmp.getValue());
				
				var mealStore = new Ext.data.Store({
					reader: new Ext.data.JsonReader({
						root : 'rows[1]',
						fields : [
							{name: 'value'},
							{name: 'text'},
							{name: 'misc'}
						]
					})
				});
				
				mealStore.on("load", function(store, records, options) {
					mealCmp.store.removeAll();
					mealCmp.store.add(records);
					mealCmp.setValue(mealCmp.getValue());
				});
				mealStore.loadData(paxStore.reader.jsonData);
			}
		}
	});
	
}


YAHOO.booking.init = function(paymentMode) {
	Ext.each(
			Ext.query(".payment-mode-radio"), 
			function(node) {
				Ext.getCmp(node.id).on("check", YAHOO.booking.changePaymentMode); 
			}
	);
	YAHOO.booking.renderPaymentMode(paymentMode);
}

YAHOO.booking.changePaymentMode = function() {
	var paymentMode = null;
	var radios = document.p_from.mode;
	for (var i = 0; i < radios.length; i++) {
		if (radios[i].checked) {
			paymentMode = radios[i].value;
		}
	}
	
	YAHOO.booking.renderPaymentMode(paymentMode);
}

YAHOO.booking.renderPaymentMode = function(paymentMode) {
	// Strip PSP code in case of Online payments
	separatorIndex = paymentMode.lastIndexOf(':');
	if (separatorIndex >= 0) {
		paymentMode = paymentMode.substr(0, separatorIndex);
	}

	var containerList = $$('.paymentInfoContainer');
	var container = $('paymentInfo_' + paymentMode);
	
	if (container) {
		containerList = containerList.without(container);
	}
	
	containerList.each(function(item) {
		item.hide();
	});

	if (container) {
		container.show();
	}
}

Ext.namespace("cancellation");

cancellation.showPopup = function(id) {
	var clPanel = Ext.getCmp(id);
    var xy = clPanel.el.getAlignToXY(window.document, 'c-c');
    clPanel.setPagePosition(xy[0], xy[1]);
    clPanel.show();
}