//// Search form presets handling	////

var cfgMaxChildren = 8;

// Show individual airports after an airport group has been selected
function changeAirports(element, type, keepFirst)
{
	// Get element for sub-menu
	var subElement;
	var subList;
	if (type == 'dep_airport_groups')
	{
		subElement = eval('document.forms.' + element.form.name + '.airportfromid');
		subList = arrDepAirports;
	}
	else if (type == 'dest_airport_groups')
	{
		subElement = eval('document.forms.' + element.form.name + '.airporttoid');
		subList = arrDestAirports;
	}
	else if (type == 'dest_resort_groups')
	{
		subElement = eval('document.forms.' + element.form.name + '.resorttoid');
		subList = arrDestResorts;
	}
	if (subElement != undefined)
	{
	// Id for the current main menu selection, e.g. airport group id
	var elementId = element.value;

	// Clear out elements (if keepFirst is 1, the first item, probably "Any", will be kept)
	subElement.options.length = keepFirst;

	// Create select options for sub-elements matching current selection
	for (var i = 0; i < subList.length; i++)
	{
		if (subList[i][2] == elementId)
		{
			subElement[subElement.length] = new Option
			(
				subList[i][1],
				subList[i][0]
			);
		}
	}

	if(subElement.length > 1)
	{
		subElement.disabled = false;
	}
	else 
	{
		subElement.disabled = true;
	}
	}

}

function checkQuickSearch(objForm, mustHaveDestination, mustHaveDeparture)
{
	var len = 0;
		
	// This checks the user is not simply moving between 'packages' and 'flights' search
	
	if(objForm.boardbasis)
	{
		if(objForm.boardbasis.value == -1)
		{
			alert("Please select a board basis.");
			return false;	
		}
	}
	
	if(objForm.airporttoid)
	{
		len = objForm.airporttoid.value.length;
		if ( objForm.airporttoid.value == '-1' )
		{
			len = 0;
		}
			
		if( mustHaveDestination && (len == 0) )
		{
			alert("Please select a destination airport");
			return false;
		}
		
		if(objForm.airportgroupfromid)
		{
			len = len + objForm.airportgroupfromid.value.length;
		}
		else if(objForm.airportcombinedfromid)
		{
			len = len + objForm.airportcombinedfromid.value.length;
		}	
		
		if( len == 0 )
		{
			alert("Please select a departure or destination area");
			return false;
		}
	}
	else if(objForm.resortgroupid)
	{
		len = objForm.resortgroupid.value.length + objForm.resorttoid.value.length;
		if(len == 0)
		{
			alert("Please select a country or resort");
			return false;
		}
	}
	
	if (mustHaveDeparture)
	{
		var error = '';
			
		if(objForm.airportgroupfromid && objForm.airportgroupfromid.value == '')
		{
			error = error + "Please select where you are travelling from.\n";	
		}
		
		if(objForm.airportfromid && objForm.airportfromid.value == '')
		{
			error = error + "Please choose a departure airport.\n";	
		}
		
		if(objForm.airportcombinedfromid && objForm.airportcombinedfromid.value.substring(0,1) != '|')
		{
			error = error + "Please choose a departure airport.\n";	
		}
		
		if(error.length > 0)
		{
			alert(error);
			return false;
		}
	}
	
	return true;
}


