// 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;

// 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)
{
	daysInMonth(document.getElementById(asc_arrivalDateDayElId),document.getElementById(asc_arrivalDateMonthElId),document.getElementById(asc_arrivalDateYearElId));

	daysInMonth(document.getElementById(asc_departureDateDayElId),document.getElementById(asc_departureDateMonthElId),document.getElementById(asc_departureDateYearElId));    

}

function asc_onArrDateChanged(date)
{
	daysInMonth(document.getElementById(asc_arrivalDateDayElId),document.getElementById(asc_arrivalDateMonthElId),document.getElementById(asc_arrivalDateYearElId));

	daysInMonth(document.getElementById(asc_departureDateDayElId),document.getElementById(asc_departureDateMonthElId),document.getElementById(asc_departureDateYearElId));
	
	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);
}


function daysInMonth(day, month, year) 
{
	var maxDays = 31;
	var selectedDay = day.selectedIndex + 1;
	var selectedMonth = month.selectedIndex + 1;
	var year = year[year.selectedIndex].value;

	switch( selectedMonth )
	{

		case 4:
		case 6:
		case 9:
		case 11:
			maxDays = 30;
			break;

		 case 2:
			maxDays = isLeapYear( year ) ? 29 : 28;
			break;

		default:
			break;
    }
    if(selectedDay > maxDays)
    {
		day.selectedIndex = (maxDays-1);
    }
}

 

function isLeapYear (year)
{
	return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

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;
 }
 
 function asc_datePopulate(arrDate, depDate)
 {
 	var arrDay = document.getElementById(asc_arrivalDateDayElId).value;
	var arrMonth = document.getElementById(asc_arrivalDateMonthElId).value;
	var arrYear = document.getElementById(asc_arrivalDateYearElId).value;
		
	var depDay = document.getElementById(asc_departureDateDayElId).value;
	var depMonth = document.getElementById(asc_departureDateMonthElId).value;
	var depYear = document.getElementById(asc_departureDateYearElId).value;
	
	document.getElementById(arrDate).value = arrDay + "/" + arrMonth + "/" + arrYear;
	document.getElementById(depDate).value = depDay + "/" + depMonth + "/" + depYear;
 }

function asc_togglePanel( headerId, panelId ) {
	var header = document.getElementById(headerId);
	var panel = document.getElementById(panelId);
	if ( panel ) {
		if ( panel.style.display != 'block' ) {
			panel.style.display = 'block';
			header.className = "panel_bookingoptions_header_on";
		} else {
			panel.style.display = 'none';
			header.className = "panel_bookingoptions_header";
		}
	}
}