function validateMaxAmout(fieldId) {
    var amountInput = document.getElementById(fieldId);

    if (amountInput.value.trim() != "") {
        if (isNaN(amountInput.value)) {
            changeToClass(amountInput, "borderRed");
            showAlertInDiv('maxPriceIsNaN', '');
            return false;
        } else {
            var patt = /^\d*$/;
            var result = patt.test(amountInput.value.trim());
            if (!result) {
                changeToClass(amountInput, "borderRed");
                showAlertInDiv('maxPriceIsNaN', '');
                return false;
            }
        }
    }

    return true;
}

function validateCity(formId, direction) {
    var cityInput;
    var cleanDirection;
    if (direction.indexOf("Train") != -1) {
        cleanDirection = direction.substr(0, (direction.indexOf("Train")));
    } else {
        cleanDirection = direction;
    }
    cityInput = document.getElementById(cleanDirection + 'Location');

    if (cityInput.value == "") {
        changeToClass(cityInput, "borderRed");
        showAlertInDiv('enterCity', direction);
        return false;
    }
    if (cityInput.value.search(/\d/) != -1) {
        changeToClass(cityInput, "borderRed");
        showAlertInDiv('cityNoNumbers', direction);
        return false;
    }
    changeToClass(cityInput, "");
    return true;
}

var depCityField0, depCityField1, depCityField2, arrCityField0, arrCityField1, arrCityField2, dateInput0, dateInput1, dateInput2;
function initMultiFlightsForm() {
    depCityField0 = document.getElementById("departureLocation0");
    changeToClass(depCityField0, "");
    depCityField1 = document.getElementById("departureLocation1");
    changeToClass(depCityField1, "");
    depCityField2 = document.getElementById("departureLocation2");
    changeToClass(depCityField2, "");
    arrCityField0 = document.getElementById("arrivalLocation0");
    changeToClass(arrCityField0, "");
    arrCityField1 = document.getElementById("arrivalLocation1");
    changeToClass(arrCityField1, "");
    arrCityField2 = document.getElementById("arrivalLocation2");
    changeToClass(arrCityField2, "");
    dateInput0 = document.getElementById("departureDate0");
    changeToClass(dateInput0, "");
    dateInput1 = document.getElementById("departureDate1");
    changeToClass(dateInput1, "");
    dateInput2 = document.getElementById("departureDate2");
    changeToClass(dateInput2, "");
}

function validateMultiCity() {
    var dep0Errors = 0;
    var arr0Errors = 0;
    var dep1Errors = 0;
    var arr1Errors = 0;
    var dep2Errors = 0;
    var arr2Errors = 0;

    if (depCityField0.value == "") {
        changeToClass(depCityField0, "borderRed");
        showAlertInDiv('noAeropuerto0', 'departure');
        dep0Errors ++;
    }
    if (dep0Errors < 1) {
        if (depCityField0.value.search(/\d/) != -1) {
            changeToClass(depCityField0, "borderRed");
            showAlertInDiv('cityNoNumbers0', 'departure');
        }
    }
    if (arrCityField0.value == "") {
        changeToClass(arrCityField0, "borderRed");
        showAlertInDiv('noAeropuerto0', 'arrival');
        arr0Errors ++;
    }
    if (arr0Errors < 1) {
        if (arrCityField0.value.search(/\d/) != -1) {
            changeToClass(arrCityField0, "borderRed");
            showAlertInDiv('cityNoNumbers0', 'arrival');
            return false;
        }
    }
    if (depCityField1.value == "") {
        if (arrCityField1.value != "" || depCityField2.value != "" || arrCityField2.value != "") {
            changeToClass(depCityField1, "borderRed");
            showAlertInDiv('noAeropuerto1', 'departure');
            dep1Errors ++;
        }
        if (arrCityField2.value != "") {
            changeToClass(arrCityField1, "borderRed");
            showAlertInDiv('noAeropuerto1', 'arrival');
            dep2Errors ++;
        }

    } else {
        if (dep1Errors < 1) {
            if (depCityField1.value.search(/\d/) != -1) {
                changeToClass(depCityField1, "borderRed");
                showAlertInDiv('cityNoNumbers1', 'departure');
            }
        }

        if (arrCityField1.value == "") {
            changeToClass(arrCityField1, "borderRed");
            showAlertInDiv('noAeropuerto1', 'arrival');
            arr1Errors ++;
        }
        if (arr1Errors < 1) {
            if (arrCityField1.value.search(/\d/) != -1) {
                changeToClass(arrCityField1, "borderRed");
                showAlertInDiv('cityNoNumbers1', 'arrival');
                return false;
            }
        }
    }
    if (depCityField2.value == "") {
        if (arrCityField2.value != "") {
            changeToClass(depCityField2, "borderRed");
            showAlertInDiv('noAeropuerto2', 'departure');
            dep2Errors ++;
        }
    } else {
        if (dep2Errors < 1) {
            if (depCityField2.value.search(/\d/) != -1) {
                changeToClass(depCityField2, "borderRed");
                showAlertInDiv('cityNoNumbers2', 'departure');
            }
        }
        if (arrCityField2.value == "") {
            changeToClass(arrCityField2, "borderRed");
            showAlertInDiv('noAeropuerto2', 'arrival');
            arr2Errors ++;
        }
        if (arr2Errors < 1) {
            if (arrCityField2.value.search(/\d/) != -1) {
                changeToClass(arrCityField2, "borderRed");
                showAlertInDiv('cityNoNumbers2', 'departure');
                return false;
            }
        }
    }

    if(dep0Errors>0 || arr0Errors>0 || dep1Errors>0|| arr1Errors>0|| dep2Errors>0|| arr2Errors>0){
        return false;
    } else {
        return true;
    }
}

