var sOpenMenuID   = "";   
var sMenuButtonID = "";   
var strEcbSelectedClass   = "ms-selectedtitle";
var strEcbUnselectedClass = "ms-unselectedtitle";
var strMenuItemTableCell  = "ms-MenuUIItemTableCell";
var strMenuItemTableCellH = "ms-MenuUIItemTableCellHover";
var strMenuItemTable      = "ms-MenuUIItemTable";
var strMenuItemTableH     = "ms-MenuUIItemTableHover";
var strMenuUIIcon              = "ms-MenuUIIcon";
var strMenuUISeparator         = "ms-MenuUISeparator";
var strMenuUiLabelWithFont     = "ms-MenuUILabel ms-MenuUILabelFont";
var strMenuUIIconRtl           = "ms-MenuUIIconRtL";
var strMenuUISeparatorRtl      = "ms-MenuUISeparatorRtL";
var strMenuUiLabelWithFontRtl  = "ms-MenuUILabelRtL ms-MenuUILabelFont";

function fixupParmString(strParm)
{

    var strTmp = strParm.replace(/\\/g, "\\\\");
    return strTmp.replace(/\'/g, "\\\'");
}

function fixupUrlParm(strParm)
{

    var tmpParm = strParm;
    var outParm = "";

    var nIndex = tmpParm.indexOf("%252B");
    while (-1 != nIndex)
    {
        outParm = outParm + tmpParm.substring(0,nIndex) + "%2b";
        tmpParm = tmpParm.substr(nIndex+5);
        nIndex = tmpParm.indexOf("%252B");
    }
    if (tmpParm != "")
        outParm = outParm + tmpParm;

    tmpParm = outParm;
    outParm = "";

    nIndex = tmpParm.indexOf("\/");
    while (-1 != nIndex)
    {
        outParm = outParm + tmpParm.substring(0,nIndex) + "%2f";
        tmpParm = tmpParm.substr(nIndex+1);
        nIndex = tmpParm.indexOf("\/");
    }
    if (tmpParm != "")
        outParm = outParm + tmpParm;
    return outParm;
}

function mnuCustomizeItem(objMenuItem, targetURL, dicParms, rgDisables)
{
    objMenuItem.href = "";
    var strParms     = "";  
    var strTargetURL = "";  
    var strScript    = "";  
    var strScriptFuncReplaceMode = ""; 
    var fFuncMode    = false;
    var fFuncModeParamReplace = false;
    var strHref;

    strParms     = objMenuItem.getAttribute("parms");
    strTargetURL = objMenuItem.getAttribute("targetURL");
    strScript    = objMenuItem.getAttribute("scriptFunc");
    strScriptFuncReplaceMode = objMenuItem.getAttribute("scriptFuncReplaceMode");

    if (null != strScript && strScript != "")
    {
        fFuncMode = true;
        if (strScriptFuncReplaceMode != null)
        {
            fFuncModeParamReplace = true;
        }
        if (fFuncModeParamReplace)
        {
            strHref = "javascript:" + strScript;
        }
        else
        {
            strHref="javascript:" + strScript + "(";
        }
    } else if (null == strTargetURL || strTargetURL == "")
        strHref = targetURL;
    else
        strHref = strTargetURL;

    if (null != strParms)
    {
        var rgParms = strParms.split(",");
        var nParm;

        for (nParm = 0; nParm < rgParms.length; nParm++)
        {
            var nArg;

            for (nArg = 0; nArg < dicParms[0].length; nArg++)
            {
                if (rgParms[nParm] == dicParms[0][nArg])
                {
                    if (fFuncMode)
                    {
                        var strParm = fixupParmString(dicParms[1][nArg]);
                        if (fFuncModeParamReplace)
                        {
                            strHref = strHref.replace(rgParms[nParm], strParm.replace(/%/g, "%25"));
                        }
                        else
                        {

                            if (nParm != 0)
                                strHref += ",";

                            strHref += "'";
                            strHref += strParm;
                            strHref += "'";
                        }
                    }
                    else
                    {

                        if (nParm == 0)
                            strHref += "?"; 
                        else
                            strHref += "&"  

                        strHref += rgParms[nParm];
                        strHref += "=";

                        var strParm = escape(dicParms[1][nArg]);

                        strHref += fixupUrlParm(strParm);
                    }
                    break;  
                }
            }
        }
    }
    if (fFuncMode && !fFuncModeParamReplace)
    {
        strHref += ")";
    }

    if(browseris.ie55up)
    {

        objMenuItem.href = strHref;
        if (IsAccessibilityFeatureEnabled())
        {
            objMenuItem.onclick = strHref;  
        }
    }
    else
    {
        if(fFuncMode)
        {
            var func = strHref.substring(11);
            if (IsAccessibilityFeatureEnabled())
                objMenuItem.onclick = func;
            else
                objMenuItem.onclick = eval("function() { eval(" + func + "); }");
        }
        else
        {
            if (IsAccessibilityFeatureEnabled())
                objMenuItem.onclick = strHref;
            else
                objMenuItem.onclick = eval("function() { window.location = " + strHref + "; }");
        }
    }

    mnuEnableRow(objMenuItem, true);

    if (null != rgDisables)
    {
        for (nItem = 0; nItem < rgDisables.length; nItem++)
        {
            if (rgDisables[nItem] == objMenuItem.id)
            {
                mnuEnableRow(objMenuItem, false);
            }
        }
    }
    objMenuItem.onfocus = mnuItemSelect;
    objMenuItem.onblur  = mnuItemDeselect;
    objMenuItem.hideFocus = true;
    objMenuItem.onkeydown = mnuItemKeydown;
}

function mnuEnableRow(oElement, fEnable)
{
    var oRow = mnuGetMenuRowFromElement(oElement);

    if(browseris.ie55up)
    {
        for (var index=0; index < oRow.children.length; index++)
            oRow.children(index).disabled = !fEnable;
    }
    else
    {
        var all = GetAllSubElements(oRow);
        for (var index=0; index < all.length; index++)
            all[index].disabled = !fEnable;
    }

    oRow.disabled = !fEnable;
}

function itmToRtl(oRow)
{
    var colItemCells = oRow.getElementsByTagName("TD");
    for (var nCell = 0; nCell < colItemCells.length; nCell++)
    {
        var oCell = colItemCells[nCell];
        if (oCell.className == strMenuUIIcon)
            oCell.className = strMenuUIIconRtl;
        else if (oCell.className == strMenuUISeparator)
            oCell.className = strMenuUISeparatorRtl;
        else if (oCell.className == strMenuUiLabelWithFont)
            oCell.className = strMenuUiLabelWithFontRtl;
    }
}

function itmToLtr(oRow)
{
    var colItemCells = oRow.getElementsByTagName("TD");
    for (var nCell = 0; nCell < colItemCells.length; nCell++)
    {
        var oCell = colItemCells[nCell];
        if (oCell.className == strMenuUIIconRtl)
            oCell.className = strMenuUIIcon;
        else if (oCell.className == strMenuUISeparatorRtl)
            oCell.className = strMenuUISeparator;
        else if (oCell.className == strMenuUiLabelWithFontRtl)
            oCell.className = strMenuUiLabelWithFont;
    }
}

function mnuCustomizeItems(objMenu, targetURL, dicParms, rgDisables)
{
    var theDir = mnuGetDirection();
    if (theDir != document.dir)
    {
        var colMenuRows = objMenu.getElementsByTagName("TABLE");
        var nRow;

        if (theDir == "rtl")
        {
            for (nRow = 0; nRow < colMenuRows.length; nRow++)
                itmToRtl(colMenuRows[nRow]);
        }
        else
        {
            for (nRow = 0; nRow < colMenuRows.length; nRow++)
                itmToRtl(colMenuRows[nRow]);
        }
    }

    var fFocus = false;
    var colMenuItems = objMenu.getElementsByTagName("A");
    var nItem;
    for (nItem = 0; nItem < colMenuItems.length; nItem++)
    {
        mnuCustomizeItem(colMenuItems[nItem], targetURL, dicParms, rgDisables);

        if (!fFocus && !colMenuItems[nItem].isDisabled)
        {
            colMenuItems[nItem].focus();
            fFocus = true;
        }
    }
}

function mnuClose(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    if (document.getElementById(sOpenMenuID) && "object" == typeof(document.getElementById(sOpenMenuID)))
    {
        var objMenu = document.getElementById(sOpenMenuID);
        sOpenMenuID = "";
        objMenu.style.display = "none"; 
        if (browseris.ie55up) 
            document.all("__hifMenu").style.display = "none";
        if(objMenu.releaseCapture)
        {
            objMenu.releaseCapture();
        }
        document.oncontextmenu = null;
        if (document.getElementById(sMenuButtonID) && "object" == typeof(document.getElementById(sMenuButtonID)))
        {
            document.getElementById(sMenuButtonID).focus();
            sMenuButtonID = "";
        }
    }
}

function mnuGetEcbContainer(objEcb)
{
    if (null == objEcb)
        return null;
    var objParent = objEcb.parentNode;
    while (objParent != null && "TD" != objParent.tagName)
    {
        objParent = objParent.parentNode;
    }
    return objParent;
}

function mnuInsureBackingIFrame(objMenu)
{
    var oFrame = null;
    if ((null != document.frames) && (document.frames.length > 0))
    {
        var ifmContainer = document.getElementById("__hifMenu");
        if (ifmContainer != null)
            oFrame = document.frames("__hifMenu");
    }
    if (null == oFrame)
    {
        {
             var oBody = objMenu.parentNode;
             while (oBody != null && "BODY" != oBody.tagName)
             {
                 oBody = oBody.parentNode;
             }

             oBody.insertAdjacentHTML("afterBegin",
                 "<iframe id=\"__hifMenu\" scrolling=no " +
                 "src=\"/_layouts/images/blank.gif\" " +
                 "style=\"display:none;position:absolute;\"></iframe>");
             oFrame = document.frames("__hifMenu");
             var oDoc = oFrame.document;
             oDoc.open("text/html", "replace");
             oDoc.write("");
             oDoc.close();
        }
    }
    return oFrame;
}

function mnuDisplay(objMenu, x, y)
{
    if (objMenu != null)
    {       
        objMenu.style.position = "absolute";
        objMenu.style.left = x.toString() + "px";
        objMenu.style.top = y.toString() + "px";
        objMenu.style.display = "block";

        if (browseris.ie55up)
        {
            mnuInsureBackingIFrame(objMenu);
            objMenu.style.display = "none"; 
            document.all("__hifMenu").style.left = x.toString();
            document.all("__hifMenu").style.top = y.toString();
            document.all("__hifMenu").style.width = objMenu.offsetWidth;
            document.all("__hifMenu").style.height = objMenu.offsetHeight;
            document.all("__hifMenu").style.display = "block";
            objMenu.style.display = "block"; 
        }
    }
}

function mnuPreDisplay(objMenu, x, y, cx, cy)
{
    if (objMenu != null)
    {

        var sx = x - objMenu.clientWidth;
        var sy = y;
        if (cx < sx + objMenu.clientWidth)
        {
            sx = cx - objMenu.clientWidth;
            if (sx < 0)
                sx = 0;
        }
        if (cy < sy + objMenu.clientHeight)
        {
            sy = cy - objMenu.clientHeight;
            if (sy < 0)
                sy = 0;
        }

        mnuDisplay(objMenu, sx, sy);
    }
}

function mnuGetDirection()
{
    var objToTest = mnuGetInvokingMenuButton();
    while (null != objToTest)
    {
        if(objToTest.style && objToTest.style["direction"])
        {
            var strDir = objToTest.style.direction.toLowerCase();
            if (strDir == "rtl" || strDir == "ltr")
            {
                return strDir;
            }
        }
        objToTest = objToTest.parentNode;
    }
    return document.dir;
}

function mnuPosition(idMenu, idMenuButton)
{
    var objMenuContext   = document.getElementById(idMenuButton);
    var objMenuContainer = mnuGetEcbContainer(objMenuContext);
    var theDir           = mnuGetDirection();
    var objBody          = document.getElementsByTagName("BODY")[0];

    if (document.getElementById(idMenu) && "object" == typeof(document.getElementById(idMenu)))
    {
        var objMenu = document.getElementById(idMenu);
        var x = 0;  
        var y = 0;
        var cx = 0;
        var cy = 0;
        var cyContext = 0;

        if (objMenuContext == null)
            objMenuContext = mnuGetInvokingMenuButton();
        if (objMenuContext != null)
        {

            if (theDir == "rtl")
            {
                x = objMenuContext.offsetLeft;
            }
            else
            {
                if (objMenuContainer != null &&
                    objMenuContext.clientWidth > objMenuContainer.clientWidth)
                {
                    x = objMenuContext.offsetLeft + objMenuContainer.clientWidth;
                }
                else
                {
                    x = objMenuContext.offsetLeft + objMenuContext.offsetWidth;
                }
            }

            y = objMenuContext.offsetTop + objMenuContext.offsetHeight

            var objParent = objMenuContext.offsetParent;
            while ("BODY" != objParent.tagName)
            {

                if (objParent.style.overflow.toLowerCase() == "auto")
                {
                    x = x + objParent.offsetLeft;
                    y = y + objParent.offsetTop;
                }
                else
                {
                    x = x + objParent.offsetLeft - objParent.scrollLeft;
                    y = y + objParent.offsetTop - objParent.scrollTop;
                }
                objParent = objParent.offsetParent;
            }

            cx = objParent.offsetWidth + objParent.scrollLeft;
            cy = objParent.offsetHeight + objParent.scrollTop;

            mnuPreDisplay(objMenu, x, y, cx, cy);

            cyContext = objMenuContext.offsetHeight;
        }
        else
        {

            x = window.event.clientX + window.event.offsetX;
            y = window.event.clientY + window.event.offsetY;

            if (objBody != null)
            {
                cx = objBody.offsetWidth + objBody.scrollLeft;
                cy = objBody.offsetHeight + objBody.scrollTop;

                mnuPreDisplay(objMenu, x, y, cx, cy);
                if (window.event.srcElement != null)
                    cyContext = window.event.srcElement.offsetHeight;
                else
                    cyContext = 0;
            }
        }

        if (theDir != "rtl")
        {
            if (cx < objMenu.offsetWidth)
            {
                x = 0;
            }
            else
            {
                x = x - objMenu.offsetWidth;
            }
        }
        if (cy < y + objMenu.offsetHeight)
        {
            y = cy - objMenu.offsetHeight - cyContext;
        }

        if (theDir != "rtl")
            if (x < 0) x = 0;
        if (y < 0) y = 0;

        if (objBody != null)
        {
            if (x + objMenu.offsetWidth > objBody.clientWidth + objBody.scrollLeft)
                x = objBody.clientWidth + objBody.scrollLeft - objMenu.offsetWidth;
        }

        mnuDisplay(objMenu, x, y);        
    }
}

function mnuIsEcb(objSource)
{
    if (objSource.tagName != "TABLE")
        return false;
    if (objSource.className == null)
        return false;
    if (objSource.className == strEcbSelectedClass)
        return true;
    if (objSource.className == strEcbUnselectedClass)
        return true;
    return false;
}

function mnuGetInvokingMenuButton()
{
    var objSource = window.event.srcElement; 
    while (objSource != null && !mnuIsEcb(objSource))
    {
        objSource = objSource.parentNode;
    }
    return objSource;
}

var gLastMenuWindow = null;

function ExecuteOnAccessibleMenuClick(fnOnClick)
{
    if (gLastMenuWindow == null)
        return;

    gLastMenuWindow.close();
    gLastMenuWindow = null;
    window.focus();
    ExecuteOnClick(fnOnClick);
}

function mnuGetAccessibleMenuText(objMenu, targetURL, dicParms, rgDisables)
{
    var colMenuItems = objMenu.getElementsByTagName("A");
    var nItem;
    var strHtml = "";    
    for (nItem = 0; nItem < colMenuItems.length; nItem++)
    {
        var objMenuItem = colMenuItems[nItem];
        mnuCustomizeItem(objMenuItem, targetURL, dicParms, rgDisables);

        var strOnMenuClick = objMenuItem.onclick;
        var strTitle = objMenuItem.getAttribute("title");

        if (objMenuItem.isDisabled)
        {
            strHtml = strHtml + "<li><span id=\"" + objMenuItem.id + "\">"
					+ strTitle + "</span></li>";
        }
        else
        {
	    strHtml = strHtml + "<li><a href=\"#\" id=\""
					+ objMenuItem.id + "\" "
					+ "onmenuclick"
					+ "=\""
					+ strOnMenuClick
					+ "\" onclick=\""
					+ "javascript:opener.ExecuteOnAccessibleMenuClick(this.getAttribute('" + "onmenuclick"+ "')); return false;"
					+ "\">"
					+ strTitle
					+ "</a></li>";        
        }        
    }
    return strHtml;
}

function mnuOpen(event, idMenu, targetURL, dicParms, rgDisables)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    if (window.event.srcElement.tagName == "A" &&
        null != window.event.srcElement.href &&
        "" != window.event.srcElement.href)
    {
        if(browseris.ie55up)
        {
            window.event.srcElement.click();
        }
        return;
    }

    window.clickHandled = true;

    mnuClose(window.event);                         

    var objMenubutton = mnuGetInvokingMenuButton();
    if (null != objMenubutton)
    {
        sMenuButtonID = objMenubutton.id;

        if (document.getElementById(idMenu) && "object" == typeof(document.getElementById(idMenu))) 
        {
            var objMenu = document.getElementById(idMenu);

            if (IsAccessibilityFeatureEnabled())
            {
	        var menu_html = "<html dir='" + mnuGetDirection() + "'><head><title>" + L_AccessibleMenu_Text + "</title></head><body><ul id='root'>";
                menu_html = menu_html + mnuGetAccessibleMenuText(objMenu, targetURL, dicParms, rgDisables);
                menu_html = menu_html + "</body></html>";
                var oNewWindow = window.open("/_layouts/blank.htm", "_blank", "status=no,toolbar=no,menubar=no,location=no");
                oNewWindow.document.write(menu_html);
                oNewWindow.document.close();
                oNewWindow.focus();
                gLastMenuWindow = oNewWindow;
            }
	    else
            {
                mnuPosition(idMenu, sMenuButtonID);            
                objMenu.style.display = "block";
                if(objMenu.setCapture)
                {
                    objMenu.setCapture();
                    objMenu.onlosecapture = mnuClose;
                }
                objMenu.onclick = mnuClick;
                objMenu.onmouseover = mnuMouseOver;
                document.oncontextmenu = mnuNoContext;

                if (mnuGetDirection() == "rtl")
                {
                    objMenu.style.backgroundImage = "url(" + "/_layouts/images/MGradRTL.gif" + ")";
                    objMenu.style.backgroundPositionX = "right";
                }
                else
                {
                    objMenu.style.backgroundImage = "url(" + "/_layouts/images/MGrad.gif" + ")";
                    objMenu.style.backgroundPositionX = "left";
                }
                objMenu.style.backgroundRepeat = "repeat-y"

                mnuCustomizeItems(objMenu, targetURL, dicParms, rgDisables);
                sOpenMenuID = idMenu;
            }
        }
    }
    window.event.cancelBubble = true;   
    window.event.returnValue = false;   
    ecbFocus(window.event, sMenuButtonID);
}

