function Tab(id){
    this.element=$(id);
    this.tabItems=[];
    this.tablistItems=[];
    this.activeTab=1;
    this.toggleTimer=null;
    this.activeCallback=null;
    this.init();
};

Object.extend(Tab.prototype,{
    init:function(){
        if(this.element){
            
            var ul=document.createElement('ul'),li,a;
            var tab=this.element.firstChild,i=1;
            
            while(tab){
                
                if(tab.nodeType==1){
                    
                    this.tabItems[i]=tab;
                    li = document.createElement('li');
                    a = document.createElement('a');
                
                    Element.extend(a);
                    Element.extend(li);
                    a.setAttribute('href',window.location.href+'#'+tab.id);
                    a.appendChild(document.createTextNode(i));
                    a.observe('click',function(e){
                        e.preventDefault();
                    });
                    a.observe('mouseover',this.setActive.bind(this,i,true));
                    
                    li.appendChild(a);
                    if(i!=this.activeTab){
                        tab.style.display='none';
                    }
                    else{ 
                        li.addClassName('active');
                    }
                    
                    this.tablistItems[i]=li;
                    ul.appendChild(li);
                    i++;
                }
                tab=tab.nextSibling;
            }
            this.element.appendChild(ul);
            this.element.observe('mouseout',this.startToggle.bind(this));
            this.element.observe('mouseover',this.stopToggle.bind(this));
            this.startToggle();
            Event.observe(window,'unload',this.cleanUp.bind(this));
        }
    },
    cleanUp:function(){
        this.stopToggle();
        this.tablistItems=null;
        this.tabItems=null;
        this.element=null;
        this.activeCallback=null;
    },
    setActive:function(i,doCallback,e){
            if(i!=this.activeTab){
                if(this.activeTab){
                    this.tabItems[this.activeTab].style.display='none';
                    this.tablistItems[this.activeTab].removeClassName('active');
                }
                this.activeTab=i;
                this.tabItems[this.activeTab].style.display='';
                this.tablistItems[this.activeTab].addClassName('active');
                if(this.activeCallback&&doCallback)
                    this.activeCallback(i,false);
            }
            if(e){
                e.preventDefault();
            }
    },
    toggle:function(){
        var i=this.activeTab+1;
        if(!this.tabItems[i]){
            i=1;
        }
    
        this.setActive(i,true);
        this.startToggle();
    },
    startToggle:function(){
        this.stopToggle();
        this.toggleTimer=setTimeout(this.toggle.bind(this),Math.round(40000/(this.activeTab+1)));
    },
    stopToggle:function(){
        if(this.toggleTimer){
            clearTimeout(this.toggleTimer);
            this.toggleTimer=null;
        }
    }
});