(function(e){function h(b,a){typeof b==="string"&&(b=[b]);this.callback=a;this.numProcessed=this.numAborts=this.numErrors=this.numLoaded=0;this.numImages=b.length;this.images=[];for(var c=0,c=0;c<b.length;c++)this.preload(b[c])}e.fn.spritespin=function(b){if(g[b])return g[b].apply(this,Array.prototype.slice.call(arguments,1));else if(typeof b==="object"||!b)return g.init.apply(this,arguments);else e.error("Method "+b+" does not exist on jQuery.spritespin")};var g={init:function(b){var a={width:void 0,height:void 0,offsetX:0,offsetY:0,frameStepX:void 0,frameStepY:void 0,frameStep:void 0,framesX:void 0,frames:36,frame:0,resolutionX:void 0,resolutionY:void 0,animate:!0,loop:!1,loopFrame:0,frameTime:36,reverse:!1,sense:1,slider:void 0,behavior:"drag",image:"images/spritespin.jpg",preloadHtml:" ",preloadBackground:void 0,preloadCSS:void 0,onFrame:void 0,onLoad:void 0,touchable:void 0,panorama:!1},b=b||{};e.extend(a,b);return this.each(function(){var c=e(this),i=c.data("spritespin");if(i)e.extend(i.settings,b),i.frameTime=i.settings.frameTime,b.image!==null&&b.image!==void 0?f.reconfiger(c,i):c.spritespin("animate",i.settings.animate,i.settings.loop);else{c.attr("unselectable","on").css({overflow:"hidden"}).html("");var k;a.panorama||(k=c.find("img"),k.length===0&&(k=e("<img src=''/>"),c.append(k)),k.hide());c.data("spritespin",{target:c,settings:a,animation:null,frameTime:a.frameTime,imageElement:k,touchable:a.touchable||/iphone|ipod|ipad|android/i.test(navigator.userAgent)});i=c.data("spritespin");f.reconfiger(c,i)}})},destroy:function(){return this.each(function(){var b=e(this);data=b.data("spritespin");b.unbind(".spritespin");b.removeData("spritespin")})},update:function(b,a){return this.each(function(){data=e(this).data("spritespin");settings=data.settings;if(a!==void 0)settings.reverse=a;b===void 0?settings.frame+=settings.reverse?-1:1:settings.frame=b;settings.frame=f.wrapValue(settings.frame,0,settings.frames);data.target.trigger("onFrame",data)})},animate:function(b,a){return b===void 0?e(this).data("spritespin").animation!==null:this.each(function(){var c=e(this);data=c.data("spritespin");settings=data.settings;if(typeof a==="boolean")settings.loop=a;b==="toggle"&&(b=!settings.animate);settings.animate=b;if(data.animation!==null)clearInterval(data.animation),data.animation=null;if(settings.animate)data.animation=setInterval(function(){try{c.spritespin("update")}catch(a){}},data.frameTime)})},frame:function(b){return b===void 0?e(this).data("spritespin").settings.frame:this.each(function(){e(this).spritespin("update",b)})},loop:function(b){return b===void 0?e(this).data("spritespin").settings.loop:this.each(function(){var a=e(this);data=a.data("spritespin");a.spritespin("animate",data.settings.animate,b)})}},f={storePoints:function(b,a){if(b.touches===void 0&&b.originalEvent!==void 0)b.touches=b.originalEvent.touches;a.oldX=a.currentX;a.oldY=a.currentY;b.touches!==void 0&&b.touches.length>0?(a.currentX=b.touches[0].clientX,a.currentY=b.touches[0].clientY):(a.currentX=b.clientX,a.currentY=b.clientY);if(a.startX===void 0||a.startY===void 0)a.startX=a.currentX,a.startY=a.currentY,a.clickframe=a.settings.frame;if(a.oldX===void 0||a.oldY===void 0)a.oldX=a.currentX,a.oldY=a.currentY;a.dX=a.currentX-a.startX;a.dY=a.currentY-a.startY;a.ddX=a.currentX-a.oldX;a.ddY=a.currentY-a.oldY;return!1},resetPoints:function(b,a){a.startX=void 0;a.startY=void 0;a.currentX=void 0;a.currentY=void 0;a.oldX=void 0;a.oldY=void 0;a.dX=0;a.dY=0;a.ddX=0;a.ddY=0},clamp:function(b,a,c){return b>c?c:b<a?a:b},wrapValue:function(b,a,c){for(;b>=c;)b-=c;for(;b<a;)b+=c;return b},reconfiger:function(b,a){f.blankBackground(b,a);f.preloadImages(b,a,function(){f.updateBackground(b,a);f.hookSlider(b,a);f.rebindEvents(b,a);a.settings.animate&&g.animate.apply(b,[a.settings.animate,a.settings.loop]);b.trigger("onLoad",a)})},blankBackground:function(b,a){image="none";typeof a.settings.preloadBackground==="string"&&(image=["url('",a.settings.preloadBackground,"')"].join(""));b.css({width:[a.settings.width,"px"].join(""),height:[a.settings.height,"px"].join(""),"background-image":image,"background-repeat":"repeat-x","background-position":"0px 0px"});e(a.imageElement).hide()},updateBackground:function(b){var a=b.data("spritespin"),c=a.settings.image,e=a.settings.offsetX,f=-a.settings.offsetY;if(typeof a.settings.image==="string"){var j=a.settings.frameStepY||a.settings.height,g=a.settings.framesX||a.settings.frames,h=a.settings.frame/g|0;e-=a.settings.frame%g*(a.settings.frameStepX||a.settings.width);f-=h*j}else c=a.settings.image[a.settings.frame];j={};if(a.imageElement){j={position:"relative",top:f,left:e};if(a.settings.resolutionX&&a.settings.resolutionY)j.width=a.settings.resolutionX,j.height=a.settings.resolutionY;a.imageElement.attr("src",c).css(j).show();b.css({position:"relative",top:0,left:0,width:a.settings.width,height:a.settings.height})}else j={width:[a.settings.width,"px"].join(""),height:[a.settings.height,"px"].join(""),"background-image":["url('",c,"')"].join(""),"background-repeat":"repeat-x","background-position":[e,"px ",f,"px"].join("")},a.settings.resolutionX&&a.settings.resolutionY&&(j["-webkit-background-size"]=[a.settings.resolutionX,"px ",a.settings.resolutionY,"px"].join("")),b.css(j)},hookSlider:function(b,a){a.settings.slider!==void 0&&a.settings.slider.slider({value:a.settings.frame,min:0,max:a.settings.frames-1,step:1,slide:function(a,e){g.animate.apply(b,[!1]);g.frame.apply(b,[e.value])}})},rebindEvents:function(b,a){b.unbind(".spritespin");var c=a.settings.behavior;typeof a.settings.behavior==="string"&&(c=l[a.settings.behavior]);var e=function(a){a.cancelable&&a.preventDefault();return!1};b.bind("mousedown.spritespin",c.mousedown);b.bind("mousemove.spritespin",c.mousemove);b.bind("mouseup.spritespin",c.mouseup);b.bind("mouseenter.spritespin",c.mouseenter);b.bind("mouseover.spritespin",c.mouseover);b.bind("mouseleave.spritespin",c.mouseleave);b.bind("dblclick.spritespin",c.dblclick);b.bind("onFrame.spritespin",c.onFrame);a.touchable&&(b.bind("touchstart.spritespin",c.mousedown),b.bind("touchmove.spritespin",c.mousemove),b.bind("touchend.spritespin",c.mouseup),b.bind("touchcancel.spritespin",c.mouseleave),b.bind("click.spritespin",e),b.bind("gesturestart.spritespin",e),b.bind("gesturechange.spritespin",e),b.bind("gestureend.spritespin",e));b.bind("mousedown.spritespin selectstart.spritespin",e);b.bind("onFrame.spritespin",function(a,b){f.updateBackground(b.target,b);b.settings.frame===b.settings.loopFrame&&!b.settings.loop&&g.animate.apply(b.target,[!1]);b.settings.slider&&b.settings.slider.slider("value",b.settings.frame)});typeof a.settings.onFrame==="function"&&b.bind("onFrame.spritespin",a.settings.onFrame);typeof a.settings.onLoad==="function"&&b.bind("onLoad.spritespin",a.settings.onLoad)},preloadImages:function(b,a,c){var f=e('<div class="preload"/>');b.find(".preload").length===0&&b.append(f);css=a.settings.preloadCSS||{};f.css(e.extend({width:a.settings.width,height:a.settings.height},css)).hide().html(a.settings.preloadHtml).fadeIn(250,function(){new h(a.settings.image,function(){b.find(".preload").fadeOut(250,function(){e(this).detach()});c.apply(b,[b,a])})})}};h.prototype.preload=function(b){var a=new Image;this.images.push(a);a.onload=h.prototype.onload;a.onerror=h.prototype.onerror;a.onabort=h.prototype.onabort;a.preloader=this;a.src=b};h.prototype.onProcessed=function(){this.numProcessed++;this.numProcessed===this.numImages&&this.callback(this.images,this.numLoaded)};h.prototype.onload=function(){this.preloader.numLoaded++;this.preloader.onProcessed()};h.prototype.onerror=function(){this.preloader.numErrors++;this.preloader.onProcessed()};h.prototype.onabort=function(){this.preloader.numAborts++;this.preloader.onProcessed()};var l={none:{mousedown:function(){return!1},mousemove:function(){return!1},mouseup:function(){return!1},mouseenter:function(){return!1},mouseover:function(){return!1},mouseleave:function(){return!1},dblclick:function(){return!1},onFrame:function(){return!1}},spin:{mousedown:function(b){var a=e(this).data("spritespin");f.storePoints(b,a);a.onDrag=!0;return!1},mousemove:function(b){var a=e(this),c=a.data("spritespin");if(c.onDrag&&(f.storePoints(b,c),d=c.dX/c.settings.width,dFrame=d*c.settings.frames*c.settings.sense,frame=Math.round(c.clickframe+dFrame),g.update.apply(a,[frame]),g.animate.apply(a,[!1]),c.ddX!==0))d=c.ddX/c.settings.width,dFrame=d*c.settings.frames*c.settings.sense,c.frameTime=c.settings.frameTime/dFrame,c.settings.reverse=c.ddX<0;return!1},mouseup:function(){var b=e(this),a=b.data("spritespin");if(a.onDrag)a.onDrag=!1,b.spritespin("animate",!0);return!1},mouseenter:function(){return!1},mouseover:function(){return!1},mouseleave:function(){var b=e(this),a=b.data("spritespin");if(a.onDrag)a.onDrag=!1,b.spritespin("animate",b.spritespin("animate"));return!1},dblclick:function(){e(this).spritespin("animate","toggle");return!1},onFrame:function(b,a){a.ddX!==0?(a.frameTime+=1,e(this).spritespin("animate",!1),a.frameTime<62&&e(this).spritespin("animate",!0)):e(this).spritespin("animate",!1);return!1}},drag:{mousedown:function(b){var a=e(this).data("spritespin");f.storePoints(b,a);a.onDrag=!0;return!1},mousemove:function(b){var a=e(this),c=a.data("spritespin");c.onDrag&&(f.storePoints(b,c),d=c.dX/c.settings.width,dFrame=d*c.settings.frames*c.settings.sense,frame=Math.round(c.clickframe+dFrame),g.update.apply(a,[frame]),g.animate.apply(e(this),[!1]));return!1},mouseup:function(b){var a=e(this).data("spritespin");f.resetPoints(b,a);return a.onDrag=!1},mouseenter:function(){return!1},mouseover:function(){return!1},mouseleave:function(b){var a=e(this).data("spritespin");f.resetPoints(b,a);return a.onDrag=!1},dblclick:function(){var b=e(this);b.data("spritespin");b.spritespin("animate","toggle");return!1},onFrame:function(){return!1}}}})(jQuery);