function mnuKeyPress(event, idMenu, targetURL, dicParms, rgDisables)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    if ((window.event.shiftKey && window.event.keyCode == 13) ||
        (window.event.altKey && window.event.keyCode == 40) )
            mnuOpen(window.event, idMenu, targetURL, dicParms, rgDisables);
}

function mnuGetMenuFromMenuItem(objMenuItem)
{
    var oCurrent = objMenuItem;
    while (oCurrent.className != "ms-MenuUI")
        oCurrent = oCurrent.parentNode;
    return oCurrent;
}

function mnuGetMenuRowFromElement(oElement)
{
    if ((browseris.ie55up && oElement.children.length > 0) || (!browseris.ie55up && oElement.childNodes.length > 0))
    {
        if (oElement.firstChild.className == strMenuItemTableCell ||
            oElement.firstChild.className == strMenuItemTableCellH)
                return oElement;
    }

    while (oElement.className != strMenuItemTableCell &&
           oElement.className != strMenuItemTableCellH)
        oElement = oElement.parentNode;
    return oElement.parentNode;
}

function mnuGetItemFromElement(oElement)
{
    var oRow = mnuGetMenuRowFromElement(oElement);
    if (oRow)
    return oRow.getElementsByTagName("A")[0];
    return null;
}

function mnuGetNextMenuItem(objMenuItem)
{
    var objMenu = mnuGetMenuFromMenuItem(objMenuItem);
    objMenuItem = mnuGetItemFromElement(objMenuItem);
    if (objMenuItem)
    {
        var colMenuItems = objMenu.getElementsByTagName("A");
        var oRow;
        var nItem;
        var nCurrent = -1;
        var oItem;
        for (nItem = 0; nItem < colMenuItems.length; nItem++)
        {
            oItem = colMenuItems[nItem];
            if (oItem == objMenuItem)
            {
                nCurrent = nItem;
            }
            else if (nCurrent != -1)
            {
                oRow = mnuGetMenuRowFromElement(oItem);
                if (oRow && !oRow.isDisabled)
                    return oItem;
            }
        }
        for (nItem = 0; nItem < nCurrent; nItem++)
        {
            oItem = colMenuItems[nItem];
            oRow = mnuGetMenuRowFromElement(oItem);
            if (oRow && !oRow.isDisabled)
                return oItem;
        }
    }
    return objMenuItem;
}

