/**** Functions required for DP to Endeca form submissions. ***/

function checkEndecaDestinations(){
// This function checks to see if the user has selected an Endeca suited destination. 
// If so, the search is submitted to endeca rather than DP.

var destinationsDropdown = document.getElementById('destination'), destination = destinationsDropdown.options[destinationsDropdown.selectedIndex].text;

// Check if chosen destination is suited to Endeca. If so, submit it to Endeca.
if (typeof endecaDestinations[destination]=='string'){

// Parse date into Endeca friendly format.
depDay = document.getElementById('departureDateDay'); depDay = depDay.options[depDay.selectedIndex].value;
depMonth = document.getElementById('departureDateMonth'); depMonth = depMonth.options[depMonth.selectedIndex].value;
myDate = new Date();
year = myDate.getYear();
if (depMonth < myDate.getMonth()) year+=1;
depMonth-=1;
if (depMonth<10) depMonth='0'+ depMonth;
if (depDay<10) depDay='0'+ depDay;
if (year < 2000) year+= 1900;

// Set destination and date form elements, then submit to Endeca.
document.getElementById('dep_date').value =''+year+depMonth+depDay;
document.getElementById('dest_search').value=endecaDestinations[destination];
document.holidays_search.submit();
return false;
}
}


/**** Functions required for the different hotel and travel date dropdowns. ***/
if (typeof(differentHotelDateMonths)=='undefined'){
var months = new Array( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
} else {
var months = differentHotelDateMonths;
}

var populated = 'false';

function turnOff(obj){document.getElementById(obj).style.display = 'none';}
function turnOn(obj){document.getElementById(obj).style.display = 'block';}
function toggleDisplay(obj,state){state == true?turnOn(obj):turnOff(obj);}
function dateChangeTrigger(){
  if( populated == 'true' ) {
    populateDifferentStayDropdowns();}
}

function createDateArray(){
var args = createDateArray.arguments;
var lastDate = createEndDate( args[0] );
var firstDate = createStartDate( args[0] );
if( firstDate.getTime() < lastDate.getTime() ) {
this[0] = firstDate;
for( var i = 1; this[i-1] < lastDate; i++ ) {
this[i] = nextDate( this[i-1] );
}
this.length = i;
}
else {
this.length = 0;
}
}

function nextDate( nowDate ){
return new Date( nowDate.getTime() + 86400000 );
}

function createStartDate( myForm ){
return createDateFrom( myForm.Day1.value, myForm.month_1.value - 1 );
}

function createEndDate( myForm ){
return createDateFrom( myForm.Day2.value, myForm.month_2.value - 1 );
}

function createDateFrom( aDay, aMonth ){
var current = new Date();
var generated = new Date();
generated.setMonth( aMonth );
generated.setDate( aDay );
if( generated.getMonth() < current.getMonth() ) {
generated.setYear( current.getFullYear() + 1 );
}
return generated;
}

function populateDifferentStayDropdowns(){
var myForm = document.SELECTION;
var dateArray = new createDateArray( myForm );
populateDifferentStayDropdown( dateArray, myForm.differentCheckIn, 0, dateArray.length - 1 );
populateDifferentStayDropdown( dateArray, myForm.differentCheckOut, 1, dateArray.length );
populated = 'true';
  toggleDisplay('hotelStayOptions',true)
}

function populateDifferentStayDropdown( dateArray, ddown, startIndex, endIndex ){
ddown.options.length = 1;
for( var i = startIndex; i < endIndex; i++ ) {
ddown.options[ddown.options.length] = new Option( formatForDisplay( dateArray[i] ), formatForValue( dateArray[i] ) );
}
}

function unpopulateDifferentStayDropdowns(){
var myForm = document.SELECTION;
unpopulateDifferentStayDropdown( myForm.differentCheckIn );
unpopulateDifferentStayDropdown( myForm.differentCheckOut );
populated = 'false';
  toggleDisplay('hotelStayOptions',false)
}

function unpopulateDifferentStayDropdown( ddown ){
ddown.options.length = 1;
}

function formatForValue( theDate ){
return formatDate( theDate, 'dd/MM/yyyy' );
}

function formatForDisplay( theDate ){
return formatDate( theDate, 'dd MMM yyyy' );
}

function formatNumber( number ){
return ( ( number < 10 ) ? '0' : '' ) + number;
}

function formatDate( theDate, theFormat ){
var date = formatNumber( theDate.getDate() );
var monthStr = retrieveMonth( theDate.getMonth() );
var monthNum = formatNumber( theDate.getMonth() + 1 );
var fullYear = formatNumber( theDate.getFullYear() );
var hour = formatNumber( theDate.getHours() );
var minute = formatNumber( theDate.getMinutes() );
var second = formatNumber( theDate.getSeconds() );
return theFormat.replace( /dd/g, date ).replace( /MMM/g, monthStr ).replace( /MM/g, monthNum ).replace( /yyyy/g, fullYear ).replace( /hh/g, hour ).replace( /mm/g, minute ).replace( /ss/g, second );
}

function retrieveMonth( number ){
return months[number];
}

function hideError(){
document.getElementById('errorBubbleContainer').style.visibility='hidden';
}

function validateForm(){
	nuns = document.getElementById('destination');
	if (nuns.options) {
		if (nuns.options[nuns.selectedIndex].value=='None') {
			displayError('destination');
			return false;
		}
	}
	if( !validatePassengers() ) {
		displayError('passengers');
		return false;
	}
	if( !validateDates() ) {
		displayError('dates');
		return false;
	}
	if( !validateDestDep() ) {
		displayError('destdep');
		return false;
	}
  CookieForms('save', 'SELECTION', 'departurePoint','i', 'class','i', 'adults', 'i','seniors','i','children','i','infants','i','destination','s','departureDateDay','s','departureDateMonth','s','departure_time','s','returnDateDay','s','returnDateMonth','s','return_time','s','class','s','carrier','s');
	return checkEndecaDestinations();
}

function validatePassengers() {
	var adults = document.getElementById('adults');
	var seniors = document.getElementById('seniors');
	var children = document.getElementById('children');
	var infants = document.getElementById('infants');
	var total = 0;
	if( adults && adults.value ) {
		total += parseInt(adults.value);
	}
	if( seniors && seniors.value ) {
		total += parseInt(seniors.value);
	}
	if( children && children.value ) {
		total += parseInt(children.value);
	}
	if( infants && infants.value ) {
		total += parseInt(infants.value);
	}
	return( total <= 9 );
}

function validateDates() {
	var ddd = document.getElementById('departureDateDay');
	var ddm = document.getElementById('departureDateMonth');
	var rdd = document.getElementById('returnDateDay');
	var rdm = document.getElementById('returnDateMonth');
	// do return date before departure date so that we fail
	// when they are the same day
	var rd = new Date();
	if (rd.getYear<2000) yearMod = 1900; else yearMod = 0;
  rd.setMonth(0);
  rd.setDate(rdd.value);
	rd.setMonth(parseInt(rdm.value)-1);
	if (rdm.value > ddm.value) rd.setYear(rd.getYear()+1+yearMod);
	var dd = new Date();
	dd.setMonth(0);
  dd.setDate( ddd.value );
	dd.setMonth( parseInt( ddm.value ) - 1 );
	if( rd.getTime() <= dd.getTime() ) {
	  var diff = dd.getTime() - rd.getTime();
	  if( diff < 25920000000 ) {
	  	return false;
	  }
	}
	return true;
}

function validateDestDep() {
	dest = document.getElementById('destination');
	if (dest.options) {
		destValue = dest.options[dest.selectedIndex].value;
		dep = document.getElementById('departurePoint');
		if(dep.options) {
			depValue = dep.options[dep.selectedIndex].value;
			return depValue != destValue;
		}
	}
	return true;
}