// Store form values in a cookie for when user clicks 'back'
function saveFormValues(objForm, RESERVED, ignoreFormErrors, mustHaveDestination)
{
	// load previously stored values, if any
	var cookies = unescape(document.cookie);
	var indexSearch = 'FormValues' + objForm.name + '=';

	var pos = cookies.indexOf(indexSearch);
	if (pos != -1)
	{
		var start = pos + 10 + objForm.name.length + 1; // 10 is the length of the string 'FormValues'
	
		var end = cookies.indexOf(';', start);
		if (end == -1)
		{
			end = cookies.length;
		}

		var cookie = unescape(cookies.substring(start, end));
		var parts = cookie.split(':');
	}
	else
	{
		var parts = new Array(20);
	}
	
	var airportfromgroup = parts[0];
	var airportfrom = parts[1];
	var airporttogroup = parts[2];
	var airportto = parts[3];
	var resort = parts[4];
	var resorttogroup = parts[5];
	var resortto = parts[6];
	var day = parts[7];
	var monthyear = parts[8];
	var daysplusminus = parts[9];
	var nights  = parts[10];
	var price = parts[11];
	var boardbasis = parts[12];
	var rating = parts[13];
	var includeaoa = parts[14];
	var selectedlifestyles = parts[15];
	var adults = parts[16];
	var infants = parts[17];
	var children = parts[18];
	var numrooms = parts[19];
	
	if( !ignoreFormErrors && !checkQuickSearch(objForm, mustHaveDestination) )
	{
		return false;
	}

	
	// Departure
	if(objForm.airportgroupfromid)
	{
		airportfromgroup = objForm.airportgroupfromid.value;
	}
	
	if(objForm.airportfromid)
	{
		airportfrom = objForm.airportfromid.value;
	}
	
	// Destination:
	if(objForm.airportgrouptoid)
	{
		airporttogroup = objForm.airportgrouptoid.value;
	}
	
	if(objForm.airporttoid)
	{
		airportto = objForm.airporttoid.value;
	}
	else if(objForm.airportcombinedtoid)
	{
		airportto = objForm.airportcombinedtoid.value;
	}
	
	if(objForm.resortid)
	{
		// for resort as well as airport, not instead
		resort = objForm.resortid.value;
	}
	
	// Destination (by resort instead of airport):
	if(objForm.resortgroupid)
	{
		resorttogroup = objForm.resortgroupid.value;
	}
	
	if(objForm.resorttoid)
	{
		resortto = objForm.resorttoid.value;
	}
	
	
	// Departure date:
	if(objForm.departure)
	{
		day = objForm.departure.value;	
	}
	if(objForm.departure_day)
	{
		day = objForm.departure_day.value;
	}
	if(objForm.departure_monthyear)
	{
		monthyear = objForm.departure_monthyear.value;
	}
	if(objForm.depvariance && !objForm.depvariance.disabled)
	{
		daysplusminus = objForm.depvariance.value;
	}
	
	// Duration
	if(objForm.duration)
	{
		nights = objForm.duration.value;
	}
	
	// Price
	if(objForm.price)
	{
		price = objForm.price.value;
	}
	
	// Package/Accom-specific
	if(objForm.boardbasis)
	{
		boardbasis = objForm.boardbasis.value;
	}
	if(objForm.rating)
	{
		rating = objForm.rating.value;
	}
	if(objForm.incaoa)
	{
		includeaoa = objForm.incaoa.checked ? 'true' : 'false';
	}
	
	// Lifestyle criteria
	for(var el in objForm.elements)
	{
		if (
			objForm.elements[el]
			&& objForm.elements[el].name
			&& typeof(objForm.elements[el].name) == "string"
			&& objForm.elements[el].name.indexOf('lifestyle_') != -1
			&& objForm.elements[el].checked
		)
		{
			selectedlifestyles = selectedlifestyles + ',' + objForm.elements[el].name;
		}
	}
	
	// Passengers
	if(objForm.adults)
	{
		adults = objForm.adults.value;	
	}
	
	if(objForm.infants)
	{
		infants = objForm.infants.value;	
	}
	
	if(objForm.children && typeof(objForm.children.value)=="string") // IE adds a 'children' object that's something else
	{
		children = "";
		for(var i = 1; i <= objForm.children.value; i++)
		{
			children += eval("objForm.child" + i + ".value");
			if(i != objForm.children.value)
			{
				children += "|";	
			}
		}
	}
	
	// Number of rooms
	if(objForm.numrooms)
	{
		numrooms = objForm.numrooms.value;	
	}

	var cookieString = escape(''
		+ airportfromgroup + ':'
		+ airportfrom + ':'
		+ airporttogroup + ':'
		+ airportto + ':'
		+ resort + ':'
		+ resorttogroup + ':'
		+ resortto + ':'
		+ day + ':'
		+ monthyear + ':'
		+ daysplusminus + ':'
		+ nights  + ':'
		+ price + ':'
		+ boardbasis + ':'
		+ rating + ':'
		+ includeaoa + ':'
		+ selectedlifestyles + ':'
		+ adults + ':'
		+ infants + ':'
		+ children + ':'
		+ numrooms
		
	);
	
	document.cookie = 'FormValues' + objForm.name + '=' + cookieString;
	return true;
}

