var theMonths = ["January","February","March","April","May","June","July","August","September","October","November","December"];

// syncs return date to departure date
function syncReturn() {
	var inputForm = document.inputForm;
	inputForm.rYear.selectedIndex = inputForm.dYear.selectedIndex;
	inputForm.rMonth.selectedIndex = inputForm.dMonth.selectedIndex;
	inputForm.rDay.selectedIndex = inputForm.dDay.selectedIndex;
}

// increments return date by 1
function addRDay() {
	var inputForm = document.inputForm;
	if (inputForm.rDay.selectedIndex<(inputForm.rDay.options.length-1)) {
		inputForm.rDay.selectedIndex = (inputForm.rDay.selectedIndex+1);
	} else {
		if (inputForm.rMonth.selectedIndex<(inputForm.rMonth.options.length-1)) {
			inputForm.rMonth.selectedIndex = (inputForm.rMonth.selectedIndex+1);
			inputForm.rDay.selectedIndex = 0;
		}
	}
}

function makeDate(theYear,theMonth,theDay) {
	theYear = theYear-0; theMonth = theMonth-0; theDay = theDay-0;
	return new Date(theYear,theMonth,theDay);
}

function compDate(firstDate,lastDate) {
	if (firstDate.getTime()>lastDate.getTime()) return false;
	return true;
}

function checkDate(theYear,theMonth,theDay) {

	theYear = theYear-0;
	theMonth = theMonth-0;
	theDay = theDay-0;

	// Check date actually exists (darn Gregorian calendar!) Assumes all years are leap
	// years - I'm not nuts enough to program leap year detection
	switch(theMonth) {
		case 8: case 3:
		case 5: case 10:
			if (theDay>30) {alert("There is no such date as "+theMonths[theMonth]+" "+theDay);return false;}
		break;
		case 1:
			if (theDay>29) {alert("There is no such date as "+theMonths[theMonth]+" "+theDay);return false;}
		break;
	}

	// Check date hasn't passed
	var today = new Date();
	var testDate = makeDate(theYear,theMonth,theDay)
	if (compDate(today,testDate)==false) {alert(theMonths[theMonth]+" "+theDay+" "+theYear+" has already passed. Please pick another date.");return false;}
}


