function dateIndex(aDate){
	for (i=0;i<dateIntervals.length;i++){
		if (aDate>=dateIntervals[i]&&aDate<dateIntervals[i + 1]){
			return i;
		}
	}
}

function dayDiff(date1, date2){
	var number = date2 - date1;
	var iOut = parseInt(number / 86400000);
	iOut += parseInt((number % 86400000)/43200001);
	return iOut;
}

function twoDp(input)
{
    if (input.toFixed)
    {
        return input.toFixed(2);
    } else {
        return parseInt((input * 100), 10) / 100;
    }
}

function clearValues()
{
	document.forms[0].tax.value = "";
	document.forms[0].totalrate.value = "";
	document.forms[0].rate.value="";
	document.forms[0].cleaning.value="";
}

function calculateRate(){
	if (!isValidDate(document.forms[0], "start")){
		clearValues();
		return;
	}
	if (!isValidDate(document.forms[0], "end")){
		clearValues();
		return;
	}
	var startDate=new Date(document.forms[0].startYY.value, document.forms[0].startMM.value - 1, document.forms[0].startDD.value);
	var endDate=new Date(document.forms[0].endYY.value, document.forms[0].endMM.value - 1, document.forms[0].endDD.value);
	if (startDate>=endDate){
		clearValues();
		return;
	}
	var includeAmenities = true;
	/*
	if (!document.getElementById("chkAmenities").checked)
	{
	    includeAmenities = false;
	}
	*/
	var serialDate=startDate.getYear().toString() + (startDate.getMonth() + 1).toString() + startDate.getDate().toString();
	var rateArray;	
	if (document.forms[0].apartment.value==1){
		document.forms[0].item_name.value="Unit: Andalucia Dates: " + startDate.format("D MMMM YYYY") + " - " + endDate.format("D MMMM YYYY");
		document.forms[0].item_number.value="AN" + serialDate;
		if (document.forms[0].countryCode.value=="US")
		{
    		rateArray=abacosUSRates;
    	} else {
    		rateArray=abacosUKRates;    	
    	}
	} else if (document.forms[0].apartment.value==2) {
		document.forms[0].item_name.value="Unit: Belagio Dates: " + startDate.format("D MMMM YYYY") + " - " + endDate.format("D MMMM YYYY");
		document.forms[0].item_number.value="BL" + serialDate;
		if (document.forms[0].countryCode.value=="US")
		{
    		rateArray=androsUSRates;
    	} else {
    		rateArray=androsUKRates;
    	}
	} else if (document.forms[0].apartment.value==3) {
		document.forms[0].item_name.value="Unit: Catalonia Dates: " + startDate.format("D MMMM YYYY") + " - " + endDate.format("D MMMM YYYY");
		document.forms[0].item_number.value="CT" + serialDate;
		rateArray=bahamaRates;
	} else {
		document.forms[0].item_name.value="Unit: GrandFlorentine Dates: " + startDate.format("D MMMM YYYY") + " - " + endDate.format("D MMMM YYYY");
		document.forms[0].item_number.value="GF" + serialDate;
		rateArray=salvadorRates;
	}
	// Cleaning charge
	var cleaningCharge;
    if (document.forms[0].countryCode.value=="GB")
    {
        cleaningCharge = 32;
    }
    else 
    {
        cleaningCharge = 65;
    }	
	// If they don't want amenities then rates are less
	var subtractRate = 0;
	if (!includeAmenities)
	{
	    if (document.forms[0].countryCode.value=="GB")
	    {
	        subtractRate = 10;
	    }
	    else 
	    {
	        subtractRate = 20;
	    }
	}
	var days=0;
	var rate=0;
	var iTotalRate=0;
	var iStartIndex=dateIndex(startDate);
	var iEndIndex=dateIndex(endDate);
	if (iEndIndex-iStartIndex==0){
		days=dayDiff(startDate, endDate);
		iTotalRate=parseFloat(rateArray[iStartIndex] * (days / 7));
	} else if (iEndIndex-iStartIndex==1){
		days=dayDiff(startDate, dateIntervals[iStartIndex + 1]);
		rate=parseFloat(rateArray[iStartIndex] * (days / 7));
		iTotalRate+=rate;
		var days=dayDiff(dateIntervals[iStartIndex + 1], endDate);
		var rate=parseFloat(rateArray[iStartIndex + 1] * (days / 7));
		iTotalRate+=rate;
	} else {
		for(i=iStartIndex;i<iEndIndex+1;i++){
			if (i==iStartIndex){
				days=dayDiff(startDate, dateIntervals[iStartIndex + 1]);
				rate=parseFloat(rateArray[iStartIndex] * (days / 7));
				iTotalRate+=rate;
			} else if (i==iEndIndex){
				var days=dayDiff(dateIntervals[iEndIndex], endDate);
				var rate=parseFloat(rateArray[iEndIndex] * (days / 7));
				iTotalRate+=rate;
			} else{
				var days=dayDiff(dateIntervals[i], dateIntervals[i + 1]) - 1;
				var rate=parseFloat(rateArray[i] * (days / 7));
				iTotalRate+=rate;
			}
		}
	}
	var iTotalDays = dayDiff(startDate, endDate);
	iTotalRate = iTotalRate - (iTotalDays * subtractRate);// Less amenities if necessary

	// Display the number of nights
	document.getElementById("nights").value = iTotalDays;
		
	document.forms[0].rate.value=twoDp(iTotalRate);
	var iTax = 0;
	var iRateWithTax = 0;
	if (document.forms[0].rate.value!="")
	{
	    iTax = parseFloat(iTotalRate * 0.125);
	    iRateWithTax = parseFloat(iTotalRate + iTax);
	}
	
	if (iTotalDays < 6)
	{
	    iRateWithTax += cleaningCharge;
	    document.getElementById("cleaning").value = twoDp(cleaningCharge);
	} else {
	    document.getElementById("cleaning").value = "-";
	}
	document.forms[0].tax.value = twoDp(iTax);
	var iCcFee = iRateWithTax * 0.02;
	document.forms[0].ccfee.value = twoDp(iCcFee);
	document.forms[0].totalrate.value = twoDp(iRateWithTax * 1.02);
}

