﻿var oMenuContainer;

var aMenuOptions = new Array();

aMenuOptions.length = 4;
aMenuOptions[0] = new Array();
aMenuOptions[1] = new Array();
aMenuOptions[2] = new Array();
aMenuOptions[3] = new Array();

var oTargetObject;
var iTargetLeft;
var iTargetTop;
var blnContextMenuIsOpen = false;
var blnDontCloseMenu = false;
var intCurrLevel = 0;
var intTimeToClose = 0;
var blnNeedsToClose = false;

function MenuOptions() {
    this.menuText;
    this.menuAction;
    this.checked;
    this.disabled;
    this.separator = false;
    this.hasChildren = false;
    this.object;
    this.children;
}

function AddMenuOption(strName, strAction, oObject, blnHasChildren) {
    var oOption = new MenuOptions();
    oOption.menuText = strName;
    oOption.menuAction = strAction;
    oOption.checked = false;
    oOption.disabled = false;
    oOption.object = oObject;
        
    if(blnHasChildren) {
        oOption.hasChildren = true;
    } else {
        oOption.hasChildren = false;
    }
    
    aMenuOptions[intCurrLevel][aMenuOptions[intCurrLevel].length] = oOption;
}

function AddMenuSeparator() {
    var oOption = new MenuOptions();
    oOption.menuText = "";
    oOption.menuAction = "";
    oOption.separator = true;

    aMenuOptions[intCurrLevel][aMenuOptions.length] = oOption;

}

function ClearMenuOptions(intLevel) {

    var iLoop = 0;
    
    if(!intLevel) {
        intLevel = 0;
    }

    for(iLoop=intLevel;iLoop < 4; iLoop++) {
        aMenuOptions[iLoop].length = 0;
    }
}    

function SetTargetObject(oTarget) {
    oTargetObject = oTarget;
}

function SetContextMenuContainer(oContainer, intLevel) {

    if(!oMenuContainer) {
        oMenuContainer = new Array();
    }
    
    oMenuContainer[intLevel] = oContainer;
}

function ShowContextMenu(oObject, intX, intY, intLevel) {
    var iLeft;
    var iTop;
    var oCurr;
    var strHTML = "";
    var offsetX;
    var offsetY;
    var intBGHeight;
    
//    evt = (evt) ? evt: event;
    
    if(!intLevel) {
        intLevel = 0;
    }

    intCurrLevel = intLevel;
            
    if(oObject) {
        oTargetObject = oObject;
    }        
   
   
    if((isFinite(intX) && isFinite(intY))) {
        iLeft = intX;
        iTop = intY;
    } else {
        iLeft = evt.clientX;
        iTop = evt.clientY; 
    }
    
    //Do this to keep the menu from popping up partly off the screen.
    iLeft = Math.min(iLeft, getInsideWindowWidth()-172);
    
    oMenuContainer[intCurrLevel].style.top = (iTop-1)+"px";
    oMenuContainer[intCurrLevel].style.left = (iLeft-2)+"px";

    if(aMenuOptions[intCurrLevel].length > 0) {

        if(aMenuOptions[intCurrLevel].length > 1) {
            intBGHeight = ((35*aMenuOptions[intCurrLevel].length)+30);
        } else {
            intBGHeight = 55;
        }
  //      if(!IsIE()) {
            intBGHeight += 5*aMenuOptions[intCurrLevel].length;
  //      }
        
        strHTML = "<img src='../images_gen/MenuBlackPanel.png' alt='' class='MenuBackground' width='280px' height='" + (intBGHeight).toString() + "px'/>";
        strTable = "<div class='TablePanel'><table class='ContextMenuTable' cellspacing='0' cellpadding='0'>";
        for(iLoop=0;iLoop<aMenuOptions[intCurrLevel].length;iLoop++) {
            if(aMenuOptions[intCurrLevel][iLoop].disabled) {
                strRowClass = "ContextMenuRow_dis";
            } else {
                strRowClass = "ContextMenuRow";
            }
                        
            if(aMenuOptions[intCurrLevel][iLoop].separator) {
                strTable += "<tr class='ContextSeparator'>"
                         + "<td nowrap colspan=2><hr width=100%></td></tr>";
            } else {
                strTable += "<tr class='" + strRowClass + "' onclick=\"HideContextMenu();" + aMenuOptions[intCurrLevel][iLoop].menuAction 
                         + "\" onmouseover='ContextMenuRow_MouseOver(this);' onmouseout='ContextMenuRow_MouseOut(this);' SeqNum='" + iLoop + "' Level='" + intCurrLevel + "' id='MI" + intCurrLevel.toString() + "_" + iLoop.toString() + "'>"
                        + "<td nowrap>";
                        
//                        if(!IsIE()) {
                            strTable += "&nbsp;&nbsp;&nbsp;&nbsp;";
//                        }
                        
                strTable += aMenuOptions[intCurrLevel][iLoop].menuText 
                         + (aMenuOptions[intCurrLevel][iLoop].hasChildren ? "<img src='../images_gen/MenuSubMenuArrow.png' class='ContextMenuSubArrow'" : "") + "</td></tr>"
            }
        }
        strTable += "</table></div>";
        
        strHTML += strTable; // + "</div></div></div>";

        oMenuContainer[intCurrLevel].innerHTML = strHTML;
        
    }    
    blnContextMenuIsOpen = true;
    //StartFadeIn(oMenuContainer, 10);
    oMenuContainer[intCurrLevel].style.visibility="visible";    
}