function checkForm()
{
	var inputForm = document.inputForm;
	var sendForm = document.submitForm;

	// Get Departure date and check validity
	var theYear  = (inputForm.dYear.options[inputForm.dYear.selectedIndex].value);
	var theMonth = (inputForm.dMonth.selectedIndex);
	var theDay   = (inputForm.dDay.selectedIndex+1);
	if (checkDate(theYear,theMonth,theDay)== false) return false;

	// Get Return Date and check Validity
	var therYear  = (inputForm.rYear.options[inputForm.rYear.selectedIndex].value);
	var therMonth = (inputForm.rMonth.selectedIndex);
	var therDay   = (inputForm.rDay.selectedIndex+1);
	if (checkDate(therYear,therMonth,therDay)== false) return false;

	// Check Return Date is after departure date
	if (compDate(makeDate(theYear,theMonth,theDay),makeDate(therYear,therMonth,therDay))==false) {
		alert("Return date must be after departure date!");
		return false;
	}

	
	// Set iContact Subcat
	sendForm.subcat.value = theYear+"-"+theMonth+" ("+theMonths[theMonth-0]+")";

	// Fill in dates
	sendForm.data05.value = theYear+"-"+(theMonth+1)+"-"+theDay;
	sendForm.data06.value = therYear+"-"+(therMonth+1)+"-"+therDay;

	// Fill in destination
	sendForm.data00.value = inputForm.destination.value;

	// Fill in Hotel or Star Rating
	sendForm.data01.value = inputForm.hotelname.value;

	// Fill in Length of Stay
	sendForm.data02.value = inputForm.lengthofstay.value;

	// Fill in Budget
	sendForm.data03.value = inputForm.budget.value;

	// Fill in Departure Point
	if (inputForm.departurePoint.selectedIndex==0) {alert("Please select your departure point");return false;}
	sendForm.data04.value = inputForm.departurePoint.options[inputForm.departurePoint.selectedIndex].text;


	// Check the number of adults and children
	if (isNaN(inputForm.adultNum.value/1) || isNaN(inputForm.childNum.value/1)) {alert("Please enter only numbers for the number of adults and children.");return false;}
	if (inputForm.adultNum.value+inputForm.childNum.value < 1) {alert("Please enter the number of adults and children.");return false;}



	// Fill in numbers
	sendForm.data07.value = inputForm.adultNum.value+"/"+inputForm.childNum.value;

	// Fill in Childrens Ages
	sendForm.data08.value = inputForm.childrenAges.value;

	
	// Fill in talked to a consultant data
	
	if (inputForm.talked)
	{
		if (inputForm.talked[0].checked)
		{
			sendForm.data09.value = "Yes";
			
			if (inputForm.consultant)
			{
				if (inputForm.consultant.value == "")
				{
					alert("Please enter your consultant's name");
					inputForm.consultant.focus;
					return false;
				}
				sendForm.data10.value = inputForm.consultant.value;
			}
		}
		else
		{
			sendForm.data09.value = "No";
			sendForm.data10.value = "";
		}
	}

	// Fill in Newsletter Subscribe
	
	if (inputForm.newsletter)
	{
		if (inputForm.newsletter[0].checked)
		{
			sendForm.data11.value = "Yes";
		}
		else
		{
			sendForm.data11.value = "No";
		}
	}



	//Check for Name
	sendForm.salutation.value = inputForm.salutation.options[inputForm.salutation.selectedIndex].value;
	if (inputForm.fname.value.length<1) {alert("Please enter your first name");return false;}
	sendForm.fname.value = inputForm.fname.value;
	if (inputForm.lname.value.length<1) {alert("Please enter your family name");return false;}
	sendForm.lname.value = inputForm.lname.value;

	if (inputForm.street.value.length<1) {alert("Please enter your address");return false;}
	sendForm.street.value = inputForm.street.value;
	if (inputForm.suburb.value.length<1) {alert("Please enter your city/town");return false;}
	sendForm.suburb.value = inputForm.suburb.value;

	// Check Address
	if (inputForm.postcode.value.length<1) {alert("Please enter your postcode");return false;}
	sendForm.postcode.value = inputForm.postcode.value;

	// Check Email
	var theEmail = inputForm.email.value;
	if (theEmail.length<1) {alert("Please enter your email address");return false;}
	if (theEmail.indexOf('.')==-1 || theEmail.indexOf('@')==-1){alert("The email you have entered is invalid");return false;}
	sendForm.email.value = theEmail;

	// Check Phones
	if (inputForm.phone1.value.length<1) {alert("Please enter your phone number");return false;}
	sendForm.phone1.value = inputForm.phone1.value;
	sendForm.mobile.value = inputForm.mobile.value;


	// Check Budget
	if (inputForm.budget.value.length<2) {alert("Please enter your budget person for this trip");return false;}

	// Check Destitnation
	if (inputForm.destination.value.length<2) {alert("Please enter your destination");return false;}

	// do cabin stuff
	var cabinString = "";
 	if (document.getElementById("c_ins").checked==true) cabinString+= "Inside | ";
 	if (document.getElementById("c_out").checked==true) cabinString+= "Outside | ";
 	if (document.getElementById("c_bal").checked==true) cabinString+= "Balcony | ";
 	if (document.getElementById("c_otr").checked==true) cabinString+= "Other ";
	sendForm.data12.value = cabinString;


	// Check Notes
	sendForm.notes.value = inputForm.notes.value;

	// Clear up any single quotes
	for (i=0;i<sendForm.elements.length;i++) {
		sendForm.elements[i].value = sendForm.elements[i].value.replace(/'/g,"`");
	}

	document.submitForm.subject.value = "Enquiry Form " + document.submitForm.data00.value+" cruise";

	document.submitForm.submit();
}