/*******************************************************************************/
/**** 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( document.getElementById('departureDateDay').value, document.getElementById('departureDateMonth').value - 1 );
}

function createEndDate( myForm ){
return createDateFrom( document.getElementById('returnDateDay').value, document.getElementById('returnDateMonth').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.getElementById('dp_search');
var dateArray = new createDateArray( myForm );
populateDifferentStayDropdown( dateArray, document.getElementById('difCheckIn'), 0, dateArray.length - 1 );
populateDifferentStayDropdown( dateArray, document.getElementById('difCheckOut'), 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.getElementById('dp_search');
unpopulateDifferentStayDropdown( document.getElementById('difCheckIn') );
unpopulateDifferentStayDropdown( document.getElementById('difCheckOut') );
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];
}
