// Copyright Travelstart Nordic AB 2005.
// By Erik Bosrup
// Requires layer.js.

// Provides form validation. Parameters are css classess to use and message when alerting on bad entry.
function Validation(classOk, classMand, classBad, badMsg) {
	// Attr
	this.ve = new Array(); // Our VE objs
	this.va = new Array(); // Form objnames
	this.vf = new Array(); // Full form validations
	this.classOk = classOk;
	this.classMand = classMand;
	this.classBad = classBad;
	this.badMsg = badMsg;

	// Methods
	this.reg = va_reg;
	this.unreg = va_unreg;
	this.regfull = va_regfull;
	this.validate = va_validate;
	this.keyup = va_keyup;
	this.onblur = va_onblur;
	this.full = va_full;
}

// Register an item to include in the validation. Parameters are object to validate, function and parameter to use. Id for showing info when incorrect and mandatory as true/false.
function va_reg(objElm, validFunc, validFuncParm, idBad, mandatory) {
	// go through all elements and search for objElm, don't add it if it's already there
	if(objElm){
		add = true;
		for (var i = 0; i < this.ve.length; i++) {
			if (this.ve[i].obj.name == objElm.name && this.ve[i].func == validFunc)  {
				add = false
			}
		}	
		if (add) {
			var v = new ValidationElement(this, objElm, validFunc, validFuncParm, idBad, mandatory)
			this.ve.push(v);
			this.va[objElm.name] = v;
	}
	}
}

function va_unreg(objElm) {
	// go through all elements and search for objElm
	for (var i = 0; i < this.ve.length; i++) {
		if (this.ve[i].obj.name == objElm.name)  {
			this.ve.splice(i, 1);
		}
	}
}

function va_regfull(objForm, validFunc, validFuncParm, idBad) {
	var v = new ValidationFull(this, objForm, validFunc, validFuncParm, idBad);
	this.vf.push(v);
}

/* Validates the entire form. Call from form's onsubmit.
 * @param showPopup Specifies if a warning popup should be displayed if validation failed.
 */
function va_validate(showPopup) {
	var oki = true;
	var errorMessages = new Array(); //Were we store the error messages for the specific elements
	var matchArray = new Array(); // "Bad" fieldnames
	var orgArray = new Array(); // original fieldnames, ie the parent
	if (showPopup == "undefined") {
		showPopup = true;
	}
	
	// Elements
	for (var i = 0; i < this.ve.length; i++) {
		if (!this.ve[i].validate()) {
			oki = false;
			// add the error message if it's not already been added
			if (!arrayContains(errorMessages, this.ve[i].bad)) {
				// changed so that the validator takes messages from the javascript
				// array instead of the extra divs created.
				if(errorMsgs[this.ve[i].bad]){				    
					if (!arrayContains(errorMessages, errorMsgs[this.ve[i].bad])) {
						errorMessages.push(errorMsgs[this.ve[i].bad]);						
					}
					matchArray.push(this.ve[i].bad);
				   orgArray.push(this.ve[i].obj.id);
				}
			}
		}
	}

	// Full form - combined elements
	for (var i = 0; i < this.vf.length; i++) {
		if (!this.vf[i].validate()) {
			oki = false;
			
				// add the error message if it's not already been added
			if (!arrayContains(errorMessages, this.vf[i].bad)) {
				// changed so that the validator takes messages from the javascript
				// array instead of the extra divs created.
				if(errorMsgs[this.vf[i].bad])
    				errorMessages.push(errorMsgs[this.vf[i].bad]);   						
    			}
		}
	}

	if (!oki) {
		var errors = "";
		//Make a string to display the specific messages
		for (var i = 0; i < errorMessages.length; i++) {
			errors += (errorMessages[i]+"\n<br \/>" );
		}
		var errord = document.getElementById('errordiv');
		errord.style.display = 'block';
		errord.innerHTML = errors;

		for(var i=0;i<matchArray.length;i++){
			setClassObj(document.getElementById(orgArray[i]), "inpBad");
		}
	}

	return oki;
}

// Calls the correct validation object. Call from element's keyup or similar. Parameter is the object to validate (usually this).
function va_keyup(obj) {
	this.va[obj.name].validate();
	this.full();
}

