//////////////////////////////////////////////////////////////////
// menu.js
//
// David Yang (prowyh@hotmail.com)
// Copyright (C) Levensoft Co., Ltd. (www.levensoft.com)
//
// 2006.11.9
//////////////////////////////////////////////////////////////////

var __nodePrefix = 'MNODE_';
var __curNode = null;
var __curFadingWeblet = 0;
var __aryNodeName = new Array ( "IMG", "FONT", "TD", "TR", "TBODY", "TABLE" );
var __prevHover = null;

function menu_btnMouseOver(wid, iStyle, iPulldownWay, hoverMode)
{
	var o = EventUtil.getEventSource();
	if (!o) return;
    while (o && o.tagName != "SPAN") o = o.parentElement;
    if (o == null)
    {
        o = EventUtil.getEventSource();
        while (o && o.tagName != "TR") o = o.parentElement;
    }

	if (o.getAttribute("cnode") == "1") return;

	if (o.tagName == "SPAN" && o.getAttribute("altpic") != null)
	{
		var pic = o.getAttribute("altpic");
		var img = o.firstChild;
		if (img.tagName == "IMG")
		{
		    o.setAttribute("altpic", img.src);
		    img.src = pic;
        }
	}
	
	if (hoverMode == "block")
	{
	    o.style.color = o.getAttribute("hfcolor");
	    o.style.backgroundColor = o.getAttribute("hbcolor");
    }
	else
	{
	    o.style.color = o.getAttribute("hfcolor");
        o.style.textDecoration = "underline";
    }

	var oMenubar = document.getElementById("menu_" + wid);
	__curFadingWeblet = oMenubar.getAttribute("fadingweblet");
	if (__curFadingWeblet > 0)
	{
		var oWeblet = document.getElementById("tWeblet" + __curFadingWeblet);
		if (oWeblet != null) oWeblet.style.visibility = "hidden";
	}
	__prevHover = o;
	
	if (iStyle == 0 && iPulldownWay == 0)
	{
		if (o.getAttribute("rightarrow") == "1")
		{
			menu_showMenu(o.getAttribute("subnode"), 1, o.getAttribute("shadow"), o.getAttribute("bcolor"));
		}
		else
		{
			menu_showMenu(o.getAttribute("subnode"), 0, o.getAttribute("shadow"), o.getAttribute("bcolor"));
		}
	}
}

function menu_btnMouseOut(wid, iStyle, iPulldownWay, hoverMode)
{
	var o = EventUtil.getEventSource();
	if (!o) return;
    while (o && o.tagName != "SPAN") o = o.parentElement;
    if (o == null)
    {
        o = EventUtil.getEventSource();
        while (o && o.tagName != "TR") o = o.parentElement;
    }
	
	if (o.getAttribute("cnode") == "1") return;

	if (o.tagName == "SPAN" && o.getAttribute("altpic") != null)
	{
		var pic = o.getAttribute("altpic");
		var img = o.firstChild;
		if (img.tagName == "IMG")
		{
		    o.setAttribute("altpic", img.src);
		    img.src = pic;
        }
	}
	
	if (hoverMode == "block")
	{
	    o.style.color = o.getAttribute("lfcolor");
		o.style.backgroundColor = "";
	}
	else
	{
		o.style.color = o.getAttribute("lfcolor");
		o.style.textDecoration = "none";
	}

    var q = window.event.toElement;
	if (o.tagName == "TR" && o.getAttribute("rightarrow") == "1")
	{
	    if (q.tagName == "TD")
	    {
	        q = q.parentElement;
	        if (o != q && ! menu_parentNode(o, q))
	        {
                o = document.getElementById(o.getAttribute("subnode"));
                if (o)
                {
                    o.style.display = "none";
                    menu_clearShadow(o);
                }
            }
        }
	}
}

function menu_btnClick(iStyle, iPulldownWay, sNode, sURL)
{
	try
	{
		var e = menu_getParent(EventUtil.getEventSource());

		var isPrivate = e.getAttribute("private");
		var isWarning = e.getAttribute("warning");
		var jumpway = e.getAttribute("jumpway");

		if (isPrivate == "1")
		{
			var cno = parseInt(sURL.substr(sURL.indexOf("cid=") + "cid=".length));
			if (! isNaN(cno))
			{
				var wid = e.getAttribute("wid");
				var xml = new XmlBuilder();
				xml.createStartElement("menu");
				xml.createElement("wid", wid);
				xml.createElement("cid", cno);
				xml.createEndElement();

                util.openMessaging(gMessage.AUTHENTICATING_MESSAGE);
                webServiceFramework.initialize("LevenSiteService");
                webServiceFramework.registerHandler(menu_clickCallback, isWarning, e, iPulldownWay, iBranchNoLink, sNode, sURL);
                webServiceFramework.callService("LevenSiteService", "CheckPermission", 1, util.htmlEncode(xml.toString()));
                return;
			}
		}

        menu_btnClickProcess(e, iPulldownWay, jumpway, sNode, sURL);
	}
	catch (e) {
		alert("Error: " + e.description);
	}
}

