﻿/// <reference path="jquery-1.4.4.min.js" />
/// <reference path="Woopt.Startup.js" />

window.FilterIsUpdating = false;

FilterHelper = function () {
    this.AllFilterItems = null;
}

FilterHelper.prototype = {
    Initialize: function () {
        filterHelper.AllFilterItems = $j(".FilterItem");

        filterHelper.AllFilterItems.click(function () {
            if (!window.FilterIsUpdating) {
                var allFiltersDisabledItem = $j(".FilterItem.All");
                var cur = $j(this);

                // If we hit the "All" item, all items will be disabled except the "All" item.
                // [MB]
                if (cur.hasClass("All")) {
                    filterHelper.AllFilterItems.removeClass("Active");

                    if (!cur.hasClass("Active"))
                        cur.addClass("Active");
                }
                else {
                    if (cur.hasClass("Active")) {
                        // If we hit a filter item and the filter item is active, we disable it. (For toggling)
                        // [MB]
                        cur.removeClass("Active");

                        // If no item has the "Active"-flag anymore, activate the "All"-item.
                        // [MB]
                        if ($j(".FilterItem.Active").length == 0)
                            allFiltersDisabledItem.addClass("Active");
                    }
                    else {
                        // If we hit a filter item and the filter item is disabled, we enabled it and deactivate the "All"-item.
                        // [MB]
                        cur.addClass("Active");

                        allFiltersDisabledItem.removeClass("Active");
                    }
                }

                // Change page on "My"-click.
                // [MB]
                if (cur.hasClass("My")) {
                    filterHelper.UpdateFilters(true);
                    $j("form").attr("action", "/Settings/SelectMySchools").submit();
                    return;
                }
                else {
                    filterHelper.UpdateFilters();
                    return;
                }
            }
        });

        filterHelper.AttachWMagHover();
        filterHelper.RestoreState();
    },

    AttachWMagHover: function () {
        $j(".FilterItem.MagFilter").mouseenter(function () {
            var magFilterItemHTML = "<div class=\"DummyFilterItem MagFilter\" style=\"margin-left:4px;\">";
            magFilterItemHTML += "<div class=\"Indicator\"></div>";
            magFilterItemHTML += "<div class=\"Label\">MAGAZIN</div>";
            magFilterItemHTML += "<div class=\"Clearer\"></div>"
            magFilterItemHTML += "</div><div style=\"clear:both;\"></div>";

            var currentMenuItem = $j(this);
            var hoverMenu = $j("#HoverMenu");

            if (hoverMenu.length == 0) {
                hoverMenu = $j("<div id=\"Hovermenu\" />");
                hoverMenu.html(magFilterItemHTML);

                hoverMenu.css({
                    position: "absolute",
                    width: "100px",
                    height: "125px",
                    padding: "0px 0px 0px 3px",
                    border: "1px solid #CCCCCC",
                    "background-color": "#FFFFFF"
                });

                hoverMenu.mouseleave(function () {
                    $j(this).css("display", "none");
                });

                var types = ["Alle", "Unterwegs", "Körperkult", "Später", "Protest", "Serien"];

                var currentlySelectedCategory = $j("#SelectedWMagCategory").val();

                for (var typeIdx = 0; typeIdx < types.length; typeIdx++) {
                    var typeName = types[typeIdx];

                    var indicatorImage = (currentlySelectedCategory == typeName) ? "ItemChecked" : "ItemUnchecked";

                    var typeItem = $j("<div style=\"background-image:url('/Images/Layout/Startpage/" + indicatorImage + ".png'); background-repeat:no-repeat; background-position:2px 2px; cursor:pointer; margin:2px 0px 0px 2px; padding:0px 0px 0px 20px;\">" + typeName + "</div>");
                    typeItem.click(function () {
                        $j("#SelectedWMagCategory").val($j(this).html());
                        hoverMenu.css("display", "none");

                        if (!$j(".MagFilter").hasClass("Active")) {
                            $j(".MagFilter").addClass("Active");
                            $j(".FilterItem.All").removeClass("Active");
                        }
                        filterHelper.UpdateFilters();
                    });
                    hoverMenu.append(typeItem);
                }

                $j("#Container").append(hoverMenu);
            }

            $j(".DummyFilterItem", hoverMenu).removeClass("Active");
            if (currentMenuItem.hasClass("Active")) {
                $j(".DummyFilterItem", hoverMenu).addClass("Active");
            }

            var pos = currentMenuItem.position();
            hoverMenu.css({
                top: pos.top - 1,
                left: pos.left - 8,
                "display": "block"
            });
        });
    },

    GetCurrentSelectionString: function () {
        return $j("#FilterSelection").val();
    },

    RestoreState: function () {
        if ((filterHelper.AllFilterItems != null) && (filterHelper.AllFilterItems.length > 0)) {
            var filtersToSet = filterHelper.GetCurrentSelectionString();

            if (filterHelper.AllFilterItems.length != filtersToSet.length) {
                // If we got a missmatch, just activate "All".
                // [MB]
                filterHelper.AllFilterItems.removeClass("Active");
                $j(".FilterItem.All").addClass("Active");
            }
            else {
                filterHelper.AllFilterItems.each(function (idx, e) {
                    if (filtersToSet[idx] == "1")
                        $j(this).addClass("Active");
                });
            }
        }
    },

    UpdateFilters: function (skipSubmitting) {
        if (!window.FilterIsUpdating) {
            window.FilterIsUpdating = true;

            if ((filterHelper.AllFilterItems == null) || (filterHelper.AllFilterItems.length == 0)) {
                window.FilterIsUpdating = false;
            }
            else {
                var filterString = "";
                filterHelper.AllFilterItems.each(function (idx, e) {
                    filterString += $j(this).hasClass("Active") ? "1" : "0";
                });

                $j("#FilterSelection").val(filterString);

                if (!skipSubmitting)
                    $j("form").submit();
            }
        }
    }
}

var filterHelper = new FilterHelper();
