/************************************************************************************************************

(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('dhtmlgoodies_slidedown_menu');
 
  dhtmlgoodies_slmenuObj.style.display='';
  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!='dhtmlgoodies_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!='dhtmlgoodies_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]);

  }
  
}


window.onload = initSlideDownMenu;
