/*
example usage:

<script type="text/javascript" src="<?=Util::GetCirkuitIncludesUrl()?>js/jquery/jquery.js"></script>
<script type="text/javascript" src="<?=Util::GetCirkuitIncludesUrl()?>js/jquery/FormFingerprint/jquery.FormFingerprint.js"></script>
<script type="text/javascript"> 
	$(function() { 
		$("form#contactForm").FormFingerprint()
	});
</script>
*/

/*
FormFingerprint - automatically adds hidden fields to each selected form that includes "fingerprint"
	security for server-side validation. the fingerprint should help against bots that submit to 
	random forms online
*/
(function($) {
	$.fn.FormFingerprint = function(options) {
		
		function addFingerprints(jContainer, minSsecondsAllowed, maxSsecondsAllowed){
			var fpFirst = Number(new Date());
			var fpMin = $.fn.FormFingerprint.lastUsedOptions.fingerprintMinVT*1000;
			var fpMax = $.fn.FormFingerprint.lastUsedOptions.fingerprintMaxVT*1000;
			jContainer
				.append('<input type="hidden" name="fingerprintFirst" class="fingerprintFirst" value="'+fpFirst+'">')
				.append('<input type="hidden" name="fingerprintLast" class="fingerprintLast" value="">')
				.append('<input type="hidden" name="fingerprintMinVT" class="fingerprintMinVT" value="'+fpMin+'">')
				.append('<input type="hidden" name="fingerprintMaxVT" class="fingerprintMaxVT" value="'+fpMax+'">')
				.find(":input").each(function(i,el){
					$(el).click(function(){
						$(".fingerprintLast").val(Number(new Date()));
					});
				});
		}
		
		
		var opts = $.extend({}, $.fn.FormFingerprint.defaults, options);
		$.fn.FormFingerprint.lastUsedOptions = opts;
		return $(this).each(function() {
			var container = $(this);
			if(this.nodeName == "FORM"){ //container is a form
				addFingerprints(container, opts.fingerprintMinVT, opts.fingerprintMaxVT);
			}
			else{
				$("form", container).each(function() { //iterate through each form in the container
					addFingerprints($(this), opts.fingerprintMinVT, opts.fingerprintMaxVT);
				});
			}
		});
	};

	/* 
		fingerprintMinVT- Valid Time in seconds from when the page first loads that the form must be submitted. Value is inclusive.
				default: 2
		fingerprintMaxVT- Valid Time in seconds from when the page first loads that the form must be submitted. Value is inclusive.
				default: 15778463 (6 months)
	*/
	$.fn.FormFingerprint.defaults = {
		fingerprintMinVT: 1.5,
		fingerprintMaxVT: 15778463 //6 months
	};
	
})(jQuery); 