/* validation jquery plugin function */
/*

SET OPTIONS
		
		var opts  = {
			fname_lbl: 'First name',
			lname_lbl: 'Last name',
			email_lbl: 'Email',
			required_summary_txt: ' is a required field',
			required_inline_txt: 'this field is required',
			display_err_summary: 0,
			display_err_inline: 1,
			useCallbackOnSuccess:1,
			CallbackFunction: 'processValidatedForm'
		}
		
- Provide a label (_lbl) for each field that is required
- display_err_summary: if you want summary to be displayed. Add this element for the summary: <div id="val_summary" style="display:none;"></div>
- add the "required" class to all required inputs
- add following js to activate plugin on a form: $("#myFormIdGoesHere").validate(opts);

SAMPLE FORM and code

<form action="<?php $_SERVER['../policy/js/PHP_SELF'] ?>" method="post" id="myForm">
	<div id="val_summary" style="display:none;"></div>
	<label>First Name:</label>
	<span class="field"><input type="text" name="fname" id="fname" class="required" /></span>
	<label>Last Name:</label>
	<span class="field"><input type="text" name="lname" id="lname" class="required" /></span>
	<label>Email:</label>
	<span class="field"><input type="text" name="email" id="email" class="required" /></span>
</form>
<script>
	var opts  = {
		fname_lbl: 'First name',
		lname_lbl: 'Last name',
		email_lbl: 'Email',
		required_summary_txt: ' is a required field',
		required_inline_txt: 'this field is required',
		display_err_summary: 0,
		display_err_inline: 1,
		useCallbackOnSuccess:1,
		CallbackFunction: 'processValidatedForm'
	}
	$("#myForm").validate(opts);
	
	function processValidatedForm(){		
		alert("Form is valid");
	}
</script>


*/


jQuery.fn.validate = function(opts) {
	
	settings = jQuery.extend({}, opts );
	var tSummary = '';
	var isValid = true;
	
	
	$(this).submit(function() {
		 tSummary = '';
		 isValid = true;
		 // clear inline errors spans
		 $(".val_error").remove();
		  $(this).children()
  			.find(':input')
			.each(function(i){
				if($(this).hasClass("required")){
					val_required(this);
				}
			});
			// check is validation failed
			if(!isValid){
				// display summary if requested
				if(tSummary != '' && settings.display_err_summary){
					$("#val_summary").show();
					$("#val_summary").html("<ul>" + tSummary + "</ul>");
				}
			}else{
				if(settings.useCallbackOnSuccess){
					eval(settings.CallbackFunction+'();');
				}else{				
					return true;	
				}
			}
			
		return false;
	});
	
	function val_required(elem){
		$(elem).removeClass("val_error_input")
		if(elem.value == ""){
			isValid = false;
			var lbl =  eval('settings.' + elem.name + '_lbl');
			// display inline error is requested
			if(settings.display_err_inline){
				$(elem).after('<span class="val_error">' + settings.required_inline_txt  + '</span>');
			}
			tSummary += "<li>" + lbl + " " + settings.required_summary_txt  + "</li>";
			$(elem).addClass("val_error_input");
		}else{
			if($(elem).hasClass("isEmail")){
				if(!isEmail(elem.value)){
					isValid = false;
					$(elem).addClass("val_error_input");
					var lbl =  eval('settings.' + elem.name + '_lbl');
					tSummary += "<li>" + lbl + " " + settings.invalid_email_txt  + "</li>";
					// display inline error is requested
					if(settings.display_err_inline){
						$(elem).after('<span class="val_error">' + settings.invalid_email_txt  + '</span>');
					}
				}
			}	
		}
	}
	
	function isEmail(email){
		pattern = '/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/';
		if(email.search(/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/) != -1){
			return true;
		}else{
			return false;
		}
	}
};
