var rootTree;
var lastMenu;
var stopMenu;
var timer;
addEvent(window, "load", initMenu);


function addEvent(obj, evType, fn){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, true);
    return true;
  } else if (obj.attachEvent){
	var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
   return;
  }
}

function initMenu() {
	if( document.getElementById ) {
		rootTree = document.getElementById("myTree");
        } else {
		return;
	}
	rootTree.parentUl = null;
        buildTree(rootTree);
        lastMenu = rootTree;
        stopMenu = rootTree;
        setAllDisplay(rootTree, "block");
        setAllDisplay2(rootTree, "hidden");
}

function setAllDisplay(menu, state) {
	var elDiv = findElement("DIV", menu);
	for( var i = 0; i < elDiv.childNodes.length; i++ ) {
		var elLi = elDiv.childNodes[i];
		if(elLi.nodeName == "LI") {
			var elUl = findElement("UL", elLi);
			if(elUl!=null) {
				elUl.style.display = state;
				setAllDisplay(elUl, state);
			}
		}
	}
}
function setAllDisplay2(menu, state) {
	var elDiv = findElement("DIV", menu);
	for( var i = 0; i < elDiv.childNodes.length; i++ ) {
		var elLi = elDiv.childNodes[i];
		if(elLi.nodeName == "LI") {
			var elUl = findElement("UL", elLi);
			if(elUl!=null) {
				elUl.style.visibility = state;
				setAllDisplay2(elUl, state);
			}
		}
	}
}

function findElement(elName, root) {
	for( var i = 0; i < root.childNodes.length; i++ ) {
		var child = root.childNodes[i];
		if(child.nodeName == elName) {
			return(child);
		}
	}
	return(null);
}

function hideMenu(menu) {
	if(menu!=null) {
		if(menu.parentUl!=null) {
			menu.style.visibility = "hidden";
		}

	}
}

function showMenu(menu) {
	if(menu!=null) {
		menu.style.visibility = "visible";
	}
}

function hideMenuTree(menu) {
	if((menu!=null)&&(menu!=stopMenu)) {
		if(menu.parentUl!=null) {
			hideMenu(menu);
		}
		hideMenuTree(menu.parentUl);
	}
}

function showMenuTree(menu) {
	if(menu!=null) {
		showMenu(menu);
		showMenuTree(menu.parentUl);
	}
}

function setActiveMenu(menu, flag) {
	menu.active = flag;
	if(menu.parentUl!=null) {
		setActiveMenu(menu.parentUl, flag);
	}
}

function closeMenu() {
		hideMenuTree(lastMenu);
}

function buildTree(root) {
	var elDiv = findElement("DIV", root);
	for( var i = 0; i < elDiv.childNodes.length; i++ ) {
		var elLi = elDiv.childNodes[i];
		if(elLi.nodeName == "LI") {
			var elA = findElement("A", elLi);
			var elUl = findElement("UL", elLi);
			if(elUl!=null){
				elUl.parentUl = root;
			}
			elA.subUl = elUl;
			elA.parentUl = root;
			elA.onmouseover = function() {
				        clearTimeout(timer);
				        stopMenu = this.parentUl;
				        if(this.subUl==lastMenu) {
				        	if(this.subUl!=null){
				        		stopMenu = this.subUl;
				        	} 
				        }
				        hideMenuTree(lastMenu);
				        showMenu(this.subUl);
				        if(this.subUl!=null) {
				        	lastMenu = this.subUl;
				        }
				};
			elA.onmouseout = function() {
				        stopMenu = rootTree;
					timer = setTimeout("closeMenu()", 1000);
			        };
			if(elUl!=null) {
				buildTree(elUl);
			}
		}
	}
}
