/*	DOMtab Version 3.1415927	Updated March the First 2006	written by Christian Heilmann	check blog for updates: http://www.wait-till-i.com		free to use, not free to resell*/domtab={	tabClass:'domtab', // class to trigger tabbing	listClass:'domtabs', // class of the menus	activeClass:'active', // class of current link	contentElements:'div', // elements to loop through	backToLinks:/#top/, // pattern to check "back to top" links	printID:'domtabprintview', // id of the print all link	showAllLinkText:'Printer Friendly Version', // text for the print all link	prevNextIndicator:'doprevnext', // class to trigger prev and next links	prevNextClass:'prevnext', // class of the prev and next list	prevLabel:'previous', // HTML content of the prev link	nextLabel:'next', // HTML content of the next link	prevClass:'prev', // class for the prev link	nextClass:'next', // class for the next link	init:function(){		var temp;		if(!document.getElementById || !document.createTextNode){return;}		var tempelm=document.getElementsByTagName('div');				for(var i=0;i<tempelm.length;i++){			if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}			domtab.initTabMenu(tempelm[i]);			domtab.removeBackLinks(tempelm[i]);			if(domtab.cssjs('check',tempelm[i],domtab.prevNextIndicator)){				domtab.addPrevNext(tempelm[i]);			}			domtab.checkURL();		}		if(document.getElementById(domtab.printID) 		   && !document.getElementById(domtab.printID).getElementsByTagName('a')[0]){			var newlink=document.createElement('a');			newlink.setAttribute('href','#');			domtab.addEvent(newlink,'click',domtab.showAll,false);			newlink.onclick=function(){return false;} // safari hack			newlink.appendChild(document.createTextNode(domtab.showAllLinkText));			document.getElementById(domtab.printID).appendChild(newlink);		}	},	checkURL:function(){		var id;		var loc=window.location.toString();		loc=/#/.test(loc)?loc.match(/#(\w.+)/)[1]:'';		if(loc==''){return;}		var elm=document.getElementById(loc);		if(!elm){return;}		var parentMenu=elm.parentNode.parentNode.parentNode;		parentMenu.currentSection=loc;		parentMenu.getElementsByTagName(domtab.contentElements)[0].style.display='none';		domtab.cssjs('remove',parentMenu.getElementsByTagName('a')[0].parentNode,domtab.activeClass);		var links=parentMenu.getElementsByTagName('a');		for(i=0;i<links.length;i++){			if(!links[i].getAttribute('href')){continue;}			if(!/#/.test(links[i].getAttribute('href').toString())){continue;}			id=links[i].href.match(/#(\w.+)/)[1];			if(id==loc){				var cur=links[i].parentNode.parentNode;				domtab.cssjs('add',links[i].parentNode,domtab.activeClass);				break;			}		}		domtab.changeTab(elm,1);		elm.focus();		cur.currentLink=links[i];		cur.currentSection=loc;	},	showAll:function(e){		document.getElementById(domtab.printID).parentNode.removeChild(document.getElementById(domtab.printID));		var tempelm=document.getElementsByTagName('div');				for(var i=0;i<tempelm.length;i++){			if(!domtab.cssjs('check',tempelm[i],domtab.tabClass)){continue;}			var sec=tempelm[i].getElementsByTagName(domtab.contentElements);			for(var j=0;j<sec.length;j++){				sec[j].style.display='block';			}		}		var tempelm=document.getElementsByTagName('ul');				for(i=0;i<tempelm.length;i++){			if(!domtab.cssjs('check',tempelm[i],domtab.prevNextClass)){continue;}			tempelm[i].parentNode.removeChild(tempelm[i]);			i--;		}		domtab.cancelClick(e);	},	addPrevNext:function(menu){		var temp;		var sections=menu.getElementsByTagName(domtab.contentElements);		for(var i=0;i<sections.length;i++){			temp=domtab.createPrevNext();			if(i==0){				temp.removeChild(temp.getElementsByTagName('li')[0]);			}			if(i==sections.length-1){				temp.removeChild(temp.getElementsByTagName('li')[1]);			}			temp.i=i; // h4xx0r!			temp.menu=menu;			sections[i].appendChild(temp);		}	},	removeBackLinks:function(menu){		var links=menu.getElementsByTagName('a');		for(var i=0;i<links.length;i++){			if(!domtab.backToLinks.test(links[i].href)){continue;}			links[i].parentNode.removeChild(links[i]);			i--;		}	},	initTabMenu:function(menu){		var id;		var lists=menu.getElementsByTagName('ul');		for(var i=0;i<lists.length;i++){			if(domtab.cssjs('check',lists[i],domtab.listClass)){				var thismenu=lists[i];				break;			}		}		if(!thismenu){return;}		thismenu.currentSection='';		thismenu.currentLink='';		var links=thismenu.getElementsByTagName('a');		for(i=0;i<links.length;i++){			if(!/#/.test(links[i].getAttribute('href').toString())){continue;}			id=links[i].href.match(/#(\w.+)/)[1];			if(document.getElementById(id)){				domtab.addEvent(links[i],'click',domtab.showTab,false);				links[i].onclick=function(){return false;} // safari hack				domtab.changeTab(document.getElementById(id),0);			}		}		id=links[0].href.match(/#(\w.+)/)[1];		if(document.getElementById(id)){			domtab.changeTab(document.getElementById(id),1);			thismenu.currentSection=id;			thismenu.currentLink=links[0];			domtab.cssjs('add',links[0].parentNode,domtab.activeClass);		}	},	createPrevNext:function(){		// this would be so much easier with innerHTML, darn you standards fetish!		var temp=document.createElement('ul');		temp.className=domtab.prevNextClass;		temp.appendChild(document.createElement('li'));		temp.getElementsByTagName('li')[0].appendChild(document.createElement('a'));		temp.getElementsByTagName('a')[0].setAttribute('href','#');		temp.getElementsByTagName('a')[0].innerHTML=domtab.prevLabel;		temp.getElementsByTagName('li')[0].className=domtab.prevClass;		temp.appendChild(document.createElement('li'));		temp.getElementsByTagName('li')[1].appendChild(document.createElement('a'));		temp.getElementsByTagName('a')[1].setAttribute('href','#');		temp.getElementsByTagName('a')[1].innerHTML=domtab.nextLabel;		temp.getElementsByTagName('li')[1].className=domtab.nextClass;		domtab.addEvent(temp.getElementsByTagName('a')[0],'click',domtab.navTabs,false);		domtab.addEvent(temp.getElementsByTagName('a')[1],'click',domtab.navTabs,false);		// safari fix		temp.getElementsByTagName('a')[0].onclick=function(){return false;}		temp.getElementsByTagName('a')[1].onclick=function(){return false;}		return temp;	},	navTabs:function(e){		var li=domtab.getTarget(e);		var menu=li.parentNode.parentNode.menu;		var count=li.parentNode.parentNode.i;		var section=menu.getElementsByTagName(domtab.contentElements);		var links=menu.getElementsByTagName('a');		var othercount=(li.parentNode.className==domtab.prevClass)?count-1:count+1;		section[count].style.display='none';		domtab.cssjs('remove',links[count].parentNode,domtab.activeClass);		section[othercount].style.display='block';		domtab.cssjs('add',links[othercount].parentNode,domtab.activeClass);		var parent=links[count].parentNode.parentNode;		parent.currentLink=links[othercount];		parent.currentSection=links[othercount].href.match(/#(\w.+)/)[1];		domtab.cancelClick(e);	},	changeTab:function(elm,state){		do{			elm=elm.parentNode;		} while(elm.nodeName.toLowerCase()!=domtab.contentElements)		elm.style.display=state==0?'none':'block';	},	showTab:function(e){		var o=domtab.getTarget(e);		if(o.parentNode.parentNode.currentSection!=''){			domtab.changeTab(document.getElementById(o.parentNode.parentNode.currentSection),0);			domtab.cssjs('remove',o.parentNode.parentNode.currentLink.parentNode,domtab.activeClass);		}		var id=o.href.match(/#(\w.+)/)[1];		o.parentNode.parentNode.currentSection=id;		o.parentNode.parentNode.currentLink=o;		domtab.cssjs('add',o.parentNode,domtab.activeClass);		domtab.changeTab(document.getElementById(id),1);		document.getElementById(id).focus();		domtab.cancelClick(e);	},/* helper methods */	getTarget:function(e){		var target = window.event ? window.event.srcElement : e ? e.target : null;		if (!target){return false;}		if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;}		return target;	},	cancelClick:function(e){		if (window.event){			window.event.cancelBubble = true;			window.event.returnValue = false;			return;		}		if (e){			e.stopPropagation();			e.preventDefault();		}	},	addEvent: function(elm, evType, fn, useCapture){		if (elm.addEventListener) 		{			elm.addEventListener(evType, fn, useCapture);			return true;		} else if (elm.attachEvent) {			var r = elm.attachEvent('on' + evType, fn);			return r;		} else {			elm['on' + evType] = fn;		}	},	cssjs:function(a,o,c1,c2){		switch (a){			case 'swap':				o.className=!domtab.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);			break;			case 'add':				if(!domtab.cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}			break;			case 'remove':				var rep=o.className.match(' '+c1)?' '+c1:c1;				o.className=o.className.replace(rep,'');			break;			case 'check':				var found=false;				var temparray=o.className.split(' ');				for(var i=0;i<temparray.length;i++){					if(temparray[i]==c1){found=true;}				}				return found;			break;		}	}}domtab.addEvent(window, 'load', domtab.init, false);	
