function dateIndex(aDate){
	for (i=0;i<dateIntervals.length;i++){
		if (aDate>=dateIntervals[i]&&aDate<dateIntervals[i + 1]){
			return i;
		}
	}
}

function twoDp(input)
{
    if (input.toFixed)
    {
        return input.toFixed(2);
    } else {
        return parseInt((input * 100), 10) / 100;
    }
}

function dayDiff(date1, date2){
	var number = date2 - date1;
	var iOut = parseInt(number / 86400000);
	iOut += parseInt((number % 86400000)/43200001);
	return iOut;
}

function calculateRate(){
	if (!isValidDate(document.forms[0], "start")){
		document.forms[0].rate.value="";
		return;
	}
	if (!isValidDate(document.forms[0], "end")){
		document.forms[0].rate.value="";	
		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){
		document.forms[0].rate.value="";	
		return;
	}
	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: Abacos Dates: " + startDate.format("D MMMM YYYY") + " - " + endDate.format("D MMMM YYYY");
		document.forms[0].item_number.value="AB" + 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: Andros 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=androsUSRates;
    	} else {
    		rateArray=androsUKRates;    	
    	}
	} else if (document.forms[0].apartment.value==3) {
		document.forms[0].item_name.value="Unit: Grand Bahama Dates: " + startDate.format("D MMMM YYYY") + " - " + endDate.format("D MMMM YYYY");
		document.forms[0].item_number.value="BH" + serialDate;
		if (document.forms[0].countryCode.value=="US")
		{
    		rateArray=bahamaUSRates;
    	} else {
    		rateArray=bahamaUKRates;    	
    	}
	} else {
		document.forms[0].item_name.value="Unit: San Salvador Dates: " + startDate.format("D MMMM YYYY") + " - " + endDate.format("D MMMM YYYY");
		document.forms[0].item_number.value="SS" + serialDate;
		if (document.forms[0].countryCode.value=="US")
		{
    		rateArray=salvadorUSRates;
    	} else {
    		rateArray=salvadorUKRates;    	
    	}
	}
	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));
		if (days<=3) {
			if (document.forms[0].countryCode.value=="GB"){
				iTotalRate+=20;
			} else {
				iTotalRate+=35;
			}
		}
		document.forms[0].rate.value=parseInt(iTotalRate);
	} 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;
		if (days<=3) {
			if (document.forms[0].countryCode.value=="GB"){
				iTotalRate+=20;
			} else {
				iTotalRate+=35;
			}
		}		
		document.forms[0].rate.value=parseInt(iTotalRate);
	} 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;
			}
		}
		document.forms[0].rate.value=parseInt(iTotalRate);
	}
}

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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    event.returnValue=false;
		return false;
	}
	if (document.getElementById("paymentAmount")){
        days = dayDiff(thisDate, startDate);
	    if ((days<=60)&&(document.getElementById("paymentAmount").value=="D")){
		    alert("Sorry, you must pay the full amount if your arrival date is within the next 60 days");
            if (e && e.preventDefault)
                e.preventDefault(); // DOM style		    
            if (typeof(event) != "undefined")
    		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    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 (typeof(event) != "undefined")
		    event.returnValue=false;
		return false;		
	}
	var guestName=document.getElementById("guestName").value;
	var itemName=document.forms[0].item_name.value;
	if (itemName.indexOf("Name")==-1)
	{
	    itemName="Name: " + guestName + " " + itemName;
	}
	document.forms[0].item_name.value = itemName;
}

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("currencyCell").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("currencyCell").innerHTML = "&#163;";
        }
        document.getElementById("countryCode").value = countryCode;
        calculateRate();
    }
}