function HideContextMenu(intLevel) {

    var iLoop = 0;
    
    if(!intLevel) {
        intLevel = 0;
    }
    
    for(iLoop = intLevel; iLoop < 4; iLoop++) {
        oMenuContainer[iLoop].style.visibility = "hidden";
    }

    if(intLevel == 0) {
        blnContextMenuIsOpen = false;
    }
    
    var oMenu = document.getElementById("headerNav2");

    for(iLoop=0;iLoop < oMenu.childNodes.length; iLoop++) {
        oMenu.childNodes[iLoop].className = "navHeader";
    }
    
    return false;
}
function ContextMenuRow_MouseOver(oObject) {
    var intSeqNum = 0;
    var intLevel = 0;
        
    if(oObject.className=="ContextMenuRow") {
        oObject.className="ContextMenuRowSelected";
        intSeqNum = parseInt(oObject.getAttribute("SeqNum"));
        intLevel = parseInt(oObject.getAttribute("Level"));

        intCurrLevel = intLevel;
        HideContextMenu(intLevel+1);

        if(aMenuOptions[intCurrLevel][intSeqNum].hasChildren) {
            CreateMenu(aMenuOptions[intCurrLevel][intSeqNum].object, intCurrLevel+1, intSeqNum);
        }
        blnNeedsToClose = false;
    }

}

function ContextMenuRow_MouseOut(oObject) {
    if(oObject.className=="ContextMenuRowSelected") {
        oObject.className="ContextMenuRow";
    }
    StartMenuCloseTimer();
}

function BuildMenuFromUL(oObject) {

    var iLoop;
    var oMenuItems = oObject.childNodes;
        
    intCurrLevel = 0;

    for(iLoop=0;iLoop < oMenuItems.length;iLoop++) {
        oMenuItem = oMenuItems[iLoop];

        if(oMenuItem.tagName == "LI") {
            if (window.attachEvent) {
                oMenuItem.attachEvent("onmouseover", Menu_MouseOver);
                oMenuItem.attachEvent("onmouseout", Menu_MouseOut);
            } else {
                oMenuItem.addEventListener("mouseover", Menu_MouseOver, false);
                oMenuItem.addEventListener("mouseout", Menu_MouseOut, false);
            }
        }
//        oMenuItem.onmouseover = Menu_MouseOver;
//        oMenuItem.onmouseout = Menu_MouseOut;
    }
    
}

function Menu_MouseOver(evt) {

    evt = (evt) ? evt: event;
    
    var oTarget = (evt.target) ? evt.target : evt.srcElement;

    if(oTarget.getElementsByTagName("UL").length > 0 ||
       oTarget.parentNode.getElementsByTagName("UL").length > 0) {    
        HideContextMenu(1);
        CreateMenu(oTarget);
        blnNeedsToClose = false;

    } else {
        HideContextMenu(0);
        intCurrLevel = 0;
    }

    if(oTarget.tagName == "A") {
        var oSiblings = oTarget.parentNode.parentNode.childNodes;
        var iLoop;
        
        for(iLoop = 0;iLoop < oSiblings.length;iLoop++) {
            oSiblings[iLoop].className="navHeader";
        }

        oTarget.parentNode.className="navHeaderMO";
    }

}

