﻿var isCallValidator = false;
var callValidatorFlag = 1;
function ValidatePassengerCount(sender, args) {
    var totalSelectedPassengers = GetTotalSelectedPassangers();
    if (totalSelectedPassengers <= maxPassengers) {
        args.IsValid = true;
    }
    else {
        sender.errormessage = PassengerClientSideErrorMessage.ValidRoomsNumber;
        args.IsValid = false;
    }
}

function ValidateAdults(sender, args) {
    var adargs = { AD: sender.controltovalidate };
    var roomNo = GetCurrentRoomNo(adargs);
    if (roomNo < 0) return;
    var totalSelectedPassengers = GetTotalSelectedPassangers();
    if (totalSelectedPassengers > maxPassengers) {
    
        SetErrorMessage(sender, args, PassengerClientSideErrorMessage.ValidAdultsNumber);
        return;
    }
    if (getTotalSelectedAdultsPerRoom(roomNo) < getTotalSelectedInfantsPerRoom(roomNo)) {
        SetErrorMessage(sender, args, PassengerClientSideErrorMessage.InvalidNumberOfAdults);
        return;
    }

    args.IsValid = true;
    validatePassengerInfo(sender.controltovalidate);
}

function GetCurrentRoomNo(args) {
    var numRooms = GetNumberOfRooms();

    for (var i = 0; i < numRooms; i++) {
        if (args.AD != null) {
            if (passengerInfo[i].adults.id == args.AD) {
                return i;
            }
            continue;
        }

        if (args.CH != null) {
            if (passengerInfo[i].children.id == args.CH) {
                return i;
            }
            continue;
        }

        if (args.CA != null) {
            var childNo = parseInt(passengerInfo[i].children.value, 10);
            for (var j = 0; j < childNo; j++) {
                if (passengerInfo[i].childAges[j].id == args.CA) {
                    return i;
                }
            }
        }
    }
    return -1;
}

function ValidateChildren(sender, args) {

    var chargs = { CH: sender.controltovalidate };
    var roomNo = GetCurrentRoomNo(chargs);
    if (roomNo < 0) return;
    var totalSelectedPassengers = GetTotalSelectedPassangers();
    if (totalSelectedPassengers <= maxPassengers) {
        args.IsValid = true;
        validatePassengerInfo(sender.controltovalidate);
    }
    else {
        SetErrorMessage(sender, args, PassengerClientSideErrorMessage.ValidChildrenNumber);
    }
}

function getTotalSelectedAdults() {
    var numberOfAdults = 0;

    for (var i = 0; i < numRooms; i++) {
        numberOfAdults += parseInt(passengerInfo[i].adults.value, 10);
    }

    return numberOfAdults;
}

function getTotalSelectedInfants() {
    var numberOfInfants = 0;
    var numRooms = GetNumberOfRooms();

    for (var i = 0; i < numRooms; i++) {
        var numberOfChildrenInRoom = parseInt(passengerInfo[i].children.value, 10);

        for (var j = 0; j < numberOfChildrenInRoom; j++) {
            if (passengerInfo[i].childAges[j].value == "0") {
                numberOfInfants = numberOfInfants + 1;
            }
        }
    }
    return numberOfInfants;
}

function getTotalSelectedAdultsPerRoom(roomNumber) {
    var numberOfAdults = 0;

    numberOfAdults = parseInt(passengerInfo[roomNumber].adults.value, 10);
    return numberOfAdults;
}

function getTotalSelectedInfantsPerRoom(roomNumber) {
    var numberOfInfants = 0;

    var numberOfChildrenInRoom = parseInt(passengerInfo[roomNumber].children.value, 10);

    for (var j = 0; j < numberOfChildrenInRoom; j++) {
        if (passengerInfo[roomNumber].childAges[j].value == "0") {
            numberOfInfants = numberOfInfants + 1;
        }
    }


    return numberOfInfants;
}
function ValidateRoom(sender, args) {
    var totalSelectedPassengers = GetTotalSelectedPassangers();
    if (totalSelectedPassengers <= maxPassengers) {
        args.IsValid = true;
        validatePassengerInfo(sender.controltovalidate);
    }
    else {
        sender.errormessage = PassengerClientSideErrorMessage.ValidRoomsNumber;
        args.IsValid = false;
    }
}

