// Script: Search panel selection and validation functions

var asc_departureDateDayElId;
var asc_departureDateMonthElId;
var asc_departureDateYearElId;

var asc_arrivalDateDayElId;
var asc_arrivalDateMonthElId;
var asc_arrivalDateYearElId;

var asc_defaultStayLength;

// Summary: Called externally to initialise ids of date select controls
function asc_setDateMenuElementIds(arrivalDateDayElId, arrivalDateMonthElId, arrivalDateYearElId, departureDateDayElId, departureDateMonthElId, departureDateYearElId)
{
	
	asc_arrivalDateDayElId = arrivalDateDayElId;
	asc_arrivalDateMonthElId = arrivalDateMonthElId;
	asc_arrivalDateYearElId = arrivalDateYearElId;
	
	asc_departureDateDayElId = departureDateDayElId;
	asc_departureDateMonthElId = departureDateMonthElId;
	asc_departureDateYearElId = departureDateYearElId;

}

function asc_onDepDateChanged(date)
{
	
}

function asc_onArrDateChanged(date)
{
	asc_checkValidDepartureDate();
}

// Summary: Changes departure date to be 1 day after arrival date when newly
// selected arrival date is later than current departure date or far in
// advance of departure date
function asc_checkValidDepartureDate()
{
	// Get currently selected dates via datepicker.js
	var arrivalDate = getSelectedDate(asc_arrivalDateDayElId, asc_arrivalDateMonthElId, asc_arrivalDateYearElId);
	var departureDate = getSelectedDate(asc_departureDateDayElId, asc_departureDateMonthElId, asc_departureDateYearElId);
	
	if (arrivalDate >= departureDate)
	{
		asc_updateSelectedDepartureDate(arrivalDate);
	}
	else
	{
		var inRangeDepartureDate = new Date(departureDate);
		inRangeDepartureDate.setDate(inRangeDepartureDate.getDate() -14);
		if (arrivalDate < inRangeDepartureDate)
		{
			// Arrival date more than 2 weeks in advance of departure date
			asc_updateSelectedDepartureDate(arrivalDate);
		}
	}
}

function asc_updateSelectedDepartureDate(arrivalDate)
{
	var defaultIntervalDays = 1;
	var newDepartureDate = new Date(arrivalDate);
	newDepartureDate.setDate(newDepartureDate.getDate() + defaultIntervalDays);
	
	// Update selected date via datepicker.js
	setSelectedDate(newDepartureDate, asc_departureDateDayElId, asc_departureDateMonthElId, asc_departureDateYearElId);
}

var asc_searchClicked = false;
	 
 // Summary: The return value of this function should be returned
 // within the onclick event of the button on the search panel. It 
 // will return true the first time it is called to indicate that
 // the search button has not yet been clicked. It will return false
 // in subsequent calls to indicate that the search button has already
 // been clicked.
 function asc_isSearchEnabled()
 {
	var enabled = !asc_searchClicked;
	if (!enabled)
	{
		alert("Search in progress. Please wait...\n\nPlease refresh the page if you have been waiting for more than 45 seconds.");
	}
	// Track that button has been clicked
	asc_searchClicked = true;
	return enabled;
 }


// Script: Search panel selection and validation functions

function validateSearchForm (form) {
	var strArrDateMenuPrefix;
	var strDepDateMenuPrefix;
	var dtArr;
	var dtDep;

	// Base names of 3-menu date selection
	strArrDateMenuPrefix = 'ctl00_Main_ctlSearch_ctlArrDate_ddl';
	strDepDateMenuPrefix = 'ctl00_Main_ctlSearch_ctlDepDate_ddl';

	// Date menus
	dtArr = form_getDateFromHTMLDateMenu(form, strArrDateMenuPrefix);
	dtDep = form_getDateFromHTMLDateMenu(form, strDepDateMenuPrefix);
	if (dtArr == null) {
		alert('Please select a valid arrival date.');
		frmSimpleSearch.arrDateDay.focus();
		return false;
	}
	if (dtDep == null) {
		alert('Please select a valid departure date.');
		frmSimpleSearch.depDateDay.focus();
		return false;
	}
	if (dtDep <= dtArr) {
		alert('Please select a departure date that is later than the arrival date.');
		frmSimpleSearch.depDateDay.focus();
		return false;
	}

	// Adult / child count
	if (frmSimpleSearch.adultCount1.options[frmSimpleSearch.adultCount1.selectedIndex].value == 0
		&& frmSimpleSearch.childCount1.options[frmSimpleSearch.childCount1.selectedIndex].value == 0) {
		alert('Please select one or more guests.');
		frmSimpleSearch.adultCount.focus();
		return false;
	}

	return true;
}

