var adultOptions = "<option value='1'>1 Adult</option><option value='2' selected='selected'>2 Adults</option><option value='3'>3 Adults</option><option value='4'>4 Adults</option><option value='5'>5 Adults</option><option value='6'>6 Adults</option>";
var childrenOptions = "<option value='0' selected='selected'>No Children</option><option value='1'>1 Child</option><option value='2'>2 Children</option><option value='3'>3 Children</option><option value='4'>4 Children</option><option value='5'>5 Children</option><option value='6'>6 Children</option>";
var adultOnlyChildrenOptions = "<option value='0' selected='selected'>Adults Only</option>";
var ageOptions = "<option value='0'>Less Than 1 year</option><option value='1'>1 year</option><option value='2'>2 Years</option><option value='3'>3 Years</option><option value='4'>4 Years</option><option value='5'>5 Years</option><option value='6'>6 Years</option><option value='7'>7 Years</option><option value='8'>8 Years</option><option value='9'>9 Years</option><option value='10'>10 Years</option><option value='11'>11 Years</option><option value='12'>12 Years</option><option value='13'>13 Years</option><option value='14'>14 Years</option><option value='15' selected='selected'>15 Years</option><option value='16'>16 Years</option><option value='17'>17 Years</option><option value='18'>18 Years</option>";

var maxGuests = 7;
var tomorrow = new Date();

function getPrefix(usePrefix) {
    var prefix = (usePrefix) ? "searchParameters." : "";
    return prefix;
}

function showRooms(el, usePrefix) {
    var cnt = $(el).val();
    var rooms = $(".roomPersons");
    var seen = rooms.size();
    if (seen > cnt) {
        for (var i = cnt; i < seen; i++) {
            $("#rooms" + i).remove();
        }
    } else {
        var isAdultOnly = false;
        var adultOnlyCfg = $("#isAdultOnly");
        if (adultOnlyCfg.length != 0) {
            isAdultOnly = (adultOnlyCfg.val() == "true");
        }
        for (var i = seen; i < cnt; i++) {
            var room = $("<div></div>").addClass("roomPersons");
            room.html($("<strong></strong>").text("Room "+ (i + 1)));
            room.attr("id", "rooms" + i);
            room.append($("<select id='adults" + i + "'></select>").addClass("small mini first").html(adultOptions));
            room.append("&nbsp;");
            room.append($("<select id='children" + i + "' name='children" + i + "' onchange='showRoomsKids(this," + usePrefix + ")' " + (isAdultOnly ? 'disabled' : '' ) + "></select>").addClass("small mini second").html(isAdultOnly ? adultOnlyChildrenOptions : childrenOptions));
            $(".roomPersons:last").after(room);
        }
    }
}

function showRoomsKids(el, usePrefix) {
    var cnt = $(el).val();
    var parent = $(el).parent();
    var children = parent.find(".child");
    var seen = children.size();
    if (cnt == 0) {
    	parent.find(".children").remove();
    	return;
    }
    if (seen > cnt) {
        for (var i = cnt; i < seen; i++) {
            parent.find("#age" + i).parent().remove();
        }
    } else {
        var prefix =  getPrefix(usePrefix);
        var chldDiv = parent.find(".children");
        if (cnt == 0) {
        	chldDiv.remove();
        }
        if (seen == 0) {
            chldDiv = $("<div></div>").addClass("children");
            parent.append(chldDiv);
        }
        var room = parent.attr('id').replace(/rooms/, "");
        for (var i = seen; i < cnt; i++) {
            var child = $("<div></div>").addClass("child").css("text-align", "right");
            child.html($("<span></span>").text("Child "+ (i + 1)).css("font-weight", "bold"));
            child.append($("<select name='" + prefix + "rooms[" + room + "].persons[" +  i + "]' id='age" + i + "'></select>").addClass("small mini second").html(ageOptions).css("margin", "8px 7px 10px 5px"));
            
            chldDiv.append(child);
        }
    }
}

