//date validation
	var ErrDate1="Please enter Arrival / Departure Dates."
	var ErrDate2="Please enter a valid Arrival Date."
	var ErrDate3="The Date entered is in the past. Please enter a valid Arrival Date."
	var ErrDate3a="I am afraid a mimimum of 24 hours is required to process your request."
	var ErrDate4="Please enter a valid Departure Date."
	var ErrDate5="Your period of stay appears to be incorrect as it is longer than a year."
	var ErrDate6="The Departure Date should be later than the Arrival Date."

function validDate(year, month, day) {
	var tempDate = new Date(year, month, day)
	return tempDate.getDate() == day
}

//submit the form
function checkDate(form) {
	//Dates entered?
	if (cInDay.selectedIndex == 0 || cInMonth.selectedIndex == 0 || cInYear.selectedIndex == 0 || cOutDay.selectedIndex == 0 || cOutMonth.selectedIndex == 0 || cOutYear.selectedIndex == 0) {
		alert(ErrDate1)
		cInDay.focus()
		return	false}

	//Arrival date valid?
	if (!validDate(cInYear[cInYear.selectedIndex].text, cInMonth.selectedIndex - 1, cInDay.selectedIndex)) {
		alert(ErrDate2)
		cInDay.focus()
		return	false}
	
	var todayDate = new Date()
	var checkinDate= new Date(cInYear[cInYear.selectedIndex].text, cInMonth.selectedIndex - 1, cInDay.selectedIndex, 0,1,0)

	//var mDiff=	Date.UTC(checkinDate) - Date.UTC(currentDate)
	todayDate.setHours(0)
	todayDate.setMinutes(0)
	// Date is in the past?
	if (checkinDate < todayDate) {
		alert(ErrDate3)
		cInDay.focus()
		return	false}
	// Today?
	checkinDate.setMinutes(0)
	if (checkinDate < todayDate) {
		alert(ErrDate3a)
		cInDay.focus()
		return	false}
	//Departure Date Valid?
	if (!validDate(cOutYear[cOutYear.selectedIndex].text, cOutMonth.selectedIndex - 1, cOutDay.selectedIndex)) {
		alert(ErrDate4)
		cOutDay.focus()
		return	false}

	// Departure - Arrival >1 year?
	var msDifference = Date.UTC(cOutYear[cOutYear.selectedIndex].text, cOutMonth.selectedIndex - 1, cOutDay.selectedIndex) - Date.UTC(cInYear[cInYear.selectedIndex].text, cInMonth.selectedIndex - 1, cInDay.selectedIndex)

	if (msDifference > 31536000000) {  //1 year in milliseconds
		alert(ErrDate5)
		cOutDay.focus()
		return	false}

	// Departure < Arrival?
	if (msDifference <= 0) {
		alert(ErrDate6)
		cOutDay.focus()
		return	false}

//	form.submit()
return true
}

//set checkout date to checkin date + 1 day
function setDate() {
	var checkoutDate = new Date(cInYear[cInYear.selectedIndex].text, cInMonth.selectedIndex - 1, cInDay.selectedIndex + 1)
	var newOutDay = checkoutDate.getDate()
	var newOutMonth = checkoutDate.getMonth()
	var newOutYear = checkoutDate.getYear().toString()

	if (cInDay.selectedIndex !=0 && cOutDay.selectedIndex ==0) cOutDay.selectedIndex = newOutDay
	if (cInMonth.selectedIndex != 0 && cOutMonth.selectedIndex ==0)  cOutMonth.selectedIndex = newOutMonth + 1

	for (var i=1; i<3; i++) {
		if (cOutYear[i].text.charAt(3) == newOutYear.charAt(newOutYear.length - 1)) cOutYear.selectedIndex = i
	}
}
<!-- CC Error
var CErr1 = "The Credit Card Type is Invalid.\nIf you are faxing your Credit Card details, please select 'Send by FAX' and fax it to +65 6346-5722.";
var CErr2 = "The Credit Card Number is required. Please enter the Card Number.\n If you are faxing your Credit Card details, please select 'Send by FAX' and fax it to +65 6346-5722";
var CErr3 = "The Credit Card has already expired. Please enter a new expiration date.";
var CErr4a = "Please ensure that the Credit Card Type is correct.\nThis looks like a ";
var CErr4b = " number, not a ";
var CErr4c = " number.";
var CErr5 = "You may have made a mistake, the Card Number is not valid.\n If you are facing problem entering your Card Number, please select 'Send by FAX' in the Credit Card Type\n and fax it to +65 6346-5722.";
var CErr6 = "The Credit Card Security Code is required. Please enter 3 digit Security Code(Visa/Master/Diners) or 4 digit Security Code(Amex) stated on the credit card .\n If you are faxing your Credit Card details, please select 'Send by FAX' and fax it to +65 6346-5722";

