﻿///////////////// 数据结构相关 ////////////////
var menu_arr=new Array();

function MenuStruct()
{
    var id, parent, title, url, target, page;
}

function GetDataById(id)            //从menu_arr中查找指定id的节点
{
    for(var i = 0; i < menu_arr.length; i++)
        if(menu_arr[i].id == id)
            return menu_arr[i];

    return null;
}

function TopMenuData()          //从menu_arr中查找顶级节点
{
    var ret = new Array();
    var i = 0;
    for(var j = 0; j < menu_arr.length; j++)
        if(menu_arr[j].parent == 0)
            ret[i++] = menu_arr[j];

    return ret;
}

function ChildrenData(Menu)      //从menu_arr中查找指定节点的子节点(可以传id值,也可以传MenuStruct值)
{
    if(Menu != null)
    {
        var menuID = parseInt(Menu)==Menu? Menu : Menu.id;
        var ret = new Array();
        var i = 0;
        for(var j = 0; j < menu_arr.length; j++)
            if(menu_arr[j].parent == menuID)
                ret[i++] = menu_arr[j];

        return ret;
    }
    else
        return null;
}

function SameLevelData(Menu)    //从menu_arr中查找指定节点同级的所有节点(可以传id值,也可以传MenuStruct值)
{
    var menuObj = parseInt(Menu)==Menu? GetDataById(Menu) : Menu;
    if(menuObj != null)
        return ChildrenData(menuObj.parent);    //parent有可能是0,所以不要转换成MenuStruct
    else
        return null;
}

function ifHaveChild(Menu)      //判断指定数据是否存在下一级(可以传id值,也可以传MenuStruct值)
{
    var MenuData = parseInt(Menu)==Menu? GetDataById(Menu) : Menu;
    if(MenuData != null)
    {
        var children = ChildrenData(MenuData);
        return children != null && children.length > 0;
    }
    else
        return false;
}


///////////////// 菜单事件相关 ////////////////
//恢复菜单
function LeaveMenu()
{
    if(isIE)
        BlurMenu(event.srcElement);
    else
	    BlurMenu(arguments[0]);
}

//关闭菜单
function CloseMenu()
{
    var eventSource = isIE? event.srcElement : arguments[0];
    
    eventSource.style.display = 'none';

    setDropdownlistVisible(true);
}

//点击菜单
function ClickHandle()
{
    var eventSource = isIE? event.srcElement : arguments[0];
    var MenuData = GetDataById(eventSource.getAttribute("id"));
    
    if(MenuData.page == 1)
        switch(MenuData.target)
        {
            case "_self":
            default:    //默认是本窗口浏览
                document.location.href = MenuData.url;
                break;
            case "_blank":
                window.open(MenuData.url);
                break;
        }
}

///////////////// 菜单渲染相关 ////////////////
//渲染主函数
function RenderNav()
{
    oMenuBar = document.all('MenuBar');
    BuildMenuStruct();
    InitMenu(menu_arr, oMenuBar);
}

//初始化菜单
function InitMenu(MenuArr, oMenuBar)
{
	//创建一级菜单
	var oRow = oMenuBar.insertRow(-1);
	var topMenuData = TopMenuData(MenuArr);

	for(var i=0; i<topMenuData.length; i++)
		CreateMenu(oRow,topMenuData[i]);
}

//激活菜单
function OverMenu()
{
	if(isIE && document.readyState!="complete") return;

	var currentMenuData;
	var eventSource = isIE? event.srcElement : arguments[0];
	
    FocusMenu(eventSource);
    currentMenuData = GetDataById(eventSource.getAttribute("id"));
    
    var childrenMenuData = SameLevelData(currentMenuData);

    for(var i = 0; i < childrenMenuData.length; i++)
        CloseAllChildMenus(childrenMenuData[i].id);     //关闭当前栏目同一级栏目的全部子菜单
        
    //如果当前栏目存在子菜单则弹出
    if (ifHaveChild(currentMenuData))
    {
	    var intTop = 0;
	    var intLeft = 0;
		
	    if (currentMenuData.parent == 0)
	    {
		    intTop = CalTop(eventSource) + eventSource.offsetHeight;
		    intLeft = CalLeft(eventSource);
		}
	    else
	    {
		    intTop = CalTop(eventSource);
		    intLeft = CalLeft(eventSource) + eventSource.offsetWidth;
        }

	    GetChildMenu(eventSource,intLeft,intTop);
    }
    else if(currentMenuData.parent == 0)
        setDropdownlistVisible(true);
}

//激活状态菜单界面
function FocusMenu(oMenu)
{
	oMenu.style.color = "#cc0000";
	oMenu.bgColor ="White";
}

//普通状态菜单界面
function BlurMenu(oMenu)
{
	oMenu.style.color = "White";
	oMenu.bgColor ="#cc0000";
}

//计算某相对定位元素的绝对TOP值
function CalTop(oNode)
{
	var intTop = parseInt(oNode.offsetTop);
	if (oNode.offsetParent != null)
	{
		intTop += CalTop(oNode.offsetParent);
	}
	return intTop;
}

//计算某相对定位元素的绝对Left值
function CalLeft(oNode)
{
	var intLeft = parseInt(oNode.offsetLeft);
	if (oNode.offsetParent != null)
	{
		intLeft += CalLeft(oNode.offsetParent);
	}
	return intLeft;
}

