/*
DATE FUNCTIONS
*/

//move the drop date boxes forward by x days from pick up
function incrementDropdate( incDays ) {
	var d = getDateObject( 'Pickup' );//get a new date to match the pick up date
	
	//add days on to that new pickup date
	d.setDate(d.getDate()+incDays);
	
	//get the new stuff for drop off
	applyDateObject( d, 'Dropoff' );
}

//logs if the drop off dates have been manually changed
function logDropoffDateChanged() {
	dropoffDateChanged = true;
	validateDates();
//	displayRentalDays();
}

//moves drop off date forward to pick up date and then one day forward if it hasnt been already changed
function matchDropoffDate() {
	//number of days in each month
	var monthDates = new Array(
		31,//j
		28,//f
		31,//m
		30,//a
		31,//m
		30,//j
		31,//j
		31,//a
		30,//s
		31,//o
		30,//n
		31//d
	);
	var selectedDate = document.getElementById('Pickup_Date').value;
	var selectedMonth = document.getElementById('Pickup_Month').value - 1;
	var selectedYear = parseInt( document.getElementById('Pickup_Year').value );
	
	if (selectedYear/4 == parseInt(selectedYear/4)) monthDates[1] = 29;
	
	if ( selectedDate > monthDates[selectedMonth] ) {
		alert( 'The selected month only has ' + monthDates[selectedMonth] + ' days.' );
		document.getElementById('Pickup_Date').value = monthDates[selectedMonth];
	} else {
		if (!dropoffDateChanged) {
			incrementDropdate( 1 );
		} else {
			//drop date has been changed but make sure its not before the pick up
			validateDates();
		}
		displayRentalDays()
	}
}

//check to make sure drop is not before pick up
function validateDates() {
	var p = getDateObject( 'Pickup' );
	var d = getDateObject( 'Dropoff' );
	if ( d.valueOf() < p.valueOf() ) {//if drop off is before pick up
//		incrementDropdate( 1 );
	}
}

//get a selected date (via selects) as a javascript object
function getDateObject( fieldNamePrefix ) {
	var d = new Date();
	
	var currentD = parseInt( document.getElementById(fieldNamePrefix+'_Date').value, 10 );
	d.setDate( currentD );
	var currentM = parseInt( document.getElementById(fieldNamePrefix+'_Month').value, 10 ) - 1;
	d.setMonth( currentM );//starts at zero
	var currentY = parseInt( document.getElementById(fieldNamePrefix+'_Year').value, 10 );
	d.setFullYear( currentY );
	
	var selectedTime = document.getElementById(fieldNamePrefix+'_Time').value;
	timeSplit = selectedTime.split( ':' );
	var currentH = parseInt( timeSplit[0], 10 );
	d.setHours( currentH );
	var currentMin = parseInt( timeSplit[1], 10 );
	d.setMinutes( currentMin, 0, 0 );

	return d;
}

//sets pick up date to today and drop off to tomorrow - runtime
function applyDates() {
	var d = new Date();
	applyDateObject( d, 'Pickup' );
	
	incrementDropdate( 1 );
}

//takes a javascript date object and puts it into the relevent select boxes
function applyDateObject( dateObject, fieldNamePrefix ) {
	document.getElementById(fieldNamePrefix+'_Date').value = dateObject.getDate();
	document.getElementById(fieldNamePrefix+'_Month').value = dateObject.getMonth() + 1;//starts at zero
	document.getElementById(fieldNamePrefix+'_Year').value = dateObject.getFullYear();
}

//calculates the number of days between 2 date objects
function days_between(date1, date2) {
    var ONE_DAY = 1000 * 60 * 60 * 24// The number of milliseconds in one day

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()

    var difference_ms = Math.abs(date1_ms - date2_ms)// Calculate the difference in milliseconds
	var finalResult = Math.ceil(difference_ms/ONE_DAY)// Convert back to days
    return ( finalResult ) ? finalResult : 1 ;
}

//updates rental days to reflect pick up and drop off dates
function displayRentalDays() {
	var dPickup = getDateObject( 'Pickup' );
	var dDropoff = getDateObject( 'Dropoff' );
	var noOfDays = days_between(dPickup, dDropoff);
	var daysText = ( noOfDays == 1 ) ? ' day' : ' days' ;
//	document.getElementById('Rental_Days').innerHTML = noOfDays + daysText;
}

//generates calendar for pick up days
function generatePickupcalendar() {
	var selectedMonth = document.getElementById('Pickup_Month').value;
	var selectedYear = document.getElementById('Pickup_Year').value;

	ajaxFunction( 'FancyCal_Pickup', '/ajax/calendar.generator.php?Month=' + selectedMonth + '&Year=' + selectedYear + '&FN=Pickup' );
}
//generates calendar for drop off dates
function generateDropoffcalendar() {
	var NoBookingBefore = document.getElementById('Pickup_Year').value +'-'+ document.getElementById('Pickup_Month').value +'-'+ document.getElementById('Pickup_Date').value;
	
	var selectedMonth = document.getElementById('Dropoff_Month').value;
	var selectedYear = document.getElementById('Dropoff_Year').value;
	
	ajaxFunction( 'FancyCal_Dropoff', '/ajax/calendar.generator.php?Month=' + selectedMonth + '&Year=' + selectedYear + '&FN=Dropoff&NoBookingBefore=' + NoBookingBefore );
}