function menu_clickCallback(node, pa)
{
    var xmlString = node.firstChild.nodeValue;
    var doc = util.getXmlDocument();
    doc.async = false;
    doc.loadXML(xmlString);

    node = doc.firstChild.firstChild;
    if ((node.text == "0" || node.text.toLowerCase() == "false") && pa[0] == "1")
    {
        alert(node.nextSibling.text);
        return;
    }
    
    menu_btnClickProcess(pa[1], pa[2], pa[3], pa[4], pa[5]);
}

function menu_btnClickProcess(e, iPulldownWay, jumpway, sNode, sURL)
{
	if (iPulldownWay == 1 && jumpway == "0")
	{
		if (e.tagName == "SPAN")
		{
			menu_showMenu(sNode, 0, e.getAttribute("shadow"), e.getAttribute("bcolor"));	// pulldown
			return;
		}
		if (menu_topNode(e).tagName == "DIV" && e.getAttribute("rightarrow") == "1")
		{
			menu_showMenu(sNode, 1, e.getAttribute("shadow"), e.getAttribute("bcolor"));	// pullright
			return;
		}

		menu_setCurrentNode(e);
		if (e.tagName == "TR")
		{
			var d = e.cells[e.cells.length-1];
			var iNodeTag = d.getAttribute("nodetag");
			var sNodeType = d.getAttribute("nodetype");
			if (iNodeTag == "1")
			{
				var dd = e.cells[0];
				var sImgElement = dd.innerHTML;
				var oImg = dd.firstChild;
				if (typeof(oImg) == "object" && oImg.getAttribute("nodetype") == "collapse")
				{
					dd.innerHTML = dd.getAttribute("altpic");
					dd.setAttribute("altpic", sImgElement);
				}
				if (typeof(oImg) == "object" && oImg.getAttribute("nodetype") == "expand")
				{
					dd.innerHTML = dd.getAttribute("altpic");
					dd.setAttribute("altpic", sImgElement);
				}
			}

			switch (sNodeType)
			{
				case "expand":
					menu_collapseTree(sNode);
					d.setAttribute("nodetype", "collapse");
					return;
				case "collapse":
					menu_expandTree(sNode);
					d.setAttribute("nodetype", "expand");
					return;
			}
		}
	}

	var sb = new StringBuilder();
	sb.append(sURL);
	if (jumpway == "1" || jumpway == "2")
	{
		if (sNode != "")
		{
			if (sURL.indexOf("\?") > 0)
			{
				sb.append("&node=");
				sb.append(sNode);
			}
			else
			{
				sb.append("\?node=");
				sb.append(sNode);
			}
		}
		
		switch (jumpway)
		{
		    case "1":
		        window.navigate(sb.toString());
		        break;
            case "2":
                window.open(sb.toString());
                break;
        }
	}
}
function menu_parentNode(p, q)
{
    var o = q;
    while (o && o.tagName != "DIV") o = o.parentElement;

    var ok = false;
    if (o && p.getAttribute("subnode") == o.id) ok = true;
    
    return ok;
}

function menu_topNode(oNode)
{
	var tNode = oNode;

	while (tNode != null)
	{
		var _s = tNode.tagName;
		var _ok = false;
		for (var i = 0; i < __aryNodeName.length; i++)
		{
			if (_s != __aryNodeName[i]) continue;
			
			_ok = true;
			break;
		}
		if (_ok)
		{
			tNode = tNode.parentElement;
			continue;
		}
		
		break;
	}

	return tNode;
}

function menu_init()
{
	document.body.attachEvent("onmousemove", menu_hideMenu);
}

function menu_showMenu(sNode, popupWay, bShadow, sBorderColor)
{
	try
	{
		var oNode = document.getElementById(sNode);
		if (typeof(oNode) != "object" || ! oNode || oNode.style.display == "") return;

		tNode = menu_getParent(EventUtil.getEventSource());

		var h = tNode.offsetHeight;
		var w = tNode.offsetWidth;
		var l = tNode.offsetLeft;
		var t = tNode.offsetTop;

		switch (popupWay)
		{
		    case 0:
			    t += h + 1;
			    break;
		    case 1:
			    l += w;
			    break;
		}
		
		vParent = tNode.offsetParent;
		while (vParent.tagName.toUpperCase() != "BODY")
		{
			l += vParent.offsetLeft;
			t += vParent.offsetTop;
			vParent = vParent.offsetParent;
		}

		oNode.style.top = t;
		oNode.style.left = l;
		oNode.style.zIndex = menu_topNode(tNode).style.zIndex + 1;
		oNode.style.display = "";

		if (bShadow == "true") menu_makeShadow(oNode.firstChild, sBorderColor, 4);

		__curNode = oNode;
	}
	catch (e) { alert(e.description); }
}

