/*
*	Tabbed List
*	A reusable JS class for converting nested lists into tabs
*	
*	Requires Trapeze jQuery distribution
*	
*	Taylan Pince (tpince at trapeze dot com) - February 18, 2009
*/

$.namespace("trapeze.TabbedList");

trapeze.TabbedList = $.Class.extend({
    
    selector : "",
    navigation : null,
    active_index : null,
    
    nav_template : '<ul class="filter-nav"></ul>',
    nav_element_template : '<li><a href="javascript:void(0);">%(text)</a></li>',
    
    build_navigation : function() {
        this.navigation = $(this.nav_template).insertBefore(this.selector);
        
        $(this.selector).children("li").each(this.add_navigation_element.bind(this));
    },
    
    add_navigation_element : function(index, obj) {
        var nav_link = $(trapeze.render_template(this.nav_element_template, {
            "text" : $(obj).children("h4").text()
        })).appendTo(this.navigation).find("a").get(0);
        
        $(obj).children("h4").remove();
        
        $.data(nav_link, "tab_index", index);
        
        $(nav_link).click(this.switch_tab_event.bind(this));
    },
    
    switch_tab_event : function(evt) {
        this.switch_tab($.data(evt.target, "tab_index"));
    },
    
    switch_tab : function(index) {
        if (this.active_index != null) {
            $($(this.selector).children("li").get(parseInt(this.active_index))).slideUp("fast");
            
            this.navigation.children("li").removeClass("active");
        }
        
        if (this.active_index != index) {
            this.active_index = index;
            
            $($(this.selector).children("li").get(parseInt(index))).slideDown();
            $(this.navigation.children("li").get(parseInt(index))).addClass("active");
        } else {
            this.active_index = null;
        }
    },
    
    init : function(selector) {
        this.selector = selector;
        
        this.build_navigation();
        
        $(this.selector).children("li").hide();
    }
    
});

