(function(b){b.fn.Touchable=function(c){return this.each(function(){var d=b(this).data.Touchable=new a(this,c);return d;});};b.fn.newHover=function(e,d,c){return this.each(function(){b(this).bind("newHoverIn",e).bind("newHoverOut",d);});};b.fn.newHover2=function(d,c){return this.each(function(){b(this).bind("newHoverIn2",d).bind("newHoverOut2",c);});};b.Touchable=a;function a(d,i){this.logging=false;var f=function(l){if(k.logging&&(typeof console!=="undefined")){console.log(Array.prototype.slice.call(arguments));}};this.elem=d;this.$elem=b(d);this.is_doubleTap=false;this.is_currentlyTouching=false;this.isOneFingerGesture=false;this.startTouch={x:0,y:0};this.currentTouch={x:0,y:0};this.previousTouch={x:0,y:0};this.currentDelta={x:0,y:0};this.currentStartDelta={x:0,y:0};this.currentPosition={x:0,y:0};this.doubleTapTimer=null,this.longTapTimer=null;var k=this;if(typeof i!=="undefined"){if(typeof i.logging!=="undefined"){this.logging=i.logging;}}var e=d.addEventListener||d.attachEvent;var c=d.removeEventListener||d.detachEvent;e.call(d,"touchstart",function(){k.$elem.trigger("touchstart");},true);e.call(d,"touchend",function(){k.$elem.trigger("touchend");},false);e.call(d,"touchmove",function(){k.$elem.trigger("touchmove");},false);e.call(d,"touchstart",h,false);this.$elem.mousedown(h);function h(m){if(typeof m.touches!=="undefined"){f("Touchable Touchstart touches length "+m.touches.length);if(m.touches.length!==1&&m.touches.length!==2){return false;}if(k.isCurrentlyTouching){return false;}k.isCurrentlyTouching=true;if(m.touches.length==1){k.isOneFingerGesture=true;k.startTouch.x=k.previousTouch.x=m.touches[0].clientX;k.startTouch.y=k.previousTouch.y=m.touches[0].clientY;}else{if(m.touches.length==2){k.isOneFingerGesture=false;if(m.touches[0].clientY>m.touches[1].clientY){k.startTouch.x=k.previousTouch.x=m.touches[0].clientX;k.startTouch.y=k.previousTouch.y=m.touches[0].clientY;}else{k.startTouch.x=k.previousTouch.x=k.touches[1].clientX;k.startTouch.y=k.previousTouch.y=k.touches[1].clientY;}}}e.call(document,"touchmove",g,false);e.call(document,"touchend",j,false);}else{f("Touchable Touchstart touches length "+m.pageX+" "+m.pageY);k.startTouch.x=k.previousTouch.x=m.pageX;k.startTouch.y=k.previousTouch.y=m.pageY;b(document).mousemove(g);b(document).mouseup(j);}k.target=m.target;k.currentTarget=m.currentTarget;var l=k.startTouch.x;var n=k.startTouch.y;k.hitTarget=(document.elementFromPoint)?(document.elementFromPoint(l,n)):"";m.preventDefault();if(!k.inDoubleTap){k.inDoubleTap=true;k.doubleTapTimer=setTimeout(function(){k.inDoubleTap=false;},500);}else{f("Touchable doubleTap");k.$elem.trigger("doubleTap",k);clearTimeout(k.doubleTapTimer);k.inDoubleTap=false;}k.longTapTimer=setTimeout(function(){f("Touchable longTap");b(k.elem).trigger("longTap",k);},1000);f("Touchable Tap");b(k.elem).trigger("tap",k);b(k.elem).trigger("touchablestart",k);}function g(m){if(typeof m.touches!=="undefined"){f("Touchable Touchsmove touches length "+m.touches.length);if(m.touches.length!==1&&m.touches.length!==2){return false;}if(m.touches.length==1||k.isOneFingerGesture){k.currentTouch.x=m.touches[0].clientX;k.currentTouch.y=m.touches[0].clientY;}else{if(k.touches.length==2&&!k.isOneFingerGesture){if(m.touches[0].clientY>m.touches[1].clientY){k.currentTouch.x=m.touches[0].clientX;k.currentTouch.y=m.touches[0].clientY;}else{k.currentTouch.x=m.touches[1].clientX;k.currentTouch.y=m.touches[1].clientY;}}}}else{k.currentTouch.x=m.pageX;k.currentTouch.y=m.pageY;}b(k.elem).removeClass("webkitAnimate");k.currentDelta.x=(k.currentTouch.x-k.previousTouch.x);k.currentDelta.y=(k.currentTouch.y-k.previousTouch.y);k.currentStartDelta.x=(k.currentTouch.x-k.startTouch.x);k.currentStartDelta.y=(k.currentTouch.y-k.startTouch.y);k.currentPosition.x=k.currentPosition.x+k.currentDelta.x;k.currentPosition.y=k.currentPosition.y+k.currentDelta.y;k.previousTouch.x=k.currentTouch.x;k.previousTouch.y=k.currentTouch.y;f("Touchable Touchablemove self e.target"+m.target+"e.currentTarget "+m.currentTarget+" x:"+k.currentStartDelta.x);k.target=m.target;k.currentTarget=m.currentTarget;var l=k.currentTouch.x;var n=k.currentTouch.y;k.hitTarget=(document.elementFromPoint)?(document.elementFromPoint(l,n)):"";b(k.elem).trigger("touchablemove",k);if(k.longTapTimer){clearTimeout(k.longTapTimer);}}function j(l){if(typeof l.touches!=="undefined"){if(l.targetTouches.length>0){return false;}c.call(k.elem,"touchmove",g,true);c.call(k.elem,"touchend",j,true);}else{b(document).unbind("mousemove",g);b(document).unbind("mouseup",j);}k.isCurrentlyTouching=false;if(k.longTapTimer){clearTimeout(k.longTapTimer);}f("Touchable Touchend self "+k.currentStartDelta.x);b(k.elem).trigger("touchableend",k);f("Touchable: touchableend");b(k.hitTarget).trigger("click",k);f("Touchable: Hittarget click");}}})(jQuery);
