var TabList = new Class({
	initialize:function(menu) {
		if (window.ie6)
			styleCur='tabscur';
		else
			styleCur='tabscur';
		this.menu = $(menu);
		if (this.menu.getElement('td.'+styleCur)==null) {
			this.current = this.menu.getElements('td.tabs')[0];
		}
		else {
			this.current = this.menu.getElement('td.'+styleCur);
		}
		listitems = $ES('td[class=tabs]');
		// Adding current tab if it's marked, as it has not the same
		// style class as the other tabs.
		divcurrent = $E('td[class='+styleCur+']');
		if (divcurrent!=null)
			listitems[listitems.length] = divcurrent;
		listitems.each(function(item){
			item.addEvent('mouseenter', function(event){
					event.stopPropagation();
					// reset any delay tab reset
					this.resetDelay(this.current,item);
					if(this.current!=item) {
						this.current.removeClass(styleCur);
						this.current.addClass('tabs');
						item.addClass(styleCur);
						item.removeClass('tabs');
					}
				}.bind(this));
			item.addEvent('mouseleave', function(event){
					event.stopPropagation();
					if (this.current != item) {
						// schedule the active tab to be reset
						this.setDelayLeave(this.current,item);
					}
				}.bind(this));
		}.bind(this));
		
		if (this.current!=null) { 
			this.setCurrent(this.current);
		}
	},
	setDelayLeave:function(current,item) {
		// we first remove the current active tab reset
		this.resetDelay();
		// store the current and old position
		// required by the resetDelay function
		this.delayCurrent = current;
		this.delayItem = item;
		this.delay = setTimeout(function(){
			item.removeClass(styleCur);
			item.addClass('tabs');
			current.addClass(styleCur);
			current.removeClass('tabs');
		},1000);
	},
	resetDelay:function(current,item) {
		if (this.delay != undefined) {
			// remove the current delayed trigger
			clearTimeout(this.delay);
			// switch back the tab as it should have been
			// when the trigger fires
			this.delayItem.removeClass(styleCur);
			this.delayItem.addClass('tabs');
			this.delayCurrent.addClass(styleCur);
			this.delayCurrent.removeClass('tabs');
			this.delay = undefined;
			this.delayItem = undefined;
			this.delayCurrent = undefined;
		}
	},
	setCurrent:function(el) {
		this.current.removeClass(styleCur);
		this.current.addClass('tabs');
		this.current = el;
		this.current.addClass(styleCur);
		this.current.removeClass('tabs');
	}
});
