/*  Prepares a page for tabs by dynamically genearating the html required by the jquery ui tabs script
*   then instantiating tabs
*
*   Requires: Trapeze jQuery distribution
*
*   Monika Piotrowicz - Aug 21, 2009
*/

$.namespace("trapeze.Tabs");

trapeze.Tabs = $.Class.extend({
    settings : null,
    jTabContainer : null,
    tabContainer : null,

    list_template : '<ul class="inline-list position-left tabs">%(list_items)</ul>',
    item_template : '<li><div class="%(div_class)"><a href="#%(title)">%(title)</a></div></li>',

    create_tabs : function() {
            this.jTabContainer
            var list_items = '';
            var initial_index = 0;

            this.jTabContainer.find('.'+this.settings.tab_content_class).each(function(index, obj) {
                list_items += trapeze.render_template(this.item_template, {
                    'content_id' : $(obj).attr('id'), /* todo: do we need this variable? */
                    'title'      : $(obj).find('.'+this.settings.title_class).remove().text(),
                    'div_class'  : this.settings.div_class
                });
                if ($(obj).hasClass('selected'))
                    initial_index = index;
            }.bind(this));

            this.jTabContainer.prepend(trapeze.render_template(this.list_template, {
                'list_items' : list_items
            }));

            //this.jTabContainer.tabs();
            this.jTabContainer.find("ul.tabs").tabs(this.tabContainer +" div.tabbed-content", {
                initialIndex : initial_index
            }).find("a.current").parents("li").addClass("current");
            
            var api = $("ul.tabs").tabs()
            var apiTabs = api.getTabs();
            
            api.onClick(function(evt, i){
                //apiTabs.parents("li").removeClass("current");
                //$(apiTabs[i]).parents("li").addClass("current");
                                this.getTabs().parents("li").removeClass("current");
                $(this.getTabs()[i]).parents("li").addClass("current");    
            });
    },
    
    init : function(params) {
        var default_options = {
            tab_list_class    : 'tabbed-list',
            tab_content_class : 'tabbed-content',
            title_class       : 'tabbed-title',
            div_class         : 'med-text',
            selector          : null
        };
        
        this.settings = $.extend({}, default_options, params);
        this.tabContainer = this.settings.selector;
        this.jTabContainer = $(this.settings.selector);
        this.create_tabs();
    }
});
