/*
 * jquery.gestureTest.js
 * Gesture Test - to deter automated computer attacks
 *
 * Usage:
 * jQuery(document).ready(function(){
 *     jQuery("#yourDiv").gestureTest();
 * });
 * appends the given element with the test
 *
 */

(function(jQuery){
		  
	jQuery.fn.gestureTest = function(options) {
		
		var defaults = {
			onSuccess: function(){
				jQuery('#GT_gestureTest_table td').css({'background-image': 'url('+settings.path+'good.png)'});
			},
			onFail: function(){
				jQuery('#GT_resetBtn').show();
			},
			instructions: "<strong>Are you human?</strong><br />Click and drag to follow the path.",
			index: Math.floor(Math.random() * 20),	// 0 - 19
			path: "/js/gestureTest/"
		}
		var settings = jQuery.extend(defaults, options);
		
		this.append('<table><tr><td><table id="GT_gestureTest_table"><tr><td id="GT_cell_1"></td><td id="GT_cell_2"></td><td id="GT_cell_3"></td></tr><tr><td id="GT_cell_4"></td><td id="GT_cell_5"></td><td id="GT_cell_6"></td></tr><tr><td id="GT_cell_7"></td><td id="GT_cell_8"></td><td id="GT_cell_9"></td></tr></table></td><td>' + settings.instructions + '<br /><button id="GT_resetBtn" onclick="GT_reset(); return false;" style="display: none;">Reset</button></td></tr></table><input type="hidden" name="GT_gestureCode" id="GT_gestureCode" value="" /><input type="hidden" name="GT_gestureIndex" id="GT_gestureIndex" />');
		
		jQuery('#GT_gestureTest_table').css({'border-collapse': 'collapse', 'width': '90px'});
		jQuery('#GT_gestureTest_table td').css({'width': '30px', 'height': '30px', 'padding': '0px'});
		
		
		//select a random image to be traced
		var rand = settings.index;
		jQuery('#GT_gestureIndex').attr("value",rand);
		var randImage = rand + 1;	// 1 - 20
		if(randImage < 10) randImage = "0" + randImage;
		randImage = randImage + ".gif";
		jQuery('#GT_gestureTest_table').css("background-image","url(" + settings.path + randImage + ")");
		
		jQuery('#GT_gestureTest_table td').mousedown(function(){
			//reset the code
			GT_reset();
			jQuery('#GT_gestureTest_table td').bind("mouseover",function(){
				GT_setCell(this, settings.path);
			});
			//tag the cell under the mouse
			GT_setCell(this, settings.path);
		}).mouseup(function(){
			//alert("Stop Drag");
			jQuery('#GT_gestureTest_table td').unbind("mouseover");
			var code = jQuery('#GT_gestureCode').attr("value");
			if(code.length == 9){
				var solutions = new Array(147896325, 789632145, 963214785, 321478965, 369874125, 987412365, 741236985, 123698745, 147852369, 321456987, 741258963, 123654789, 147896523, 145236987, 785412369, 321478569, 125478963, 365214789, 741236589, 123698547);
				//get the code reversed
				var code2 = code.split("");	//split it into an array
				code2.reverse();			//reverse the array
				code2 = code2.join("");		//join it into a string
				if(solutions[rand] == code || solutions[rand] == code2){
					//alert("Correct");
					settings.onSuccess.call(this);
				}
				else{
					//alert("WRONG!");
					settings.onFail.call(this);
				}
			}
			else settings.onFail.call(this);
		});
		
		return this;
		
	};
	
})(jQuery);

function GT_setCell(cell,path){
	//alert(cell.id);
	jQuery(cell).unbind("mouseover");
	var code = jQuery('#GT_gestureCode').attr("value") + cell.id.substr(8);
	//alert(code);
	jQuery('#GT_gestureCode').attr('value',code);
	jQuery(cell).css("background-image",'url('+path+'on.png)');
}

function GT_reset(){
	jQuery('#GT_gestureCode').attr('value',"");
	jQuery('#GT_gestureTest_table td').css("background-image","none");
	jQuery('#GT_resetBtn').hide();
}

