var contentSearcher = {

    queryurl: "/HttpHandlers/SearchRequest.ashx",
    elements: null,
    searcher: null,
    maxItems: 5,
    currentQuery: "",
    query: function(parameters, rfunc, sender) {

        if (parameters != "") {
            this.currentQuery = parameters;
            $.ajax({ async: true, url: this.queryurl + "?query=" + encodeURIComponent(parameters), success: function(d, t, xhr) { rfunc(d, sender) } });
        }
        else {
            this.searcher.fadeOut(200);
        }

    },
    bind: function(selector) {

        var elm = (this.elements = $(selector));

        //elm.keyup(function() { contentSearcher.query($(this).val(), contentSearcher.refresh) });
        elm.each(function(idx, elm) {
            elm.onkeyup = function() {

                clearTimeout(elm.attributes["x-timeout"]);
                var value = $(this).val();
                elm.attributes["x-timeout"] = setTimeout(function() {
                    contentSearcher.query(value, contentSearcher.refresh, elm);
                }, 200);

            };

            elm.onfocus = function() { elm.onkeyup(); };

            elm.onblur = function() {
                setTimeout(function() { contentSearcher.searcher.fadeOut(200); }, 200);
            };
        });

        this.searcher = $("#csearcher");

        //$("form").append(this.searcher);

    },
    refresh: function(xdata, sender) {

        var xml = $(xdata);

        var res = $("<div class=\"results\"></div>");

        var search = xml.find("search");

        var matchcount = 0;
        var maxexceeded = false;

        search.children("matchgroup").each(function(idx, elm) {

            var e = $(elm);

            if (e.attr("count") <= 0)
                return true;

            var classname = "group" + (e.attr("class") != "" ? " " + e.attr("class") : "");

            var group = $("<div class=\"" + classname + "\" x-name=\"" + e.attr("name") + "\"></div>");
            group.append("<div class=\"name\"><span class=\"text\">" + (e.attr("name") == "dokumenter" ? "artikler" : e.attr("name")) + "</span></div>");

            var matches = e.children("match");

            matches.each(function(idx, celm) {

                if (idx >= contentSearcher.maxItems - 1) {
                    maxexceeded = true;
                    return false;
                }


                var nelm = $(celm);

                var m = $("<a class=\"match\" href=\"" + nelm.find("href").text() + "\"></a>");

                group.append(m);

                if (nelm.find("imageurl").text() != "") {


                    m.append("<img src=\"" + nelm.find("imageurl").text() + "\" class=\"thumbnail\" />");


                }

                m.append(nelm.find("title").text());

                matchcount++;


            });

            res.append(group);


        });

        if (matchcount == 0) {
            res.append($("<span class=\"no-results\">Ingen resultater</span>"));
        }
        else if (maxexceeded) {
            res.append($("<a class=\"match allresults\" href=\"Search.aspx?keywords=" + contentSearcher.currentQuery + "\">Se alle treff</a>"));
        }

        var searcher = contentSearcher.searcher;

        searcher.find(".results").remove();
        searcher.append(res);

        var js = $(sender);

        searcher.css("left", js.position().left - searcher.width() + js.width() + 32);
        searcher.css("top", js.position().top + js.height());

        searcher.fadeIn(200);






    }

};
