   /************************************************************************************************************
   (C) www.dhtmlgoodies.com, October 2005
   
   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.
   
   Update log:
   
      March, 15th: Fixed problem with sliding in MSIE
   
   Thank you!
   
   www.dhtmlgoodies.com
   Alf Magne Kalleland
   
   ************************************************************************************************************/   
var expandFirstItemAutomatically = false;   // Expand first menu item automatically ?
var initMenuIdToExpand = false;   // Id of menu item that should be initially expanded. the id is defined in the <li> tag.
var expandMenuItemByUrl = true;   // Menu will automatically expand by url - i.e. if the href of the menu item is in the current location, it will expand


var initialMenuItemAlwaysExpanded = true;   // NOT IMPLEMENTED YET

var dhtmlgoodies_slmenuObj;
var divToScroll = false;
var ulToScroll = false;   
var divCounter = 1;
var otherDivsToScroll = new Array();
var divToHide = false;
var parentDivToHide = new Array();
var ulToHide = false;
var offsetOpera = 0;
if(navigator.userAgent.indexOf('Opera')>=0)offsetOpera=1;   
var slideMenuHeightOfCurrentBox = 0;
var objectsToExpand = new Array();
var initExpandIndex = 0;
var alwaysExpanedItems = new Array();
   
function popMenusToShow()
{
   var obj = divToScroll;
   var endArray = new Array();
   while(obj && obj.tagName!='BODY'){
      if(obj.tagName=='DIV' && obj.id.indexOf('slideDiv')>=0){
         var objFound = -1;
         for(var no=0;no<otherDivsToScroll.length;no++){
            if(otherDivsToScroll[no]==obj){
               objFound = no;      
            }               
         }   
         if(objFound>=0){
            otherDivsToScroll.splice(objFound,1);   
         }      
      }   
      obj = obj.parentNode;
   }   
}

function showSubMenu(e,inputObj)
{

   if(this && this.tagName)inputObj = this.parentNode;
   if(inputObj && inputObj.tagName=='LI'){
      divToScroll = inputObj.getElementsByTagName('DIV')[0];
      for(var no=0;no<otherDivsToScroll.length;no++){
         if(otherDivsToScroll[no]==divToScroll)return;
      }         
   }
   hidingInProcess = false;
   if(otherDivsToScroll.length>0){
      if(divToScroll){            
         if(otherDivsToScroll.length>0){
            popMenusToShow();
         }
         if(otherDivsToScroll.length>0){   
            autoHideMenus();
            hidingInProcess = true;
         }
      }   
   }      
   if(divToScroll && !hidingInProcess){
      divToScroll.style.display='';
      otherDivsToScroll.length = 0;
      otherDivToScroll = divToScroll.parentNode;
      otherDivsToScroll.push(divToScroll);   
      while(otherDivToScroll && otherDivToScroll.tagName!='BODY'){
         if(otherDivToScroll.tagName=='DIV' && otherDivToScroll.id.indexOf('slideDiv')>=0){
            otherDivsToScroll.push(otherDivToScroll);
                           
         }
         otherDivToScroll = otherDivToScroll.parentNode;
      }         
      ulToScroll = divToScroll.getElementsByTagName('UL')[0];
      if(divToScroll.style.height.replace('px','')/1<=1)scrollDownSub();
   }   
   

}



function autoHideMenus()
{
   if(otherDivsToScroll.length>0){
      divToHide = otherDivsToScroll[otherDivsToScroll.length-1];
      parentDivToHide.length=0;
      var obj = divToHide.parentNode.parentNode.parentNode;
      while(obj && obj.tagName=='DIV'){         
         if(obj.id.indexOf('slideDiv')>=0)parentDivToHide.push(obj);
         obj = obj.parentNode.parentNode.parentNode;
      }
      var tmpHeight = (divToHide.style.height.replace('px','')/1 - slideMenuHeightOfCurrentBox);
      if(tmpHeight<0)tmpHeight=0;
      if(slideMenuHeightOfCurrentBox)divToHide.style.height = tmpHeight  + 'px';
      ulToHide = divToHide.getElementsByTagName('UL')[0];
      slideMenuHeightOfCurrentBox = ulToHide.offsetHeight;
      scrollUpMenu();      
   }else{
      slideMenuHeightOfCurrentBox = 0;
      showSubMenu();         
   }
}


function scrollUpMenu()
{

   var height = divToHide.offsetHeight;
   height-=15;
   if(height<0)height=0;
   divToHide.style.height = height + 'px';

   for(var no=0;no<parentDivToHide.length;no++){   
      parentDivToHide[no].style.height = parentDivToHide[no].getElementsByTagName('UL')[0].offsetHeight + 'px';
   }
   if(height>0){
      setTimeout('scrollUpMenu()',5);
   }else{
      divToHide.style.display='none';
      otherDivsToScroll.length = otherDivsToScroll.length-1;
      autoHideMenus();         
   }
}   

