var EventTabs = new Class({
    Implements:[Options, Events], 
    
    options:
    {
        contentClassName:"tab_section",
        contentTitleSelector:"h2.title",
        deleteTitle:true,
        onHideTabs:$empty
    },
    
    element:null,
    tabList:null,
    tabs:[],
    
    initialize:function(element, options)
    {
        var self = this; 
        
        this.element = $(element);
        if(!$chk(this.element)){ return; }
        
        if(options != undefined && options != null)
            this.setOptions(options);
        
        var tabs = this.element.getElement("div.tabs");
        if(!$chk(tabs))
        {
            tabs = new Element("div", {"class":"tabs"});
            this.element.grab(tabs, "top");
        }
        
        var ul = tabs.getElement("ul");
        if(!$chk(ul))
        {
            ul = new Element("ul");
            tabs.grab(ul, "top");
        }
        
        this.tabList = ul;
        
        $$("." + this.options.contentClassName).each(self.register_content, self);
        
        this.fireEvent("hideTabs");
        
        if(this.tabs.length > 0)
        {
            this.tabs[0].open();
        }
        
        var last = this.tabList.getElement("li:last-child");
        if($chk(last))
        {
            last.addClass("last");
        }
    },
    
    register_content:function(content)
    {
        var header = content.getElement(this.options.contentTitleSelector);
        if(!$chk(header)){ return; }
        
        var title = header.get("html");
        
        if(this.options.deleteTitle){ header.destroy(); }
        
        this.tab_add(title, content);
    },
    
    tab_add:function(name, content)
    {
        var self = this;
        
        if(!$chk(this.tabList)){ return; }

        var li = new Element("li");
        var a = new Element("a", {"href":"#"});
        a.set("html", name);
        
        var closure_open = function(e)
        {
            if(e != undefined && e != null){ e.stop(); }
            self.tab_open(a, content);
        };
        a.addEvent("click", closure_open);
        
        var closure_close = function()
        {
            self.tab_close(a, content);
        };
        this.addEvent("hideTabs", closure_close);
        
        li.grab(a);
        this.tabList.grab(li);
        
        var clear = new Element("div", {"class":"clearB"});
        var parent = this.tabList.getParent();
        if($chk(parent))
            parent.grab(clear);
        
        this.tabs.push({
            link:a,
            content:content,
            open:closure_open,
            close:closure_close
        });
    },
    
    tab_open:function(sender, content)
    {
        if(!$chk(sender)){ return; }
        if(!$chk(content)){ return; }
        
        this.fireEvent("hideTabs");
        
        sender.addClass("active");
        content.removeClass("hidden");        
    },
    
    tab_close:function(sender, content)
    {
        if(!$chk(sender)){ return; }
        if(!$chk(content)){ return; }
        
        sender.removeClass("active");
        content.addClass("hidden");
    }
});