/**
 * Calls the correct validation object. Call from element's onblur or similar.
 * @param obj The object to validate.
 */
function va_onblur(obj) {
	this.keyup(obj);
}

function va_full() {
	for (var i = 0; i < this.vf.length; i++) {
		this.vf[i].validate();
	}
}


// Represents each form element to validate. See parameters for va_reg. Daddy is main validation class.
function ValidationElement(daddy, objElm, validFunc, validFuncParm, idBad, mandatory) {
	// Attr
	this.daddy = daddy;
	this.obj = objElm;
	this.func = validFunc;
	this.funcparm = validFuncParm;
	this.bad = idBad;
	this.mandatory = mandatory;

	this.validate = ve_validate;
}

// Validates this form element.
function ve_validate() {
	var objectData = null;	//specifies the object data to validate
	var validateData = true;	//specifies if the object has data to validate

	if (this.obj.type == "checkbox") {
		objectData = this.obj.checked;
		validateData = this.mandatory;
	}
	else if (this.obj.type.indexOf("select") != -1) {
		objectData = this.obj.options[this.obj.selectedIndex].value;	//fetches the selected value
		validateData = this.mandatory;
	}
	else {
		objectData = this.obj.value;
		if (objectData.length == 0) {
			validateData = false;
		}
	}

	if (validateData || this.mandatory) {
		var ok = this.func(objectData, this.funcparm);

		if (ok) {
			//hideObj(this.bad);
			setClassObj(this.obj, this.daddy.classOk);
		}
		else {
			if (!validateData) { // Can only happen to mandatory!
				//hideObj(this.bad);
				setClassObj(this.obj, this.daddy.classMand);
			}
			else {
				//showObj(this.bad);
				setClassObj(this.obj, this.daddy.classBad);
			}
		}

		return ok;
	}
	else {
		//hideObj(this.bad);
		if (!this.mandatory) setClassObj(this.obj, this.daddy.classOk);
	}

	return true;
}

// TODO beh?ver ha flera id att ?ndra class p?!
function ValidationFull(daddy, objForm, validFunc, validFuncParm, idBad) {
	// Attr
	
	this.daddy = daddy;
	this.obj = objForm;
	this.func = validFunc;
	this.funcparm = validFuncParm;
	this.bad = idBad;

	this.validate = vf_validate;
}

function vf_validate() {
	var ok = this.func(this.obj, this.funcparm);
	return ok;
}



// Validation functions

// Split a range string. Static utility function.
function range(sp, part) {
	var p = sp.indexOf('-');
	if (part == 0) return sp.substring(0, p);
	if (part == 1) return sp.substring(p+1, 255);
}

// Validates a checkbox according to if it should be checked or not.
function valCheckBox(checkedAttribute, shouldBeChecked) {
	var valResult = false;
	if (shouldBeChecked && ((checkedAttribute == "checked") || (checkedAttribute == true))) {
		valResult = true;
	}
	else if (!shouldBeChecked && ((checkedAttribute == "") || (checkedAttribute == false))) {
		valResult = true;
	}

	return valResult;
}

