function showMenu(path,menu){
	clearTimeout(menu["ti"]);
	var tdCurrent = path.split("_");
	var subMenu = menu["menu"];
	if ( menu["last-path"] != null ){
		var array = menu["last-path"].split("_");
		var i = 1;
		while( i < array.length ){
			subMenu = subMenu[parseInt(array[i])];
			if ( array[i] != tdCurrent[i] ){
				if ( typeof( subMenu ) != "undefined" )
					document.getElementById( subMenu["id"] ).style.display = "none";
			}
			i++;
		}		
	}
	menu["last-path"] = path;
	subMenu = menu["menu"];
	var lastMenu = subMenu;
	var array = path.split("_");
	var i = 1;
	while( i < array.length ) {
		lastMenu = subMenu;
		subMenu = subMenu[parseInt(array[i])];
		i++;
	}
	if ( typeof( subMenu ) != "undefined" ){
		var elem = document.getElementById( subMenu["id"] );
		setPositionMenu(elem,lastMenu,array[i-1],array.length < 3);
		elem.style.display = "block";
	}
}

function getAbsolutePosition(object){
	var pos = new Array();
	pos["top"] = 0;
	pos["left"] = 0;
	while ( object.nodeName != "BODY" && object.style.position != "absolute" ){
		pos["top"] += object.offsetTop;
		pos["left"] += object.offsetLeft;
		object = object.parentNode;
	}
	if ( object.nodeName != "BODY" ){
		pos["top"] += object.offsetTop;
		pos["left"] += object.offsetLeft;
	}
	return pos;
}

function setPositionMenu(object,lastMenu,i,initial){
	var elemTab = document.getElementById( lastMenu["id"] );
	var elemTd  = document.getElementById( lastMenu["id"] + "-td_"+ i );
	if ( !initial ) {
		object.style.top  = elemTab.offsetTop  + elemTd.offsetTop + 2;
		object.style.left = elemTab.offsetLeft + elemTd.offsetWidth + 4;
	}
	else {
		var pos = getAbsolutePosition(elemTab);
		object.style.top  = pos["top"] + elemTd.offsetTop - 121;
		object.style.left = pos["left"] + elemTd.offsetWidth;		
	}
}

function hideMenu(menu){
	if ( menu["last-path"] != null ){
		var array = menu["last-path"].split("_");
		var subMenu = menu["menu"];
		var i = 1;
		while( i < array.length ){
			subMenu = subMenu[parseInt(array[i])];
			if ( typeof( subMenu ) != "undefined" )
				 document.getElementById( subMenu["id"] ).style.display = "none";
			i++;
		}
		menu["last-path"] = null;
	}
}

function getPosition(id,path,menu){
	var subMenu = menu["menu"];
	var array = path.split("_");
	var i = 1;
	var end = array.length - 1;
	while( i < end ) {
		subMenu = subMenu[parseInt(array[i])];
		i++;
	}
	var elemTab = document.getElementById( subMenu["id"] );
	var elemTd  = document.getElementById( subMenu["id"] + "-td_"+ array[i] );
	document.getElementById(id).style.top  = elemTab.offsetTop  + elemTd.offsetTop + 2;
	document.getElementById(id).style.left = elemTab.offsetLeft + elemTd.offsetWidth - 2;
}

var allMenus = new Array();

function makeMenu(menu){
	var text = "";
	if ( menu != null ) {
		var idMenu = menu["id"];
		allMenus[idMenu] = new Array();
		allMenus[idMenu]["ti"] = -1;
		allMenus[idMenu]["time"] = 400;
		allMenus[idMenu]["last-path"] = null;
		allMenus[idMenu]["menu"] = menu;
		var next = new Array();
		var j = 0;
		text = "<table id=\""+ idMenu +"\" cellspacing=\"0\"";
		if ( typeof(menu["name"])  != "undefined" ) text += " name=\""  + menu["name"]  + "\"";
		if ( typeof(menu["class"]) != "undefined" ) text += " class=\"" + menu["class"] + "\"";
		text += " >";
		var path = "P";
		menu["path"] = path;
		var i = 0;
		while ( i < menu["childs"] ){
			var subPath = path + "_" + i;
			text += "<tr><td id=\"" + idMenu + "-td_"+i+"\"";
			if ( typeof(menu["class"]) != "undefined" ) text += " class=\"" + menu["class"] + "\"";
			text +=" onMouseOver=\"showMenu('"+subPath+"',allMenus['"+idMenu+"'])\"";
			text +=" onMouseOut=\"allMenus['"+idMenu+"']['ti']=setTimeout('hideMenu(allMenus[\\\'"+idMenu+"\\\'])',allMenus['"+idMenu+"']['time'])\">";
			if ( typeof(menu[i]) != "undefined" ){
				menu[i]["path"] = subPath;
				next[j++] = menu[i];
			}
			text += menu["text"][i];
			text += "</tr>";
			i++;
		}
		text += "</table>";
		document.writeln(text);
		var k = 0;
		while ( k < j ) {
			table = next[k++];
			path = table["path"];
			text = "<table id=\""+ table["id"] + "\" cellspacing=\"0\"";
			if ( typeof(table["name"])  != "undefined" ) text += " name=\""  + table["name"]  + "\"";
			if ( typeof(table["class"]) != "undefined" ) text += " class=\"" + table["class"] + "\"";
			text += " style=\"display:none; position:absolute; z-index:99\">";
			var i = 0;
			while ( i < table["childs"] ){
				var subPath = path + "_" + i;
				text += "<tr><td id=\"" + table["id"] + "-td_"+i+"\"";
				if ( typeof(table["class"]) != "undefined" ) text += " class=\"" + table["class"] + "\"";  
				text +=" onMouseOver=\"showMenu('"+subPath+"',allMenus['"+idMenu+"'])\"";
				text +=" onMouseOut=\"allMenus['"+idMenu+"']['ti']=setTimeout('hideMenu(allMenus[\\\'"+idMenu+"\\\'])',allMenus['"+idMenu+"']['time'])\">";
				if ( typeof(table[i]) != "undefined" ){
					table[i]["path"] = subPath;
					next[j++] = table[i];
				}
				text += table["text"][i];
				text += "</tr>";
				i++;
			}
			text += "</table>";
			document.writeln(text);
		}
	}
	return text;
}
