﻿$(function () {

    //    $('form').submit(function(ev){ // do quicksearch on enter
    //        ev.preventDefault();
    //        doSearch(false);
    //    });

    $("#tbx_freesearch").catcomplete({
        delay: 0,
        minLength: 2,
        source: function (request, response) {
            var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
            response($.grep(ac_fs_data, function (value) {
                value = value.label || value.value || value;
                return matcher.test(value) || matcher.test(normalize(value));
            }));
        }
    });

    $("#tbx_freesearch").defaulttext("Katalognr. / Ort");

    $("#tbx_freesearch").live("keypress", function (ev) {
        if (ev.which == 13) {
            ev.preventDefault();
            doSearch(false);
        }
    });

    var tffRegion = function (options) {
        var selectedOptions = options.filter(":selected");
        var countOfSelected = selectedOptions.size();
        if (countOfSelected == 0) return "ganz Dänemark";
        if (countOfSelected > 2) return countOfSelected + " Regionen";
        return selectedOptions.map(function () { return this.text }).get().join(", ");
    }

    $('#sbox_dkmap').maphilight({ fade: false, fill: true, fillColor: 'cc0000', strokeColor: 'black', fillOpacity: '1' });

    $("#ddlRegion").dropdownchecklist({ width: 125, icon: {}, maxDropHeight: 200, textFormatFunction: tffRegion, onItemClick: ddlRegionItemClicked, onComplete: updateAreas });
    initAreaDDL();
    $("#ddlDuration").dropdownchecklist({ width: 125, icon: {}, closeRadioOnClick: true });

    $("#ddlAdults").dropdownchecklist({ width: 125, maxDropHeight: 200, icon: {}, closeRadioOnClick: true });
    $("#ddlChildren").dropdownchecklist({ width: 125, maxDropHeight: 200, icon: {}, closeRadioOnClick: true });
    $("#ddlPets").dropdownchecklist({ width: 125, icon: {}, closeRadioOnClick: true });

    //    $("#tbx_fromdate").dateinput({
    //        lang: 'de',
    //        format: 'ddd, dd.mm.yyyy',
    //        firstDay: 1,
    //        offset: [0, 0],
    //        min: 1,
    //        yearRange: [0, 2],
    //        value: <asp:PlaceHolder id="ph_init_fromdate" runat="server"></asp:PlaceHolder>
    //    });

    prepareRegionsDistrictsMouseovers("wj");
    prepareRegionsDistrictsMouseovers("nj");
    prepareRegionsDistrictsMouseovers("oj");
    prepareRegionsDistrictsMouseovers("os");
    prepareRegionsDistrictsMouseovers("sl");
    prepareRegionsDistrictsMouseovers("bh");

    $("#ddcl-ddlRegion-ddw .ui-dropdownchecklist-item").mouseover(function (e) {
        var hoveredID = $(this).find("input").val();
        $(".regionmarker_reg_" + hoveredID).addClass("regionmarker_hovered");
        $(".regionmarker_reg_" + hoveredID).mouseover();
    }).mouseout(function (e) {
        var hoveredID = $(this).find("input").val();
        $(".regionmarker_reg_" + hoveredID).mouseout();
        $(".regionmarker_reg_" + hoveredID).removeClass("regionmarker_hovered");
    });

    //$("#ddcl-ddlRegionSelect-ddw input").click(function () {
    //alert($(".regionmarker_reg_" + clickedID) + " clicked");
    //var clickedID = $(this).find("input").val();
    //$(".regionmarker_reg_" + clickedID).trigger("click");
    //});

    function ddlRegionItemClicked(item) {
        var clickedID = item.val();
        $(".regionmarker_reg_" + clickedID).toggleClass("regionmarker_selected", item.attr("checked"));
        updateAreas();
    }

    $(".regionmarker").click(function () {
        var selRegion = $(this).data("region") + ""; // we don't want numbers here, strings are used for val() and inArray()!
        var selArr = $("#ddlRegion").val();
        if (selArr == null || selArr === undefined) selArr = new Array();
        var regPos = $.inArray(selRegion, selArr);
        if (regPos > -1) {
            selArr.splice(regPos, 1);
            $(this).toggleClass("regionmarker_selected", false);
        } else {
            selArr.push(selRegion);
            $(this).toggleClass("regionmarker_selected", true);
        }

        $("#ddlRegion").val(selArr);
        $("#ddlRegion").dropdownchecklist("refresh");

        updateAreas();

        doSearch(true, true);
    });



    $(".sboxselect").dropdownchecklist({ width: 155, icon: {}, closeRadioOnClick: true });

    $(".sboxrange").rangeinput({
        css: { input: 'sboxrange', slider: 'sboxslider', handle: 'sboxhandle' }
    });

    //    <asp:PlaceHolder id="ph_lastsearchinit" runat="server"></asp:PlaceHolder>


    $(".btn_startsearch").click(function () {
        doSearch(false);
    });


    $("#ddlRegion").change(function () { doSearch(true, true); });
    $("#tbx_fromdate").change(function () { doSearch(true); });
    $("#ddlDuration").change(function () { doSearch(true); });
    $("#ddlAdults").change(function () { doSearch(true); });
    $("#ddlChildren").change(function () { doSearch(true); });
    $("#ddlPets").change(function () { doSearch(true); });
    $("#extsearch input:not(#cb_aslist)").change(function () { doSearch(true); });
    $("#extsearch select").change(function () { doSearch(true); });

    if ($("#ddlArea").length > 0) $("#ddlArea").live("change", function () { doSearch(true); });

    $("#link_extsearch").click(function (ev) { ev.preventDefault(); doSearch(false); });

    doSearch(true);
});

