﻿/* step 1 */
function hideAllRoomTypes() {
    for (var count = 1; count < 4; count++) {
        //$("#roomtype" + count).hide();
        $("#roomtypeContainer" + count).hide();
    }
}

function showRoomTypes(roomNumber) {
    hideAllRoomTypes();
    for (var count = 1; count < roomNumber; count++) {
        $("#roomtypeContainer" + count).show();
    }
}

/*function searchHotels() {    
if (!validateHotelSearch()) return false;
//ToDo:ShowWaitingPage
var a = $("#searchhotel input, #searchhotel select").serializeArray();
var s = [];
$.each(a, function() {
s.push(encodeURIComponent(this.name) + "=" + encodeURIComponent(this.value));
});
showWaitingPage(SEARCHING);
$.ajax({
url: "/Hotel/SearchHotels?ajax=1&" + s.join("&").replace(/%20/g, "+"),
method: "POST",
cache: false,
success: function() {
window.location = "/Hotel/Search";
},
error: function() {
alert(PROCESSING_ERROR_MESS);
hideWaitingPage();
}
});
return false;
}*/

function validateHotelSearch() {

    var message = "";
    if ($("#locationid").val() == '' || $("#locationid").val() == 0) {
        message += DESTINATION_REQUIRED + "\n";
    }
    if ($("#CheckInDate").val() == "") {
        message += CHECKINDATE_REQUIRED_MESS + "\n";
    }
    if ($("#CheckOutDate").val() == "") {
        message += CHECKOUTDATE_REQUIRED_MESS + "\n";
    }
    var today = Date.parseExact((new Date()).format("dd-MM-yyyy"), "dd-MM-yyyy");
    var checkin = Date.parseExact(($("#CheckInDate").val()), "dd-MM-yyyy");
    var checkout = Date.parseExact(($("#CheckOutDate").val()), "dd-MM-yyyy");

    if (!isValidCheckInDate(checkin)) {
        message += CHECKINDATE_INVALID_MESS + "\n";

    }
    if (!isValidCheckOutDate(checkout, checkin)) {
        message += CHECKOUTSMALLCHECKOUT_MESS + "\n";
    }

    //*validate room types
    var roomNumber = $("#roomnumbers").val();
    for (var i = 0; i < roomNumber; i++) {
        var roomType = $('#roomtype' + (i > 0 ? i : '')).val();
        if (roomType == 0) {
            message += ROOM_TYPE_REQUIRED + ' ' + (i + 1) + "\n";
        }
    }
    //*/

    if (message.length > 0) {

        var flgAir = "";
        $("input[name=extramodule]:checked").each(function() {
            flgAir += $(this).val();
        });

        if (flgAir == '3' || flgAir == '32') {
            showWaitingPage(SEARCHING);
            $("#searchhotel").parent()[0].submit();
            return false;
        }
        else
            alert(message);
        return false;
    }

    return true;
}
function validateCheckInDate() {
    var today = Date.parseExact((new Date()).format("dd-MM-yyyy"), "dd-MM-yyyy");
    var checkin = Date.parseExact(($("#CheckInDate").val()), "dd-MM-yyyy");

    if (!isValidCheckInDate(checkin)) {
        alert(CHECKINDATE_INVALID_MESS);
        $("#CheckInDate").val($.datepicker.formatDate("dd-mm-yy", today));
        return false;
    }

    return true;
}

function validateCheckOutDate() {
    var checkin = Date.parseExact(($("#CheckInDate").val()), "dd-MM-yyyy");
    var checkout = Date.parseExact(($("#CheckOutDate").val()), "dd-MM-yyyy");

    if (!isValidCheckOutDate(checkout, checkin)) {
        alert(CHECKOUTSMALLCHECKOUT_MESS);
        return false;
    }
    return true;
}

function isValidCheckOutDate(checkOutDate, checkInDate) {
    if (checkOutDate <= checkInDate) {
        return false;
    }
    return true;
}

function isValidCheckInDate(checkInDate) {
    /*
    var today = Date.parseExact((new Date()).format("dd-MM-yyyy"), "dd-MM-yyyy");
    var after2Days = today;
    after2Days.setDate(today.getDate() + 2);
    if (checkInDate < after2Days) {
        return false;
    }
    */
    return true;
}