//sets drop off time to be same as pick up if it hasnt been changed before
//function matchDropoffTime() {
//	if (!dropoffDateChanged) document.getElementById('Dropoff_Time').value = document.getElementById('Pickup_Time').value;
//}





/*
LOCALE FUNCTIONS
*/

//logs if the drop off location has been manually changed
function logDropoffLocationChanged() {
	dropoffLocationChanged = true;
}

//generates a list of locales, filtered or not to a specific element
function generateLocaleList( elementID, localeFilter ) {
	var url = '/ajax/locale.generator.php?FN=' + elementID + '&cid=' + document.getElementById('cid').value;
	if ( localeFilter ) {
		url += '&Locale_Type=' + localeFilter;
	}
	if ( elementID == 'Dropoff_Location' && document.getElementById('Pickup_Location') ) {
		url += '&Selected_Locale=' + document.getElementById('Pickup_Location').value;
	}
	ajaxFunction( elementID + '_Surround', url );
	
	if ( elementID == 'Pickup_Location' ) {
		pollC( elementID, 'matchDropoffLocation()' );
		ajaxFunction( 'pickupFilterLinks', '/ajax/localeLinks.generator.php?cid=' + document.getElementById('cid').value );
	}
}

//sets drop off location to be the same as pick up if not already changed
function matchDropoffLocation() {
	generateLocaleList( 'Dropoff_Location', false );
	if ( !dropoffLocationChanged && document.getElementById('Pickup_Location') && document.getElementById('Dropoff_Location') ) {
		document.getElementById('Dropoff_Location').value = document.getElementById('Pickup_Location').value;
	}
}




/*
GENERAL FUNCTIONS
*/




//update little sample car image for car type change
function fleetImage() {
	var vci = document.getElementById('vci');
	var fleetSample = document.getElementById('fleetSample');
	
	fleetSample.style.display = 'block';

	switch( vci.value ) {
		case '0'://all groups
			fleetSample.style.display = 'none';
			break;
		case '1'://mini economy
			fleetSample.src = '/incs/images/index/mini-economy.jpg';
			break;
		case '2'://economy
			fleetSample.src = '/incs/images/index/economy.jpg';
			break;
		case '3'://compact
			fleetSample.src = '/incs/images/index/compact.jpg';
			break;
		case '4'://intermediate
			fleetSample.src = '/incs/images/index/intermediate.jpg';
			break;
		case '5'://full size
			fleetSample.src = '/incs/images/index/full-size.jpg';
			break;
		case '6'://premium
			fleetSample.src = '/incs/images/index/premium.jpg';
			break;
		case '7'://luxury
			fleetSample.src = '/incs/images/index/luxury.jpg';
			break;
		case '8'://MPV
			fleetSample.src = '/incs/images/index/mpv.jpg';
			break;
		case '9'://commercial
			fleetSample.src = '/incs/images/index/commercial.jpg';
			break;
		case '10'://automatic
			fleetSample.style.display = 'none';
			break;
		case '11'://estate
			fleetSample.src = '/incs/images/index/estate.jpg';
			break;
	}
}

//show the select country row when the link is clicked
function showCountryRow() {
	// Firefox: 'table-row';
	// IE: 'block';
	// Both: blank causes default display
	document.getElementById('countryRow').style.display = '';
}

//reload the page with a new country code
function reloadNewCID() {
	document.getElementById('cid').value = document.getElementById('Hire_Country').value;
	
	generateLocaleList( 'Dropoff_Location', false );
	generateLocaleList( 'Pickup_Location', false );
	
//	document.getElementById('countryRow').style.display = 'none';
}

function checkForm( e ) {
	var Success = true;
	
	if ( document.getElementById('Error') && document.getElementById('Error').value == '1' ) {//check to see if error has been generated
		Success = false;
		
		if ( document.getElementById('ErrorMessage').value == '' && document.getElementById('ErrorMessage') ) {
				document.getElementById('ErrorMessage').value = 'Unknown error.';
		}
	}
	
	Success = checkOpeningHours();
	
	if ( !document.getElementById('Pickup_Location') ) {
		document.getElementById('Error').value = '1';
		document.getElementById('ErrorMessage').value = 'You are unable to continue with this booking because we are currently updating our location database for the country you have selected.';
		Success = false;
	}
	
	if ( Success ) {
//		document.getElementById( 'SubmitButton' ).disabled = true;
		return true;
	} else {
		if ( e && e.preventDefault ) e.preventDefault();
		alert( document.getElementById('ErrorMessage').value );

		document.getElementById('Error').value = '0';
		document.getElementById('ErrorMessage').value = '';

		return false;
	}
}


