//
// dropmenus.js
//
// script to generate drop-down menus
//
//

var timeoutId = null;
var activeMenu = null;

function menuItem(name, link) {
  this.itemName = name;
  this.url = link;
}

function dropMenu(menuName, menuTitle, items) {
  this.items = items;
  this.title = menuTitle;
  this.name = menuName;
}

function createMenuBar(name, menuArray) {
  var nTab = 0;

  var menuHTML = '<div class="topBar" id="' + name + '">\n';
  var width = 60 / menuArray.length;

  for (i=0; i < menuArray.length; i++) {
    nTab++;

    menuHTML += '  <div class="topMenu" style="width:' + width + '%" ' + 'id=Top' + i + '">';
    menuHTML += '<a class="topBar" id="TopLink' + i + '" href="#" tabindex="' + nTab + '"';

    if (document.getElementById) {
      menuHTML += ' onmouseover="menuMouseOver(\'' + menuArray[i].name + '\'); return true;"';
      menuHTML += ' onmouseout="menuMouseOut(\'' + menuArray[i].name + '\'); return true;"';
      menuHTML += ' onfocus="menuFocus(\'' + menuArray[i].name + '\'); return true;"';
      menuHTML += ' onblur="menuBlur(\'' + menuArray[i].name + '\'); return true;"';

      nTab += menuArray[i].items.length;
    }

    menuHTML += '>' + menuArray[i].title + '<\/a>';
    menuHTML += '<\/div>\n';

  }

  menuHTML += '<\/div>\n';

  menuHTML += '<div class="menuBar" id="MenuBar">\n';
  for (j=0; j < menuArray.length; j++) {
    menuHTML += dropmenu(menuArray[j], width);
  }
  menutxt += '<\/div>\n';

  return menuHTML;
}

function dropmenu(menu, width) {
  var menuHTML = '';

  if (document.getElementById) {
    var nTab = 1;

    menuHTML += '<div class="dropMenu" id="' + menu.name + '" style="width:' + width + '%">';

    // Build the bullet list
    menuHTML += '<ul class="dropMenu">\n\t';

    for (i=0; i < menu.items.length; i++) {
        nTab++;

        menuHTML += '<li><a class="dropMenu" href="' + menu.items[i].url + '"';
        menuHTML += ' onmouseover="stayOpen(\'' + menu.name + '\'); return true;"';
        menuHTML += ' onfocus="stayOpen(\'' + menu.name + '\'); return true;"';
        menuHTML += ' onmouseout="menuMouseOut(\'' + menu.name + '\'); return true;"';
        menuHTML += ' onblur="menuMouseOut(\'' + menu.name + '\'); return true;"';

        // Add an explicit tab sequence
        menuHTML += ' tabindex="' + nTab + '"';
        menuHTML += '>' + menu.items[i].itemName;
        menuHTML += '<\/a><\/li>\n\t';
    }
    
    menuHTML += '<\/ul>\n<\/div>\n';

  }

  return menuHTML;
}


function menuMouseOver(menuId) {
  // If DOM1 supported and element exists ...
  if (document.getElementById && (document.getElementById(menuId) != null)) {
    
    // If this menu is already open ...
    if (activeMenu == document.getElementById(menuId)) {
      // Do not close it
      clearTimeout(timeoutId);
    }

    // Another might still be open ...
    else {
      // If another menu is open ...
      if (activeMenu != null) {
        // Do not wait, shut it now
        clearTimeout(timeoutId);
        hideMenu();
      }
    }
    
    // This is the new 'live' menu, make it visible
    activeMenu = document.getElementById(menuId);

    if (activeMenu.style && (activeMenu.style.visibility != null)) {
      activeMenu.style.visibility = 'visible';
    }
  }
}


function stayOpen(menuId) {
    // If menuOver has not been called or the menu is hidden, do nothing
    if ((activeMenu == null) || 
        (activeMenu.style && activeMenu.style.visibility && (activeMenu.style.visibility == 'hidden')))
      return;
    else
      menuMouseOver(menuId);
}


function menuMouseOut(menuId) {
  if (document.getElementById && (document.getElementById(menuId) != null)) {
    activeMenu = document.getElementById(menuId);
    
    // Close in 250 milliseconds
    var cmd = 'hideMenu();';
    timeoutId = window.setTimeout(cmd, 250);
  }
}


function hideMenu() {
    if ((activeMenu.style) && (activeMenu.style.visibility)) {
      activeMenu.style.visibility = 'hidden';
    }
}  