

var query = null;
var searchQuery;
var searchResult;
var booking;

$(document).ready(function(){
    
});

//redirect to booking
function RedirectToBooking()
{
    var queryString = $.query.parse(location.search);
    
    window.location.href = 
        "http://www.boekandfly.nl/vakantie/_PauschalBooking.aspx?" + 
        (queryString.get("agenturnr") != "" ? "agenturnr=" + escape(queryString.get("agenturnr")) + "&" : "") +
        "lmsadn=" + escape(query.get("adults")) + "&" +
        "lmschn=" + escape(query.get("children")) + "&" +
        "lmschag=" + escape(query.get("childrenages")) + "&" +
        "lmsrmn=" + escape(query.get("roomsnumber")) + "&" +
        "lmsrmmp=" + escape(query.get("roomsmapping")) + "&" +
        "bknglm=" + escape($("OfferId", booking).text()) + "&" +
        "lmbkbk=" + escape($("CacheId", booking).text());
}

//availability check
function AvailabilityCheck(offerId)
{
    $(".noresults").hide();
    $(".alternativeAirportInfo").hide();

    var acQuery = $.query.parse("");
    acQuery.set("bknglm", offerId);
    acQuery.set("lmsadn", query.get("adults"));
    acQuery.set("lmschn", query.get("children"));
    acQuery.set("lmschag", query.get("childrenages"));
    acQuery.set("lmsrmn", query.get("roomsnumber"));
    acQuery.set("lmsrmmp", query.get("roomsmapping"));
    acQuery.set("bkngmode", "xml");
    $("#ajaxLoaderBooking").fadeIn();
    $.get("PauschalAvailabilityCheck.aspx?" + acQuery.toString() + "&" + Math.random(), {}, 
        AvailabilityCheckCallback);
}

function AvailabilityCheckCallback(data, textStatus)
{
    $("#ajaxLoaderBooking").fadeOut();

    booking = data;

    if (data != null && $("Booking", data).size() > 0)
    {
        $("#bookingInfo").fadeOut(100);
        
        //render
        $("#bookingTotalPrice").html($("TotalPrice", data).text());
        $("#bookingDateFrom").html($("DateFrom", data).text());
        $("#bookingDateTo").html($("DateTo", data).text());
        $("#bookingDuration").html($("Duration", data).text() + " dagen");
        $("#bookingOriginAirport").html($("OriginAirport", data).text());
        $("#bookingOriginAirport2").html($("OriginAirport", data).text());
        $("#bookingDestinationAirport").html($("DestinationAirport", data).text());
        $("#bookingDestinationAirport2").html($("DestinationAirport", data).text());
        
        if ($("Flight1Departure", data).text() != "" && $("Flight1Arrival", data).text() != "")
        {
            $("#bookingFlight1Time").html($("Flight1Departure", data).text() + " - " +
                $("Flight1Arrival", data).text());
        }
        else
        {
            $("#bookingFlight1Time").hide();
        }
        
        if ($("Flight2Departure", data).text() != "" && $("Flight2Arrival", data).text() != "")
        {
            $("#bookingFlight2Time").html($("Flight2Departure", data).text() + " - " +
                $("Flight2Arrival", data).text());
        }
        else
        {
            $("#bookingFlight2Time").hide();
        }
        
        if ($("Flight1Airline", data).text() != "")
        {
            $("#bookingFlight1Airline").html($("Flight1Airline", data).text());
        }
        else
        {
            $("#bookingFlight1Airline").hide();
        }
        
        if ($("Flight2Airline", data).text() != "")
        {
            $("#bookingFlight2Airline").html($("Flight2Airline", data).text());
        }
        else
        {
            $("#bookingFlight2Airline").hide();
        }
        
        $("#bookingRoomsContainer").html("");
        var isFirstItem = true;
        $("Room", data).each(function(){
            if (!isFirstItem)
            {
                $("#bookingRoomsContainer").append(
                    '<div style="border-bottom:solid 1px #939385;"><img src="i/x.gif" width="1" height="5" /></div>');
            }
            else
            {
                isFirstItem = false;
            }
            
            $("Traveler", this).each(function(){
                var identityLabel = "";
                switch ($("TravelerIdentity", this).text())
                {
                    case "H":
                    {
                        identityLabel = "<b>volwassene</b>";
                        break;
                    }
                    case "D":
                    {
                        identityLabel = "<b>volwassene</b>";
                        break;
                    }
                    case "K":
                    {
                        identityLabel = "<b>kind</b> (" + $("TravelerAge", this).text() + " jaar)";
                        break;
                    }
                    case "B":
                    {
                        identityLabel = "<b>baby</b>"; // (" + $("TravelerAge", this).text() + " jaar)";
                        break;
                    }                    
                }
            
                $("#bookingRoomsContainer").append(
                    '<div style="float:left;padding-top:7px;width:130px;">' +
                    '    <b>1</b> ' + identityLabel + 
                    '</div>' +
                    '<div style="float:left;padding-top:7px;font-weight:bold;">' +
                    '    &euro; ' + $("TravelerPrice", this).text() +
                    '</div>' +
                    '<div style="clear:both;"></div>' +
                    '<div style=""><img src="i/x.gif" width="1" height="4" /></div>' +
                    '<div style="" class="hline"><img src="i/x.gif" width="1" height="1" /></div>');
            });
            
            $("#bookingRoomsContainer").append(
                '<div style="padding-top:3px;"><b>1 x ' + $("RoomLabel", this).text() + '</b></div>');
        });
        
        //taxes
        $("#bookingTaxesContainer").html("");
        isFirstItem = true;
        $("Tax", data).each(function(){
            if (!isFirstItem)
            {
                $("#bookingTaxesContainer").append(
                    '<div style=""><img src="i/x.gif" width="1" height="4" /></div><div style="" class="hline"><img src="i/x.gif" width="1" height="1" /></div>');
            }
            else
            {
                isFirstItem = false;
            }
            
            $("#bookingTaxesContainer").append(
                    '<div style="float:left;padding-top:3px;width:130px;">' +
                    $("Name", this).text() + 
                    '</div>' +
                    '<div style="float:left;padding-top:3px;font-weight:bold;">' +
                    '    &euro; ' + $("Price", this).text() +
                    '</div>' +
                    '<div style="clear:both;"></div>');
        });
        
        //show
        $("#bookingInfo").fadeIn(500);
        
        $("div.selectedOfferCell").removeClass("selectedOfferCell");
        $("div[@offerid='" + $("OfferId", data).text() + "']").addClass("selectedOfferCell");
        
        if ($("AlternativeRoomChosen", data).size() > 0)
        {
            $("#alternativeRoomChosen").show();
        }
                
        if ($("AlternativeOriginAirport", data).size() > 0)
        {
            $(".alternativeAirportInfo").show().html(
                "De door u gekozen aanbod is niet meer beschikbaar. Een alternatief is gevonden voor vertrek vanaf " + 
                $("AlternativeOriginAirport", data).text() + ".");
        }
    }
    else
    {
        $(".noresults").show().html("De door u gekozen datum is niet meer beschikbaar. Klik op een alternatieve datum.");
        $("div[@offerid='" + $("OfferId", data).text() + "']").addClass("unavailableOfferCell");
    }
}

