<!--
/* The following methods are private methods used by other methods in this file
*/
/* isDigit(ch)
 * 	checks if input char is a digit
 * 	returns boolean value
 */
function isDigit(ch)
{
   	var strAllowed = "1234567890";
   	return (strAllowed.indexOf (ch) != -1);
}

/* containsChars(str)
 * 	checks if input string contains any alpha characters
 * 	returns boolean value
 */
function containsChars(str)
{
  	var validchars = "abcdefghijklmnopqrstuvwxyz";
  	for (var i = 0; i < str.length; i++) {
    	var character = str.charAt(i).toLowerCase();
    	if (validchars.indexOf(character) != -1) // found a char!
      		return true;
    }
    return false;
}

/* isNumeric(str)
 * 	checks if input string is numeric
 *  Does not validate negative or positive numbers
 * 	returns boolean value
 */
function isNumeric(str)
{
	var theData = new String(str);
	for (var i = 0; i < theData.length; i++) {
		if (!isDigit(theData.charAt(i)))
			return false;
	}
	return true;
}

/* LeapYear(intYear)
 * 	checks if input year is a leap year
 * 	returns boolean value
 */
function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}
	else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

/* isGreaterThanOrEqual()
 * 	input params are two dates that have been converted to string representations of dates using convertToDateType()
 * 	returns true if date1 is on or after date2
 */
function isGreaterThanOrEqual(date1, date2) {
 	var firstDate = Date.parse(date1);
 	var secondDate = Date.parse(date2);
 	//alert(firstDate + ", " + secondDate);
 	return (firstDate >= secondDate);
}

/* convertToDateType(strDate)
 * 	input params is a date of format:
 *		mm/dd/yy, mm/dd/yyyy, mm-dd-yy, mm-dd-yyyy (US)
 *		dd/mm/yy, dd/mm/yyyy, dd-mm-yy, dd-mm-yyyy (European)
 * 	returns a string representation of the a valid date
 * 	returns "-1" if date is not valid
 *  calls isNumeric()
 */
function convertToDateType(strDate) {

    var arr1 = new Array();
    var arr2 = new Array();

	arr1 = strDate.split("/");
	arr2 = strDate.split("-");

    var rtn = "0";
	if ((arr1.length != 3) && (arr2.length != 3)){
		rtn = "-2"; //don't return an error, since struts already does
	}
	else {
		if (arr1.length == 3)
			var dateArr = arr1;
		if (arr2.length == 3)
			var dateArr = arr2;
		if (isNumeric(dateArr[0]) && isNumeric(dateArr[1]) && isNumeric(dateArr[2])){
			if (((dateArr[0].length == 2) && dateArr[0] > 12) && (dateArr[1] <= 12)) {	//Euro date
				var day = dateArr[0];
				var mon = dateArr[1];
				var year = dateArr[2];
			}
			else if (dateArr[0].length == 4) { //YYYY-MM-DD format
				var year = dateArr[0];
				var day = dateArr[2];
				var mon = dateArr[1];
			}
			else { //US date
				var day = dateArr[1];
				var mon = dateArr[0];
				var year = dateArr[2];
			}

			if (year.length < 2 || year.length > 4)
				rtn = "-1";
			else if (year.length == 2 && year < 50)
				year = "20" + year;
			if (rtn == "0") {
				rtn = new Date(year, mon - 1, day);
			}
		}
		else {
			rtn = "-1";
		}
	}
	return rtn;
}

/* The following methods can be used by any web form
*/
/* isValidDate(strDate)
 *  checks if a date is valid
 * 	input params is a date of format:
 *		mm/dd/yy, mm/dd/yyyy, mm-dd-yy, mm-dd-yyyy (US)
 *		dd/mm/yy, dd/mm/yyyy, dd-mm-yy, dd-mm-yyyy (European)
 * 	returns "0" if date is valid
 * 	returns "-1" if date is not valid
 */
function isValidDate(strDate) {
	var arr1 = strDate.split("/");
	var arr2 = strDate.split("-");
	var rtn = "0";
	if ((arr1.length != 3) && (arr2.length != 3)){
		rtn = "-2";  //Struts is already validating empty field
	}
	else {
		if (arr1.length == 3)
			var dateArr = arr1;
		if (arr2.length == 3)
			var dateArr = arr2;
		if (isNumeric(dateArr[0]) && isNumeric(dateArr[1]) && isNumeric(dateArr[2])){
			if ((dateArr[0].length == 2) && (dateArr[0] > 12) && (dateArr[1] <= 12)) {	//could be euro date
				var day = dateArr[0];
				var mon = dateArr[1];
				var year = dateArr[2];
			}
			else if (dateArr[0].length == 4) { //YYYY-MM-DD format
				var year = dateArr[0];
				var day = dateArr[2];
				var mon = dateArr[1];
			}
			else { //american date
				var day = dateArr[1];
				var mon = dateArr[0];
				var year = dateArr[2];
			}
			if (year.length < 2 || year.length > 4)
				rtn = "-1";
			else if (year.length == 2 && year < 50)
				year = "20" + year;
			if (rtn == "0") {
				if (mon > 12 || mon < 1) {
					rtn = "-1";
				}
				if ((mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) && (day > 31 || day < 1)) {
					rtn = "-1";
				}
				if ((mon == 4 || mon == 6 || mon == 9 || mon == 11) && (day > 30 || day < 1)) {
					rtn = "-1";
				}
				if (mon == 2) {
					if (day < 1) {
						err = 8;
						rtn = "-1";
					}
					if (LeapYear(year) == true) {
						if (day > 29) {err = 9;
							rtn = "-1";
						}
					}
					else {
						if (day > 28) {
							rtn = "-1";
						}
					}
				}
			}
		}
		else {
			rtn = "-1";
		}
	}
	return rtn;
}

