//
// Convenient functions for dealing with search forms
//
// Date formats MUST be MM/DD/YYYY
//
// Depends only on jQuery and the JS dom/date object. Can be used outside
// of hotel_lib
// 
// - You should still fill in the value="" attributes of arrive/depart
//   fields with appropriate cookie values or defaults; this doesn't do that
//
// - If you have fields named (name=, not id=) 'arrivalMonth',
//   'departureMonth', 'arrivalDay', 'departureDay', this code will attempt
//   to fill them in with IAN-appropriate values
//
// - This won't set up jquery ui's datepicker or even assume you are using
//   it. Handle that part on your own.
//   
// Annoying bugs:
// 
// - Abuses a global variable instead of proper this-savvy bind()ing

// add leading zero
function alz(val, len) {
	var val = val.toString();
	while (val.length < len)
		val = "0" + val;
	return val;
}

function FT_SearchForm(form_id, arrive_id, depart_id) {
	this.form = form_id;
	this.arr = arrive_id;
	this.dep = depart_id;
	_ft_searchform = this;
	_ft_searchform.init();
}

// bind initial behaviors; defer all processing til later
FT_SearchForm.prototype.init = function() {
	me = _ft_searchform;
	me.$form = $('#'+(me.form));
	me.$arr = $('#'+(me.arr));
	me.$dep = $('#'+(me.dep));
	me.$form.submit(me.form_submit);
	me.$arr.change(me.arrive_changed);
	me.$dep.change(me.depart_changed);
}

FT_SearchForm.prototype.arrive_changed = function() {
	me = _ft_searchform;
	var a;
	if ((a = me.$arr.val()) == '')
		return;
	var a_date = new Date(a);
	var today = new Date();
	if (a_date <= today) {
		alert('You cannot arrive before today');
		me.$arr.trigger('focus');
		return false;
	}
	me.set_depart_from_arrive();
	return true;
}

FT_SearchForm.prototype.depart_changed = function() {
	me = _ft_searchform;
	var d;
	if ((d = me.$dep.val()) == '')
		return;
	var d_date = new Date(d);
	var today = new Date();
	if (d_date <= today) {
		alert('You cannot depart before today');
		me.set_depart_from_arrive();
		me.$dep.trigger('focus');
		return false;
	}
	var a;
	if ((a = me.$arr.val()) == '')
		return;
	var a_date = new Date(a);
	if (d_date <= a_date) {
		alert('You cannot depart before you arrive');
		me.set_depart_from_arrive();
		me.$dep.trigger('focus');
		return false;
	}
	return true;
}

FT_SearchForm.prototype.form_submit = function() {
	me = _ft_searchform;
	if (!(me.$arr.val())) {
		me.$arr.trigger('focus');
		return false;
	}
	if (!(me.$dep.val())) {
		me.$dep.trigger('focus');
		return false;
	}
	me.update_ian_values();
}

FT_SearchForm.prototype.set_depart_from_arrive = function() {
	me = _ft_searchform;
	var a;
	if ((a = me.$arr.val()) == '')
		return;
	var a_date = new Date(a);
	a_date.setDate(a_date.getDate() + 3);

	var new_date = [
		alz(a_date.getMonth()+1, 2), 
		alz(a_date.getDate(), 2), 
		a_date.getFullYear()];
	me.$dep.val(new_date.join('/'));
}

FT_SearchForm.prototype.update_ian_values = function() {
	me = _ft_searchform;
	var f = me.$form.get(0);

	var a = me.$arr.val().split('/');
	if (!a) return;
	f.elements.arrivalMonth.value = parseInt(a[0], 10)-1;
	f.elements.arrivalDay.value = parseInt(a[1], 10);
	
	var d = me.$dep.val().split('/');
	if (!d) return;
	f.elements.departureMonth.value = parseInt(d[0], 10)-1;
	f.elements.departureDay.value = parseInt(d[1], 10);
}