//history and gui
var lastHash;
function HistoryCallbackExplicit(hash)
{
    HistoryCallback(hash, true);
}

function HistoryCallback(hash, explicit)
{
    //firefox fix to ignore second parasite request
    if (!explicit && $.browser.mozilla && (hash == lastHash || hash == unescape(lastHash)))
    {
        return;
    }
    lastHash = hash;

    if (hash == null || hash == "")
    {
        //can't be empty!
    }
    else
    {
        if (searchResult == null)
        {
            searchQuery = $.query.parse(hash);
            SearchOffers(true);
        }
        else
        {
            searchResult = null;
        }
    }
}

// search
var searchAttempts = 0;

function SearchOffers(history)
{
    searchAttempts++;

    $("#bookingInfo").hide();
    
    if (searchQuery.get("handler") != "pagination")
    {
        searchQuery.remove("tableoffset");
    }

    $("#ajaxLoader").slideDown(500, function(){
        $(".noresults").hide();
        $(".alternativeAirportInfo").hide();
        jQuery.get(
            "dataprovider.aspx?" + searchQuery.toString() + "&" + Math.random(), 
            {}, 
            history == true ? SearchCallBackHistory : SearchCallBack);
    });
}

function SearchCallBackHistory(data, textStatus)
{
    SearchCallBack(data, textStatus, true);
}

function SearchCallBack(data, textStatus, history) 
{
    if (new Number($("RecordsCount", data).text()) > 0)
    {
        searchAttempts = 0;
        $("#ajaxLoader").slideUp(500);
        
        //update min price box
        $("#hyperLinkPrice").html($("TotalMinPrice", data).text() + ",-");
        $(".priceBlock").show();
        
        searchResult = data;
        query = searchQuery;
        UpdateGui();
        UpdateSearchResult();
        if (!(history == true)) //click
        {
            $.history.load(searchQuery.toString());
        }
        else
        {
            searchResult = null;
        }
    }
    else if (searchQuery.get("handler") == "" && searchAttempts < 3)
    {
        if (searchQuery.get("source") == "lastminuteoffer")
        {
            location.href = location.href.replace("source=lastminuteoffer", "source=pauschaloffer");
            location.href = location.href.replace("?", "?offerscontrol=pauschal&");
        }
        if (searchAttempts == 1)
        {
            searchQuery.set("date", "15.04." + new Date().getFullYear());
            searchQuery.set("datevarianceid", "14");
            SearchOffers();
        }
        else if (searchAttempts == 2)
        {
            searchQuery.set("date", "15.11." + new Date().getFullYear());
            searchQuery.set("datevarianceid", "14");
            SearchOffers();
        }
    }  
    else
    {
        searchAttempts = 0;
        $("#ajaxLoader").slideUp(500);
        UpdateGui();
        $(".noresults").show().html("Uw zoekopdracht heeft geen resultaten opgeleverd. U kunt een vernieuwde zoekopdracht proberen.");
    }
}
 
 
// render search result  
function UpdateSearchResult() {
    var data = searchResult;
    var tmpl = '<div></div>';
    var rows = new Array();
    var minDateFromMilliseconds = 0;
 
    $("#searchResult").html("");
    $(data).find("Pauschal").each(function(){
        var dateFromMilliseconds = new Number($("DateFromJS", this).text());
        var dateFrom = new Date(dateFromMilliseconds);
        var duration = new Number($("DurationDays", this).text());
               
        if (rows[duration] == null)
        {
            rows[duration] = new Array();
        }
        var offersByDate = rows[duration];
        offersByDate[dateFromMilliseconds] = this;
    });
    
    //init start date
    minDateFromMilliseconds = new Number($("StartDateMilliseconds", data).text());
    if (query.get("tableoffset") != "")
    {
        minDateFromMilliseconds += 86400000 * new Number(query.get("tableoffset"));
    }
    
    //render table header
    var resultsHTML = '<div style="float:left;width:56px;border:solid 1px #C8C8C0;text-align:right;font-weight:bold;padding-right:5px;padding-top:4px;padding-bottom:4px;">Reisduur</div>';
    for (var i = 0; i < 10; i++)
    {
        dateFromMilliseconds = minDateFromMilliseconds + 86400000 * i;
        var dateFrom = new Date(dateFromMilliseconds);
        resultsHTML += '<div style="float:left;width:55px;border:solid 1px #C8C8C0;border-left:0px;text-align:center;padding-top:4px;padding-bottom:4px;' + (i % 2 == 0 ? 'background-color:#EDF6FB;':'') + '">' + GetHeaderDateLabel(dateFrom) + '</div>';
    }
    resultsHTML += '<div style="clear:both;" />';
    
    //render table content
    for(duration in rows)
    {    
        resultsHTML += 
            '<div style="float:left;width:56px;border:solid 1px #C8C8C0;border-top:0px;text-align:right;font-weight:bold;padding-right:5px;padding-top:4px;padding-bottom:4px;">' + duration + 
            ' Dagen</div>';
        for (var i = 0; i < 10; i++)
        {
            dateFromMilliseconds = minDateFromMilliseconds + 86400000 * i;
            var dateFrom = new Date(dateFromMilliseconds);
            var offer = rows[duration][dateFromMilliseconds];
            
            if (offer != null)
            {
                resultsHTML += 
                    '<div class="offerCell" style="' + (i % 2 == 0 ? 'background-color:#EDF6FB;':'') + '"' +
                    ' onclick="AvailabilityCheck(' + $("PK", offer).text() + ');"' + 
                    ' offerid="' + $("PK", offer).text() + '">' + 
                    '<div>' + $("MinPrice", offer).text() + ',-</div></div>';
            }
            else
            {
                resultsHTML += 
                    '<div style="float:left;width:55px;border:solid 1px #C8C8C0;border-left:0px;border-top:0px;padding-top:4px;padding-bottom:4px;' + (i % 2 == 0 ? 'background-color:#EDF6FB;':'') + '">&nbsp;</div>';
            }
        }
        resultsHTML += '<div style="clear:both;"></div>';
    }
    
    $("#searchResult").append(resultsHTML);
    $(resultsHTML).show();
    
    //update pagination
    if (query.get("tableoffset") != "" && query.get("tableoffset") != "0")
    {
        $("#paginationPrevious").show();
        $("#paginationPreviousDisabled").hide();
    }
    else
    {
        $("#paginationPrevious").hide();
        $("#paginationPreviousDisabled").show();
    }
    
    if ($("MoreOffers", data).text() == "true")
    {
        $("#paginationNext").show();
        $("#paginationNextDisabled").hide();
    }
    else
    {
        $("#paginationNext").hide();
        $("#paginationNextDisabled").show();
    }
    
    //make previous link always visible (10 days back)
    $("#paginationPrevious").show();
}

