/* to use this cascading menu software, need to declare 
menuDelayMS and set to the number of milliseconds before the menu is to appear - 100 seems normal - actually value is set in Bar item definition
menuHoldMS and to the number of milliseconds before the menu should disappear if cursor not over menu - 1500 seems normal
nShowMenuStart unless ShowMenuStart is an attribute of the top menu bar, set to 0 for menus below and 1 for menus off to side
Assumes there are up to 3 menubars, menuBarTop, menuBarSide and menuBarReport, or one menuBar

NOTE:  CURRENTLY MANAGEMENT, HELP AND SSI ARE USING THE SAME CASCADING MENUS - IF ONE .JS IS MODIFIED ALL NEED TO BE
*/

/* If moving this to another environment, make sure above is not done in i_javascript*/
var bIE
var bNetscape
var bIEMac

/* Browser sniffer. Written by PerlScriptsJavaScripts.com*/

var v3;
var op;
var ie4;
var ie5;
var nn4;
var nn6;
var isMac;
var aol;
v3 = 0; op = 0; ie4  = 0; ie5 = 0; nn4 = 0; nn6 = 0; 
isMac = 0; aol = 0;


if(document.images){
    if(navigator.userAgent.indexOf("Opera") != -1){
        op = 1;
    } else {
        if(navigator.userAgent.indexOf("AOL") != -1){
            aol = 1;
        } else {
            ie4 = (document.all && !document.getElementById);
            nn4 = (document.layers);
            ie5 = (document.all && document.getElementById);
            nn6 = (document.addEventListener);
        }
    }
} else {
    v3 = 1;	
}

if(navigator.userAgent.indexOf("Mac") != -1){
    isMac = 1;
}

