﻿$(function() {
    $(".referenceSearch").referenceSearch();
});

; (function($) {
    var ver = '1.00';
    $.fn.referenceSearch = function(options) {
        var o = { s: this.selector, c: this.context };
        var opts = $.extend({}, $.fn.referenceSearch.defaults, options || {});

        return this.each(function() {
            initialize(opts, $(this));
        });

        o = null;
        opts = null;
    };
    function initialize(opts, $c) {
        $(opts.sliderMenu, $c).slider({
            value: Number($(opts.valueMenu, $c).val()),
            min: -2,
            max: 2,
            step: 1,
            slide: function(event, ui) {
                $(opts.valueMenu, $c).val(ui.value);
            },
            change: function(event, ui) {
                $.fn.referenceSearch.sliderChange("SiteMenu", String(ui.value), $c, opts);
            }
        });
        $(opts.sliderStyle, $c).slider({
            value: Number($(opts.valueStyle, $c).val()),
            min: -2,
            max: 2,
            step: 1,
            slide: function(event, ui) {
                $(opts.valueStyle, $c).val(ui.value);
            },
            change: function(event, ui) {
                $.fn.referenceSearch.sliderChange("SiteStyle", String(ui.value), $c, opts);
            }
        });

        $(".checkboxType input:checkbox", $c).each(function() {
            var label = $("label[for='" + this.id + "']");
            var className = (this.checked) ? "checked" : "unchecked";
            $(this).css("display", "none").parent().append(
                $("<a>").addClass(className).html(label.html()).attr("href", "#").attr("rel", this.id).bind("click", function() {
                    $(this).toggleClass("checked").toggleClass("unchecked");
                    $("#" + this.rel).trigger("click");
                    $.fn.referenceSearch.checkboxChange("SiteType", $(opts.checkboxType + ":checked", $c), $c, opts);
                    return false;
                })
            );
            $("label[for='" + this.id + "']").css("display", "none");
            label = null;
            className = null;
        });
        $(".checkboxTech input:checkbox", $c).each(function() {
            var label = $("label[for='" + this.id + "']");
            var className = (this.checked) ? "checked" : "unchecked";
            $(this).css("display", "none").parent().append(
                $("<a>").addClass(className).html(label.html()).attr("href", "#").attr("rel", this.id).bind("click", function() {
                    $(this).toggleClass("checked").toggleClass("unchecked");
                    $("#" + this.rel).trigger("click");
                    $.fn.referenceSearch.checkboxChange("SiteTech", $(opts.checkboxTech + ":checked", $c), $c, opts);
                    return false;
                })
            );
            $("label[for='" + this.id + "']").css("display", "none");
            label = null;
            className = null;
        });

        $(opts.simpleToggle, $c).bind("click", function() {
            $(this).toggleClass("referenceSearchToggleToSimple")
                .toggleClass("referenceSearchToggleToAdvanced")
                .html($(this).html() == "Avanceret" ? "Simpel" : "Avanceret");
            $(".referenceSearchPanelAdvanced", $c).slideToggle(500);
        });
        $(".referenceSearchResultsCountButton", $c).bind("click", function() {
            $.fn.referenceSearch.search($c, opts);
        });
        if ($(".checked", $c).length > 0) {
            $(opts.simpleToggle, $c).trigger("click");
        }
        if ($(".referenceSearchAutoSearch", $c).length > 0) {
            $.fn.referenceSearch.search($c, opts);
        };
    };
    $.fn.referenceSearch.sliderChange = function(key, value, $c, opts) {
        skybrudDkSlideSearch.SetCookie(key, value, function(res) {
            if (res.error != null) {
                alert(res.error.Message);
            }
            else {
                $.fn.referenceSearch.search($c, opts);
            };
        });
    };
    $.fn.referenceSearch.checkboxChange = function(key, $s, $c, opts) {
        var value = "";
        switch (key) {
            case "SiteType":
                $s.each(function(i) {
                    value += $(this).attr("value") + "+";
                });
                break;
            case "SiteTech":
                $s.each(function(i) {
                    value += $(this).attr("value") + "+";
                });
                break;
        };
        skybrudDkSlideSearch.SetCookie(key, value, function(res) {
            if (res.error != null) {
                alert(res.error.Message);
            }
            else {
                $.fn.referenceSearch.search($c, opts);
            };
        });
    };
    $.fn.referenceSearch.search = function($c, opts) {
        AjaxPro.queue.abort();
        clearTimeout($.fn.referenceSearch.timer);
        $.fn.referenceSearch.items = [];
        $(opts.searchResults, $c).html("");

        $(".referenceSearchResultsCount", $c).html("<img src=\"/img/skybrudDk/slider/loader.gif\" alt=\"Søger\" /> Søger");
        var advanced = $(".referenceSearchToggleToAdvanced", $c).length == 1 ? false : true;
        //var refId = String(location.href.match(/refId=[0-9]*/)).replace(/refId=/, "");

        skybrudDkSlideSearch.GetReferences(advanced, function(res) {
            if (res.error != null) {
                //alert(res.error.Message);
            }
            else {
                var resultsContainer = $(opts.searchResults, $c);
                var resultsLink = "/page11.aspx?autosearch=1";
                if ($c.hasClass("referenceSearchOnly")) {
                    $(".referenceSearchResultsCount", $c).html(
                        res.value.length == 1 ?
                        "<a href=\"" + resultsLink + "\" class=\"referenceSearchResultsShowButton\">1 resultat</a>" : "<a href=\"" + resultsLink + "\" class=\"referenceSearchResultsShowButton\">" + res.value.length + " resultater</a>"
                    );
                } else {
                    $(".referenceSearchResultsCount", $c).html(
                        res.value.length == 1 ?
                        "<div class=\"referenceSearchResultsShowButton\">1 resultat</div>" : "<div class=\"referenceSearchResultsShowButton\">" + res.value.length + " resultater</div>"
                    );
                    resultsContainer.html("");

                    $.fn.referenceSearch.items = res.value;
                    $.fn.referenceSearch.displayItem(resultsContainer);
                };
                resultsContainer = null;
            };
        });
        advanced = null;
    };
    $.fn.referenceSearch.displayItem = function(resultsContainer) {
        if ($.fn.referenceSearch.items.length != 0) {
            var id = $.fn.referenceSearch.items[0].Id;
            var pictureId = $.fn.referenceSearch.items[0].PictureId;
            var name = $.fn.referenceSearch.items[0].Name;
            var teaser = $.fn.referenceSearch.items[0].Teaser;
            var isCase = $.fn.referenceSearch.items[0].IsCase;
            var externalUrl = $.fn.referenceSearch.items[0].ExternalUrl;

            resultsContainer
            .append(
                $("<div>")
                .addClass("referenceSearchResultsItem")
                .addClass("referenceSearchResultsItem_" + id)
                .append(
                    $("<a>").attr("name", "reference_" + id)
                )
                .append(
                    $("<h2>")
                    .addClass("referenceSearchResultsItemName")
                    .html(name)
                )
                .append(
                    $("<p>")
                    .addClass("referenceSearchResultsItemContent")
                    .html(teaser)
                )
                .append(
                    !isCase ? "" :
                    $("<a>")
                    .addClass("referenceSearchResultsItemLink")
                    .html("Læs mere om dette projekt")
                    .attr("href", "/page58.aspx?caseId=" + id + "&ReturnUrl=/page11.aspx?autosearch=1")
                    .bind("click", $.fn.referenceSearch.clear)
                )
                .append(
                    !isCase || externalUrl == "" ? "" :
                    $("<br />")
                )
                .append(
                    externalUrl == "" ? "" :
                    $("<a>")
                    .addClass("referenceSearchResultsItemLink")
                    .html("Besøg hjemmesiden")
                    .attr("href", externalUrl)
                    .attr("target", "_blank")
                    .bind("click", $.fn.referenceSearch.clear)
                )
            );
            Cufon.replace('h2');

            if (pictureId <= 0) {
                $.fn.referenceSearch.timer = setTimeout(function() {
                    $.fn.referenceSearch.items.splice(0, 1);
                    $.fn.referenceSearch.displayItem(resultsContainer);
                }, 10);
            }
            else {
                $(".referenceSearchResultsItem_" + id + " a[name='reference_" + id + "']", resultsContainer)
                .after(
                    $("<div>")
                    .addClass("referenceSearchResultsItemImageContainer")
                    .append(
                        externalUrl == "" ? "" :
                        $("<a>")
                        .attr("href", externalUrl)
                        .attr("target", "_blank")
                        .bind("click", $.fn.referenceSearch.clear)
                        .append(
                            $("<img>")
                            .css("display", "none")
                            .addClass("referenceSearchResultsItemImage")
                            .bind("load", function() {
                                $(this).css("display", "block");
                                $.fn.referenceSearch.timer = setTimeout(function() {
                                    $.fn.referenceSearch.items.splice(0, 1);
                                    $.fn.referenceSearch.displayItem(resultsContainer);
                                }, 10);
                            })
                            .bind("error", function() {
                                $.fn.referenceSearch.timer = setTimeout(function() {
                                    $.fn.referenceSearch.items.splice(0, 1);
                                    $.fn.referenceSearch.displayItem(resultsContainer);
                                }, 10);
                            })
                            .attr("src", "/lib/picture.aspx?pictureID=" + pictureId + "&w=440")
                        )
                    )                        
                    
                );
            };

            $(".referenceSearchResultsItem_" + id, resultsContainer).fadeIn(50);
            doOverlay();
        }
        else {
            //
        };
    };
    $.fn.referenceSearch.clear = function() {
        AjaxPro.queue.abort();
        clearTimeout($.fn.referenceSearch.timer);
        $.fn.referenceSearch.items = [];
    };
    $.fn.referenceSearch.items = [];
    $.fn.referenceSearch.timer = null;
    $.fn.referenceSearch.defaults = {
        sliderMenu: ".referenceSearchSliderMenu",
        sliderStyle: ".referenceSearchSliderStyle",
        valueMenu: ".valueMenu",
        valueStyle: ".valueStyle",
        checkboxType: ".checkboxType input:checkbox",
        checkboxTech: ".checkboxTech input:checkbox",
        simpleToggle: ".referenceSearchToggle",
        searchResults: ".referenceSearchResults"
    };
})(jQuery);