function menu_getParent(oNode)
{
	var tNode = oNode;
	
	if (oNode != null)
	{
		switch (oNode.tagName) {
		case "TD":
			tNode = oNode.parentElement;
			break;
		case "IMG":
			tNode = oNode.parentElement;
			if (tNode.tagName != "SPAN") tNode = tNode.parentElement;
			break;
		case "FONT":
			tNode = oNode.parentElement.parentElement;
			break;
		}
	}

	return tNode;
}

function menu_hideMenu()
{
    if (! __curNode) return;
    
	var mX = window.event.clientX + document.body.scrollLeft;
	var mY = window.event.clientY + document.body.scrollTop;
	var h = 20;

	var aryNode;
	var bClearPulldown = false;

	try
	{
		aryNode = menu_mkNodePath(__curNode.id);

		var mColl = document.getElementsByTagName("DIV");
		var eLen = mColl.length;
		for (var i = 0; i < eLen; i++) {
			var d = mColl[i];
			if (d.name != "divSubmenu") continue;
			if (! menu_isMenuNode(d)) continue;

			if (menu_inCurrentPath(d, aryNode))
			{
				var bOutside = true;
				for (var j = 0; j < aryNode.length; j++)
				{
					var oNode = document.getElementById(aryNode[j]);
					if (oNode && ! menu_isOutofBoundingbox(mX, mY, oNode))
					{
						bOutside = false;
						break;
					}
				}
				if (bOutside)
				{
					d.style.display = "none";
					menu_clearShadow(d);
					bClearPulldown = true;
				}
			}
			else if (menu_isOutofBoundingbox(mX, mY, d))
			{
				d.style.display = "none";
				menu_clearShadow(d);
			}
		}
	}
	catch (e) { }

	if (bClearPulldown == true && __curFadingWeblet > 0) {
		var oWeblet = document.getElementById("tWeblet" + __curFadingWeblet);
		if (oWeblet != null) oWeblet.style.visibility = "visible";

		__curFadingWeblet = 0;
	}
}

function menu_isOutofBoundingbox(mx, my, oNode)
{
	var bYes = false;
	var h = 20;

	if ((mx < parseInt(oNode.style.left)) || (mx > parseInt(oNode.style.left) + oNode.offsetWidth))
	{
		bYes = true;
	}
	else if ((my < parseInt(oNode.style.top) - h) || (my > parseInt(oNode.style.top) + oNode.offsetHeight))
	{
		bYes = true;
	}
	else if (my < parseInt(oNode.style.top) && (my > parseInt(oNode.style.top) - h))
	{
		var tNode = window.event.srcElement;
		if (tNode.tagName == "SPAN" && ! menu_isSubmenu(tNode, oNode))
		{
			bYes = true;
		}
	}
	
	return bYes;
}

//////////////////////////////////////////////
// check to see if oMenu is submenu of oParent!
function menu_isSubmenu(oParent, oMenu)
{
	 return(oParent.getAttribute('subnode') == oMenu.id);
}

function menu_setCurrentNode(oElement)
{
	var aryNode = new Array();

	aryNode[0] = document.getElementsByTagName('TR');
	aryNode[1] = document.getElementsByTagName('SPAN');
	for (var k = 0; k < aryNode.length; k++)
	{
		for (var i = 0; i < aryNode[k].length; i++)
		{
			var d = aryNode[k].item(i);
			if (d.getAttribute('cnode') == '1')
			{
				d.setAttribute('cnode', '0');
				d.style.backgroundColor = d.getAttribute('lcolor');
			}
		}
	}

	oElement.style.backgroundColor = oElement.getAttribute('hcolor');
	oElement.setAttribute('cnode', '1');
}

function menu_makeShadow(el, color, size)
{
	for (var i = size; i > 0; i--)
	{
		var rect = document.createElement('DIV');
		var rs = rect.style;
		
		rs.position = 'absolute';
		rs.left = (el.style.posLeft + i) + 'px';
		rs.top = (el.style.posTop + i) + 'px';
		rs.width = el.offsetWidth + 'px';
		rs.height = el.offsetHeight + 'px';
		rs.zIndex = el.style.zIndex - i;
		rs.backgroundColor = color;
		
		var opacity = 1 - i / (i + 1);
		rs.filter = 'alpha(opacity = ' + (100 * opacity) + ')';
		
		el.insertAdjacentElement('afterEnd', rect);
	}
}