function validateMultiDate() {
    var diafecha0 = getDiaFecha(dateInput0);
    var mesfecha0 = getMesFecha(dateInput0);
    var anyofecha0 = getAnyoFecha(dateInput0);
    var diafecha1 = getDiaFecha(dateInput1);
    var mesfecha1 = getMesFecha(dateInput1);
    var anyofecha1 = getAnyoFecha(dateInput1);
    var diafecha2 = getDiaFecha(dateInput2);
    var mesfecha2 = getMesFecha(dateInput2);
    var anyofecha2 = getAnyoFecha(dateInput2);

    var iDep0 = parseInt(anyofecha0 + mesfecha0 + diafecha0);
    var iDep1 = parseInt(anyofecha1 + mesfecha1 + diafecha1);
    var iDep2 = parseInt(anyofecha2 + mesfecha2 + diafecha2);

    var date0Errors = 0;
    var date1Errors = 0;
    var date2Errors = 0;
    if (!validateEmptyDate(dateInput0, 'departure', '0'))date0Errors ++;
    if (date0Errors == 0) {
        if (!validateFormatDate(dateInput0, 'departure', '0'))date0Errors ++;
    }
    if (date0Errors == 0) {
        if (!validateDateNoNan(dateInput0, diafecha0, mesfecha0, anyofecha0, 'departure', '0'))date0Errors ++;
    }
    if (date0Errors == 0) {
        if (!validateDateAfterToday(dateInput0, diafecha0, mesfecha0, anyofecha0, 'departure', '0'));
    }
    if (depCityField1.value != "" || arrCityField1.value != "" || depCityField2.value != "" || arrCityField2.value != "") {

        if (!validateEmptyDate(dateInput1, 'departure', '1'))date1Errors ++;
        if (date1Errors == 0) {
            if (!validateFormatDate(dateInput1, 'departure', '1'))date1Errors ++;
        }
        if (date1Errors == 0) {
            if (!validateDateNoNan(dateInput1, diafecha1, mesfecha1, anyofecha1, 'departure', '1'))date1Errors ++;
        }
        if (date1Errors == 0) {
            if (!validateDateAfterToday(dateInput1, diafecha1, mesfecha1, anyofecha1, 'departure', '1'));
        }
    }
    if (depCityField2.value != "" || arrCityField2.value != "") {
        if (!validateEmptyDate(dateInput2, 'departure', '2'))date2Errors ++;
        if (date2Errors == 0) {
            if (!validateFormatDate(dateInput2, 'departure', '2'))date2Errors ++;
        }
        if (date2Errors == 0) {
            if (!validateDateNoNan(dateInput2, diafecha2, mesfecha2, anyofecha2, 'departure', '2'))date2Errors ++;
        }
        if (date2Errors == 0) {
            if (!validateDateAfterToday(dateInput2, diafecha2, mesfecha2, anyofecha2, 'departure', '2'));
        }
    }

    if (date0Errors == 0 && date1Errors == 0 && date2Errors == 0) {
        if (iDep1 < iDep0) {
            changeToClass(dateInput1, "borderRed");
            showAlertInDiv('secondAfterFirst', 'departure');
            dateInput1.focus();
            date1Errors ++;
        }
        if (iDep2 < iDep0) {
            changeToClass(dateInput2, "borderRed");
            showAlertInDiv('thirdAfterFirst', 'departure');
            date1Errors ++;
        }
        if (iDep2 < iDep0) {
            changeToClass(dateInput2, "borderRed");
            showAlertInDiv('thirdAfterSecond', 'departure');
            date2Errors ++;
        }
    }
    if (date0Errors == 0 && date1Errors == 0 && date2Errors == 0) {
        return true;
    } else {
        return false;
    }
}
function validateFiveOrSevenPeople(){
    if(isFiveOrSevenPeople){
       changeToClass(document.getElementById("numAdults"), "borderRed");
       changeToClass(document.getElementById("numChilds"), "borderRed");
       changeToClass(document.getElementById("numInfants"), "borderRed");
       showAlertInDiv('dynpackFiveOrSevenPeople',"");
        return false;
    }
    changeToClass(document.getElementById("numAdults"), "");
    changeToClass(document.getElementById("numChilds"), "");
    changeToClass(document.getElementById("numInfants"), "");
    return true;
}
function validateThirtyDaysStay(){
    var departureDate = document.getElementById("departureDate").value;
    var returDate = document.getElementById("returnDate").value;
    var retDia = returDate.substring(0, 2);
    var retMes = returDate.substring(3, 5);
    var retAnyo = returDate.substring(6);
    var retDateInt = parseInt(retAnyo + retMes + retDia);
    var maxdate = anyadirDias(departureDate,30,'integer');
//alert("  retDateInt: "+retDateInt+" maxdate: "+maxdate);
    if (retDateInt > maxdate) {
        changeToClass(document.getElementById("departureDate"), "borderRed");
        showAlertInDiv('thirtyDaysStay',"departure");
        return false;
    }
    changeToClass(document.getElementById("departureDate"), "");
    return true;
}
function anyadirDias(pDate,pTotalDias,ptipo){
	var fecha= new Date(pDate.substring(3,5) + "/" + pDate.substring(0,2)+ "/" + pDate.substring(6));
	fecha.setTime(fecha.getTime()+(pTotalDias*24*60*60*1000));
	var dia = fecha.getDate();	if (dia<10) dia = "0" + dia;
	var mes = fecha.getMonth()+1; if (mes<10) mes = "0" + mes;
	return (ptipo=='data') ? dia+"/"+mes+"/"+takeYear(fecha) : takeYear(fecha)+""+mes+""+dia;
}
function takeYear(theDate){
	x = theDate.getYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
}
var idep;
var isFlexible = false;
function validateDate(formId, direction, errorsNum, isDynpackSearch) {
    var iret;
    var dateInput;
    dateInput = document.getElementById(direction + 'Date');
    var diafecha = getDiaFecha(dateInput);
    var mesfecha = getMesFecha(dateInput);
    var anyofecha = getAnyoFecha(dateInput);

    if (isDynpackSearch && (dateInput.value == iAmFlexible)) {
        changeToClass(dateInput, "borderRed");
        showAlertInDiv('dateFormat', direction);
        isFlexible = true;
        return false;
    }
    if (dateInput.value != iAmFlexible) {
        if (direction == "departure") {
            idep = parseInt(anyofecha + mesfecha + diafecha);
        } else {
            iret = parseInt(anyofecha + mesfecha + diafecha);
        }
        if (!validateOnewaylabel(dateInput, direction, ''))return false;
        if (!validateEmptyDate(dateInput, direction, ''))return false;
        if (!validateFormatDate(dateInput, direction, ''))return false;
        if (!validateDateNoNan(dateInput, diafecha, mesfecha, anyofecha, direction, ''))return false;
        if (!validateDateAfterToday(dateInput, diafecha, mesfecha, anyofecha, direction, ''))return false;


        if ((mesfecha < 1) || (mesfecha > 12)) {
            changeToClass(dateInput, "borderRed");
            showAlertInDiv('dateFormat', direction);
            return false;
        }
        var diasmes = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
        if ((diafecha < 1) || (diafecha > diasmes[mesfecha])) {
            changeToClass(dateInput, "borderRed");
            showAlertInDiv('dateFormat', direction);
            return false;
        }
        if (idep > iret) {
            changeToClass(dateInput, "borderRed");
            showAlertInDiv('dateReturnAfterDeparture', direction);
            return false;
        }
        if(isDynpackSearch){
           if (idep == iret) {
                changeToClass(dateInput, "borderRed");
                showAlertInDiv('dateReturnAfterDeparture', direction);
                return false;
            }
        }
        changeToClass(dateInput, "");
        isFlexible = false;
        return true;
    } else {
        if (errorsNum == 0) {
            document.getElementById(formId).action = "/engine/searchOffers/search";
            if (parent.document.getElementById('engineIfr')) {
                parent.initSwoosh("paso1", 'vuelos', formId);
            } else {
                initSwoosh("paso1", 'vuelos', formId);
            }
            document.getElementById(formId).submit();
        }
        isFlexible = true;
        return false;
    }
}
function validatePassengers() {
    var adultsInput, childsInput, infantsInput;

    adultsInput = document.getElementById('numAdults');
    childsInput = document.getElementById('numChilds');
    infantsInput = document.getElementById('numInfants');

    var nadults = parseInt(adultsInput.value, "10");
    var nchilds = parseInt(childsInput.value, "10");
    var ninfants = parseInt(infantsInput.value, "10");
    var ntotpax = 0;
    ntotpax = nadults + nchilds + ninfants;
    if (ntotpax > 9) {
        changeToClass(adultsInput, "borderRed");
        changeToClass(childsInput, "borderRed");
        changeToClass(infantsInput, "borderRed");
        showAlertInDiv('maxNinePax', 'no');
        return false;
    }

    if (ntotpax < 1) {
        changeToClass(adultsInput, "borderRed");
        showAlertInDiv('noPax', 'no');
        return false;
    }

    if ((nchilds + ninfants) > (nadults * 2)) {
        changeToClass(childsInput, "borderRed");
        changeToClass(infantsInput, "borderRed");
        showAlertInDiv('twoChildrenPerPax', 'no');
        return false;
    }
    if ((ninfants) > nadults) {
        changeToClass(adultsInput, "borderRed");
        changeToClass(infantsInput, "borderRed");
        showAlertInDiv('oneInfantPerPax', 'no');
        return false;
    }
    changeToClass(adultsInput, "");
    changeToClass(childsInput, "");
    changeToClass(infantsInput, "");
    return true;
}
function validateChooseAirport(formId, segmentsNum) {

    var myForm = document.getElementById(formId);
    var origenObj = new Object();
    origenObj.checked = false;
    origenObj.selected = "";
    var destinoObj = new Object();
    destinoObj.checked = false;
    destinoObj.selected = "";
    var errorsNum = 0;


    for (var j = 0; j < segmentsNum; ++j) {
        //        alert("j: "+j)
        origenObj = checkOrigenChecked(formId, origenObj, j);
        destinoObj = checkDestinoChecked(formId, destinoObj, j);


        if (!origenObj.checked) {
            showAlertInDiv('chooseAirport', 'departure');
            errorsNum++;
        }
        if (!destinoObj.checked) {
            showAlertInDiv('chooseAirport', 'arrival');
            errorsNum++;
        }
        if (origenObj.selected != "" && (origenObj.selected == destinoObj.selected)) {
            showAlertInDiv('sameAirports', '');
            errorsNum++;
        }
    }
    return (errorsNum <= 0);
}
function checkOrigenChecked(formId, origenObj, j) {
    var isOrigenChecked = false;
    var origenSelected;
    var origenAirports;
    origenAirports = document.getElementById(formId)["departureGeoNodeIdSelection" + j];
    if (origenAirports) {
        for (var i = 0; i < origenAirports.length; i++) {
            if (origenAirports[i].checked) {
                isOrigenChecked = true;
                origenSelected = origenAirports[i].value;
            }
        }
    } else {
        isOrigenChecked = true;
        origenSelected = "";
    }
    origenObj.checked = isOrigenChecked;
    origenObj.selected = origenSelected;
    return origenObj;
}
function checkDestinoChecked(formId, destinoObj, j) {
    var isDestinoChecked = false;
    var destinoSelected;
    var destinoAirports;
    destinoAirports = document.getElementById(formId)["arrivalGeoNodeIdSelection" + j];

    if (destinoAirports) {
        for (var i = 0; i < destinoAirports.length; i++) {
            if (destinoAirports[i].checked) {
                isDestinoChecked = true;
                destinoSelected = destinoAirports[i].value;
            }
        }
    } else {
        isDestinoChecked = true;
        destinoSelected = "";
    }
    destinoObj.checked = isDestinoChecked;
    destinoObj.selected = destinoSelected;
    return destinoObj;
}
function getDiaFecha(field) {
    return field.value.substring(0, 2);
}
function getMesFecha(field) {
    return field.value.substring(3, 5);
}
function getAnyoFecha(field) {
    return field.value.substring(6);
}
function validateOnewaylabel(field, dir, ind) {
    if (field.value == onewaylabel) {
        changeToClass(field, "borderRed");
        showAlertInDiv('dateFormat', dir);
        return false;
    } else {
        changeToClass(field, "");
        return true;
    }
}
function validateEmptyDate(field, dir, ind) {
    if (field.value == "") {
        if (ind == "") {
            showAlertInDiv('noDate', dir);
        } else {
            showAlertInDiv('noDate' + ind, 'departure');
        }
        changeToClass(field, "borderRed");
        return false;
    } else {
        changeToClass(field, "");
        return true;
    }
}
function validateFormatDate(field, dir, ind) {
    if ((field.value.trim().length != 10) || (field.value.charAt(2) != '/') || (field.value.charAt(5) != '/')) {
        if (ind == "") {
            showAlertInDiv('dateFormat', dir);
        } else {
            showAlertInDiv('dateFormat', dir);
        }
        changeToClass(field, "borderRed");
        return false;
    } else {
        changeToClass(field, "");
        return true;
    }
}
function validateDateNoNan(field, diafecha, mesfecha, anyofecha, dir, ind) {
    if (isNaN(diafecha) || isNaN(mesfecha) || isNaN(anyofecha)) {
        if (ind == "") {
            showAlertInDiv('dateFormat', dir);
            getAlert('dateFormat', dir);
        } else {
            showAlertInDiv('dateFormat' + ind, dir);
        }
        changeToClass(field, "borderRed");
        return false;
    } else {
        changeToClass(field, "");
        return true;
    }
}
function validateDateAfterToday(field, diafecha, mesfecha, anyofecha, dir, ind) {
    var d = new Date();


    if (anyofecha < d.getFullYear()) {
        if (ind == "") {
            showAlertInDiv('dateAfterToday', dir);
        } else {
            showAlertInDiv('dateAfterToday' + ind, dir);
        }
        changeToClass(field, "borderRed");
        return false;
    } else if (anyofecha == d.getFullYear()) {
        if (mesfecha < (d.getMonth() + 1)) {
            if (ind == "") {
                showAlertInDiv('dateAfterToday', dir);
            } else {
                showAlertInDiv('dateAfterToday' + ind, dir);
            }
            changeToClass(field, "borderRed");
            return false;
        } else if (mesfecha == (d.getMonth() + 1)) {
            if (diafecha < d.getDate()) {
                if (ind == "") {
                    showAlertInDiv('dateAfterToday', dir);
                } else {
                    showAlertInDiv('dateAfterToday' + ind, dir);
                }
                changeToClass(field, "borderRed");
                return false;
            }
        }
    }
    changeToClass(field, "");
    return true;
}
//function clearContentErrorGroup() {
//    var el = getElementsByClassName('content-error');
//    for (cont = 0; cont < el.length; cont++) {
//        el[cont].style.display = "none";
//    }
//    return;
//}

