/*
 * jMultiswipe - jQuery Plugin
 * http://plugins.jquery.com/project/multiswipe
 * http://www.prettydang.com/demos/multiswipe/
 *
 * Copyright (c) 2010 Ryan Laughlin (www.prettydang.com)
 * based off of jSwipe (c) 2009 Ryan Scherf (www.ryanscherf.com)
 * Licensed under the MIT license
 *
 * $Date: 2010-02-06 (Sat, 06 Feb 2010) $
 * $version: 0.1
 * 
 * This jQuery plugin will only run on devices running Mobile Safari
 * on iPhone or iPod Touch devices running iPhone OS 2.0 or later. 
 * http://developer.apple.com/iphone/library/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW5
 */
(function($) {
	$.fn.multiswipe = function(options) {
		
		// Default thresholds & swipe functions
		var defaults = {
			threshold: 100,
			fingers: 2,
			swipeLeft: function() { alert('swiped left') },
			swipeRight: function() { alert('swiped right') },
			swipeUp: function() { alert('swiped up') },
			swipeDown: function() { alert('swiped down') }
		};
		
		var options = $.extend(defaults, options);
		
		if (!this) return false;
		
		return this.each(function() {
			
			var preventRepeat = false;
			var swipeOK = false;
						
			var originalCoord = { x: 0, y: 0 };
			var finalCoord = { x: 0, y: 0 };
									
			function touchStart(event) {
//				console.log("touchStart");

				var e = event.originalEvent;
								
				originalCoord.x = e.targetTouches[0].screenX;
				originalCoord.y = e.targetTouches[0].screenY;
			}
			
			function touchMove(event) {
				var e = event.originalEvent;
				
				e.preventDefault();
								
				if (e.targetTouches.length == defaults.fingers) {
					finalCoord.x = e.targetTouches[0].screenX;
					finalCoord.y = e.targetTouches[0].screenY;
					swipeOK = true;
				}
			}
			
			function touchEnd(event) {
				var e = event.originalEvent;
								
				if (!preventRepeat && swipeOK) {
					preventRepeat = true;
					
					var changeX = Math.max(originalCoord.x, finalCoord.x) - Math.min(originalCoord.x, finalCoord.x);
					var changeY = Math.max(originalCoord.y, finalCoord.y) - Math.min(originalCoord.y, finalCoord.y);
					
					console.log(originalCoord.x +","+ finalCoord.x +" | "+ changeX);
					
					if(changeY > defaults.threshold && originalCoord.y > finalCoord.y) {
//						console.log("swipeUp");
						defaults.swipeUp();
					}
					if(changeY > defaults.threshold && originalCoord.y < finalCoord.y) {
//						console.log("swipeDown");
						defaults.swipeDown();
					}
					if(changeX > defaults.threshold && originalCoord.x > finalCoord.x) {
//						console.log("swipeLeft");
						defaults.swipeLeft();
					}
					if(changeX > defaults.threshold && originalCoord.x < finalCoord.x) {
//						console.log("swipeRight");
						defaults.swipeRight();
					}
				}
				
				swipeOK = false;
				
				setTimeout(preventRepeatOff, 500);
			}
			
			function preventRepeatOff() {
				preventRepeat = false;
			}
			
			// Remove gestures
			$(this).unbind();

			// Add gestures
			$(this).bind("touchstart", touchStart);
			$(this).bind("touchmove", touchMove);
			$(this).bind("touchend", touchEnd);

		});
	};
})(jQuery);