// Store form values in a cookie for when user clicks 'back'
function saveFormValues2(objForm, RESERVED, ignoreFormErrors, mustHaveDestination, mustHaveDeparture)
{
	debugger;
	// load previously stored values, if any
	var cookies = unescape(document.cookie);
	var indexSearch = 'FormValues' + objForm.name + '=';

	var pos = cookies.indexOf(indexSearch);
	if (pos != -1)
	{
		var start = pos + 10 + objForm.name.length + 1; // 10 is the length of the string 'FormValues'
	
		var end = cookies.indexOf(';', start);
		if (end == -1)
		{
			end = cookies.length;
		}

		var cookie = unescape(cookies.substring(start, end));
		var parts = cookie.split(':');
	}
	else
	{
		var parts = new Array(20);
	}
	
	var airportfromgroup = parts[0];
	var airportfrom = parts[1];
	var airporttogroup = parts[2];
	var airportto = parts[3];
	var resort = parts[4];
	var resorttogroup = parts[5];
	var resortto = parts[6];
	var day = parts[7];
	var monthyear = parts[8];
	var daysplusminus = parts[9];
	var nights  = parts[10];
	var price = parts[11];
	var boardbasis = parts[12];
	var rating = parts[13];
	var includeaoa = parts[14];
	var selectedlifestyles = parts[15];
	var adults = parts[16];
	var infants = parts[17];
	var children = parts[18];
	var numrooms = parts[19];
	
	if( !ignoreFormErrors && !checkQuickSearch(objForm, mustHaveDestination, mustHaveDeparture) )
	{
		return false;
	}

	
	// Departure
	if(objForm.airportgroupfromid)
	{
		airportfromgroup = objForm.airportgroupfromid.value;
	}
	
	if(objForm.airportfromid)
	{
		airportfrom = objForm.airportfromid.value;
	}
	
	// Destination:
	if(objForm.airportgrouptoid)
	{
		airporttogroup = objForm.airportgrouptoid.value;
	}
	
	if(objForm.airporttoid)
	{
		airportto = objForm.airporttoid.value;
	}
	else if(objForm.airportcombinedtoid)
	{
		airportto = objForm.airportcombinedtoid.value;
	}
	
	if(objForm.resortid)
	{
		// for resort as well as airport, not instead
		resort = objForm.resortid.value;
	}
	
	// Destination (by resort instead of airport):
	if(objForm.resortgroupid)
	{
		resorttogroup = objForm.resortgroupid.value;
	}
	
	if(objForm.resorttoid)
	{
		resortto = objForm.resorttoid.value;
	}
	
	// Departure date:
	if(objForm.departure_day)
	{
		day = objForm.departure_day.value;
	}
	if(objForm.departure_monthyear)
	{
		monthyear = objForm.departure_monthyear.value;
	}
	if(objForm.depvariance && !objForm.depvariance.disabled)
	{
		daysplusminus = objForm.depvariance.value;
	}
	
	// Duration
	if(objForm.duration)
	{
		nights = objForm.duration.value;
	}
	
	// Price
	if(objForm.price)
	{
		price = objForm.price.value;
	}
	
	// Package/Accom-specific
	if(objForm.boardbasis)
	{
		boardbasis = objForm.boardbasis.value;
	}
	if(objForm.rating)
	{
		rating = objForm.rating.value;
	}
	if(objForm.incaoa)
	{
		includeaoa = objForm.incaoa.checked ? 'true' : 'false';
	}
	
	// Lifestyle criteria
	for(var el in objForm.elements)
	{
		if (
			objForm.elements[el]
			&& objForm.elements[el].name
			&& typeof(objForm.elements[el].name) == "string"
			&& objForm.elements[el].name.indexOf('lifestyle_') != -1
			&& objForm.elements[el].checked
		)
		{
			selectedlifestyles = selectedlifestyles + ',' + objForm.elements[el].name;
		}
	}
	
	// Passengers
	if(objForm.adults)
	{
		adults = objForm.adults.value;	
	}
	
	if(objForm.infants)
	{
		infants = objForm.infants.value;	
	}
	
	if(objForm.children && typeof(objForm.children.value)=="string") // IE adds a 'children' object that's something else
	{
		children = "";
		for(var i = 1; i <= objForm.children.value; i++)
		{
			children += eval("objForm.child" + i + ".value");
			if(i != objForm.children.value)
			{
				children += "|";	
			}
		}
	}
	
	// Number of rooms
	if(objForm.numrooms)
	{
		numrooms = objForm.numrooms.value;	
	}

	var cookieString = escape(''
		+ airportfromgroup + ':'
		+ airportfrom + ':'
		+ airporttogroup + ':'
		+ airportto + ':'
		+ resort + ':'
		+ resorttogroup + ':'
		+ resortto + ':'
		+ day + ':'
		+ monthyear + ':'
		+ daysplusminus + ':'
		+ nights  + ':'
		+ price + ':'
		+ boardbasis + ':'
		+ rating + ':'
		+ includeaoa + ':'
		+ selectedlifestyles + ':'
		+ adults + ':'
		+ infants + ':'
		+ children + ':'
		+ numrooms
		
	);
	
	document.cookie = 'FormValues' + objForm.name + '=' + cookieString;
	return true;
}


