function TabBar(tabULName) { // Constructor
	this.getTabNames = getTabNames;
	this.tabs = this.getTabNames(tabULName);
	this.formerActiveTabId = this.tabs[0];
	this.toggleTabs = toggleTabs;
	this.parseDeepLinking = parseDeepLinking;
	this.linkFromTab = linkFromTab;
}

function getTabNames(tabULName) {
	var tabs = new Array();
	var tabList;
	if (document.getElementById(tabULName) != null) {
	    tabList = document.getElementById(tabULName).getElementsByTagName("li");
	    for (i = 0; i < tabList.length; i++) tabs[i] = tabList[i].id;
	}
	return tabs;
}


function linkFromTab(tabId) {
	if (tabId != this.formerActiveTabId ) {// Do nothing if tab's already active
		// Reload page and append ID to query string
		location.href = location.pathname + "?tab=" + tabId;
	}
	return false;
}


function toggleTabs(tabId) {
	var tabToMakeCurrent = document.getElementById(tabId);

	if (tabId != this.formerActiveTabId ) {// Do nothing if tab's already active
		// Activate new content/tab
		tabToMakeCurrent.className = tabToMakeCurrent.className.replace("off", "on");
		var contentToMakeVisible = document.getElementById(tabId + "_content");
		contentToMakeVisible.className = "visible";
	
		// Deactivate old content/tab
		var tabToHide = document.getElementById(this.formerActiveTabId);
		tabToHide.className = tabToHide.className.replace("on", "off");
		var contentToHide = document.getElementById(this.formerActiveTabId + "_content");
		contentToHide.className = "hidden";
	}

	// Set id so function knows which tab to make inactive
	// next time regardless of where it's called from, e.g., a link
	this.formerActiveTabId = tabId;
	return false;
}

function parseDeepLinking() {
	qs = new Querystring();
	var tabValFromQS = qs.get('tab');
	
	// Parse query string, activate tab, if nec.
	if (tabValFromQS != null) {
		switch (tabValFromQS.length) {
			case 1: // Activate tab using single digit
				this.toggleTabs(this.tabs[tabValFromQS - 1]);
				this.formerActiveTabId = this.tabs[tabValFromQS - 1];
				break;

			case 2: // Activate tab using 2 digits
				this.toggleTabs(this.tabs[tabValFromQS - 1]);
				this.formerActiveTabId = this.tabs[tabValFromQS - 1];
				break;

			default: // Activate tab using ID/name
				this.toggleTabs(tabValFromQS);
		}
	}
}


function Querystring(qs) { // optionally pass a querystring to parse
	this.params = new Object();
	this.get = Querystring_get;
	
	if (qs == null) qs = location.search.substring(1,location.search.length);
	if (qs.length == 0) return

	var args = qs.split('&') // parse out name/value pairs separated via &
	
	// split out each name=value pair
	for (var i = 0; i < args.length; i++) {
		var value;
		var pair = args[i].split('=')
		var name = unescape(pair[0])

		if (pair.length == 2) {
			value = unescape(pair[1]);
		} else {
			value = name;
		}
		
		this.params[name] = value;
	}
}

function Querystring_get(key, default_) {
	// Changes UNDEFINED to NULL
	if (default_ == null) default_ = null;
	
	var value=this.params[key]
	if (value==null) value=default_;
	
	return value
}