page = {

	bind: {
		avlFrm: {
			fromd: {bind:"tod" },
			tod: {bind:"fromd" },
			cty_code: {filter:"htl"}
		}
	},

	extraType: null,
	working: false,

	pax_types: [ "adults", "teenagers", "children", "infants" ],
	pax_types_pre: [ "adult_", "teen_", "child_", "infant_" ],

	history: null,
	historyHnd: function(e) {
		var pos = this.history.get();
		if ( pos === null ) {
			return false;
		} else {
			pos = parseInt(pos, 10);
		}

		if ( pos < this.history.lastPos ) {
			page.step(pos);
		}
	},
	interceptEnter: function(frm) {
		if ( !this.working && this.history.lastPos < 3 ) {
			this.avl(frm);
		}
		return false;
	},

	step: function(id) {
		dom.hide('step-'+this.history.lastPos);
		dom.show('step-'+id);
		if ( document.documentElement.scrollTop > 150 ) {
			$("step-"+id).scrollIntoView(true);
		}

		if ( id > parseInt(this.history.lastPos, 10) ) {
			this.history.set(id);
		} else {
			this.history.lastPos = id;
		}
	},

	init: function() {
		this.history = new History(this.historyHnd, 1);

		var frm = document.forms.avlFrm;
		if ( isset(app.uri.queryKey.quick) ) {	// if quick search, init form and run avl
			setTimeout(this.avl.delegate(this, [frm]), 100);
		}

		Event.on(frm.rooms, 'change', this.dstChange);
		if ( $$('select', 'dst-tbl').length/4 != frm.rooms.value ) {
			frm.rooms.value = $$('select', 'dst-tbl').length/4;
		}

		frm=null;
	},

	dstChange: function(e) {
		page.working = true;
		Array.forEach($$('select', 'dst-tbl'), function(el){
			el.disabled = true;
		});

		dom.show('working');
		$('avl-btn').disabled = true;

		ajax.queue(page.dstSet, "dstChg");
		ajax.loadXML("htl/dst-tbl.cfm?rooms="+this.value, "dstChg");
	},
	dstSet: function() {
		page.working = false;
		var response = ajax.getXML('dstChg');
		$('dst-tbl').innerHTML = dom.xmlText(response);

		dom.hide('working');
		$('avl-btn').disabled = false;
	},

	avl: function(frm) {
		if ( !app.loaded ) {
			return;
		}

		if ( !hasValue(frm.cnt_code) ) { return form.error("Please select at least a country.", frm.cty_code); }
		if ( !hasValue(frm.fromd) ) { return form.error("Please input check-in date.", frm.fromd); }
		if ( app.today.dayDiff(getValue(frm.fromd).toDate()) < 1 ) { return form.error("Please select a date after " + app.today.format()); }
		if ( !hasValue(frm.tod) ) { return form.error("Please input check-out date.", frm.tod); }
		if ( !hasValue(frm.rooms) ) { return form.error("Please input number of rooms.", frm.rooms); }

		var totals = [0,0,0,0], total_rooms = parseInt(frm.rooms.value, 10), pers_proom = "", pax=0, sum=0, i=0, obj = null;
		for ( var rm = 1; rm <= total_rooms; rm++ ) {
			sum = 0;

			for ( i = 0; i < this.pax_types.length; i++ ) {
				obj = frm[this.pax_types_pre[i]+rm];

				if ( !hasValue(obj) ) {
					return form.error("Please select number of " + this.pax_types[i] + " in room #" + rm, obj);
				}
				pax = parseInt(obj.value, 10);

				sum += pax;
				totals[i] += pax;
				pers_proom += pax + '^';
			}

			if ( !sum ) {
				return form.error("Please input at least one person in room no." + rm);
			}
		}

		frm.pers_proom.value = pers_proom;
		for ( i = 0; i < this.pax_types.length; i++ ) {
			$('sum_' + this.pax_types[i]).innerHTML = totals[i].toString();
		}

		ajax.queue(this.chkAvl, $('avl_tbl').action);
		$('avl_tbl').addRows(frm, "?action=avl", "Running accommodation availability." );

		frm=obj=null;
	},

	chkAvl: function() {
		var frm = document.forms.avlFrm;
		var xmlDoc = ajax.getXML( $('avl_tbl').action );

		if ( parseInt(xmlDoc.getAttribute('recordcount'), 10) === 0 ) {
			dom.console(4, "No available room has been found with the criteria specified.");
		} else {
			$('sum_fromd').innerHTML = frm.fromd.value;
			$('sum_tod').innerHTML = frm.tod.value;
			this.step(2);
		}
		xmlDoc=frm=null;
	},

	srvSel: function(btn, rm_type) {
		var row = btn.parentNode.parentNode;
		var frm = document.forms.avlFrm;

		frm.htl_code.value = row.getAttribute('htl_code');
		frm.rm_type.value = rm_type;
		frm.price.value = row.getAttribute('price');
		frm.downpayment.value = row.getAttribute('downpayment');
		frm.teen_age.value = row.getAttribute('ta');
		frm.child_age.value = row.getAttribute('ca');
		frm.infant_age.value = row.getAttribute('ia');
		frm.status.value = row.getAttribute('status');
		if ( frm.status.value == 'AV' ) {
			frm.status.value = 'AVL';
		}

		var statObj = $('sum_status');
		switch ( frm.status.value ) {
		case 'AVL':
			statObj.innerHTML = lang.common.available;
			statObj.style.color = "green";
			break;
		case 'OR':
			statObj.innerHTML = lang.common.or;
			statObj.style.color = "orange";
			break;
		case 'NA':
			statObj.innerHTML = lang.common.not_available;
			statObj.style.color = "red";
			break;
		}

		//this.roomPrice = parseFloat(row.getAttribute('price'));
		//this.advance = parseFloat(row.getAttribute('downpayment'));

		$('sum_rm_type').innerHTML = frm.rooms.value +' &times; '+ row.cells[1].innerHTML;
		$('sum_nights').innerHTML = row.getAttribute('nights');
		$('sum_htl_name').innerHTML = row.getAttribute('htl_name');
		$('sum_room_amount').innerHTML = row.cells[3].innerHTML;
		$('sum_amount').innerHTML = $('sum_room_amount').innerHTML;
		$('sum_advance').innerHTML = row.getAttribute('downpayment').currencyFormat() + '%';
		$('sum_downpay').innerHTML = row.cells[5].innerHTML;

		//$('sum_meal_amount').innerHTML = (0.0).currencyFormat() + " &euro;";
		//$('sum_spl_amount').innerHTML = (0.0).currencyFormat() + " &euro;";

		passengers.list(frm, true);
		this.step(3);

		row=frm=statObj=null;
	},

	/*
	// MEALS AND SUPPLEMENTS
	extraAdd: function(type) {
		ajax.post(document.forms.avlFrm, 'fromd','tod','htl_code','rm_type','rooms');
		var msg = "Loading " + ( ( type == 'meal' ) ? "meal" : "supplement" ) + " selection list.";
		this.extraType = type;
		ajax.load("htl/extras.cfm?action=extras&type="+type, "extra_bk", msg);
	},

	extraSelectRm: function(state) {
		Array.forEach($$('input', 'rm_extra_tbl'), function(el) {
				el.checked = state;
		});
	},

	extraSel: function() {
		var frm = document.forms.avlFrm;
		var extra_code = null;
		try {
			extra_code = app.row.getAttribute('extra');
		} catch(e) {
			return;
		}

		var rooms = parseInt(frm.rooms.value, 10);
		var rmSel;
		if ( rooms > 1 ) {
			var rmFrm = document.forms.extraFrm;
			rmSel = "";
			for ( var i = 1; i <= rooms; i++ ) {
				if ( rmFrm['rm_' + i].checked ) {
					rmSel += i + ',';
				}
			}

			if ( !rmSel.length ) {
				return form.error("At least one room should be selected.");
			}
		} else {
			rmSel = "1,";
		}

		ajax.post(frm, "htl_code","rm_type", "fromd", "tod", "pers_proom");
		modal.close("extra_bk");
		var msg = "Loading details form for selected " + ( ( this.extraType == 'meal' ) ? "meal" : "supplement" ) + ".";
		ajax.load("htl/extras.cfm?action=extraAdd&extraType=" + this.extraType + "&extra=" + extra_code + "&rmSel=" + rmSel, "extra_bk", msg);
	},

	exIndCheck: function(obj) {
		var stObj = obj.form.dayIndexSt;
		var enObj = obj.form.dayIndexEn;
		var stObjChecked = null;
		var enObjChecked = null;
		var i;

		if ( stObj.length ) {
			for ( i=0; i < stObj.length; i++ ) {
				if ( stObj[i].checked ) {
					stObjChecked = stObj[i];
					break;
				}
			}

			for ( i=0; i < enObj.length; i++ ) {
				if ( enObj[i].checked ) {
					enObjChecked = enObj[i];
					break;
				}
			}

			if ( stObjChecked.value > enObjChecked.value ) {
				if ( obj.name == 'dayIndexSt' ) {
					enObj[stObjChecked.value-1].checked = true;
				} else {
					stObj[enObjChecked.value-1].checked = true;
				}
			}
		}
	},

	extraAddValidate: function(frmEl) {
		if ( frmEl.per_type.value == 'UNIT' ) {
			if ( !hasValue(frmEl.units) ) {
				return form.error("Please input number of units ( at least 1 ).", frmEl.units);
			}
		}

		var msg = "Adding selected " + ( ( this.extraType == 'meal' ) ? "meal" : "supplement" ) + " to booking form.";
		var tbl = $(this.extraType == 'meal' ? 'meal_tbl' : 'spl_tbl');  

		ajax.stack(this.sumAll, tbl.action);
		frmEl.action = app.queryAppend(frmEl.action, "action=extraAddHnd");
		tbl.recordAdd(frmEl, frmEl.action, msg);
		tbl = null;

		return false;
	},

	extraDel: function() {
		$(this.extraType == 'meal' ? 'meal_tbl' : 'spl_tbl').deleteRow(app.row);
		this.sumAll();
	},

	sumAll: function() {
		// extras
		var meal_price = 0.0;
		var spl_price = 0.0;
		var mealTbl = $('meal_tbl');
		var splTbl = $('spl_tbl');
		var frm = document.forms.avlFrm;

		if ( mealTbl.rowCount ) {
			forEach(mealTbl.getRows(), function(r) {
				meal_price += r.cells[r.cells.length-1].innerHTML.parseCurrency();
				r = null;
			});
		}
		if ( splTbl.rowCount ) {
			forEach(splTbl.getRows(), function(r) {
				spl_price += r.cells[r.cells.length-1].innerHTML.parseCurrency();
				r = null;
			});
		}
		mealTbl = null;
		splTbl = null;

		var total_price = this.roomPrice + meal_price + spl_price;

		frm.price.value = total_price;
		$('sum_meal_amount').innerHTML = meal_price.currencyFormat() + " &euro;";
		$('sum_spl_amount').innerHTML = spl_price.currencyFormat() + " &euro;";
		$('sum_room_amount').innerHTML = this.roomPrice.currencyFormat() + " &euro;";
		$('sum_amount').innerHTML = total_price.currencyFormat() + " &euro;";
		$('sum_downpay').innerHTML = (total_price*this.advance/100.00).currencyFormat() + " &euro;";
	},
	*/

	// SERVICE ADDITION
	addService: function() {
		var frm = document.forms.avlFrm;
		if ( !passengers.validate(frm, true) ) {
			return;
		}

		/*
		var mealStr = new StringBuilder();
		var splStr = new StringBuilder();
		var mealTbl = $('meal_tbl');
		var splTbl = $('spl_tbl');
		if ( mealTbl.rowCount ) {
			forEach(mealTbl.getRows(), function(r) {
				if ( r.getAttribute('extra_substr') ) {
					mealStr.append(r.getAttribute('extra_substr'));
				}
			});
		}
		if ( splTbl.rowCount ) {
			forEach(splTbl.getRows(), function(r) {
				if ( r.getAttribute('extra_substr') ) {
					splStr.append(r.getAttribute('extra_substr'));
				}
			});
		}
		mealTbl = null;
		splTbl = null;

		frm.meal_str.value = mealStr.toString('');
		frm.spl_str.value = splStr.toString('');
		*/

		ajax.queue(this.bkHnd, "htl_bk");
		ajax.post(frm);
		ajax.loadXML("bookings/add_service.cfm", "htl_bk", "Adding service to shopping cart.");
		frm=null;
	},

	bkHnd: function() {
		if ( ajax.checkXMLResult( "htl_bk", true ) ) {
			nav("cart.cfm");
		} else {
			ajax.checkXMLResult("htl_bk");
		}
	}
};