/*
* touchSwipe - jQuery Plugin
* https://github.com/mattbryson/TouchSwipe-Jquery-Plugin
* http://labs.skinkers.com/touchSwipe/
* http://plugins.jquery.com/project/touchSwipe
*
* Copyright (c) 2010 Matt Bryson (www.skinkers.com)
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* $version: 1.3.3
*/

/* 
(function(g){function P(c){if(c&&void 0===c.allowPageScroll&&(void 0!==c.swipe||void 0!==c.swipeStatus))c.allowPageScroll=G;c||(c={});c=g.extend({},g.fn.swipe.defaults,c);return this.each(function(){var b=g(this),f=b.data(w);f||(f=new W(this,c),b.data(w,f))})}function W(c,b){var f,p,r,s;function H(a){var a=a.originalEvent,c,Q=n?a.touches[0]:a;d=R;n?h=a.touches.length:a.preventDefault();i=0;j=null;k=0;!n||h===b.fingers||b.fingers===x?(r=f=Q.pageX,s=p=Q.pageY,y=(new Date).getTime(),b.swipeStatus&&(c= l(a,d))):t(a);if(!1===c)return d=m,l(a,d),c;e.bind(I,J);e.bind(K,L)}function J(a){a=a.originalEvent;if(!(d===q||d===m)){var c,e=n?a.touches[0]:a;f=e.pageX;p=e.pageY;u=(new Date).getTime();j=S();n&&(h=a.touches.length);d=z;var e=a,g=j;if(b.allowPageScroll===G)e.preventDefault();else{var o=b.allowPageScroll===T;switch(g){case v:(b.swipeLeft&&o||!o&&b.allowPageScroll!=M)&&e.preventDefault();break;case A:(b.swipeRight&&o||!o&&b.allowPageScroll!=M)&&e.preventDefault();break;case B:(b.swipeUp&&o||!o&&b.allowPageScroll!= N)&&e.preventDefault();break;case C:(b.swipeDown&&o||!o&&b.allowPageScroll!=N)&&e.preventDefault()}}h===b.fingers||b.fingers===x||!n?(i=U(),k=u-y,b.swipeStatus&&(c=l(a,d,j,i,k)),b.triggerOnTouchEnd||(e=!(b.maxTimeThreshold?!(k>=b.maxTimeThreshold):1),!0===D()?(d=q,c=l(a,d)):e&&(d=m,l(a,d)))):(d=m,l(a,d));!1===c&&(d=m,l(a,d))}}function L(a){a=a.originalEvent;a.preventDefault();u=(new Date).getTime();i=U();j=S();k=u-y;if(b.triggerOnTouchEnd||!1===b.triggerOnTouchEnd&&d===z)if(d=q,(h===b.fingers||b.fingers=== x||!n)&&0!==f){var c=!(b.maxTimeThreshold?!(k>=b.maxTimeThreshold):1);if((!0===D()||null===D())&&!c)l(a,d);else if(c||!1===D())d=m,l(a,d)}else d=m,l(a,d);else d===z&&(d=m,l(a,d));e.unbind(I,J,!1);e.unbind(K,L,!1)}function t(){y=u=p=f=s=r=h=0}function l(a,c){var d=void 0;b.swipeStatus&&(d=b.swipeStatus.call(e,a,c,j||null,i||0,k||0,h));if(c===m&&b.click&&(1===h||!n)&&(isNaN(i)||0===i))d=b.click.call(e,a,a.target);if(c==q)switch(b.swipe&&(d=b.swipe.call(e,a,j,i,k,h)),j){case v:b.swipeLeft&&(d=b.swipeLeft.call(e, a,j,i,k,h));break;case A:b.swipeRight&&(d=b.swipeRight.call(e,a,j,i,k,h));break;case B:b.swipeUp&&(d=b.swipeUp.call(e,a,j,i,k,h));break;case C:b.swipeDown&&(d=b.swipeDown.call(e,a,j,i,k,h))}(c===m||c===q)&&t(a);return d}function D(){return null!==b.threshold?i>=b.threshold:null}function U(){return Math.round(Math.sqrt(Math.pow(f-r,2)+Math.pow(p-s,2)))}function S(){var a;a=Math.atan2(p-s,r-f);a=Math.round(180*a/Math.PI);0>a&&(a=360-Math.abs(a));return 45>=a&&0<=a?v:360>=a&&315<=a?v:135<=a&&225>=a? A:45<a&&135>a?C:B}function V(){e.unbind(E,H);e.unbind(F,t);e.unbind(I,J);e.unbind(K,L)}var O=n||!b.fallbackToMouseEvents,E=O?"touchstart":"mousedown",I=O?"touchmove":"mousemove",K=O?"touchend":"mouseup",F="touchcancel",i=0,j=null,k=0,e=g(c),d="start",h=0,y=p=f=s=r=0,u=0;try{e.bind(E,H),e.bind(F,t)}catch(P){g.error("events not supported "+E+","+F+" on jQuery.swipe")}this.enable=function(){e.bind(E,H);e.bind(F,t);return e};this.disable=function(){V();return e};this.destroy=function(){V();e.data(w,null); return e}}var v="left",A="right",B="up",C="down",G="none",T="auto",M="horizontal",N="vertical",x="all",R="start",z="move",q="end",m="cancel",n="ontouchstart"in window,w="TouchSwipe";g.fn.swipe=function(c){var b=g(this),f=b.data(w);if(f&&"string"===typeof c){if(f[c])return f[c].apply(this,Array.prototype.slice.call(arguments,1));g.error("Method "+c+" does not exist on jQuery.swipe")}else if(!f&&("object"===typeof c||!c))return P.apply(this,arguments);return b};g.fn.swipe.defaults={fingers:1,threshold:75, maxTimeThreshold:null,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,click:null,triggerOnTouchEnd:!0,allowPageScroll:"auto",fallbackToMouseEvents:!0};g.fn.swipe.phases={PHASE_START:R,PHASE_MOVE:z,PHASE_END:q,PHASE_CANCEL:m};g.fn.swipe.directions={LEFT:v,RIGHT:A,UP:B,DOWN:C};g.fn.swipe.pageScroll={NONE:G,HORIZONTAL:M,VERTICAL:N,AUTO:T};g.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,ALL:x}})(jQuery);
 */

 (function (g) {
	function P(c) {
		if (c && void 0 === c.allowPageScroll && (void 0 !== c.swipe || void 0 !== c.swipeStatus)) c.allowPageScroll = G;
		c || (c = {});
		c = g.extend({}, g.fn.swipe.defaults, c);
		return this.each(function () {
			var b = g(this),
				f = b.data(w);
			f || (f = new W(this, c), b.data(w, f))
		})
	}
	function W(c, b) {
		var f, p, r, s;

		function H(a) {
			var a = a.originalEvent,
				c, Q = n ? a.touches[0] : a;
			d = R;
			n ? h = a.touches.length : a.preventDefault();
			i = 0;
			j = null;
			k = 0;
			!n || h === b.fingers || b.fingers === x ? (r = f = Q.pageX, s = p = Q.pageY, y = (new Date).getTime(), b.swipeStatus && (c = l(a, d))) : t(a);
			if (!1 === c) return d = m, l(a, d), c;
			e.bind(I, J);
			e.bind(K, L)
		}
		function J(a) {
			a = a.originalEvent;
			if (!(d === q || d === m)) {
				var c, e = n ? a.touches[0] : a;
				f = e.pageX;
				p = e.pageY;
				u = (new Date).getTime();
				j = S();
				n && (h = a.touches.length);
				d = z;
				var e = a,
					g = j;
				if (b.allowPageScroll === G) e.preventDefault();
				else {
					var o = b.allowPageScroll === T;
					switch (g) {
					case v:
						(b.swipeLeft && o || !o && b.allowPageScroll != M) && e.preventDefault();
						break;
					case A:
						(b.swipeRight && o || !o && b.allowPageScroll != M) && e.preventDefault();
						break;
					case B:
						(b.swipeUp && o || !o && b.allowPageScroll != N) && e.preventDefault();
						break;
					case C:
						(b.swipeDown && o || !o && b.allowPageScroll != N) && e.preventDefault()
					}
				}
				h === b.fingers || b.fingers === x || !n ? (i = U(), k = u - y, b.swipeStatus && (c = l(a, d, j, i, k)), b.triggerOnTouchEnd || (e = !(b.maxTimeThreshold ? !(k >= b.maxTimeThreshold) : 1), !0 === D() ? (d = q, c = l(a, d)) : e && (d = m, l(a, d)))) : (d = m, l(a, d));
				!1 === c && (d = m, l(a, d))
			}
		}
		function L(a) {
			a = a.originalEvent;
			a.preventDefault();
			u = (new Date).getTime();
			i = U();
			j = S();
			k = u - y;
			if (b.triggerOnTouchEnd || !1 === b.triggerOnTouchEnd && d === z) if (d = q, (h === b.fingers || b.fingers === x || !n) && 0 !== f) {
				var c = !(b.maxTimeThreshold ? !(k >= b.maxTimeThreshold) : 1);
				if ((!0 === D() || null === D()) && !c) l(a, d);
				else if (c || !1 === D()) d = m, l(a, d)
			} else d = m, l(a, d);
			else d === z && (d = m, l(a, d));
			e.unbind(I, J, !1);
			e.unbind(K, L, !1)
		}
		function t() {
			y = u = p = f = s = r = h = 0
		}
		function l(a, c) {
			var d = void 0;
			b.swipeStatus && (d = b.swipeStatus.call(e, a, c, j || null, i || 0, k || 0, h));
			if (c === m && b.click && (1 === h || !n) && (isNaN(i) || 0 === i)) d = b.click.call(e, a, a.target);
			if (c == q) switch (b.swipe && (d = b.swipe.call(e, a, j, i, k, h)), j) {
			case v:
				b.swipeLeft && (d = b.swipeLeft.call(e, a, j, i, k, h));
				break;
			case A:
				b.swipeRight && (d = b.swipeRight.call(e, a, j, i, k, h));
				break;
			case B:
				b.swipeUp && (d = b.swipeUp.call(e, a, j, i, k, h));
				break;
			case C:
				b.swipeDown && (d = b.swipeDown.call(e, a, j, i, k, h))
			}(c === m || c === q) && t(a);
			return d
		}
		function D() {
			return null !== b.threshold ? i >= b.threshold : null
		}
		function U() {
			return Math.round(Math.sqrt(Math.pow(f - r, 2) + Math.pow(p - s, 2)))
		}
		function S() {
			var a;
			a = Math.atan2(p - s, r - f);
			a = Math.round(180 * a / Math.PI);
			0 > a && (a = 360 - Math.abs(a));
			return 45 >= a && 0 <= a ? v : 360 >= a && 315 <= a ? v : 135 <= a && 225 >= a ? A : 45 < a && 135 > a ? C : B
		}
		function V() {
			e.unbind(E, H);
			e.unbind(F, t);
			e.unbind(I, J);
			e.unbind(K, L)
		}
		var O = n || !b.fallbackToMouseEvents,
			E = O ? "touchstart" : "mousedown",
			I = O ? "touchmove" : "mousemove",
			K = O ? "touchend" : "mouseup",
			F = "touchcancel",
			i = 0,
			j = null,
			k = 0,
			e = g(c),
			d = "start",
			h = 0,
			y = p = f = s = r = 0,
			u = 0;
		try {
			e.bind(E, H), e.bind(F, t)
		} catch (P) {
			g.error("events not supported " + E + "," + F + " on jQuery.swipe")
		}
		this.enable = function () {
			e.bind(E, H);
			e.bind(F, t);
			return e
		};
		this.disable = function () {
			V();
			return e
		};
		this.destroy = function () {
			V();
			e.data(w, null);
			return e
		}
	}
	var v = "left",
		A = "right",
		B = "up",
		C = "down",
		G = "none",
		T = "auto",
		M = "horizontal",
		N = "vertical",
		x = "all",
		R = "start",
		z = "move",
		q = "end",
		m = "cancel",
		n = "ontouchstart" in window,
		w = "TouchSwipe";
	g.fn.swipe = function (c) {
		var b = g(this),
			f = b.data(w);
		if (f && "string" === typeof c) {
			if (f[c]) return f[c].apply(this, Array.prototype.slice.call(arguments, 1));
			g.error("Method " + c + " does not exist on jQuery.swipe")
		} else if (!f && ("object" === typeof c || !c)) return P.apply(this, arguments);
		return b
	};
	g.fn.swipe.defaults = {
		fingers: 1,
		threshold: 75,
		maxTimeThreshold: null,
		swipe: null,
		swipeLeft: null,
		swipeRight: null,
		swipeUp: null,
		swipeDown: null,
		swipeStatus: null,
		click: null,
		triggerOnTouchEnd: !0,
		allowPageScroll: "auto",
		fallbackToMouseEvents: !0
	};
	g.fn.swipe.phases = {
		PHASE_START: R,
		PHASE_MOVE: z,
		PHASE_END: q,
		PHASE_CANCEL: m
	};
	g.fn.swipe.directions = {
		LEFT: v,
		RIGHT: A,
		UP: B,
		DOWN: C
	};
	g.fn.swipe.pageScroll = {
		NONE: G,
		HORIZONTAL: M,
		VERTICAL: N,
		AUTO: T
	};
	g.fn.swipe.fingers = {
		ONE: 1,
		TWO: 2,
		THREE: 3,
		ALL: x
	}
})(jQuery);