TabManager = function(SName, DontUseHash, withShowAll) {
	var constructed = false;
	if (SName=="") return false;
	var self = this;
	var SelectorName = SName;
	var currentTab = "";
	var useHash = (!DontUseHash);
	var ShowAll = (!(!withShowAll));
	var ShowAllName = "Alle";
	var ShowAllID = "show_all_tabs";
	var TabPrefix = SelectorName+"_tab_";
	var ContentPrefix = SelectorName+"_";
	
	// Register Container holen
	var	TAB_SPACE = document.getElementById(SelectorName);	
	if (!TAB_SPACE) return false;
	
	// FUNKTIONEN
	// Tab wählen
	this.Select = function (newTab, dontSwitchHash) {
		if (!allTabsArray) return false;
		if (newTab == "") newTab = allTabsArray[0];
		if (currentTab == newTab) return false;
		newTab = decodeURIComponent(newTab);
		
		if (useHash && !dontSwitchHash) {
			if (typeof hashManager != "undefined") hashManager.setHash(SelectorName, newTab);
			else location.hash = newTab;
		}
		if (ShowAll && newTab == ShowAllID)  {
			for (var i = 1; i < allTabsArray.length; i++) {
				var Tab = allTabsArray[i];
				document.showID(ContentPrefix + Tab);
				document.setClass(TabPrefix + Tab, "nonsel");
			}
			document.setClass(TabPrefix + newTab, "sel");	
		} else {
			if (ShowAll && currentTab==ShowAllID) {
				document.setClass(TabPrefix + currentTab, "nonsel");
				for (var i = 1; i < allTabsArray.length; i++) {
					var Tab = allTabsArray[i];
					document.hideID(ContentPrefix + Tab);
					document.setClass(TabPrefix + Tab, "nonsel");
				}
			} else {
				if (currentTab!="") {
					document.hideID(ContentPrefix + currentTab);
					document.setClass(TabPrefix + currentTab, "nonsel");
				}
			}
			document.showID(ContentPrefix + newTab);
			document.setClass(TabPrefix + newTab, "sel");
		}
		currentTab = newTab;
	}
	
	this.Unload = function () {
		if (useHash && typeof hashManager != "undefined" ) {
			hashManager.remHashListener("TabManager-" + self.SelectorName);
		}
	}
	
	this.addLink = function(id, name, url) {
		// Tab erstellen
		var cESel = document.createElement("div");
		cESel.id = TabPrefix + id;
		cESel.className = "tablink";
		cESel.appendChild(document.createTextNode(name));
		cESel.onclick = function() {document.location = url;}
		TAB_SPACE.appendChild(cESel);
	}
	
	var allTabsArray = new Array();
	
	// Register Content holen
	var CList	= document.getElementsByClassName(SelectorName);
	if (CList.length<=0) return false;
	
	// Register aufbauen 
	if (ShowAll) {
		// Tab erstellen
		var cESel = document.createElement("div");
		cESel.id = TabPrefix + ShowAllID;
		cESel.className = "nonsel";
		cESel.appendChild(document.createTextNode(ShowAllName));
		cESel.onclick = function() {
			self.Select(
				this.id.slice(
					TabPrefix.length
				)
			);
		}
		TAB_SPACE.appendChild(cESel);
		allTabsArray.push(cIden);
	}
	for (var ci=0; ci < CList.length; ci++) {
		// Infos holen
		var cElem = CList[ci];
		var cIden = cElem.id;
		var cName = cElem.getAttribute("name");
		if (cName == "") continue;
		// Tab erstellen
		var cESel = document.createElement("div");
		cESel.id = TabPrefix + cIden;
		cESel.className = "nonsel";
		cESel.appendChild(document.createTextNode(cName));
		cESel.onclick = function() {
			self.Select(
				this.id.slice(
					TabPrefix.length
				)
			);
		}
		TAB_SPACE.appendChild(cESel);
		// Werte überschreiben
		cElem.id = ContentPrefix+cIden;
		cElem.setAttribute("name", "");
		allTabsArray.push(cIden);
	}
	
	for (var i = 0; i < allTabsArray.length; i++) {
		var Tab = allTabsArray[i];
		document.hideID(ContentPrefix + Tab);
		document.setClass(TabPrefix + Tab, "nonsel");
	}
	
	var aktHash = "";
	if (useHash) {
		if (typeof hashManager != "undefined" ) {
			aktHash = hashManager.getHash(SelectorName);
			hashManager.addHashListener(
				function () {
					if (allTabsArray.getIndex(hashManager.getHash(SelectorName))) 
						self.Select(hashManager.getHash(SelectorName));
				} , "TabManager-" + SelectorName);
		}
		else {
			aktHash = location.hash.slice(1);
			window.setInterval(function () {
				if (allTabsArray.getIndex(location.hash.slice(1)))
					self.Select(location.hash.slice(1));
			}, 250);
		}
	}
	if (allTabsArray.getIndex(aktHash)) this.Select(aktHash);
	else this.Select(allTabsArray[0], true);
	constructed = true;
}