<!-- Form Error
var FErr1 = "Email Address seems Incorrect, please check if '@' or '.' are missing. Eg. tom@aol.com";
var FErr2 = "Email: You may have made a typo error, the username doesn't seem to be valid. Eg. tom@aol.com";
var FErr3 = "Email: You may have made a typo error, destination IP address is invalid! Eg. tom@aol.com";
var FErr4 = "Email: You may have made a typo error, the domain name doesn't seem to be valid. Eg. tom@aol.com";
var FErr5 = "Email: You may have made a typo error, the email must end in a three-letter domain,\n or two letter country. Eg. tom@aol.com OR tom@yahoo.com.sg";
var FErr6 = "Email: You may have made a typo error, the email is missing a hostname. Eg. tom@aol.com";
var FErr7 = "Please enter numbers only. Eg. 12";
var FErr8 = "Please enter a valid Telephone number.\nWe will only call you if we were unable to reach you by Email or Fax.";
var FErr9 = "Age of Children: Please enter only numbers separated by commas. Eg. 3,10,11";
var FErr10 = " field is required. Please select or fill in completely.";

<!-- Credit Card
var Cards = new makeArray(5);
Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
var MasterCard = Cards[0];
Cards[1] = new CardType("VisaCard", "4", "13,16");
var VisaCard = Cards[1];
Cards[2] = new CardType("AmExCard", "34,37", "15");
var AmExCard = Cards[2];
Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
var DinersClubCard = Cards[3];
Cards[4] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
var JCBCard = Cards[4];
var LuhnCheckSum = Cards[5] = new CardType();

function CheckCardNumber(form) {
var tmpyear;

card = form.CardType.options[form.CardType.selectedIndex].value;
if (card == "FAX" || card == "MORE")
	return true;
	
if (form.CardType.selectedIndex==0){
	alert(CErr1);
	form.CardType.focus();
	return false;
	}
	

if (form.CardNumber.value.length == 0) {
	alert(CErr2);
	form.CardNumber.focus();
	return false;
	}
	

if (!(form.SecurityCode))
{}
else
{

	if (form.SecurityCode.value.length == 0) 
	{

	alert(CErr6);
	form.SecurityCode.focus();
	return false;
	 }
}

	
tmpyear = "20";
tmpyear += form.ExpYear.options[form.ExpYear.selectedIndex].value;
tmpmonth = form.ExpMon.options[form.ExpMon.selectedIndex].value;
if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
	alert(CErr3);
	form.ExpMon.focus();
	return false;
	}

var retval = eval(card + ".checkCardNumber(\"" + form.CardNumber.value +
"\", " + tmpyear + ", " + tmpmonth + ");");
cardname = "";
if (retval)
	{
	return true;
	}
else {
	for (var n = 0; n < Cards.size; n++) {
	if (Cards[n].checkCardNumber(form.CardNumber.value, tmpyear, tmpmonth)) {
	cardname = Cards[n].getCardType();
	break;
	   }
	}
	if (cardname.length > 0) {
		alert(CErr4a + cardname + CErr4b + card + CErr4c);
		form.CardType.focus();
		}
	else {
		alert(CErr5);
		form.CardNumber.focus();
		form.CardNumber.select();
		}
	}
 return false;
}

