function buildCarousel(el, tabID) {
    if(YAHOO.lang.isString(el)) {
        el = $(el);
    } else if(!YAHOO.lang.isObject(el)) {
        throw "Requires an element or element id.";
    }
    YAHOO.util.Dom.removeClass(el, "yui-hidden");

    var carousel = new YAHOO.widget.Carousel(el, {
        numVisible:1,
        scrollIncrement:1
    });

    carousel.on("afterScroll", function(){
        this.focus(); // Resolves display bug in Safari 4, IE 8
    });

    carousel.on("pageChange", function(){
        YAHOO.util.Dom.removeClass(this.get("element").id, "yui-hidden");
        if (this.get("numItems") <= this.get("numVisible")) {
            try {
                nodes = this.get("element").childNodes;
                for (key in this.get("element").childNodes) {
                    if (nodes[key].className == "yui-carousel-nav") {
                        YAHOO.util.Dom.addClass(nodes[key], "yui-hidden");
                        YAHOO.util.Dom.addClass(this.get("element").id + "Head", "noCarousel");
                    }
                }
            } catch(x) {alert(x)}
        }
    });

    carousel.on("beforeShow", function(){
        YAHOO.util.Dom.removeClass(this.get("element").id, "yui-hidden");
        if (this.get("numItems") <= this.get("numVisible")) {
            try {
                nodes = this.get("element").childNodes;
                for (key in this.get("element").childNodes) {
                    if (nodes[key].className == "yui-carousel-nav") {
                        YAHOO.util.Dom.addClass(nodes[key], "yui-hidden");
                        YAHOO.util.Dom.addClass(this.get("element").id + "Head", "noCarousel");
                    }
                }
            } catch(x) {alert(x)}
        }
    });
    carousel.render();

    if (YAHOO.lang.isString(tabID)) {
        if (!YAHOO.lang.isArray(YAHOO.CMA.tabView[tabID].carouselView)) {
            YAHOO.CMA.tabView[tabID].carouselView = [];
        }
        YAHOO.CMA.tabView[tabID].carouselView[carousel.get("element").id] = carousel;
    } else {
        if (!YAHOO.lang.isArray(YAHOO.CMA.carouselView)) {
            YAHOO.CMA.carouselView = [];
        }
        YAHOO.CMA.carouselView[carousel.get("element").id] = carousel;
    }
}

function buildTabs(tabID) {
    var tabView = new YAHOO.widget.TabView(tabID);

    tabView.on("activeTabChange", function(ev){
        if (YAHOO.lang.isArray(this.carouselView)) {
            for (var key in this.carouselView) {
                var carousel = this.carouselView[key];
                carousel.focus(); // Resolves display bug in Safari 4, IE 8
            }
        }
    });

    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;
    };
    tabView.setActiveTab = function(tabMode) {
        var tabIdx = this.getTabIdx(tabID); // 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);
        }
    };

    if (YAHOO.lang.isString(tabID)) {
        if (!YAHOO.lang.isArray(YAHOO.CMA.tabView)) {
            YAHOO.CMA.tabView = new Array();
        }
        YAHOO.CMA.tabView[tabID] = tabView;
    }
}

YAHOO.util.Event.onDOMReady(function() {
    buildTabs("tfcTabs");
    buildTabs("twsTabs");
    buildTabs("tfTabs");

    buildCarousel("composerCarousel", "twsTabs");
    buildCarousel("performerCarousel", "twsTabs");
    buildCarousel("albumCarousel", "twsTabs");
    if(YAHOO.lang.isObject($("presentationCarousel"))) {
        buildCarousel("presentationCarousel", "tfTabs");
    }

    YAHOO.util.Event.onContentReady('newFeat3col', function(ev) {
        YAHOO.util.grids.columnfix.fix(this);
    }, this);
}, this);