function validateItinerary(formId, ind) {
    var outBoundChecked = false;
    var inBoundChecked = false;
    var thirdBoundChecked = false;
    var outBoundRadios = document.forms[formId]['segmentPosition0'];
    var inBoundRadios;
    var thirdBoundRadios;
    var errorTextVar;
    var isMulti = false;

    if (outBoundRadios.length) {
        for (var i = 0; i < outBoundRadios.length; ++i) {
            if (outBoundRadios[i].checked) {
                outBoundChecked = true;
            }
        }
    } else {
        if (outBoundRadios.checked) {
            outBoundChecked = true;
        }
    }
    if (document.forms[formId]['segmentPosition1']) {
        inBoundRadios = document.forms[formId]['segmentPosition1'];
        if (inBoundRadios.length) {
            for (var i = 0; i < inBoundRadios.length; ++i) {
                if (inBoundRadios[i].checked) {
                    inBoundChecked = true;
                }
            }
        } else {
            if (inBoundRadios.checked) {
                inBoundChecked = true;
            }
        }
    } else {
        inBoundChecked = true;
    }
    if (document.forms[formId]['segmentPosition2']) {
        isMulti = true;
        thirdBoundRadios = document.forms[formId]['segmentPosition2'];
        if (thirdBoundRadios.length) {
            for (var i = 0; i < thirdBoundRadios.length; ++i) {
                if (thirdBoundRadios[i].checked) {
                    thirdBoundChecked = true;
                }
            }
        } else {
            if (thirdBoundRadios.checked) {
                thirdBoundChecked = true;
            }
        }
    } else {
        thirdBoundChecked = true;
    }
    if (outBoundChecked && inBoundChecked && thirdBoundChecked) {
        return true;
    } else {
        if (!outBoundChecked) {
             if(isMulti){
                errorTextVar = "selectThreeResultsOptions";
            } else {
                errorTextVar = "chooseOut";
             }
        } else if (!inBoundChecked) {
            if(isMulti){
                errorTextVar = "selectThreeResultsOptions";
            } else {
                errorTextVar = "selectTwoResultsOptions";
            }
        } else if (!thirdBoundChecked) {
            errorTextVar = "selectThreeResultsOptions";
        }
        showAlertInDiv(errorTextVar, ind + 'tabFare');
        return false;
    }
}
function isFieldFilled(field, paxInd) {
    var fieldId, fieldValue;
    if (field.id) {
        fieldValue = field.value;
        fieldId = field.id;
    } else {
        fieldId = field + "_" + paxInd;
        fieldValue = document.getElementById(fieldId).value;
    }
    if (fieldValue.trim().length < 1) {
        if (paxInd == null) {
            changeToClass(document.getElementById(fieldId), "borderRed");
            showAlertInDiv('no' + fieldId, '');
        } else {
            changeToClass(document.getElementById(fieldId), "borderRed");
            showPaxAlertInDiv('no' + field, paxInd);
        }
        return false;
    } else {
        if (paxInd == null) {
            changeToClass(field, "");
        } else {
            changeToClass(document.getElementById(fieldId), "");
        }
        return true;
    }
}
function validateJustLetters(field, paxInd) {
    var fieldId, fieldValue;
    var hasError = false;
    if (field.id) {
        fieldValue = field.value;
        fieldId = field.id;
    } else {
        fieldId = field + "_" + paxInd;
        fieldValue = document.getElementById(fieldId).value;
    }
    //var notAllowed = '1234567890@#$%&¬/=?¿*';
    var allowed = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅàáâãäåÆæÈÉÊËèéêëÌÍÎÏìíîïŒœÒÓÔÕÖØøòóôõöøÙÚÛÜùúûüŸýÿÇçÑñÐþÞµŠšƒ.- ';
    for (var i = 0; i < fieldValue.length; i++) {
        if (allowed.indexOf(fieldValue.charAt(i)) == -1) {
            hasError = true;
        }
    }
    if (hasError) {
        if (paxInd == null) {
            changeToClass(document.getElementById(fieldId), "borderRed");
            showAlertInDiv('noNumbersIn' + fieldId, '');
        } else {
            changeToClass(document.getElementById(fieldId), "borderRed");
            showPaxAlertInDiv('noNumbersIn' + field, paxInd);
        }
        return false;
    } else {
        if (paxInd == null) {
            changeToClass(field, "");
        } else {
            changeToClass(document.getElementById(fieldId), "");
        }
        return true;
    }
}
function fieldContainsNumbers(field, paxInd) {
    var fieldId, fieldValue;
    if (field.id) {
        fieldValue = field.value;
        fieldId = field.id;
    } else {
        fieldId = field + "_" + paxInd;
        fieldValue = document.getElementById(fieldId).value;
    }
    if (fieldValue.search(/\d/) != -1) {
        changeToClass(document.getElementById(fieldId), "borderRed");
        if (field.id) {
            showPaxAlertInDiv('noNumbersIn' + fieldId);
        } else {
            showPaxAlertInDiv('noNumbersIn' + field, paxInd);
        }
        return true;
    }
    changeToClass(document.getElementById(fieldId), "");
    return false;
}
function isMonthBeforeToday(month, field, paxInd) {
    var today = new Date();
    var thisMonth = today.getMonth() + 1;
    var fieldId = field + "_" + paxInd;
    if (month > thisMonth) {
        var formattedLimitDate = today.getDate() + "/" + thisMonth + "/" + today.getFullYear();
        changeToClass(document.getElementById(fieldId), "borderRed");
        showPaxAlertInDiv('badDateOfBirthPrevious', paxInd, formattedLimitDate);
        return false;
    } else {
        changeToClass(document.getElementById(fieldId), "");
        return true;
    }
}
var isInputYearthisYear = false;
function isYearBeforeToday(year, field, paxInd) {
    var today = new Date();
    var thisMonth = today.getMonth() + 1;
    var thisYear = today.getFullYear();
    var fieldId = field + "_" + paxInd;
    isInputYearthisYear = (year == thisYear);
    if (year > thisYear) {
        var formattedLimitDate = today.getDate() + "/" + thisMonth + "/" + thisYear ;
        changeToClass(document.getElementById(fieldId), "borderRed");
        showPaxAlertInDiv('badDateOfBirthPrevious', paxInd, formattedLimitDate);
        return false;
    } else {
        changeToClass(document.getElementById(fieldId), "");
        return true;
    }
}
function isYearAfterToday(year, field, paxInd) {
    var today = new Date();
    var thisYear = today.getFullYear();
    var fieldId = field + "_" + paxInd;
    if (year < thisYear) {
        changeToClass(document.getElementById(fieldId), "borderRed");
        showPaxAlertInDiv('no' + field, paxInd);
        return false;
    } else {
        changeToClass(document.getElementById(fieldId), "");
        return true;
    }
}
function isFirstDateAfterSecondDate(firstDate,secondDate) {
    var oneDay = 24*60*60*1000;	// hours*minutes*seconds*milliseconds
    var diffDays = (firstDate.getTime() - secondDate.getTime())/(oneDay);
    if (diffDays>0) {
        return true;
    } else {
        return false;
    }
}
function isPaxTypeAge(paxType, returnDate, birthDay, birthMonth, birthYear, field, paxInd) {
    //alert("paxType: "+paxType);
    var fieldId = field + "_" + paxInd;
    var limitYear,limitDate,limitYearTop,limitDateTop;
    birthDay = (parseInt(birthDay) < 10) ? "0" + birthDay : birthDay;
    birthMonth = (parseInt(birthMonth) < 10) ? "0" + birthMonth : birthMonth;
    var paxDOB = parseInt(birthYear + birthMonth + birthDay);
    if (paxType == "CHILD") {
        limitYear = parseInt(returnDate.substr(0, 4)) - 12;
        limitDate = parseInt(limitYear + returnDate.substr(4, 2) + returnDate.substr(6, 2));
        limitYearTop = limitYear + 10;
        limitDateTop = parseInt(limitYearTop + returnDate.substr(4, 2) + returnDate.substr(6, 2));
    } else if (paxType == "INFANT") {
        limitYear = parseInt(returnDate.substr(0, 4)) - 2;
        limitDate = parseInt(limitYear + returnDate.substr(4, 2) + returnDate.substr(6, 2));
    } else if (paxType == "ADULT") {
        return true;
    }
    limitDate += "";
    var formattedLimitDate = limitDate.substr(6, 2) + "/" + limitDate.substr(4, 2) + "/" + limitYear;
    if (paxDOB > limitDate) {
        if (paxType == "CHILD") {
            limitDateTop += "";
            if (paxDOB > limitDateTop) {
                var formattedLimitDateTop = limitDateTop.substr(6, 2) + "/" + limitDateTop.substr(4, 2) + "/" + limitYearTop;
                changeToClass(document.getElementById(fieldId), "borderRed");
                showPaxAlertInDiv('badDateOfBirthTwoDates', paxInd, formattedLimitDate, formattedLimitDateTop);
                return false;
            }
        }
        return true;
    } else {


        //        var formattedLimitDate = limitDate.substr(6, 2) + "/" + limitDate.substr(4, 2) + "/" + limitYear;
        changeToClass(document.getElementById(fieldId), "borderRed");
        showPaxAlertInDiv('badDateOfBirth', paxInd, formattedLimitDate);
        return false;
    }
}
function isDayWithinMonth(day, month, year, field, paxInd) {
    var fieldId, fieldDayId, fieldMonthId;
    var isAlertToShow = false;
    var isLeap = ((year % 4) == 0);
    var thirtyDays = [4,6,9,11];
    fieldId = field + "_" + paxInd;
    if (field == "yearOfBirth") {
        fieldDayId = "dayOfBirth_" + paxInd;
        fieldMonthId = "monthOfBirth_" + paxInd;
    }
    if (month == 2) {
        var numOfdays = (isLeap) ? 29 : 28;
        if (day > numOfdays) {
            isAlertToShow = true;
        }
    } else {
        for (var i = 0; i < thirtyDays.length; ++i) {
            if (month == thirtyDays[i]) {
                if (day > 30) {
                    isAlertToShow = true;
                }
                break;
            }
        }
    }
    if (isAlertToShow) {
        changeToClass(document.getElementById(fieldDayId), "borderRed");
        changeToClass(document.getElementById(fieldMonthId), "borderRed");
        changeToClass(document.getElementById(fieldId), "borderRed");
        showPaxAlertInDiv('badDate' + field, paxInd);
        return false;
    } else {
        changeToClass(document.getElementById(fieldDayId), "");
        changeToClass(document.getElementById(fieldMonthId), "");
        changeToClass(document.getElementById(fieldId), "");
        return true;
    }
}
function isValidID(field, type, paxInd) {
    var fieldId, fieldValue, isIDOK, alertFunction, alertVar;
    if (paxInd != null) {
        fieldId = field + "_" + paxInd;
        fieldValue = document.getElementById(fieldId).value;
        alertFunction = "showPaxAlertInDiv";
    } else {
        fieldId = field.id;
        fieldValue = field.value;
        paxInd = "";
        alertFunction = "showAlertInDiv";
    }
    if (type == "NIF") {
        isIDOK = checkNIF(fieldValue);
        alertVar = "noValidNif";
    } else if (type == "NIE") {
        isIDOK = checkNIE(fieldValue);
        alertVar = "noValidNie";
    }
    if (!isIDOK) {
        changeToClass(document.getElementById(fieldId), "borderRed");
        eval(alertFunction)(alertVar, paxInd);
        return false;
    } else {
        changeToClass(document.getElementById(fieldId), "");
        return true;
    }

}
function checkNIF(idnum) {
    var re2 = new RegExp("[0-9]{1,8}[A-Za-z]");
    if (!re2.test(idnum)) {
        return false;
    }

    var nif;
    var nifLetter;
    if (idnum.indexOf('-') == -1) {
        nif = idnum.substring(0, idnum.length - 1);
        nifLetter = idnum.substring(idnum.length - 1, idnum.length);
    } else {
        nif = idnum.substring(0, idnum.length - 2);
        nifLetter = idnum.substring(idnum.length - 1, idnum.length);
    }

    if (getNIFChar(nif) != nifLetter.toUpperCase()) {
        return false;
    }

    return true;
}
function checkNIE(idnum) {
    var reg2 = new RegExp("[XTxt][0-9]{1,8}[A-Za-z]");
    if (!reg2.test(idnum)) {
        return false;
    } else {
        var letter = idnum.substring(idnum.length - 1, idnum.length);
        var num = idnum.substring(1, idnum.length - 1);
        var letterNIE = getNIFChar(num);

        if (letter.toLowerCase() != letterNIE.toLowerCase()) {
            return false;
        }
    }
    return true;
}
function getNIFChar(nif) {
    var resto = nif % 23;
    var letra = "";
    switch (resto) {
    case 0:  letra = "T"; break;
    case 1:  letra = "R"; break;
    case 2:  letra = "W"; break;
    case 3:  letra = "A"; break;
    case 4:  letra = "G"; break;
    case 5:  letra = "M"; break;
    case 6:  letra = "Y"; break;
    case 7:  letra = "F"; break;
    case 8:  letra = "P"; break;
    case 9:  letra = "D"; break;
    case 10: letra = "X"; break;
    case 11: letra = "B"; break;
    case 12: letra = "N"; break;
    case 13: letra = "J"; break;
    case 14: letra = "Z"; break;
    case 15: letra = "S"; break;
    case 16: letra = "Q"; break;
    case 17: letra = "V"; break;
    case 18: letra = "H"; break;
    case 19: letra = "L"; break;
    case 20: letra = "C"; break;
    case 21: letra = "K"; break;
    case 22: letra = "E"; break;
    }
    return letra;
}
function validateMobile(field) {
    //return isFieldFilled(field);
    var mobileValue = field.value;
    if (mobileValue.length > 15) {
        showAlertInDiv('validMobile', '');
        changeToClass(field, "borderRed");
        return false;
    }
    //    var rePHONE = new RegExp("^[0-9]{5,}$");
    //
    //    if (!mobileValue.match(rePHONE)){
    //        showAlertInDiv('validMobile', '');
    //        changeToClass(field, "borderRed");
    //        return false;
    //    }
    var firstChar = mobileValue.charAt(0);
    if (((firstChar >= "0") && (firstChar <= "9")) || (firstChar=="+")) {
        for (var i = 1; i < mobileValue.length; i++) {
            var c = mobileValue.charAt(i);
            if (((c < "0") || (c > "9"))) {
                showAlertInDiv('validMobile', '');
                changeToClass(field, "borderRed");
                return false;
            }
        }
    } else {
        showAlertInDiv('validMobile', '');
        changeToClass(field, "borderRed");
        return false;
    }
    return true;
}
function validateEmail(field) {
    var emailValue = field.value;
    if (emailValue.length < 7) {
        showAlertInDiv('validEmail', '');
        changeToClass(field, "borderRed");
        return false;
    }
    if (emailValue.indexOf('@') == -1 || emailValue.indexOf('.') == -1) {
        showAlertInDiv('validEmail', '');
        changeToClass(field, "borderRed");
        return false;
    }
    if (emailValue.substr(emailValue.indexOf('.') + 1).length < 2) {
        showAlertInDiv('validEmail', '');
        changeToClass(field, "borderRed");
        return false;
    }
    changeToClass(field, "");
    return true;
}

