//  ================================================================================
//  XMENU FUNCTIONS
//  --------------------------------------------------------------------------------
//  Version:        1.5
//  Author:         Michael Maw
//  Requirements:   Prototype 1.6.0.2
//  ================================================================================

//  FUNCTION LIST
//  ================================================================================
//  01) styleXMenu(XCoord, YCoord, CSSClassLevel1)
//  02) XMenuOnClick(XMenuName, XMenuClass, XMenuItemID, XMenuItemLevelNumber, hasSubmenu)
//  03) XMenuOnMouseOver(XMenuName, XMenuClass, XMenuItemID, menuItemLevelNumber, hasSubmenu)
//  04) closeActiveXMenu(n)


//	GLOBAL VARIABLES
//	================================================================================
    var activeXMenuLevel = new Array(5);
    activeXMenuLevel[ 0 ] = null;         // not used, simply a place holder
    activeXMenuLevel[ 1 ] = null;         // stores the name of the active XMenu
	activeXMenuLevel[ 2 ] = null;         // stores the name of the currently active level2 submenu
	activeXMenuLevel[ 3 ] = null;         // same idea as previous...
	activeXMenuLevel[ 4 ] = null;


//	1) STYLE THE XMENU
//	================================================================================
	function styleXMenu(XCoord, YCoord, CSSClassLevel1) {
        try {
              // 1-1) SET LOCAL VARIABLES
              try { var thisXMenu = $(this.id); } 
              catch (e) { return false; }
            
              var menuTBody = thisXMenu.firstChild;
		      var menuRow = menuTBody.firstChild;
		      var menuCells = menuRow.childNodes;

		      //1-2) POSITION THE MENU
		      thisXMenu.style.pixelLeft = parseInt(XCoord);
		      thisXMenu.style.pixelTop = parseInt(YCoord);

		      // 1-4) APPLY STYLE TO EACH TABLE CELL
		      for (mc=0; mc<menuCells.length; mc++) {
				    menuCells[mc].className = CSSClassLevel1;
            }
        } catch (e) {
            //alert("Error: styleXMenu() - " + e.message);
        }
    }


//	2) ONCLICK EVENT HANDLER
//	================================================================================
	function XMenuOnClick(XMenuName, XMenuClass, XMenuItemID, XMenuLevel, hasSubmenu) {
 		try {
 		    if (debug) { appMsg("XMenuOnClick('"+XMenuName+"','"+XMenuClass+"','"+XMenuItemID+"',"+XMenuLevel+","+hasSubmenu+");", true); }
     		
 		    if (activeXMenuLevel[1] != XMenuName) {
                 if (activeXMenuLevel[1] != null) {
                   closeActiveXMenu(1);
                }
               
		       activeXMenuLevel[1] = XMenuName;
    		   
               // Fire XMenuOnMouseOver for menu item
               XMenuOnMouseOver(XMenuName, XMenuClass, XMenuItemID, XMenuLevel, hasSubmenu) 
               } 
            else {
                $(XMenuItemID).className = XMenuClass;
                closeActiveXMenu(1);
            }
 		} catch (e) {
 		    //alert("Error: XMenuOnClick() - " + e.message);
 		}
 		
    }

//	3) ONMOUSEOVER EVENT HANDLER
//	================================================================================
	function XMenuOnMouseOver(XMenuName, XMenuClass, XMenuItemID, XMenuLevel, hasSubmenu) {
        try {
            if (debug) { appMsg("XMenuOnMouseOver('"+XMenuName+"','"+XMenuClass+"','"+XMenuItemID+"',"+XMenuLevel+","+hasSubmenu+");", true); }
            
            // If the XMenu is active, close old submenus and open new submenus for the mouseOver menu item
            if (activeXMenuLevel[1] == XMenuName) {
			    if (activeXMenuLevel[XMenuLevel+1] != null) {
                   var modifier = 0;
                   if (activeXMenuLevel[XMenuLevel+1] == ("GroupLevel" + (XMenuLevel + 1) + "_" + XMenuItemID)) { modifier = 1; }
                   for (var i = 4; i > (XMenuLevel + modifier); i--) {
                        if (activeXMenuLevel[i] != null) { 
                            $(activeXMenuLevel[i]).hide();
                            activeXMenuLevel[i] = null;
                        }
				    }
                }    
                // Highlight XMenu Item
                $(XMenuItemID).className = XMenuClass + "Hi";
                
                // Open Submenu if one exists
   			    if (hasSubmenu) {
                    activeXMenuLevel[XMenuLevel + 1] = "GroupLevel" + (XMenuLevel + 1) + "_" + XMenuItemID;
                    $(activeXMenuLevel[XMenuLevel + 1]).show();
  
                    if (debug) {
                        appMsg("activeXMenuLevel[" + (XMenuLevel + 1) + "] = '" + activeXMenuLevel[XMenuLevel + 1] + "';", false);
                        appMsg("$(activeXMenuLevel[" + (XMenuLevel + 1) + "]).style.display = '" + $(activeXMenuLevel[XMenuLevel + 1]).style.display + "';");
                    }
                }
		    }
		} catch (e) {
		    //alert("Error: XMenuOnMouseOver() - " + e.message);
		}
	}
    
//	4) CLOSE ACTIVE XMENU
//	================================================================================
	function closeActiveXMenu(n) {
        try {
            // ONLY CLOSE THE MENU IF THE USER CLICKS ON SOMETHING OTHER THAN A MENU OBJECT
            if (navigator.userAgent.indexOf("MSIE") == -1) {
	            var evt = n; // event object
	            if (evt != 1) {
	                var target = evt.target; // event target
	                var targetID = target.getAttribute("id"); // event target id
	                if (targetID != null) {
                        if ((targetID.search("XMenu") != -1)) return false;
                    }
                }
	        } else {
    	        if ((event.srcElement.id.search("XMenu") != -1) && (n != 1)) return false;
    	    }
    	    
	        // CLOSE ALL OPEN MENUS
            for (i = 4; i > 1; i--) {
		          if (activeXMenuLevel[ i ] != null) { $(activeXMenuLevel[i]).hide(); }
		    }
            activeXMenuLevel[ 1 ] = null;
        } catch (e) {
            //alert("Error: closeActiveXMenu() - " + e.message);
        }
	}