/*
 * etForms.js
 * 
 * Executive Touring form processing
 * Copyright © 2007 DL10 Design Limited. All Rights Reserved.
 * 
 * Created: 28 October 2008
 * 
 * Version 1.0
 */

var formToReset = null;

var month = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

function isValid(fieldObj, errorMsg, type) {

	if (type == 'select') {

		if (fieldObj.options[fieldObj.selectedIndex].text.length == 0
				|| fieldObj.selectedIndex == 0) {

			if (errorMsg.length > 0) {

				alert(errorMsg);

			}

			fieldObj.focus();
			return false;

		}
	} else {

		if (fieldObj.value.length == 0) {

			if (errorMsg.length > 0) {

				alert(errorMsg);

			}

			fieldObj.focus();
			return false;

		}
	}

	return true;
}

function validateAndSubmitQuery(element) {

	var reEmail = /^.+\@.+\..+$/

	if (!isValid(element.cf_field_1, "Your Name is a required field")) {

		return false;

	}

	if (!isValid(element.cf_field_4, "Your e-Mail Address is a required field")) {

		return false;

	} else {

		if (!reEmail.test(element.cf_field_4.value)) {

			alert("A valid e-Mail Address is required");
			element.cf_field_4.focus();
			return false;

		}

	}

	submit(element);

	return false;

}

function validateAndSubmitBooking(element) {

	var reEmail = /^.+\@.+\..+$/

	var today = new Date();	
	
	if (!isValid(element.pd_1, "Your First Name is a required field")) {
		return false;
	}
	
	if (!isValid(element.pd_2, "Your Last Name is a required field")) {
		return false;
	}

	if (!isValid(element.pd_3, "Your e-Mail Address is a required field")) {
		return false;
	} else {

		if (!reEmail.test(element.pd_3.value)) {

			alert("A valid e-Mail Address is required");
			element.pd_3.focus();
			return false;

		}

	}
	
	if (!isValid(element.pd_4, "Your Telephone Number is a required field")) {
		return false;
	}
	
	if(element.acc_r.checked) {
	
		if (!element.act_1.checked && !element.act_2.checked && !element.act_3.checked) {
			alert("Please select an accommodation type");
			element.act_1.focus();
			return false;
		}
		
		if(!isValid( element.ac_n_a, "Please enter the number of adults in your party")) {
			return false;
		}
		
		if(!isValid( element.ac_n_c, "Please enter the number of children in your party")) {
			return false;
		}
	
		if(!validateDates(today, element.ac_a_d,element.ac_a_m,element.ac_a_y)) {
			return false;
		}
		
		if(!validateDates(today, element.ac_d_d,element.ac_d_m,element.ac_d_y)) {
			return false;
		}
	
		if(!isValid( element.acb_n, "Please enter your budget per night")) {
			return false;
		}
	
	}
	
	if (element.ch_r.checked) {
	
		if(!validateDates(today, element.ch_a_d,element.ch_a_m,element.ch_a_y)) {
			return false;
		}
		
		if(!validateDates(today, element.ch_d_d,element.ch_d_m,element.ch_d_y)) {
			return false;
		}
		
		if(!isValid( element.ch_n_p, "Please enter the number of pax")) {
			return false;
		}
		
	}
	
	if (element.to_r.checked) {
		
		if (!element.tot_1.checked && !element.tot_2.checked && !element.tot_3.checked && !element.tot_4.checked) {
			alert("Please select a tour type");
			element.tot_1.focus();
			return false;
		}
		
		if(!isValid( element.to_n_a, "Please enter the number of adults requiring tours")) {
			return false;
		}
		
		if(!isValid( element.to_n_a, "Please enter the number of adults requiring tours")) {
			return false;
		}
		
		if(!isValid( element.to_n_c, "Please enter the number of children requiring tours")) {
			return false;
		}
		
		if(!validateDates(today, element.to_a_d,element.to_a_m,element.to_a_y)) {
			return false;
		}
		
		if(!validateDates(today, element.to_d_d,element.to_d_m,element.to_d_y)) {
			return false;
		}
		
	}
	
	if (element.fa_r.checked) {
		
		if(!isValid( element.fa_adp, "Please enter the airport of departure")) {
			return false;
		}
		
		if(!isValid( element.fa_ads, "Please enter your destination")) {
			return false;
		}
		
		if(!isValid( element.fa_n_a, "Please enter the number of adults requiring flights")) {
			return false;
		}
		
		if(!isValid( element.fa_n_c, "Please enter the number of children requiring flights")) {
			return false;
		}
		
		if(!validateDates(today, element.fa_a_d,element.fa_a_m,element.fa_a_y)) {
			return false;
		}
		
		if(!validateDates(today, element.fa_d_d,element.fa_d_m,element.fa_d_y)) {
			return false;
		}
		
	}
	
	element.action = "/processing/processbooking.php"

	return true;

}

