// Basic form validation using jQuery
// Copyright 2009 by Ryan Cramer Design, LLC

(function($) {

	$.fn.rcdForm = function(customOptions) {

		var options = {
			fieldErrorClass: 'rcdFieldError',
			jQueryUI: false,
			errorTextIntro: "Please correct the following errors:\n\n",
			errorTextRequired: "Required field",	
			errorTextEmail: "Invalid email address",
			errorTextNumeric: "Must be numeric"
			};

		$.extend(options, customOptions); 

		return this.each(function(index) {

			var validate = function() {

				var errors = '';
				var $firstField = null;
				var $form = $(this); 

				function getFieldLabel(field) {
					var label = $(field).parent("label").text();
					if(!label) label = $(field).attr("title"); 
					if(!label) label = $(field).siblings("legend").text();
					if(!label) label = $(field).attr("name"); 
					var pos = label.indexOf('<'); 
					if(pos > 0) label = label.substring(0, pos-1); 
					pos = label.indexOf('*'); 
					if(pos > 0) label = label.substring(0, pos-1); 
					return $.trim(label); 
				}

				function setError(error, $field) {
					errors += error + ": " + getFieldLabel($field) + "\n";
					if(!$firstField) $firstField = $field;
					$field.parent().addClass(options.fieldErrorClass);
				}

				$form.find(":input.required").each(function() {
					var str = $.trim($(this).val()); 	
					if(!str.length) setError(options.errorTextRequired, $(this)); 
				}); 

				$form.find("input.email").each(function() {
					var val = $(this).val(); 
					if(val.length == 0) return;
					if(val.indexOf('@') < 1 || val.indexOf('.') < 1) {
						setError(options.errorTextEmail, $(this)); 
					}
				}); 

				$form.find(":input.numeric").each(function() {
					var val = $(this).val(); 
					if(val == null || !val.toString().match(/^[\d ]*$/)){
						setError(options.errorTextNumeric, $(this)); 
					}
				}); 

				if(errors.length) {
					alert(options.errorTextIntro + errors); 
					$firstField.focus(); 
					return false;
				}

				return true; 
			}

			function init($form) {

				if(!$form.is("form")) return; 
				$form.submit(validate); 
				$form.append("<input type='hidden' name='rcdform' value='save' />");
				$form.find(":input").change(function() {
					if($(this).is(".asmSelect")) return;
					var str = $.trim($(this).val()); 	
					if(str.length) $(this).parent().removeClass(options.fieldErrorClass); 
				}); 
			}

			init($(this));
		}); 
	};

})(jQuery); 

