/**
 * Form Check Fields plugin for jQuery
 * v 1.0
 * Check inputs form fields 
 *
 * By Michael Caillet, http://mi-ca.ch
 * project 	:	<null>
 * author	:	michael caillet http://mi-ca.ch
 * date		:	2010 03 30
 *
 * feedback and bug report are welcome
 */

/**
 * Usage:
 *
 * From JavaScript, use:
 *     $(<select>).checkForm({requireClass: <M>, errorClass: <N>, requireMark:<O>});
 *     where:
 *       <select> is the DOM form node selector, e.g. "form" or "#MyWonderfulForm"
 *       <M> is the css class which specifies that the fields must be checked (optional default:require)
 *       <N> is the css class which be added in case of error (optional default:error)
 *       <O> is a string or boolean to specify the requiered marker added after label text
 *       
 *      This plugin can check if an email is correctly formatted and if a field value is numeric.
 *      Simply add email or numeric in the id string :
 *      e.g 
 *          id="userEmail", id="email" 
 *          or 
 *          id="NPA_numeric" or id="numeric"
 */

(function($){$.fn.checkForm=function(params){params=$.extend({requireClass:'require',errorClass:'error',requireMark:'*'},params);this.each(function(){if($(this).is('form')){$(this).submit(checkRequieredFields);}else{if($(this).find('form').index()>-1){$(this).find('form').submit(checkRequieredFields);}else{alert("\n\nERROR plugin checkForm :\n\n$('->select<-').checkForm()\n\n ->select<- must be a <form> tag or contain at least one form!");}}});if(params.requireMark!=false){addRequireMark();}
function addRequireMark(){if(typeof(params.requireMark)==='string'){$('form').find('.'+params.requireClass).each(function(){var id=$(this).attr('id');$('label[for="'+id+'"]').append(' <span class="requireMarker">'+params.requireMark+'</span>');});}}
function checkRequieredFields(){var error=false;$(this).find('.'+params.requireClass).each(function(){var id=$(this).attr('id');var emailInID=new RegExp("(email)",'gi');var numericInID=new RegExp("(numeric)",'gi');if(id.match(emailInID)){var filter=/^[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*@[a-z0-9]+([_|\.|-]{1}[a-z0-9]+)*[\.]{1}[a-z]{2,6}$/;if(!filter.test($('#'+id).val())){error=true;$('#'+id+', label[for="'+id+'"]').addClass(params.errorClass);}else{$('#'+id+', label[for="'+id+'"]').removeClass(params.errorClass);}}
else if($(this).attr('type').toLowerCase()==="checkbox"){var name=$(this).attr('name');var checkBoxError=true;$('input[name="'+name+'"]').each(function(){if($(this).attr('checked')===true){checkBoxError=false;}});if(checkBoxError){$('input[name="'+name+'"]').each(function(){var id=$(this).attr('id');$('#'+id+', label[for="'+id+'"]').addClass(params.errorClass);error=true;});}else{$('input[name="'+name+'"]').each(function(){var id=$(this).attr('id');$('#'+id+', label[for="'+id+'"]').removeClass(params.errorClass);});}}
else if($(this).attr('type').toLowerCase()==="radio"){var name=$(this).attr('name');var radioError=true;$('input[name="'+name+'"]').each(function(){if($(this).attr('checked')===true){radioError=false;}});if(radioError){$('input[name="'+name+'"]').each(function(){var id=$(this).attr('id');$('#'+id+', label[for="'+id+'"]').addClass(params.errorClass);error=true;});}else{$('input[name="'+name+'"]').each(function(){var id=$(this).attr('id');$('#'+id+', label[for="'+id+'"]').removeClass(params.errorClass);});}}
else if($(this).is('select')){var id=$(this).attr('id');if($(this).find("option:first").attr('selected')){$('#'+id+', label[for="'+id+'"],#'+id+' option:first').addClass(params.errorClass);error=true;}else{$('#'+id+', label[for="'+id+'"],#'+id+' option:first').removeClass(params.errorClass);}}
else if(id.match(numericInID)){if(isNaN($('#'+id).val())||$.trim($('#'+id).val())===''){error=true;$('#'+id+', label[for="'+id+'"]').addClass(params.errorClass);}else{$('#'+id+', label[for="'+id+'"]').removeClass(params.errorClass);}}
else if($.trim($('#'+id).val())===''){error=true;$('#'+id+', label[for="'+id+'"]').addClass(params.errorClass);}else{$('#'+id+', label[for="'+id+'"]').removeClass(params.errorClass);}
$('input#'+id+',textarea#'+id).val($.trim($('#'+id).val()));});if(error){return false;}else{return true;}};return this;};})(jQuery);