function mnuGetPreviousMenuItem(objMenuItem)
{
    var objMenu = mnuGetMenuFromMenuItem(objMenuItem);
    objMenuItem = mnuGetItemFromElement(objMenuItem);
    if (objMenuItem)
    {
        var colMenuItems = objMenu.getElementsByTagName("A");
        var oRow;
        var nItem;
        var nCurrent = -1;
        var oItem;
        for (nItem = colMenuItems.length -1; nItem > -1; nItem--)
        {
            oItem = colMenuItems[nItem];
            if (oItem == objMenuItem)
            {
                nCurrent = nItem;
            }
            else if (nCurrent != -1)
            {
                oRow = mnuGetMenuRowFromElement(oItem);
                if (oRow && !oRow.isDisabled)
                    return oItem;
            }
        }
        for (nItem = colMenuItems.length -1; nItem > nCurrent; nItem--)
        {
            oItem = colMenuItems[nItem];
            oRow = mnuGetMenuRowFromElement(oItem);
            if (oRow && !oRow.isDisabled)
                return oItem;
        }
    }
    return objMenuItem;
}

function mnuSelectPrevious(objMenuItem)
{
    var oPrevious = mnuGetPreviousMenuItem(objMenuItem);
    var oRow = mnuGetMenuRowFromElement(oPrevious);
    if (oRow && !oRow.isDisabled)
    {
        oPrevious.focus();
    }
}

