/**
 * Form interaction for TEDMED site
 * @author Avery Brooks, brooks@radicalmedia.com
 * @copyright 2008
 */ 

var formInfo = {
	timers : [],
	defaultInterval : 400
};

/**
 * create a real time js validated form
 */
$.fn.initEmailForm = function(data) {
	$(this).bind(
		"submit",
		function(e) {
			e.preventDefault();
			// Generalize this later ...
			$.post(
				data.target,
				{
					"name" : $("#nameInput").val(),
					"name2" : $("#nameInput2").val(),
					"email" : $("#emailInput").val(),
					"company" : $("#companyInput").val()
				},
				function(dat) {
					if (parseInt(dat) == 0) {
						alert("There was a problem with your submission.  Please check your information and try again.");	
					} else if (parseInt(dat) == 1) {
						$("#nameInput").val("");
						$("#nameInput2").val("");
						$("#emailInput").val("");
						$("#companyInput").val("");
						alert("Thank you.  Please check your email to confirm your subscription.");
					} else if (parseInt(dat) == 2) {
						alert("Thank you.  You are already subscribed to our mailing list.");
					} else {
						alert("I'm sorry, there was a problem.  Please refresh the page and try again!");
					}
				}
			);
			return false;
		}
	);
	$(this)
		.children().children()
		.each(
			function(){
				$(this).addRef();
				switch($(this).attr("class")) {

					default: break;
					case "nameInput":
						$(this).makeSelectable();
						$(this).realtimeStringValidate(2);
					break;
					case "nameInput2":
						$(this).makeSelectable();
						$(this).realtimeStringValidate(2);
					break;
					case "emailInput":
						$(this).makeSelectable();
						$(this).realtimeEmailValidate();
					break;
					case "submitInput":
						$(this).makeSubmit();
					break;
				}
			}
		);

	return $(this);
}


// Contact Form

$.fn.initContactForm = function(data) {
	var FORM = $(this);
	$(this).bind(
		"submit",
		function(e) {
			e.preventDefault();
			// Generalize this later ...
			$.post(
				data.target,
				{
					"fromname" : $("#contactName").val(),
					"from" : $("#contactEmail").val(),
					"subject" : "Contact from TEDMED",
					"body" : $("#contactBody").val()
				},
				function(dat) {
					if (parseInt(dat) == 0) {
						alert("There was a problem with your submission.  Please check your entry and try again.");	
					} else if (parseInt(dat) == 1) {
						$("#contactName").val("");
						$("#contactEmail").val("");
						$("#contactBody").val("");
						alert("Thank you!  Your message has been sent.");
					}
				}
			);
			return false;
		}
	);
	$(this)
		.children()
		.each(
			function(){
				$(this).addRef();
				switch($(this).attr("class")) {
					// maybe we do nothing
					default: break;
					// name -- needs a little 
					case "contactNameInput":
						$(this).makeSelectable();
						$(this).realtimeStringValidate(4);
					break;
					case "contactEmailInput":
						$(this).makeSelectable();
						$(this).realtimeEmailValidate();
					break;
					case "contactSubmitInput":
						$(this).makeSubmit();
					break;
				}
			}
		);

}

/**
 * bind some events to the selection / deselection of these objects
 */
$.fn.makeSelectable = function() {
	$(this).bind(
		"focus",
		function() {
			$(this).addClass("inputSELECTED");
		}
	);
	$(this).bind(
		"blur",
		function() {
			$(this).removeClass("inputSELECTED");
		}
	);
	return $(this);
}

/**
 * create a real time - validated email field
 */
$.fn.realtimeEmailValidate = function() {
	$(this).bind(
		"keyup",
		function(e) {
			try {
				clearTimeout(formInfo.timers[$(this).attr("refKey")]);
			} catch (err) {
				// do nothing plz
			}
			formInfo.timers[$(this).attr("refKey")] = setTimeout(emailValidate,formInfo.defaultInterval,$(this));
		}
	);
}

	/**
	 * validate the email address in an input
	 */
	function emailValidate(obj) {
		var reggy = new RegExp(/^([\w-]+(?:\.[\w-]+)*)\@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$|(\[?(\d{1,3}\.){3}\d{1,3}\]?)$/i);
		var tessy = $(obj).val();
		if (tessy.length == 0) {
			$(obj).removeClass("inputINVALID").removeClass("inputOK").addClass("inputSELECTED");
		} else {
			if (!reggy.test(tessy)) {
				$(obj).removeClass("inputSELECTED").removeClass("inputOK").addClass("inputINVALID");
			} else {
				$(obj).removeClass("inputSELECTED").removeClass("inputINVALID").addClass("inputOK");
				return true;
			}
		}
		return false;
	}

	/**
	 * validate a string by length
	 */
	$.fn.realtimeStringValidate = function(strlen) {
		if (!strlen) strlen = 4;
		$(this).bind(
			"keyup",
			function(e) {
				try {
					clearTimeout(formInfo.timers[$(this).attr("refKey")]);
				} catch (err) {
					// do nothing plz
				}
				formInfo.timers[$(this).attr("refKey")] = setTimeout(stringValidate,formInfo.defaultInterval,$(this),strlen);
			}
		);
	}

		function stringValidate(obj,len) {
			if ($(obj).val().length == 0) {
				$(obj).removeClass("inputINVALID").removeClass("inputOK").addClass("inputSELECTED");
			} else if ($(obj).val().length < len) {
				$(obj).removeClass("inputSELECTED").removeClass("inputOK").addClass("inputINVALID");
			} else {
				$(obj).removeClass("inputSELECTED").removeClass("inputINVALID").addClass("inputOK");
				return true;
			}
			return false;
		}

/**
 * Make an AJAX submit button ... eg: do not do the usual
 */
$.fn.makeSubmit = function() {}

/**
 * Add unique reference key to use for timers, etc.
 */
$.fn.addRef = function() {
	if (!formInfo.last) formInfo.last = 0;
	$(this).attr("refKey",formInfo.last++);
	return $(this);
}