function GetHeaderDateLabel(date)
{
    var weekDay = "";
    switch(date.getDay())
    {
        case 0:{weekDay = "zo";break;}
        case 1:{weekDay = "ma";break;}
        case 2:{weekDay = "di";break;}
        case 3:{weekDay = "wo";break;}
        case 4:{weekDay = "do";break;}
        case 5:{weekDay = "vr";break;}
        case 6:{weekDay = "za";break;}
    }
    var month = date.getMonth() + 1;
    return weekDay + " " + (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + "-" +
        (month < 10 ? "0" + month : month);
}

//wizard
function UpdateGui()
{
    //init query from hash if not initialized
    if (query == null)
    {
        query = $.query.parse(location.hash);
    }

    //wizard
    
    //date
    $('#textBoxDate').dpSetSelected(ToCalendarDate(query.get("date")));
    $('#textBoxDate').attr("value", FromTimeTics($('#textBoxDate').dpGetSelected()[0]));
    
    //datevariance
    $("#dropDownListDateVariance").find("option[@value='" + query.get("datevarianceid") + "']").attr("selected", "selected");
    
    //duration
    $("#dropDownListDuration").find("option[@value='" + query.get("durationid") + "']").attr("selected", "selected");
    
    //adults
    $("#textBoxAdults").attr("value", query.get("adults"));
    
    //children
    $("#textBoxChildren").attr("value", query.get("children"));
    
    //rooms number
    if ($("#dropDownListRoomsNumber").get(0) != null)
    {
        if (query.get("roomsnumber") != "")
        {
            $("#dropDownListRoomsNumber").get(0).selectedIndex = new Number(query.get("roomsnumber"));
        }
        else
        {
            $("#dropDownListRoomsNumber").get(0).selectedIndex = 0;
        }
    }
    $("#textBoxKamers").val(query.get("roomsnumber"));
    /*if (query.get("roomsnumber") == "1")
    {
        $("#firstRoomSelectionContainer").show();
        $("#secondRoomSelectionContainer").hide();
    }
    else if (query.get("roomsnumber") == "2")
    {
        $("#firstRoomSelectionContainer").show();
        $("#secondRoomSelectionContainer").show();
    }
    else
    {   
        $("#firstRoomSelectionContainer").hide();
        $("#secondRoomSelectionContainer").hide();
    }*/
    
    //room type
    $("#roomTypeSingle").removeClass("wizard_list_item_room_type_selected");
    $("#roomTypeSingle").addClass("wizard_list_item_room_type");
    $("#roomTypeDouble").removeClass("wizard_list_item_room_type_selected");
    $("#roomTypeDouble").addClass("wizard_list_item_room_type");
    $("#roomTypeFamily").removeClass("wizard_list_item_room_type_selected");
    $("#roomTypeFamily").addClass("wizard_list_item_room_type");
    var roomsMapping = query.get("roomsmapping");
    if (roomsMapping != null && roomsMapping != "")
    {
        if (roomsMapping.indexOf("EZ") >= 0)
        {
            $("#roomTypeSingle").removeClass("wizard_list_item_room_type");
            $("#roomTypeSingle").addClass("wizard_list_item_room_type_selected");
        }
        if (roomsMapping.indexOf("DZ") >= 0)
        {
            $("#roomTypeDouble").removeClass("wizard_list_item_room_type");
            $("#roomTypeDouble").addClass("wizard_list_item_room_type_selected");
        }
        if (roomsMapping.indexOf("FZ") >= 0)
        {
            $("#roomTypeFamily").removeClass("wizard_list_item_room_type");
            $("#roomTypeFamily").addClass("wizard_list_item_room_type_selected");
        }
    }
    /*
    //dynamic occupancy
    if ($("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 1) + "'].wizard_list_item_occupancy").size() == 0 &&
        $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 1) + "'].wizard_list_item_occupancy_selected").size() == 0 &&
        OccupancyByRoomNumber(query.get("occupancyid"), 1) != "")
    {
        $("#dynamicOccupancy").attr("occupancyid", OccupancyByRoomNumber(query.get("occupancyid"), 1));
        $("#dynamicOccupancy").html(
            $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 1) + "'].wizard_popup_list_item_occupancy").html());
        $("#dynamicOccupancy").show();
    }
    else if ($("#dynamicOccupancy").attr("occupancyid") != OccupancyByRoomNumber(query.get("occupancyid"), 1))
    {
        $("#dynamicOccupancy").hide();
        $("#dynamicOccupancy").attr("occupancyid", "");
        $("#dynamicOccupancy").html("");
    }
    
    //dynamic occupancy 2
    if ($("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 2) + "'].wizard_list_item_occupancy2").size() == 0 &&
        $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 2) + "'].wizard_list_item_occupancy_selected2").size() == 0 &&
        OccupancyByRoomNumber(query.get("occupancyid"), 2) != "")
    {
        $("#dynamicOccupancy2").attr("occupancyid", OccupancyByRoomNumber(query.get("occupancyid"), 2));
        $("#dynamicOccupancy2").html(
            $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 2) + "'].wizard_popup_list_item_occupancy2").html());
        $("#dynamicOccupancy2").show();
    }
    else if ($("#dynamicOccupancy2").attr("occupancyid") != OccupancyByRoomNumber(query.get("occupancyid"), 2))
    {
        $("#dynamicOccupancy2").hide();
        $("#dynamicOccupancy2").attr("occupancyid", "");
        $("#dynamicOccupancy2").html("");
    }
    
    //occupancy
    $(".wizard_list_item_occupancy_selected").addClass("wizard_list_item_occupancy");
    $(".wizard_list_item_occupancy").removeClass("wizard_list_item_occupancy_selected");
    $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 1) + "'].wizard_list_item_occupancy").addClass(
        "wizard_list_item_occupancy_selected");
        
    //occupancy 2
    $(".wizard_list_item_occupancy_selected2").addClass("wizard_list_item_occupancy2");
    $(".wizard_list_item_occupancy2").removeClass("wizard_list_item_occupancy_selected2");
    $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 2) + "'].wizard_list_item_occupancy2").addClass(
        "wizard_list_item_occupancy_selected2");
    */
    //dynamic airport
    if ($("*[@airportid='" + query.get("airportid") + "'].wizard_list_item_airport").size() == 0 &&
        $("*[@airportid='" + query.get("airportid") + "'].wizard_list_item_airport_selected").size() == 0 &&
        query.get("airportid") != "")
    {
        $("#dynamicAirport").attr("airportid", query.get("airportid"));
        $("#dynamicAirport").html(
            $("*[@airportid='" + query.get("airportid") + "'].wizard_popup_list_item_airport").html());
        $("#dynamicAirport").show();
    }
    else if ($("#dynamicAirport").attr("airportid") != query.get("airportid"))
    {
        $("#dynamicAirport").hide();
        $("#dynamicAirport").attr("airportid", "");
        $("#dynamicAirport").html("");
    }
    
    //airport
    $(".wizard_list_item_airport_selected").addClass("wizard_list_item_airport");
    $(".wizard_list_item_airport").removeClass("wizard_list_item_airport_selected");
    $("*[@airportid='" + query.get("airportid") + "'].wizard_list_item_airport").addClass(
        "wizard_list_item_airport_selected");
        
    //price interval
    $(".wizard_list_item_price_interval_selected").addClass("wizard_list_item_price_interval");
    $(".wizard_list_item_price_interval").removeClass("wizard_list_item_price_interval_selected");
    $("*[@priceintervalid='" + query.get("priceintervalid") + "'].wizard_list_item_price_interval").addClass(
        "wizard_list_item_price_interval_selected");
        
    //meal plan
    $(".wizard_list_item_meal_plan_selected").addClass("wizard_list_item_meal_plan");
    $(".wizard_list_item_meal_plan").removeClass("wizard_list_item_meal_plan_selected");
    $("*[@mealplanid='" + query.get("mealplanid") + "'].wizard_list_item_meal_plan").addClass(
        "wizard_list_item_meal_plan_selected");
}

function UpdateChildrenPopupGui(element) //element = textbox
{
    var children;
    var childrenages;
    if (element === undefined)
    {
        children = query.get("children");
        childrenages = query.get("childrenages");
    }
    else
    {
        children = element.value;
        childrenages = "";
        for (var i = 0; i < children; i++)
        {
            if (childrenages != "")
            {
                childrenages += ",";
            }
            childrenages += "3";
        }
    }
       
    //update popup controls
    $("input[@name='childrenCount']").each(function(){
        if ($(this).attr("value") == children)
        {
            $(this).attr("checked", true);
        }
        else
        {
            $(this).attr("checked", false);
        }
    });
    
    for (var i = 0; i < 6; i++)
    {
        $("#dropDownListChildrenAge" + i).get(0).selectedIndex = 3;
    }
    
    for (var i = 0; i < children; i++)
    {
        $("#dropDownListChildrenAge" + i).get(0).selectedIndex = childrenages.split(',')[i]; // - 1;
    }
    
    UpdateChildrenAgeListsGui();
}

function UpdateChildrenAgeListsGui()
{
    var childrenCount = 0;
    $("input[@name='childrenCount']").each(function(){
        if ($(this).attr("checked"))
        {
            childrenCount = $(this).attr("value");
        }
    });
    
    for (var i = 0; i < 6; i++)
    {
        $("#dropDownListChildrenAge" + i).hide();
    }
    
    for (var i = 0; i < childrenCount; i++)
    {
        $("#dropDownListChildrenAge" + i).show();
    }
}

function UpdateRoomsPopupGui()
{
    var roomsCount = query.get("roomsnumber");
    var roomsMapping = query.get("roomsmapping");
    
    //update popup controls
    $("input[@name='roomsCount']").each(function(){
        if ($(this).attr("value") == roomsCount)
        {
            $(this).attr("checked", true);
        }
        else
        {
            $(this).attr("checked", false);
        }
    });
    
    for (var i = 0; i < 3; i++)
    {
        $("#dropDownListRoomAdults" + i).get(0).selectedIndex = 0;
        $("#dropDownListRoomChildren" + i).get(0).selectedIndex = 0;
        $("#dropDownListRoomInfants" + i).get(0).selectedIndex = 0;
        $("#dropDownListRoomType" + i).get(0).selectedIndex = 0;
    }
    
    var rooms = query.get("roomsmapping").split(',');
    for (var i = 0; i < roomsCount && i < rooms.length; i++)
    {
        var roomData = rooms[i].split(' ');
        $("#dropDownListRoomAdults" + i).get(0).selectedIndex = roomData[0];
        $("#dropDownListRoomChildren" + i).get(0).selectedIndex = roomData[1];
        $("#dropDownListRoomInfants" + i).get(0).selectedIndex =  roomData[2];
        switch(roomData[3])
        {
            case "EZ": 
            {
                $("#dropDownListRoomType" + i).get(0).selectedIndex = 0;
                break;
            }
            case "DZ": 
            {
                $("#dropDownListRoomType" + i).get(0).selectedIndex = 1;
                break;
            }
            case "FZ": 
            {
                $("#dropDownListRoomType" + i).get(0).selectedIndex = 2;
                break;
            }
        }
    }

    UpdateRoomsMappingListsGui();
}

function UpdateRoomsMappingListsGui()
{
    var roomsCount = 0;
    $("input[@name='roomsCount']").each(function(){
        if ($(this).attr("checked"))
        {
            roomsCount = $(this).attr("value");
        }
    });
    
    for (var i = 0; i < 6; i++)
    {
        $("#dropDownListRoomAdults" + i).hide();
        $("#dropDownListRoomChildren" + i).hide();
        $("#dropDownListRoomInfants" + i).hide();
        $("#dropDownListRoomType" + i).hide();
    }
    
    for (var i = 0; i < roomsCount; i++)
    {
        $("#dropDownListRoomAdults" + i).show();
        $("#dropDownListRoomChildren" + i).show();
        $("#dropDownListRoomInfants" + i).show();
        $("#dropDownListRoomType" + i).show();
    }
}

function UpdateOccupanciesPopupGui()
{
    $(".wizard_popup_list_item_occupancy").show();
    $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 1) + "'].wizard_popup_list_item_occupancy").hide();
}