function mnuSelectNext(objMenuItem)
{
    var oNext = mnuGetNextMenuItem(objMenuItem);
    var oRow = mnuGetMenuRowFromElement(oNext);
    if (oRow && !oRow.isDisabled)
    {
        oNext.focus();
    }
}

function mnuItemKeydown(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    switch (window.event.keyCode)
    {
        case 13: 
            window.event.cancelBubble = true; 
            window.event.returnValue = false; 
            mnuItemClick(window.event);
            break;
    case 27: 
            mnuClose(window.event);
            break;
    case 32: 
            window.event.cancelBubble = true; 
            window.event.returnValue = false; 
            mnuItemClick(window.event);
            break;
        case 38: 
            window.event.cancelBubble = true; 
            window.event.returnValue = false; 
            mnuSelectPrevious(window.event.srcElement);
            break;
        case  9: 
            window.event.cancelBubble = true; 
            window.event.returnValue = false; 
            if (window.event.shiftKey)
                mnuSelectPrevious(window.event.srcElement);
            else
                mnuSelectNext(window.event.srcElement);
            break;
        case 40: 
            window.event.cancelBubble = true; 
            window.event.returnValue = false; 
            mnuSelectNext(window.event.srcElement);
            break;
    }
}

function mnuItemMouseEnter(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var oRow = mnuGetMenuRowFromElement(window.event.srcElement);
    if (oRow && !oRow.isDisabled)
    {
        var oItem = mnuGetItemFromElement(window.event.srcElement);
        if (oItem)
        {
            window.event.cancelBubble = true; 
            window.event.returnValue = false; 
            oItem.focus();
        }
    }
}

