// Script: Search panel selection and validation functions

document.write('<link href="http://www.macdonaldhotels.co.uk/sharedhotelsitefiles/css/javascript.css" rel="stylesheet" type="text/css" media="all" />');

var asc_departureDateElId;
var asc_arrivalDateElId;


// Summary: Called externally to initialise ids of date select controls
function asc_setDateMenuElementIds(arrivalDateElId, departureDateElId)
{
    asc_arrivalDateElId = arrivalDateElId;
    asc_departureDateElId = departureDateElId;
}

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_arrivalDateElId);
	var departureDate = getSelectedDate(asc_departureDateElId);
	
	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_departureDateElId);
}

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(asc_arrivalDateElId);
	dtDep = form_getDateFromHTMLDateMenu(asc_departureDateElId);
	
	if (!(document.all&&document.getElementById))
	{
		frmSimpleSearch = document.getElementById('frmSimpleSearch');
	}
	
	if (dtArr == null) {
		alert('Please select a valid arrival date.');
		document.getElementById(asc_arrivalDateElId).focus();
		return false;
	}
	if (dtDep == null) {
		alert('Please select a valid departure date.');
		document.getElementById(asc_departureDateElId).focus();
		return false;
	}
	if (dtDep <= dtArr) {
		alert('Please select a departure date that is later than the arrival date.');
		document.getElementById(asc_departureDateElId).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, dateElId) {
	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(asc_arrivalDateElId);
	dtDep = form_getDateFromHTMLDateMenu(asc_departureDateElId);
	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() + 1);
		form_setHTMLDateMenuDate(asc_departureDateElId, 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(asc_arrivalDateElId, dtArrDate);
	form_setHTMLDateMenuDate(asc_departureDateElId, dtDepDate);
}

//relies on getFieldDate in datepicker.js
function form_getDateFromHTMLDateMenu (dateElId)
{
	ctlDate = document.getElementById(dateElId);
	var dateString = ctlDate.value;
	var objDate;
	if (dateString == '')
	{
	    objDate = null;
	}
	else
	{
		objDate = getFieldDate(dateString);
	}
	return objDate;
}

// Purpose: Updates date menu to given date
// Remarks: Expects date menu generated by server side 
// form_createHTMLDateMenu function
// Output: None
//relies on getDateString  in datepicker.js
function form_setHTMLDateMenuDate (dateElId, date)
{

	var ctlDate = document.getElementById(dateElId);

	if (date == null)
	{
        ctlDate.value = '';
	}
	else
	{
        ctlDate.value = getDateString(date);
	}
}



//Rooms

function showRoomOptions(roomCountElId) {
	var selRooms = document.getElementById(roomCountElId);
	var roomCount = selRooms.options[selRooms.selectedIndex].value;
	for(var i=1; i<=5; i++)
	{
		var display;
		if (i <= roomCount)
		{
			display = "";
		}
		else
		{
			display = "none";
		}
		
		document.getElementById('room'+i).style.display = display;
	}
}

//Property functions

function propertyList()
{
    this.properties = [];
}

function propertyInfo(code, name)
{
    this.code  = code;
    this.name = name;
    this.searchRegions = [];
}

propertyList.prototype.addProperty = function(property) {
    this.properties.push(property);
}

propertyInfo.prototype.addRegion = function(regionCode)
{
	var region = new Object();
    region.code = regionCode;
    this.searchRegions.push(region);
}

populateProperties = function(locationElId, propertyElId)
{
    var selectLocation = document.getElementById(locationElId);
    var selectProperty = document.getElementById(propertyElId);
    var regionCode = selectLocation.options[selectLocation.selectedIndex].value;
    var regionName = selectLocation.options[selectLocation.selectedIndex].text;
    if (regionCode != '')
    {
        
        selectProperty.options.length = 0;
        selectProperty.options[selectProperty.options.length] = new Option('All Macdonald Hotels in ' + regionName, '');
        for(var index = 0; index < properties.properties.length; index++)
	    {
	        currentProperty = properties.properties[index];
            for(var i = 0; i < currentProperty.searchRegions.length; i++)
            {
                if (currentProperty.searchRegions[i].code == regionCode)
                {
                    //add this property to drop down list
                    selectProperty.options[selectProperty.options.length] = new Option(currentProperty.name, currentProperty.code);
                }
            }
	    }
    }
    else
    {
        selectProperty.options.length = 0;
        selectProperty.options[selectProperty.options.length] = new Option('Any Macdonald Hotel', '');
        for(var index = 0; index < properties.properties.length; index++)
	    {
	        currentProperty = properties.properties[index];
            selectProperty.options[selectProperty.options.length] = new Option(currentProperty.name, currentProperty.code);
	    }
    
    }
}