function validateEqualValues(str, str2, type) {
    var msgKind = (type == "email") ? "notEqualEmails" : "notEqualPasswords";
    if (str == "") {
        return false;
    }
    if (str != str2) {
        showAlertInDiv(msgKind, '');
        return false;
    }
    return true;
}
function validatePass(field) {
    var passValue = field.value;
    if (passValue.length < 1) {
        showAlertInDiv('noPass', '');
        changeToClass(field, "borderRed");
        return false;
    }
    return true;
}
function validateInsurances() {
    var hasInsurace;
    var insurancesChecked;
    var fieldDivToMark = document.getElementById("insurancesCheckedDiv");
    insurancesChecked = document.getElementById("closeBookingFromPayment")["radioButtonInsurance"];
    for (var j = 0; j < insurancesChecked.length; ++j) {
        if (insurancesChecked[j].id == "insurancesChecked") {
            hasInsurace = (insurancesChecked[j].checked);
        }
    }

    if (hasInsurace) {
        var numOfChecks = 0;
        var closeBookingFromPayment = document.getElementById("closeBookingFromPayment");
        for(var i=0; i<closeBookingFromPayment.elements.length; i++){
            var inp = closeBookingFromPayment[i].name;
            if (inp == "insurance") {
                var fields = document.forms["closeBookingFromPayment"][inp];
            }
        }
        for (var i = 0; i < fields.length; ++i) {
            if (fields[i].checked)numOfChecks++;
        }
        if (numOfChecks < 1) {

            showPaxAlertInDiv('selectAnInsurance', '');
            changeToClass(fieldDivToMark, "borderRed");
            return false;
        }
    }
    changeToClass(fieldDivToMark, "");
    return true;
}
function validateConditions(field, type) {
    var conditionsValue = field.checked;
    var conditionsDiv = document.getElementById("conditionsDiv");
    if (!conditionsValue) {
        if (type == "payment") {
            showPaxAlertInDiv('noConditionsPay', '');
        } else {
            showAlertInDiv('noConditions', '');
        }
        changeToClass(conditionsDiv, "borderRed");
        return false;
    } else{
        changeToClass(conditionsDiv, "");
        return true;
    }
}
function validateNotEmptySelect(select) {
    for (var i = 0; i < select.length; ++i) {
        if (select.options[i].selected) {
            if (select.options[i].value == "") {
                showPaxAlertInDiv('noCC', '');
                changeToClass(select, "borderRed");
                return false;
            }
        }
    }
    changeToClass(select, "");
    return true;
}
function validateCardNumber(field, ccnumber, cctype, ccj) {
    var alertToReturn = "";
    var cctypeAux = cctype;
    //	if (ccnumber == ccj) {
    //		return alertToReturn;
    //	} else
    if (ccnumber.indexOf("xxxxx") == -1) {
        if (!isCardNumber(ccnumber, cctypeAux)) {
            showPaxAlertInDiv('badCCNum', '');
            changeToClass(field, "borderRed");
            return false;
        }
    }
    changeToClass(field, "");
    return true;
}
function validateExpirationDate(monthField, yearField) {
    var intMonth,intYear,intMinYear,intMaxYear,intMinMonth;

    intMonth = parseInt(monthField.value, 10);
    intYear = parseInt(yearField.value, 10);

    var nowDate = new Date();
    var minFullYear = "" + nowDate.getFullYear();
    var minMonth = "" + nowDate.getMonth();
    intMinYear = parseInt(minFullYear.substr(2, 2), 10);
    intMinMonth = parseInt(minMonth) + 1;
    intMaxYear = intMinYear + 10;
    if (isNaN(intMonth)) {
        showAlertInDiv('nocardExpirationMonth', '');
        changeToClass(monthField, "borderRed");
        return false;
    }
    if (intMonth < 1 || intMonth > 12) {
        showAlertInDiv('nocardExpirationMonth', '');
        changeToClass(monthField, "borderRed");
        return false;
    }
    if (isNaN(intYear)) {
        showAlertInDiv('nocardExpirationYear', '');
        changeToClass(yearField, "borderRed");
        return false;
    }
    if (intYear < intMinYear || intYear > intMaxYear) {
        showAlertInDiv('nocardExpirationYear', '');
        changeToClass(yearField, "borderRed");
        return false;
    }
    var fieldDateToNum = parseInt((yearField.value + monthField.value), 10);
    if (intMinMonth < 10) {
        minMonth = "0" + intMinMonth;
    }
    var nowDateToNum = parseInt((intMinYear + minMonth), 10);
    if (fieldDateToNum < nowDateToNum) {
        showPaxAlertInDiv('badCardExpirationDate', '');
        changeToClass(monthField, "borderRed");
        changeToClass(yearField, "borderRed");
        return false;
    }

    changeToClass(monthField, "");
    changeToClass(yearField, "");
    return true;
}
function validateSecurityCode(field, type) {
    if ((type != "MA") && (type != "MA-3D")) {
        if (!isNum(field.value)) {
            showPaxAlertInDiv('cvvJustNumber', '');
            changeToClass(field, "borderRed");
            return false;
        }
        if ((type == 'AX') || (type == 'AX-3D')) {
            if (field.value.length != 4) {
                showPaxAlertInDiv('cvvAmericanExpress', '');
                changeToClass(field, "borderRed");
                return false;
            }
        } else if (field.value.length != 3) {
            showPaxAlertInDiv('cvvVisaMastercard', '');
            changeToClass(field, "borderRed");
            return false;
        }
    }
    changeToClass(field, "");
    return true;
}
function isCardNumber(cardnumber, type) {
    // Parse type, in case has sufix like '-3D'
    var len, rules;
    var intIdx = type.indexOf("-");
    if (intIdx >= 0) {
        type = type.substring(0, intIdx);
    }

    // Check number
    if (type == "4B") {
        return true;
    } else if (type == "CA" || type == "RM" || type == "MC" || type == "MD" || type == "M6" || type == "M4") {
        len = new Array('16');
        rules = new Array('51', '52', '53', '54', '55');
    } else if (type == "CM") {
        len = new Array('16');
        rules = new Array('51', '52', '53', '54', '55');
    } else if (type == "E1" || type == "VI" || type == "RV" || type == "VV" || type == "VB" || type == "3V") {
        len = new Array('13', '16');
        rules = new Array('4');
    } else if (type == "VD" || type == "DL") {
        len = new Array('13', '16');
        rules = new Array('4');
    } else if (type == "VE") {
        len = new Array('13', '16');
        rules = new Array('4');
    } else if (type == "AX") {
        len = new Array('15');
        rules = new Array('34', '37');
    } else if (type == "DC") {
        len = new Array('14');
        rules = new Array('30', '36', '38');
    } else if (type == "MA") {
        len = new Array('16');
        rules = new Array('50', '51', '52', '53', '54', '55');
    } else {
        return false;
    }

    if (!luhnCheck(cardnumber))
        return false;

    for (var n = 0; n < len.length; n++)
        if (cardnumber.toString().length == len[n]) {
            for (var m = 0; m < rules.length; m++) {
                var headdigit = cardnumber.substring(0, rules[m].toString().length);
                if (headdigit == rules[m])
                    return true;
            }
            return false;
        }
    return false;
}
function luhnCheck(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;
    }
    return (sum % 10 == 0);
}
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;
}