function getDate(day, month, year) {
    day = parseInt(day);
    month = parseInt(month);
    year = parseInt(year);
    var date = new Date(year, month - 1, day);
    return date;
}

function validateDate(day, month, year) {
    day = parseInt(day);
    month = parseInt(month);
    year = parseInt(year);
    var date = getDate(day, month, year);
    var valid = date.getMonth() == month - 1 && date.getDate() == day && year == date.getFullYear();
    return valid;
}

function displayError(control, errorMessage) {
    var message = errorMessage;
    alert(message);
    control.focus();
    if (!$.browser.msie)
        control.select();
    //else
    //    return false;
}

function validateDatesOfBirth(roomNumber) {
    for (var roomIndex = 0; roomIndex < roomNumber; roomIndex++) {
        var birthdaysSelectName = getBirthdaysSelectName(roomIndex);
        var birthmonthsSelectName = getBirthmonthsSelectName(roomIndex);
        var birthyearsSelectName = getBirthyearsSelectName(roomIndex);

        var days = document.getElementsByName(birthdaysSelectName);
        var months = document.getElementsByName(birthmonthsSelectName);
        var years = document.getElementsByName(birthyearsSelectName);

        for (var i = 0; i < days.length && i < months.length && i < years.length; i++) {
            var day = days[i].value;
            var month = months[i].value;
            var year = years[i].value;
            if (!validateDate(day, month, year)) {
                displayError(days[i], INVALID_DATE);
                return false;
            }
            var date = getDate(day, month, year);
            if (date > new Date()) {
                displayError(days[i], INVALID_BIRTHDAY);
                return false;
            }
        }
    }
    return true;
}

function getSelectName(name, index) {
    return index > 0 ? name + index : name;
}

function getBirthdaysSelectName(index) {
    return getSelectName('birthdays', index);
}

function getBirthmonthsSelectName(index) {
    return getSelectName('birthmonths', index);
}

function getBirthyearsSelectName(index) {
    return getSelectName('birthyears', index);
}

function AppendColumn(tr, roomIndex, childrenIndex) {
    var geboortedatum = 'Geboortedatum kind';
    tr.append('<td>' + geboortedatum + ' ' + (childrenIndex + 1) + ':</td>');

    var dayOptions = '<option value=0>Dag</option>';
    for (var i = 1; i <= 31; i++) {
        dayOptions += '<option value=' + i + ">" + i + "</option>";
    }

    var monthOptions = '<option value=0>Maand</option>';
    for (var i = 1; i <= 12; i++) {
        monthOptions += '<option value=' + i + ">" + i + "</option>";
    }

    var yearOptions = '<option value=0>Jaar</option>';
    var currentYear = new Date().getFullYear();
    var minYear = currentYear - 18;
    for (var i = minYear; i <= currentYear; i++) {
        yearOptions += '<option value=' + i + ">" + i + "</option>";
    }

    var birthdaysSelectName = getBirthdaysSelectName(roomIndex);
    var birthmonthsSelectName = getBirthmonthsSelectName(roomIndex);
    var birthyearsSelectName = getBirthyearsSelectName(roomIndex);

    tr.append('<td><select class="pointer day" name="' + birthdaysSelectName + '">' + dayOptions + '</select></td>');
    tr.append('<td><select class="pointer month" name="' + birthmonthsSelectName + '">' + monthOptions + '</select></td>');
    tr.append('<td><select class="pointer year" name="' + birthyearsSelectName + '">' + yearOptions + '</select></td>');
}

function AppendRow(table, roomIndex, numberOfChildren) {
    if (numberOfChildren <= 0) {
        return;
    }

    var tr = $('<tr></tr>');
    var kamer = 'Kamer';
    var childrenIndex = 0;
    tr.append('<th rowspan="' + numberOfChildren + '">' + kamer + ' ' + (roomIndex + 1) + ':</th>');
    AppendColumn(tr, roomIndex, childrenIndex);
    table.append(tr);

    for (childrenIndex = 1; childrenIndex < numberOfChildren; childrenIndex++) {
        var additionalTr = $('<tr></tr>');
        AppendColumn(additionalTr, roomIndex, childrenIndex);
        table.append(additionalTr);
    }
}

