var tabSets = new Array();

/* Activate everything on page load to make sure nothing is missed */
addLoadEvent( function () {activeTabs('stage'); } );

/* Search through all <a> tags in the given element
(generally some top level, like 'stage') and give
the showTab method to the onClick event for all that
have 'forsheet' set */
function activeTabs(id) {
	var x = (document.getElementById(id)).getElementsByTagName('a');
	if(!x) return;
	
	for(var i=0; i<x.length; i++){
		if(x[i].id.substring(0,9) == 'forsheet-') 
			x[i].setAttribute('forsheet', x[i].id.substring(9));
		if(x[i].getAttribute('forsheet') && !x[i].getAttribute('tabgroup')) {
			
			/* Set up events for link */
			parentSet = find_tabset(x[i]);
			ts = parentSet.getAttribute('tabset');
			x[i].setAttribute('href', '#');
			x[i].setAttribute('tabgroup', ts);
			x[i].onclick = showSheetFromTab;
			x[i].toggle = toggle;
			thisSheet = x[i].getAttribute('forsheet')
			
			if(parentSet.className.indexOf('tabset') != -1 &&
				parentSet.parentNode.id.indexOf('left_col') == -1) {
				x[i].style.position="absolute";
				left = parentSet.getAttribute('taboffset') | 0;
				x[i].style.left = left +"px";
				parentSet.setAttribute('taboffset', left + x[i].offsetWidth +5 );
			}
			
			/* If referencing a sheet, add to the tabs array */
			sheet = document.getElementById(thisSheet);
			if(sheet) {
				if(!tabSets[ts]) {
					tabSets[ts] = new TabSet();
					rotate = parentSet.getAttribute('tabrotate');
					if(rotate) {
						tabSets[ts].rotation =
							setInterval("showSheet(tabSets['"+ts+"'], 'rotate')", parseInt(rotate)*1000);
					}
				}
				if(rotate)	{
					sheet.setAttribute('tabgroup', ts);
					sheet.onclick = clearRotate;
				}
				tabSets[ts].tabs.push(x[i]);
				tabSets[ts].sheets.push(sheet);

				if(x[i].getAttribute('selected'))
					tabSets[ts].defaultSheet = thisSheet;
			}
		}
	}
	for(var ts in tabSets)
		if(tabSets[ts].defaultSheet && tabSets[ts].currentSheet==-1) 
			showSheet(tabSets[ts], tabSets[ts].defaultSheet);
}

function TabSet(rotate) {
	this.tabs = new Array();
	this.sheets = new Array();
	this.defaultSheet = '0';
	this.currentSheet = -1;
	this.rotation = false;
}

function clearRotate() {
	clearInterval(tabSets[this.getAttribute('tabgroup')].rotation);
}

function toggle(state) {
	
	if(this.className.indexOf('tab-') != -1){
		this.className = this.className.replace(/tab-(\w+)/, 'tab-'+state);
	}
	else
		this.className += ' tab-'+state;
}

function showSheetFromTab() {
	showSheet(tabSets[this.getAttribute('tabgroup')], this.getAttribute('forsheet'));
	this.blur();
	return false; //don't follow hyperlink
}

function showSheet(ts, sheet) {
	var sheets = ts.sheets;
	var show = false ;
	
	if((sheet!=ts.defaultSheet) && (sheet != 'rotate'))
		clearInterval(ts.rotation);
	
	if(!isNaN(parseInt(sheet)))
		show = parseInt(sheet);
	if(sheet == '_next' || sheet=='rotate')
		show = (ts.currentSheet +1) % sheets.length;
	if(sheet == '_prev')
		show = (ts.currentSheet -1) % sheets.length;
		
	if(show<0) show = sheets.length+show;
		
	for(var i=0; i< sheets.length; i++)
		if(sheets[i].id == sheet ||  i===show) {
			sheets[i].style.display = 'block';
			ts.currentSheet = i;
			ts.tabs[i].toggle('on');
		}
		else {
			sheets[i].style.display = 'none';
			ts.tabs[i].toggle('off');
		}
}

/* Look at parents until the 'tabset' attribute is set
function expects an node or element object*/
function find_tabset(x) {
	while ((x != document) && (!x.getAttribute('tabset'))){
		x = x.parentNode;
		xid = x.id;
		if(xid && xid.substring(0,7)=='tabset-')
			x.setAttribute('tabset', xid.substring(7));
	}
	return x;	
}