﻿
//========================================================
//   Menus Object
//   to prevent collision with similar named functions 
//========================================================

function Menus()
{
    this.MenuCache = new Object();
	this.MenuCache.menu = null;
	this.MenuCache.button = null;
	this.MenuCache.submenu = null;
	
	Menus.prototype.GEID = function(id) { return document.getElementById(id); };
	
	Menus.prototype.Menu = function(id)
	{with(this){
	    if (document.readyState == "complete")
	    {
		    CloseNav();
		    var menu = GEID('M' + id);
		    var button = GEID('B' + id);
		    var mask = GEID("NavMask");
    		
		    if (button.className=="BB") { button.className="BH"; }
		    if (button.className=="BE") { button.className="BEH"; }
    		
		    MenuCache.button = button;
		    MenuCache.menu = menu;
    		
		    var M = menu.style;
		    var BO = new MenuRecurseOffset(button);
			    M.left = BO.GetOffsetLeft() + "px";
			    M.top = (BO.GetOffsetTop() + button.offsetHeight) + "px";
			    M.display = "block";
    			
		    var K = mask.style;
		    var MO = new MenuRecurseOffset(menu);
			    K.width = (MenuWindowInner.width - 60) + "px";
			    //K.height = (MenuWindowInner.height - MO.GetOffsetTop() - 20) + "px";
			    K.height = "700px";
			    K.display = "block";

    			
		    MenuSweepSelects(menu);
		}
	}};
	
	Menus.prototype.SubMenu = function(id)
	{with(this){
//	    if (document.readyState == "interactive")
//	    {
		    CloseSubMenu();
		    var submenu = GEID('S' + id);
		    var button = GEID('B' + id);
		    var mask = GEID("NavMask");
    		
		    MenuCache.submenu = submenu;
    		
		    var M = submenu.style;
		    var BO = new MenuRecurseOffset(button);
			    M.left = BO.GetOffsetLeft() + button.offsetWidth - 2 + "px";
			    M.top = BO.GetOffsetTop() + "px";
			    M.display = "block";
    			
		    MenuSweepSelects(submenu);
//		}
	}};
	
	Menus.prototype.CloseNav = function()
	{with(this){
	    if (MenuCache.button != null)
		{
		    if (document.getElementById(MenuCache.button.id).className=="BEH") { document.getElementById(MenuCache.button.id).className="BE"; }
		    if (document.getElementById(MenuCache.button.id).className=="BH") { document.getElementById(MenuCache.button.id).className="BB"; }
		}
		if (MenuCache.menu != null)
		{
			MenuCache.menu.style.display = "none";
		}

		
		CloseSubMenu();
		document.getElementById("NavMask").style.display = "none";
		MenuRestoreSelects();
	}};
	
	Menus.prototype.CSM = function() {with(this){ CloseSubMenu(); }};
	
	Menus.prototype.CloseSubMenu = function()
	{with(this){
		if (MenuCache.submenu != null)
		{
			MenuCache.submenu.style.display = "none";
		}
	}};
	
	//========================================================
	//   MenuRestoreSelects
	//   Restores selects on page hidden by menu
	//========================================================
	Menus.prototype.MenuRestoreSelects = function()
	{with(this){
	    var SelectCollection = document.getElementsByTagName("select");
	        for (var s=0;s<SelectCollection.length;s++)
	        {   
	            SelectCollection[s].style.visibility="visible";
	        }
	}};
	//========================================================
	//   MenuSweepSelects(MenuObject)
	//   Hides selects in collision with MenuObject
	//========================================================
	Menus.prototype.MenuSweepSelects = function(MenuObject)
	{with(this){
	    var RO = new MenuRecurseOffset(MenuObject);
	    var MenuLeft = RO.GetOffsetLeft();
	    var MenuTop = RO.GetOffsetTop();
	    var MenuRight = MenuLeft + MenuObject.offsetWidth;
	    var MenuBottom = MenuTop + MenuObject.offsetHeight;
	    
	    var SelectCollection = document.getElementsByTagName("select");
	    
	    for (var sc=0;sc<SelectCollection.length;sc++)
	    {
	        var SelectObject = SelectCollection[sc];
	        var SO = new MenuRecurseOffset(SelectObject);
    	    var SelectLeft = SO.GetOffsetLeft();
            var SelectTop = SO.GetOffsetTop();
            var SelectRight = SelectLeft + SelectObject.offsetWidth;
            var SelectBottom = SelectTop + SelectObject.offsetHeight;
            
            //====================== detect collision
            
            var MenuOffset = 2;
            if (
                (SelectRight > MenuLeft-MenuOffset) &&
                (SelectBottom > MenuTop-MenuOffset) &&
                (SelectLeft < MenuRight+MenuOffset) &&
                (SelectTop < MenuBottom+MenuOffset)
                )
                {
                    SelectObject.style.visibility = "hidden";
                    //return;
                }

                
            //======================= if position of select is not detectible, hide to be sure
            if ((SelectLeft == 0) && (SelectTop == 0))
            {
                SelectObject.style.visibility = "hidden";
                //return;
            }
                
	    }
	    
	}};
}

//========================================================
//   RecurseOffset
//   returns true offsetLeft and offsetTop
//========================================================
function MenuRecurseOffset(obj)
{
	this.ParentObj = null;
	this.CurrentObj = obj;
    this.AbsoluteLeft = obj.offsetLeft;
    this.AbsoluteTop = obj.offsetTop;
	MenuRecurseOffset.prototype.Init = function()
	{
	    if (this.CurrentObj.offsetParent != null)
	    {
	        do
		    {
                this.ParentObj = this.CurrentObj.offsetParent;
                this.AbsoluteLeft += this.ParentObj.offsetLeft;
                this.AbsoluteTop += this.ParentObj.offsetTop;
                this.CurrentObj = this.ParentObj;
		    }
		    while (this.CurrentObj.offsetParent != null);
	    }
	}
	MenuRecurseOffset.prototype.GetOffsetLeft = function() { return this.AbsoluteLeft; }
	MenuRecurseOffset.prototype.GetOffsetTop = function() { return this.AbsoluteTop; }
	this.Init();
}
	
//========================================================
//   MenuWindowInner
//   captures window inner width and window inner height
//	 fires on page load and page resize
//========================================================
var MenuWindowInner = new Object();
	MenuWindowInner.width = 0;
	MenuWindowInner.height = 0;
	
function GetMenuWindowInner()
{
	if (document.all) 
	{
	    MenuWindowInner.width =document.body.clientWidth+document.body.scrollLeft;
	    MenuWindowInner.height =document.body.clientHeight+document.body.scrollTop;
	} 
	else
	{
	    MenuWindowInner.width =window.innerWidth+window.pageXOffset;
	    MenuWindowInner.height =window.innerHeight+window.pageYOffset;
	}
	return;
}
	
var Menus = new Menus();	