function Menu_MouseOut() {
    StartMenuCloseTimer();
}

function CreateMenu(oTarget, intLevel, intParentSeqNum) {

    if(!intLevel) {
        intLevel = 0;
    }
    
    intCurrLevel = intLevel;
    
    if(oTarget.tagName=="A" || oTarget.tagName=="a" || intCurrLevel > 0) {
        var oChildULs;
        var oMenuItems;
        var oSubItem;
        var strItemName;
        var strTarget="";
        var strLink;
        var iLoop;
        var aRegion;
        var blnHasChildren = false;

        oChildULs = oTarget.getElementsByTagName("UL");
        if(oChildULs.length == 0) {
            oChildULs = oTarget.parentNode.getElementsByTagName("UL");        
        }
        ClearMenuOptions(intLevel);

        if(oChildULs.length > 0) {

            oMenuItems = oChildULs[0].childNodes;

            for(iLoop = 0; iLoop < oMenuItems.length; iLoop++) {
//                if(!IsIE()) {
                    if(oMenuItems[iLoop].nodeName=="LI") {
                       oSubItem = oMenuItems[iLoop].getElementsByTagName("A")[0];
                       strItemName = oSubItem.innerHTML;
                       strTarget = (oSubItem.target != null)?oSubItem.target:"";
                       
                       strLink = "OpenPage('" + oSubItem.href + "','" + strTarget + "');";
                        
                        blnHasChildren = (oMenuItems[iLoop].getElementsByTagName("UL").length > 0)? true: false;
                        AddMenuOption(strItemName,strLink,oMenuItems[iLoop],blnHasChildren);            
                    }
//                } else {
//                    if(oMenuItems[iLoop].nodeName=="LI") {
//                        strItemName = oMenuItems[iLoop].childNodes[0].innerHTML;
//                        strLink = "OpenPage('" + oMenuItems[iLoop].childNodes[0].href + "');";
//                        blnHasChildren = (oMenuItems[iLoop].getElementsByTagName("UL").length > 0)? true: false;
//                        AddMenuOption(strItemName,strLink,oMenuItems[iLoop],blnHasChildren);            
//                    }
//                }
            }

            if(intCurrLevel == 0) {
                aRegion = FindRegion(oTarget.parentNode);

                intLeft = aRegion[0]-5;
                intTop = aRegion[1]+20;
            } else {
                aRegion = FindRegion(oMenuContainer[intCurrLevel-1]);
//                aRegion = FindRegion(oTarget);
                
                intLeft = aRegion[0] + 259;
                intTop = aRegion[1] + (32 * intParentSeqNum);
            }
        
            ShowContextMenu(oTarget.parentNode, intLeft, intTop, intLevel);
            
        }
    }
}

function FindRegion(oObject) {

    var intLeft = 0;
    var intTop = 0;
    var intWidth = 0;
    var intHeight = 0;

    var aReturn;
    
    var oTrail = oObject;
    
    while(oTrail) {
        intLeft += oTrail.offsetLeft;
        intTop += oTrail.offsetTop;
        oTrail = oTrail.offsetParent;
    }

    intWidth = oObject.offsetWidth;
    intHeight = oObject.offsetHeight;
 
    aReturn = new Array();
    
    aReturn[0] = intLeft;
    aReturn[1] = intTop;
    aReturn[2] = intWidth;
    aReturn[3] = intHeight;
    
    return aReturn;
}

function StartMenuCloseTimer() {
    blnNeedsToClose = true;
    intTimeToClose = 2000;
    setTimeout("MenuCloseTimer()",250);
}

function StopMenuCloseTimer() {
    var iLoop;
    
//    for(iLoop=0;iLoop < 4; iLoop++) {
//        oMenuContainer[iLoop].style.filter = "alpha(opacity=100)";    
//    }
}

function MenuCloseTimer() {
    if(blnNeedsToClose) {

        intTimeToClose -= 250;
        
        if(intTimeToClose <= 0) {
            HideContextMenu();
        } else {
            setTimeout("MenuCloseTimer()",250);
        }
    } else {
        StopMenuCloseTimer();
    }
}

function IsIE() {
    if (window.attachEvent) {
        return true;
    } else {
        return false;
    }    
}