//Menu.js
/*
Copyright (c) 2006 ATUM Inc. All rights reserved.
version 0.0.0
*/


//	document.onmouseover()
//	{
//	    alert(window.event.srcElement);
//	}

/**
 * The MenuBar Manager provides a means of .
 * @ class
 */
ATUM.UI.MenuBar = {};

ATUM.UI.MenuBar = {
    /*Property-Array of openMenus.
    * @private
    * @type array
    */
    _openMenus:[],

    /*Property-Currently open top-level menu
    * modified by OnMouseOver
    * @private
    * @type 
    */
    _openTopLevelMenu:null,
    
    /*Property-Count of all Open Menus
    * modified by OnMouseOver
    * @private
    * @type integer
    */
    _openMenuCount:0,
    
    _menubarDiv:null,
    
    _menuCloseTimeout:null,
    _menuBarCloseTimeout:null,
  /* This method displays menu
   *
   * @private
   * @param {object} eSrc The source of the triggering event
   * @param {object} eMenu The menu to show
   * @return void
   */
    showMenu:function(eSrc,eMenu)
    {
        this._menuBarDiv = document.getElementById('divMenuBar');
		var mainDiv = document.getElementById('divMain');
		//alert('MainDiv: ' + mainDiv.id);
		if (eSrc.tagName == "TD")
		{
			//alert('eSrc.Id: ' + eMenu);
			var sLeft = eSrc.offsetLeft + 'px';
			eMenu.style.left = sLeft;//eSrc.offsetLeft;
			eMenu.style.width = eSrc.offsetWidth + 'px';
			
			if (this._menuBarDiv.contains(eSrc))
			{
				eMenu.style.top = this._menuBarDiv.offsetHeight - 3 + 'px';
            }

			// Hide any select boxes that are 'underneath'
			var toHide = document.getElementsByTagName("SELECT");
			for (i=0;i<toHide.length;i++)
			{
			    //alert(toHide.offsetLeft);
				toHide[i].last_visibility = toHide[i].style.visibility;
				toHide[i].style.visibility = "hidden";
			}
		}		
		else if (this._openMenuCount == 1)
		{
			eMenu.style.left = this._openTopLevelMenu.offsetLeft + eSrc.offsetWidth;
			eMenu.style.top = eSrc.offsetTop + eSrc.offsetParent.offsetTop - 1;
		}
		else if (this._openMenuCount > 1)
		{
			eMenu.style.left = this._openTopLevelMenus[this._openMenuCount-1].offsetLeft + eSrc.offsetWidth;
			eMenu.style.top = eSrc.offsetTop + eSrc.offsetParent.offsetTop;
		}
		
		eMenu.style.visibility = "visible";
		eMenu.style.zIndex = 1;

        if (this._menuBarDiv.contains(eSrc))
			{this._menuBarDiv.style.zIndex = -1;
			mainDiv.style.zIndex = -1;
			mainDiv.visibility = "visible";}
		else
			{this._menuBarDiv.style.zIndex = 1;
			mainDiv.style.zIndex = 1;}
			
	    this._openTopLevelMenu = eMenu;
	    this._openMenus[this._openMenuCount++] = eMenu;

    },

  /* This method closes the appropriate menus
   *
   * @private
   * @param {object} eMenu The menu to show
   * @return void
   */
    closeMenu:function(eMenu)
    {
		//alert('this._openMenuCount: '+ this._openMenuCount);
		var tempId = this._openMenus[this._openMenuCount-1].id.replace("divMenus","tdMenuBarItem");

		var eTemp = document.getElementById(tempId);
		var menuBarDiv = document.getElementById('divMenuBar');
		var menuBarMain = document.getElementById('divMain');

	    //eTemp.style.background = "";
		eMenu.style.visibility = "hidden";
		menuBarDiv.style.zIndex = 1;
		menuBarMain.style.zIndex = 1;
		
		try
		{
			eMenu.style.visibility = "hidden";
	
            //alert("CloseMenu");
			
			this._openMenus[--this._openMenuCount] = null;
			
			if (this._openMenuCount)
				this._openTopLevelMenu = this._openMenus[this._openMenuCount-1];
			else
			{
				this._openTopLevelMenu = null;
				var toHide = document.getElementsByTagName("SELECT");
				for (i=0;i<toHide.length;i++)
				{
					toHide[i].style.visibility = "visible";
					toHide[i].style.visibility = toHide[i].last_visibility;
				}
			}
		} catch (e)
		{
		    alert('closeMenu' + e);
		}		
        
    },

    /*
     *@public
    */
    MenuClick:function(id)
    {
        var eSrc = document.getElementById(id);

        //alert("MenuClick: " + eSrc.id);
        
        var _action = "action";
        var _args = "args";
        var _formName = "MainForm";
        try
        {
//            ATUM.UI.Action.ExecuteAction('Main.aspx', _action, '', _args, _formName,'target_form') 

        }catch(e)
        {
            alert('executeAction' + e);
        }

    },
    
    /*
     *@public
    */
    OnMouseOver:function(eSrc)
    {
         var doNotClose = true;
		 try
            {
                
                
                //Mousing over an open menu
                if ("cMenuBarItem" == eSrc.className || "cMenuItem" == eSrc.className )
		        {
                    eSrc.style.color = "black";
                    eSrc.style.backgroundColor = "silver";
                     
                    if(this._menuCloseTimeout)
				            {clearTimeout(this._menuCloseTimeout);}

                    if(this._menuBarCloseTimeout)
				            {clearTimeout(this._menuBarCloseTimeout);}
				            
                }
                else
                {
                    doNotClose = false;
                    //alert('doNotClose false');
                    
                }
                
                //Mousing over the MenuBar
		        if ("cMenuBarItem" == eSrc.className)
		        {
                    //Changing MenuBar Colors
                    eSrc.style.color = "black";
                    eSrc.style.backgroundColor = "silver";

                    // Get Associated Menu - The menu we will show.
                    var eMenu = document.getElementById(eSrc.id.replace("tdMenuBarItem","divMenu"));
                     
                    try
                    {
                        //This is for all menu-submenus open
                        var targetIndex = this._openMenuCount;
                        targetIndex--;
                        
                        
                        if(this._openMenuCount==1)
                        {
                            this.closeMenu(this._openTopLevelMenu);
                        }
                        else
                        {
                            //Extend to multiple menus? put code here!
                        }

			            //what menu to show
			            if (eMenu && this._openTopLevelMenu != eMenu) 
			            {
				            
				            this.showMenu(eSrc,eMenu);
				            
			            }
			            else
			            {
			                //alert("No menu to show!");
			            }
                        
			        }
			        catch(e)
			        {
			            alert('Error - OnMouseOver:' + e);
			        }
               }
	           else if (this._openMenuCount)/* multiple */
	           {
                   //alert('about to close' + doNotClose + eSrc.id);
	                try
	                {
	                    var menuBarDiv = document.getElementById('divMenuBar');
		                this.Assert(menuBarDiv,'No divMenuBar');
		                
		                 //alert('Before openMenuCount! No Error Yet!');
		                var openMenuCount = this._openMenuCount;
		                this.Assert(openMenuCount ,'No openMenuCount');
		                
		                //alert('Before parentMenu:this._openMenus[this._openMenuCount-1 ! No Error Yet! ' + openMenuCount );
		                var parentMenu = this._openMenus[this._openMenuCount-1];
		                this.Assert(parentMenu,'No parentMenu');
		                
		                //alert('Before contClose:!parentMenu.contains(eSrc) ! No Error Yet! ' + parentMenu.Id );
		                
		                var contClose = !!menuBarDiv.contains(eSrc);
		                
                        while (contClose && !doNotClose)
                        {
			                this.closeMenu(this._openTopLevelMenu);
			                
			                parentMenu = this._openMenus[this._openMenuCount-1];
			                openMenuCount = this._openMenuCount;
			                parentMenu = this._openMenus[this._openMenuCount-1];
                            try
                            {
                                contClose = contClose & !parentMenu.contains(eSrc) ;
                            }
                            catch(e)
                            {
                                contClose = true;
                            }
                            contClose = contClose & openMenuCount;
    		                //alert('In while! No Error Yet! ' + contClose);
                            
		                }
		                
		            }
		            catch(e)
	                {
		                alert('Error Multiple - OnMouseOver:' + e);
	                }
	                return;
	            }
	            
		}
	    catch(e)
	    {
		    alert('2 - OnMouseOver:' + e);
	    }
	    
              var mousingOverMenu = ("cMenuBarItem" == eSrc.className || "cMenuItem" == eSrc.className)
               
               if(!mousingOverMenu )
               {
                    //alert('!mousingOverMenu  cause ClassName is: ' + eSrc.className);
                    if(this._openMenuCount==1)
                    {
                        this.closeMenu(this._openTopLevelMenu);
                    }
                    return;
               }
         if (( "cHeader" == eSrc.className))
	    {
            if(this._openMenuCount==1)
	        {
	            alert("mouse over header!");
	            
    	        this._menuCloseTimeout =  setTimeout("ATUM.UI.MenuBar.menuTimeOut()", 500);
            }
        }
        else
        {
              if(this._openMenuCount==1)
	        {
	            this._menuBarCloseTimeout = setTimeout("ATUM.UI.MenuBar.menuBarTimeOut()", 5000);
    	        //this._menuCloseTimeout =  setTimeout("ATUM.UI.MenuBar.menuTimeOut()", 500);
            }               
        }
               
    },
    NavOnMouseOver:function(eSrc)
    {
        eSrc.style.backgroundPosition = '0 -50px';
        //alert('Mouse Over Nav: ' + eSrc.id);
    },
    NavOnMouseOut:function(eSrc)
    {
        eSrc.style.backgroundPosition = '0 -50px';
        //alert('Mouse Over Nav: ' + eSrc.id);
    },
    /**/
    OnMouseOut:function(id)
    {
        var eSrc = document.getElementById(id);
	    eSrc.style.color = ""; 
        eSrc.style.backgroundColor="";
        if (( "cMenuItem" == eSrc.className))
	    {
            if(this._openMenuCount==1)
	        {
    	        this._menuCloseTimeout =  setTimeout("ATUM.UI.MenuBar.menuTimeOut()", 500);
            }
        }
	},
	menuBarTimeOut:function()
	{
	    //alert('Closing Menu');
	    if(this._openMenuCount==1)
	        {this.closeMenu(this._openTopLevelMenu);}
	},
	menuTimeOut:function()
	{
	    //alert('Closing Menu');
	    if(this._openMenuCount==1)
	        {this.closeMenu(this._openTopLevelMenu);}
	},
	OnMouseOverVert:function(eSrc)
	{
		 try
            {
                if ("cVMenuBarItem" == eSrc.className || "cVMenuItem" == eSrc.className )
		        {
                    eSrc.style.color = "#003366";
                    eSrc.style.backgroundColor = "#ccffcc";
                }
             }
          catch(e)
          {
		    alert('2 - OnMouseOverVert:' + e);
          }
	},
	OnMouseOverHeaderNav :function(eSrc)
	{
        if ("headerNavMail" == eSrc.className)
        {
            eSrc.style.backgroundImage= 'url(Images/button_9cf_email_off.gif)';
            
        }
        else if ("headerNavHome" == eSrc.className)
        {
            eSrc.style.backgroundImage= 'url(Images/button_9cf_home_off.gif)';
            
        }
        else if ("headerNavContact" == eSrc.className)
        {
            eSrc.style.backgroundImage= 'url(Images/button_9cf_contact_off.gif)';
            
        }
	},
	OnMouseOutHeaderNav :function(eSrc)
	{
        if ("headerNavMail" == eSrc.className)
        {
            eSrc.style.backgroundImage= 'url(Images/button_9cf_email_on.gif)';
            
        }
        else if ("headerNavHome" == eSrc.className)
        {
            eSrc.style.backgroundImage= 'url(Images/button_9cf_home_on.gif)';
            
        }
        else if ("headerNavContact" == eSrc.className)
        {
            eSrc.style.backgroundImage= 'url(Images/button_9cf_contact_on.gif)';
            
        }


	},
	Assert:function(assertion,msg)
	{
	    if(!assertion)
	    {
	        alert(msg);
	    }
	}
}