function resetOsb() {
    if ($("#hfRad")) {
        $("#hfRad").click(function(){
            $("#bookFlight").show();
            $("#bookHotel").hide();
            togglePackageFields(false);
            toggleHotelFields(true);
        });
        $("#hotelRad").click(function(){
            $("#bookFlight").hide();
            $("#bookHotel").show();
            togglePackageFields(true);
            toggleHotelFields(false);
        });
        $("#leaveDate").datepicker({
            constrainInput: true,
            minDate: +1,
            maxDate: +330
        });
        $("#returnDate").datepicker({
            constrainInput: true,
            minDate: new Date(),
            maxDate: +330
        });
        $("#checkInDate").datepicker({
            constrainInput: true,
            minDate: +1
        });
        $("#checkOutDate").datepicker({
            constrainInput: true,
            minDate: new Date()
        });
        $("#leaveDate").datepicker("option", "onSelect", function(dateText, inst) {
            $("#returnDate").datepicker("option", "minDate", new Date(dateText));
        });
        $("#checkInDate").datepicker("option", "onSelect", function(dateText, inst) {
            $("#checkOutDate").datepicker("option", "minDate", new Date(dateText));
        });
        $("input.date").mask("99/99/9999");
        $("input.date").val() == "" ? $("input.date").val("Select Date") : null;
        if ("hfRad" == $("input[@name=bookingType]:checked").attr('id')) {
            $("#hfRad").click();
        } else {
            $("#hotelRad").click();
        }
    }
    if (howManyGuests() == 0) {
        $("#noOfRooms").val("1");
    }
};

function validateOsbForm()
{
    var firstDate;
    var secondDate;

    if ($("input[@name=bookingType]:checked").val() == hotel){
        if ($("#destinationForHotel option:selected").val() == undefined || $("#destinationForHotel option:selected").val() == -1){
            alert("Please select your Destination");
            return false;
        }
        if ($("#checkInDate").val() == "" || $("#checkOutDate").val() == ""){
            alert("Please select your travel dates");
            return false;
        }
        if (!isValidDate("checkInDate", "mm/dd/yy") || !isDateGTToday("checkInDate", "mm/dd/yy")){
            alert("Check In Date is not a valid date OR is not greater than today");
            return false;
        }
        if (!isValidDate("checkOutDate", "mm/dd/yy") || !isDateGTToday("checkOutDate", "mm/dd/yy")){
            alert("Check Out Date is not a valid date OR is not greater than today");
            return false;         
        }
        firstDate = $("#checkInDate").val();
        secondDate = $("#checkOutDate").val();
    }

    if ($("input[@name=bookingType]:checked").val() == vacationPackage){
        if (($("#departure option:selected").val() == undefined || $("#departure option:selected").val() == '--' ) || ($("#destinationForPackage option:selected").val() == undefined || $("#destinationForPackage option:selected").val() == -1)){
            alert("Please select your Departure Airport and/or Destination");
            return false;
        }
        if ($("#leaveDate").val() == "" || $("#returnDate").val() == ""){
            alert("Please select your travel dates");
            return false;
        }
        if (!isValidDate("leaveDate", "mm/dd/yy") || !isDateGTToday("leaveDate", "mm/dd/yy")){
            alert("Depart Date is not a valid date OR is not greater than today");
            return false;
        }
        if (!isValidDate("returnDate", "mm/dd/yy") || !isDateGTToday("returnDate", "mm/dd/yy")){
            alert("Return Date is not a valid date OR is not greater than today");
            return false;
        }
        if (isDateTooFarOut("leaveDate", "mm/dd/yy") || isDateTooFarOut("returnDate", "mm/dd/yy")) {
        	alert("Cannot book trips with air more than 330 days in the future.");
        	return false;
        }
        firstDate = $("#leaveDate").val();
        secondDate = $("#returnDate").val();
    }

    if (parseUsDate(firstDate) >= parseUsDate(secondDate)){
        alert("Return Date must be greater than Leaving Date");
        return false;
    }

    if (howManyGuests() > maxGuests){
        alert("You are only allowed to book " + maxGuests + " guests");
        return false;
    }

    appendAdults();

    return true;
}