function UpdateOccupanciesPopupGui2()
{
    $(".wizard_popup_list_item_occupancy2").show();
    $("*[@occupancyid='" + OccupancyByRoomNumber(query.get("occupancyid"), 2) + "'].wizard_popup_list_item_occupancy2").hide();
}

function UpdateAirportsPopupGui()
{
    $(".wizard_popup_list_item_airport").show();
    $("*[@airportid='" + query.get("airportid") + "'].wizard_popup_list_item_airport").hide();
}

function ClosePopups()
{
    $("#kamersPopup").hide();
    $("#childrenPopup").hide();
    $("#roomsPopup").hide();
    $("#airportsPopup").hide();
    $("#occupanciesPopup").hide();
    $("#occupanciesPopup2").hide();
}

//wizard handlers
function DateHandler(e, selectedDate, $td)
{
    if (query.get("date") != FromCalendarDate(selectedDate))
    {
        searchQuery = query.copy();
        searchQuery.set("handler", "date");
        searchQuery.set("date", FromCalendarDate(selectedDate));
        SearchOffers();
    }
}

function DateVarianceHandler(element) //element = select
{
    searchQuery = query.copy();
    searchQuery.set("handler", "datevariance");
    searchQuery.set("datevarianceid", element.options[element.selectedIndex].value);
    SearchOffers();
}