if (ie5) 
{
	bNetscape = false;
	bIE = true;
	if (isMac) bIEMac = true
	else bIEMac = false;
}
else
{
	/* treat like netscape if not above*/
	bNetscape = true;
	bIE = false;
	bIEMac = false;
}	


	 var firstLevelMenu
	 var MouseOut = new Array()
	 var MouseOffmenu = true
	 
	 function NoteOut(BarOut)
	 {
	 	MouseOut[BarOut] = true;
	 	setTimeout('CheckHideMenu()', menuHoldMS);
	 	MouseOffmenu = true
	 }

	 function NoteIn(BarIn)
	 {
	 	MouseOut[BarIn] = false;
	 	MouseOffmenu = false
	 }
	 
	 function SetMouseOffmenu()
	 {
	 	setTimeout('CheckHideMenu()', menuHoldMS);
	 	MouseOffmenu = true
	 }
	 
	 function SetMouseOnmenu()
	 {
	 	MouseOffmenu = false
	 }
	 
	 function CheckHideMenu()
	 {
	 	if (MouseOffmenu)
	 	{
			HideMenuName('menuBarSide')
			HideMenuName('menuBarReport')
			HideMenuName('menuBarTop')
			HideMenuName('menuBar')
			/*An absoluted cheat for SSI - see dll's journal 2007/11/16*/
			var testObj = MM_findObj('Bar1')
			if (testObj) HideMenu(Bar1.parentNode)
	 	}
	 }

	/*To make more generic, make anything visible that has an attribute value hideme set to 1*/
	function showSelect(isOn)
	{
		var hideme
		var myForms = document.forms
		for (i=0;i<myForms.length;i++)
		{
			if (myForms[i].name != "Link")
			{
				myCols = myForms[i].elements
				for (j=0; j<myCols.length; j++)
				{
					hideme = myCols[j].getAttribute("hideme")
					if (hideme)
					{
						if (hideme == 1)
						{
							if (isOn) myCols[j].style.visibility = "visible"
							else myCols[j].style.visibility = "hidden";
						}
					}
				}
			}
		}
	}
	
   function InitMenu()
   {
   	/* Apparently not needed in cascading menus - believe it just hides the menu
     */
     		
   }
   
	function ShowMenu(name, menuBarNameIn)
	{
		var menuBarName = menuBarNameIn
		if (!menuBarName) menuBarName = 'menuBar'
		if (MouseOut[name])
		{
			MouseOut[name] = false;
			return;
		}
		/*Had to add the menuBarName because there are 2 of them 
			When using ie 5.0, the bar top and left offset is not correct UNTIL alert is called - width and height are correct.
		 	tried:	HideMenu(bar)
		 					Extracting values in multiple ways
		 					setting the focus
		 					using getBoundingClientRect - also only worked after alert is called
	 					window.resizeBy(0,0)
	 					window.focus
	 					window.moveBy(0,0)
	 					window.scrollBy(0,0)
	 	turned out setting the classname messed up the offset calls - also if called Hidemenu prior to taking the values, worked only the first time*/
		 var myMenuBar = document.getElementById(menuBarName)
		 var bar = document.getElementById(name)
		var bt, bh, bl, bw
		bt = bar.offsetTop
		bh = bar.offsetHeight
		bl = bar.offsetLeft
		bw = bar.offsetWidth
	 	var l, r, t, b, t0, l0
	 	t = 0
	 	l = 0
	 	if (bIE)
	 	{
	 		var parent;
		 	parent = bar.offsetParent;
		 	while (parent != null)
		 	{
		   	t = t + parent.offsetTop;
		   	l = l + parent.offsetLeft;
		   	parent = parent.offsetParent;
		  }
	    t = t + bt
	    b = t + bh
	    l = l + bl
	  }
	  else
	  {
	    bt = myMenuBar.offsetTop + bt
	    b = bt + bh
	  	l = l0 + myMenuBar.offsetLeft + bl
	  }
	  r = l + bw
		HideMenu(myMenuBar)
		if (menuBarName == 'menuBarTop')
		{
			HideMenuName('menuBarSide')
			HideMenuName('menuBarReport')
		}
		else
		if (menuBarName == 'menuBarSide')
		{
			HideMenuName('menuBarTop')
			HideMenuName('menuBarReport')
		}
		else
		if (menuBarName == 'menuBarReport')
		{
			HideMenuName('menuBarTop')
			HideMenuName('menuBarSide')
		}
		else
		{
			HideMenuName('menuBar')
			/*An absoluted cheat for SSI*/
			HideMenu(Bar1.parentNode)
		}
		
		
	 /*Getting rid of selects that may override the menus*/
		showSelect(false);
	 	bar.className="barOver"
	 	var menuName=bar.getAttribute("menu")
	 	if (!menuName) return;
	 	var obj = document.getElementById(menuName)
	 	if (!obj) return;
	 	firstLevelMenu = obj
	  /*To make this potentially more generic, have option to start EITHER directly below, or off to the right
	   - set nShowMenuStart to 0 for below and 1 for the right
	   Not sufficient as the management side has some menus off to the right, and some below, so will first
	   look for a menu attribute*/
	 	var BarnShowMenuStart=myMenuBar.getAttribute("ShowMenuStart")
	 	if (BarnShowMenuStart) nShowMenuStart = BarnShowMenuStart
	 	if (nShowMenuStart == 0)
	 	{
		  if (bIE)
		  {
		 	  if (bIEMac)
			  {
		   	  r = r + 10
			 	  t = t - (myMenuBar.offsetHeight + bh)/2
			 	 	obj.style.pixelTop = 0
			 	 	obj.style.pixelLeft = 0
		 	  }
	 	 	  obj.style.pixelTop = b
	 	 	  obj.style.pixelLeft = l
		  }
		  else
		  {
		    obj.style.top = b + "px"
	      obj.style.left = l + "px"
		  }
	  }
	  else
	  {
		  if (bIE)
		  {
		 	  if (bIEMac)
			  {
		   	  r = r + 10
			 	  t = t - (myMenuBar.offsetHeight + bh)/2
			 	 	obj.style.pixelTop = 0
			 	 	obj.style.pixelLeft = 0
		 	 }
	 	 	 obj.style.pixelTop = t
	 	 	 obj.style.pixelLeft = r
		  }
		  else
		  {
		    obj.style.top = t + "px"
	      obj.style.left = r + "px"
		  }
	  }
	  obj.style.visibility = "visible"
	 	/* required for scrolling */
	 	if (scroll) 
	 	{
			var MaintainScroll
			MaintainScroll=MM_findObj('MaintainScroll')
	  	if (MaintainScroll) 
	  	{
				var x, y
				x = 0
				y = 0
				if (document.body.scrollTop) 
				{
					x = document.body.scrollLeft
					y = document.body.scrollTop
				}
				else 
				{
					if (typeof(pageYOffset) != 'undefined') 
					{
						x = pageXOffset
						y = pageYOffset
					}
				}
		  	var store = x + "_" + y
				MaintainScroll.value=store
			}
		}
	}
   
   function highlight(menuNumber, ItemNumber, typeIn)
   {
   	 var type=typeIn
   	 if (!type) type=''
     var PElement = document.getElementById("menu" + type + menuNumber)
   	 var obj
   	 var objName="menuItem" + type + menuNumber + "_" + ItemNumber
   	 
     if(PElement.hasChildNodes() == true)
     { 
     	 var Elements = PElement.childNodes
       for(var i=0;i<Elements.length;i++)
       {
          if (Elements[i].id == objName)
          	obj = Elements[i];
          else
          {
          	if (Elements[i].className != "menuItem")
          	{
          		if (Elements[i].className == "ItemMouseOver")
          		{
          			HideMenu (document.getElementById("menu" + type + menuNumber))
          		}
		          Elements[i].className = "menuItem"
		        }
		      }
       }
     }
     if (obj)
     {
    	 ShowSubMenu(obj)
  	   window.defaultStatus = obj.title
     }
   }
      
   function HideMenuName(menuName)
   {
   	 var obj = document.getElementById(menuName)
   	 if (obj) HideMenu(obj)
   }
   
   function HideMenu(obj)
   {
   	 if (obj)
   	 {
   	 /*alert(obj.hasChildNodes())*/
	     if(obj.hasChildNodes()==true)
	     {
	        var child = obj.childNodes
	        var bar, barOver, childMenu, childMenuName
                         
	        for(var j =0;j<child.length;j++)
	        {
	          if (child[j].id && (child[j].className=="barOver" || child[j].className=="menuItem" || child[j].className=="ItemMouseOver"))
	          {
	          	bar = document.getElementById(child[j].id)
	          	barOver = false
	          	if (child[j].className=="barOver") 
	          	{
	          		bar.className="Bar"
	          		barOver = true
	          	}
	          	if (child[j].className=="ItemMouseOver") 
	          	{
	          		bar.className="menuItem"
	          		barOver = true
	          	}
	            childMenuName = child[j].getAttribute("menu")
	  	        if(childMenuName != null)
	    	      {
	      	      childMenu = document.getElementById(childMenuName)
	      	      if (childMenu)
	      	      {
		        	    if(childMenu.hasChildNodes()==true && barOver==true)
		        	    {
	  	        	    HideMenu(childMenu)
	    	      	  }
	      	    		childMenu.style.visibility = "hidden" 
	      	    	}
	            }
	          }
	      	}    
	      }
			 /*re-instating neversend selects*/
			 if (obj.id == "menuBarTop" || obj.id == "menuBarSide" || obj.id == "menuBarReport" || obj.id == "menuBar") showSelect(true);
	    }
   }
   
   function CheckPosition(obj)
   {
   	 // For IE on the Mac, the menus slip out of sight and need to be repositioned
   	 var rs, ts
     if(obj.hasChildNodes()==true)
     {
        var child = obj.childNodes     
                 
        for(var j =0;j<child.length;j++)
        {
          if (child[j].id && (child[j].className=="barOver" || child[j].className=="menuItem" || child[j].className=="ItemMouseOver"))
          {
          	var bar = document.getElementById(child[j].id)
            var childMenuName = child[j].getAttribute("menu")
  	        if(childMenuName != null)
    	      {
      	      var childMenu = document.getElementById(childMenuName)
         	    CheckPosition(childMenu) 
            }
          }
      	}    
      }
  	 	ts = obj.style.pixelTop 
	   	rs = obj.style.pixelLeft
  	 	obj.style.pixelTop = 0
  	 	obj.style.pixelLeft = 0
  	 	obj.style.pixelTop = ts
  	 	obj.style.pixelLeft = rs
   }
   
  function ShowSubMenu(obj)
  {
     var r, t, PMenu
		 var ts, rs
     PMenu = obj.parentNode
		 if (bIEMac)
		 {
  	 	 t = PMenu.style.pixelTop + obj.offsetTop
  	 	 r = PMenu.style.pixelLeft + PMenu.offsetWidth
  	 }
  	 else
  	 {
	     t = PMenu.offsetTop + obj.offsetTop
  	   b = t + obj.offsetHeight
    	 l = PMenu.offsetLeft + obj.offsetLeft
     	 r = l + PMenu.offsetWidth
     }
     HideMenu(PMenu)
     
     obj.className="ItemMouseOver"
		 if (bIEMac)
		 	 CheckPosition(firstLevelMenu)
     if(obj.getAttribute("menu") != null)
     {
     	 var menuName=obj.getAttribute("menu")
     	 var menu = document.getElementById(menuName)
	     if (bIEMac)
	     {
	     		menu.style.pixelTop = 0
	     		menu.style.pixelLeft = 0
	     }
	     /* If the right will be more than 900, show to left*/
	     menu.style.top = t + "px"
	     if (r + PMenu.offsetWidth > 1000)
	     {
	     	 menu.style.left = (l-PMenu.offsetWidth) + "px"
	     }
	     else
	     {
	     	 menu.style.left = r + "px"
	     }
	     menu.style.visibility = "visible"
    }
  } 



	function pSetMenuSelection(text)
	{
		var myForms = document.forms
		for (i=0;i<myForms.length;i++)
		{
			if (myForms[i].name == "LinkTop")
			{
				myCols = myForms[i].elements
				for (j=0; j<myCols.length; j++)
				{
					if (myCols[j].name == "TopMenuSelection")
					{
						myCols[j].value = text
					}
				}
				document.MM_returnValue = true
				submitCheck()
				myForms[i].submit()
			}
		}
	}


 ///////////////////CascadedDropdown Menu/////////////////
 //Date : 08/09/2001               						//
 //Version : 1.0        								//
 //Author Mr.Arun N Kumar	                            //
 //EMail: n_arunk@hotmail.com							//		
 /////////////////////////////////////////////////////////
 // Modifications on this code is not recomended
 // Suggestions are welcome