function submitForm(e){
	if (!document.forms[0].chkTerms.checked){
	    alert("Please confirm you have read and agree to the terms & conditions.");
	    if (e && e.preventDefault)
	        e.preventDefault(); // DOM style
	    if (event)		
		    event.returnValue=false;
		return false;
	}
	if (!isValidDate(document.forms[0], "start")){
		alert("Please enter a valid arrival date.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	if (!isValidDate(document.forms[0], "end")){
		alert("Please enter a valid departure date.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	var thisDate=new Date();
	var weekFromNow=new Date(new Number(thisDate) + (86400000 * 7));
	var startDate=new Date(document.forms[0].startYY.value, document.forms[0].startMM.value - 1, document.forms[0].startDD.value);
	var endDate=new Date(document.forms[0].endYY.value, document.forms[0].endMM.value - 1, document.forms[0].endDD.value);
	if ((new Number(weekFromNow) - new Number(startDate))>=86400000){
		alert("1 weeks notice is required for an online booking.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	if(startDate>=endDate){
		alert("Departure date must be after arrival date.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;		
	}
	var days = dayDiff(startDate, endDate);
	if (days<3){
		alert("The minimum rental period is 3 days");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	if(document.forms[0].guestName.value==""){
		alert("Please enter a guest name.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;		
	}
	if(document.forms[0].email.value==""){
		alert("Please enter an email address.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	if (!isEmailValid(document.forms[0],"email")){
		alert("Please a valid email address.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;	
	}
	if(document.forms[0].noOfAdults.value=="xxx"){
		alert("Please select the number of adults.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;	
	}
	if(document.forms[0].noOfChildren.value=="xxx"){
		alert("Please select the number of children.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;	
	}
	if(document.forms[0].address.value==""){
		alert("Please enter your postal address.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	if(document.forms[0].postCode.value==""){
		alert("Please enter your post code.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	if(document.forms[0].telephoneNumber.value==""){
		alert("Please enter your telephone number.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;
	}
	if(document.forms[0].rate.value==""||document.forms[0].rate.value=="0"){
		alert("Sorry, could not calculate rate.\nPlease contact us for the correct rate for your trip.");
		if (e && e.preventDefault)
		    e.preventDefault(); // DOM style
		if (event)
		    event.returnValue = false;
		return false;		
	}
}

function swapCountry(countryCode)
{
    if (document.getElementById("countryCode").value != countryCode)
    {
        if (countryCode == "US")
        {
            document.getElementById("flagUS").className = "";
            document.getElementById("flagUK").className = "semitrans";  
            document.getElementById("flagText").innerHTML = "Click on the GB flag to switch to &#163;";
            document.getElementById("facilitiesText").innerHTML = "($20 per day)";
            for (i=1;i<6;i++)
            {
                document.getElementById("currencyCell" + i).innerHTML = "$";
            }            
        } else {
            document.getElementById("flagUS").className = "semitrans";
            document.getElementById("flagUK").className = "";
            document.getElementById("flagText").innerHTML = "Click on the US flag to switch to $";
            document.getElementById("facilitiesText").innerHTML = "(&#163;10 per day)";
            for (i=1;i<6;i++)
            {
                document.getElementById("currencyCell" + i).innerHTML = "&#163;";
            }
        }
        document.getElementById("countryCode").value = countryCode;
        calculateRate();
    }
}