var hireCostsArray = new Array();
var selectedCarValues = null;

function populatePricesArray() {
	// Array data
	// First index: Car type (name)
	//	Possible Values:
	//		Renault Clio Symbol
	//		Renault Megane 
	//		Renault New Kangoo Multix 
	//		Renault Traffic Multix
	//
	// Second Index: Season
	// 	Possible Values:
	//		0  ==> October, November, December, January, February
	//		1  ==> March, April, May, June  	
	//		2  ==> July, August, September  	
	//
	// Third index: Time for hire (days)
	//	Possible Values:
	//		0  ==> 1-6 Days
	//		1  ==> 7-15 Days
	//		2  ==> +16 Days
	// Fill in the data for "Renault Clio Symbol"
	hireCostsArray['Renault Clio Symbol'] = new Array();
	hireCostsArray['Renault Clio Symbol'][0] = new Array(25, 23, 20);
	hireCostsArray['Renault Clio Symbol'][1] = new Array(27, 25, 23);
	hireCostsArray['Renault Clio Symbol'][2] = new Array(30, 28, 25);
	// Fill in the data for "Renault Megane"
	hireCostsArray['Renault Megane'] = new Array();
	hireCostsArray['Renault Megane'][0] = new Array(32, 28, 26);
	hireCostsArray['Renault Megane'][1] = new Array(36, 32, 28);
	hireCostsArray['Renault Megane'][2] = new Array(40, 38, 34);
	// Fill in the data for "Renault New Kangoo Multix"
	hireCostsArray['Renault New Kangoo Multix'] = new Array();
	hireCostsArray['Renault New Kangoo Multix'][0] = new Array(31, 27, 25);
	hireCostsArray['Renault New Kangoo Multix'][1] = new Array(35, 31, 27);
	hireCostsArray['Renault New Kangoo Multix'][2] = new Array(38, 35, 32);
	// Fill in the data for "Renault Traffic Multix"
	hireCostsArray['Renault Traffic Multix'] = new Array();
	hireCostsArray['Renault Traffic Multix'][0] = new Array(50, 45, 40);
	hireCostsArray['Renault Traffic Multix'][1] = new Array(58, 54, 50);
	hireCostsArray['Renault Traffic Multix'][2] = new Array(63, 60, 57);
}

function initData() {
	// Populate the values of the pickup and drop-off dates
	var pickUp = document.getElementById('pickUpDate');
	var dropOff = document.getElementById('returnDate');

	populatePricesArray();
	carTypeChanged(document.getElementById('carType'));

	pickUp.value = Date.today().toString("dd-MM-yyyy");
	dropOff.value = Date.parse('tomorrow').toString("dd-MM-yyyy");

	displayCost(calculateCost());
}

function dateTimePickerIsClosed(controlName) {
	// Populate the values of the pickup and drop-off dates
	var pickUp = document.getElementById('pickUpDate');
	var dropOff = document.getElementById('returnDate');
	
	if ((typeof(pickUp) == 'undefined') ||
		(typeof(dropOff) == 'undefined')) {
		return false;
	}

	// Parse dates
	pickUpDate = Date.parseExact(pickUp.value, "dd-MM-yyyy");
	dropOffDate = Date.parseExact(dropOff.value, "dd-MM-yyyy");

	// Check if the dates are in correct order (ie. pickUp < dropOff)
	var interval = (dropOffDate - pickUpDate) / 86400000.0;
	if (interval <= 0) {
		// If the dates are wrong order, keep the changed one, change the other
		if (controlName == "pickUpDate") {
			// pick up date is changed, set drop off to pickUp+1
			dropOffDate = pickUpDate.clone().add(1).day();
		} else if (controlName == "returnDate") {
			//drop off date is changed, set pick up to dropOff-1
			pickUpDate = dropOffDate.clone().add(-1).days();
		}
	}

	// Check if dates are before today
	if ( Date.today().compareTo(pickUpDate) > 0 ) {
		pickUpDate = Date.today();
	}
	
	if ( Date.today().compareTo(dropOffDate) >= 0 ) {
		dropOffDate = Date.today().add(1).days();
	}

	// Re-assign values
	pickUp.value = pickUpDate.toString("dd-MM-yyyy");
	dropOff.value = dropOffDate.toString("dd-MM-yyyy");

	// Calculate and display cost
	displayCost(calculateCost());
}

function carTypeChanged(objCarTypeList) {
	// Determine the selected car name
	var selectedCarName = '';
	if (typeof(objCarTypeList) == 'undefined') {
		return false;
	}
	selectedCarName = objCarTypeList.value;

	// Determine the selected car type
	selectedCarValues = hireCostsArray[selectedCarName];

	if (document.getElementById('returnDate').value.length > 0) {
		displayCost(calculateCost());
	}

	return true;
}

function calculateCost() {
	// Populate the values of the pickup and drop-off dates
	var pickUp = document.getElementById('pickUpDate');
	var dropOff = document.getElementById('returnDate');
	var totalCost = 0;
	var currentDay;
	
	if ((typeof(pickUp) == 'undefined') ||
		(typeof(dropOff) == 'undefined')) {
		return 0;
	}

	// Parse dates
	var pickUpDate = Date.parseExact(pickUp.value, "dd-MM-yyyy");
	var dropOffDate = Date.parseExact(dropOff.value, "dd-MM-yyyy");

	var intervalInDays = (dropOffDate - pickUpDate) / 86400000.0;
	
	// Determine the 3rd index to the array
	var thirdIndex = 0;
	if (intervalInDays <= 6) { // 0  ==> 1-6 Days
		thirdIndex = 0;
	} else if ((intervalInDays >= 7) && (intervalInDays <= 15)) { // 1  ==> 7-15 Days
		thirdIndex = 1;
	} else { // 2  ==> +16 Days
		thirdIndex = 2;
	}

	// Iterate for each day
	for (currentDay = pickUpDate; currentDay.compareTo(dropOffDate) < 0; currentDay.add(1).days()) {
		// Day of months to compare to
		var feb = new Date(currentDay.getYear()+1900, 1, 1).moveToLastDayOfMonth().getDayOfYear();
		var jun = new Date(currentDay.getYear()+1900, 5, 1).moveToLastDayOfMonth().getDayOfYear();
		var sep = new Date(currentDay.getYear()+1900, 8, 1).moveToLastDayOfMonth().getDayOfYear();
		var currentDayOfYear = currentDay.getDayOfYear();
		var secondIndex = 0;
		
		if (currentDayOfYear <= feb) {
			secondIndex = 0; // 0  ==> January, February
		} else if (currentDayOfYear <= jun) {
			secondIndex = 1; // 1  ==> March, April, May, June 
		} else if (currentDayOfYear <= sep) {
			secondIndex = 2; // 2  ==> July, August, September
		} else {
			secondIndex = 0; // 0  ==> October, November, December
		}

		// Add the value for today to the total	
		totalCost += selectedCarValues[secondIndex][thirdIndex];
	}

	return totalCost;
}

function displayCost(cost) {
	document.getElementById("costDisplayArea").innerHTML=cost+",00";
	// Change the cost to report
	document.getElementById("costReported").value=cost+",00";
}


