page = {

	oth_code: null,
	per: null,
	sales: 0.0,
	dateSt: null,
	dateEn: null,

	init: function() {
		// if quick search, init form and run avl
		if ( isset(app.uri.queryKey.quick) ) {
			this.search(document.forms.searchFrm);
		}

		var frm = document.forms.bkFrm;
		Event.on([frm.units,frm.days,frm.pax,frm.from], "change", this.pricing, this, true);
	},

	// Availability
	search: function(frm) {
		if ( !hasValue(frm.fromd_st) ) { return form.error("Please input a date.", frm.fromd_st); }
		if ( app.today.dayDiff(getValue(frm.fromd_st).toDate()) < 1 ) { return form.error("Please select a date after " + app.today.format()); }
		
		dom.hide('step-2');

		ajax.post(frm);
		ajax.queue(dom.show.delegate(dom, ['rst-area']), $('result-tbl').action);
		$('result-tbl').addRows(frm, null, "Searching for other services.");
		return false;
	},

	sel: function() {
		this.oth_code = app.row.getAttribute('oth_code');
		this.per = app.row.getAttribute('per');
		this.sales = parseFloat(app.row.getAttribute('sales'));

		this.dateSt = app.row.cells[2].innerHTML.toDate();
		this.dateEn = app.row.cells[3].innerHTML.toDate();

		// handle pricing form
		frm = document.forms.bkFrm;

		// default values
		frm.from.value = document.forms.searchFrm.fromd_st.value;
		frm.pax.value=frm.days.value=frm.units.value=1;
		frm.price.value = this.sales.currencyFormat();

		// enable applicable fields
		switch( this.per ) {
		case 'BOOK':
			dom.hide('sel-units','sel-days');
			break;
		case 'DAY':
			dom.hide('sel-units');
			dom.show('sel-days');
			break;
		case 'PAX':
			dom.hide('sel-units','sel-days');
			break;
		case 'PAXDAY':
			dom.hide('sel-units');
			dom.show('sel-days');
			break;
		case 'UNIT':
			dom.show('sel-units');
			dom.hide('sel-days');
			break;
		default:
			return form.error("Unsupported pricing type. Cannot continue.");
		}

		dom.show('step-2');
	},

	pricing: function() {
		// handle pricing changes
		var frm = document.forms.bkFrm;

		var dateInd = frm.from.value.toDate();
		if ( dateInd < this.dateSt || dateInd > this.dateEn )  {
			frm.from.value = this.dateSt.format();
			return form.error("Please select a date between "+ this.dateSt.format() +" and "+ this.dateEn.format(), frm.from);
		}

		switch( this.per ) {
		case 'PAX':
			frm.price.value = (this.sales * parseInt(frm.pax.value, 10)).currencyFormat();
			break;
		case 'DAY':
		case 'PAXDAY':
			var d = parseInt(frm.days.value, 10);
			var dPeriod = dateInd.format().toDate();
			dPeriod.dayAdd(d);
			if ( dPeriod > this.dateEn ) {
				var dayDiff = dateInd.dayDiff(this.dateEn);
				frm.days.value = dayDiff;
				return form.error("You cannot select more than "+ dayDiff +" days. Search for a longer date period for more days", frm.days);
			}
			frm.price.value = ( this.per == 'DAY' ) ? (this.sales * d).currencyFormat() : (this.sales * d * parseInt(frm.pax.value, 10)).currencyFormat();
			break;
		case 'BOOK':
		case 'UNIT':
			frm.price.value = (this.sales * parseInt(units.value, 10)).currencyFormat();
			break;
		}
	},

	// Booking
	bkService: function(frmEl) {
		// direct book
		ajax.post(frmEl);
		ajax.queue(this.bkHnd, "srvBk");
		ajax.loadXML("bookings/add_service.cfm?oth_code="+this.oth_code+"&per="+this.per, "srvBk", "Adding service to shopping cart.");
	},

	bkHnd: function() {
		if ( !ajax.checkXMLResult( "srvBk", true ) ) {
			ajax.checkXMLResult("srvBk");
			return false;
		}

		nav("cart.cfm");
	}

};