/*

	DOMtab Version 3.1415927

	Updated March the First 2006

	written by Christian Heilmann

	check blog for updates: http://www.wait-till-i.com	

	Bundled with Mimbo Pro with permission by the author

*/



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:'show all content', // 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);

	