// Alphanumeric string. Parm should be min-max length
function valAlphaNumeric(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[ a-zA-Z0-9åäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Alphanumeric string with the possibility of a '-'. Parm should be min-max length
function valName(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[ a-zA-Z0-9åäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ-]{' + minL + ',' + maxL + '}$')
	return r.test(textStr);
}

// Alphanumeric string with the possibility of a funky characters (*-_^&+=#@"'!:). Parm should be min-max length
function valFunkyName(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[ a-zA-Z0-9åäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ*-_^&+=#@\"\'!:]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Alpha string. Parm should be min-max length
function valAlpha(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[ a-zA-ZåäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ-]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Valid city name. Alpha string with /. . Parm should be min-max length
function valCityName(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[ /.a-zA-ZåäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ-]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Numeric (not float) string. Parm should be min-max length (ie not range!)
function valNumeric(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[0-9]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Numeric (not float) string. Parm should be the lowest and highest value.
function valNumericRange(num, parm){
		var minValue = parseInt(range(parm, 0));
		var maxValue = parseInt(range(parm, 1));
		var num = parseInt(num);
		if(num <= maxValue && num >= minValue){
			return true;	
		} 
		return false;
}

// Email address, parm is not used.
function valEmail(textStr, parm) {

	var r = new RegExp("^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$");

	return r.test(textStr);
} 

function valPersonalSecurityNumber(textStr, param) {

	var str;
	var chars = 0;
	var specialChars = 0;

	for (var i=0;i<textStr.length;i++) {
		var code = textStr.charCodeAt(i);
		if (code >= 48 && code <= 57) {
			chars++;
		}
		else if (code == 32 || code == 45 || code == 46 || code == 47) {
		    specialChars++;
		} else {
			return false;
		}
	}
	
	return (chars==11 || chars==14)?true:false;
}

// the parm should be the second object in the compare.
function valMatch(textStr, parm) {
	return textStr == parm.value; 
}

// destination, if parm is true the ()-part is mandatory
// destinations can be written "London (LON)" and that is valid.
// destinations can be written "London" and that is valid if parm is false.
function valDestination(textStr, parm) {
	var r;
	if (parm == "true") {
		r = new RegExp("^[ .,a-zA-ZåäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËĖÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëėìíîïðñòóôõùúûüýþÿž-]{2,}\\([a-zA-Z]{3,3}\\)$");
	}
	else {
		r = new RegExp("^[ .,a-zA-ZåäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËĖÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëėìíîïðñòóôõùúûüýþÿž-]{2,}(\\([a-zA-Z]{3,3}\\))?$");		
	}                                                                                              

	return r.test(textStr);
} 

// Phone, parm is not used.
function valPhone(textStr, parm) {
	//var r = new RegExp('^\\+{0,1}[0-9]{6,25}$');
	var r = new RegExp('^[0-9 +-]{6,25}$');
	return r.test(textStr);
}

// Address string. Parm should be min-max length
function valAddress(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[ .,/:a-zA-Z0-9åäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿº-]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Alphanumeric string with .,- as accepted values. Parm should be min-max length
function valAlphaNumericFreeText(textStr, parm) {
	var minL = range(parm, 0);
	var maxL = range(parm, 1);

	var r = new RegExp('^[ .,/:a-zA-Z0-9åäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ-]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Alphanumeric string with .,-:\?#&!n as accepted values.
function valTextArea(textStr, parm) {

    var minL = range(parm, 0);
	var maxL = range(parm, 1);
	var r = new RegExp('^[ \\s?!&#.,/:a-zA-Z0-9åäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ-]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Alpha string with (), as accepted values.
function valCountry(textStr, parm) {

    var minL = range(parm, 0);
	var maxL = range(parm, 1);
	var r = new RegExp('^[ \\( \\)\'.,a-zA-ZåäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ-]{' + minL + ',' + maxL + '}$');
	return r.test(textStr);
}

// Validates a CC number
function valCC(textStr, parm) {
	var r = new RegExp("^\\d{4}[\\- ]?\\d{4}[\\- ]?\\d{2}[\\- ]?\\d{2}[\\- ]?\\d{1,4}$");
	if (r.test(textStr)) {
		if(this.obj.value.length == 13) {
		    if($('paymentDrop').value.indexOf("AU") > -1 ||
               $('paymentDrop').value.indexOf("AM") > -1 ||
               $('paymentDrop').value.indexOf("DC") > -1) {
                return false;
            }

        }

        //Diners
        if(this.obj.value.length == 14) {
            if($('paymentDrop').value.indexOf("DC") > -1) {
                var digit3 = textStr.substr(0,3);
                if(textStr.substr(0,2) == '36' || textStr.substr(0,2) == '38' ||
                        (digit3 >= 300 && digit3 <= 305)) {
                        return true;
                }
            }
            return false;
        }
        //American Express
        if(this.obj.value.length == 15) {
            // Amex
            if($('paymentDrop').value.indexOf("AM") > -1) {
                var digit3 = textStr.substr(0,3);
                if(textStr.substr(0,2) == '34' || textStr.substr(0,2) == '37') {
                    return true;
                }
            }
            return false;
        }
		return true;
	} else {
		return false;
	}
}

// Validates a CVC/CVV/CID
function valCVC(textStr, parm) {
	var r = new RegExp('^\\d{3,4}$');
	return r.test(textStr);
}

function validateComment(event) {
	var validKey = true;

	var keyChar = getKeyChar(event);
	var r = new RegExp('^[ .,/:a-zA-Z0-9åäöÅÄÖøØÆæÀÁÂÃÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÙÚÛÜÝÞßàáâãçèéêëìíîïðñòóôõùúûüýþÿ-]{0,255}$');
	return r.test(keyChar+"");
}

/**
 * Is used to validate a month number.
 */
function valExpiryMonth(expireMonth, parameter) {
	var valid = false;
	if (valNumeric(expireMonth, "1-2")) {
		valid = true;
	}

	return valid;
}

/**
 * Is used to validate a year number.
 */
function valExpiryYear(expireYear, parameter) {
	var valid = false;
	if (valNumeric(expireYear, "4-4")) {
		valid = true;
	}

	return valid;
}

//This function checks if there are more infants than adults selected. if therer are it returns false and otherwise true.
function checkPaxAdtInfRatio(frm, parm) {
	if (frm.paxInfants.options[frm.paxInfants.selectedIndex].value > frm.paxAdults.options[frm.paxAdults.selectedIndex].value) return false;
	return true;
}

//This function checks if there are more kids than adults selected. if therer are it returns false and otherwise true.
function checkPaxAdtCnnRatio(frm, parm) {
    if (frm.paxKids.options[frm.paxKids.selectedIndex].value > 0 && frm.paxAdults.options[frm.paxAdults.selectedIndex].value == 0) return false;
	return true;
}

//This function checks to see if at leas one room has been selected. If so it returns true adn otherwise it returns false  
function checkRooms(frm, parm) {
	var tot = parseInt(frm.paxAdults.options[frm.paxAdults.selectedIndex].value);
	tot += parseInt(frm.paxTeens.options[frm.paxTeens.selectedIndex].value);
	tot += parseInt(frm.paxKids.options[frm.paxKids.selectedIndex].value);
	
	var value;
	var element = frm.numberOfRooms;
    if (element.type == 'select-one') {
        value = element.options[element.selectedIndex].value;
    } else {
	   value = element.value;
	}
	//var rooms = getFormElementValue(frm.numberOfRooms);
	if(value > tot) {
		return false;
	}
	return true;
}

// this function checks to see if there is at least one passenger selected. If so it returns true and otherwise it returns false. 
function checkPaxCount(frm, parm) {
	var tot = frm.paxInfants.options[frm.paxInfants.selectedIndex].value;
	tot += frm.paxAdults.options[frm.paxAdults.selectedIndex].value;
	tot += frm.paxTeens.options[frm.paxTeens.selectedIndex].value;
	tot += frm.paxKids.options[frm.paxKids.selectedIndex].value;
			
	if (tot < 1) {
		return false;
	}
	return true;
}


// this function checks if the destination leave date is later than than the homeLeave date and returns false if the the destleave is earlier
function checkDestDateIsLater(frm, parm) {
	var homeLeaveDay = frm.homeLeaveDay;
	var homeLeaveMonth = frm.homeLeaveMonth;
	var destLeaveDay = frm.destLeaveDay;
	var destLeaveMonth = frm.destLeaveMonth;

	if (destLeaveDay.disabled == true){
		return true;
	} 
	
	var homeLeaveDate = stringToDate(homeLeaveMonth.options[homeLeaveMonth.selectedIndex].value + homeLeaveDay.options[homeLeaveDay.selectedIndex].value);
	var destLeaveDate = stringToDate(destLeaveMonth.options[destLeaveMonth.selectedIndex].value + destLeaveDay.options[destLeaveDay.selectedIndex].value);

	if (destLeaveDate < homeLeaveDate) {
		return false;
	}
	return true;
}

// this function checks if hotel is same date
function checkHotelStays(frm, parm){
    var homeLeaveDay = frm.homeLeaveDay;
	var homeLeaveMonth = frm.homeLeaveMonth;
	var destLeaveDay = frm.destLeaveDay;
	var destLeaveMonth = frm.destLeaveMonth;

	var homeLeaveDate = stringToDate(homeLeaveMonth.options[homeLeaveMonth.selectedIndex].value + homeLeaveDay.options[homeLeaveDay.selectedIndex].value);
	var destLeaveDate = stringToDate(destLeaveMonth.options[destLeaveMonth.selectedIndex].value + destLeaveDay.options[destLeaveDay.selectedIndex].value);

	if (destLeaveDate <= homeLeaveDate) {
		return false;
	}
	return true;
}

// this function checks if the homeLeaveDate is after a specified number of days from the current date.
// The second parameter to getLaterDate() should be the same as in EarliestHomeLeave in the Config which is used
// for validation on the server
function checkHomeDateIsAfter(frm, parm) {
	var currentDate = stringToDate(range(parm, 0)); 
	var days = parseInt(range(parm, 1));
	var earliestDate = getLaterDate(currentDate, days);
	var homeLeaveDay = frm.homeLeaveDay;
	var homeLeaveMonth = frm.homeLeaveMonth;
	var homeLeaveDate = stringToDate(homeLeaveMonth.options[homeLeaveMonth.selectedIndex].value + homeLeaveDay.options[homeLeaveDay.selectedIndex].value);
	
	if(homeLeaveDate < earliestDate){
		return false;
	}
	return true;
	
}

//This function checks if home date is no more than 360 days from now
function checkHomeDateLate(frm, parm) {
	var monthYearIndex = frm.homeLeaveMonth.selectedIndex;
	var monthYearStr = frm.homeLeaveMonth.options[monthYearIndex].value;
	var dateIndex = frm.homeLeaveDay.selectedIndex;
	var dateStr = frm.homeLeaveDay.options[dateIndex].value;
	
	var dateObj = stringToDate(monthYearStr+dateStr);
	
	var currentDate = new Date();
	
	var maxDiffMillis = 360 * 24 * 60 * 60 * 1000;
	
	var diff = dateObj.getTime() - currentDate.getTime();
	
	if (dateObj.getTime() - currentDate.getTime() > maxDiffMillis) {
		return false;
	}
	else {
		return true;	
	}
}

//Checks so that the locations are of the same groups
function checkLocationMatch(form, text) {
	var selectedHomeLocationId = form.homeLocationId;
	var selectedDestLocationId = form.destLocationId;
	
	var homeSelectedGroup = form.groupHome.value;
	var destSelectedGroup = form.groupDest.value;
	
	if(homeSelectedGroup != destSelectedGroup) {
		alert(text);
		return false;
	} else {		
		return true;
	}
}

// stuff from layer.js
// update and remove in future

// Set a class to an id/name.
function setClassId(targetId, classMe) {
	target = $(targetId);
	setClassObj(target, classMe);
}

// Set a class to an obj.
function setClassObj(tg, classMe) {
    if(tg)
	    tg.className = classMe;

}

//Validate the date of birth
function valDOB(textStr, parm) {
	var texts = parm.split(':');
	var homeLeave = texts[0];
	var year = document.getElementById(texts[1]).value;
	var month = document.getElementById(texts[2]).value;
	var day = document.getElementById(texts[3]).value;
	var paxType = texts[4];
    var adultAmount = texts[5];
	var teenAmount = texts[6];
	var kidAmount = texts[7];
	var infantAmount = texts[8];
	var fullCheck = texts[9];
	var myId = texts[10];
	
	return checkDOB(homeLeave, year, month, day, paxType, adultAmount, teenAmount, kidAmount, infantAmount, fullCheck, myId);
	
}

//Validate the date of birth
function checkDOB(homeLeave, year, month, day, paxType, adultAmount, teenAmount, kidAmount, infantAmount, fullCheck, myId) {

	var homeYear = homeLeave.substring(0,4);
	var homeMonth = homeLeave.substring(4,6);
	var homeDay = homeLeave.substring(6,8);

	//add zeros to the days and months with only one digit

	while (day.length < 2) {
		day = "0" + day;
	}

	while (month.length < 2) {
		month = "0" + month;
	}

	var years = homeYear - year;
	var months = homeMonth - month;
	var days = homeDay - day;
			
	var result = 0;
	
	result = years * 12;

	result = result + months;
	
	if (days < 0) {
		result = result - 1;
	}

	var diffYears = result/12;

    if (paxType == "paxAdult") {
		if (diffYears >= 16) {
			if(fullCheck == "true") {
				for (var i=1;i<=adultAmount;i++) {
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpOK");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpOK");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpOK");
				}
			}
			else {
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpOK");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpOK");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpOK");

			}
			return true;
		}
		else {

			if (fullCheck == "true") {
				for (var i=1;i<=adultAmount;i++) {
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpBad");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpBad");
				}
			}
			else {
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpBad");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpBad");

			}
			return false;
		}
	}
    else if (paxType == "paxTeen") {
		if (diffYears >= 12 && diffYears < 16 && day > 0) {
			if(fullCheck == "true") {
				for (var i=1;i<=teenAmount;i++) {
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpOK");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpOK");				
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpOK");
				}
			} 
			else {
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpOK");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpOK");				
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpOK");
				
			}
			return true;
		} 
		else {
			
			if (fullCheck == "true") {
				for (var i=1;i<=teenAmount;i++) {			
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpBad");				
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpBad");
				}			
			} 
			else {
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpBad");				
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpBad");

			}
			return false;
		}
	} 
	else if (paxType == "paxKid") {
		if (diffYears >= 2 && diffYears < 12 && day > 0) {
			if(fullCheck == "true") {
				for (var i=1;i<=kidAmount;i++) {
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpOK");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpOK");				
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpOK");
				}
			} 
			else {
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpOK");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpOK");				
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpOK");
				
			}
			return true;
		} 
		else {
			if (fullCheck == "true") {
				for (var i=1;i<=kidAmount;i++) {			
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpBad");				
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpBad");
				}			
			} 
			else {
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpBad");				
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpBad");

			}
			return false;
		}
	}
	else if (paxType == "paxInfant") {
	if (result >= 0 && result < 24 && day > 0) {		
		if(fullCheck == "true") {
				for (var i=1;i<=infantAmount;i++) {
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpOK");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpOK");				
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpOK");
				}
		} 
		else {
				setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpOK");
				setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpOK");				
				setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpOK");
		}
			return true;
		} 
		else {
	
			if (fullCheck == "true") {	
				for (var i=1;i<=infantAmount;i++) {			
					setClassObj(document.getElementById(paxType + i + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + i + "Dob" + "Month") , "inpBad");				
					setClassObj(document.getElementById(paxType + i + "Dob" + "Day") , "inpBad");
				}			
			} 
			else {
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Year") , "inpBad");
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Month") , "inpBad");				
					setClassObj(document.getElementById(paxType + myId + "Dob" + "Day") , "inpBad");

			}
			return false;
		}
	}
	
}

function popHidden(index, pax) {
    if ($('hiddenPax' + pax + '_' + index)) {
        var hiddenContainer = $('hiddenPax' + pax + '_' + index);
        var hiddenFields = new Array($('pax' + pax + index + 'Title'),$('pax' + pax + index + 'First'),$('pax' + pax + index + 'Last'));
        hiddenContainer.value = hiddenFields[0].value + '' + hiddenFields[1].value + '' + hiddenFields[2].value;
        if(hiddenContainer.value.length > TSApp.settings.valTxtLength){
            hiddenCounter[index] = false;
            showBad(hiddenFields);
        } else {
            hiddenCounter[index] = true;
            showOk(hiddenFields);
        }
    }
}

function showBad(arr){
    for(var i = 0;i<arr.length;i++){
        setClassObj(arr[i], "inpBad");
    }

    toggleErrorDiv();
}

function showOk(arr){
    for(var i = 0;i<arr.length;i++){
        setClassObj(arr[i], "inpOk");
    }

    toggleErrorDiv();
}

function toggleErrorDiv() {
    if(hiddenCounter.indexOf(false) > -1){
        $('errorDivPax').show();
    } else {
        $('errorDivPax').hide();
    }
}

function validateLoginEmail() {
    var e = document.getElementById('loginEmail');
    if (valEmail(e.value, null)) {
        $('loginEmailError').hide();
        return true;
    }
    else {
        $('loginEmailError').show();
        return false;
    }
}

function validateLoginPassw() {
    var p = document.getElementById('loginPassword');
    if (p.value != "") {
        $('loginPasswordError').hide();
        return true;
    }
    else {
        $('loginPasswordError').show();
        return false;
    }
}

function validateLogin() {
    if (validateLoginEmail() && validateLoginPassw()) {
        document.forms['loginForm'].submit();
    }
}
function validateLoginEmailHelp(email, helpType) {
    if (valEmail(email, null)) {
        $(helpType).hide();
        return true;
    }
    else {
        $(helpType).show();
        return false;
    }
}