function onArrivalDateChange (select) {
	ensureDepDateValid();
}

function onDepartureDateChange (select) {
	return true;
}

function sdoToolTip () {
	return true;
}

function shideToolTip () {
	return true;
}

// Purpose: Sets departure date to valid date
function ensureDepDateValid () {
	var strArrDateMenuPrefix;
	var strDepDateMenuPrefix;
	var dtArr;
	var dtDep;
	var dtNewDep;
	var frmSearch;

	// Base names of 3-menu date selection
	strArrDateMenuPrefix = 'ctl00_Main_ctlSearch_ctlArrDate_ddl';
	strDepDateMenuPrefix = 'ctl00_Main_ctlSearch_ctlDepDate_ddl';
	frmSearch = document.aspnetForm;

	// Get dates from menus
	dtArr = form_getDateFromHTMLDateMenu(frmSearch, strArrDateMenuPrefix);
	dtDep = form_getDateFromHTMLDateMenu(frmSearch, strDepDateMenuPrefix);
	if (dtDep <= dtArr || dtDep == null) {
		// Departure date earlier or same as arrival so set 1 day ahead
		dtNewDep = new Date();
		dtNewDep.setYear(dtArr.getFullYear());
		dtNewDep.setMonth(dtArr.getMonth());
		dtNewDep.setDate(dtArr.getDate() + asc_defaultStayLength);
		form_setHTMLDateMenuDate(frmSearch, strDepDateMenuPrefix, dtNewDep);
	}
}

// Sets date menus to default dates
function initDateMenus () {
	var dtArrDate;
	var dtDepDate;

	dtArrDate = new Date(); // current date
	dtDepDate = new Date();
	dtDepDate.setYear(dtArrDate.getFullYear());
	dtDepDate.setMonth(dtArrDate.getMonth());
	dtDepDate.setDate(dtArrDate.getDate() + 1);
	form_setHTMLDateMenuDate(document.frmSimpleSearch, "arrDate", dtArrDate);
	form_setHTMLDateMenuDate(document.frmSimpleSearch, "depDate", dtDepDate);
}

function form_getDateFromHTMLDateMenu (form, menuBaseName)
{
	var selDay;
	var selMonth;
	var selYear;
	var intDay;
	var intMonth;
	var strMonth;
	var intYear;
	var arrMonthName;
	var strDate;
	var objDate

	arrMonthName = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	selDay = form[menuBaseName + 'Day'];
	selMonth = form[menuBaseName + 'Month'];
	selYear = form[menuBaseName + 'Year'];
	intDay = selDay.options[selDay.selectedIndex].value;
	intMonth = selMonth.options[selMonth.selectedIndex].value;
	intYear = selYear.options[selYear.selectedIndex].value;
	if (intDay == '' || intMonth == '' || intYear == '')
	{
		objDate = null;
	}
	else
	{
		strMonth = arrMonthName[intMonth - 1];
		strDate = intDay + ' ' + strMonth + ' ' + intYear;
		objDate = new Date(strDate);
	}
	return objDate;
}

// Purpose: Sets selected option within select item to first option containing specified value
function form_setSelectSelectedIndexByValue (select, value)
{
	var i;
	var blnFound;

	i = 0;
	blnFound = false;
	while (i < select.options.length)
	{
		if (select.options[i].value == value)
		{
			blnFound = true;
			break;
		}
		i++;
	}
	if (!blnFound) i = 0;
	select.selectedIndex = i;

}

// Purpose: Updates date menu to given date
// Remarks: Expects date menu generated by server side 
// form_createHTMLDateMenu function
// Output: None
function form_setHTMLDateMenuDate (form, menuBaseName, date)
{
	var selDay;
	var selMonth;
	var selYear;
	var intDay;
	var intMonth;
	var strMonth;
	var intYear;
	var i;

	selDay = form[menuBaseName + 'Day'];
	selMonth = form[menuBaseName + 'Month'];
	selYear = form[menuBaseName + 'Year'];

	if (date == null)
	{
		// Reset menus to blank
		selDay.selectedIndex = 0;
		selMonth.selectedIndex = 0;
		selYear.selectedIndex = 0;
	}
	else
	{
		// Set menu values for date
		intDay = date.getDate();
		intMonth = date.getMonth() + 1;
		intYear = date.getFullYear();
		form_setSelectSelectedIndexByValue(selDay, intDay);
		form_setSelectSelectedIndexByValue(selMonth, intMonth);
		form_setSelectSelectedIndexByValue(selYear, intYear);
	}
}