function menu_clearShadow(oNode)
{
	var tNode = oNode.firstChild;
	if (tNode)
	{
		oNode.innerHTML = tNode.outerHTML;
	}
}

function menu_expandTree(sNode)
{
	if (sNode == "") return;

	var aryNode = menu_mkNodePath(sNode);

	var e = document.getElementsByTagName('TR');
	for (var i = 0; i < e.length; i++) {
		var d = e.item(i);

		if (! menu_inCurrentPath(d, aryNode))
		{
			menu_mkNodeCollapse(d);
		}
		if (menu_isMenuNode(d) && ! menu_isElementOfArray(d.id, aryNode))
		{
			if (d.style.display == "") {
				d.style.display = "none";
			}
		}
	}

	for (var i = 0; i < e.length; i++) {
		var d = e.item(i);
		if (menu_isMenuNode(d) && menu_isElementOfArray(d.id, aryNode))
		{
			if (d.style.display == "none")
			{
				d.style.display = "";
			}
		}
	}
}

function menu_mkNodePath(sNode)
{
	var aryNode = new Array();

	if (!(sNode == null || sNode == "" || sNode == "undefined"))
	{
		var aryPath = sNode.split("_");

		for (var i = 1; i < aryPath.length; i++)
		{
			var sb = new StringBuilder();
			for (var j = 0; j < i; j++)
			{
				sb.append(aryPath[j]);
				sb.append("_");
			}
			 sb.append(aryPath[i]);
			 
			 aryNode[i-1] = sb.toString();
		}
	}

	return aryNode;
}

function menu_collapseTree(sNode)
{
	if (sNode == "") return;

	var aryPath = sNode.split("_");
	var aryNode = new Array();
	for (var i = 1; i < aryPath.length; i++)
	{
		var sb = new StringBuilder();
		for (var j = 0; j < i; j++)
		{
			sb.append(aryPath[j]);
			sb.append("_");
		}
		sb.append(aryPath[i]);
		
		aryNode[i-1] = sb.toString();
	}

	var e = document.getElementsByTagName("TR");
	for (var i = 0; i < e.length; i++)
	{
		var d = e.item(i);
		if (! menu_inCurrentPath(d, aryNode) || menu_isCurrentNode(d, sNode, aryNode))
		{
			menu_mkNodeCollapse(d);
		}
		if (d.id && d.id == sNode)
		{
			d.style.display = "none";
		}
	}
}


function menu_isCurrentNode(oNode, sNode, aryNode)
{
	var idx = -1;
	var bYes = false;

	for (var i = 0; i < aryNode.length; i++)
	{
		if (sNode == aryNode[i])
		{
			idx = i;
			break;
		}
	}

	if (menu_isMenuNode(oNode) && idx > 0 && oNode.id == aryNode[idx-1])
	{
		bYes = true;
	}
	else if (oNode.nextSibling != null)
	{
		oNode = oNode.nextSibling;
		if (oNode.nextSibling != null)
		{
			oNode = oNode.nextSibling;
			if (oNode.tagName == 'TR' && menu_isMenuNode(oNode) && oNode.id == sNode)
			{
				bYes = true;
			}
		}
	}

	return bYes;
}

function menu_inCurrentPath(oNode, aryNode)
{
	var bYes = false;

	if (menu_isMenuNode(oNode) && menu_isElementOfArray(oNode.id, aryNode))
	{
		bYes = true;
	}
	else
	{
		oNode = oNode.nextSibling;
		if (oNode != null && oNode.nextSibling != null)
		{
			oNode = oNode.nextSibling;
			if (oNode.tagName == "TR" && menu_isMenuNode(oNode) && menu_isElementOfArray(oNode.id, aryNode))
			{
				bYes = true;
			}
		}
	}

	return bYes;
}

function menu_mkNodeCollapse(oNode)
{
    try {
	    var fChild = oNode.firstChild;
	    if (fChild.tagName == "TD" && fChild.getAttribute("altpic") != null)
	    {
		    var sImgElement = fChild.innerHTML;
		    var oImg = fChild.firstChild;
		    if (oImg.getAttribute("nodetype") == "expand")
		    {
			    fChild.innerHTML = fChild.getAttribute("altpic");
			    fChild.setAttribute("altpic", sImgElement);
		    }
	    }
    }
    catch (e) {}
}

function menu_isMenuNode(oNode)
{
	if (oNode != null && oNode.id && oNode.id.indexOf(__nodePrefix) >= 0) return true;

	return false;
}

function menu_isElementOfArray(oElem, oArray)
{
	for (var i = 0; i < oArray.length; i++)
	{
		if (oElem == oArray[i]) return true;
	}

	return false;
}
