$(document).ready(function () {
  function positionBelow(element)
  {
    return { top: $(element).height(), left: 0 };
  }

  function positionBeside(element)
  {
    return { top: 0, left: $(element).width() };
  }

  function getSubmenu(element)
  {
    if (element.nodeName.toLowerCase() == 'li') {
      return $(element).find('> ul').eq(0);
    }

    return element;
  }

  function hide()
  {
    var submenu = getSubmenu(this);
    if (!submenu) {
      return;
    }

    $(submenu).hide();
  }

  function show()
  {
    var submenu = getSubmenu(this);
    if (!submenu) {
      return;
    }

    var setPosition = $(this).data('setPosition');
    if (setPosition) {
      $(submenu).css(setPosition(this));
    }

    $(submenu).show();
  }

  function highlight()
  {
    $(this).find('img').each(function () {
      this.src = this.src.replace(/\.png$/, '2.png');
    });
    $(this).find('a').each(function () {
      $(this).addClass('hover');
    });
  }

  function unhighlight()
  {
    $(this).find('img').each(function () {
      this.src = this.src.replace(/2\.png$/, '.png');
    });
    $(this).find('a').each(function () {
      $(this).removeClass('hover');
    });
  }

  var menu = $('#ps-menu ul.menu');

  /* Set submenu positions */
  menu.find('> li').data('setPosition', positionBelow);
  menu.find('> li li').data('setPosition', positionBeside);

  /* Add event handlers */
  menu.find('ul, li').hover(highlight, unhighlight);
  menu.find('ul, li').hover(show, hide);

  menu.show();
});

