// Menutree javascript

menuTree={
	// CSS classes
	menuTreeClass:'menutree',
	hideClass:'hide',
	showClass:'show',
    chosenClass:'chosen',
	chosenClassFirstItem:'chosenfirst',
	parentClass:'parent',
	currentClass:'current',
	currentClassFirstItem:'currentfirst',
	// images added to the parent links
	openImage:'images/menutree/transparent.gif',
	closedImage:'images/menutree/transparent.gif',
	openMessage:'',
	closedMessage:'toon submenu',
	treeobject: null,

	init:function() {
		var inneruls,parentLI;
		//menuTree.createClone();
		if(!document.getElementById || !document.createTextNode){return;}

		document.body.onclick = menuTree.hideall;

		var uls=document.getElementsByTagName('ul');
		for(var i=0;i<uls.length;i++){
			if(!menuTree.cssjs('check',uls[i],menuTree.menuTreeClass)){continue;} //menutree ul only, skip others
			
			menuTree.treeobject = uls[i];

			var innerlis=menuTree.getChildsByTagName(uls[i],'li')
			//alert (innerlis.length);
			//add first and last
			if (innerlis.length==1) {
				menuTree.cssjs('add',innerlis[0],'firstlast');
			} else {
				menuTree.cssjs('add',innerlis[0],'first');
				menuTree.cssjs('add',innerlis[innerlis.length-1],'last');
			}
	
			var inneruls=uls[i].getElementsByTagName('ul');
			
			for(var j=0;j<inneruls.length;j++){
				
				innerlis=menuTree.getChildsByTagName(inneruls[j],'li')
				if (innerlis.length>0) {
					//walk through see if any one is selected
					var selectedNode;
					for (var k=0;k<innerlis.length;k++){
						selectedNode = '';
						if (k==0) { 
						//first li

							//if (menuTree.getChildsByTagName(innerlis[k],'strong')[0]) selectedNode = 'selected';
							if (innerlis[k].getElementsByTagName('strong')[0]) selectedNode = 'selected';

							if (innerlis.length==1) {		
								if (innerlis[k].getElementsByTagName('li').length>0) {
									menuTree.cssjs('add',innerlis[k],'firstlastsubs'+selectedNode);
								} else {
									menuTree.cssjs('add',innerlis[k],'firstlast'+selectedNode);
								}
							} else {
								menuTree.cssjs('add',innerlis[k],'first'+selectedNode);
							}
						} else if (k<innerlis.length-1) {
						//middle li
//							if (menuTree.getChildsByTagName(innerlis[k],'strong')[0]) menuTree.cssjs('add',innerlis[k],'selected');
							if (innerlis[k].getElementsByTagName('strong')[0]) menuTree.cssjs('add',innerlis[k],'selected');

						} else { 
						//end li
//							if (menuTree.getChildsByTagName(innerlis[k],'strong')[0]) selectedNode = 'selected';
							if (innerlis[k].getElementsByTagName('strong')[0]) selectedNode = 'selected';
							if (innerlis[k].getElementsByTagName('li').length>0) {
								menuTree.cssjs('add',innerlis[k],'lastsubs'+selectedNode);
							} else {
								menuTree.cssjs('add',innerlis[k],'last'+selectedNode);
							}
						}
					
					}
					
					
				}
				
				parentLI=inneruls[j].parentNode;
				if(parentLI.getElementsByTagName('strong')[0]){
					if (menuTree.cssjs('check',parentLI.parentNode,menuTree.menuTreeClass)) { //only add current to highest nodes
						//menuTree.cssjs('add',parentLI,menuTree.currentClass);
						if (j==0) {
							menuTree.cssjs('add',inneruls[j].parentNode.getElementsByTagName('a')[0],menuTree.currentClassFirstItem);
						} else {
							menuTree.cssjs('add',inneruls[j].parentNode.getElementsByTagName('a')[0],menuTree.currentClass);
						}
					}
					continue;
				}
				menuTree.cssjs('add',parentLI,menuTree.parentClass);
				//parentLI.insertBefore(menuTree.clone.cloneNode(true),parentLI.firstChild); // no images needed
				menuTree.cssjs('add',inneruls[j],menuTree.hideClass);
				if (menuTree.cssjs('check',parentLI.parentNode,menuTree.menuTreeClass)) { // only highest nodes
					menuTree.addEvent(parentLI.getElementsByTagName('a')[0],'click',menuTree.showhide,false);
					parentLI.getElementsByTagName('a')[0].onclick=function(){return false;} // Safari hack
				}
			}
		}
	},
	showhide:function(e) {
		var image,message;
		var elm=menuTree.getTarget(e);
		var ul=elm.parentNode.getElementsByTagName('ul')[0];
		//var img=elm.parentNode.getElementsByTagName('img')[0];
		if(menuTree.cssjs('check',ul,menuTree.hideClass)){
	        // switch any other switched-on items off
			var otheruls=elm.parentNode.parentNode.getElementsByTagName('ul');
			for(var j=0;j<otheruls.length;j++){
				//only top level ones
                if (otheruls[j].parentNode.parentNode.className==menuTree.menuTreeClass) {
					if(menuTree.cssjs('check',otheruls[j],menuTree.showClass)){ // if switched on
						//alert ('switched on ' + j.toString())
						menuTree.cssjs('remove',otheruls[j].parentNode,menuTree.chosenClassFirstItem);
						menuTree.cssjs('remove',otheruls[j].parentNode,menuTree.chosenClass);
						menuTree.cssjs('remove',otheruls[j],menuTree.showClass);
						menuTree.cssjs('add',otheruls[j],menuTree.hideClass);
					}
                }
			}
			if(menuTree.cssjs('check',elm.parentNode,'first parent')){
				menuTree.cssjs('add',elm.parentNode,menuTree.chosenClassFirstItem);
			} else {
				menuTree.cssjs('add',elm.parentNode,menuTree.chosenClass);
			}

			//message=menuTree.openMessage;
			//image=menuTree.openImage;
			menuTree.cssjs('remove',elm.parentNode.getElementsByTagName('ul')[0],menuTree.hideClass);
			menuTree.cssjs('add',elm.parentNode.getElementsByTagName('ul')[0],menuTree.showClass);

		} else {
			//message=menuTree.closedMessage;
			//image=menuTree.closedImage;
			menuTree.cssjs('remove',elm.parentNode,menuTree.chosenClassFirstItem);
			menuTree.cssjs('remove',elm.parentNode,menuTree.chosenClass);
			menuTree.cssjs('remove',elm.parentNode.getElementsByTagName('ul')[0],menuTree.showClass);
			menuTree.cssjs('add',elm.parentNode.getElementsByTagName('ul')[0],menuTree.hideClass);
		}
		//img.setAttribute('src',image);
		//img.setAttribute('alt',message);
		//img.setAttribute('title',message);
		menuTree.cancelClick(e);
	},
    hideall:function() {
		var otheruls = menuTree.treeobject.getElementsByTagName( 'ul' );
		for(var j=0;j<otheruls.length;j++){
			//only top level ones
			if (otheruls[j].parentNode.parentNode.className==menuTree.menuTreeClass) {
				if(menuTree.cssjs('check',otheruls[j],menuTree.showClass)){ // if switched on
					//alert ('switched on ' + j.toString())
					menuTree.cssjs('remove',otheruls[j].parentNode,menuTree.chosenClassFirstItem);
					menuTree.cssjs('remove',otheruls[j].parentNode,menuTree.chosenClass);
					menuTree.cssjs('remove',otheruls[j],menuTree.showClass);
					menuTree.cssjs('add',otheruls[j],menuTree.hideClass);
				}
			}
		}

    },

/* 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;
	},
	getChildsByTagName:function(e,tagName) {
	var childs = [];
	for(var j=0;j<e.childNodes.length;j++){
		if(e.childNodes[j].nodeName.toLowerCase()==tagName.toLowerCase()) childs.push(e.childNodes[j]);
	}
	return childs;
	},	
	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=!menuTree.cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
				if (!menuTree.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;
		}
	}
}

menuTree.addEvent(window, 'load', menuTree.init, false);