﻿function Menu (strMenuDiv) {
	/*** Private Variables ***/
	var my = this;
	var oCurrentMenuHeader = null;
	var oDelayMenuClose = null;
	var ynOnMenu = false;

	/*** Public Variables ***/
	var numDelayTimeout = 1000;
	this.SetDelayTimeout = function (newValue) { numDelayTimeout = newValue; }

	var ynMenuOpen = false;
	this.GetMenuOpenStatus = function () { return ynMenuOpen; }
    
	/*** Initialization ***/
	this.Initialize = function (strMenuDiv) {
		var oMenu = document.getElementById(strMenuDiv); 
		var menuItems = oMenu.getElementsByTagName("div"); 
		
		for (var i = 0; i < menuItems.length; i++) {
			var menuItem = menuItems[i];

			switch(menuItem.getAttribute("menuType")) {
			    case "header":
			        InitializeHeader(menuItem);
			        break;
                case "dropdown":
			        menuItem.onmouseover = function (oEvent) { MouseOver_SubMenu(this); };
			        menuItem.onmouseout = function (oEvent) { MouseOut_SubMenu(this); };
                    break;
			}
		}
		addEventListener(document, "click", DocumentClick, false);
	}

    var InitializeHeader = function (oElement) {
        for (var i=0; i<oElement.childNodes.length; i++) {
            var oChildElement = oElement.childNodes[i];
	        oChildElement.onmouseover = function (oEvent) { MouseOver_Header(this); }; 
	        oChildElement.onmouseout = function (oEvent) { MouseOut_Header(this); }; 
	        oChildElement.onclick = function (oEvent) { MouseClick_Header(this); }; 
        }
    }


	/*** Events ***/
	/* Triggered when cursor is on a menu header item */
	var MouseOver_Header = function (oElement) {
		MouseOut_Header(oElement);
		oElement.className = "menu-on";
		if (ynMenuOpen && oCurrentMenuHeader != oElement && oElement.getAttribute("href") == null) { MouseClick_Header(oElement); }
		else { MouseClick_Header2(oElement);}
		oCurrentMenuHeader = oElement;
		MouseOver_SubMenu(oElement);
		ynOnMenu = true;
		
	}

	/* Triggered when cursor leaves a menu header item */
	var MouseOut_Header = function (oElement) {
		if (oCurrentMenuHeader != null && ynMenuOpen == false) { oCurrentMenuHeader.className = "menu-off"; }
		ynOnMenu = false;
	}

	/* Triggered when cursor clicks a menu header item */
	var MouseClick_Header = function (oElement) {
		if (oElement.getAttribute("href") != null) {
			window.location = oElement.getAttribute("href");
		}
		else {
		    var ynMenuOpenCurrent = ynMenuOpen;
		    var subMenu = document.getElementById('divMenuDropDown' + oElement.getAttribute("menuItemID"));
    		
		    CloseCurrentDropDown();
		    oElement.className = "menu-on";

		    if (subMenu != null) {
			    if (!ynMenuOpenCurrent || oCurrentMenuHeader != oElement) {
				    subMenu.style.display = 'inline';
				    oCurrentMenuHeader = oElement;
				    ynMenuOpen = true;
			    }
		    }
		}
	}
	
	/* Triggered when cursor clicks a menu header item and item is href*/
	var MouseClick_Header2 = function (oElement) {
		
		    var ynMenuOpenCurrent = ynMenuOpen;
		    var subMenu = document.getElementById('divMenuDropDown' + oElement.getAttribute("menuItemID"));
    		
		    CloseCurrentDropDown();
		    oElement.className = "menu-on";

		    if (subMenu != null) {
			    if (!ynMenuOpenCurrent || oCurrentMenuHeader != oElement) {
				    subMenu.style.display = 'inline';
				    oCurrentMenuHeader = oElement;
				    ynMenuOpen = true;
			    }
		    }
		
	}

	/* Triggered when cursor is on a menu dropdown item */
	var MouseOver_SubMenu = function (oElement) {
		if (oDelayMenuClose != null) { clearTimeout(oDelayMenuClose); }
		oDelayMenuClose = null;
		ynOnMenu = true;
	}

	/* Triggered when cursor leaves a menu dropdown item */
	var MouseOut_SubMenu = function (oElement) {
		if (ynOnMenu == true) { oDelayMenuClose = setTimeout(CloseCurrentDropDown, numDelayTimeout); }
	}


	/*** Functions ***/
	var CloseCurrentDropDown = function () 
	{
		if (oCurrentMenuHeader != null) 
		{
			var menu_OpenDropDown = document.getElementById('divMenuDropDown' + oCurrentMenuHeader.getAttribute("menuItemID"));
			if (menu_OpenDropDown != null)
			{	// TK ADDED
				menu_OpenDropDown.style.display = 'none';
				oCurrentMenuHeader.className	= "menu-off";
			}
		}
		ynMenuOpen = false;
	}
	
	var DocumentClick = function (oEvent) {
        var oElement = getTarget(oEvent);
    	
        if (oElement.getAttribute("menuItemID") == null) {
            CloseCurrentDropDown();
        }
    }

	if (strMenuDiv != null) {
        this.Initialize (strMenuDiv);
    }
}