function AppendDateOfBirthTable(container, roomNumber, childrennumbersId) {
    container.append("<div><strong>Geboortedatum van de kinderen</strong></div>");
    var table = $('<table class="room-selection"></table>');

    for (var roomIndex = 0; roomIndex < roomNumber; roomIndex++) {
        numberOfChildren = $('#' + childrennumbersId + (roomIndex > 0 ? roomIndex : '')).val();
        AppendRow(table, roomIndex, numberOfChildren);
    }

    table.find('select').change(function(event) {
        if (!this.firstSelected) {
            $(this).children('option[value=0]').remove();
            this.firstSelected = true;
        }
    });

    container.append(table);
}

function hideRoomInfo() {
    $("#RoomInfo").toggle();
    return false;
}

//

function searchDoSearch() {
    showWaitingPage(SEARCHING);
    $('#selectedfacilities').attr('value', $('#facilityvalue').val());
    document.shortHotelForm.submit();
}

function updateRoomPrice(numberDropdown) {
    var unitPrice = parseFloat($(numberDropdown).parent().parent().find("input[name=unitprice]").val().replace(".", "").replace(",", "."));
    var roomNumber = parseFloat($(numberDropdown).val());
    var price = unitPrice * roomNumber;
    //
    var currentRoomTypeList = $(numberDropdown).parent().parent();
    var isFamilyRoom = currentRoomTypeList.find("input[name=isfamilyroom]").val() == "True";
    if (isFamilyRoom) {
        if (roomNumber != 0) {
            price = parseFloat(currentRoomTypeList.find("input[name=totalfamilyroomprice]").val().replace(".", "").replace(",", "."));
        }
        else {
            price = 0;
        }

    }
    price = price.toString().replace(".", ",");


    $(numberDropdown).parent().parent().find("p.totale input[name=rowtotalprice]").val(price);
    $(numberDropdown).parent().parent().find("p.totale .price").html(price);
    $(numberDropdown).parent().parent().find("p.totale .price").format({ format: "#,###.00", locale: "nl" });
}
function updateTotalPrice(numberDropdown) {
    var totalPrice = 0;
    var currentRoomTypeList = $(numberDropdown).parent().parent().parent();

    currentRoomTypeList.find("div.detail p.totale input[name=rowtotalprice]").each(function() {
        totalPrice += parseFloat($(this).val().replace(",", "."));
    });
    var extraBedPrice = parseFloat(currentRoomTypeList.find("div.total input.extraprice").val());
    if (extraBedPrice > 0) {
        totalPrice += extraBedPrice;

    }
    totalPrice = totalPrice.toString().replace(".", ",");
    currentRoomTypeList.find("div.total .totalprice").html(totalPrice);
    currentRoomTypeList.find("div.total .totalprice").format({ format: "#,###.00", locale: "nl" });
}
/*Validate RoomType and calculate the extra beds */
function validateRoomType(hotelpanel, select) {
    var result = false;
    //ToDO:Dutch language
    showWaitingPage(BOOKING);
    //manupulating the case of Family Room Type
    var currentRoomTypeId = $(select).parent().parent().find("input[name=typeid]").val();
    var isFamilyRoom = $(select).parent().parent().find("input[name=isfamilyroom]").val() == 'True';
    var totalPrice = $(select).parent().parent().find("input[name=totalfamilyroomprice]").val();
    var roomType = $(select).parent().parent().find("input[name=myroomtype]").val();
    if (isFamilyRoom) {
        //Set other room that has same roomtype to zero
        hotelpanel.find("div.detail").each(function() {
            //debugger;
            var roomTypeID = $(this).find("input[name=typeid]").val();
            if ($(this).find("input[name=myroomtype]").val() == roomType) {
                if (roomTypeID != currentRoomTypeId) {
                    $(this).find("select[name=selectroomnumber]").val(0);
                    //clear the price
                    $(this).find("input[name=rowtotalprice]").val(0);
                    $(this).find("p.totale .price").html(0);
                    $(this).find("p.totale .price").format({ format: "#,###.00", locale: "nl" });
                }
            }

        });
    }
    //
    var data = [];
    hotelpanel.find("div.detail").each(function() {
        var name = "type_" + $(this).find("input[name=typeid]").val();
        var value = $(this).find("select[name=selectroomnumber]").val();
        data.push(name + "=" + value);
    });
    data.push("hotelID=" + hotelpanel.find("input.hotelid").val());
    //
    $.ajax({
        url: "/Hotel/ValidateRoomType",
        method: "POST",
        cache: false,
        async: false,
        data: data.join("&"),
        success: function(data) {
            result = data.IsSuccess;
            $(hotelpanel.find("span.status")).html(data.StatusText);
            updateRoomPrice($(select));
            updateTotalPrice($(select));
        }, error: function() {
            alert(PROCESSING_ERROR_MESS);
        },
        complete: function() {
            //alert(result);
            //alert(BOOKING);
            if (result) {
                $(hotelpanel.find("div.total a.bookhotel")).removeClass("disabled");
            }
            else {
                $(hotelpanel.find("div.total a.bookhotel")).addClass("disabled");
            }
            hideWaitingPage();
            return result;
        }
    });
}
/* End Validate RoomType*/