function validateDates(today, dayElement, monthElement, yearElement) {
	
	var curr_day = today.getDate();
	var curr_month = today.getMonth();
	var curr_year = today.getFullYear();
	
	var day = dayElement.value;
	var month = getMonthNum(monthElement.value);
	var year = yearElement.value;
	
	if(year < curr_year) {
		alert("Please select a valid year.");
		yearElement.focus();
		return false;
	}
	
	if(year <= curr_year && month < curr_month) {
		alert("Please select a valid month.");
		monthElement.focus();
		return false;
	}
	
	if(year <= curr_year && month <= curr_month && day < curr_day) {
		alert("Please select a valid day.");
		dayElement.focus();
		return false;
	}
	
	return true;
	
}

function submit(element) {

	formToReset = element;

	params = new Array();

	params.push(element.cf_field_1.value);
	params.push(element.cf_field_2.value);
	params.push(element.cf_field_3.value);
	params.push(element.cf_field_4.value);
	params.push(element.cf_field_5.value);

	new Ajax.Request('/processing/processquery.php', {
		method :'post',
		parameters : {
			cf_field_1 :params[0],
			cf_field_2 :params[1],
			cf_field_3 :params[2],
			cf_field_4 :params[3],
			cf_field_5 :params[4]
		},

		onSuccess :sendSuccess,
		onFailure :sendFailed
	});

}

function resetForm(element) {

	element.cf_field_1.focus();
	element.reset();

}

function sendSuccess(transport) {

	var response = transport.responseText;

	if (response == "0") {

		resultsText = "Thank you for your interest.";
		resetForm(formToReset);

	} else {

		resultsText = "Could not submit. Try later.";

	}

	setResults(resultsText);

}

function sendFailed() {

	resultsText = "Can not submit at this time.";
	
}

function setResults(resultsText) {

	$('formResults').innerHTML = resultsText;
	$('formResults').show();

}

function populateNums(elementID, min, max)
{
	var element = $(elementID);
	var vid = elementID.replace("-i","-v");
	var value = $(vid).innerHTML;
	
	for( var i = min; i <= max; i++ ) {
		addOption(element, i, i);
		if(null != value && i == value) {
			element.selectedIndex = (i);
		}
	}
	addOption(element, "More than " + max, max + "+");
	if(null != value && (max + "+") == value) {
		element.selectedIndex = (max+1);
	}
	
}

function populateDays(elementID)
{
	
	var element = $(elementID);
		
	var today = new Date();
	
	var curr_day = today.getDate();
	
	updateDays(element);
	
}

function populateMonths(elementID)
{
	
	var element = $(elementID);
	var currentSelected = element.selectedIndex;
	var value = 0;
	if(null != currentSelected && currentSelected > -1) {
		value = element.options[currentSelected].value;
	}
	
	var today = new Date();
	
	var curr_month = today.getMonth();
	var isCurrentMonth = true;
	
	for (var i=0; i < month.length;++i) {
		addOption(element, month[i], month[i]);
		if(value != null && value == month[i])
		{
			element.selectedIndex = i;
			isCurrentMonth = false;
		}
	}
	
	if(isCurrentMonth)
	{
		element.selectedIndex = curr_month;
	}	
	
}

