/*     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:'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); 