jQuery.fn.menu = function() { 
  var menu = jQuery(this); 
  var li_collection = menu.children('li > a'); 
  var timer = false;
	var page_li = function(){
    var body_class = jQuery('body').attr('class');
    if(body_class == null || body_class.length == 0) { return false; }
	  return menu.children().children("." + body_class).parent();
	}();
	
// init
  if(page_li) {in_effect(page_li);}
  
  li_collection.hover(showMenu, hideMenu);   
  
// showMenu function
  function showMenu(){
    if(timer) { clearTimeout(timer); timer = false;};
    out_effect(jQuery('.current-item'));
    in_effect( jQuery(this));
  }   

// hideMenu function
  function hideMenu(evt){ 
    var menu_li = jQuery(this); 
    var fired_effect = false;

    li_collection.each(function(){
	  evt = window.event || evt
      var item = jQuery(this);
      if($(evt.relatedTarget).parent()[0] == item[0]) { effect(); fired_effect = true;}
    });

// Check to see if there is an interupt
    if(!fired_effect) { timer = setTimeout(effect, 1500); }
    function effect() {
      out_effect(menu_li);
      if(page_li) { in_effect(page_li) };
    } 
  } 

// In Effect
  function in_effect(li) {
    li.addClass('current-item');
    li.children('ul').css({visibility:'visible', top:'100%'}).animate({'opacity': '1'}, 'slow');    
  }

// Out Effect  
  function out_effect(li) {
    li.removeClass('current-item');
    li.children('ul').css({visibility:'hidden', top:'0', left:'0'});
  }

}
