function validate(form)
{
	var errorMessage = "The following problems were found with the form: \n\n";
	var valid = true;
	if (form.nameTextBox != undefined)
	{
		if (form.nameTextBox.value == "")
		{
			{
				valid = false;
				errorMessage += " - Please supply your name\n";
			}
		}
	}
	if (form.emailTextBox != undefined)
	{
		if (form.emailTextBox.value == "")
		{
			{
				valid = false;
				errorMessage += " - Please supply your email address\n";
			}
		}
	}
	if (form.telephoneTextBox != undefined)
	{
		if (form.telephoneTextBox.value == "")
		{
			{
				valid = false;
				errorMessage += " - Please supply your telephone number\n";
			}
		}
	}
	if (form.enquiryCategoryDropDownList != undefined)
	{
		if (form.enquiryCategoryDropDownList.selectedIndex == 0 || form.enquiryCategoryDropDownList.value == "0")
		{
			valid = false;
			errorMessage += " - Please supply an Enquiry Category\n";
		}
	}
	if (form.enquiryTopicDropDownList != undefined)
	{
		if (form.enquiryTopicDropDownList.selectedIndex == 0 || form.enquiryTopicDropDownList.value == "0")
		{
			valid = false;
			errorMessage += " - Please supply an Enquiry Topic\n";
		}
	}
	if (form.locationDropDownList != undefined)
	{
		if (form.locationDropDownList.selectedIndex == 0 || form.locationDropDownList.value == "0")
		{
			valid = false;
			errorMessage += " - Please supply a flight location\n";
		}
	}
	if (form.personsDropDownList != undefined)
	{
		if (form.personsDropDownList.selectedIndex == 0)
		{
			valid = false;
			errorMessage += " - Please supply the number of people\n";
		}
	}
	if (form.voucherValueDropDownList != undefined && form.voucherUserValue != undefined)
	{
		if (form.voucherUserValue.value != "")
		{
			if (!IsNumeric(form.voucherUserValue.value))
			{
				valid = false;
				errorMessage += " - Please supply a valid voucher value\n";
			}
		}
		else
		{
			if (form.voucherValueDropDownList.selectedIndex == 0)
			{
				valid = false;
				errorMessage += " - Please supply a voucher value\n";
			}
		}
	}
	if (form.recipientsNameTextBox != undefined)
	{
		if (form.recipientsNameTextBox.value == "")
		{
			valid = false;
			errorMessage += " - Please supply a recipient name\n";
		}
		if (form.recipientsEmailTextBox.value == "")
		{
			valid = false;
			errorMessage += " - Please supply a recipient email\n";
		}
		else if (!validEmail(form.recipientsEmailTextBox.value))
		{
			valid = false;
			errorMessage += " - Please supply a valid recipient email address.\n";
		}
	}
	if (form.preferredDateYearDropDownList != undefined)
	{
		if (form.preferredDateYearDropDownList.selectedIndex == 0
			|| form.preferredDateMonthDropDownList.selectedIndex == 0
			|| form.preferredDateDayDropDownList.selectedIndex == 0)
		{
			valid = false;
			errorMessage += " - Please supply a preferred date\n";
		}
	}
	if (form.alternativeDateYearDropDownList != undefined)
	{
		if (form.alternativeDateYearDropDownList.selectedIndex == 0
			|| form.alternativeDateMonthDropDownList.selectedIndex == 0
			|| form.alternativeDateDayDropDownList.selectedIndex == 0)
		{
			valid = false;
			errorMessage += " - Please supply an alternative date\n";
		}
	}
	if (form.cardTypeDropDownList != undefined)
	{
		if (form.cardTypeDropDownList.selectedIndex == 0)
		{
			valid = false;
			errorMessage += " - Please supply a card type\n";
		}
		if (form.cardHolderNameTextBox.value == "")
		{
			valid = false;
			errorMessage += " - Please supply a cardholder name\n";
		}
		if (form.cardNumberTextBox.value == "")
		{
			valid = false;
			errorMessage += " - Please supply a card number\n";
		}
		else if (!IsNumeric(form.cardNumberTextBox.value) || !validCard(form.cardNumberTextBox.value)
			|| form.cardNumberTextBox.value.length < 13 || form.cardNumberTextBox.value.length > 19 )
		{
			valid = false;
			errorMessage += " - Please supply a valid card number\n";
		}
		if (form.cvvCodeTextBox.value == "")
		{
			valid = false;
			errorMessage += " - Please supply a CVV / CVC code\n";
		}
		else if (!IsNumeric(form.cvvCodeTextBox.value)
			|| form.cvvCodeTextBox.value.length < 3 || form.cvvCodeTextBox.value.length > 4)
		{
			valid = false;
			errorMessage += " - Please supply a valid CVV / CVC code\n";
		}
	}
	if (form.expiryMonthDropDownList != undefined)
	{
		if (form.expiryMonthDropDownList.selectedIndex == 0
			|| form.expiryYearDropDownList == 0)
		{
			valid = false;
			errorMessage += " - Please supply an expiry date\n";
		}
	}
	if (!valid)
	{
		errorMessage += "\n";
		errorMessage += "Please correct the problems and try again - Thank You.";
		alert(errorMessage);
	}
	return valid;
}

function monthsOfYear(yearElement, monthElement)
{
    alert(yearElement);
	if (yearElement != undefined && monthElement != undefined)
	{
		if (yearElement.selectedIndex == 0) monthElement.disabled = true;
		else monthElement.disabled = false;
	}
}

function daysOfMonth(yearElement, monthElement, dayElement)
{
	if (yearElement != undefined && monthElement != undefined && dayElement != undefined)
	{
		if (monthElement.selectedIndex == 0) dayElement.disabled = true;
		else
		{
			dayElement.disabled = false;
			dayElement.options[29] = new Option('29', '29');
			dayElement.options[30] = new Option('30', '30');
			dayElement.options[31] = new Option('31', '31');
			switch (monthElement.selectedIndex)
			{
				case 2:
					dayElement.options[31] = null;
					dayElement.options[30] = null;
					if (yearElement.selectedIndex % 4 != 0) dayElement.options[29] = null;
					break;
				case 4:
				case 6:
				case 9:
				case 11:
					dayElement.options[31] = null;
					break;
			}
		}
	}
}

function IsNumeric(n)
{
	if (n*1==n) return true;
	else return false;
}

function validEmail(email)
{
	var invalidChars = " /:,;";
	
	for (var i = 0; i < invalidChars.length; i++) 
	{	
		var badChar = invalidChars.charAt(i);
		if (email.indexOf(badChar, 0) > -1) return false;
	}
	var atPos = email.indexOf("@", 1);
	if (atPos == -1) return false;
	if (email.indexOf("@", atPos+1) != -1) return false;
	var periodPos = email.indexOf(".", atPos);
	if (periodPos == -1) return false;
	if (periodPos + 3 > email.length) return false;	
	return true;
}

function validCard(number)
{
	var sum = 0;
	var digit = 0;
	var addend = 0;
	var timesTwo = false;
	
	for ( i=number.length-1; i>=0; i-- )
	{
		digit = eval(number.substr(i,1));
		if ( timesTwo )
		{
			addend = digit * 2;
			if ( addend > 9 ) addend -= 9;
		}
		else addend = digit;
		sum += addend;
		timesTwo = !timesTwo;
	}
	var modulus = sum % 10;
	return modulus == 0;
}