function bookHotel(hotelpanel) {
    if (!validateBeforeBooking(hotelpanel)) {
        alert(VALIDATE_BOOKING_MESS);
        return false;
    }
    var data = [];
    hotelpanel.find("div.detail").each(function() {
        var name = "type_" + $(this).find("input[name=typeid]").val();
        var value = $(this).find("select[name=selectroomnumber]").val();
        $(this).find("input[name=myselectedroomnumber]").val(value);
        data.push(name + "=" + value);
    });
    data.push("hotelID=" + hotelpanel.find("input.hotelid").val());
    showWaitingPage(BOOKING);
    var isValid;
    //ToDo:DuplicateCode to validate roomType
    $.ajax({
        url: "/Hotel/ValidateRoomType",
        method: "POST",
        cache: false,
        data: data.join("&"),
        success: function(result) {
            isValid = result.IsSuccess;
            $(hotelpanel.find("span.status")).html(result.StatusText);
            if (isValid) {
                //submit form
                hotelpanel.parent().submit();
            }
            else {
                hideWaitingPage();
            }
        }, error: function() {
            hideWaitingPage();
            window.location = "/";
            alert(PROCESSING_ERROR_MESS);
        },
        complete: function() {
            if (isValid) {
                $(hotelpanel.find("div.total a.bookhotel")).removeClass("disabled");
            }
            else {
                $(hotelpanel.find("div.total a.bookhotel")).addClass("disabled");
            }
        }
    });
    return false;
}
function validateBeforeBooking(hotelpanel) {
    var total = 0;
    hotelpanel.find("div.detail p.kamers select").each(function() {
        total += parseInt($(this).val());
    });
    return (total > 0);
}
////Set Check Out Date
function setCheckOutDate() {
    var checkInDate = Date.parseExact(($("#CheckInDate").val()), "dd-MM-yyyy");
    checkInDate.setDate(checkInDate.getDate() + 1)
    $("#CheckOutDate").val($.datepicker.formatDate("dd-mm-yy", checkInDate));
}
//Polulate SubMenus
function populateSubMenus(parentItem, childItems) {
    $.each(childItems, function() {
        var child = $("<li><a href='#' value='" + this.ID + "'>" + this.Name + "</a><ul/></li>").appendTo(parentItem);
        if (this.Items.length == 0) {
            child.find("a").addClass("leaf");
        } else {
            populateSubMenus(child.find("ul"), this.Items);
        }
    });
}
//GetLocationName
function getLocationName(item) {
    var result = $(item).text();
    var parent;
    while (true) {
        parent = $(item).parent().parent();
        if (parent.hasClass("top")) break;
        result += ", " + parent.prev().text().replace(">", "");
        item = parent.prev();
    }
    return result;
}


/*end script for roomtype list process*/