function populateYears(elementID)
{
	
	var element = $(elementID);
	var currentSelected = element.selectedIndex;
	var value = 0;
	if(null != currentSelected && currentSelected > -1) {
		value = element.options[currentSelected].value;
	}
	
	var today = new Date();
	
	var curr_year = today.getFullYear();
	var isCurrentYear = true;
	
	for (var i=curr_year; i <= (curr_year + 5); i++) {
		addOption(element, i, i);
		if(value != null && value == i)
		{
			element.selectedIndex = i - curr_year;
			isCurrentYear = false;
		}
	}
	
	if(isCurrentYear)
	{
		element.selectedIndex = 0;
	}
	
}

function updateDays(elementID)
{
	
	var element = $(elementID);
	var currentSelected = element.selectedIndex;
	
	var id = element.id;
	var rg = /_d$/
	var mid = id.replace(rg,"_m");
	var yid = id.replace(rg,"_y");
	
	var value = 0;
	if(null != currentSelected && currentSelected > -1) {
		value = element.options[currentSelected].value;
	}
	var elementM = $(mid);
	var elementY = $(yid);
	
	getDays(element, elementM, elementY);
	
	var today = new Date();
	var curr_day = today.getDate();
	
	if(currentSelected != -1 && currentSelected < element.options.length) {
		element.selectedIndex = currentSelected;
	} else {
		if(getMonthNum(elementM.options[ elementM.selectedIndex ].text) == today.getMonth() && elementY.options[ elementY.selectedIndex ].text == today.getFullYear())
		{
			if(null != value && value != '')
			{
				element.selectedIndex = (value - 1);
			} else {
				element.selectedIndex = (curr_day - 1);
			}
		} else {
			if(null != value)
			{
				element.selectedIndex = (value - 1);
			}
		}
	}

}

function getDays( dayElementID, monthElementID, yearElementID )
{
	
	var dayElement = $(dayElementID);
	var monthElement = $(monthElementID);
	var yearElement = $(yearElementID);
	var year = yearElement.options[ yearElement.selectedIndex ].text;
	var month = monthElement.options[ monthElement.selectedIndex ].text;
	var numDays = 0;
	
	switch( month ) {
		
	case "January":
	case "March":
	case "May":
	case "July":
	case "August":
	case "October":
	case "December":
		numDays = 31;
		break;
	case "April":
	case "June":
	case "September":
	case "November":
		numDays = 30;
		break;
	case "February":
		if ( isLeapYear( year ) ) {
			numDays = 29;
		} else {
			numDays = 28;
		}
	}
	
	for ( var i = dayElement.childNodes.length - 1; i > 0; i-- ) {
		dayElement.removeChild( dayElement.childNodes[ i ] );
	}
	
	for ( var i = 1; i <= numDays; i++ ) {
		addOption(dayElement,i,i);
	}
	
	return true;
	
}

function getMonthNum( monthString ) {
	
	var month;
	
	if ( monthString == "January" ) {
		month = 0;
	} else if ( monthString == "February" ) {
		month = 1;
	} else if ( monthString == "March" ) {
		month = 2;
	} else if ( monthString == "April" ) {
		month = 3;
	} else if ( monthString == "May" ) {
		month = 4;
	} else if ( monthString == "June" ) {
		month = 5;
	} else if ( monthString == "July" ) {
		month = 6;
	} else if ( monthString == "August" ) {
		month = 7;
	} else if ( monthString == "September" ) {
		month = 8;
	} else if ( monthString == "October" ) {
		month = 9;
	} else if ( monthString == "November" ) {
		month = 10;
	} else if ( monthString == "December" ) {
		month = 11;
	}
	
	return month;

}

function isLeapYear( Year )
{
	
	if ( ( Year % 4 ) == 0 )
	{
		if ( ( Year % 100 ) == 0 )
		{
			Result = ( ( Year % 400 ) == 0);
		} else {
			Result = 1;
		}
	} else {
		Result = 0;
	}
	
	return (Result);
	
}

function addOption(elementID, text, value )
{
	
	var element = $(elementID);
	var optn = document.createElement("option");
	optn.text = text;
	optn.value = value;
	element.options.add(optn);

}
