﻿// JScript File
var isIE = false;

MenuBar = function(sMainMenu)
{
    
    var oMainMenu = null;
    var tmrShow = null;
    var tmrHide = null;
    var currMenu = null;    
   
    isIE = (typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE');
    
    if(typeof document.getElementById == 'undefined' || (navigator.vendor == 'Apple Computer, Inc.' && typeof window.XMLHttpRequest == 'undefined') || (isIE && typeof document.uniqueID == 'undefined'))
	{
		return;
	}
	
    this.init(sMainMenu);
};


MenuBar.prototype.init = function(sMainMenu)
{    
    
    var oItem = null;
    
    this.oMainMenu = document.getElementById(sMainMenu); //the root ul tag
    if(this.oMainMenu == 'undefined' || this.oMainMenu == null) return;
   
	//preloadMenuImages(arImages);
	
	if(this.oMainMenu)
	{
		this.currMenu = this.oMainMenu;
		
		var lItems = this.oMainMenu.getElementsByTagName('li'); //Includes ALL li tags including sub menus	
		
		for(var i=0; i<lItems.length; i++)
		{			
			this.initItem(lItems[i]);
			if(isIE)
			{
				addClassName(lItems[i], "MenuBarItemIE");
				lItems[i].style.position = "static";
			}
		}
		
		if(isIE)
		{
			if(hasClassName(this.oMainMenu, "MenuBarVertical"))
			{
				this.oMainMenu.style.position = "relative";
			}
			var linkitems = this.oMainMenu.getElementsByTagName('a'); //Includes ALL a tags including sub menus			
			for(var i=0; i<linkitems.length; i++)
			{
				linkitems[i].style.position = "relative";
			}
		}		
	}
};

MenuBar.prototype.initItem = function(oItem) //oItem is an li tag
{	
	var oLink = oItem.getElementsByTagName('a')[0];	
	var lSubMenus = oItem.getElementsByTagName('ul');
	var oMenu = (lSubMenus.length > 0 ? lSubMenus[0] : null);

	var bHasSubMenu = false;
	if(oMenu != null)
	{
		bHasSubMenu = true;
	}

	if(!isIE)
	{
		// define a simple function that comes standard in IE to determine
		// if a node is within another node
		oItem.contains = function(testNode)
		{
			if(testNode == null)
			{
				return false;
			}
			if(testNode == this)
			{
				return true;
			}
			else
			{
				return this.contains(testNode.parentNode);
			}
		};
	}
	
	

    var self = this;
    
    addEventListener(oItem, 'mouseover', function(e)
	{		
		if(bubbledTextEvent())
		{			
			return;
		}
		
		if(self.currMenu == oItem)
		{
			clearTimeout(self.tmrHide);			
		}		
		if(self.currMenu == oItem)
		{
			self.currMenu = null;
		}
		
		if(hasClassName(oItem, "MainMenuListItem"))
		{
		    addClassName(oItem, "MainMenuListItemHover");
		    addClassName(oLink, "MainMenuItemHover");
		}
		else if(hasClassName(oItem, "SubMenuListItem"))
		{
		    addClassName(oItem, "SubMenuListItemHover");
		    addClassName(oLink, "SubMenuItemHover");		    
		}		
		
		if(oMenu && !hasClassName(oMenu, "SubMenuBarVisible"))
		{
			tmrShow = window.setTimeout(function(){self.showSubmenu(oMenu);}, 250);
		}
	}, false);

   
	addEventListener(oItem, 'mouseout', function(e)
	{
		
		if(bubbledTextEvent())
		{			
			return;
		}

		var related = (typeof e.relatedTarget != 'undefined' ? e.relatedTarget : e.toElement);
		
		if(!oItem.contains(related))
		{
			clearTimeout(this.tmrOpen);
			
			
			self.currMenu = oItem;

			if(hasClassName(oItem, "MainMenuListItem"))
		    {
		        removeClassName(oItem, "MainMenuListItemHover");
		        removeClassName(oLink, "MainMenuItemHover");
		    }
		    else if(hasClassName(oItem, "SubMenuListItem"))
		    {
		        removeClassName(oItem, "SubMenuListItemHover");
		        removeClassName(oLink, "SubMenuItemHover");
		    }
			if(oMenu)
			{
				tmrHide = window.setTimeout(function(){self.hideSubmenu(oMenu);}, 600);
			}
		}
	}, false);	
	
	var oParent = oItem.parentNode; //the li's parent ul tag
	if(hasClassName(oParent, "SubMenuBar"))
	{
	    var oParentLink = oParent.parentNode.getElementsByTagName('a')[0];	
	    addEventListener(oParent, 'mouseover', function(e)
	    {		
		    if(bubbledTextEvent())
		    {			
			    return;
		    }
    		
		    //Set the parent li tag to 'Active'	        
	        if(hasClassName(oParent.parentNode, "MainMenuListItem"))
	        {
	            addClassName(oParent.parentNode, "MainMenuListItemActive");	               
                addClassName(oParentLink, "MainMenuItemActive");
	        }
	        else if(hasClassName(oParent.parentNode, "SubMenuListItem"))
	        {
                addClassName(oParent.parentNode, "SubMenuListItemActive");	               
                addClassName(oParentLink, "SubMenuItemActive");
            }
	    }, false);

       
	    addEventListener(oParent, 'mouseout', function(e)
	    {
		    if(bubbledTextEvent())
		    {			
			    return;
		    }

		    //Remove 'Active' from the parent li tag		    
            removeClassName(oParent.parentNode, "MainMenuListItemActive");	               
            removeClassName(oParentLink, "MainMenuItemActive");	    
            removeClassName(oParent.parentNode, "SubMenuListItemActive");	               
            removeClassName(oParentLink, "SubMenuItemActive");
	    }, false);
	 }	
}

function addEventListener(oItem, eventType, handler, capture)
{
	try
	{
		if (oItem.addEventListener)
		{
			oItem.addEventListener(eventType, handler, capture);
		}
		else if (oItem.attachEvent)
		{
			oItem.attachEvent('on' + eventType, handler);
		}
	}
	catch (e) {}
}

MenuBar.prototype.showSubmenu = function(oMenu) //oMenu is a sub menu ul tag
{
	
	if(this.currMenu)
	{
		//clearMenus(this.currMenu);
		currMenu = null;
	}
	
	if(oMenu)
	{		
		//Put the ul tag where it belongs to be visible.
		addClassName(oMenu, "SubMenuBarVisible");
		
		if(typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE')
		{
			if(!hasClassName(this.oMainMenu, "MenuBarHorizontal") || oMenu.parentNode.parentNode != this.oMainMenu)
			{
				
				oMenu.style.top = oMenu.parentNode.offsetTop + 'px';
				
			}
		}
	   
		if(typeof document.uniqueID != "undefined")
		{
			createIframeLayer(oMenu);
		}	
	}	
};

MenuBar.prototype.hideSubmenu = function(oMenu) //oMenu is a ul tag
{
	var oSubMenuItem = null;
	var oSubMenu = null;
	var lSubMenus = oMenu.getElementsByTagName('ul');
	var lItems = oMenu.getElementsByTagName('li');	
	
	if(oMenu && hasClassName(oMenu, "SubMenuBar"))
	{		
	    //Hide any sub menus under this sub menu recursively
	    clearMenus(oMenu);
	    if(self.currMenu == oMenu)
		{
			self.currMenu = null;
		}
		
	    //Hide this sub menu
	    removeClassName(oMenu, "SubMenuBarVisible");
	    if(typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE')
	    {
		    oMenu.style.top = '';
		    oMenu.style.left = '';
	    }
	    removeIframeLayer(oMenu);        
	}
};

function createIframeLayer(oMenu)
{
	var layer = document.createElement('iframe');
	layer.tabIndex = '-1';
	layer.src = 'javascript:false;';
	oMenu.parentNode.appendChild(layer);
	
	layer.style.left = oMenu.offsetLeft + 'px';
	layer.style.top = oMenu.offsetTop + 'px';
	layer.style.width = oMenu.offsetWidth + 'px';
	layer.style.height = oMenu.offsetHeight + 'px';
}

function removeIframeLayer(oMenu)
{
	var layers = oMenu.parentNode.getElementsByTagName('iframe');
	while(layers.length > 0)
	{
		layers[0].parentNode.removeChild(layers[0]);
	}
}

function clearMenus(oRootMenu)
{
	var lMenus = oRootMenu.getElementsByTagName('ul');
	if(lMenus.length > 0)
	{
	    for(var i=0; i<lMenus.length; i++)
	    {
		    hideSubmenu(lMenus[i]);
	    }
	}
}

function bubbledTextEvent()
{
	return (navigator.vendor == 'Apple Computer, Inc.' && (event.target == event.relatedTarget.parentNode || (event.eventPhase == 3 && event.target.parentNode == event.relatedTarget)));
}

function hasClassName(ele, className)
{
	if (!ele || !className || !ele.className || ele.className.search(new RegExp("\\b" + className + "\\b")) == -1)
	{
		return false;
	}
	return true;
}

function addClassName(ele, className)
{
	if (!ele || !className || this.hasClassName(ele, className))
		return;
	ele.className += (ele.className ? " " : "") + className;
}

function removeClassName(ele, className)
{
	if (!ele || !className || !this.hasClassName(ele, className))
		return;
	ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
}

function preloadMenuImages(arImages)
{
    var oImg;
    if(typeof arImages == 'undefined' || arImages == null)return;
    
    if(arImages && arImages.length > 0)
    {
        for(var i=0;i<arImages.length;i++)
        {
            oImg = new Image;
			oImg.src = arImages[i];
        }
    }
}

