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;
            
			var first = true; 
			
			this.paused = false;
			var title = '';
            while(tab){
                Element.extend(tab);
                if(tab.nodeType==1){
                    
                    this.tabItems[i] = tab;
					title = tab.readAttribute('rel');
                    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');
                    }
					
					if(first){
						li.addClassName('first');
					}
                    
                    this.tablistItems[i]=li;
                    ul.appendChild(li);
                    i++;
					first = false;
                }
                tab=tab.nextSibling;
            }
            //this.element.appendChild(ul);
			this.element.insertBefore(ul,this.element.firstChild);
            this.element.observe('mouseout',this.resume.bind(this));
            this.element.observe('mouseover',this.pause.bind(this));
            this.startToggle();
            Event.observe(window,'unload',this.cleanUp.bind(this));
        }
    },
	pause:function(){
		this.paused = true;
	},
	resume:function(){
		this.paused = false;
	},
    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(){
        
		if (!this.paused) {
			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(10000/(this.activeTab+1)));
		this.toggleTimer=setTimeout(this.toggle.bind(this),8000);
    },
    stopToggle:function(){
        if(this.toggleTimer){
            clearTimeout(this.toggleTimer);
            this.toggleTimer=null;
        }
    }
});