function CardType() {
var n;
var argv = CardType.arguments;
var argc = CardType.arguments.length;

this.objname = "object CardType";

var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";

this.setCardNumber = setCardNumber; 
this.setCardType = setCardType; 
this.setLen = setLen; 
this.setRules = setRules; 
this.setExpiryDate = setExpiryDate;

this.setCardType(tmpcardtype);
this.setLen(tmplen);
this.setRules(tmprules);
if (argc > 4)
this.setExpiryDate(argv[3], argv[4]);

this.checkCardNumber = checkCardNumber; 
this.getExpiryDate = getExpiryDate; 
this.getCardType = getCardType; 
this.isCardNumber = isCardNumber; 
this.isExpiryDate = isExpiryDate; 
this.luhnCheck = luhnCheck;
return this;
}

function checkCardNumber() {
var argv = checkCardNumber.arguments;
var argc = checkCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
var year = (argc > 1) ? argv[1] : this.year;
var month = (argc > 2) ? argv[2] : this.month;

this.setCardNumber(cardnumber);
this.setExpiryDate(year, month);

if (!this.isCardNumber())
return false;
if (!this.isExpiryDate())
return false;

return true;
}


function popUp(URL) {
day = new Date();
id = day.getTime();
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=600,height=650,left = 12,top = -116');");
}


function getCardType() {
return this.cardtype;
}

function getExpiryDate() {
return this.month + "/" + this.year;
}

function isCardNumber() {
var argv = isCardNumber.arguments;
var argc = isCardNumber.arguments.length;
var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
if (!this.luhnCheck())
return false;

for (var n = 0; n < this.len.size; n++)
if (cardnumber.toString().length == this.len[n]) {
for (var m = 0; m < this.rules.size; m++) {
var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
if (headdigit == this.rules[m])
return true;
}
return false;
}
return false;
}

function isExpiryDate() {
var argv = isExpiryDate.arguments;
var argc = isExpiryDate.arguments.length;

year = argc > 0 ? argv[0] : this.year;
month = argc > 1 ? argv[1] : this.month;

if (!isNum(year+""))
return false;
if (!isNum(month+""))
return false;
today = new Date();
expiry = new Date(year, month);
if (today.getTime() > expiry.getTime())
return false;
else
return true;
}

function isNum(argvalue) {
argvalue = argvalue.toString();

if (argvalue.length == 0)
return false;

for (var n = 0; n < argvalue.length; n++)
if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
return false;

return true;
}

function luhnCheck() {
var argv = luhnCheck.arguments;
var argc = luhnCheck.arguments.length;

var CardNumber = argc > 0 ? argv[0] : this.cardnumber;

if (! isNum(CardNumber)) {
return false;
  }

var no_digit = CardNumber.length;
var oddoeven = no_digit & 1;
var sum = 0;

for (var count = 0; count < no_digit; count++) {
var digit = parseInt(CardNumber.charAt(count));
if (!((count & 1) ^ oddoeven)) {
digit *= 2;
if (digit > 9)
digit -= 9;
}
sum += digit;
}
if (sum % 10 == 0)
return true;
else
return false;
}

function makeArray(size) {
this.size = size;
return this;
}

function setCardNumber(cardnumber) {
this.cardnumber = cardnumber;
return this;
}

function setCardType(cardtype) {
this.cardtype = cardtype;
return this;
}

function setExpiryDate(year, month) {
this.year = year;
this.month = month;
return this;
}

function setLen(len) {
// Create the len array.
if (len.length == 0 || len == null)
len = "13,14,15,16,19";

var tmplen = len;
n = 1;
while (tmplen.indexOf(",") != -1) {
tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
n++;
}
this.len = new makeArray(n);
n = 0;
while (len.indexOf(",") != -1) {
var tmpstr = len.substring(0, len.indexOf(","));
this.len[n] = tmpstr;
len = len.substring(len.indexOf(",") + 1, len.length);
n++;
}
this.len[n] = len;
return this;
}

