/*
Uses eLib & TokenizedExp
*/
function TabPanel( id ){
	this.id = id;
	this.el = document.getElementById(id);
	this.hide();
}

TabPanel.prototype={
	show:function(){
		removeClass(this.el,'panelOff');
	},
	hide:function(){
		addClass(this.el,'panelOff');
	}
}

var TabActuators = new Array();
function TabActuator( linkEl, tabSystem ){
	this.i=TabActuators.length;
	linkEl.id=this.i;
	this.el=linkEl;
	this.panel=new TabPanel(linkEl.hash.substring(1));
	this.tabSys=tabSystem;
	TabActuators[this.i]=this;
}

TabActuator.prototype={
	select:function(){
		this.panel.show();
		addClass(this.el.parentNode,'selected');
	},
	deselect:function(){
		this.panel.hide();
		removeClass(this.el.parentNode,'selected');
	},
	setActive:function(){
		this.tabSys.setActive(this);
	}
}

var TabSystems=new Array();

function TabSystem(tabWrapID,panelWrapID,defaultIdx){
	if(arguments.length<2) return;
	this.tabs=new Array();
	this.activeTab=null;

	var tabWrap = document.getElementById(tabWrapID);
	if( tabWrap != null ) {
		var linkEls=tabWrap.getElementsByTagName('a');
		var activeIndex=0;
		for(var i=0;i<linkEls.length;i++){
			this.tabs[i]=new TabActuator(linkEls[i],this);
			var tabEl=this.tabs[i].el;
			if(hasToken(tabEl.className,'selected')){
				activeIndex=i;
				removeClass(tabEl,'selected');
			}
			eLib.addListener(tabEl,'click',TabSystem.tabListener,true);
		}
		this.panelWrap = document.getElementById(panelWrapID);
		if(defaultIdx != null && defaultIdx != '') {
			activeIndex = defaultIdx;
		}
		var pnlId = window.location.hash.substring(1);
		if(pnlId && panelId.length > 0){
			for(i=0;i<this.tabs.length;i++){
				if(this.tabs[i].panel.id==pnlId){
					activeIndex=i;
					break;
				}
			}
		}

		this.activeTab=this.tabs[activeIndex];
		this.activeTab.select();
		this.i=TabSystems.length;
		TabSystems[this.i]=this;
	}
}

TabSystem.prototype={
	setActive:function(tab){
		if(tab==this.activeTab) return;
		this.activeTab.deselect();
		this.activeTab=tab;
		this.activeTab.select();
	}
}

TabSystem.tabListener=function(e){
	TabActuators[eLib.getTarget(e).id].setActive();
	eLib.preventDefault(e);
	return false;
}