function tffArea(options) {
    var selectedOptions = options.filter(":selected");
    var countOfSelected = selectedOptions.size();
    if (countOfSelected == 0) return "alle Orte";
    if (countOfSelected > 2) return countOfSelected + " Orte";
    return selectedOptions.map(function () { return this.text }).get().join(", ");
}

function prepareRegionsDistrictsMouseovers(district) {
    $('.regionmarker_dis_' + district).mouseover(function (e) {
        $('#dkmap_' + district).mouseover();
    }).mouseout(function (e) {
        $('#dkmap_' + district).mouseout();
    }).click(function (e) { e.preventDefault(); });
}

// autocomplete start
var accentMap = {
    "å": "a",
    "Å": "A",
    "ö": "o",
    "Ö": "O",
    "ä": "a",
    "Ä": "A",
    "ø": "o",
    "Ø": "O"
};
var normalize = function (term) {
    var ret = "";
    for (var i = 0; i < term.length; i++) {
        ret += accentMap[term.charAt(i)] || term.charAt(i);
    }
    return ret;
};

$.widget("custom.catcomplete", $.ui.autocomplete, {
    _renderMenu: function (ul, items) {
        var self = this, currentCategory = "";
        $.each(items, function (index, item) {
            if (item.cat != currentCategory) {
                ul.append("<li class='ui-autocomplete-category'>" + item.cat + "</li>");
                currentCategory = item.cat;
            }
            self._renderItem(ul, item);
        });
    }
});
// autocomplete end

function initRegions(regs) {
    $("#ddlRegion").val(regs);
    $("#ddlRegion").dropdownchecklist("refresh");
    $.each(regs, function (index, reg) {
        $(".regionmarker_reg_" + reg).toggleClass("regionmarker_selected", true);
    });
}

function initAreas(areas) {
    if ($("#ddlArea").length == 0) return; // only in ext search
    $("#ddlArea").val(areas);
    $("#ddlArea").dropdownchecklist("refresh");
}

function initAreaDDL() {
    if ($("#ddlArea").length == 0) return; // only in ext search
    $("#ddlArea").dropdownchecklist({ width: 125, icon: {}, maxDropHeight: 200, textFormatFunction: tffArea, emptyText: "alle Orte", firstItemChecksAll: true });
}

function updateAreas() {
    if ($("#ddlArea").length == 0) return; // only in ext search
    var as_data = {};
    as_data.selectedRegions = $("#ddlRegion").val() + "";

    $.ajax({
        type: "POST",
        url: "/services/ControlService.asmx/AreaSelect",
        data: JSON.stringify(as_data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            $("#ddlArea").dropdownchecklist("destroy");
            $("#ddlArea").html(response.d);
            initAreaDDL();
        },
        failure: function (msg) {
            alert("Fehler: " + msg);
        }
    });
}

