var aT = YAHOO.CMA.albumTab, albumsJSON = {}, aTO = {};

YAHOO.util.Event.onDOMReady(function() {
    var defaultPageTitle = document.title;
    var defaultTabState = param("",true);
    var bookmarkedTabState = YAHOO.util.History.getBookmarkedState("tv");
    var initialTabState = bookmarkedTabState || defaultTabState;
    if (YAHOO.lang.isNull(initialTabState)) {
        initialTabState = "title";
    }
    YAHOO.util.History.register("tv", initialTabState, function (state) {
        YAHOO.CMA.tabView.setActiveTab(state);
    });

    var bookmarkedPageState = YAHOO.util.History.getBookmarkedState("tvp");
    var initialPageState = bookmarkedPageState || 1;
    YAHOO.util.History.register("tvp", initialPageState.toString(), function (state) {
        if (YAHOO.lang.isString(state)) {
            state = parseInt(state);
        }
        aT.pag.fireEvent("changeRequest", aT.pag.getState({"page":parseInt(state)}));
    });

    function initTabView () {
        YAHOO.util.Dom.addClass('pageLoader', 'yui-hidden');

        YAHOO.CMA.tabView = new YAHOO.widget.TabView('cTabs');
        YAHOO.CMA.tabView.getTabIdx = function(tabName) {
            var tabs = this.get('tabs');
            for (var idx = 0; idx < tabs.length; idx++) {
                var tab = tabs[idx];
                var tabId = tab.get('labelEl').id;
                if (tabId == tabName) {
                    return idx;
                }
            }
            return null;
        };
        YAHOO.CMA.tabView.setActiveTab = function(tabMode) {
            var tabIdx = this.getTabIdx("title"); // Default Tab
            if (!YAHOO.lang.isNull(tabMode)) {
                var tabs = this.get('tabs');
                for (var idx = 0; idx < tabs.length; idx++) {
                    var tab = tabs[idx];
                    var tabId = tab.get('labelEl').id;
                    if (tabId == tabMode) {
                        if (tab.get('disabled')) {
                            tabIdx = null;
                        } else {
                            tabIdx = idx;
                        }
                        break;
                    }
                }
            }
            if (tabIdx != null) {
                this.set('activeIndex',tabIdx);
            }
        };
        YAHOO.CMA.tabView.addListener('activeTabChange', function () {
            var currentTabState, adjustedPageTitle = "";
            var tabId = YAHOO.CMA.tabView.get('activeTab').get('labelEl').id;
            if (tabId=="title") {
                adjustedPageTitle += "[By Title] ";
            } else if (tabId=="label") {
                adjustedPageTitle += "[By Label] ";
            } else if (tabId=="comments") {
                adjustedPageTitle += "[Comments] ";
                loadComments();
            }
            document.title = adjustedPageTitle + defaultPageTitle;

            try {
                currentTabState = YAHOO.util.History.getCurrentState("tv");
                if (tabId != currentTabState) {
                    YAHOO.util.History.navigate("tv", tabId);
                }
            } catch (e) {
                YAHOO.CMA.tabView.setActiveTab(tabId);
            }
        });
    }

    YAHOO.util.History.onReady(function () {
        initTabView();

        var currentTabState = YAHOO.util.History.getCurrentState("tv");
        YAHOO.CMA.tabView.setActiveTab(currentTabState);

        var currentPageState = YAHOO.util.History.getCurrentState("tvp");
        aT.pag.fireEvent("changeRequest", aT.pag.getState({"page":parseInt(currentPageState)}));
    });

    try {
        YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
    } catch (e) {
        initTabView();
    }

    aTO.data = albumsJSON.albums;
    if (YAHOO.lang.isObject(aTO.data)) {
        aT.init(
            {"msgElm":"albTabMsg", "sortElm":"albTabSort", "pagElm":["albTabPagTop","albTabPagBot"], "contentElm":"albTabBody"}
            , aTO.data
            , "<strong>"+aT.AlbumLabelTag+":</strong> "+aT.CountTag
        );
        aT.pag.subscribe("pageChange", function(o) {
            var currentPageState, page = 1;
            if (YAHOO.lang.isObject(o)) {
                page = o.newState.page;
            }
            try {
                currentPageState = YAHOO.util.History.getCurrentState("tvp");
                if (page.toString() != currentPageState) {
                    YAHOO.util.History.navigate("tvp", page.toString());
                }
            } catch (e) {}
        });
    }
}, this);