//创建菜单
function CreateMenu(oRow, MenuData)
{
    if(isIE)
    {	
	    var newCell;
	    newCell = oRow.insertCell(-1)
	    newCell.style.color = "White";
	    newCell.bgColor ="#cc0000";
	    newCell.style.fontSize = FontSize();
	    newCell.style.fontWeight ="bold";
	    newCell.style.paddingLeft = newCell.style.paddingRight = "10";
	    newCell.style.paddingTop = newCell.style.paddingBottom = "1";
	    newCell.style.cursor = "pointer";
	    newCell.style.width = "0.1%";
	    newCell.noWrap = true;
	    newCell.innerHTML = "+" + MenuData.title;
	    newCell.id = MenuData.id;
	    newCell.parent = MenuData.parent;

	    newCell.attachEvent("onmouseover", OverMenu);
	    newCell.attachEvent("onmouseout", LeaveMenu);
	    newCell.attachEvent("onclick", ClickHandle);
	}
	else
	{
        var aMenu = "<td onmouseover='OverMenu(this)' onmouseout='LeaveMenu(this)' onclick='ClickHandle(this)' ";
        aMenu += " id='" + MenuData.id + "' style='padding: 1px 10px; color: White; font-size: 12px; font-weight: bold; width: 0.1%; cursor:pointer' bgcolor='#cc0000' nowrap>";
        aMenu += "+" + MenuData.title + "</td>";
        oRow.innerHTML += aMenu;
	}
	return newCell;
}

//构造子菜单
function GetChildMenu(oMenu,x,y)
{
    var MenuData = GetDataById(oMenu.id);
    var children = ChildrenData(MenuData);
    
	//得到菜单容器
	var ContainID = "Menu_" + MenuData.id;
	var oMenuContain = null;
	if (document.all(ContainID) == null)
	{
		//初始化菜单容器
		oMenuContain = document.createElement("DIV");
		oMenuContain.style.position = "absolute";
		oMenuContain.style.border = 1;
		oMenuContain.id = ContainID;
		oMenuContain.style.display = "none";
		
		if(isIE)
		    oMenuContain.attachEvent("onmouseleave", CloseMenu);
		
	    setDropdownlistVisible(true);
	}
	else
	{
		oMenuContain = document.all(ContainID);
	}
	
	if (MenuData.parent == 0)
	{
		document.body.appendChild(oMenuContain);				
		oMenuContain.style.top = y;
		oMenuContain.style.left = x;
	}
	else
	{
		//得到父级容器
		var ParentMenuContain = document.all("Menu_" + MenuData.parent);
		if (ParentMenuContain != null)
		{
			ParentMenuContain.appendChild(oMenuContain);
			oMenuContain.style.top = oMenu.offsetTop;
			oMenuContain.style.left = ParentMenuContain.offsetWidth - 6;
		}
	}
	
    var strChildMenu = "<table style='font-weight:bold;color:white' cellpadding=0 cellspacing=0 bgcolor='#cc0000'>";
    for(var i = 0; i < children.length; i++)
    {
	    strChildMenu += "<tr height=18>";
	    strChildMenu += "<td nowrap onclick='ClickHandle(this);' onmouseover='OverMenu(this);' onmouseout='LeaveMenu(this);' id='" + children[i].id;
	    strChildMenu += "' style='font-size:" + FontSize() + ";padding:2;cursor:pointer;border:1 solid gray;word-break:keep-all;'>&nbsp;&nbsp;";
		
	    strChildMenu += children[i].title;
		
	    if (ifHaveChild(children[i]))	    //判断是否存在子菜单
		    strChildMenu += "&nbsp;>";
		
	    strChildMenu += "</td>";
		
    }
    strChildMenu += "</table>";
	
    oMenuContain.innerHTML = strChildMenu;
    oMenuContain.style.display = '';

    if(ifHaveChild(MenuData) || MenuData.parent > 0)
        setDropdownlistVisible(false);
}

//关闭所有弹出的子菜单显示
function CloseAllPopMenus()
{
    var topData = TopMenuData();
    for(var i = 0; i < topData.length; i++)
        CloseAllChildMenus(topData[i].id);
        
    setDropdownlistVisible(true);
}

//关闭指定菜单下的全部子菜单显示
function CloseAllChildMenus(MenuID)
{
    var MenuData = GetDataById(MenuID);
    if(MenuData != null)	//查询指定栏目下的全部子栏目
    {
        if(document.all("Menu_" + MenuID) != null)
            document.all("Menu_" + MenuID).style.display = "none";
            
        var children = ChildrenData(MenuData);
        for(var i = 0; i < children.length; i++)
        {
            if(document.all("Menu_" + children[i].id) != null)
            {
                document.all("Menu_" + children[i].id).style.display = "none";
                CloseAllChildMenus(children[i].id);
            }
        }
    }
}

//设置页面的下拉列表可见性
function setDropdownlistVisible(visible)
{
    var DropDownLists = document.getElementsByTagName("select");
	for(var i = 0; i < DropDownLists.length; i++)
	    if(visible)
	        DropDownLists[i].style.display = "";
	    else
	        DropDownLists[i].style.display = "none";
}

//根据中英文设置字号
function FontSize()
{
    if(document.location.search.toLowerCase().indexOf("culture=en-us") == -1)
        return "12px";
    else
        return "10px";
}