// JavaScript For Booking Form

//Variables for Anna to change!!!

var BASE_COST = 16.00;
var COST_PER_AREA_COEFFICIENT = [1,1.5,2,2.5,3];
var COST_PER_INTEREST = 1.30;
var HARD_COPY_FORMAT_PRICE = 30;

//Don't touch anything else below here!!


window.onload = function(){
	
	if(document.getElementById("SubmitForm")) {
		var SubmitButton = document.getElementById("SubmitForm");
		SubmitButton.onclick = ValidateForm;
	}
	
	if(document.getElementById("StartDateDay")) {
		
		//Set start Date to Today
		var Today = new Date();
		//Set End Date to Tomorrow
		var THREE_DAYS = 1000 * 60 * 60 * 24 * 3;
		//var Tomorrow = new Date();
		//Tomorrow.setTime(Tomorrow.getTime() + ONE_DAY);
		var END_DATE = new Date();
		END_DATE.setTime(END_DATE.getTime() + THREE_DAYS);
		
		document.getElementById("StartDateDay").value = Today.getDate();
		document.getElementById("StartDateMonth").value = Today.getMonth() + 1;
		document.getElementById("StartDateYear").value = Today.getYear();
		
		document.getElementById("EndDateDay").value = END_DATE.getDate();
		document.getElementById("EndDateMonth").value = END_DATE.getMonth() + 1;
		document.getElementById("EndDateYear").value = END_DATE.getYear();
		
		calculatePrice();
	}
	
	if(document.getElementById("AreaName1")){
		showHideAreas();
	}
}

function calculatePrice(){
	
	
	var StartDate = new Date();
	StartDate.setDate(document.getElementById("StartDateDay").value);
	StartDate.setMonth(document.getElementById("StartDateMonth").value -1);
	StartDate.setYear(document.getElementById("StartDateYear").value);
	
	var EndDate = new Date();
	EndDate.setDate(document.getElementById("EndDateDay").value);
	EndDate.setMonth(document.getElementById("EndDateMonth").value -1);
	EndDate.setYear(document.getElementById("EndDateYear").value);
	
	var NumberOfDays = dateDifference(StartDate, EndDate);
	var NumberOfInterests = document.getElementById("NumberOfInterests").value;
	var Format = document.getElementById("Format").value;
	
	var PricePerDay;
	var FormatPrice;
	
	if(document.getElementById("AreaName1")){
		if(NumberOfInterests == 14)
		{
			selectAllInterests();
		}
		else
		{
			deselectAllInterests();
		}
	}
	
	
	
	if(Format == "PDF")
	{
		FormatPrice = 0;
	}
	if(Format == "Book")
	{
		FormatPrice = HARD_COPY_FORMAT_PRICE;
	}
	
	var NumberOfAreas = document.getElementById("NumberOfAreas").value;
	
	
	if(TotalPrice <= 0)
	{
		TotalPrice = "";
	}
	
	if(NumberOfDays > 0)
	{
		if(NumberOfDays < 3)
		{
			document.getElementById("NumberOfDays").style.color = "#FF0000";
			document.getElementById("NumberOfDays").innerHTML = "The minimum holiday length is 3 days";
			NumberOfDays = "";
		}
		else
		{
			document.getElementById("NumberOfDays").style.color = "";
			document.getElementById("NumberOfDays").innerHTML = NumberOfDays;
		}
	}
	else
	{
		document.getElementById("NumberOfDays").style.color = "#FF0000";
		document.getElementById("NumberOfDays").innerHTML = "The End Date must be after the Start Date!";
		NumberOfDays = "";
	}
	
	var AreaCost = COST_PER_AREA_COEFFICIENT[NumberOfAreas - 1];
	
	var TotalPrice = (BASE_COST * AreaCost) + (NumberOfDays * NumberOfInterests * COST_PER_INTEREST) + FormatPrice;
	
	TotalPrice = TotalPrice.toFixed(2);
	
	if(NumberOfDays < 3)
	{
		TotalPrice = " - ";
	}
	
	document.getElementById("Price").innerHTML = "£" + TotalPrice;
	
	
}

function showHideAreas(){
	var numberOfAreas = document.getElementById("NumberOfAreas").value;
	document.getElementById("Area2").style.display = "none";
	document.getElementById("Area3").style.display = "none";
	document.getElementById("Area4").style.display = "none";
	document.getElementById("Area5").style.display = "none";
	
	for(var i=1; i<=numberOfAreas; i++)
	{
		document.getElementById("Area" + i).style.display = "block";
	}
	
	for(i=parseInt(numberOfAreas) + 1; i<=5; i++)
	{
		document.getElementById("AreaName" + i).value = "(Please Select)";
		document.getElementById("LengthOfStay" + i).value = "1";
	}
	
	//If only one area selected then hide length of stay field
	
	if(numberOfAreas == 1)
	{
		document.getElementById("LengthOfStay1").style.display = "none";
		document.getElementById("LengthOfStayLabel1").style.display = "none";
		document.getElementById("LengthOfStayHelpButton").style.display = "none";
	}
	else
	{
		document.getElementById("LengthOfStay1").style.display = "inline";
		document.getElementById("LengthOfStayLabel1").style.display = "inline";
		document.getElementById("LengthOfStayHelpButton").style.display = "inline";
	}
		
	
	calculatePrice();
	
}