function searchToggleFicilityType() {
    if ($("#facilityvalue").val() == "Voorzieningen") {
        $("#facilityvalue").val("");
    }
    if ($("#facilitypanel").hasClass("unfocus")) {
        $("#facilitypanel").removeClass("unfocus").addClass("focus");
    }
    else {
        hideSearchFacilityType();
    }
}

function hideSearchFacilityType() {
    $("#facilitypanel").removeClass("focus").addClass("unfocus");
    var s = [];
    $.each($("#facilitypanel input[name=facilities]"), function() {
        if ($(this).attr("checked")) {
            s.push($(this).attr("title"));
        }
    });
    var selectedFacilities = s.join(',');
    if (selectedFacilities.length > 0) {
        $('#facilityvalue').val(selectedFacilities);
        $('#selectedfacilities').attr('value', selectedFacilities);
        return;
    }
    $('#facilityvalue').val("Voorzieningen");
}

function determineStylesForMultiLevelDropDownList() {
    var ie8 = false;
    if ($.browser.msie) {
        // IE stuff
        if (jQuery.browser.version.substring(0, 2) == "8.") {
            // IE8 stuff
            ie8 = true;
        } else {
            // IE < 8 stuff
            $('.dropdownlocation dt a span').css({ cursor: 'default' });
            $('.dropdownlocation dd ul li a').css({ cursor: 'default' });
        }
    }
}

function getExcludedRoomTypes(numberOfAdults, numberOfChildren) {

    numberOfAdults = parseInt(numberOfAdults);
    numberOfChildren = parseInt(numberOfChildren);

    var SINGLE = 1;
    var TWIN = 2;
    var DOUBLE = 3;
    var TRIPLE = 4;
    var QUAD = 5;
    var FAMILY_ROOM_1 = 7;
    var FAMILY_ROOM_2 = 8;

    var result = [SINGLE, TWIN, DOUBLE, TRIPLE, QUAD, FAMILY_ROOM_1, FAMILY_ROOM_2];

    var suitableRoomTypes = new Array();

    switch (numberOfAdults) {
        case 1:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [SINGLE];
                    break;
                case 1:
                case 2:
                    break;
            }
            break;
        case 2:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [TWIN, DOUBLE];
                    break;
                case 1:
                    suitableRoomTypes = [FAMILY_ROOM_1];
                    break;
                case 2:
                    suitableRoomTypes = [FAMILY_ROOM_2];
                    break;
            }
            break;
        case 3:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [TRIPLE];
                    break;
                case 1:
                case 2:
                    break;
            }
            break;
        case 4:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [QUAD];
                    break;
                case 1:
                case 2:
                    break;
            }
            break;
    }

    $.each(suitableRoomTypes, function(i, roomType) {
        var index = $.inArray(roomType, result);
        result.splice(index, 1);
    });

    return result;
}

function getSuitableRoomTypes(numberOfAdults, numberOfChildren) {

    numberOfAdults = parseInt(numberOfAdults);
    numberOfChildren = parseInt(numberOfChildren);

    var SINGLE = 1;
    var TWIN = 2;
    var DOUBLE = 3;
    var TRIPLE = 4;
    var QUAD = 5;
    var FAMILY_ROOM_1 = 7;
    var FAMILY_ROOM_2 = 8;

    var suitableRoomTypes = new Array();

    switch (numberOfAdults) {
        case 1:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [SINGLE];
                    break;
                case 1:
                case 2:
                    break;
            }
            break;
        case 2:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [TWIN, DOUBLE];
                    break;
                case 1:
                    suitableRoomTypes = [FAMILY_ROOM_1];
                    break;
                case 2:
                    suitableRoomTypes = [FAMILY_ROOM_2];
                    break;
            }
            break;
        case 3:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [TRIPLE];
                    break;
                case 1:
                case 2:
                    break;
            }
            break;
        case 4:
            switch (numberOfChildren) {
                case 0:
                    suitableRoomTypes = [QUAD];
                    break;
                case 1:
                case 2:
                    break;
            }
            break;
    }

    return suitableRoomTypes;
}