function mnuItemClick(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var oRow = mnuGetMenuRowFromElement(window.event.srcElement);
    if (oRow && !oRow.isDisabled)
    {
        var oItem = mnuGetItemFromElement(window.event.srcElement);
        if (oItem)
        {
            if(browseris.ie55up)
            {
                oItem.click();
            }
            else
            {
                oItem.onclick();
            }
        }
    }
}

function mnuMouseOver(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    if (document.getElementById(sOpenMenuID) && "object" == typeof(document.getElementById(sOpenMenuID))) 
    {
        var objMenu = document.getElementById(sOpenMenuID);
        var all = GetAllSubElements(objMenu);
        for (var nObject = 0; nObject < all.length; nObject++)
        {
            if (window.event.srcElement == all[nObject])
            {
                window.event.cancelBubble = true; 
                window.event.returnValue = false; 
                mnuItemMouseEnter(window.event);
                return;
            }
        }
    }
}

function mnuClick(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    window.clickHandled = true;

    var objSource = window.event.srcElement; 
    var objParent = objSource.parentNode;
    if (document.getElementById(sOpenMenuID) && "object" == typeof(document.getElementById(sOpenMenuID))) 
    {
        var objMenu = document.getElementById(sOpenMenuID);
        var nObject;
        var all = GetAllSubElements(objMenu);
        for (nObject = 0; nObject < all.length; nObject++)
        {
            if (objSource == all[nObject])
            {
                mnuItemClick(window.event);
                return;
            }
        }

        if (objSource.className != null &&
            objSource.className == strEcbUnselectedClass)
        {
            if(browseris.ie55up)
            {
                objSource.click();
            }
            else
            {
                objSource.onclick();
            }
        }
        else if (objParent != null &&
            objParent.className != null &&
            objParent.className == strEcbSelectedClass)
        {
            if(browseris.ie55up)
            {
                objParent.click();
            }
            else
            {
                objParent.onclick();
            }
        }
        else
        {
            mnuClose(window.event);
        }
    }
}