/* The following methods are specific to Web Direct but may also be used
 * for other web pages
*/
/* validateAges(thisForm)
 * 	assumes 10 text fields for ages, each named age1, age2...age10
 * 	input param is the form
 * 	returns empty string if valid
 * 	returns error string if not valid
 */
function validateAges(thisForm) {
	var errStr = "";
	if (thisForm.age1.value == "" &&
    		thisForm.age2.value == "" &&
    		thisForm.age3.value == "" &&
    		thisForm.age4.value == "" &&
    		thisForm.age5.value == "" &&
    		thisForm.age6.value == "" &&
    		thisForm.age7.value == "" &&
    		thisForm.age8.value == "" &&
    		thisForm.age9.value == "" &&
    		thisForm.age10.value == "") {
     	errStr = "Please enter valid ages for all travelers.\n";
	}
	return errStr;
}

/* compareDates(svrDate, depart, rtn, init)
 *  compares a start and end date to make sure they are valid
 * 	input params are departuredate, returndate and initial trip deposit date
 * 	init can be null
 * 	returns empty string if valid
 * 	returns error string if not valid
 * 	calls Date.parse() and convertToDateType()
 */
function compareDates(svrDate, depart, rtn, init) {
	var errStr = "";
    var today = new Date();
    var serverDate = convertToDateType(svrDate);
	var dptDate = convertToDateType(depart);
	var rtnDate = convertToDateType(rtn);
	var initDate = "";
	if (dptDate != "-1" || dptDate != "-2") {
		if (!isGreaterThanOrEqual(dptDate, serverDate))
			errStr = errStr + "The Departure Date must occur on or after today's Date.\n";
	}
	if (rtnDate != "-1" || rtnDate != "-2") {
		if (!isGreaterThanOrEqual(rtnDate, dptDate))
			errStr = errStr + "The Return Date must occur on or after the Departure Date.\n";
	}
	if (init != null && init != "" && init != "mm/dd/yy" && init != 'undefined') {
		initDate = convertToDateType(init);
		if (initDate != "-1" || initDate != "-2") {
			if (!isGreaterThanOrEqual(dptDate, initDate))
				errStr = errStr + "The Initial Trip Deposit Date must occur on or before the Departure Date.\n";
		}
	}
	return errStr;
}

/* validateDates(theForm)
 * 	input param is the form
 * 	init can be null
 * 	returns empty string if valid
 * 	returns error string if not valid
 * 	calls containsChars(), isValidDate() and compareDates()
 */
function validateDates(theForm) {
	var init, svrDate, dptDate, rtnDate;
    var today = new Date();

    if (typeof(theForm.initdate) != 'undefined')
		init = theForm.initdate.value;

    if(theForm.serverdate == 'undefined' || theForm.serverdate == null || theForm.serverdate == "") {
        svrDate = new String((today.getMonth()+1) + "-" + today.getDate() + "-" + today.getYear());
    } else {
        svrDate = theForm.serverdate.value;
    }

	dptDate = theForm.departdate.value;
	rtnDate = theForm.returndate.value;
	var errStr = "";
	if (((init != null) && (containsChars(init)) & init != "mm/dd/yy") || containsChars(rtnDate) || containsChars(dptDate) )
		errStr = "passthrough";
	else if (dptDate == "" || rtnDate == "")
		errStr = "passthrough";
	if (errStr != "passthrough") {
		errStr = "";
		if (isValidDate(dptDate) == "-1")
			errStr+= "Departure Date is invalid.\n";
		if (isValidDate(rtnDate) == "-1")
			errStr+= "Return Date is invalid.\n";
		if (init != null && init != "" && init != "mm/dd/yy") {
			if (isValidDate(init) == "-1")
				errStr+= "Initial Trip Deposit Date is invalid.\n";
		}

		if (errStr == "")
			errStr+= compareDates(svrDate, dptDate, rtnDate, init);
	}
	else errStr = "";



	return errStr;
}

/* checkForMMDDYY(theForm)
 * 	input param is the form
 * 	returns empty string if valid
 * 	returns error string if not valid
 */
function checkForMMDDYY(theForm) {
	var errStr = "";
	if (theForm.departdate.value == "mm/dd/yy") {
    	errStr = "Departure Date is invalid.\n";
    }
    if (theForm.returndate.value == "mm/dd/yy") {
    	errStr+= "Return Date is invalid.\n";
    }
    return errStr;
}



//-->
