jQuery.fn.extend({
    hmenu: function(){

      var navId = '#'+$(this).attr('id');
      
      var topMenu = jQuery(navId+' > ul').find('> li a');
      topMenuLength = topMenu.length;
      var subMenu = jQuery(navId+' ul li ul');
      subMenuLength = subMenu.length;

      topMenuActive = jQuery(navId+' > ul').find('> li a.selected');
      subMenuActive = jQuery(navId+' ul.active');

      if(subMenuActive.length == 0) {
        jQuery(navId+' ul li ul:first').show();
      }

      //reset menu on leave
      jQuery(navId).mouseleave(function() {
        if (!jQuery(navId).find('.active').hasClass("selected"))
        {
          jQuery(navId).find('.active').removeClass('nav_first_selected');
          jQuery(navId).find('.active').removeClass('nav_last_selected');
        }
        jQuery(navId).find('.active').removeClass('active');
        
        subMenu.each(function() {
          jQuery(this).hide();
        });

        if(subMenuActive.length > 0) {
          subMenuActive.show();
        }
        else {
          jQuery(navId+' ul li ul:first').show();
        }
        
      });

      //bind top menu event - closure used
      for(i = 0; i < topMenuLength; i++) {
        topMenu[i].onmouseover = (function(currentItem) {
          return function() {            
            subnav = $(this).parent().find('ul');

            for(j = 0; j < subMenuLength; j++) {
              jQuery(subMenu[j]).not(':hidden').hide();
            }

            for(h = 0; h < topMenuLength; h++) {
              if(jQuery(topMenu[h]).parent().hasClass('selected') === false) 
              {
                jQuery(topMenu[h]).parent().removeClass('nav_first_selected');
                jQuery(topMenu[h]).parent().removeClass('nav_last_selected');
                jQuery(topMenu[h]).parent().removeClass('active');
              }
            }

            $(this).parent().addClass('active');
            if ($(this).parent().hasClass("nav_first"))
            {
              $(this).parent().addClass('nav_first_selected');
            }
            if ($(this).parent().hasClass("nav_last"))
            {
              $(this).parent().addClass('nav_last_selected');
            }

            subnav.show();
          }
        })(i);
      }
    }
});