function updateInterests(){
	
	var maxInterests;
	var maxInterests = document.getElementById("NumberOfInterests").value;
	
	
	var checkedBoxes=0;
	
	for(var i=1; i<=14; i++)
	{
		if(document.getElementById("Interest" + i).checked)
		{
			checkedBoxes++;
		}
	}
	
	if(checkedBoxes == maxInterests)
	{
		//Disable unticked checkboxes as maximum interests reached
		for(var i=1; i<=14; i++)
		{
			if(!document.getElementById("Interest" + i).checked)
			{
				document.getElementById("Interest" + i).disabled = true;
			}
		}
		
	}
	else
	{
		//Enable all checkboxes
		for(var i=1; i<=14; i++)
		{
			document.getElementById("Interest" + i).disabled = false;
		}
	}
	
}


function deselectAllInterests()
{
	//Enable all checkboxes and uncheck them
	for(var i=1; i<=14; i++)
	{
		document.getElementById("Interest" + i).disabled = false;
		document.getElementById("Interest" + i).checked = false;
	}
}

function selectAllInterests()
{
	//Select and disable all checkboxes
	for(var i=1; i<=14; i++)
	{
		document.getElementById("Interest" + i).disabled = true;
		document.getElementById("Interest" + i).checked = true;
	}
}


function dateDifference(date1, date2){
	
	//The number of milliseconds in one day
	var ONE_DAY = 1000 * 60 * 60 * 24;
	
	//Conver both dates to milliseconds
	var date1_ms = date1.getTime();
	var date2_ms = date2.getTime();
	
	//Calculate the difference between in milliseconds
	var difference_ms = date2_ms - date1_ms;
	
	//Conver back to days and return
	return Math.round(difference_ms/ONE_DAY);
}

function round(number,X) {
// rounds number to X decimal places, defaults to 2
    X = (!X ? 2 : X);
    return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

function popUpWindow(URL) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=400,height=300,left=200,top=200');");
}

//function to check valid email address
function isValidEmail(strEmail){
	
  validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;

   // search email text for regular exp matches
    if (strEmail.search(validRegExp) == -1) 
   {
      return false;
    } 
    return true; 
}

//Function to Validate all input on the form
function ValidateForm() {
	
	var StartDate = new Date();
	StartDate.setDate(document.getElementById("StartDateDay").value);
	StartDate.setMonth(document.getElementById("StartDateMonth").value -1);
	StartDate.setYear(document.getElementById("StartDateYear").value);
	
	var EndDate = new Date();
	EndDate.setDate(document.getElementById("EndDateDay").value);
	EndDate.setMonth(document.getElementById("EndDateMonth").value -1);
	EndDate.setYear(document.getElementById("EndDateYear").value);
	
	var NumberOfDays = dateDifference(StartDate, EndDate);
	var NumberOfInterests = parseInt(document.getElementById("NumberOfInterests").value);
	var NumberOfAreas = parseInt(document.getElementById("NumberOfAreas").value);
	var EmailAddress = document.getElementById("EmailAddress").value;
	
	var ValidForm = true;
	
	//Check valid number of days
	if (NumberOfDays < 3) {
		alert("The minimum holiday length is 3 days.  Please select another start/end date.");
		ValidForm = false;
	}
	
	
	//Check selected area names correctly
	if (ValidForm)
	{
		var InvalidAreaNames = false;
		
		for(var i=1;i<NumberOfAreas+1;i++) {
			if(document.getElementById("AreaName" + i).value == "(Please Select)")
			{
				InvalidAreaNames = true;
			}
		}
		if(InvalidAreaNames) {
			alert("Please select each of the areas you wish to visit.");
			ValidForm = false;
		}
	}
	
	//Check selected interests correctly
	if (ValidForm)
	{
		if(NumberOfInterests < 14)
		{
			var SelectedNumberOfInterests = 0;
			for(var i=1;i<=14;i++) {
				if(document.getElementById("Interest" + i).checked) {
					SelectedNumberOfInterests = SelectedNumberOfInterests + 1;
				}
			}
			
			if(SelectedNumberOfInterests < NumberOfInterests) {
				var RemainingInterests = NumberOfInterests - SelectedNumberOfInterests;
				if(RemainingInterests == 1) {
					alert("Please select another interest, or change the number of interests you would like.");
				}
				else
				{
					alert("Please select another " + RemainingInterests + " interests, or change the number of interests you would like.");
				}
				ValidForm = false;
			}	
		}
	}
	
	
	//Check valid email address
	if (ValidForm)
	{
		if(EmailAddress == "") {
			alert("Please enter an email address.");
			ValidForm = false;
		}
	}
			
	if (ValidForm)
	{
		if (!isValidEmail(EmailAddress))
		{
			alert("Please enter a valid email address.");
			ValidForm = false;
		}
	}
	
	//Check email address matches confirmation email address
	if (ValidForm)
	{
		var emailaddress = document.getElementById("EmailAddress").value;
		var emailaddress2 = document.getElementById("ConfirmEmail").value;
		
		if(emailaddress > emailaddress2)
		{
			alert("Please re-confirm your email address.");
			ValidForm = false;	
		}
	}
	
	
	if (ValidForm) {
		return true;
	}
	else {
		return false;
	}
		
	
}


