$(window.document).ready(function()
{
  var activeElement = $('#menu li a.active');
  var openMenuItem  = null;
  var menuDelay     = 300;
  var menuTimer     = null;

  // open menu
  $('#menu>li>a').hover(function () {    openMenu($(this));                  });
  $('#menu li ul').hover(function () {   openMenu($('a', $(this).parent())); });
  $('#menu>li>ul>li>a').hover(function () { openMenu($('a', $(this).parent().parent().parent()));                  });

  // close menu
  $('#menu>li>a').mouseout(function () {  menuTimer = setTimeout(function() { closeMenu(); }, menuDelay); });
  $('#menu>li>ul').mouseout(function () { menuTimer = setTimeout(function() { closeMenu(); }, menuDelay); });

  function openMenu(item)
  {
    if (menuTimer) clearTimeout(menuTimer);

    if (openMenuItem && openMenuItem.attr('href') != item.attr('href')) closeMenu();

    $('#menu>li>a').removeClass('active');
    $(openMenuItem ? openMenuItem : item).addClass('active');
    $('ul', item.parent()).css('display', 'block');

    if (!openMenuItem) openMenuItem = item;
  }

  function closeMenu()
  {
    if (openMenuItem) $('ul', openMenuItem.closest('li')).css('display', 'none');

    $('#menu li a').removeClass('active');
    activeElement.addClass('active');

    openMenuItem = null;
  }
});