function mnuGetRowFromMenuItem(objMenuItem)
{
    return mnuGetMenuRowFromElement(objMenuItem)
}

function mnuItemSelect(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var oItem = mnuGetMenuRowFromElement(window.event.srcElement);
    var oItemTableCell = oItem.firstChild;
    if(!browseris.ie55up)
    {
        oItemTableCell = oItem.childNodes[1];
    }
    var oItemTable = oItemTableCell.firstChild;
    oItemTableCell.className = strMenuItemTableCellH;
    oItemTable.className = strMenuItemTableH;
    window.status = oItem.innerText;
    window.event.cancelBubble = true; 
    window.event.returnValue = false; 
    ecbFocus(window.event, sMenuButtonID);
}

function mnuItemDeselect(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var oItem = mnuGetMenuRowFromElement(window.event.srcElement);
    var oItemTableCell = oItem.firstChild;
    if(!browseris.ie55up)
    {
        oItemTableCell = oItem.childNodes[1];
    }
    var oItemTable = oItemTableCell.firstChild;
    oItemTableCell.className = strMenuItemTableCell;
    oItemTable.className = strMenuItemTable;
    window.status = window.defaultStatus;
    window.event.cancelBubble = true; 
    window.event.returnValue = false; 
}

function mnuNoContext()
{
    return false;
}

