(function($){$.fn.loupe=function(options){if(!this.length)return this;options=$.extend({loupe:'loupe',width:200,height:150},options||{});this.each(function(){var $this=$(this),loupe=null,big=null,small=null,time=null,hide=function(){loupe.hide()},move=function(e){var os=small.offset(),sW=small.width(),sH=small.height(),oW=options.width/2,oH=options.height/2;if(e.pageX>sW+os.left+10||e.pageX<os.left-10||e.pageY>sH+os.top+10||e.pageY<os.top-10)return hide();if(time&&clearTimeout(time))time=null;loupe.css({left:e.pageX-oW,top:e.pageY-oH});big.css({left:-(((e.pageX-os.left)/sW)*big.width()-oW)|0,top:-(((e.pageY-os.top)/sH)*big.height()-oH)|0});};$this.mouseenter(function(e){if(!small)small=$this.is('img')?$this:$this.find('img:first');loupe=(loupe||(loupe=$('<div></div>').addClass(options.loupe).css({width:options.width,height:options.height,position:'absolute',overflow:'hidden'}).append(big=$('<img src="'+$this.attr($this.is('img')?'src':'href')+'" />').css({position:'absolute'})).mousemove(move).appendTo('body'))).show();move(e);}).mouseout(function(){time=setTimeout(hide,10)});});return this;}})(jQuery);
