/*! Touch Draggable - v0.0.1 - 2012-08-16 * https://github.com/royriojas/touch-draggable * Copyright (c) 2012 Roy Riojas; Licensed MIT, GPL */ (function(a,b){var c=b.Modernizr,d={now:function(){var a=Date.now;return a?Date.now():(new Date).getTime()},support:{pointerEnabled:!!b.navigator.msPointerEnabled,touch:c?c.touch:"ontouchstart"in b||b.DocumentTouch&&document instanceof DocumentTouch},debounce:function(a,b,c){return function(){if(a.timer==null){var d=arguments;(function(){a.apply(c,d),a.timer=setTimeout(function(){a.timer=null},b||1)})()}}},throttle:function(a,b,c){return function(){var d=arguments;clearTimeout(a.timer),a.timer=setTimeout(function(){a.timer=null,a.apply(c,d)},b||0)}},ns:function(a){if(!a)return;var c=a.split("."),d=b;for(var e=0,f=c.length;e=2&&(a=c[0],b=c[1],a>b&&(a=c[1],b=c[0])),a+Math.floor(Math.random()*(b-a))}},e=d.support.touch,f=d.support.pointerEnabled,g=d.isNull,h=a.browser,i=h.webkit,j=h.mozilla;a.extend(d,{format:function(){var a=/\{(\d+)\}/g,b=Array.prototype.slice.call(arguments),c=b.shift();return c.replace(a,function(a,c){var d=b[c];return g(d)&&(d=""),d})},pointer:{down:e?"touchstart":f?"MSPointerDown":"mousedown",move:e?"touchmove":f?"MSPointerMove":"mousemove",up:e?"touchend":f?"MSPointerUp":"mouseup",cancel:e?"touchcancel":"MSPointerCancel",tap:e?"click":f?"MSGestureTap":"click"},gesture:{start:e?"gesturestart":"MSGestureStart",change:e?"gesturechange":"MSGestureChange",end:e?"gestureend":"MSGestureEnd"},css:{transform:i?"-webkit-transform":j?"-moz-transform":f?"-ms-transform":"transform"},transition:{end:i?"webkitTransitionEnd":"transitionend"},animation:{end:i?"webkitAnimationEnd":"animationend"}}),b.r3m=d})(jQuery,window),function(a,b,c){var d=b.support.touch,e=b.support.pointerEnabled;a.getOriginalEvent=function(a){var b=a.originalEvent;return b.preventDefault(),d&&(b=b.touches[0]),e?b:b},a.getTransformString=function(a){return c.getComputedStyle(a).webkitTransform},a.getMatrix=function(a){return new WebKitCSSMatrix(a)}}(jQuery,window.r3m,window),function(a,b,c,d){"use strict";var e=b.pointer,f=e.down,g=e.up,h=e.move,i=a(document),j=b.debounce,k=a.getOriginalEvent,l=b.format,m=b.css.transform,n=a.getTransformString,o=a.getMatrix,p=0,q=b.now;a.widget("r3m.touchDraggable",{_create:function(){var b=this,c=b.element;if(c.length==0)return;var d=b.options,e=d.helper,k=b.id=l("{0}_{1}",p++,q()),m=b.instanceNS=l(".td_{0}",k),n=c[0],o=d.addClasses&&a.trim(d.draggableClass)!=="";o&&c.addClass(d.draggableClass),e=="original"&&!/^(?:r|a|f)/.test(this.element.css("position"))&&c.css("position","relative"),b._processPMove=j(b._processPMove,0,b),c.on(l("{0}.touchdraggable",f),function(a){b._processPDown(a,c,n,d),i.on(l("{0}{1}",h,m),function(a){b._processPMove(a,c,n,d)}).on(l("{0}{1}",g,m),function(a){b._processPUp(a,c,n,d),i.off(m)})})},_processPUp:function(b,c,d,e){var f=this,g=e.addClasses&&a.trim(e.draggingClass)!=="";f.isDragging=!1,f.lastX=null,f.lastY=null;if(f.dragHappen==!0&&f.startPosition){var h=f.startPosition;console.log("startpos",f.startPosition.left,f.startPosition.top);var i=n(d),j,k,l;i!="none"?(j=o(i),k=j.e,l=j.f):(k=0,l=0),h.left+=k,h.top+=l,h&&(h[m]="",c.css(h)),f.startPosition=null}f._trigger("stop",{}),f.firstMoveHappen&&(f.firstMoveHappen=!1,g&&c.removeClass(e.draggingClass)),f.dragHappen=!1},_processPMove:function(b,c,d,e){var f=this,g=e.addClasses&&a.trim(e.draggingClass)!=="";try{if(!f.isDragging)return;if(!d)return;var h=k(b);f.x=h.clientX,f.y=h.clientY;var i=f.lastX||f.x,j=f.lastY||f.y,p=i-f.x,q=j-f.y,r=n(d),s,t,u;r!="none"?(s=o(r),s.e-=p,s.f-=q,t=s.e,u=s.f):(t=0,u=0),c.css(m,l("translate3d({0}px,{1}px,0)",t,u)),f.lastX=f.x,f.lastY=f.y,f.dragHappen=!0,f.firstMoveHappen||(f.firstMoveHappen=!0,g&&c.addClass(e.draggingClass)),f._trigger("drag",{})}catch(b){}},_processPDown:function(b,c,d,e){if(b.which>1)return;var f=this,g=a.trim(e.handle);if(g==""||a(b.target).closest(g).length>0){var h=d.style;f.startPosition=c.position(),/(fixed|absolute)/.test(c.css("position"))||(a.trim(h.top)===""?f.startPosition={top:0,left:0}:f.startPosition={top:parseInt(h.top,10),left:parseInt(h.left,10)}),c.css(f.startPosition),f._trigger("start",{}),f.isDragging=!0,b.stopPropagation()}},destroy:function(){this.element.off(".touchdraggable"),i.off(this.instanceNS)},options:{handle:null,helper:"original",addClasses:!0,draggableClass:"ui-draggable",draggingClass:"ui-draggable-dragging"}})}(jQuery,window.r3m,window);