//
var currClass;
function changeToClass(field, clas) {
    currClass = field.className;
    //    alert(field.id+"  currClass: "+currClass);
    if (clas == "") {
        var gapInd = field.className.indexOf(" borderRed");
        if (gapInd != -1) {
            currClass = field.className.substring(0, gapInd);
        }
        field.className = currClass;
    } else {
        if (currClass.indexOf(clas) == -1) {
            field.className = currClass + " " + clas;
        }
    }
}

function firstCharUpper(stringToFormat) {
    var formattedString = stringToFormat.charAt(0).toUpperCase() + stringToFormat.substr(1, stringToFormat.length - 1);
    return formattedString;
}

function lengthHigher(minLength, field, paxInd) {
    var fieldId, fieldValue;
    var hasError = false;
    if (field.id) {
        fieldValue = field.value;
        fieldId = field.id;
    } else {
        fieldId = field + "_" + paxInd;
        fieldValue = document.getElementById(fieldId).value;
    }
    if (fieldValue.length < minLength) {
        hasError = true;
    }
    if (hasError) {
        changeToClass(document.getElementById(fieldId), "borderRed");
        if (paxInd == null) {
            showAlertInDiv('lengthHigher' + firstCharUpper(fieldId), '');
        } else {
            showPaxAlertInDiv('lengthHigher' + firstCharUpper(field), paxInd);
        }
        return false;
    } else {
        if (paxInd == null) {
            changeToClass(field, "");
        } else {
            changeToClass(document.getElementById(fieldId), "");
        }
        return true;
    }
}
function isDateReal(date) {
    if(date.length != 8) {
        return false;
    }
    var day = Number(date.substring(0,2));
    var month = Number(date.substring(2,4))-1; // January=0, December = 11
    var year = Number(date.substring(4,8));
    var dateObject = new Date(year,month,day);
    var dateObjectDay = dateObject.getDate();
    var dateObjectMonth = dateObject.getMonth();
    return (dateObjectDay == day && dateObjectMonth == month);
}
function validateDateFields(expirationDayField,expirationMonthField,expirationYearField) {
    var fields = new Array (expirationDayField,expirationMonthField,expirationYearField);
    var fieldsLength = new Array (2,2,4);
    var fieldsMax = new Array (31,12);
    var currField;
    var errors = 0;
    var validField = new Array(true,true,true);
    for (var i=0; i<=2;i++) {
        currField = fields [i];
        if (currField.value.length > 0) {
            if (currField.value.length < fieldsLength[i]) {
                validField = false;
                errors++;
                break;
            } else if (!isNum(currField.value)) {
                validField = false;
                errors++;
                break;
            } else {
                if (i<2) { //field is day or month
                    if (Number(currField.value) < 1 || Number(currField.value) > fieldsMax) {
                        validField = false;
                        errors++;
                        break;
                    }
                    else {
                        validField = true;
                    }
                } else { //field is year
                    validField = true;
                }
            }
        }
    }
    if (validField) {
        var expirationDate = expirationDayField.value.toString() + expirationMonthField.value.toString() + expirationYearField.value.toString();
        validField = isDateReal(expirationDate);
    }
    if (!validField) {
        errors++;
    }
    return errors;
}