function DurationHandler(element) //element = select
{
    searchQuery = query.copy();
    searchQuery.set("handler", "duration");
    searchQuery.set("durationid", element.options[element.selectedIndex].value);
    searchQuery.remove("duration");
    SearchOffers();
}

function AdultsHandler(element) //element = textbox
{
    if (query.get("adults") != element.value)
    {
        searchQuery = query.copy();
        searchQuery.set("handler", "adults");
        searchQuery.set("adults", element.value);
        
        searchQuery.remove("roomsnumber")
        searchQuery.remove("roomsmapping")
        searchQuery.remove("occupancyid")
        
        SearchOffers();
    }
}

function ChildrenPopupHandler()
{
    //process children popup
    searchQuery = query.copy();
    searchQuery.set("handler", "childrenpopup");
    
    var childrenCount = 0;
    $("input[@name='childrenCount']").each(function(){
        if ($(this).attr("checked"))
        {
            childrenCount = $(this).attr("value");
        }
    });
    
    var performSearch = false;
    if (childrenCount == 0)
    {
        if (query.get("children") != null && query.get("children") != "")
        {
            performSearch = true;
            searchQuery.remove("children");
            searchQuery.remove("childrenages");
        }
    }
    else
    {
        if (query.get("children") != childrenCount)
        {
            performSearch = true;
        }
        searchQuery.set("children", childrenCount);
        
        var childrenAges = "";
        for(var i = 0; i < childrenCount; i++)
        {
            if (childrenAges != "")
            {
                childrenAges += ",";
            }
            childrenAges += 
                $("#dropDownListChildrenAge" + i).get(0).options[$("#dropDownListChildrenAge" + i).get(0).selectedIndex].value;
        }
        if (query.get("childrenages") != childrenAges)
        {
            performSearch = true;
        }
        searchQuery.set("childrenages", childrenAges);
    }
    
    if (performSearch)
    {
        searchQuery.remove("roomsnumber")
        searchQuery.remove("roomsmapping")
        searchQuery.remove("occupancyid")
        
        SearchOffers();
    }
}

