var MM_cur_menu = new Array(2);
var MM_active = 0;

function MM_VisitLink(url)
{
	if (url != "#")
		window.location.href = url;
}

function MM_BuildMenuDiv(id,data)
{
	var txt = "<div name=\"mm_menu_"+id+"\" id=\"mm_menu_"+id+
		"\" class=\"mm_menu\"><table cellspacing=0 cellpadding=2>";
	var len = data.length;
	for (i=1; i<len; i++) {
		var item = data[i];
		txt += "<tr><td name=\"mm_item_"+item[0]+"\" id=\"mm_item_"+
			item[0]+"\" class=\"mm_menu_item\" onclick=\"MM_VisitLink('"+item[2]+
			"')\"><b>"+item[1]+"</b></td></tr>";
	}

	txt += "</table></div>";
	return txt;
}

function MM_BuildMenuDivs(parent,menu_data)
{
	var txt = "";
	for (id in menu_data) {
		txt += MM_BuildMenuDiv(id,menu_data[id]);
	}
	parent.innerHTML = txt;
}

function MM_HiliteItem(obj)
{
	obj.style.backgroundColor = "#bbbbff";
}

function MM_UnhiliteItem(obj)
{
	obj.style.backgroundColor = "#eeeeee";
}

function MM_ResetSubMenuDiv(obj)
{
	MM_HiliteItem(obj);

	var menu = obj.mmMenuObj;
	if ((MM_cur_menu[1] != null) && (MM_cur_menu[1] != menu))
	{
		MM_cur_menu[1].style.visibility = "hidden";
		MM_cur_menu[1] = null;
	}
}

function MM_TriggerMenuDiv(obj)
{
	if (obj.mmMenuObj) {
		MM_HiliteItem(obj);
	}

	var mname = obj.mmMenuName;
	var mobj = xGetElementById(mname);
	var mlvl = obj.mmMenuLevel;

	var cur = MM_cur_menu[mlvl];
	if ((cur != null) && (cur != mobj))
	{
		MM_cur_menu[mlvl].style.visibility = "hidden";
		if ((mlvl == 0) && (MM_cur_menu[1] != null))
		{
			MM_cur_menu[1].style.visibility = "hidden";
			MM_cur_menu[1] = null;
		}
	}

	var x;
	var y;
	if (mlvl > 0)
	{
		x = xPageX(obj) + xWidth(obj);
		y = xPageY(obj);
	}
	else
	{
		x = xPageX(obj);
		y = xPageY(obj) + xHeight(obj);
	}
	xMoveTo(mobj, x, y);
	mobj.style.visibility = "visible";
	MM_cur_menu[mlvl] = mobj;

	if (!MM_active)
	{
		xAddEventListener(document, "mousemove", MM_HandleMouseMove, false);
		MM_active = 1;
	}
}

function MM_InitMenuItems(menu_data)
{
	for (id in menu_data) {
		var data = menu_data[id];
		var len = data.length;
		var mobj = xGetElementById("mm_menu_"+id);
		for (i=1; i<len; i++) {
			var iname = "mm_item_"+data[i][0];
			var iobj = xGetElementById(iname);
			iobj.onmouseover = function(event) { MM_ResetSubMenuDiv(this); }
			iobj.onmouseout = function(event) { MM_UnhiliteItem(this); }
			iobj.mmMenuObj = mobj;
		}
	}
}

function MM_LinkMenuDivs(menu_data)
{
	for (id in menu_data) {
		var pname = menu_data[id][0];
		var pobj = xGetElementById(pname);
		var mname = "mm_menu_"+id;
		var mobj = xGetElementById(mname);
		pobj.mmMenuName = mname;
		mobj.mmTrigger = pobj;
		
		if (pname.substr(0,8) == "mm_item_") {
			pobj.mmMenuLevel = 1;
		} else {
			pobj.mmMenuLevel = 0;
		}

		pobj.onmouseover = function(event) { MM_TriggerMenuDiv(this); }
	}
}

function MM_HandleMouseMove(ev)
{
	var e = new xEvent(ev);
	var x = e.pageX;
	var y = e.pageY;

	for (i=1; i>=0; i--)
	{
		var mobj = MM_cur_menu[i];
		if (mobj != null)
		{
			var tobj = mobj.mmTrigger;
			if (xHasPoint(mobj, x, y, -10) || xHasPoint(tobj, x, y, -10))
				return;

			mobj.style.visibility = "hidden";
			MM_cur_menu[i] = null;
		}
	}

	xRemoveEventListener(document, "mousemove", MM_HandleMouseMove, false);
	MM_active = 0;
}

function MM_InitMenus(data)
{
	MM_cur_menu[0] = null;
	MM_cur_menu[1] = null;
	var mainDiv = xGetElementById("mm_menuDivs");
	if (mainDiv != null) {
		MM_BuildMenuDivs(mainDiv,data);
		MM_InitMenuItems(data);
		MM_LinkMenuDivs(data);
	}
}
