page = {

	bind: {
		avlFrm: {
			cty_code: {filter:"htl"}
		}
	},

	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;
		Event.on(frm.rooms, 'change', this.dstChange);
		if ( $$('select', 'dst-tbl').length/4 != frm.rooms.value ) {
			frm.rooms.value = $$('select', 'dst-tbl').length/4;
		}

		if ( isset(app.uri.queryKey.quick) ) {	// if quick search, init form and run avl
			setTimeout(this.avl.delegate(this, [frm]), 0);
		}

		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) && !getValue(frm.htl_name).length ) { 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()) < 0 ) { return form.error("Please select a date after " + app.today.dayAdd(-1).format(), frm.fromd); }
		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, frm.action + "?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.fromd.value.toDate().dayAdd(frm.nights.value).format();
			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;
		}

		var price 		= parseFloat(row.getAttribute('price')),
			downpayment = price > 0 ? parseFloat(row.getAttribute('downpayment')) : 0.0,
			advance 	= downpayment > 0 ? ( price * downpayment / 100.0 ) : 0.0;

		$('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_amount').innerHTML = price.currencyFormat() + ' &euro;';
		$('sum_downpay').innerHTML = downpayment.currencyFormat() + '%';
		$('sum_advance').innerHTML = advance.currencyFormat() + ' &euro';
		
		var sum_extras = row.cells[6].innerHTML;
		if ( sum_extras.length ) {
			dom.show('sum_included');
			$('sum_extras').innerHTML = sum_extras;
		} else {
			dom.hide('sum_included');
		}

		passengers.list(frm, true);
		this.step(3);

		row=frm=statObj=null;
	},

	addService: function() {
		var frm = document.forms.avlFrm;
		if ( !passengers.validate(frm, true) ) {
			return;
		}

		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");
		}
	}

};