function ecbGetSelectedElement(elem, tagName)
{
    while(elem != null && elem.tagName != tagName)
        elem = elem.parentNode;

    return elem;
}

function ecbMouseOver(event, itemId)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var oEcb = document.getElementById(itemId);
    if (null != oEcb)
    {
        var oActive = document.activeElement;
        if(!oActive)
        {
            oActive = window.event.explicitOriginalTarget;
        }
        if (oActive == oEcb && oEcb.className != strEcbSelectedClass)
        {
            ecbFocus(window.event, itemId);
        }
        else
        {
            i = 0;
            var all = GetAllSubElements(oEcb);
            while (all[i] != null)
            {
                if(all[i].style)
                {
                    all[i].style.cursor = "hand";
                }
                i++;
            }
            oEcb.focus();
        }
    }
}

function ecbMouseOut(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var oSrc = window.event.srcElement;
    var oActive = document.activeElement;
    if(!oActive)
    {
        oActive = window.event.explicitOriginalTarget;
    }
    while (oSrc != null && oSrc != oActive)
        oSrc = ecbGetSelectedElement(oSrc.parentNode, "TABLE");
    if (oSrc == null)
        return; 
    var i = 0;
    var all = GetAllSubElements(oSrc);
    while (all[i] != null)
    {
        if (all[i] == window.event.toElement)
            return;
        i++;
    }
    ecbDeSelect(oSrc);
}

function ecbBlur(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var oTable = window.event.srcElement;
    if (mnuIsEcb(oTable))
        ecbDeSelect(oTable);
}

