﻿/// <reference path="jquery.js" />

(function($) {
    var cache = [];

    $.fn.triggerList = function(options) {

        var defaults = {
            event: "click",
            callback: null
        };

        var opts = $.extend(defaults, options);

        return this.each(function() {
            var $this = $(this);
            $this.bind(opts.event, opts.callback);
        });
    };
})(jQuery);

(function($) {
    var cache = [];

    $.fn.subcategoryDrilldown = function(options) {

        var defaults = {
            webservice: "webservices/fc.svc/GetChildCategories",
            navurl: "search/",
            flyout: "#flyout",
            flyoutContent: "#flyout .content",
            event: "click",
            callback: null
        };

        var opts = $.extend(defaults, options);

        this.click(function(e) {
            var metadata = $(this).metadata({ type: "attr", name: "data" });

            if (metadata.supressCascade) {
                opts.callback(metadata.catname);
                //return false;
            }

            //console.log("Event on element: %i", e.data.categoryid);
            $.getJSON(opts.webservice, { "categoryid": metadata.catid }, function(data) {
                // If there are no subcategories then execute the callback immediately
                if (data.length == 0) {
                    opts.callback(metadata.catname);
                } else {
                    $(opts.flyoutContent).html($.fn.subcategoryDrilldown.renderContent(metadata, data, opts));
                    var hovertimer = 0;
                    $(opts.flyout)
                        .fadeIn()
                        .hover(
                        function() {
                            if (hovertimer != 0) {
                                clearTimeout(hovertimer);
                                hovertimer = 0;
                            }
                        },
                        function() {
                            if (hovertimer == 0)
                                hovertimer = setTimeout(function() { $(opts.flyout).fadeOut(); }, 2500);
                        }
                    );
                }
            });

            e.preventDefault();
            e.stopPropagation();
        });
    };

    $.fn.subcategoryDrilldown.renderContent = function(rootCat, categories, opts) {
        var list = $("<ul></ul>");

        // Add the "View All" link
        $('<li><b><a href="' + opts.navurl + rootCat.catname + '/" data="{catid: \'' + rootCat.catid + '\', catname:\'' + rootCat.catname + '\'}">View All</a></b></li>').appendTo(list);

        // Add each of the subcategory links
        for (var i = 0; i < categories.length; i++) {
            var cat = categories[i];
            $('<li><a href="' + opts.navurl + cat.SeoName + '/\" data="{catid: \'' + cat.catid + '\', catname:\'' + cat.SeoName + '\'}">' + cat.Name + "</a></li>").appendTo(list)
            //console.log("child category %s", data[i].Name);
        }

        list.find("li a").click(function(e) {
            var metadata = $(this).metadata({ type: "attr", name: "data" });
            opts.callback(metadata.catname);

            e.preventDefault();
            e.stopPropagation();
        });

        return list;
    };
})(jQuery);