// Restore form values from cookie
function restoreFormValues(objForm, RESERVED)
{	
	var cookies = unescape(document.cookie);
	var indexSearch = 'FormValues' + objForm.name + '=';

	var pos = cookies.indexOf(indexSearch);
	if (pos == -1)
	{
		return false;
	}

	var start = pos + 10 + objForm.name.length + 1;  // 10 is the length of the string 'FormValues'
	
	var end = cookies.indexOf(';', start);
	if (end == -1)
	{
		end = cookies.length;
	}

	var cookie = unescape(cookies.substring(start, end));
	var parts = cookie.split(':');
	
	var showExtraNav = false;
			
	// Departure:
	if(objForm.airportgroupfromid)
	{
		objForm.airportgroupfromid.value = parts[0];
		changeAirports(objForm.airportgroupfromid, 'dep_airport_groups', true);
	}
	
	if(objForm.airportfromid)
	{
		objForm.airportfromid.value = parts[1];
	}
	
	// Destination:
	if(objForm.airportgrouptoid)
	{
		objForm.airportgrouptoid.value = parts[2];
		changeAirports(objForm.airportgrouptoid, 'dest_airport_groups', true);
	}
	
	if(objForm.airporttoid)
	{
		objForm.airporttoid.value = parts[3];
		
		if ( objForm.resortid )
		{
			resetResorts('resortid', 'Loading...');
			fetch_resorts('/fetchresorts.php', 'resortid', objForm.airporttoid.value, parts[4]);
		}
	}
	else if(objForm.airportcombinedtoid)
	{
		objForm.airportcombinedtoid.value = parts[3];
		
		if ( objForm.resortid )
		{
			resetResorts('resortid', 'Loading...');
			fetch_resorts('/fetchresorts.php', 'resortid', objForm.airportcombinedtoid.value, parts[4]);
		}
	}
	
	/* 
	if(objForm.resortid)
	{
		objForm.resortid.value = parts[4];	
	}
	 */
	
	// Destination (by resort instead of airport):
	if(objForm.resortgroupid)
	{
		objForm.resortgroupid.value = parts[5];
		changeAirports(objForm.resortgroupid, 'dest_resort_groups', true);
	}
	
	if(objForm.resorttoid)
	{
		objForm.resorttoid.value = parts[6];	
	}
	
	// Departure date:
	if(objForm.departure)
	{
		objForm.departure.value = parts[7];	
	}
	
	if(objForm.departure_monthyear)
	{
		objForm.departure_monthyear.value = parts[8];
		changeMonth(objForm, objForm.departure_monthyear.value);
	}
	if(objForm.departure_day)
	{
		objForm.departure_day.value = parts[7];
	}
	if(objForm.depvariance && !objForm.depvariance.disabled)
	{
		objForm.depvariance.value = parts[9];
	}
	
	// hidden calendar field
	if(objForm.f_date_c)
	{
		objForm.f_date_c.value = parts[8] + "-" + parts[7];
	}
	
	// Duration
	if(objForm.duration)
	{
		objForm.duration.value = parts[10];
	}

	// Price
	if(objForm.price)
	{
		objForm.price.value = parts[11];
		showExtraNav = (showExtraNav || parts[11]);
	}
	
	
	// Package/Accom-specific
	if(objForm.boardbasis)
	{
		objForm.boardbasis.value = parts[12];
		showExtraNav = (showExtraNav || parts[12]);
	}
	if(objForm.rating)
	{
		
		objForm.rating.value = parts[13];
		showExtraNav = (showExtraNav || parts[13]);
	}
	if(objForm.incaoa)
	{
		objForm.incaoa.checked = parts[14] == 'true';
	}
	
	// Lifestyle criteria
	if (parts[15])
	{
		var lifestyle_parts = parts[15].split(',');
		for (var i in lifestyle_parts)
		{
			if (!lifestyle_parts[i]) continue;
			eval(	'if(objForm.' + lifestyle_parts[i] + ')'
				+ 'objForm.' + lifestyle_parts[i] + '.checked=true;'
			);
			showExtraNav = true;
		}
	}
	
	// Passengers
	if(objForm.adults && parts[16] > 0)
	{
		objForm.adults.value = parts[16];
	}
	
	if(objForm.infants && parts[17] > 0)
	{
		objForm.infants.value = parts[17];	
	}
	
	// IE adds a 'children' object that's something else entirely
	if(objForm.children && typeof(objForm.children.value)=="string" && parts[18] != "")
	{
		//Because numberOfChildren is incremented by getNewChildBox(), reset it to 0
		numberOfChildren = 0;
		
		children = parts[18].split("|");
		objForm.children.value = children.length;
		
		if ( objForm.children.value > cfgMaxChildren )
		{
			objForm.children.value = cfgMaxChildren;
		}
		
		for(var i = 1; i <= children.length; i++)
		{
			if(window.getNewChildBox)
			{
				getNewChildBox();
				
				cbox = eval("objForm.child" + i);
				
				if ( typeof(children[i-1])!='undefined' && children[i-1]!='undefined' )
				{
					cbox.value = children[i-1];
				}
				if ( typeof(childheader) != 'undefined' )
				{
					childheader.style.display = 'inline';
				}
			}
		}
	}
	
	// Number of rooms
	if(objForm.numrooms && parts[19] > 0)
	{
		objForm.numrooms.value = parts[19];	
	}
	
	
	// toggle extra part of left nav (if applicable)
	if (showExtraNav && typeof(leftNavSearchExtra) != 'undefined')
	{
		toggleLeftNav('leftNavSearchExtra', 'leftnavsearchextra', false, 'nav_search_extra_img', 'leftNavSearchExtraImageToggle', false);
	}

	return true;
}


