﻿jQuery(function($) {
    var $$ = function(param) {
        var id = $.data($(param)[0]);
        return $.cache[id];
    };

    $.fn.tabs = function(options) {
        options = $.extend(true, {
            qryTabList: "a"
        }, options || {});
        this.setupExtras(options.setup || $.fn.tabs.base, options);

        // Initialize
        var tabList = $(this);
        $$(tabList).panels = $([]);
        $$(tabList).getPanel = function(selected) {
            var href = $(selected).attr("href");
            if (href.indexOf('#') > 0) href = href.substr(href.indexOf('#'), href.length - href.indexOf('#'));
            return $(href);
        };

        $(options.qryTabList, tabList)
        .click(function() {
            tabList.trigger("activated", this);
            return false;
        }).each(function() {
            var panel = $$(tabList).getPanel($(this));
            $$(tabList).panels = $$(tabList).panels.add(panel);
            tabList.trigger("setupPanel", [panel]);
        });

        tabList.trigger("initialize");

        return this;
    };


    $.fn.tabs.base = {
        setupPanel: [function(options) {
            this.bind("setupPanel", function(e, selector) {
                $(selector).hide();
            });
        } ],

        initialize: [function(options) {
            this.bind("initialize", function() {
                var firstTab = $(this).find(options.qryTabList + ":first")[0];
                $(this).trigger("activated", firstTab);
            });
        } ],

        activate: [function(options) {
            this.bind("activated", function(e, selected) {
                var panel = $$(this).getPanel(selected);
                $$(this).panels.hide();
                $(panel).show();
                $(this).find(options.qryTabList).removeClass("active");
                $(selected).addClass("active").blur();
            });
        } ]
    };

    ajaxTabs = $.extend({}, $.fn.tabs.base);
    ajaxTabs.activate.unshift(function(options) {
        var xhr = options.xhr;
        this.bind("activated", function(e, selected) {
            var targetPanel = $(selected).attr("href").removeLeft($(selected).attr("href").indexOf('#')+1);
            if (options.region && $$(options.region).PanelLoadEvents) {
                var panelEvent = $.grep($$(options.region).PanelLoadEvents, function(a) { return a.PanelName == targetPanel; });
                if (!panelEvent || panelEvent.length==0) return;
                panelEvent[0].LoadMethod();
            } else { return; }
//            var url = xhr && xhr[$(selected).attr("href")];
//            if (url) {
//                var panel = $$(this).getPanel(selected);
//                panel.html(options.htmlLoading).load(url);
//            }
        });
    });
    /*
    delete ajaxTabs.initialize;


    ajaxTabs.hash = [function(options) {

        options = $.extend(true, options, { htmlLoading: "<img src='throbber.gif'/>" });
    var tabs = this;
    //debugger;
    this.bind("initialize", function() {
    var tab = $(this).find(options.qryTabList);
    if (window.location.hash) tab = tab.filter("a[href='" + window.location.hash + "']");
    $(this).trigger("activated", tab[0]);
    });

        this.bind("activated", function(e, selected) {
    window.location.hash = $(selected).attr("href");
    });

        var lastHash = window.location.hash;
    setInterval(function() {
    if (lastHash != window.location.hash) {
    tabs.trigger("initialize");
    lastHash = window.location.hash;
    }
    }, 500);
    } ];

    hashTabs = $.extend({}, $.fn.tabs.base);
    delete hashTabs.initialize;
    hashTabs.hash = ajaxTabs.hash;
    */


});