function RoomsPopupHandler()
{
    searchQuery = query.copy();
    searchQuery.set("handler", "roomspopup");
    
    var roomsCount = 0;
    $("input[@name='roomsCount']").each(function(){
        if ($(this).attr("checked"))
        {
            roomsCount = $(this).attr("value");
        }
    });
    
    if (roomsCount > 0)
    {
        //calculate adults and children selected
        var adultsCount = 0;
        var childrenCount = 0;
        var infantsCount = 0;
        
        for (var i = 0; i < roomsCount; i++)
        {
            adultsCount += new Number($("#dropDownListRoomAdults" + i).attr("value"));
            childrenCount += new Number($("#dropDownListRoomChildren" + i).attr("value"));
            infantsCount += new Number($("#dropDownListRoomInfants" + i).attr("value"));
        }
        
        //validate to match configured adults and children
        if (adultsCount != query.get("adults") ||
            childrenCount != GetConfiguredChildren() || infantsCount != GetConfiguredInfants())
        {
            alert("Die Gesamtzalh der Erwachsenen und Kinder muss wie konfiguriert sein!");
            $("#roomsPopup").show();
            return;
        }
            
        //alernative to validation and return: set adults and children automatically - disabled now
        searchQuery.set("adults", adultsCount);
        
        if (childrenCount != GetConfiguredChildren() || infantsCount != GetConfiguredInfants())
        {
            var childrenAges = "";
            for(var i = 0; i < childrenCount; i++)
            {
                if (childrenAges != "")
                {
                    childrenAges += ",";
                }
                childrenAges += "3";
            }
            for(var i = 0; i < infantsCount; i++)
            {
                if (childrenAges != "")
                {
                    childrenAges += ",";
                }
                childrenAges += "1";
            }
            searchQuery.set("children", childrenCount + infantsCount);
            searchQuery.set("childrenages", childrenAges);
        }
            
        //process popup
        searchQuery.set("roomsnumber", roomsCount);
        
        var roomsMapping = "";
        for(var i = 0; i < roomsCount; i++)
        {
            if (roomsMapping != "")
            {
                roomsMapping += ",";
            }
            roomsMapping += 
                $("#dropDownListRoomAdults" + i).attr("value") + " " +
                $("#dropDownListRoomChildren" + i).attr("value") + " " +
                $("#dropDownListRoomInfants" + i).attr("value") + " " +
                $("#dropDownListRoomType" + i).attr("value");
        }
        searchQuery.set("roomsmapping", roomsMapping);
        
        if (query.get("roomsnumber") != searchQuery.get("roomsnumber") || 
            query.get("roomsmapping") != searchQuery.get("roomsmapping"))
        {    
            SearchOffers();
        }
    }
}

function RoomTypeHandler(element) //element = div
{
    searchQuery = query.copy();
    searchQuery.set("handler", "roomtype");
 
    if ($(element).hasClass("wizard_list_item_room_type_selected")) //&& $(".wizard_list_item_room_type_selected").size() == 1)
    {
        searchQuery.remove("roomsnumber")
        searchQuery.remove("roomsmapping")
        
        SearchOffers();
    }
    else if ($(element).hasClass("wizard_list_item_room_type") && $(".wizard_list_item_room_type_selected").size() <= 1)
    {   
        var adults = searchQuery.get("adults");
        var children = searchQuery.get("children");
        if (children == null || children == "")
        {
            children = "0";
        }
        
        searchQuery.set("roomsnumber", "1");
        switch(element.id)
        {
            case "roomTypeSingle":
            {
                if (adults == 1)
                {
                    searchQuery.set("roomsmapping", "1 " + GetConfiguredChildren() + " " + GetConfiguredInfants() + " EZ,0 0 0 NA,0 0 0 NA");
                }
                else if (adults == 2)
                {
                    searchQuery.set("roomsnumber", "2");
                    searchQuery.set("roomsmapping", "1 " + GetConfiguredChildren() + " " + GetConfiguredInfants() + " EZ,1 0 0 EZ,0 0 0 NA");
                }
                else if (adults == 3)
                {
                    searchQuery.set("roomsnumber", "3");
                    searchQuery.set("roomsmapping", "1 " + GetConfiguredChildren() + " " + GetConfiguredInfants() + " EZ,1 0 0 EZ,1 0 0 EZ");
                }
                else
                {
                    searchQuery.set("roomsmapping", adults + " " + GetConfiguredChildren() + " " + GetConfiguredInfants() + " EZ,0 0 0 NA,0 0 0 NA");
                }
                break;
            }
            case "roomTypeDouble":
            {
                searchQuery.set("roomsmapping", adults + " " + GetConfiguredChildren() + " " + GetConfiguredInfants() + " DZ,0 0 0 NA,0 0 0 NA");
                break;
            }
            case "roomTypeFamily":
            {
                searchQuery.set("roomsmapping", adults + " " + GetConfiguredChildren() + " " + GetConfiguredInfants() + " FZ,0 0 0 NA,0 0 0 NA");
                break;
            }
        }
        
        SearchOffers();
    }
    else
    {
        UpdateRoomsPopupGui();
        $('#roomsPopup').fadeIn(300);
    }
}

function KamersPopupHandler(element) //element = div
{
    searchQuery = query.copy();
    searchQuery.set("handler", "occupancy");

    var newOccupancy = "";
    if ($("#kamer1").css("display") == "none")
    {
        newOccupancy = "";
    }
    else if ($("#kamer2").css("display") == "none")
    {
        newOccupancy = $("#kamer1").val() + "0 0 0 NA,0 0 0 NA";
    }
    else if ($("#kamer3").css("display") == "none")
    {
        newOccupancy = $("#kamer1").val() + "," + $("#kamer2").val() + ",0 0 0 NA";
    }
    else
    {
        newOccupancy = $("#kamer1").val() + "," + $("#kamer2").val() + "," + $("#kamer3").val()
    }

    searchQuery.set("occupancyid", newOccupancy);
    var roomsnumber = ExtractOccupancyRoomsNumber2(newOccupancy);
    if (roomsnumber > 0)
    {
        searchQuery.set("roomsnumber", roomsnumber);
    }
    else
    {
        searchQuery.remove("roomsnumber");
    }
    searchQuery.set("roomsmapping", ExtractOccupancyRoomsMapping(newOccupancy));
    var adults = ExtractOccupancyAdults2(newOccupancy);
    if (adults > 0)
    {
        searchQuery.set("adults", ExtractOccupancyAdults2(newOccupancy));
    }
    else
    {
        searchQuery.set("adults", 2);
    }
    
    var children = ExtractOccupancyChildren2(newOccupancy);
    if (children > 0)
    {
        searchQuery.set("children", children);
    }
    else
    {
        searchQuery.remove("children");
    }
    
    var ages = ExtractOccupancyChildrenAges2(newOccupancy);
    if ((ages == null) || (ages == ''))
    {
        searchQuery.remove("childrenages");
    }
    else
    {
        searchQuery.set("childrenages", ages);
    }

    $("#textBoxKamers").val(roomsnumber > 0 ? roomsnumber : "");
 
    SearchOffers();
}

