/*
	DOM Menu (open tree with current page)
	
	Written for Henda Travel by Joachim Herkenrath 2009
	based on PureDOM explorer 3.1 written by Christian Heilmann (http://icant.co.uk)
*/

menue={
	// CSS classes
	menueClass:'menue',
	hideClass:'hide',
	showClass:'show',
	parentClass:'parent',
	currentClass:'current',
//	images added to the parent links 
	openImage:'http://henda.ch/images/Layout/minus.gif',
	closedImage:'http://henda.ch/images/Layout/plus.gif',
	openMessage:'close section',
	closedMessage:'open section',
//	boolean to keep the section with the STRONG open or not.
 	 keepCurrentOpen:true,
//	boolean to make the parent link collapse the section or not 
	linkParent:false,
	
	init:function(){
		menue.createClone();
		if(!document.getElementById || !document.createTextNode){return;}
		
		// get current page
		var sPath = window.location.pathname;
		var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
		
		var uls=document.getElementsByTagName('ul');
		for(var i=0;i<uls.length;i++){
			var inneruls,parentLI;
			if(!menue.cssjs('check',uls[i],menue.menueClass)){continue;}
			var inneruls=uls[i].getElementsByTagName('ul');
			for(var j=0;j<inneruls.length;j++){
				parentLI=inneruls[j].parentNode;

				// check all parent links and expand if current page is found
				var sLinkUL=inneruls[j].parentNode.firstChild.href;
				var sLinkULPage = sLinkUL.substring(sLinkUL.lastIndexOf('/') + 1);
				if (sLinkULPage == sPage) {var currentFound='true';}
				else {var currentFound='false';}
				var links=inneruls[j].getElementsByTagName("a");
				// check all links and expand if current page is found			
				for (var k=0;k<links.length;k++){
					var sLink = links[k].href;
	        			var sLinkPage = sLink.substring(sLink.lastIndexOf('/') + 1);
					if(sPage == sLinkPage){
						var currentFound='true';
						break;
					}
	        	}
			    // expand if current page is found or link is marked 
			    if(parentLI.getElementsByTagName('strong')[0] || currentFound == 'true'){
					menue.cssjs('add',parentLI,menue.currentClass);
					if(menue.keepCurrentOpen === true){continue;}
			    }
			    menue.cssjs('add',parentLI,menue.parentClass);
			    parentLI.insertBefore(menue.clone.cloneNode(true),parentLI.firstChild);
			    menue.cssjs('add',inneruls[j],menue.hideClass);
			    menue.addEvent(parentLI.getElementsByTagName('a')[0],'click',menue.showhide,false);
			    parentLI.getElementsByTagName('a')[0].onclick=function(){return false;} // Safari hack
			    if(menue.linkParent){
					menue.addEvent(parentLI.getElementsByTagName('a')[1],'click',menue.showhide,false);
					parentLI.getElementsByTagName('a')[1].onclick=function(){return false;} // Safari hack
			    }
			}
		}
	},
	showhide:function(e){
		var image,message;
		var elm=menue.getTarget(e);
		var ul=elm.parentNode.getElementsByTagName('ul')[0];
		var img=elm.parentNode.getElementsByTagName('img')[0];
		if(menue.cssjs('check',ul,menue.hideClass)){
			message=menue.openMessage;
			image=menue.openImage;
			menue.cssjs('remove',elm.parentNode.getElementsByTagName('ul')[0],menue.hideClass);
			menue.cssjs('add',elm.parentNode.getElementsByTagName('ul')[0],menue.showClass);
		} else {
			message=menue.closedMessage;
			image=menue.closedImage;
			menue.cssjs('remove',elm.parentNode.getElementsByTagName('ul')[0],menue.showClass);
			menue.cssjs('add',elm.parentNode.getElementsByTagName('ul')[0],menue.hideClass);
		}
		img.setAttribute('src',image);
		img.setAttribute('alt',message);
		img.setAttribute('title',message);
		menue.cancelClick(e);
	},
	createClone:function(){
		menue.clone=document.createElement('a');
		menue.clone.setAttribute('href','#');
		menue.clone.appendChild(document.createElement('img'));
		menue.clone.getElementsByTagName('img')[0].src=menue.closedImage;
		menue.clone.getElementsByTagName('img')[0].alt=menue.closedMessage;
		menue.clone.getElementsByTagName('img')[0].title=menue.closedMessage;
	},
/* 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=!menue.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
				if(!menue.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':
				return new RegExp("(^|\s)" + c1 + "(\s|$)").test(o.className)
			break;
		}
	}
}
menue.addEvent(window, 'load', menue.init, false);

