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