(function(){'use strict';var definepinchzoom=function($){var pinchzoom=function(el,options){this.el=$(el);this.zoomfactor=1;this.lastscale=1;this.offset={x:0,y:0};this.options=$.extend({},this.defaults,options);this.setupmarkup();this.bindevents();this.update();this.enable();},sum=function(a,b){return a+b;},iscloseto=function(value,expected){return value>expected-0.01&&value1.0){var touch=this.gettouches(event)[0];this.drag(touch,this.lastdragposition);this.offset=this.sanitizeoffset(this.offset);this.lastdragposition=touch;}},handledragend:function(){this.el.trigger(this.options.dragendeventname);this.end();},handlezoomstart:function(event){this.el.trigger(this.options.zoomstarteventname);this.stopanimation();this.lastscale=1;this.nthzoom=0;this.lastzoomcenter=false;this.hasinteraction=true;},handlezoom:function(event,newscale){var touchcenter=this.gettouchcenter(this.gettouches(event)),scale=newscale/this.lastscale;this.lastscale=newscale;this.nthzoom+=1;if(this.nthzoom>3){this.scale(scale,touchcenter);this.drag(touchcenter,this.lastzoomcenter);} this.lastzoomcenter=touchcenter;},handlezoomend:function(){this.el.trigger(this.options.zoomendeventname);this.end();},handledoubletap:function(event){var center=this.gettouches(event)[0],zoomfactor=this.zoomfactor>1?1:this.options.tapzoomfactor,startzoomfactor=this.zoomfactor,updateprogress=(function(progress){this.scaleto(startzoomfactor+progress*(zoomfactor-startzoomfactor),center);}).bind(this);if(this.hasinteraction){return;} if(startzoomfactor>zoomfactor){center=this.getcurrentzoomcenter();} this.animate(this.options.animationduration,updateprogress,this.swing);this.el.trigger(this.options.doubletapeventname);},sanitizeoffset:function(offset){var maxx=(this.zoomfactor-1)*this.getcontainerx(),maxy=(this.zoomfactor-1)*this.getcontainery(),maxoffsetx=math.max(maxx,0),maxoffsety=math.max(maxy,0),minoffsetx=math.min(maxx,0),minoffsety=math.min(maxy,0);return{x:math.min(math.max(offset.x,minoffsetx),maxoffsetx),y:math.min(math.max(offset.y,minoffsety),maxoffsety)};},scaleto:function(zoomfactor,center){this.scale(zoomfactor/this.zoomfactor,center);},scale:function(scale,center){scale=this.scalezoomfactor(scale);this.addoffset({x:(scale-1)*(center.x+this.offset.x),y:(scale-1)*(center.y+this.offset.y)});},scalezoomfactor:function(scale){var originalzoomfactor=this.zoomfactor;this.zoomfactor*=scale;this.zoomfactor=math.min(this.options.maxzoom,math.max(this.zoomfactor,this.options.minzoom));return this.zoomfactor/originalzoomfactor;},drag:function(center,lastcenter){if(lastcenter){if(this.options.lockdragaxis){if(math.abs(center.x-lastcenter.x)>math.abs(center.y-lastcenter.y)){this.addoffset({x:-(center.x-lastcenter.x),y:0});} else{this.addoffset({y:-(center.y-lastcenter.y),x:0});}} else{this.addoffset({y:-(center.y-lastcenter.y),x:-(center.x-lastcenter.x)});}}},gettouchcenter:function(touches){return this.getvectoravg(touches);},getvectoravg:function(vectors){return{x:vectors.map(function(v){return v.x;}).reduce(sum)/vectors.length,y:vectors.map(function(v){return v.y;}).reduce(sum)/vectors.length};},addoffset:function(offset){this.offset={x:this.offset.x+offset.x,y:this.offset.y+offset.y};},sanitize:function(){if(this.zoomfactor=duration){framefn(1);if(callback){callback();} this.update();this.stopanimation();this.update();}else{if(timefn){progress=timefn(progress);} framefn(progress);this.update();requestanimationframe(renderframe);}}).bind(this);this.inanimation=true;requestanimationframe(renderframe);},stopanimation:function(){this.inanimation=false;},swing:function(p){return-math.cos(p*math.pi)/2+0.5;},getcontainerx:function(){return this.container[0].offsetwidth;},getcontainery:function(){return this.container[0].offsetheight;},setcontainery:function(y){return this.container.height(y);},setupmarkup:function(){this.container=$('
');this.el.before(this.container);this.container.append(this.el);this.container.css({'overflow':'hidden','position':'relative'});this.el.css({'-webkit-transform-origin':'0% 0%','-moz-transform-origin':'0% 0%','-ms-transform-origin':'0% 0%','-o-transform-origin':'0% 0%','transform-origin':'0% 0%','position':'absolute'});},end:function(){this.hasinteraction=false;this.sanitize();this.update();},bindevents:function(){detectgestures(this.container.get(0),this);$(window).on('resize',this.update.bind(this));$(this.el).find('img').on('load',this.update.bind(this));},update:function(){if(this.updateplaned){return;} this.updateplaned=true;settimeout((function(){this.updateplaned=false;this.updateaspectratio();var zoomfactor=this.getinitialzoomfactor()*this.zoomfactor,offsetx=-this.offset.x/zoomfactor,offsety=-this.offset.y/zoomfactor,transform3d='scale3d('+zoomfactor+', '+zoomfactor+',1) '+ 'translate3d('+offsetx+'px,'+offsety+'px,0px)',transform2d='scale('+zoomfactor+', '+zoomfactor+') '+ 'translate('+offsetx+'px,'+offsety+'px)',removeclone=(function(){if(this.clone){this.clone.remove();delete this.clone;}}).bind(this);if(!this.options.use2d||this.hasinteraction||this.inanimation){this.is3d=true;removeclone();this.el.css({'-webkit-transform':transform3d,'-o-transform':transform2d,'-ms-transform':transform2d,'-moz-transform':transform2d,'transform':transform3d});}else{if(this.is3d){this.clone=this.el.clone();this.clone.css('pointer-events','none');this.clone.appendto(this.container);settimeout(removeclone,200);} this.el.css({'-webkit-transform':transform2d,'-o-transform':transform2d,'-ms-transform':transform2d,'-moz-transform':transform2d,'transform':transform2d});this.is3d=false;}}).bind(this),0);},enable:function(){this.enabled=true;},disable:function(){this.enabled=false;}};var detectgestures=function(el,target){var interaction=null,fingers=0,lasttouchstart=null,starttouches=null,setinteraction=function(newinteraction,event){if(interaction!==newinteraction){if(interaction&&!newinteraction){switch(interaction){case "zoom":target.handlezoomend(event);break;case 'drag':target.handledragend(event);break;}} switch(newinteraction){case 'zoom':target.handlezoomstart(event);break;case 'drag':target.handledragstart(event);break;}} interaction=newinteraction;},updateinteraction=function(event){if(fingers===2){setinteraction('zoom');}else if(fingers===1&&target.candrag()){setinteraction('drag',event);}else{setinteraction(null,event);}},targettouches=function(touches){return array.prototype.slice.call(touches).map(function(touch){return{x:touch.pagex,y:touch.pagey};});},getdistance=function(a,b){var x,y;x=a.x-b.x;y=a.y-b.y;return math.sqrt(x*x+y*y);},calculatescale=function(starttouches,endtouches){var startdistance=getdistance(starttouches[0],starttouches[1]),enddistance=getdistance(endtouches[0],endtouches[1]);return enddistance/startdistance;},cancelevent=function(event){event.stoppropagation();event.preventdefault();},detectdoubletap=function(event){var time=(new date()).gettime();if(fingers>1){lasttouchstart=null;} if(time-lasttouchstart<300){cancelevent(event);target.handledoubletap(event);switch(interaction){case "zoom":target.handlezoomend(event);break;case 'drag':target.handledragend(event);break;}} if(fingers===1){lasttouchstart=time;}},firstmove=true;el.addeventlistener('touchstart',function(event){if(target.enabled){firstmove=true;fingers=event.touches.length;detectdoubletap(event);}});el.addeventlistener('touchmove',function(event){if(target.enabled){if(firstmove){updateinteraction(event);if(interaction){cancelevent(event);} starttouches=targettouches(event.touches);}else{switch(interaction){case 'zoom':target.handlezoom(event,calculatescale(starttouches,targettouches(event.touches)));break;case 'drag':target.handledrag(event);break;} if(interaction){cancelevent(event);target.update();}} firstmove=false;}});el.addeventlistener('touchend',function(event){if(target.enabled){fingers=event.touches.length;updateinteraction(event);}});};return pinchzoom;};if(typeof define!=='undefined'&&define.amd){define(['jquery'],function($){return definepinchzoom($);});}else{window.rtp=window.rtp||{};window.rtp.pinchzoom=definepinchzoom(window.$);}}).call(this);