function ExtractOccupancyChildrenAges2(occupancy)
{
    var arrayActualChildrenAges = query.get("childrenages") != "" ? query.get("childrenages").split(',') : null;
    var childrenAges = "";
    var children = ExtractOccupancyChildren2(occupancy);
    var firstIteration = true;
    for(var i = 0; i < children; i++)
    {
        if (!firstIteration)
        {
            childrenAges += ",";
        }
        if (arrayActualChildrenAges != null && i < arrayActualChildrenAges.length)
        {
            childrenAges += arrayActualChildrenAges[i];
        }
        else
        {
            childrenAges += "3";
        }
        firstIteration = false;
    }
    return childrenAges;
}

function ExtractOccupancyChildren2(occupancy)
{
    return new Number(occupancy.substr(2, 1)) + new Number(occupancy.substr(11, 1)) + 
        new Number(occupancy.substr(20, 1)) + new Number(occupancy.substr(29, 1));
}

function ExtractOccupancyAdults2(occupancy)
{
    return new Number(occupancy.substr(0, 1)) + new Number(occupancy.substr(9, 1)) + 
        new Number(occupancy.substr(18, 1)) + new Number(occupancy.substr(27, 1));
}

function ExtractOccupancyRoomsNumber2(occupancy)
{
    if (occupancy.indexOf("0 0 0 NA,0 0 0 NA,0 0 0 NA") >= 0 || occupancy=="")
    {
        return 0;
    }
    else if (occupancy.indexOf("0 0 0 NA,0 0 0 NA") >= 0)
    {
        return 1;
    }
    else if (occupancy.indexOf("0 0 0 NA") >= 0)
    {
        return 2;
    }
    else
    {
        return 3;
    }
}

function OccupancyHandler(element) //element = div
{
    searchQuery = query.copy();
    searchQuery.set("handler", "occupancy");
 
    if ($(element).hasClass("wizard_list_item_occupancy_selected"))
    {
        searchQuery.remove("occupancyid");
        searchQuery.remove("roomsnumber");
        searchQuery.remove("roomsmapping");
    }
    else
    {
        var newOccupancy = AggregateOccupancy($(element).attr("occupancyid"), 1);
        searchQuery.set("occupancyid", newOccupancy);
        searchQuery.set("roomsnumber", ExtractOccupancyRoomsNumber(newOccupancy));
        searchQuery.set("roomsmapping", ExtractOccupancyRoomsMapping(newOccupancy));
        searchQuery.set("adults", ExtractOccupancyAdults(newOccupancy));
        searchQuery.set("children", ExtractOccupancyChildren(newOccupancy));
        searchQuery.set("childrenages", ExtractOccupancyChildrenAges(newOccupancy));
    }
    
    SearchOffers();
}

function OccupancyHandler2(element) //element = div
{
    searchQuery = query.copy();
    searchQuery.set("handler", "occupancy");
 
    if ($(element).hasClass("wizard_list_item_occupancy_selected2"))
    {
        searchQuery.remove("occupancyid");
        searchQuery.remove("roomsnumber");
        searchQuery.remove("roomsmapping");
    }
    else
    {
        var newOccupancy = AggregateOccupancy($(element).attr("occupancyid"), 2);
        searchQuery.set("occupancyid", newOccupancy);
        searchQuery.set("roomsnumber", ExtractOccupancyRoomsNumber(newOccupancy));
        searchQuery.set("roomsmapping", ExtractOccupancyRoomsMapping(newOccupancy));
        searchQuery.set("adults", ExtractOccupancyAdults(newOccupancy));
        searchQuery.set("children", ExtractOccupancyChildren(newOccupancy));
        searchQuery.set("childrenages", ExtractOccupancyChildrenAges(newOccupancy));
    }
    
    SearchOffers();
}

function OccupancyPopupHandler(element) //element = div
{
    ClosePopups();
    OccupancyHandler(element);
}

function OccupancyPopupHandler2(element) //element = div
{
    ClosePopups();
    OccupancyHandler2(element);
}

function RoomsNumberHandler(element) //element = dropdownlist
{
    searchQuery = query.copy();
    searchQuery.set("handler", "roomsnumber");
 
    if ($(element).get(0).selectedIndex > 0)
    {
        searchQuery.set("roomsnumber", new String($(element).get(0).selectedIndex));
        searchQuery.remove("occupancyid");
        searchQuery.remove("roomsmapping");
    }
    else
    {
        searchQuery.remove("roomsnumber");
        searchQuery.remove("occupancyid");
        searchQuery.remove("roomsmapping");
    }
     
    SearchOffers();
}

function AirportHandler(element) //element = div
{
    searchQuery = query.copy();
    searchQuery.set("handler", "airport");
 
    if ($(element).hasClass("wizard_list_item_airport_selected"))
    {
        searchQuery.remove("airportid");
    }
    else
    {
        searchQuery.set("airportid", $(element).attr("airportid"));
    }
    
    SearchOffers();
}

function AirportPopupHandler(element) //element = div
{
    ClosePopups();
    AirportHandler(element);
}

function PriceIntervalHandler(element) //element = div
{
    searchQuery = query.copy();
    searchQuery.set("handler", "priceinterval");
 
    if ($(element).hasClass("wizard_list_item_price_interval_selected"))
    {
        searchQuery.remove("priceintervalid");
    }
    else
    {
        searchQuery.set("priceintervalid", $(element).attr("priceintervalid"));
    }
    
    SearchOffers();
}

function MealPlanHandler(element) //element = div
{
    searchQuery = query.copy();
    searchQuery.set("handler", "mealplan");
 
    if ($(element).hasClass("wizard_list_item_meal_plan_selected"))
    {
        searchQuery.remove("mealplanid");
    }
    else
    {
        searchQuery.set("mealplanid", $(element).attr("mealplanid"));
    }
    
    SearchOffers();
}

function PaginationHandler(direction)
{
    searchQuery = query.copy();
    searchQuery.set("handler", "pagination");
    
    if (direction == "next")
    {
        searchQuery.set("tableoffset", new Number(searchQuery.get("tableoffset")) + 10);
    }
    else if (searchQuery.get("tableoffset") != null && searchQuery.get("tableoffset") != "" &&
        searchQuery.get("tableoffset") != "0")
    {
        searchQuery.set("tableoffset", new Number(searchQuery.get("tableoffset")) - 10);
    }
    else
    {
        //set date 10 days back
        var currentDate = StringToDate(searchQuery.get("date"));
        var date = new Date(
            (currentDate.getYear() < 2000 ? 1900 + currentDate.getYear() : currentDate.getYear()), 
            currentDate.getMonth(), currentDate.getDate() - 10);
        searchQuery.set("date", DateToString(date));
    }
    
    SearchOffers();
}

