/**
 * 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>,
 *                            alertText:<AT>, 
 *                            wrongEMailAdressAlert:'<WM>'
 *                             });
 *     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
 *       <AT> is a string wich will be alerted if error occurs because empty required fields
 *       <WM> is a string wich will be alerted if email has wrong format (without @ or .)
 *        
 *      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:'*',
                alertText:'',
                wrongEMailAdressAlert:''
                },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; 
                  params.alertText = params.alertText+'\n\n'+params.wrongEMailAdressAlert; 
                  $('#'+id+', label[for="'+id+'"]').addClass(params.errorClass);
              }else{
                $('#'+id+', label[for="'+id+'"]').removeClass(params.errorClass);
                params.alertText = params.alertText.replace('\n\n'+params.wrongEMailAdressAlert, '');  
              }
          }
          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){
                if(params.alertText != ''){
                  alert(params.alertText);
                  }
                return false;         
              }else{
                return true;
              }
          }
          ;return this;


};
})      
(jQuery);

    
    
