(function($){
$.fn.hoverIntent=function(f,g){
var cfg={sensitivity: 7,
interval: 100,
timeout: 0
};cfg=$.extend(cfg, g ?{over: f, out: g} : f );var cX, cY, pX, pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if ( ( Math.abs(pX-cX)+Math.abs(pY-cY))< cfg.sensitivity ){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);} else{
pX=cX;pY=cY;ob.hoverIntent_t=setTimeout( function(){compare(ev, ob);}, cfg.interval );}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){
var p=(e.type=="mouseover" ? e.fromElement : e.toElement)|| e.relatedTarget;while ( p && p !=this ){try{p=p.parentNode;} catch(e){p=this;}}
if ( p==this ){return false;}
var ev=jQuery.extend({},e);var ob=this;if (ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}
if (e.type=="mouseover"){
pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if (ob.hoverIntent_s !=1){ob.hoverIntent_t=setTimeout( function(){compare(ev,ob);}, cfg.interval );}} else{
$(ob).unbind("mousemove",track);if (ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout( function(){delay(ev,ob);}, cfg.timeout );}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);
