/**********************************************************************
   Page load
 *********************************************************************/

function loadNav() {
   setTimeout('initTopnav()', 500);
}

/**********************************************************************
   Topnav functionality
 *********************************************************************/

function initTopnav() {
   initTopnavItem( 'topnav-about', 'topnav-about-tier2');
   initTopnavItem('topnav-research', 'topnav-research-tier2');
   initTopnavItem('topnav-education', 'topnav-education-tier2');
   initTopnavItem('topnav-services', 'topnav-services-tier2');
   initTopnavItem('topnav-more', 'topnav-more-tier2');
}

function initTopnavItem(topnavItemId, menuId) {
   var topnavItem = document.getElementById(topnavItemId);
   var menu = document.getElementById(menuId);
   
   if (topnavItem == null || menu == null) return;
   
   // add event handlers to topnav item
   topnavItem.menu = menu;
   topnavItem.onmouseover = showTopnavTier2;
   topnavItem.onmouseout = hideTopnavTier2;

   // position menu
   menu.style.left = topnavItem.offsetLeft + 'px';
   menu.style.top = 26 + 'px';
}

var currentMenu = null;
var hideMenuTimeout = null;

function showTopnavTier2(menu) {
   if (hideMenuTimeout) {
      clearTimeout(hideMenuTimeout);
      if (currentMenu && currentMenu != this.menu) {
         delayedHideTopnavTier2();
      }
   }
   this.menu.style.visibility = 'visible';
   currentMenu = this.menu;
}

function hideTopnavTier2() {
   hideMenuTimeout = setTimeout('delayedHideTopnavTier2()', 400);
}

function delayedHideTopnavTier2() {
   if (currentMenu) {
      currentMenu.style.visibility = 'hidden';
      currentMenu = null;
   }
}

/******************************************************************************
	Adding event listeners
 *****************************************************************************/

function addEventListenerToElement(element, eventType, functionValue, capture) {
	if (element.addEventListener) element.addEventListener(eventType, functionValue, capture);
	else if (element.attachEvent) element.attachEvent("on" + eventType, functionValue);
   else {
      if (!element['on' + eventType]) {
         element['on' + eventType] = function(e) {
            if (!e) e = event;
            var functionArray = eval('this.' + e.type + 'Handler');
            for (var index = 0; index < functionArray.length; index++) {
               if (functionArray[index] != null) {
                  functionArray[index](e);
               }
            }
         };
         element[eventType + 'Handler'] = new Array();
         // element[eventType + 'Handler'].element = this;
      }
      var index = 0;
      while (element[eventType + 'Handler'][index] != null) {
         index++;
      }
      element[eventType + 'Handler'][index] = functionValue;
   }
}

function addEventListenerToDescendants(element, eventType, functionValue, capture) {
   addEventListenerToElement(element, eventType, functionValue, capture);
   var childNodes = element.childNodes;
   for (var childIndex = 0; childIndex < childNodes.length; childIndex++) {
      var childNode = childNodes[childIndex]
      if (childNode.nodeType == 1) {
         addEventListenerToDescendants(childNode, eventType, functionValue, capture);
      }
   }
}