function GetTotalSelectedPassangers() {
    var numberOfAdults = 0;
    var numberOfChildren = 0;
    var numRooms = GetNumberOfRooms();

    for (var i = 0; i < numRooms; i++) {
        numberOfAdults += parseInt(passengerInfo[i].adults.value, 10);
        numberOfChildren += parseInt(passengerInfo[i].children.value, 10);
    }
    totalSelectedPassengers = numberOfAdults + numberOfChildren;

    return totalSelectedPassengers;
}

function ValidateChildAge(sender, args) {

    var caargs = { CA: sender.controltovalidate };
    var roomNo = GetCurrentRoomNo(caargs);
    if (roomNo < 0) return;

    if (args.Value == null || args.Value == "" && callValidatorFlag == 1) {
        sender.errormessage = PassengerClientSideErrorMessage.RequiredChildAge;
        args.IsValid = false;
    }
    else {
        var totalSelectedInfantsPerRoom = getTotalSelectedInfantsPerRoom(roomNo);
        var totalSelectedAdultsPerRoom = getTotalSelectedAdultsPerRoom(roomNo);
        if (totalSelectedInfantsPerRoom <= totalSelectedAdultsPerRoom) {
            args.IsValid = true;
            validatePassengerInfo(sender.controltovalidate);
        }
        else {
            sender.errormessage = PassengerClientSideErrorMessage.InvalidNumberOfInfants;
            args.IsValid = false;
        }
    }
}

function validatePassengerInfo(CtrlId) {
    if (callValidatorFlag == 0) {
        return
    }
    callValidatorFlag = 0;
    try {
        if (roomInput != null) {
            if (callPassengerValidatorCallout(roomInput) == false) {
                callValidatorFlag = 1;
                return;
            }
        }

        for (var i = 0; i < passengerInfo.length; i++) {

            if (passengerInfo[i] != null) {
                if (passengerInfo[i].adults.id != CtrlId) {
                    ctrls = passengerInfo[i].adults;
                    if (callPassengerValidatorCallout(ctrls) == false) {
                        callValidatorFlag = 1;
                        return;
                    }
                }
                if (passengerInfo[i].children.id != CtrlId) {
                    ctrls = passengerInfo[i].children;
                    if (callPassengerValidatorCallout(ctrls) == false) {
                        callValidatorFlag = 1;
                        return;
                    }
                }
                for (var j = 0; j < (parseInt(passengerInfo[i].children.value, 10)); j++) {
                    if (passengerInfo[i].childAges[j].id != CtrlId) {
                        ctrls = passengerInfo[i].childAges[j];
                        if (callPassengerValidatorCallout(ctrls) == false) {
                            callValidatorFlag = 1;
                            return;
                        }
                    }
                }
            }
        }
    }
    catch (e) {
    }
    callValidatorFlag = 1;
}
function callPassengerValidatorCallout(ctrls) {
    if (ctrls.Validators != null) {
        if (ctrls.Validators.length > 0) {
            var val = ctrls.Validators[0];
            val.innerHTML = '';
            return val.evaluationfunction(val);
        }
    }

}

function GetNumberOfRooms() {
    var numberOfRooms = 0;
    if (roomInput != null) {
        numberOfRooms = parseInt(roomInput.value, 10);
    }  //Default if all else fails.
    else {
        numberOfRooms = 1;
    }
    return numberOfRooms;
}

function SetErrorMessage(sender, args, errorMessage) {
    sender.errormessage = errorMessage;
    args.IsValid = false;
} 

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();