﻿$(function() {
    var xhr = null;
    var searchdivgap = $("#searchcontainer").height() - $("#SearchColumn").height();
    $("#searchresultscontainer").css("padding-bottom", searchdivgap + "px");
    $("#expandfilter").click(function() {
        // Expand the Filters 
        $(".hiddenlist").slideToggle("fast");
        ToggleText();
    });

    // select the filters according to the querystring values!
    AppendQueryStringValues();

    // Autosuggest
    $(".SearchInputBox").keyup(function(e) {
        //if (e.keyCode == 97)

        var SuggestList = $("ul#TagSuggestions");

        // Allow selecting Results with up/down keys
        if (e.keyCode == 38 || e.keyCode == 40) {
            var CurrentSelection = $("li.active", SuggestList).index();
            if ($("li", SuggestList).size() == 0)
                CurrentSelection = -1;

            switch (e.keyCode) {
                case 38:
                    if (CurrentSelection > 0)
                        CurrentSelection--;
                    break;
                case 40:
                    if (CurrentSelection != $("li", SuggestList).size() - 1) {
                        CurrentSelection++;
                    }
                    break;
            }
            $("li", SuggestList).removeClass("active");
            $("li", SuggestList).eq(CurrentSelection).addClass("active");
        }
        // var SuggestList = $("#TagSuggestions");
        if (!$.browser.msie && (this.selectionStart != $(this).val().length))
            return false;

        if ((e.keyCode > 47 && e.keyCode < 90) || e.keyCode == 8) {
            if (xhr != null)
                xhr.abort();
            var TagInput = $(this);
            var Tags = TagInput.val().split(' ');
            var CurrentTag = Tags[Tags.length - 1];
            if (CurrentTag != null && CurrentTag != "") {
                Tags.pop();
                var DTO = {
                    TagStart: CurrentTag,
                    Language: SwissChecklist.Culture,
                    ParentTags: Tags,
                    Namespace: GetSelectedNamespace()
                };
                /*
                xhr = $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "/SwissChecklist/SwissChecklistServices.asmx/GetTagSuggestions",
                data: JSON.stringify(DTO),
                dataType: "json",
                success: function(msg) {
                SuggestList.empty();
                if (msg != null && msg.d != null) {
                var Results = msg.d.Values;
                if (Results.length > 0) {
                for (var i = 0; i < Results.length; i++) {
                var ListItem = $("<li>", {
                text: Results[i].Value,
                title: Results[i].Value,
                click: function() {
                var JoinedTags = Tags.join(" ");
                var NewTextBoxValue = (JoinedTags != "" ? JoinedTags + " " : "") + $(this).attr("title");
                var url = GetSearchUrl(NewTextBoxValue);
                window.location = url;
                }
                });
                SuggestList.append(ListItem).show();
                }
                }
                else {
                SuggestList.hide();
                }
                }
                $(".searchinputwrapper").append(SuggestList);
                },
                error: function() {
                $("#TagSuggestions").empty();
                // If it fails, unbind keyup event to prevent creating errors on the page and do unneeded requests
                TagInput.unbind("keyup");
                }
                });
                */
            }
            else if (e.keyCode == 27) {
                SuggestList.empty();
            }
        }
    }).focus(function() {
        if ($("#TagSuggestions li").size() > 0)
            $("#TagSuggestions").show();
    }).keypress(function(e) {
        if (e.keyCode == 13) {
            // When user hits enter key
            var value = RemoveDisabledChars(this.value);
            if ($("#TagSuggestions .active").size() > 0) {
                var splitted = value.split(' ');
                if (splitted.length == 1)
                    value = $.trim($("#TagSuggestions .active").text());
                else {
                    splitted.pop();
                    value = splitted.join(' ') + " ";
                    value = value + $.trim($("#TagSuggestions .active").text());
                }
            }
            window.location = GetSearchUrl(value);
            return false;
        } else if (IsValueInArray(e.keyCode, DisabledSearchCharCodes)) {
            // If user hits a disabled char
            $("#SearchDisabledChars").show();
            return false;
        }
    });

    $(document).bind("click", function(e) {
        var relatedobj = e.srcElement || e.target;
        if ($(relatedobj).closest("#searchinputcontainer").find("#TagSuggestions").size() === 0)
            $("#TagSuggestions").hide();
    });

    $(".logreq").click(function() {
        // TODO: Do something nice for unregistered/guest users
        $("<div>", {
            text: GetLocalizedText("NotLoggedInText")
        }).dialog({
            title: GetLocalizedText("NotLoggedIn"),
            resizable: false,
            draggable: false,
            modal: true
        });
        return false;
    });

    $(".SearchInputButton").click(function() {
        var Value = RemoveDisabledChars($(".SearchInputBox").val());
        window.location = GetSearchUrl(Value);
    });

});
// Disable following characters: /%&?:
var DisabledSearchCharCodes = new Array(47, 37, 38, 63, 58);

function RemoveDisabledChars(InputValue) {
    return InputValue.replace(/([/%&?:])/g, " ");
}   

function IsValueInArray(Value, Array) {
    for (var i = 0; i < Array.length; i++) {
        if (Array[i] == Value)
            return true;
    }
    return false;
}

function GetSelectedNamespace() {
    var ns = $("a.FilterItemSelected", ".ns").attr("lib");
    if (typeof (ns) == "undefined")
        return "";
    return ns;
}

function getQuerystring(key, default_) {
    if (default_ == null) default_ = "";
    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
    var qs = regex.exec(window.location.href);
    if (qs == null)
        return default_;
    else
        return qs[1];
}
function getQuerystringFromUrl(key, url, default_) {
    if (default_ == null) default_ = "";
    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
    var qs = regex.exec(url);
    if (qs == null)
        return default_;
    else
        return qs[1];
}
function ToggleOptions() {
    $(".hiddenlist").toggle();
    ToggleText();
}
function ToggleText() {
    var a = $("#expandfilter");
    setTimeout(function() {
        if (a.hasClass("ArrowDown")) {
            a.removeClass("ArrowDown").addClass("ArrowUp");
        }
        else {
            a.removeClass("ArrowUp").addClass("ArrowDown");
        }
        $("span", a).toggle();
    }, 100);
}

function GetSearchUrl(Keyword) {
    var ns = $(".FilterItemSelected", ".ns").attr("lib");
    if (typeof (ns) == "undefined")
        ns = "all";

    var Language = SwissChecklist.UICulture;
    if (window.location.href.indexOf("/**/") != -1)
        Language = "**";

    var url = "http://" + window.location.host + "/" + Language + "/Search/";
    if (ns != "" && ns != "all")
        url = url + ns + ":" + Keyword;
    else
        url = url + Keyword;
    var st = $.trim($("#SearchSubject").text()).replace("scl:", "");
    if (st != "")
        url = url + " scl:" + st;
    return url;
}

function AppendQueryStringValues() {
    var url = $("#Form").attr("action");
    $("#lang_" + SwissChecklist.UICulture).addClass("FilterItemSelected");
    var ns = getQuerystringFromUrl("ns", url, "").toLocaleLowerCase();
    var toggled = false;
    if (ns == "" || ns == "all")
        ns = "all";
    else {
        ToggleOptions();
        toggled = true;
    }
    $("a[lib='" + ns + "']", ".ns").addClass("FilterItemSelected");
    var st = $.trim($("#SearchSubject").text()).replace("scl:", "");
    if (st == "" || st == "all")
        st = "all";
    else if (!toggled)
        ToggleOptions();
    $("a[tag='" + st + "']", ".st").addClass("FilterItemSelected");
}