/************************************************************************************************************ 
   (C) www.dhtmlgoodies.com, Feb 2008 
    
   This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.    
    
   Terms of use: 
   You are free to use this script as long as the copyright message is kept intact.
   However, you may not redistribute, sell or repost it without our permission. 
    
   Thank you! 
    
   www.dhtmlgoodies.com
   Alf Magne Kalleland
    
************************************************************************************************************/    
        
   var dhtmlgoodies_menuObj;   // Reference to the menu div 
   var currentZIndex = 1000; 
   var liIndex = 0;
   var visibleMenus = new Array(new Array(),new Array());
   var activeMenuItem = false; 
   var timeBeforeAutoHide = 1200; // Microseconds from mouse leaves menu to auto hide. 
    
   var MSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false; 
   var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox')>=0?true:false; 
   var navigatorVersion = navigator.appVersion.replace(/.*?MSIE ([0-9]\.[0-9]).*/g,'$1')/1; 
   var menuBlockArray = new Array(); 
   var menuParentOffsetLeft = false;    


    // {{{ getStyle() 
   /** 
   * Return specific style attribute for an element 
   * 
   * @param Object el = Reference to HTML element 
   * @param String property = Css property 
   * @private 
   */        
   function getStyle(el,property) 
   {        

      if (document.defaultView && document.defaultView.getComputedStyle) { 

         var retVal = null;              
         var comp = document.defaultView.getComputedStyle(el, ''); 
         if (comp){ 
            retVal = comp[property]; 
              
            if(!retVal){ 
               var comp = document.defaultView.getComputedStyle(el, null); 
               retVal = comp.getPropertyCSSValue(property); 
            }          
         }    

         if(retVal==null)retVal=''; 
          
         return el.style[property] || retVal; 
      } 
      if (document.documentElement.currentStyle && MSIE){    
         var value = el.currentStyle ? el.currentStyle[property] : null; 
         return ( el.style[property] || value ); 
                                              
      } 
      return el.style[property];              
   } 
      
   function getTopPos(inputObj) 
   { 
      var origInputObj = inputObj;

      var returnValue = inputObj.offsetTop;

      if(inputObj.tagName=='LI' && inputObj.parentNode.className=='menuBlock1')
      {    
         var aTag = inputObj.getElementsByTagName('A')[0]; 
         if(aTag)
            returnValue += aTag.parentNode.offsetHeight; 
      }

      var topOfMenuReached = false;

      while((inputObj = inputObj.offsetParent) != null)
      { 
         if(inputObj.parentNode.id=='navtop')topOfMenuReached=true; 
         if(topOfMenuReached && !inputObj.className.match(/menuBlock/gi) || (!MSIE && origInputObj.parentNode.className=='menuBlock1'))
         { 
            var style = getStyle(inputObj,'position');

            if(style=='absolute' || style=='relative')
              return returnValue; 
         }
         returnValue += inputObj.offsetTop;          
      }
      return returnValue; 
   } 
    
   function getLeftPos(inputObj) 
   { 
     var returnValue = inputObj.offsetLeft; 
      
     var topOfMenuReached = false; 
     while((inputObj = inputObj.offsetParent) != null){ 
       if(inputObj.parentNode.id=='navtop')topOfMenuReached=true; 
        if(topOfMenuReached && !inputObj.className.match(/menuBlock/gi)){ 
           var style = getStyle(inputObj,'position'); 
           if(style=='absolute' || style=='relative')return returnValue; 
        } 
      
        returnValue += inputObj.offsetLeft;
     } 
     return returnValue; 
   }
    
   function showHideSub() 
   {
      var exceptionArray = new Array(new Array(),new Array());

      if(activeMenuItem && activeMenuItem!=this && this.parentNode.parentNode!=activeMenuItem)
      {
         activeMenuItem.className = activeMenuItem.className.replace('over','');
      }

      activeMenuItem = this;

      if(activeMenuItem.className.indexOf('over')<0)
      {
         activeMenuItem.className += 'over';
         visibleMenus[0][activeMenuItem.parentNode.style.zIndex] = activeMenuItem.parentNode;
         if(visibleMenus[1][activeMenuItem.parentNode.style.zIndex])
            visibleMenus[1][activeMenuItem.parentNode.style.zIndex].className = visibleMenus[1][activeMenuItem.parentNode.style.zIndex].className.replace('over','');
         visibleMenus[1][activeMenuItem.parentNode.style.zIndex] = activeMenuItem;
      }      

      // Showing sub item of this LI
      var sub = activeMenuItem.getElementsByTagName('UL')[0];
      if(sub)
      {
         visibleMenus[0][sub.style.zIndex] = sub;
         exceptionArray[0][sub.style.zIndex] = sub;
         sub.style.display='block';
      }

      // Showing parent items of this one
        
      var parent = this;

      while(parent.parentNode)
      {
         if(parent.tagName=='LI')
         {
            visibleMenus[0][parent.parentNode.style.zIndex] = parent.parentNode; 
            exceptionArray[0][parent.parentNode.style.zIndex] = parent.parentNode;
            parent.parentNode.style.display='block';

            if(visibleMenus[1][parent.parentNode.style.zIndex]!=parent)
            {
               if(visibleMenus[1][parent.parentNode.style.zIndex])
                  visibleMenus[1][parent.parentNode.style.zIndex].className = visibleMenus[1][parent.parentNode.style.zIndex].className.replace('over','');

               visibleMenus[1][parent.parentNode.style.zIndex] = parent;

               if(parent.className.indexOf('over')<0)
                  parent.className +='over';
            }
            else if(parent.className.indexOf('over')<0)
               parent.className +='over';
         } 
         parent = parent.parentNode;
      }

      hideMenuItems(exceptionArray);
   }

   function hideMenuItems(exceptionArray) 
   {
      /* 
      Hiding visible menu items 
      */ 
      var newVisibleMenuArray = new Array(new Array(), new Array());

      for(var no in visibleMenus[0])
      {
         var li = visibleMenus[0][no];

         if(exceptionArray[0][no]!=li && li.className.indexOf('Block')>0)
         {
            if(visibleMenus[1][no])
               visibleMenus[1][no].className = visibleMenus[1][no].className.replace('over','');

            if(li.className!='menuBlock1')
               li.style.display = 'none';
         }
         else
         {
            newVisibleMenuArray[0][no] = visibleMenus[0][no];
            newVisibleMenuArray[1][no] = visibleMenus[1][no];
         }
      }        
      visibleMenus = newVisibleMenuArray;
   } 
    
    
    
   var menuActive = false; 
   var hideTimer = 0;

   function mouseOverMenu() 
   { 
      menuActive = true;
   } 
    
   function mouseOutMenu() 
   {
      menuActive = false; 
      timerAutoHide();    
   }

   function subOverMenu() 
   { 
      /*remove mouse over function*/
      if(this.parentNode)
	this.parentNode.onmouseover=null;

      mouseOverMenu();
   }

   function subOutMenu() 
   {
      /*Grant moue over function again*/
      if(this.parentNode)
	this.parentNode.onmouseover=showHideSub;

      mouseOutMenu();
   } 
    
   function timerAutoHide() 
   { 
      if(menuActive)
      { 
         hideTimer = 0; 
         return; 
      } 
        
      if(hideTimer<timeBeforeAutoHide)
      { 
         hideTimer+=100; 
         setTimeout('timerAutoHide()',99); 
      }
      else
      { 
         hideTimer = 0; 
         autohideMenuItems();    
      } 
   } 
    
   function autohideMenuItems() 
   {
      if(!menuActive)
      { 
         hideMenuItems(new Array(new Array(), new Array()),992);    
         if(activeMenuItem)
            activeMenuItem.className = activeMenuItem.className.replace('over','');        
      } 
   } 
    
    
   function initSubMenus(inputObj,initOffsetLeft,depth) 
   {    
      var subUl = inputObj.getElementsByTagName('UL');

      if(subUl.length>0)
      {
         var ul = subUl[0];

         ul.className='menuBlock2';
         ul.onmouseover = subOverMenu;
         ul.onmouseout = subOutMenu;

         var topPos;
	 var leftPos;

         if(depth<3)
         {
            topPos = getTopPos(inputObj);
	    leftPos = getLeftPos(inputObj)/1 + initOffsetLeft/1;
         }
         else
         {
            var Offset = inputObj;
            var topOffset = 0;
            while(Offset && Offset.className!="menuBlock1")
            {
               if(Offset.tagName == "UL")
                  topOffset += parseInt(Offset.style.top.replace('px',''));
               Offset = Offset.parentNode;
            }
            topPos = getTopPos(inputObj) - topOffset;
	    leftPos = initOffsetLeft;
         }

         ul.style.position = 'absolute';
         ul.style.left = leftPos + 'px';
         ul.style.top = topPos + 'px';

         currentZIndex++;
	 ul.style.zIndex = currentZIndex; 
         var li = ul.getElementsByTagName('LI')[0];

	 var offsetFull = 0;

	 ul.style.display = "block";

         while(li)
         {
           if(li.tagName=='LI')
           {
              var temp = li.getElementsByTagName('A')[0];
              temp.innerHTML = temp.innerHTML.replace(' ','&nbsp;');
              temp.innerHTML = temp.innerHTML.replace(' ','&nbsp;');

              if(offsetFull < li.getElementsByTagName('A')[0].offsetWidth)
                 offsetFull = li.getElementsByTagName('A')[0].offsetWidth;
           }
           li = li.nextSibling;
	 }

	 offsetFull +=15;
	 ul.style.width = offsetFull+'px';

         var li = ul.getElementsByTagName('LI')[0];

         while(li)
	 { 
            if(li.tagName=='LI')
	    {
               var uls = li.getElementsByTagName('UL');
               li.onmouseover = showHideSub; 

               if(uls.length>0){
                  li.className='currentDepthExtra2';

                  if(navigatorVersion<6 && MSIE) offsetFull+=15;   // MSIE 5.x fix
                  initSubMenus(li,offsetFull,depth+=1); 
               }
	       else
                  li.className='currentDepth2';
 
               if(MSIE)
               {
                  var a = li.getElementsByTagName('A')[0];
                  a.style.width=li.offsetWidth+'px';
                  a.style.display='block';
               }
            }
            li = li.nextSibling;
         }
         ul.style.display = 'none';
      }    
   } 


   function resizeMenu() 
   { 
      var offsetParent = getLeftPos(dhtmlgoodies_menuObj); 
        
      for(var no=0;no<menuBlockArray.length;no++)
      { 
         var leftPos = menuBlockArray[no].style.left.replace('px','')/1; 
         menuBlockArray[no].style.left = leftPos + offsetParent - menuParentOffsetLeft + 'px'; 
      } 
      menuParentOffsetLeft = offsetParent; 
   } 
    
   /* 
   Initializing menu 
   */ 
   function initDhtmlGoodiesMenu()
   {
      dhtmlgoodies_menuObj = document.getElementById('navtop');

      var mainMenu = dhtmlgoodies_menuObj.getElementsByTagName('UL')[0];
      mainMenu.className='menuBlock1';
      mainMenu.onmouseover = mouseOverMenu;
      mainMenu.onmouseout = mouseOutMenu;
      currentZIndex++;
      mainMenu.style.zIndex = currentZIndex;

      var mainMenuItemsArray = new Array();
      var mainMenuItem = mainMenu.getElementsByTagName('LI')[0];
      mainMenu.style.height = mainMenuItem.offsetHeight + 2 + 'px';

      while(mainMenuItem)
      {
         mainMenuItem.onmouseover = showHideSub;

         if(mainMenuItem.tagName=='LI')
	 {
            mainMenuItem.style.cssText = 'float:left;';    
            mainMenuItem.style.styleFloat = 'left';
            mainMenuItemsArray[mainMenuItemsArray.length] = mainMenuItem; 
            initSubMenus(mainMenuItem,0,2);

	    if(mainMenuItem.getElementsByTagName('UL').length>0)
	       mainMenuItem.className='currentDepthExtra1';
	    else
	       mainMenuItem.className='currentDepth1';
         }
          
         mainMenuItem = mainMenuItem.nextSibling;     
      }

      menuParentOffsetLeft = getLeftPos(dhtmlgoodies_menuObj);
      window.onresize = resizeMenu;
      dhtmlgoodies_menuObj.style.visibility = 'visible';
   } 

   window.onload = initDhtmlGoodiesMenu;