/*


*/

var tabMaker = {
	DLs:           false,
	DTs:           false,
	on:            false,
	DLHeight:      new Array(),
	/* constructor - sets events */
	init: function(){
		var i=0;
		var ii=0;
		// only loop thru items once
		if(tabMaker.on == false){
			tabMaker.DLs = document.getElementsByTagName('dl');
			//loop through each DL on page
			while (tabMaker.DLs.length > i) {
				//only affect DLs with a class of 'sidetab'
				if (tabMaker.DLs[i].className == 'sidetab'){
					//strip whitespace
					tabMaker.stripWhitespace(tabMaker.DLs[i]);
					tabMaker.DTs = tabMaker.DLs[i].getElementsByTagName('dt');
					tabMaker.stripWhitespace(tabMaker.DTs[i]);
					//change tabs DL class, this way sidetabs is text only without javascript enabled also set an index number into the class to be used to find this height later
					tabMaker.DLs[i].className = 'sidetab on '+i;
					// loop thru all DT elements
					while (tabMaker.DTs.length > ii){
						//current Location
						currentTab = tabMaker.DTs[ii];
						// add events to links
						tabMaker.addEvt(currentTab,'click',tabMaker.activateTab);
						ii++;
					};
					ii=0;
				};
				//set inital height of all tabs
				tabMaker.DLHeight[i] = currentTab.offsetTop+currentTab.offsetHeight;
				//set first tab of current DL to be enabled
				tabMaker.enableTab(tabMaker.DLs[i].firstChild);
				i++;
			};
			
			//init has occured
			tabMaker.on = true;
		};
	},
	/* activate tab */
	activateTab: function() {
		var evt = this;
		//set new active tab
		tabMaker.enableTab(evt);
	},
	/* enable tab */
	enableTab: function(tabToEnable) {
		var thisTabContent = tabToEnable.nextSibling;
		var thisDL = tabToEnable.parentNode;
		
		//hide all tabs in this dl
		tabMaker.hideTabs(thisDL);
		//set positions
		var tabWidth = tabToEnable.offsetWidth;
		var tabHeight = tabToEnable.offsetHeight;
		var tabOffsetTop = tabToEnable.offsetTop;
		var tabContainerWidth = tabToEnable.parentNode.offsetWidth;
		//set current tab to active class
		tabToEnable.className = 'active';
		thisTabContent.className = 'active';
		//set correct vertical location of DD
		var newTopOffset = (tabOffsetTop + tabHeight)*-1;
		thisTabContent.style.top = newTopOffset+'px';
		var newWidth = tabContainerWidth - tabWidth - 26;
		thisTabContent.style.width = newWidth+'px';
		//get the height of this tab
		var contentHeight = thisTabContent.offsetHeight;
		//get this DT's parent DL's index number in case there are multiple DL tabs on one page
		var thisDLIndex = tabMaker.Right(thisDL.className,1);
		//get the height of this tab's DL based on its index number
		var thisDLHeight = tabMaker.DLHeight[thisDLIndex];
		if (contentHeight > thisDLHeight) {
			thisDL.style.height = contentHeight+'px';
		} else {
			thisDL.style.height = thisDLHeight+'px';
		};
	},
	/* hides all content (DDs) in a DL */
	hideTabs: function(dl) {
		var i =0;
		var tabs = dl.getElementsByTagName('dt');
		var content = dl.getElementsByTagName('dd');
		while (tabs.length > i) {
			tabs[i].className = ''; //set tab to inactive class
			content[i].className = '';//set content to no class
			i++;
		};
	},
	/* change tab width */
	changeWidth: function(e) {
		var dl = e.parentNode.parentNode.parentNode;
		dl.style.width = e.value;
		tabMaker.reinit();
	},
	/* reinitialize tabs */
	reinit: function(){
		tabMaker.on = false;
		var i=0;
		tabMaker.DLs = document.getElementsByTagName('dl');
			while (tabMaker.DLs.length > i) {
				if (tabMaker.DLs[i].className == 'sidetab on '+i){
					tabMaker.DLs[i].className = 'sidetab';
				};
				i++;
			};
		tabMaker.init();
	},
	addEvt: function(element, type, handler) {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = tabMaker.addEvt.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			};
		};
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = tabMaker.handleEvent;
	},
	handleEvent: function(event) {
		var returnValue = true;
		// grab the event object (IE uses a global event object)
		event = event || tabMaker.fixEvent(window.event);
		// get a reference to the hash table of event handlers
		var handlers = this.events[event.type];
		// execute each event handler
		for (var i in handlers) {
			this.$$handleEvent = handlers[i];
			if (this.$$handleEvent(event) === false) {
				returnValue = false;
			};
		};
		return returnValue;
	},
	fixEvent: function(event) {
		// add W3C standard event methods
		event.preventDefault = tabMaker.fixEvent.preventDefault;
		event.stopPropagation = tabMaker.fixEvent.stopPropagation;
		return event;
	},
	stripWhitespace: function(el){
		for(var i = 0; i < el.childNodes.length; i++){
			var node = el.childNodes[i];
			if( node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
				node.parentNode.removeChild(node);
			};
		};
	},
	Right: function(str, n){
		if (n <= 0) {
			return "";
		} else if (n > String(str).length) {
			return str;
		} else {
			var iLen = String(str).length;
			return String(str).substring(iLen, iLen - n);
		};
	}
	
};
tabMaker.fixEvent.preventDefault = function() {this.returnValue = false;};
tabMaker.fixEvent.stopPropagation = function() {this.cancelBubble = true;};
tabMaker.addEvt.guid = 1;

/* LOAD SCRIPT */
	/* for Mozilla */
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded", tabMaker.init, null);
		};
		
	/* for Internet Explorer */
	/* NOTE - if you place this JavaScript file or the ie_onload.js in a directory other than 'js' you will need to modify the document.write line below */
		/*@cc_on @*/
		/*@if (@_win32)
			document.write("<script defer src=js/ie_onloadtabs.js><"+"/script>");
		/*@end @*/
		
	/* for other browsers */
		tabMaker.addEvt( window, 'load', tabMaker.init);