function changeMonth(objForm, date)
{
	var month, year;
	var today = new Date();

	// Get the existing day of month, to preserve where possible
	var daySelection = objForm.departure_day.value;
	
	date = date.split('-');
	month = date[1];
	year = date[0];

	var temp_start;
	
	if(typeof(addToToday) != 'undefined' && addToToday > 0)
	{
		temp_start = today.getDate() + addToToday	
	}
	else
	{
		temp_start = today.getDate();	
	}
		
	var start = (today.getMonth()+1 == month && year == today.getFullYear()) ? temp_start : 1;
	var max = 31;
	
	if(2 == month)
	{
		max = 28;
		if((year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)))
		{
			max = 29;
		}
	}
	else if(4 == month || 6 == month || 9 == month || 11 == month)
	{
		max = 30;
	}
	
	objForm.departure_day.options.length = 0;
	var foundSelected = false;
	var selectedIndex; 

	for(var i = start; i < (max+1); i++)
	{
		var txt = '' + i;
		var isSelected = false;

		if(txt.length == 1)
		{
			txt = "0" + txt;
		}
		
		if (i == daySelection)
		{
			selectedIndex = i;
			foundSelected = true;
		}
		
		objForm.departure_day.options[objForm.departure_day.options.length]
			= new Option(txt, txt, false);
	}

	// Set selection if not done so already
	if ((! foundSelected) && objForm.departure_day.options.length)
	{
		if (daySelection < start)
		{
			objForm.departure_day.options[0].selected = true;
		}
		else if (daySelection > max)
		{
			objForm.departure_day.options[objForm.departure_day.options.length-1].selected = true;
		}
	}
	else if (selectedIndex)
	{
		//objForm.departure_day.options[selectedIndex-start].selected = true;
		objForm.departure_day.selectedIndex = selectedIndex-start;
	}
}

