jQuery(function() {
  jQuery('.tip_trigger').click(function() {
 return false;
});
    jQuery('.tip_trigger').each(function() {        
        var tip = jQuery(this).find('.tip');
      
        jQuery(this).hover(
            function() { tip.appendTo('body'); },
            function() { tip.appendTo(this); }
        ).mousemove(function(e) {
            var x = e.pageX + 20,
                y = e.pageY + 20,
                w = tip.width(),
                h = tip.height(),
                dx = jQuery(window).width() - (x + w),
                dy = jQuery(window).height() - (y + h);

            if ( dx < 20 ) x = e.pageX - w - 20;
            if ( dy < 20 ) y = e.pageY - h - 20;

            tip.css({ left: x, top: y });
        });         
    });

});

function megaHoverOver(){
        jQuery(this).find(".sub").stop().fadeTo('100', 1).show();
            
        //Calculate width of all ul's
        (function($) {
            jQuery.fn.calcSubWidth = function() {
                rowWidth = 0;
                //Calculate row
                $(this).find("ul").each(function() {                    
                    rowWidth += $(this).width();
                });    
            };
        })(jQuery);
        
        if ( jQuery(this).find(".row").length > 0 ) { //If row exists...
            var biggestRow = 0;    
            //Calculate each row
            jQuery(this).find(".row").each(function() {                               
                jQuery(this).calcSubWidth();
                //Find biggest row
                if(rowWidth > biggestRow) {
                    biggestRow = rowWidth;
                }
            });
            //Set width
            jQuery(this).find(".sub").css({'width' :biggestRow});
            jQuery(this).find(".row:last").css({'margin':'0'});
            
        } else { //If row does not exist...
            
            jQuery(this).calcSubWidth();
            //Set Width
            jQuery(this).find(".sub").css({'width' : rowWidth});
            
        }
    }
    
    function megaHoverOut(){
      jQuery(this).find(".sub").stop().fadeTo('100', 0, function() {
          jQuery(this).hide();
      });
    }


    var config = {    
         sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)    
         interval: 100, // number = milliseconds for onMouseOver polling interval    
         over: megaHoverOver, // function = onMouseOver callback (REQUIRED)    
         timeout: 500, // number = milliseconds delay before onMouseOut    
         out: megaHoverOut // function = onMouseOut callback (REQUIRED)    
    };

  jQuery(document).ready(function (){
    jQuery("ul#topnav li .sub").css({'opacity':'0'});
    jQuery("ul#topnav li").hoverIntent(config);
      
  });
