var collections = {}, aT = YAHOO.CMA.albumTab;

var collectionSelector = null, selectedCollection = null;
try {
    selectedCollection = YAHOO.util.History.getCurrentState("tvf");
} catch (e) {
    selectedCollection = readCookie("tab");
    selectedCollection = (selectedCollection === null || selectedCollection == "") ? "tracks" : selectedCollection;
}

function handleSelectorsReady() {
    if (collectionSelector) {
        var csSel = collectionSelector.getState().selection;
        if (csSel) {
            showSelection(csSel);
            renderUserMessage(csSel);
            renderStageMessage(csSel);
        }
    }
}

function handleCollectionChanged() {
    if (collectionSelector) {
        var currentState = YAHOO.util.History.getCurrentState("tvf");
        if (collectionSelector.getState().selection != currentState) {
            YAHOO.util.History.navigate("tvf", collectionSelector.getState().selection);
            createCookie("tab", collectionSelector.getState().selection);
        }
        var csSel = collectionSelector.getState().selection;
        if (csSel) {
            showSelection(csSel);
            renderUserMessage(csSel);
            renderStageMessage(csSel);
        }
    }
}

var pVF = null;
function showSelection(selected) {
    var cVF = null;
    if (selected == 'all') {
        cVF = $('wAll');
    } else if (selected == 'tracks') {
        cVF = $('wTracks');
    } else if (selected == 'free') {
        cVF = $('wFree');
    } else if (selected == 'midi') {
        cVF = $('wMidi');
    }

    if (YAHOO.lang.isObject(pVF)) {
        if (pVF != cVF) {
            if (pVF != null) {
                YAHOO.util.Dom.addClass(pVF, 'yui-hidden');
            }
            YAHOO.util.Dom.removeClass(cVF, 'yui-hidden');
        }
    } else {
        YAHOO.util.Dom.removeClass(cVF, 'yui-hidden');
    }
    pVF = cVF;
}

function renderStageMessage(selected) {
    var txtMsg = null;
    if (YAHOO.lang.isString(collections.stageMessages[selected]) && collections.stageMessages[selected].length > 0) {
        txtMsg = collections.stageMessages[selected];
    }
    renderJoinOrUpgradeStageMessage(txtMsg, collections.user);
}

function renderUserMessage(selected) {
    var el = $("collectionUserMessage");
    if (selected && YAHOO.lang.isObject(collections.userMessages)) {
        if (YAHOO.lang.isString(collections.userMessages[selected]) && collections.userMessages[selected].length > 0) {
            el.innerHTML = collections.userMessages[selected];
            YAHOO.util.Dom.addClass("collectionSelectorHeader", "tall");
            YAHOO.util.Dom.removeClass(el, "yui-hidden");
        } else {
            YAHOO.util.Dom.addClass(el, "yui-hidden");
            YAHOO.util.Dom.removeClass("collectionSelectorHeader", "tall");
            el.innerHTML = "";
        }
    } else {
        YAHOO.util.Dom.addClass(el, "yui-hidden");
        YAHOO.util.Dom.removeClass("collectionSelectorHeader", "tall");
        el.innerHTML = "";
    }
}

var yahAdjustView = function(anchor) { // Keep call alive until everything is initialized.
    setTimeout(function(){yahAdjustView(anchor)}, 500);
}

YAHOO.util.Event.onDOMReady(function() {
    collectionSelector = new YAHOO.widget.Selector("collectionSelector", {
        "message":"Select your collection:"
        , "selections":collectionItems
        , "selection":selectedCollection
    });

    collectionSelector.subscribe('rendered', handleSelectorsReady, this, true);
    collectionSelector.subscribe('selectionChanged', handleCollectionChanged, this, true);
    collectionSelector.render();


    var defaultPageTitle = document.title;
    if (!(YAHOO.lang.isString(selectedCollection) && selectedCollection.length > 0)) {
        selectedCollection = "tracks";
    }
    var bookmarkedCollectionState = YAHOO.util.History.getBookmarkedState("tvf");
    var initialCollectionState = bookmarkedCollectionState || selectedCollection;
    YAHOO.util.History.register("tvf", initialCollectionState, function (state) {
        if (collectionSelector) {
            collectionSelector.setSelection(state);
        } else {
            selectedCollection = state;
        }
    });

    var defaultTabState = param("",true);
    if (YAHOO.lang.isString(defaultTabState) && /^category[0-9]+$/.test(defaultTabState)) {
        var anchor = defaultTabState.replace("category", "cat0_");
        defaultTabState = null;
        YAHOO.util.Event.onDOMReady(function() {
            setTimeout(function(){
                collectionSelector.setSelection("all");
                YAHOO.CMA.Scroller().jumpTo(anchor);
            }, 750);
        });
    }
    var bookmarkedTabState = YAHOO.util.History.getBookmarkedState("tv");
    var initialTabState = bookmarkedTabState || defaultTabState;
    if (YAHOO.lang.isNull(initialTabState)) {
        initialTabState = "music";
    }
    YAHOO.util.History.register("tv", initialTabState, function (state) {
        YAHOO.CMA.tabView.setActiveTab(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("music"); // 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 currentState, adjustedPageTitle = "";
            var tabId = YAHOO.CMA.tabView.get('activeTab').get('labelEl').id;
            if (tabId=="about") {
                adjustedPageTitle += "[About] ";
                renderJoinOrUpgradeStageMessage(collections.altTxt, collections.user);
            } else if (tabId=="music") {
                adjustedPageTitle += "[Works] ";
                renderJoinOrUpgradeStageMessage(collections.stageMessages[collectionSelector.getState().selection], collections.user);
            } else if (tabId=="albums") {
                adjustedPageTitle += "[Albums] ";
                renderJoinOrUpgradeStageMessage(collections.altTxt, collections.user);
            } else if (tabId=="essentials") {
                adjustedPageTitle += "[Essentials] ";
                renderJoinOrUpgradeStageMessage(collections.altTxt, collections.user);
            } else if (tabId=="comments") {
                adjustedPageTitle += "[Comments] ";
                renderJoinOrUpgradeStageMessage(collections.altTxt, collections.user);
                loadComments();
            }
            document.title = adjustedPageTitle + defaultPageTitle;

            try {
                currentState = YAHOO.util.History.getCurrentState("tv");
                if (tabId != currentState) {
                    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 currentCollectionState = YAHOO.util.History.getCurrentState("tvf");
        if (currentCollectionState) {
            if (collectionSelector) {
                collectionSelector.setSelection(currentCollectionState);
            } else {
                selectedCollection = currentCollectionState;
            }
        }
    });

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

    aTO.data = composerJSON.albums;
    if (YAHOO.lang.isObject(aTO.data)) {
        aT.init(
            {"msgElm":"albTabMsg", "sortElm":"albTabSort", "pagElm":["albTabPagTop","albTabPagBot"], "contentElm":"albTabBody"}
            , aTO
            , "<strong>"+aT.AlbumLabelTag+":</strong> "+aT.CountTag
        );
    }

    yahAdjustView = function(anchor) {
        if (YAHOO.lang.isObject(YAHOO.CMA.tabView) && YAHOO.lang.isFunction(YAHOO.CMA.tabView.setActiveTab)) {
            YAHOO.CMA.tabView.setActiveTab('music');
        }
        collectionSelector.setSelection("all");
        YAHOO.CMA.Scroller().jumpTo(anchor);
    }
}, this);
