DropDownMenu = {

  dropdownMenu : function(navid) {
    var isie = typeof document.all != 'undefined'
     && typeof window.opera == 'undefined'
     && navigator.vendor != 'KDE';

    if (typeof document.getElementById == 'undefined'
        || (navigator.vendor == 'Apple Computer, Inc.'
        && typeof window.XMLHttpRequest == 'undefined')
        || (isie && typeof document.uniqueID == 'undefined'))
    {
      return;
    }
    
    var rollover = new Image;
    rollover.src = '/images/sub_arrow_3.gif';
    
    var tree = document.getElementById(navid);
    if (tree)
    {
      DropDownMenu.branch = tree;
      var items = tree.getElementsByTagName('li');
      for(var i = 0; i < items.length; i++)
      {
        DropDownMenu.dropdownTrigger(tree, items[i], navid, isie);
      }
    }
  },
  
  dropdownTrigger : function(tree, li, navid, isie) {
    //var opentime, closetime;
    var a = li.getElementsByTagName('a')[0];
    var menu = li.getElementsByTagName('ul').length > 0 ?
      li.getElementsByTagName('ul')[0] : null;
    var horiz = tree.className.indexOf('horizontal') != -1;
    var issub = li.parentNode.id == navid;
    
    if(menu)
    {
      //li.className += (li.className == '' ? '' : ' ') + 'hasmenu';
      a.className += (a.className = '' ? '' : ' ') + 'hasmenu';
    }
    
    jsHelper.attachEventListener(li, 'mouseover', function(e)
    {
      if (DropDownMenu.unwantedTextEvent()) { return; }
      //clearTimeout(closetime);
      //if (DropDownMenu.branch == li) { DropDownMenu.branch = null; }
      
      if(DropDownMenu.branch)
      {  
        DropDownMenu.clearMenus(DropDownMenu.branch);
        DropDownMenu.branch = null;
      }
            
      if(a.className.indexOf('hasmenu') != -1)
        a.className += (a.className = '' ? '' : ' ') + 'showing_sub_menu';
      
      var target = typeof e.target != 'undefined'
        ? e.target : e.srcElement;
      while(target.nodeName.toUpperCase() != 'LI')
      {
        target = target.parentNode;
      }
      if (target != li) { return; }
            
      if(menu)
      {
        
        //opentime = window.setTimeout(function()
        //{
                          
          menu.style.left = horiz ? (isie ? li.offsetLeft + 'px' : 'auto')
            : '0';
          menu.style.top = horiz && issub
            ? (isie ? a.offsetHeight + 'px' : 'auto')
            : (isie ? li.offsetTop + 'px' : '0');
          
          DropDownMenu.repositionMenu(menu);
          
          //if(typeof document.uniqueID != 'undefined')
          //{
            DropDownMenu.createIframeLayer(menu);
          //}
        //}, 250);
        
      }
    }, false);
    
    jsHelper.attachEventListener(li, 'mouseout', function(e)
    {
      if(DropDownMenu.unwantedTextEvent()) { return; }
      var related = typeof e.relatedTarget != 'undefined'
        ? e.relatedTarget : e.toElement;
      if(!li.contains(related))
      {
        //clearTimeout(opentime);
        DropDownMenu.branch = li;
        
        a.className = a.className.replace(/ ?showing_sub_menu/g, '');
        if(menu)
        {
          //closetime = window.setTimeout(function()
          //{
            menu.style.left = '-100em';
            
            DropDownMenu.removeIframeLayer(menu);
          //}, 100);
        }
      }
    }, false);
    
    if(!isie)
    {
      li.contains = function(node)
      {
        if (node == null) { return false; }
        if (node == this) { return true; }
        else { return this.contains(node.parentNode); }
      };
    }
  },
  
  clearMenus : function(root) {
    var menus = root.getElementsByTagName('ul');
    for(var i = 0; i < menus.length; i++)
    {
      menus[i].style.left = '-100em';
      DropDownMenu.removeIframeLayer(menus[i]);
    }
  },
  
  unwantedTextEvent : function() {
    return (navigator.vendor == 'Apple Computer, Inc.'
      && (event.target == event.relatedTarget.parentNode
      || (event.eventPhase == 3
      && event.target.parentNode == event.relatedTarget)));
  },
  
  getRoughPosition : function(ele, dir) {
    var pos = dir == 'x' ? ele.offsetLeft : ele.offsetTop;
    var tmp = ele.offsetParent;
    while(tmp != null)
    {
      pos += dir == 'x' ? tmp.offsetLeft : tmp.offsetTop;
      tmp = tmp.offsetParent;
    }
    
    return pos;
  },
  
  repositionMenu : function(menu) {
    var extent = [
      DropDownMenu.getRoughPosition(menu, 'x') + menu.offsetWidth + 25,
      DropDownMenu.getRoughPosition(menu, 'y') + menu.offsetHeight + 25
    ];
    var viewsize = jsHelper.getViewportSize();
    
    if(extent[0] > viewsize[0])
    {
      var offset = menu.offsetWidth
        + menu.parentNode.parentNode.offsetWidth;
      var inset = menu.parentNode.offsetWidth
        - menu.offsetLeft;
      
      menu.style.left = (0 - offset + (inset * 2)) + 'px';
    }
    
    if(extent[1] > viewsize[1])
    {
      var current = parseInt(menu.style.top, 10);
      var difference = (extent[1] - viewsize[1]);
      
      menu.style.top = (current - difference) + 'px';
    }
  },
  
  createIframeLayer : function(menu) {
    //var layer = document.createElement('iframe');
    //layer.tabIndex = '-1';
    //layer.src = 'javascript:false;';
    //menu.parentNode.appendChild(layer);
    var layer = document.getElementById('iframe');
    
    var position = jsHelper.getPosition(menu);
    
    layer.style.left = position[0] + 'px';
    
    // check to see if navigation is vertical
    // position varies between ie and ff
    if(menu.parentNode.parentNode.id == 'navigation')
      layer.style.top = menu.parentNode.offsetTop + menu.parentNode.parentNode.offsetTop + 'px';
    else
      layer.style.top = position[1] + 'px';
    layer.style.width = menu.offsetWidth + 'px';
    layer.style.height = menu.offsetHeight + 'px';
    
    layer.style.display = 'block';
  },
  
  removeIframeLayer : function(menu)
  {
    //var layers = menu.parentNode.getElementsByTagName('iframe');
    //while(layers.length > 0)
    //{
    //  layers[0].parentNode.removeChild(layers[0]);
    //}
    var layer = document.getElementById('iframe');
    layer.style.display  = 'none';
  }
  
};

jsHelper.addLoadListener(function() { DropDownMenu.dropdownMenu('navigation'); });
jsHelper.addLoadListener(function() { DropDownMenu.dropdownMenu('top_navigation'); });