function validateIdentificationExpirationDate(paxInd) {
    var identificationExpirationDayField = document.getElementById('identificationExpirationDay_'+paxInd);
    var identificationExpirationMonthField = document.getElementById('identificationExpirationMonth_'+paxInd);
    var identificationExpirationYearField = document.getElementById('identificationExpirationYear_'+paxInd);
    var identificationExpirationDateFields = new Array(identificationExpirationDayField,identificationExpirationMonthField,identificationExpirationYearField);    
    var expirationDateErrors = validateDateFields (identificationExpirationDayField,identificationExpirationMonthField,identificationExpirationYearField);
    var isValidDate=true;
    if (expirationDateErrors > 0) {
        isValidDate = false;
    }
    if (isValidDate) {
        var identificationExpirationDate = identificationExpirationDayField.value.toString() + identificationExpirationMonthField.value.toString() + identificationExpirationYearField.value.toString();
        var retDateYear = Number(document.getElementById('retDate').value.substr(0, 4));
        var retDateMonth = Number(document.getElementById('retDate').value.substr(4, 2));
        var retDateDay = Number(document.getElementById('retDate').value.substr(6, 2));
        var identificationExpirationYear = Number(identificationExpirationDate.substr(4, 4));
        var identificationExpirationMonth = Number(identificationExpirationDate.substr(2, 2));
        var identificationExpirationDay = Number(identificationExpirationDate.substr(0, 2));
        var identificationExpirationDateObject = new Date(identificationExpirationYear, identificationExpirationMonth - 1, identificationExpirationDay);
        var returnDateObject = new Date(retDateYear, retDateMonth - 1, retDateDay);
        var validExpirationDate = isFirstDateAfterSecondDate(identificationExpirationDateObject, returnDateObject);
        isValidDate = isValidDate && validExpirationDate;
        if (!isValidDate) {
            expirationDateErrors++;
        }
    }
    if (isValidDate) {
        changeToClass(identificationExpirationDateFields[0], "");
        changeToClass(identificationExpirationDateFields[1], "");
        changeToClass(identificationExpirationDateFields[2], "");
    } else {
        changeToClass(identificationExpirationDateFields[0], "borderRed");
        changeToClass(identificationExpirationDateFields[1], "borderRed");
        changeToClass(identificationExpirationDateFields[2], "borderRed");
        showPaxAlertInDiv('invalidIdentificationExpirationDate', paxInd);
    }
    return expirationDateErrors;
}
