var MSIE4 = false, NS4 = false, OP = false;
if (document.all) {
	MSIE4 = true;
} else if (document.layers) {
	NS4 = true;
}
if (window.opera) {
	OP = true;
}

function addCssClass(node,cssClassName){
	if(!hasCssClass(node,cssClassName)){
		if(node.className != ""){
			node.className += " " + cssClassName;
		}else{
			node.className = cssClassName;
		}
	}
}
function hasCssClass(node,cssClassName){
	var classes = node.className.split(" ");
	for(var i = 0; i<classes.length;i++){
		if(classes[i]==cssClassName){
			return true;
		}
	}
	return false;
}

function removeCssClass(node,cssClassName){
	var classes = node.className.split(" ");
	var classesStr = "";
	var istFirst = true;
	for(var i = 0; i<classes.length;i++){
		if(classes[i]!=cssClassName){
			if(!istFirst){
				classesStr += " ";
			}else{
				istFirst = false;
			}
			classesStr += classes[i];
		}
	}
	node.className = classesStr;
}

function nextSiblingNode(node,nodeName,acceptSelf){
	if(!acceptSelf){
		node = node.nextSibling;
	}
	while(node!=null){
		if(node.nodeName == nodeName){
			return node;
		}
		node = node.nextSibling;
	}
	return null;
}
function previousSiblingNode(node,nodeName,acceptSelf){
	if(!acceptSelf){
		node = node.previousSibling;
	}
	while(node!=null){
		if(node.nodeName == nodeName){
			return node;
		}
		node = node.previousSibling;
	}
	return null;
}
function nextParentNode(node,nodeName,acceptSelf){
	if(!acceptSelf){
		node = node.parentNode;
	}
	while(node != null){
		if(node.nodeName == nodeName){
			return node;
		}
		node = node.parentNode;
	}
	return null;
}
function nextParentNodeById(node,id,acceptSelf){
	if(!acceptSelf){
		node = node.parentNode;
	}
	while(node != null){
		if(node.id == id){
			return node;
		}
		node = node.parentNode;
	}
	return null;
}
function countNodes(node,nodeName,id,acceptSelf){
	var i = 0;
	if(!acceptSelf){
		node = node.parentNode;
	}
	while(node != null){
		if(node.id == id){
			return i;
		}
		if( (node.nodeName==nodeName) || (nodeName=="") ){
			i++;		
		}
		node = node.parentNode;
	}
	return -1; // id nicht gefunden
}

function openParents(node,nodeName,id){
	while(node != null){
		if(node.id == id){
			return;
		}
		if( (node.nodeName==nodeName) || (nodeName=="") ){
			addCssClass(node,"open");		
		}
		node = node.parentNode;
	}

}

function hideAll(node){
	if(node.nodeName == 'LI'){
		removeCssClass(node,"open");
	}
	var uls = node.getElementsByTagName('li');
	for(var i=0;i<uls.length;i++){
		removeCssClass(uls[i],"open");
	}
}
function hideHoleMenu(){
	externTimer=-1; // Wichtig! damit ein neuer Timer gestartet werden kann.
	hideAll(nextSiblingNode(document.getElementById('dynamicMenu').firstChild,'UL',true));
	addCssClass(document.getElementById('dynamicMenu'),"defaultMenu");
	isMenuOpen = false;
}


/* Beim wechsel zwischen unterschiedlichen Menüpunkten*/
function hideAndShow(knoten){
	isMenuOpen = true;
	removeCssClass(document.getElementById('dynamicMenu'),"defaultMenu");
	openParents(knoten,'LI','dynamicMenu');
	var lauf = nextSiblingNode(knoten,'LI',false);
	while(lauf != null){
		if(lauf.nodeName == 'LI'){
			hideAll(lauf);
		}
		lauf = lauf.nextSibling;
	}
	lauf = previousSiblingNode(knoten,'LI',false);
	while(lauf != null){
		if(lauf.nodeName == 'LI'){
			hideAll(lauf);
		}
		lauf = lauf.previousSibling;
	}
	/*
	lauf = knoten.getElementsByTagName('ul');
	if(lauf != null){
		if(lauf[0] != null){
			// lauf[0].style['visibility'] = 'visible';
			addCssClass(lauf[0],"open");
		}
	}
	*/
	if(knoten != null){
		addCssClass(knoten,"open");
	}
	
	
}
function startHideAllTimer(){
	if(externTimer==-1 && isMenuOpen){
		externTimer = window.setTimeout("hideHoleMenu()", 500);
		stopHideAndShowTimer();
	}
}
function stopHideAllTimer(){
	window.clearTimeout(externTimer);
	externTimer = -1;
}
function stopHideAllTimerAndHideAll(){
	stopHideAllTimer();
	hideHoleMenu();
}

function startHideAndShowTimer(param){
	if(internTimer!=-1){
		window.clearTimeout(internTimer);
	}
	InternTimerParam = param; //global speichern
	internTimer = window.setTimeout("hideAndShow(InternTimerParam)", 100);

}
function stopHideAndShowTimer(){
	window.clearTimeout(internTimer);
	internTimer = -1;
}


function clickHandler (Ereignis) {
	var li = null;
	if(MSIE4){
		li = event.srcElement;
	}else {
		li = Ereignis.target;
	}
	li = nextParentNode(li,'LI',true);
	if(li != null){
		var countUls = countNodes(li,'LI','dynamicMenu',true);
		/* onklick */
		if(countUls==1 && !isMenuOpen){
//		if(countUls==1){
			hideAndShow(li);
		}else if(countUls==1 && isMenuOpen){
			stopHideAllTimerAndHideAll();
		}else if(countUls==-1){
			stopHideAllTimerAndHideAll();
		}
	}else{
		stopHideAllTimerAndHideAll();
	}
	/* Netscape */
	if(NS4){
		window.routeEvent(Ereignis);
	}
}

function mouseOverHandler (Ereignis) {
	var li = null;
	if(MSIE4){
		li = event.srcElement;
	}else {
		li = Ereignis.target;
	}
	li = nextParentNode(li,'LI',true);
	if(li != null){
		var countUls = countNodes(li,'LI','dynamicMenu',true);
		if(countUls>0){
			stopHideAllTimer();
		}
	
		if(countUls>1){
//		if(countUls>0){
			startHideAndShowTimer(li);

		}else if(countUls==1 && isMenuOpen){
//		}else if(countUls==1){
			stopHideAndShowTimer();
			hideAndShow(li);
		}else if(countUls==-1){
//			startHideAllTimer();
		}

	}else{
//		startHideAllTimer();
	}
	if(NS4){
		window.routeEvent(Ereignis);
	}
}




if(NS4){
  	document.captureEvents(Event.CLICK);
}
var externTimer = -1;
var internTimer = -1;
var InternTimerParam;
var isMenuOpen = false;
document.onclick = clickHandler;
document.onmouseover = mouseOverHandler;