
(function($){var gaussian_function=function(c,x){return Math.exp(-(x*x)/(2.0*c*c))},linear_sequence=function(x0,d,n){var xs=[];for(var i=0;i<n;++i)xs.push(x0+i*d);return xs},centered_sequence=function(d,n){return linear_sequence(-d*(n-1)/2.0,d,n)},gaussian_sequence=function(c,n){return $.map(centered_sequence(c*6.0/n,n),function(x){return gaussian_function(c,x)})},normalized=function(xs){var total=0;$.each(xs,function(i,x){total+=x});return $.map(xs,function(x){return x/total})};var do_gaussian_blur=function(e,n,dx,dy){var position=$(e).position(),opacity=$(e).css('opacity'),positions=$.map(centered_sequence(1.0/n,n),function(t){return{left:position.left+t*dx,top:position.top+t*dy}}),opacities=normalized(gaussian_sequence(3.0,n)),parent=$(e).parent(),elements=$();$.each(positions,function(i,p){elements=elements.add($(e).clone(false).attr('id','').addClass('gaussian-clone').appendTo(parent).css({position:'absolute',opacity:opacity*opacities[i],visibility:'visible',left:p.left,top:p.top}))});return elements};var unblur=function(){$(this).data('gaussian-clones')?$(this).css({visibility:'visible'}).data('gaussian-clones').each(unblur)&&unblur.call($(this).removeData('gaussian-clones')):$(this).filter('.gaussian-clone').remove()};$.fn.gaussian=function(options){return $(this).each(options===null?unblur:function(i,e){$(e).data('gaussian-clones')?$(e).data('gaussian-clones').each(function(){$(this).gaussian(options)}):$(e).data('gaussian-clones',do_gaussian_blur(e,options.n||5,options.dx||0,options.dy||0)).css({visibility:'hidden'})})};$.fn.gaussians=function(){var collection=$();this.each(function(){var xs=$(this).data('gaussian-clones')||[];for(var i=0,l=xs.length;i<l;++i)collection=collection.add(xs[i]).add($(xs[i]).gaussians())});return collection};$.fn.motionblur=function(options){return $(this).each(function(){var p=$(this).position(),dx=options.left-p.left,dy=options.top-p.top;$(this).gaussian({dx:dx/(options.sharpness||10),dy:dy/(options.sharpness||10),n:options.n||8}).gaussians().add(this).css({position:'absolute'}).animate({left:(dx>=0?'+=':'-=')+Math.abs(dx),top:(dy>0?'+=':'-=')+Math.abs(dy)},options.speed||$.fx.speeds._default,options.easing||'swing',function(){$(this).gaussian(null).css({left:options.left,top:options.top});options.callback&&options.callback.call(this)})})};})(jQuery);