function excludeRoomTypes(ddlNumberOfAdults, ddlNumberOfChildren, ddlRoomType) {
    var numberOfAdults = ddlNumberOfAdults.val();
    var numberOfChildren = ddlNumberOfChildren.val();
    var excludedRoomTypes = getExcludedRoomTypes(numberOfAdults, numberOfChildren);
    ddlRoomType.children('option').show();
    $.each(excludedRoomTypes, function(index, value) {
        ddlRoomType.children('option[value=' + value + ']').hide();
    });
}

function showSuitableRoomTypes(ddlNumberOfAdults, ddlNumberOfChildren, ddlRoomType) {

    var numberOfAdults = ddlNumberOfAdults.val();
    var numberOfChildren = ddlNumberOfChildren.val();
    var suitableRoomTypes = getSuitableRoomTypes(numberOfAdults, numberOfChildren);
    var selectedValue = parseInt(ddlRoomType.val());
    ddlRoomType.empty();
    ddlRoomType[0].selectedValue = 0;
    ddlRoomType.append('<option value=' + 0 + '>' + ddlRoomType[0].allRoomTypes[0] + '</option>');
    $.each(suitableRoomTypes, function(index, value) {
        //Fix: if room type have not been declared, ignore this  
        if (ddlRoomType[0].allRoomTypes[value] == null) {
            return;
        }
        var option = $('<option value=' + value + '>' + ddlRoomType[0].allRoomTypes[value] + '</option>');
        if (selectedValue != 0 && value == selectedValue) {
            option[0].selected = true;
            ddlRoomType[0].selectedValue = selectedValue;
        }
        else if (ddlRoomType[0].selectedValue == 0 && ddlRoomType[0].defaultValue == value) {
            option[0].selected = true;
        }
        ddlRoomType.append(option);
    });
    showDefaultRoomType(ddlRoomType);
}

function showDefaultRoomType(ddlRoomType) {
    if (ddlRoomType.val() == 0) {
        var options = ddlRoomType.children('option');
        if (options.length > 1) {
            options[1].selected = true;
        }
    }
}

function filterRoomTypes(targetDropDownList) {

    var ddlNumberOfAdults = $('#' + targetDropDownList.ddlNumberOfAdultsId);
    var ddlNumberOfChildren = $('#' + targetDropDownList.ddlNumberOfChildrenId);
    var ddlRoomType = $('#' + targetDropDownList.ddlRoomTypeId);

    showSuitableRoomTypes(ddlNumberOfAdults, ddlNumberOfChildren, ddlRoomType);

}

function handleFilteringRoomTypes() {
    var count = 4;
    for (var controlIndex = 0; controlIndex < count; controlIndex++) {
        var adultnumbers = "adultnumbers" + (controlIndex > 0 ? controlIndex : '');
        var childrennumbers = "childrennumbers" + (controlIndex > 0 ? controlIndex : '');
        var roomtype = "roomtype" + (controlIndex > 0 ? controlIndex : '');

        var ddlNumberOfAdults = $('#' + adultnumbers);
        var ddlNumberOfChildren = $('#' + childrennumbers);
        var ddlRoomType = $('#' + roomtype);

        ddlNumberOfAdults[0].ddlNumberOfAdultsId = ddlNumberOfAdults.attr('id');
        ddlNumberOfAdults[0].ddlNumberOfChildrenId = ddlNumberOfChildren.attr('id');
        ddlNumberOfAdults[0].ddlRoomTypeId = ddlRoomType.attr('id');
        ddlNumberOfAdults.change(function(event) {
            filterRoomTypes(this);
        });

        ddlNumberOfChildren[0].ddlNumberOfAdultsId = ddlNumberOfAdults.attr('id');
        ddlNumberOfChildren[0].ddlNumberOfChildrenId = ddlNumberOfChildren.attr('id');
        ddlNumberOfChildren[0].ddlRoomTypeId = ddlRoomType.attr('id');
        ddlNumberOfChildren.change(function(event) {
            filterRoomTypes(this);
        });

        var allRoomTypes = new Array();
        ddlRoomType.children('option').each(function(index) {
            var value = parseInt($(this).attr('value'));
            allRoomTypes[value] = this.text;
        });
        ddlRoomType[0].allRoomTypes = allRoomTypes;
        ddlRoomType[0].defaultValue = 3;

        showSuitableRoomTypes(ddlNumberOfAdults, ddlNumberOfChildren, ddlRoomType);

        if ($.browser.msie) {
            //resolveSelecWidth(ddlRoomType);
        }
    }
}