function scrollDownSub()
{
   if(divToScroll){         
      var height = divToScroll.offsetHeight/1;
      var offsetMove =Math.min(15,(ulToScroll.offsetHeight - height));
      height = height +offsetMove ;
      divToScroll.style.height = height + 'px';
      
      for(var no=1;no<otherDivsToScroll.length;no++){
         var tmpHeight = otherDivsToScroll[no].offsetHeight/1 + offsetMove;
         otherDivsToScroll[no].style.height = tmpHeight + 'px';
      }         
      if(height<ulToScroll.offsetHeight)setTimeout('scrollDownSub()',5); else {
         divToScroll = false;
         ulToScroll = false;
         if(objectsToExpand.length>0 && initExpandIndex<(objectsToExpand.length-1)){
            initExpandIndex++;
            
            showSubMenu(false,objectsToExpand[initExpandIndex]);
         }
      }
   }
}
   
function initSubItems(inputObj,currentDepth)
{      
   divCounter++;      
   var div = document.createElement('DIV');   // Creating new div      
   div.style.overflow = 'hidden';   
   div.style.position = 'relative';
   div.style.display='none';
   div.style.height = '1px';
   div.id = 'slideDiv' + divCounter;
   div.className = 'slideMenuDiv' + currentDepth;      
   inputObj.parentNode.appendChild(div);   // Appending DIV as child element of <LI> that is parent of input <UL>      
   div.appendChild(inputObj);   // Appending <UL> to the div
   var menuItem = inputObj.getElementsByTagName('LI')[0];
   while(menuItem){
      if(menuItem.tagName=='LI'){
         var aTag = menuItem.getElementsByTagName('A')[0];
         aTag.className='slMenuItem_depth'+currentDepth;   
         var subUl = menuItem.getElementsByTagName('UL');
         if(subUl.length>0){
            initSubItems(subUl[0],currentDepth+1);               
         }
         aTag.onclick = showSubMenu;            
      }         
      menuItem = menuItem.nextSibling;                  
   }      
}

function initSlideDownMenu()
{
   dhtmlgoodies_slmenuObj = document.getElementById('slidedown_menu');
   dhtmlgoodies_slmenuObj.style.visibility='visible';
   var mainUl = dhtmlgoodies_slmenuObj.getElementsByTagName('UL')[0];      
   var mainMenuItem = mainUl.getElementsByTagName('LI')[0];
   mainItemCounter = 1;
   while(mainMenuItem){         
      if(mainMenuItem.tagName=='LI'){
         var aTag = mainMenuItem.getElementsByTagName('A')[0];
         aTag.className='slMenuItem_depth1';   
         var subUl = mainMenuItem.getElementsByTagName('UL');
         if(subUl.length>0){
            mainMenuItem.id = 'mainMenuItem' + mainItemCounter;
            initSubItems(subUl[0],2);
            aTag.onclick = showSubMenu;
            mainItemCounter++;
         }            
      }         
      mainMenuItem = mainMenuItem.nextSibling;   
   }      
   
   if(location.search.indexOf('mainMenuItemToSlide')>=0){
      var items = location.search.split('&');
      for(var no=0;no<items.length;no++){
         if(items[no].indexOf('mainMenuItemToSlide')>=0){
            values = items[no].split('=');
            showSubMenu(false,document.getElementById('mainMenuItem' + values[1]));   
            initMenuIdToExpand = false;            
         }
      }         
   }else if(expandFirstItemAutomatically>0){
      if(document.getElementById('mainMenuItem' + expandFirstItemAutomatically)){
         showSubMenu(false,document.getElementById('mainMenuItem' + expandFirstItemAutomatically));
         initMenuIdToExpand = false;
      }
   }

   if(expandMenuItemByUrl)
   {
      var aTags = dhtmlgoodies_slmenuObj.getElementsByTagName('A');
      for(var no=0;no<aTags.length;no++){
         var hrefToCheckOn = aTags[no].href;            
         if(location.href.indexOf(hrefToCheckOn)>=0 && hrefToCheckOn.indexOf('#')<hrefToCheckOn.length-1){
            initMenuIdToExpand = false;
            var obj = aTags[no].parentNode;
            while(obj && obj.id!='slidedown_menu'){
               if(obj.tagName=='LI'){                     
                  var subUl = obj.getElementsByTagName('UL');
                  if(initialMenuItemAlwaysExpanded)alwaysExpanedItems[obj.parentNode] = true;
                  if(subUl.length>0){                        
                     objectsToExpand.unshift(obj);
                  }
               }
               obj = obj.parentNode;   
            }
            showSubMenu(false,objectsToExpand[0]);
            break;               
         }         
      }
   }
         
   if(initMenuIdToExpand)
   {
      objectsToExpand = new Array();
      var obj = document.getElementById(initMenuIdToExpand)
      while(obj && obj.id!='slidedown_menu'){
         if(obj.tagName=='LI'){
            var subUl = obj.getElementsByTagName('UL');
            if(initialMenuItemAlwaysExpanded)alwaysExpanedItems[obj.parentNode] = true;
            if(subUl.length>0){                  
               objectsToExpand.unshift(obj);
            }
         }
         obj = obj.parentNode;   
      }
      
      showSubMenu(false,objectsToExpand[0]);

   }
   

      
}