function resetResorts(container, loadingDisplay)
{
	var cont_el = document.getElementById(container)
	if ( ! cont_el )
	{
		return false;
	}
	if ( loadingDisplay )
	{
		cont_el.innerHTML = "<option value=\"\" selected=\"selected\">" + loadingDisplay + "</option>";
	}
	else
	{
		cont_el.innerHTML = "<option value=\"\" selected=\"selected\">&#171; Any &#187;</option>";
	}
	cont_el.disabled = true;
}

function fetch_resorts(url, container, value, restorevalue)
{
	if ( value == -1 )
	{
		resetResorts(container);
		return false;
	}
	
	resetResorts(container, "Loading...");
	
	var xmlhttprequest = false;
	
	if (window.XMLHttpRequest)
	{
		// Mozzie, Safari
		xmlhttprequest = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		// if IE
		try 
		{
			xmlhttprequest = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e)
		{
			try
			{
				xmlhttprequest = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
	else
	{
		return false;	
	}
	
	xmlhttprequest.onreadystatechange = function()
	{
		
		if(xmlhttprequest.readyState == 4 && xmlhttprequest.status == 200)
		{
			var doc = xmlhttprequest.responseXML;
			var root = doc.documentElement;
			var resorts = document.getElementById(container);
			if ( ! resorts )
			{
				return false;
			}
			resorts.options.length = 0;
			var nds;		
					
			if(root.hasChildNodes()) 
			{
				nds=root.childNodes;
				var len = nds.length;
				for (var i = 0; i < len; i++)
				{
					
					if(nds[i].nodeName == 'resort')
					{
						resorts.options[resorts.options.length] = 
						new Option(nds[i].getAttribute("name"), nds[i].getAttribute("value"));
					}
				}
			}

			//document.getElementById(container).innerHTML = xmlhttprequest.responseText;
			resorts.disabled = false;
			if(restorevalue)
			{
				resorts.value = restorevalue;
			}
		}
	}
	
	xmlhttprequest.open('GET', url + "?airporttoid="+value, true)
	xmlhttprequest.send(null)
}

function update_dates_from_calendar(dateval)
{
	var date = dateval.split("-");

	var monthyear = document.getElementById("departure_monthyear");
	monthyear.value = date[0] + "-" + date[1];
	
	// update the days drop down
	changeMonth(monthyear.form, monthyear.value);
	
	var day = document.getElementById("departure_day");
	day.value = date[2];
}

function update_calendar_from_dates()
{
	var monthyear = document.getElementById("departure_monthyear");
	var day = document.getElementById("departure_day");
	var calendar = document.getElementById("f_date_c");
	
	calendar.value = monthyear.value + "-" + day.value;
}

function change_required_selected(select)
{
	var style, color;
	if(!select)
	{
		return;
	}
	
	if(select.value != -1)
	{
		style = 'normal';
		color = '#000000';
	}
	else
	{
		style = 'normal';
		color = '#000000';
	}

	select.style.fontWeight = style;
	select.style.color = color;
	
	if ( select.options[0].value == -1)
	{
		select.options[0].style.fontWeight = 'normal';
		select.options[0].style.color = '#000000';
	}
	
	for(var i = 1; i < select.options.length; i++)
	{
		if(select.options[i].value != -1)
		{
			select.options[i].style.fontWeight = 'normal';
			select.options[i].style.color = '#000000';
		}
	}
}