function doSearch(countonly, ignoreareas) {
    if (ignoreareas == null || ignoreareas === undefined) ignoreareas = false;

    var p_regs = $("#ddlRegion").val();
    var p_areas = $("#ddlArea").length > 0 ? $("#ddlArea").val() : "";
    //alert("ignoreareas: " + ignoreareas + " / " + p_areas);
    if (ignoreareas) p_areas = "";
    var p_from = $("#tbx_fromdate").data("dateinput").getValue("dd.mm.yyyy");
    var p_dur = $("#ddlDuration").val();
    var p_adult = $("#ddlAdults").val();
    var p_child = $("#ddlChildren").val();
    var p_pets = $("#ddlPets").val();
    var p_rooms = $("#ddlRooms").val();
    var p_price = $("#rng_maxprice").val();
    var p_facs = "";
    var p_showall = $("#cb_showall").is(":checked");
    var p_rfirst = 0;
    var p_rcount = -1;
    var p_freetext = $("#tbx_freesearch").val();
    if (p_freetext == $("#tbx_freesearch").defaulttext()) p_freetext = "";

    if (p_price == $("#rng_maxprice").attr("max")) p_price = -1;

    $.each($("#extsearch input[type=checkbox]:checked"), function (index, elem) {
        if (!($(elem).attr("id").substr(0, 3) === "sk_")) return true; //continue
        var id = elem.id.replace("sk_", "");
        if (p_facs == "")
            p_facs += id;
        else p_facs += "," + id;
    });
    $.each($("#extsearch .sboxrange"), function (index, elem) {
        if (!(elem.id.substr(0, 3) === "sk_")) return true; //continue
        var id = elem.id.replace("sk_", "");
        var val = $(elem).data('rangeinput').getValue();
        if (val == $(elem).data('rangeinput').getConf().max) return true; //continue
        if (p_facs == "")
            p_facs += id + "_" + val;
        else p_facs += "," + id + "_" + val;
    });
    $.each($("#extsearch select"), function (index, elem) {
        if (!(elem.id.substr(0, 3) === "sk_")) return true; //continue
        var id = elem.id.replace("sk_", "");
        var val = $(elem).val();
        if (val < 1) return true; //continue
        if (p_facs == "")
            p_facs += id + "_" + val;
        else p_facs += "," + id + "_" + val;
    });

    var search_data = {};

    search_data.regions = p_regs + "";
    search_data.areas = p_areas + "";
    search_data.fromdate = p_from + "";
    search_data.duration = p_dur + "";
    search_data.adults = p_adult + "";
    search_data.children = p_child + "";
    search_data.pets = p_pets + "";
    search_data.rooms = p_rooms + "";
    search_data.price = p_price + "";
    search_data.facs = p_facs + "";
    search_data.showall = p_showall + "";
    search_data.rfirst = 0 + "";
    search_data.rcount = 1 + "";
    search_data.countonly = countonly + "";
    search_data.freetext = p_freetext;

    if (countonly) {
        $.ajax({
            type: "POST",
            url: "/services/DataService.asmx/SearchURL",
            data: JSON.stringify(search_data),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                $("#lbl_matches").text(response.d + " Treffer");
                $("#lbl_matches").stop().removeClass("transpbg").animate({ backgroundColor: '#cc0000' }, 50, "linear", function () { $(this).animate({ backgroundColor: '#cecece' }, 400, "swing", function () { $(this).addClass("transpbg"); }) });
            },
            failure: function (msg) {
                alert("Fehler: " + msg);
            }
        });
    } else {
    $.ajax({
        type: "POST",
        url: "/services/DataService.asmx/SearchURL",
        data: JSON.stringify(search_data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            if ($("#cb_aslist").is(":checked")) {
                window.open(response.d.replace("extendedsearch", "druckliste"), "_blank");
                $("#cb_aslist").removeAttr('checked');
            }
            window.location.href = response.d;
        },
        failure: function (msg) {
            alert("Fehler: " + msg);
        }
    });
    }
}