function ecbFocus(event, itemId)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    var ecbTable = document.getElementById(itemId);
    if (ecbTable != null && mnuIsEcb(ecbTable))
    {
        ecbTable.className     = strEcbSelectedClass;
        ecbTable.style.paddingTop = 0; 
        ecbTable.onmouseout    = ecbMouseOut;
        ecbTable.onblur        = ecbBlur;
        if (sOpenMenuID == "")
            ecbTable.oncontextmenu = ecbRightClick;
        else
            ecbTable.oncontextmenu = mnuNoContext;

        var titleRow = (browseris.ie55up) ? ecbTable.children[0].children[0] : ecbTable.childNodes[0].childNodes[0];        
        if (titleRow != null)
        {
            var i = 0;
            var imageCell;
            if(browseris.ie55up)
            {
                while (titleRow.children[i] != null)
                    imageCell = titleRow.children[i++];
            }
            else
            {
                while (titleRow.childNodes[i] != null)
                    imageCell = titleRow.childNodes[i++];
            }

            if (imageCell != null)
            {
                imageCell.className = "ms-menuimagecell";
                imageCell.style.visibility="visible";
                imageCell.style.paddingBottom = 0;
                imageCell.style.paddingTop = 0;
            }

            if (ecbTable.parentNode.tagName == "TD")
            {
                var ecbTitleCell = (browseris.ie55up) ? titleRow.children[0] : titleRow.childNodes[0];
                var ecbTitleElement;

                if (ecbTable.parentNode.clientWidth < ecbTable.offsetWidth)
                {
                    var cx = ecbTable.parentNode.clientWidth - ecbTable.offsetWidth;
                    var cxTitleCell  = ecbTitleCell.clientWidth + cx;
                    var cxElement    = cxTitleCell - imageCell.clientWidth + (imageCell.clientWidth - imageCell.offsetWidth) * 2;

                    if ((browseris.ie55up && ecbTitleCell.children[0] == null) || 
                        (!browseris.ie55up && ecbTitleCell.childNodes[0] == null))
                    {
                        var strNewHtml = ecbTitleCell.innerText;
                        ecbTitleCell.innerText = "";
                        var oSpan = document.createElement("SPAN");
                        oSpan.innerText = strNewHtml;
                        ecbTitleCell.insertAdjacentElement("AfterBegin", oSpan)
                    }

                    ecbTitleCell.style.overflow = "hidden";
                    ecbTitleElement = (browseris.ie55up) ? ecbTitleCell.children[0] : ecbTitleCell.childNodes[0];
                    ecbTitleElement.style.overflow = "hidden";
                    ecbTitleElement.style.width = cxElement.toString() + "px";

                    ecbTitleCell.style.width = cxTitleCell.toString() + "px";
                }
                if ((browseris.ie55up && ecbTitleCell.children[0] == null) ||
                    (!browseris.ie55up && ecbTitleCell.childNodes[0] == null))
                {
                    ecbTitleElement = ecbTitleCell;
                }
                else
                {
                    ecbTitleElement = (browseris.ie55up) ? ecbTitleCell.children[0] : ecbTitleCell.childNodes[0];
                }
                ecbTitleElement.title = ecbTitleElement.innerText;
            }
        }
    }
}

function ecbRightClick(event)
{
    if(!browseris.ie55up)
    {
        window.event = event;
        window.event.srcElement = event.target;
    }

    if (window.event.srcElement.tagName == "A" &&
        null != window.event.srcElement.href &&
        "" != window.event.srcElement.href)
    {

        return true;
    }

    if(browseris.ie55up)
    {

        window.event.srcElement.click();
        return false;
    }
}

function ecbDeSelect(oTable)
{
    if (oTable.tagName != "TABLE")
        return;
    oTable.className = strEcbUnselectedClass;
    oTable.style.paddingTop = 1; 
    document.oncontextmenu = null;

    var titleRow = (browseris.ie55up) ? oTable.children[0].children[0] : oTable.childNodes[0].childNodes[0];    
    if (null != titleRow)
    {
        var i = 0;
        var imageCell;
        if(browseris.ie55up)
        {
            while (titleRow.children[i] != null)
                imageCell = titleRow.children[i++];
        }
        else
        {
            while (titleRow.childNodes[i] != null)
                imageCell = titleRow.childNodes[i++];
        }

        if (null != imageCell)
        {
            imageCell.style.visibility="hidden";
            imageCell.className = "";
        }

        var ecbTitleCell = (browseris.ie55up) ? titleRow.children[0] : titleRow.childNodes[0];        
        if (null != ecbTitleCell)
        {
            ecbTitleCell.style.overflow = "visible";
            ecbTitleCell.style.width = "100%";
            var ecbTitleElement = (browseris.ie55up) ? ecbTitleCell.children[0] : ecbTitleCell.childNodes[0];
            if (null !=  ecbTitleElement)
            {
                ecbTitleElement.style.overflow = "visible";
                ecbTitleElement.style.width = "auto";
            }
        }
    }
}

function GetAllSubElements(obj)
{
    if(browseris.ie55up)
    {
        return obj.all;
    }

    var a = new Array();

    if(!obj.childNodes)
    {
        return a;
    }

    for(var i = 0; i < obj.childNodes.length; ++i)
    {
        if(typeof(obj.childNodes[i]) == "object")
        {
            a[a.length] = obj.childNodes[i];
            var ta = GetAllSubElements(obj.childNodes[i]);
            for(var j = 0; j < ta.length; ++j)
            {
                a[a.length] = ta[j];
            }
        }
    }

    return a;
}

window.onclick = function(event) 
    {
        if(browseris.ie55up)
        {
            return true;
        }

        if(!window.clickHandled)
        {
            mnuClose(event);
        }
        window.clickHandled = false;
    }

