var TabsheetsConfig = {
	
	tabClassName : 'tab',
	sheetClassName : 'sheet',
	activeTabClassName : 'selected',
	invisibleClassName : 'invisible',
	allTabsheets : [],
	
	setActive : function(tabsheetsId, tabNumber) {
	
		if(this.allTabsheets[tabsheetsId]) {
			this.allTabsheets[tabsheetsId].setActive(tabNumber);
		}		
		
		return false;
	
	}
	
};

function Tabsheets(tabsId, sheetsId, tabNumber) {
	
	this.tabsContainer = document.getElementById(tabsId);
	this.sheetsContainer = document.getElementById(sheetsId);
	this.tabs = [];	
	this.sheets = [];
	
	if(this.tabsContainer) {
	
		var tabsChildren = this.tabsContainer.childNodes;
						
		for(var i = 0; i < tabsChildren.length; i++) {						
						
			if(tabsChildren[i].nodeType == 1 && matchClass(tabsChildren[i], TabsheetsConfig.tabClassName)) {							
				this.tabs[this.tabs.length] = { caption : tabsChildren[i].innerHTML, node : tabsChildren[i] };													
			}
							
		}
						
		var sheetsChildren = this.sheetsContainer.childNodes;
				
		for(var i = 0; i < sheetsChildren.length; i++) {				
						
			if(sheetsChildren[i].nodeType == 1 && matchClass(sheetsChildren[i], TabsheetsConfig.sheetClassName)) {													
				this.sheets[this.sheets.length] = sheetsChildren[i];						
			}	
							
		}
				
		this.id = TabsheetsConfig.allTabsheets.length;						
		
		TabsheetsConfig.allTabsheets[TabsheetsConfig.allTabsheets.length] = this;
		
		this.setActive(tabNumber);
		
	}
	
}

Tabsheets.prototype.setActive = function(tabNumber) {	
	
	for(var i = 0; i < this.tabs.length; i++) {
		
		if(this.sheets[i]) {
		
			if(i == tabNumber) {
			
				addClass(this.tabs[i].node, TabsheetsConfig.activeTabClassName);				
				this.tabs[i].node.innerHTML = this.tabs[i].caption;
				
				removeClass(this.sheets[i], TabsheetsConfig.invisibleClassName);								
				
			}
			else {
			
				removeClass(this.tabs[i].node, TabsheetsConfig.activeTabClassName);
				this.tabs[i].node.innerHTML = '<a href="./" onclick="return TabsheetsConfig.setActive(' + this.id + ', ' + i + ')">' + this.tabs[i].caption + '</a>';
				
				addClass(this.sheets[i], TabsheetsConfig.invisibleClassName);
			
			}						
			
		}
		
	}

}

function matchClass(element, className) {

	return element.className.match(new RegExp('(^|\\s+)' + className + '($|\\s+)'));		

}

function addClass(element, className) {

	if(!matchClass(element, className)) {
		element.className += ' ' + className;
	}

}

function removeClass(element, className) {
	
	element.className = element.className.replace(new RegExp('(.*)(^|\\s+)(' + className + ')($|\\s+)(.*)'), '$1$4$5').replace(/(^)\s/, '$1');	

}