function resolveSelecWidth(select) {
    select
        .mouseover(function() {
            if (!this.toggle) {
                $(this)
                    .data("origWidth", $(this).css("width"))
                    .css("width", "auto");
                this.toggle = true;
            }
        })
        .mouseout(function() {
            if (!this.focused && this.toggle) {
                $(this).css("width", $(this).data("origWidth"));
                this.toggle = false;
            }
        })
        .change(function() {
            if (this.toggle) {
                $(this).css("width", $(this).data("origWidth"));
                this.toggle = false;
            }
        })
        .focus(function() {
            this.focused = true;
        })
        .blur(function() {
            if (this.toggle) {
                $(this).css("width", $(this).data("origWidth"));
                this.toggle = false;
            }
            this.focused = false;
        })
}

function initHotelResetLink() {
    $("#CheckInDate")[0].defaultValue = $("#CheckInDate").attr('value');
    $("#CheckOutDate")[0].defaultValue = $("#CheckOutDate").attr('value');

    $('#resetLink').click(function(e) {
        reset();
    });
}

function reset() {

    $('input[name="optMixMatch"]:checked').attr('checked', null);
    $('input[name="chkMixMatch"]:checked').attr('checked', null);

    $('input[name="optMixMatch"][value="Hotel"]').attr('checked', true);

    //clear the location
    $("#locationid").val("");
    $("#location").val("");
    $('#locationlist dt a span').text('- Maak uw keuze -');

    // datetime picker
    $("#CheckInDate").attr('value', $("#CheckInDate")[0].defaultValue);
    $("#CheckOutDate").attr('value', $("#CheckOutDate")[0].defaultValue);

    $('input[name=extramodule]').attr('checked', false);
    // room
    $("#roomnumbers").val(1);
    hideAllRoomTypes();
    showRoomTypes(1);
    $('select[id^="adultnumbers"]').val(2);
    $('select[id^="childrennumbers"]').val(0);
    $('select[id^="adultnumbers"]').each(function(index, element) {
        filterRoomTypes(element);
    });
}

function showLocalSearchMap(container, lat, lng, zoom, searchQuery, processResultCallback, processMarkerCallback) {
    var searcher = new GlocalSearch();
    searcher.setCenterPoint(new google.maps.LatLng(lat, lng));
    searcher.setResultSetSize(8);
    searcher.pageCount = 2;
    searcher.setSearchCompleteCallback(this, function(searcher) {
        if (isNaN(lat) && isNaN(lng)) {
            return;
        }
        if (searcher.cursor.currentPageIndex == 0) {
            searcher.overallResults = [];
        }
        searcher.overallResults = searcher.overallResults.concat(searcher.results);
        var pageIndex = searcher.cursor.currentPageIndex;
        if (pageIndex < searcher.pageCount - 1) {
            searcher.gotoPage(pageIndex + 1);
        }
        else {
            var markers = [];
            $(searcher.overallResults).each(function(index, result) {
                markers.push({
                    latitude: result.lat,
                    longitude: result.lng,
                    html: '<a href="' + result.url + '">' + result.title + '</a><br/>' + result.addressLines
                });
                if (processResultCallback) {
                    processResultCallback(index, result);
                }
            });
            showMapByMarkers(container, lat, lng, zoom, markers, processMarkerCallback);
        }
    }, [searcher]);
    searcher.execute(searchQuery);
}

function showMapByMarkers(container, lat, lng, zoom, markers, processMarkerCallback) {
    if (processMarkerCallback) {
        $(markers).each(function(index, marker) {
            processMarkerCallback(marker);
        });
    }
    container.gMap({
        'latitude': lat,
        'longitude': lng,
        'markers': markers,
        'zoom': zoom,
        'controls': ["GSmallZoomControl3D"],
        'maptype': G_NORMAL_MAP,
        "scrollwheel": false
    });
}