function setRules(rules) {
// Create the rules array.
if (rules.length == 0 || rules == null)
rules = "0,1,2,3,4,5,6,7,8,9";
  
var tmprules = rules;
n = 1;
while (tmprules.indexOf(",") != -1) {
tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
n++;
}
this.rules = new makeArray(n);
n = 0;
while (rules.indexOf(",") != -1) {
var tmpstr = rules.substring(0, rules.indexOf(","));
this.rules[n] = tmpstr;
rules = rules.substring(rules.indexOf(",") + 1, rules.length);
n++;
}
this.rules[n] = rules;
return this;
}

// Validate Email
function emailCheck (emailS) {
var emailStr=emailS.value;
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

if (emailStr=='')
	return true;
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
 	alert(FErr1)
	emailS.focus();
	emailS.select();
	return false
}
var user=matchArray[1]
var domain=matchArray[2]
 
if (user.match(userPat)==null) {
    alert(FErr2)
	emailS.focus();
	emailS.select();
    return false
}

var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
 	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert(FErr3)
			emailS.focus();
			emailS.select();
			return false
	    }
    }
    return true
}

var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert(FErr4)
	emailS.focus();
	emailS.select();
    return false
}

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>4) {
   alert(FErr5)
   emailS.focus();
	emailS.select();
   return false
}

if (len<2) {
   alert(FErr6)
   emailS.focus();
	emailS.select();
   return false
}

return true;
}

// Validate
function validate(field) {
var valid = "0123456789"
var ok = "yes";
var temp;
for (var i=0; i<field.value.length; i++) {
temp = "" + field.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1") ok = "no";
}
if (ok == "no") {
alert(FErr7);
field.focus();
field.select();
   }
}

function validatephone(field) 
{
	var valid = "0123456789()-+. "
	var ok = "yes";
	var temp;
	var i=0;
	for (; i<field.value.length; i++) {
		temp = "" + field.value.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") ok = "no";
	}
	if (ok == "no" || i < 5) 
	{
		alert(FErr8);
		field.focus();
		field.select();
		return false;
   }
   return true;
}

function validatechildages(field) {
var valid = "0123456789, "
var ok = "yes";
var temp;
for (var i=0; i<field.value.length; i++) {
temp = "" + field.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1") ok = "no";
}
if (ok == "no") {
	alert(FErr9);
	field.focus();
	field.select();
	return false;
   }
return true;
}


// Check rq
function checkrq(which) {
var pass=true;
	if (!checkDate(this))
		return false;
	if (document.images) 
	{
		for (i=0;i<which.length;i++) 
		{
			var tempobj=which.elements[i];
			if (tempobj.name=="rqtelephone") 
			{
				if (validatephone(tempobj)==false)
				{
					return false;
				}
			}
			if (tempobj.name=="rqemail") 
			{
				if (emailCheck (tempobj)==false) 
				{
					return false;
				}
			}
			if (tempobj.name=="childrenage")
			{
				if (validatechildages(tempobj)==false) 
				{
					return false;
				}
			}

			if (tempobj.name.substring(0,2)=="rq") 
			{
				if (((tempobj.type=="text" || tempobj.type=="textarea")&&
						tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&
						tempobj.selectedIndex==0)) 
				{
					pass=false;
					break;
				}
			}
	   }
	}
	if (!pass) 
	{
		shortFieldName=tempobj.name.substring(2,22).toUpperCase();
		alert(shortFieldName+FErr10);
		tempobj.focus();

		return false;
	}
	else
	{
		if (CheckCardNumber(which)==false)
			return false;
		else
			return true;
	}
}

function ignoreSpaces(string) {
var temp = "";
splitstring = string.split(" ");
for(i = 0; i < splitstring.length; i++)
temp += splitstring[i];

return temp;
}

function openhotellist(string, field) {
window.open(string,'popuppage','width=350,height=200,top=100,left=100');
	
}
//  End -->
