/*
 * jQuery FormValidator v0.2.2
 *
 * Copyright 2010, Ivengi Benelux Bv. (Daan Sieben)
 *
 * Date: Mon Jun 16 2011
 * var defaults = {
    debug:              false,                      // debug true
    allowSubmitEvery:    0,                         // only allow a submit every (in ms) 
    error:  {
      bPerformCheck:            true,                               // perform form check (disable for debugging)
      callbackSubmitSuccess:    null,                               // callback submit (form) function only when form success (before ajax post)
      callbackSubmitFirstError: null,                               // callback submit (errorstr, errorfield, errortype, form) function only for first error
      callbackSubmitEachError:  null,                               // callback submit (errorstr, errorfield, errortype, form) function triggered for each error
      callbackSubmitAllError:   null,                               // callback submit (aError, form) function called with array of errors: {Message, Obj, ErrorType}
      bCheckOnBlur:             true,                               // check field on blur
      callbackBlurSuccess:      null,                               // callback on blur success: (field, form)
      callbackBlurError:        null                                // callback on blur error: (errorstr, errorfield, errortype, form)
    },
    errorMsg: {
      defaultError:             "Er is een foute waarde ingevuld",  // default error thrown when no error is found within messagecontainer
      messsageContainer:        ".form_messages",                   // div containing form errors <div class="form_messages" style="display:none"><span title="FIELD_NAME">ERROR_MSG</span></div>
      messsageElement:          "span",                             // html element containing form errors <div class="form_messages" style="display:none"><span title="FIELD_NAME">ERROR_MSG</span></div>
      messsageElementAttribute: "title"                             // html element attribute to match name <div class="form_messages" style="display:none"><span title="FIELD_NAME">ERROR_MSG</span></div>
    },
    ajax: {
      bAjaxPost:          false,                    // post form with ajax
      onPostSuccess:      null,                     // callback post succes  (content, form)
      onPostFailure:      null,                     // callback post failure (form, XMLHttpRequest, textStatus, errorThrown)
      PostTarget:         null                      // post target, if defined, ajax will be posted to given url
    }
  }; 
   
classes:
  js-checkoptional  : If field is empty, validation is not triggered
  js-checkemail : Validate email address
  js-checklength : Validate field length
    js-checklength-min-3 : field length at least 3 characters
    js-checklength-max-6 : field length at most 6 characters    
  js-checknumeric
    js-checknumeric-min-3 : field value at least 3
    js-checknumeric-max-6 : field value at most 6   
    js-checknumeric-decimals-2 : field value gets truncated to 2 decimals  
  js-checkselect
    js-checkselect-caseinsensitive-1 : validate case insensitive
    js-checkselect-not-white : option value cannot be white, multiple parameters allowed
  js-checkidentical
    js-checkidentical-caseinsensitive-1 : validate case insensitive
    js-checkidentical-to-field2 : compare to input field with name field2
    js-checkidentical-blurfield-1 : tigger blur (validation) on other field
    js-checkidentical-skiperror-1 : skip error on current field (in combination with blurfield-1 only shows error on other field)
  js-checkchoices
    js-checkchoices-min-3 : At least 3 fields has to be checked
    js-checkchoices-max-6 : At most 6 fields can be checked  
*/
(function(a){a.fn.FormValidator=function(e){var h={debug:false,allowSubmitEvery:0,error:{bPerformCheck:true,callbackSubmitSuccess:null,callbackSubmitFirstError:null,callbackSubmitEachError:null,callbackSubmitAllError:null,bCheckOnBlur:true,callbackBlurSuccess:null,callbackBlurError:null},errorMsg:{defaultError:"Er is een foute waarde ingevuld",messsageContainer:".form_messages",messsageElement:"span",messsageElementAttribute:"title"},ajax:{bAjaxPost:false,onPostSuccess:null,onPostFailure:null,PostTarget:null}};var g=a.extend(true,{},h,e);var b=new Array();var f=true;return this.each(function(){var j=a(this);b.push(j);if(g.error.bCheckOnBlur){a("input,textarea,select",j).blur(function(){d("FORM/Blur: init check",j,a(this));var k=c(j);if(!k.DoFieldCheck(a(this))){d("FORM/Blur: Error in field",j,a(this));if(g.error.callbackBlurError!=null){var l=a(this).attr("name");if(typeof(l)!="undefined"&&l){k.ErrorObjName=l}g.error.callbackBlurError(k.GetErrorMessage(a(this)),a(this),k.ErrorType,j)}}else{d("FORM/Blur: Success on field",j,a(this));if(g.error.callbackBlurSuccess!=null){g.error.callbackBlurSuccess(a(this),j)}}})}if(g.ajax.bAjaxPost){j.submit(function(){if(g.allowSubmitEvery>0){if(!f){d("FORM/Submit: blocked submit",j,a(this));return false}else{f=false;d("FORM/Submit: allowed submit, not within interval",j,a(this));setTimeout(function(){f=true},g.allowSubmitEvery)}}if(!i(a(this))){return false}if(g.ajax.PostTarget!=null){PostTarget=g.ajax.PostTarget}else{PostTarget=a(this).attr("action")}if(typeof(PostTarget)=="undefined"||!PostTarget){return false}var k=a(this).serialize();a.ajax({url:PostTarget,type:"POST",data:k,dataType:"html",success:function(l){d("AJAX/PostSuccess: ",l);if(g.ajax.onPostSuccess!=null){g.ajax.onPostSuccess(l,a(this))}},error:function(l,n,m){d("AJAX/PostFailure: ",l,n,m);if(g.ajax.onPostFailure!=null){g.ajax.onPostFailure(a(this),l,n,m)}}});return false})}else{j.submit(function(){if(g.allowSubmitEvery>0){if(!f){d("FORM/Submit: blocked submit",j,a(this));return false}else{f=false;d("FORM/Submit: allowed submit, not within interval",j,a(this));setTimeout(function(){f=true},g.allowSubmitEvery)}}return i(a(this))})}});function i(l){d("FORM/Submit: Initializing form check",l);if(!g.error.bPerformCheck){d("FORM/Submit: Skipped form check",l);return true}var j=c(l);if(!j.Check()){d("FORM/Submit: Found errors in form",l,j.aErrorObjs);if(g.error.callbackSubmitFirstError!=null){g.error.callbackSubmitFirstError(j.Error,j.ErrorObj,j.ErrorType,l)}if(g.error.callbackSubmitEachError!=null){for(var k=0;k<j.aErrorObjs.length;k++){g.error.callbackSubmitEachError(j.aErrorObjs[k].Message,j.aErrorObjs[k].Obj,j.aErrorObjs[k].ErrorType,l)}}if(g.error.callbackSubmitAllError!=null){g.error.callbackSubmitAllError(j.aErrorObjs,l)}return false}if(g.error.callbackSubmitSuccess!=null){g.error.callbackSubmitSuccess(l)}d("FORM/Submit: No errors in form found",l);return true}function c(k){var j=new FormCheck(k);j.MessageContainer=g.errorMsg.messsageContainer;j.DefaultError=g.errorMsg.defaultError;j.MesssageElement=g.errorMsg.messsageElement;j.MesssageElementAttribute=g.errorMsg.messsageElementAttribute;return j}function d(){if(g.debug){if(typeof(console)!="undefined"&&console){if(typeof(console.debug)!="undefined"&&console.debug){console.debug(arguments);return}if(typeof(console.log)!="undefined"&&console.log){console.log(arguments);return}}}}}})(jQuery);function FormCheck(a){this.Form=a;this.ErrorObjName=null;this.ErrorObj=null;this.ErrorType=null;this.bSingleFieldCheck=true;this.aErrorObjs=new Array();this.MessageContainer=".form_messages";this.MesssageElement="span";this.MesssageElementAttribute="title";this.Error="";this.DefaultError="Er is een foute waarde ingevuld";this.bValid=true}FormCheck.prototype.DoFieldCheck=function(a){var c=$(a);var b=true;var d="";if(c.hasClass("js-checkemail")){if(!this.CheckEmail(c)){d="js-checkemail";b=false}}if(c.hasClass("js-checklength")){if(!this.CheckLength(c)){d="js-checklength";b=false}}if(c.hasClass("js-checknumeric")){if(!this.CheckNumeric(c)){d="js-checknumeric";b=false}}if(c.hasClass("js-checkselect")){if(!this.CheckSelect(c)){d="js-checkselect";b=false}}if(c.hasClass("js-checkidentical")){if(!this.CheckIdentical(c)){d="js-checkidentical";b=false}}if(c.hasClass("js-checkchoices")){if(!this.CheckChoices(c)){d="js-checkchoices";b=false}}if(c.hasClass("js-checkradio")){if(!this.CheckChoices(c)){d="js-checkradio";b=false}}if(this.bValid&&!b){this.ErrorObj=c;this.ErrorType=d;this.bValid=false}if(!b){this.aErrorObjs.push({Obj:c,ErrorType:d,Message:""})}return b};FormCheck.prototype.Check=function(){var c=this;this.bValid=true;this.bSingleFieldCheck=false;$("input,textarea,select",$(this.Form)).each(function(d,e){c.DoFieldCheck(e)});if(!this.bValid){var b=$(this.ErrorObj).attr("name");if(typeof(b)!="undefined"&&b){this.ErrorObjName=b}this.Error=this.GetErrorMessage(this.ErrorObj);for(var a=0;a<this.aErrorObjs.length;a++){this.aErrorObjs[a].Message=this.GetErrorMessage(this.aErrorObjs[a].Obj)}}return this.bValid};FormCheck.prototype.GetErrorMessage=function(c){var a=c.attr("name");if(typeof(a)=="undefined"||!a){return this.DefaultError}var b=$(this.MessageContainer+" "+this.MesssageElement+"["+this.MesssageElementAttribute+"='"+a+"']",$(this.Form));if(b.length<1){return this.DefaultError}return $(b[0]).text()};FormCheck.prototype.CheckEmail=function(a){var c=$(a).val();if(c.length<1){if($(a).hasClass("js-checkoptional")){return true}else{return false}}var b=/^([\w\-\+]+(?:\.[\w\-\+]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;if(b.test(c)){return true}else{return false}};FormCheck.prototype.CheckChoices=function(e){var f=$(e).attr("name");var c=$("*[name="+f+"]:checked").length;var a=1;var d=this.GetClassParameter(e,"js-checkchoices","min");if(d!=null){a=parseFloat(d)}if(c<a){return false}var b=this.GetClassParameter(e,"js-checkchoices","max");if(b!=null){b=parseInt(b);if(c>b){return false}}return true};FormCheck.prototype.CheckSelect=function(d){var g=$(d).attr("name");var e=$("*[name="+g+"]").val();var c=this.GetClassBoolParameter(d,"js-checkselect","caseinsensitive");var f=this.GetClassParameterList(d,"js-checkselect","not");if(f!=null){for(var b=0;b<f.length;b++){if(c){if(e.toLowerCase()==f[b].toLowerCase()){return false}}else{if(e==f[b]){return false}}}}return true};FormCheck.prototype.CheckIdentical=function(f){var c=$(f).attr("name");var d=$("*[name="+c+"]").val();if(d.length<1){if($(f).hasClass("js-checkoptional")){return true}}var i=false;var a=this.GetClassParameter(f,"js-checkidentical","caseinsensitive");if(a!=null){if(a=="1"){i=true}}var k=this.GetClassBoolParameter(f,"js-checkidentical","skiperror");var h=this.GetClassBoolParameter(f,"js-checkidentical","blurfield");var b=this.GetClassBoolParameter(f,"js-checkidentical","triggeredblur");if(b){h=false}var l=this.GetClassParameter(f,"js-checkidentical","to");if(l!=null){var e=l;var j=$("*[name="+e+"]");var g=j.val();if(typeof(g)!="undefined"&&g!=null){if(i){if(g.toLowerCase()!=d.toLowerCase()){if(h&&this.bSingleFieldCheck){j.addClass("js-checkidentical-triggeredblur-1");j.trigger("blur");j.removeClass("js-checkidentical-triggeredblur-1")}if(!k){return false}else{return true}}}else{if(g!=d){if(h&&this.bSingleFieldCheck){j.addClass("js-checkidentical-triggeredblur-1");j.trigger("blur");j.removeClass("js-checkidentical-triggeredblur-1")}if(!k){return false}else{return true}}}}if(h&&this.bSingleFieldCheck){j.addClass("js-checkidentical-triggeredblur-1");j.trigger("blur");j.removeClass("js-checkidentical-triggeredblur-1")}}return true};FormCheck.prototype.CheckNumeric=function(e){if($(e).val().indexOf(",")>0){$(e).val($(e).val().replace(",","."))}var g=$(e).val();if(g.length<1){if($(e).hasClass("js-checkoptional")){return true}else{return false}}var a=this.GetClassParameter(e,"js-checknumeric","decimals");if(a==null){var d=/(^-?\d\d*$)/;if(!d.test(g)){return false}}else{a=parseInt(a);var d=/(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;if(!d.test(g)){return false}var f=g.split(".");if(f.length>2){return false}if(f.length==2){g=(f[0]+"."+f[1].substr(0,a));$(e).val(g)}}g=parseFloat(g);var b=this.GetClassParameter(e,"js-checknumeric","min");if(b!=null){b=parseFloat(b);if(g<b){return false}}var c=this.GetClassParameter(e,"js-checknumeric","max");if(c!=null){c=parseFloat(c);if(g>c){return false}}return true};FormCheck.prototype.CheckLength=function(b){var d=$(b).val();if(d.length<1){if($(b).hasClass("js-checkoptional")){return true}}var c=this.GetClassParameter(b,"js-checklength","min");if(c==null){c=1}c=parseInt(c);if(d.length<c){return false}var a=this.GetClassParameter(b,"js-checklength","max");if(a!=null){a=parseInt(a);if(d.length>a){return false}}return true};FormCheck.prototype.GetClassBoolParameter=function(b,e,d){var c=false;var a=this.GetClassParameter(b,e,d);if(a!=null){if(a=="1"){c=true}}return c};FormCheck.prototype.GetClassParameter=function(g,h,k){var d=$(g).attr("class");var f=d.split(" ");for(var e=0;e<f.length;e++){if(f[e].substr(0,h.length).toUpperCase()==h.toUpperCase()){if(f[e].toUpperCase()!=h.toUpperCase()){var b=f[e].substr(h.length+1);var j=b.split("-");if(j.length>=2){if(j[0].toUpperCase()==k.toUpperCase()){var c=j[1];for(var a=2;a<j.length;a++){c+="-"+j[a]}return c}}}}}return null};FormCheck.prototype.GetClassParameterList=function(g,k,l){var d=$(g).attr("class");var f=d.split(" ");var h=new Array();for(var e=0;e<f.length;e++){if(f[e].substr(0,k.length).toUpperCase()==k.toUpperCase()){if(f[e].toUpperCase()!=k.toUpperCase()){var b=f[e].substr(k.length+1);var j=b.split("-");if(j.length>=2){if(j[0].toUpperCase()==l.toUpperCase()){var c=j[1];for(var a=2;a<j.length;a++){c+="-"+j[a]}h.push(c)}}}}}return h};
