function _menu(elem) {
  var llm = $(elem);

  var self = new Object();
  self.jsobj = llm;
  
  llm.parents('li').eq(0).mouseenter(function(e){
    var parent = $(e.currentTarget).eq(0);
    var menuid = parent.attr('id');
    var llm = $("> ul", parent);
    var self = llm.data('_menu');
    
    var menu=$('#menuoverlay-'+menuid);

    if (menu.size() == 0) {
      menu=$('<div id="menuoverlay-'+menuid+'" class="menuoverlay" />');
      menu.appendTo($('#menu-overlays'));

      var bcpos = $('#body-centre').offset();
      var pos = parent.offset();
      if (llm.parents('#top-menu-three').size() > 0) {
        menu.css({left: pos.left-bcpos.left+10, top: pos.top+30});
      } else {
        menu.css({left: pos.left-bcpos.left+20, top: pos.top+26});
      }

      llm.appendTo(menu);

      menu.data('growheight', $('ul', menu).height()+12);

      menu.mouseenter(function(e) {
        var menu=$(e.currentTarget);
        if (menu.data('status')=='waitfade') {
          window.clearTimeout(menu.data('timerid'));
        }
        menu.data('status', 'visible');
      });
      menu.mouseleave(function(e) {
        var menu=$(e.currentTarget);
        menu.data('status', 'waitfade');
        menu.data('timerid',  
          window.setTimeout(function(){
            if (menu.data('status') == 'waitfade') {
              menu.fadeOut(function(){ menu.data('status', 'hidden');
              $(menu.data('linkelem')).removeClass('dropdown-visible');
            }); }
          }, 200)
        );
      });
      
      menu.data('status', 'hidden');
      menu.data('linkelem', parent.get(0));
    }
    
    $('#menu-overlays, #menu-overlays .menuoverlay').css({ zIndex: 1000 });
    menu.css({ zIndex: 1000 });
    
    if (menu.data('status') == 'hidden') {
      menu.css({ height: 3, opacity: 0 });
    }
    menu.stop(true, true);
    if (menu.data('status')=='waitfade') {
      window.clearTimeout(menu.data('timerid'));
    }
    menu.data('status', 'showing');
    menu.animate({ opacity: 1 }, 200, function() {
      menu.animate({ height: menu.data('growheight') }, 200, function() {
        if (menu.data('status') == 'showing') { menu.data('status', 'visible'); }
        $(menu.data('linkelem')).addClass('dropdown-visible');
      });
    });
  });
  llm.parents('li').eq(0).mouseleave(function(e){
    var parent = $(e.currentTarget);
    var menuid = parent.attr('id');

    var menu=$('#menuoverlay-'+menuid);
    if (menu.size() != 0) {
      menu.data('status', 'waitfade');
      menu.data('timerid',  
        window.setTimeout(function(){
          if (menu.data('status') == 'waitfade') {  menu.fadeOut(function(){
            menu.data('status', 'hidden');
            $(menu.data('linkelem')).removeClass('dropdown-visible');
          }); }
        }, 200)
      );
    }
  });

  llm.data('_menu', self);
  
  return self;
}

$().ready(function(){
  var mo = $('<div id="menu-overlays" />');
  mo.css({ position: 'absolute', left: -10, top: 0 });
  mo.appendTo($('#body-centre'));
  
  $('#top-menu-three > li > ul, #top-menu-two > li > ul').each(function(){
    var llm = $(this);
    var menu = new _menu(this);
  });
});



//Do the FAQ coding too
$().ready(function(){
  $('#faq-block .faq-answer').hide();
  $('#faq-block .faq-question').click(function(){
    $(this).nextAll().toggle("slide");
    var c = $(this).parents('.faq-qa').eq(0);
    if (c.hasClass('open')) {
      c.removeClass('open');
    } else {
      c.siblings('.open').each(function(){
        var b = $(this);
        b.removeClass('open');
        $('.faq-answer', b).toggle("slide");  
      });
      c.addClass('open');
    }
  });
});