function appendAdults(usePrefix){
    var noOfRooms = $("#noOfRooms option:selected").val();
    var r = 0;
    var prefix = getPrefix(usePrefix);
    var roomParams = $('input[name^="' + prefix + 'rooms"]');
    roomParams.remove();
    for (r = 0; r < noOfRooms; r++){
        var noOfAdults = $("#adults" + r + " option:selected").val();
        var p = $("#children" + r + " option:selected").val();
        var a = 1;
        for (a = 1; a <= noOfAdults; a++){
            var input = $("<input>").attr("type", "hidden").attr("name", prefix + "rooms[" + r + "].persons[" +  p + "]").val("25");
            $('#osbForm').append($(input));
            p++;
        }
    }
}

function howManyGuests(){
    var i = 0;
    var guests = 0;
    var noOfRooms = $("#noOfRooms option:selected").val();
    while(i <= noOfRooms){
        $("#rooms" + i).children("#adults" + i).each(function(){
            guests +=  parseInt($(this).val());
        })
        $("#rooms" + i).children("#children" + i).each(function(){
            guests +=  parseInt($(this).val());
        })
        i++;
    }
    return guests;
}

function togglePackageFields(disabled){
    $("#leaveDate").attr("disabled", disabled);
    $("#returnDate").attr("disabled", disabled);
    $("#leaveTime").attr("disabled", disabled);
    $("#returnTime").attr("disabled", disabled);
    $("#maxPackagePrice").attr("disabled", disabled);
    $("#airline").attr("disabled", disabled);
    $("#departure").attr("disabled", disabled);
    $("#nonStop").attr("disabled", disabled);
    $("#destinationForPackage").attr("disabled", disabled);
}

function toggleHotelFields(disabled){
    $("#checkInDate").attr("disabled", disabled);
    $("#checkOutDate").attr("disabled", disabled);
    $("#maxHotelPrice").attr("disabled", disabled);
    $("#destinationForHotel").attr("disabled", disabled);
}

/**
 * Restores number of rooms and passenger deployment from peopleAges string
 */
function restoreAccommodation(paStr){
    var rooms = paStr.split("R,");
    if(rooms.length>1){
        /*var roomsCount = rooms.length-1;
        $("#noOfRooms").val(roomsCount);
        $("#noOfRooms").change();

        for(i=1; i<rooms.length; i++) {
            var adults=0;
            var childrenAges = new Array();
            var ages = rooms[i].split(",");
            for(j=0; j<ages.length; j++) {
                var age = parseInt(ages[j]);
                if(!isNaN(age)) {
                    if(age>=25) {
                        adults++;
                    } else {
                        childrenAges.push(age);
                    }
                }
            }
            var roomInd = i-1;
            $("#adults"+roomInd).val(adults);
            $("#adults"+roomInd).change();

            var numChildren = childrenAges.length;
            $("#children"+roomInd).val(numChildren);
            $("#children"+roomInd).change();
            for(childInd=0; childInd<numChildren; childInd++) {
                $("select[name='rooms["+roomInd+"].persons["+childInd+"]']").val(childrenAges[childInd]);
                $("select[name='rooms["+roomInd+"].persons["+childInd+"]']").change();
            }
            
        } */   
            
    	
		//don't need to do anything, values will be set correctly from URL
		return;
        
    } else {
    	//if ages string is empty, reset to defaults
    	$("#noOfRooms").val(1);
    	$("#noOfRooms").change();
    	$("#children0").val(0);
    	$("#children0").change();
    	$("#adults0").val(2);
    }
}

/**
 * Assembles all accommodation data as peopleAges string
 */
function assembleAccommodation() {
    var numRooms = $("#noOfRooms").val();
	var paStr = "";
	
	for(var roomInd=0; roomInd<=numRooms; roomInd++) {
        var numAdults = $("#adults"+roomInd).val();
        var numChildren = $("#children"+roomInd).val();
        paStr += "R,";
        
        for(i=0; i<numAdults; i++) {
            paStr += "25,";
        }
        
        for(i=0; i<numChildren; i++) {
            paStr += $("select[name=\"rooms["+roomInd+"].persons["+i+"]\"]").val()+",";
        }
	}
	return paStr;
}
