var running    = true;
var timerID    = null;
var currentID  = null;
var previousID = null;
var delay      = 300;
var behaviors  = {};
function InitMenus(id) {
  // get all list elements
  if ($(id)) {
    $A($(id).childNodes).each(function(child) {
      if (child.nodeName == 'LI') {
        // is there a menu?
        if ($(child.id+'-menu')) {
          // set ids
          nav_id  = child.id;
          menu_id = child.id+'-menu';
          
          // add behaviors
          eval("Event.observe('"+nav_id+"',  'mouseover', function(){ ShowMenu('"+nav_id+"'); });");
          eval("Event.observe('"+nav_id+"',  'mouseout',  function(){ StartTimer(\"HideMenu('"+nav_id+"')\"); });");
          eval("Event.observe('"+menu_id+"', 'mouseover', function(){ StopTimer(); });");
        }
      }
    });
  }
}
function StartTimer(event) { running = true; timerID = setTimeout(event, delay); }
function StopTimer() { running = false; clearTimeout(timerID); }
function ShowMenu(id) {
  if (running){StopTimer();}
  currentID = id;
  if (currentID != previousID && previousID != null){ HideMenu(previousID); }
  $(id+'-menu').removeClassName('hide');
  $(id+'-menu').addClassName('show');
  $A($(id).childNodes).each(function(child) { if (child.nodeName == 'A') { Element.addClassName(child, 'hover'); } });
  previousID = currentID;
}
function HideMenu(id, level) {
  $(id+'-menu').removeClassName('show');
  $(id+'-menu').addClassName('hide');
  $A($(id).childNodes).each(function(child) { if (child.nodeName == 'A') { Element.removeClassName(child, 'hover'); } });
}