function shownav(e)
{
  var elem = null;
  if( window.event )
    elem = e;
  else
    elem = e.currentTarget;
 
  if( elem.nodeName == 'LI')
  {
    var foundsub = false;
  
    // show everything under
    for( var i=0; i<elem.childNodes.length; i++)
    {
      if( elem.childNodes[i].nodeName == 'UL' )
      {
        if( elem.childNodes[i].sm_isshown == null || elem.childNodes[i].sm_isshown != 'y' )
        {
          if( foundsub == false )
          {
            // highlight opened item. Go up the tree to make sure that all levels are highlighted
            var c = elem.className;
            if( c == null || c.indexOf('opened') == -1 )
            {
              if( c == null || c == '' )
                elem.className='opened';
              else
                elem.className+=' opened';
            }
            
            var t = elem.parentNode;
            while (t.nodeName == 'LI' || t.nodeName == 'UL')
            {
              var c = t.className;
              if( t.nodeName == 'LI' && (c == null || c.indexOf('opened') == -1) )
              {
                if( c == null || c == '' )
                  t.className='opened';
                else
                  t.className+=' opened';
              }
              t = t.parentNode;
            }
            foundsub = true;
          }
          
          if( window.event )
          {
            if( elem.offsetTop == -1 )
            {
              // the parent must be hidden, so show that first
              elem.parentNode.style.display='list-item';
              elem.parentNode.sm_isshown = 'y';
            }
          }
          else
          {
            if( elem.offsetTop == 0 )
            {
              // the parent must be hidden, so show that first
              elem.parentNode.style.display='list-item';
              elem.parentNode.sm_isshown = 'y';
            }
          }
        
          if( elem.offsetTop != -1 )
          {
            
            elem.childNodes[i].style.position='absolute';

            if( elem.parentNode == document.getElementById('pdnav') )
            {
	      var h = 0;
	      var l = 0;
	      var t = elem;
	    
	      // Get element position
	      while( t != null && t.offsetParent != t )
	      {
	        if( t.offsetTop != null )
	          h += t.offsetTop;
	        if( t.offsetLeft != null )
  	          l += t.offsetLeft;
  	        t = t.offsetParent;	
	      }
	      // Add the height of the menu so far
	      h += elem.offsetHeight;
	    
	      // Set styles
	      elem.childNodes[i].style.top=h+'px';
	      elem.childNodes[i].style.left=l+'px';
	      elem.childNodes[i].style.display='list-item';
	    }
	    
            if( elem.childNodes[i].sm_isshown != 'y' )
            {
              elem.childNodes[i].sm_isshown = 'y';
              navshowcount++;
            }
          }
        }
      }
    }
    showhidepulldowns();
  }
}

function hidenav(e)
{
  var elem = null;
  if( window.event )
    elem = e;
  else
    elem = e.currentTarget;

  if( elem.nodeName == 'LI' )
  {
    // unhighlight opened item
    if( elem.className != '' )
    {
      elem.className = elem.className.replace(/[ ]?opened/,'');
    }

    var uls = elem.getElementsByTagName('UL');
    for( var i=0; i< uls.length; i++ )
    {
      uls[i].style.display='none';
      if( uls[i].sm_isshown == 'y' )
      {
        uls[i].sm_isshown = 'n';
        navshowcount--;
      }
    }
    showhidepulldowns();
  }
}

function getshowfunc(node)
{
  return function(e) { shownav(node); };
}
function gethidefunc(node)
{
  return function(e) { hidenav(node); };
}

pulldowns = null;
navshowcount = 0;

function showhidepulldowns()
{
  if( pulldowns != null )
  {
    for( var i=0; i<pulldowns.length; i++ )
    {
      if( navshowcount > 0 )
      {
        if( pulldowns[i].style.visibility != 'hidden' )
        {
          pulldowns[i].style.visibility = 'hidden';
        }
      }
      else
      {
        if( pulldowns[i].style.visibility == 'hidden' )
        {
          pulldowns[i].style.visibility = 'visible';
        }
      }
    }
  }
  if( navshowcount < 0 )
    navshowcount = 0;
}

function setupnav()
{
  var li = document.getElementById('pdnav').getElementsByTagName('LI');
  for( var i=0; i<li.length; i++)
  {
    if( li[i].addEventListener )
    {
      li[i].addEventListener('mouseover',shownav,false);
      li[i].addEventListener('mouseout',hidenav,false);
    }
    else if( li[i].attachEvent)
    {
      li[i].attachEvent('onmouseover',getshowfunc(li[i]));
      li[i].attachEvent('onmouseout',gethidefunc(li[i]));
    }
  }
  pulldowns = document.getElementsByTagName('SELECT');
}
if( window.addEventListener )
  window.addEventListener('load',setupnav,false);
else if( window.attachEvent)
  window.attachEvent('onload',setupnav);
else
  onload=setupnav;