var menus_to_hide = new Array();
var menu_timeout = null;
$(document).ready(function() {
  $('.parent_link').hover(function() {
    child_menu = getChildMenu($(this));
    dontHideMenu(child_menu);
    offset = realOffset(this);
    child_menu
      .css('top', offset.offsetTop + $(this).height())
      .css('left', offset.offsetLeft)
      .show('fast');
  }, function() {
    clearTimeout(menu_timeout);
    doHideMenu(getChildMenu($(this)));
    menu_timeout = setTimeout(hideMenus, 500);
  });
  $('.child_menu').hover(function() {
    clearTimeout(menu_timeout);
    dontHideMenu($(this));
  }, function () {
    clearTimeout(menu_timeout);
    doHideMenu($(this));
    menu_timeout = setTimeout(hideMenus, 500);
  });
});
function getChildMenu(parent_link) {
  id = parent_link.attr('id').replace('parent_link_','');
  return $('#child_menu_'+id);
}
function dontHideMenu(child_menu) {
  i = arrayIndex(child_menu, menus_to_hide)
  if (i > -1)
    menus_to_hide.splice(i, 1);
}
function doHideMenu(child_menu) {
  if (arrayIndex(child_menu, menus_to_hide) == -1)
    menus_to_hide.push(child_menu);
}
function hideMenus() {
  $.each(menus_to_hide, function() {
    this.hide('fast');
  });
}
function realOffset(element) {
  offset = {
    offsetLeft: 0,
    offsetTop: 0
  }
  while (element != null) {
    offset.offsetLeft += element.offsetLeft;
    offset.offsetTop += element.offsetTop;
    element = element.offsetParent;
  }
  return offset;
}
function arrayIndex(needle, haystack) {
  for (i = 0; i < haystack.length; i++)
    if (haystack[i].attr('id') == needle.attr('id'))
      return i;
  return -1;
}