// utilities
function FromTimeTics(tics)
{
    return DateToString(new Date(tics));
}

function DateToString(date)
{
    var month = (date.getMonth() + 1);
    var s = (date.getDate() <= 9 ? "0" + date.getDate() : date.getDate()) + ".";
    s += (month <= 9 ? "0" + month : month) + ".";
    s += date.getYear() < 2000 ? 1900 + date.getYear() : date.getYear();
    return s;
}

function StringToDate(stringDate)
{
    return new Date(new Number(stringDate.substr(6, 4)), new Number(stringDate.substr(3, 2)) - 1,
        new Number(stringDate.substr(0, 2)));
}

function ToCalendarDate(date)
{
    return date.replace(".", "/").replace(".", "/");
}

function FromCalendarDate(dateString)
{
    var date = new Date(Date.parse(dateString));
    var month = (date.getMonth() + 1);
    var s = (date.getDate() <= 9 ? "0" + date.getDate() : date.getDate()) + "/";
    s += (month <= 9 ? "0" + month : month) + "/";
    s += date.getYear() < 2000 ? 1900 + date.getYear() : date.getYear();
    return s;
}

function GetConfiguredChildren()
{
    return new Number(query.get("children")) - GetConfiguredInfants();
}

function GetConfiguredInfants()
{
    //get infants configured in children popup
    var configuredInfants = 0;
    var ages = query.get("childrenages").split(',');
    for (var i = 0; i < ages.length; i++)
    {
        if (ages[i] == "1")
        {
            configuredInfants++;
        }
    }
    return configuredInfants;
}

function ExtractOccupancyRoomsNumber(occupancy)
{
    if (occupancy.indexOf("0 0 0 NA,0 0 0 NA") >= 0)
    {
        return 1;
    }
    else if (occupancy.indexOf("0 0 0 NA") >= 0)
    {
        return 2;
    }
    else
    {
        return 3;
    }
}

function ExtractOccupancyRoomsMapping(occupancy)
{
    return occupancy;
}

function ExtractOccupancyAdults(occupancy)
{
    return new Number(occupancy.substr(0, 1)) + new Number(occupancy.substr(9, 1)) + 
        new Number(occupancy.substr(18, 1));
}

function ExtractOccupancyChildren(occupancy)
{
    return new Number(occupancy.substr(2, 1)) + new Number(occupancy.substr(11, 1)) + 
        new Number(occupancy.substr(20, 1));
}

function ExtractOccupancyChildrenAges(occupancy)
{
    var arrayActualChildrenAges = query.get("childrenages") != "" ? query.get("childrenages").split(',') : null;
    var childrenAges = "";
    var children = ExtractOccupancyChildren(occupancy);
    var firstIteration = true;
    for(var i = 0; i < children; i++)
    {
        if (!firstIteration)
        {
            childrenAges += ",";
        }
        if (arrayActualChildrenAges != null && i < arrayActualChildrenAges.length)
        {
            childrenAges += arrayActualChildrenAges[i];
        }
        else
        {
            childrenAges += "3";
        }
        firstIteration = false;
    }
    return childrenAges;
}

function OccupancyByRoomNumber(roomsMapping, roomNumber)
{
    if (roomNumber == 1)
    {
        return roomsMapping.substr(0, 8);
    }
    else if (roomNumber == 2)
    {
        return roomsMapping.substr(9, 8);
    }
    else if (roomNumber == 3)
    {
        return roomsMapping.substr(18, 8);
    }
}

function AggregateOccupancy(occupancy, roomNumber)
{
    var currentOccupancy = query.get("occupancyid");
    var roomsNumber = query.get("roomsnumber");
    
    if (currentOccupancy == "")
    {
        currentOccupancy = "0 0 0 NA,0 0 0 NA,0 0 0 NA";
    }
    
    if (roomNumber == 1)
    {
        if (roomsNumber == 2 && currentOccupancy.substr(9, 8) == "0 0 0 NA")
        {
            return occupancy + "," + occupancy + "," + currentOccupancy.substr(18, 8);
        }
        else
        {
            return occupancy + "," + currentOccupancy.substr(9, 17);
        }
    }
    else if (roomNumber == 2)
    {
        if (roomsNumber == 2 && currentOccupancy.substr(0, 8) == "0 0 0 NA")
        {
            return occupancy + "," + occupancy + "," + currentOccupancy.substr(18, 8);
        }
        else
        {
            return currentOccupancy.substr(0, 8) + "," + occupancy + "," + currentOccupancy.substr(18, 8);
        }
    }
}

function UpdateKamersPopup()
{
    var currentOccupancy = query.get("occupancyid");
    
    if ((currentOccupancy == null) || (currentOccupancy == ''))
    {
        return;
    }

    var arrOccupancies = currentOccupancy.split(',');
    for (var i = 0; i < arrOccupancies.length; i ++)
    {
        if (arrOccupancies[i] != '0 0 0 NA')
        {
            var sel = document.getElementById("kamer" + (i+1));
            for (var j = 0; j < sel.options.length; j ++)
            {
                if (sel.options[j].value == arrOccupancies[i])
                {
                    sel.selectedIndex = j;
                    break;
                }
            }
        }
    }
    
    var roomsnumber = query.get("roomsnumber");
    $("#rKamers" + roomsnumber).click();
}

function UpdateKamersListGui()
{
    var kamersCount = 0;
    $("input[@name='rKamers']").each(function(){
        if ($(this).attr("checked"))
        {
            kamersCount = $(this).attr("value");
        }
    });   

    for (var i = 0; i < 3; i++)
    {
        $("#kamer" + (i+1)).hide();
    }

    for (var i = 0; i < kamersCount; i++)
    {
        $("#kamer" + (i+1)).show();
    }
}
