/* * Inline Form Validation Engine 1.4, jQuery plugin * * Copyright(c) 2009, Cedric Dugas * http://www.position-relative.net * * Form validation engine which allow custom regex rules to be added. * Licenced under the MIT Licence */ (function($){$.fn.validationEngine=function(settings){if($.validationEngineLanguage){allRules=$.validationEngineLanguage.allRules}else{allRules={"required":{"regex":"none","alertText":"* This field is required","alertTextCheckboxMultiple":"* Please select an option","alertTextCheckboxe":"* This checkbox is required"},"length":{"regex":"none","alertText":"*Between ","alertText2":" and ","alertText3":" characters allowed"},"maxCheckbox":{"regex":"none","alertText":"* Checks allowed Exceeded"},"minCheckbox":{"regex":"none","alertText":"* Please select ","alertText2":" options"},"confirm":{"regex":"none","alertText":"* Your field is not matching"},"telephone":{"regex":"/^[0-9\-\(\)\ ]+$/","alertText":"* Invalid phone number"},"email":{"regex":"/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/","alertText":"* Invalid email address"},"date":{"regex":"/^[0-9]{4}\-\[0-9]{1,2}\-\[0-9]{1,2}$/","alertText":"* Invalid date, must be in YYYY-MM-DD format"},"onlyNumber":{"regex":"/^[0-9\ ]+$/","alertText":"* Numbers only"},"noSpecialCaracters":{"regex":"/^[0-9a-zA-Z]+$/","alertText":"* No special caracters allowed"},"ajaxUser":{"file":"validateUser.php","alertTextOk":"* This user is available","alertTextLoad":"* Loading, please wait","alertText":"* This user is already taken"},"ajaxName":{"file":"validateUser.php","alertText":"* This name is already taken","alertTextOk":"* This name is available","alertTextLoad":"* Loading, please wait"},"onlyLetter":{"regex":"/^[a-zA-Z\ \']+$/","alertText":"* Letters only"}}} settings=jQuery.extend({allrules:allRules,inlineValidation:true,ajaxSubmit:false,promptPosition:"topLeft",success:false,failure:function(){}},settings);$.validationEngine.ajaxValidArray=new Array() $(this).bind("submit",function(caller){$.validationEngine.onSubmitValid=true;if($.validationEngine.submitValidation(this,settings)==false){if($.validationEngine.submitForm(this,settings)==true){return false;}}else{settings.failure&&settings.failure();return false;}}) if(settings.inlineValidation==true){$(this).find("[class^=validate]").not("[type=checkbox]").bind("blur",function(caller){_inlinEvent(this)}) $(this).find("[class^=validate][type=checkbox]").bind("click",function(caller){_inlinEvent(this)}) function _inlinEvent(caller){if($.validationEngine.intercept==false||!$.validationEngine.intercept){$.validationEngine.onSubmitValid=false;$.validationEngine.loadValidation(caller,settings);}else{$.validationEngine.intercept=false;}}}};$.validationEngine={submitForm:function(caller){if($.validationEngine.settings.ajaxSubmit){$.ajax({type:"POST",url:$.validationEngine.settings.ajaxSubmitFile,async:true,data:$(caller).serialize(),beforeSend:function(){},success:function(data){if(data=="true"){$(caller).css("opacity",1) $(caller).animate({opacity:0,height:0},function(){$(caller).css("display","none") $(caller).before("
"+$.validationEngine.settings.ajaxSubmitMessage+"
") $.validationEngine.closePrompt(".formError",true) $(".ajaxSubmit").show("slow") if($.validationEngine.settings.success){$.validationEngine.settings.success&&$.validationEngine.settings.success();return false;}})}else{data=eval("("+data+")");errorNumber=data.jsonValidateReturn.length for(index=0;index
');} if($.validationEngine.settings.promptPosition=="topLeft"||$.validationEngine.settings.promptPosition=="topRight"){$(divFormError).append(arrow) $(arrow).html('
');}} $(formErrorContent).html(promptText) callerTopPosition=$(caller).offset().top;callerleftPosition=$(caller).offset().left;callerWidth=$(caller).width() inputHeight=$(divFormError).height() if($.validationEngine.settings.promptPosition=="topRight"){callerleftPosition+=callerWidth-30;callerTopPosition+=-inputHeight-10;} if($.validationEngine.settings.promptPosition=="topLeft"){callerTopPosition+=-inputHeight-10;} if($.validationEngine.settings.promptPosition=="centerRight"){callerleftPosition+=callerWidth+13;} if($.validationEngine.settings.promptPosition=="bottomLeft"){callerHeight=$(caller).height();callerleftPosition=callerleftPosition;callerTopPosition=callerTopPosition+callerHeight+15;} if($.validationEngine.settings.promptPosition=="bottomRight"){callerHeight=$(caller).height();callerleftPosition+=callerWidth-30;callerTopPosition+=callerHeight+15;} $(divFormError).css({top:callerTopPosition,left:callerleftPosition,opacity:0}) return $(divFormError).animate({"opacity":0.87},function(){return true;});},updatePromptText:function(caller,promptText,type,ajaxed){linkTofield=$(caller).attr("id")+"formError";linkTofield=linkTofield.replace("[","");linkTofield=linkTofield.replace("]","");var updateThisPrompt="."+linkTofield;if(type=="pass"){$(updateThisPrompt).addClass("greenPopup")}else{$(updateThisPrompt).removeClass("greenPopup")};if(type=="load"){$(updateThisPrompt).addClass("blackPopup")}else{$(updateThisPrompt).removeClass("blackPopup")};if(ajaxed){$(updateThisPrompt).addClass("ajaxed")}else{$(updateThisPrompt).removeClass("ajaxed")};$(updateThisPrompt).find(".formErrorContent").html(promptText) callerTopPosition=$(caller).offset().top;inputHeight=$(updateThisPrompt).height() if($.validationEngine.settings.promptPosition=="bottomLeft"||$.validationEngine.settings.promptPosition=="bottomRight"){callerHeight=$(caller).height() callerTopPosition=callerTopPosition+callerHeight+15} if($.validationEngine.settings.promptPosition=="centerRight"){callerleftPosition+=callerWidth+13;} if($.validationEngine.settings.promptPosition=="topLeft"||$.validationEngine.settings.promptPosition=="topRight"){callerTopPosition=callerTopPosition-inputHeight-10} $(updateThisPrompt).animate({top:callerTopPosition});},loadValidation:function(caller,settings){$.validationEngine.settings=settings rulesParsing=$(caller).attr('class');rulesRegExp=/\[(.*)\]/;getRules=rulesRegExp.exec(rulesParsing);str=getRules[1] pattern=/\W+/;result=str.split(pattern);var validateCalll=$.validationEngine.validateCall(caller,result) return validateCalll},validateCall:function(caller,rules){var promptText="" var prompt=$(caller).attr("id");var caller=caller;ajaxValidate=false var callerName=$(caller).attr("name") $.validationEngine.isError=false;$.validationEngine.showTriangle=true callerType=$(caller).attr("type");for(i=0;i1&&callerType=="radio"){caller=$("input[name="+callerName+"]:first");$.validationEngine.showTriangle=false;var callerId="."+$(caller).attr("id")+"formError";if($(callerId).size()==0){$.validationEngine.isError=true;}else{$.validationEngine.isError=false;}} if($("input[name="+callerName+"]").size()>1&&callerType=="checkbox"){caller=$("input[name="+callerName+"]:first");$.validationEngine.showTriangle=false;var callerId="div."+$(caller).attr("id")+"formError";if($(callerId).size()==0){$.validationEngine.isError=true;}else{$.validationEngine.isError=false;}}} function radioHackClose(){if($("input[name="+callerName+"]").size()>1&&callerType=="radio"){caller=$("input[name="+callerName+"]:first");} if($("input[name="+callerName+"]").size()>1&&callerType=="checkbox"){caller=$("input[name="+callerName+"]:first");}} function _required(caller,rules){callerType=$(caller).attr("type");if(callerType=="text"||callerType=="password"||callerType=="textarea"){if(!$(caller).val()){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules[rules[i]].alertText+"
";}} if(callerType=="radio"||callerType=="checkbox"){callerName=$(caller).attr("name");if($("input[name="+callerName+"]:checked").size()==0){$.validationEngine.isError=true;if($("input[name="+callerName+"]").size()==1){promptText+=$.validationEngine.settings.allrules[rules[i]].alertTextCheckboxe+"
";}else{promptText+=$.validationEngine.settings.allrules[rules[i]].alertTextCheckboxMultiple+"
";}}} if(callerType=="select-one"){callerName=$(caller).attr("id");if(!$("select[name="+callerName+"]").val()){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules[rules[i]].alertText+"
";}} if(callerType=="select-multiple"){callerName=$(caller).attr("id");if(!$("#"+callerName).val()){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules[rules[i]].alertText+"
";}}} function _customRegex(caller,rules,position){customRule=rules[position+1];pattern=eval($.validationEngine.settings.allrules[customRule].regex);if(!pattern.test($(caller).attr('value'))){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules[customRule].alertText+"
";}} function _ajax(caller,rules,position){customAjaxRule=rules[position+1];postfile=$.validationEngine.settings.allrules[customAjaxRule].file;fieldValue=$(caller).val();ajaxCaller=caller;fieldId=$(caller).attr("id");ajaxValidate=true;ajaxisError=$.validationEngine.isError;if(!ajaxisError){$.ajax({type:"POST",url:postfile,async:true,data:"validateValue="+fieldValue+"&validateId="+fieldId+"&validateError="+customAjaxRule,beforeSend:function(){if($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad){if(!$("div."+fieldId+"formError")[0]){return $.validationEngine.buildPrompt(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");}else{$.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");}}},success:function(data){data=eval("("+data+")");ajaxisError=data.jsonValidateReturn[2];customAjaxRule=data.jsonValidateReturn[1];ajaxCaller=$("#"+data.jsonValidateReturn[0])[0];fieldId=ajaxCaller;ajaxErrorLength=$.validationEngine.ajaxValidArray.length existInarray=false;if(ajaxisError=="false"){_checkInArray(false) if(!existInarray){$.validationEngine.ajaxValidArray[ajaxErrorLength]=new Array(2) $.validationEngine.ajaxValidArray[ajaxErrorLength][0]=fieldId $.validationEngine.ajaxValidArray[ajaxErrorLength][1]=false existInarray=false;} $.validationEngine.ajaxValid=false;promptText+=$.validationEngine.settings.allrules[customAjaxRule].alertText+"
";$.validationEngine.updatePromptText(ajaxCaller,promptText,"",true);}else{_checkInArray(true) $.validationEngine.ajaxValid=true;if($.validationEngine.settings.allrules[customAjaxRule].alertTextOk){$.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextOk,"pass",true);}else{ajaxValidate=false;$.validationEngine.closePrompt(ajaxCaller);}} function _checkInArray(validate){for(x=0;x";}} function _length(caller,rules,position){startLength=eval(rules[position+1]);endLength=eval(rules[position+2]);feildLength=$(caller).attr('value').length;if(feildLengthendLength){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules["length"].alertText+startLength+$.validationEngine.settings.allrules["length"].alertText2+endLength+$.validationEngine.settings.allrules["length"].alertText3+"
"}} function _maxCheckbox(caller,rules,position){nbCheck=eval(rules[position+1]);groupname=$(caller).attr("name");groupSize=$("input[name='"+groupname+"']:checked").size();if(groupSize>nbCheck){$.validationEngine.showTriangle=false $.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules["maxCheckbox"].alertText+"
";}} function _minCheckbox(caller,rules,position){nbCheck=eval(rules[position+1]);groupname=$(caller).attr("name");groupSize=$("input[name='"+groupname+"']:checked").size();if(groupSize";}} return($.validationEngine.isError)?$.validationEngine.isError:false;},closePrompt:function(caller,outside){if(outside){$(caller).fadeTo("fast",0,function(){$(caller).remove();});return false;} if(!ajaxValidate){linkTofield=$(caller).attr("id")+"formError";linkTofield=linkTofield.replace("[","");linkTofield=linkTofield.replace("]","");closingPrompt="."+linkTofield;$(closingPrompt).fadeTo("fast",0,function(){$(closingPrompt).remove();});}},submitValidation:function(caller,settings){var stopForm=false;$.validationEngine.settings=settings $.validationEngine.ajaxValid=true $(caller).find(".formError").remove();var toValidateSize=$(caller).find("[class^=validate]").size();$(caller).find("[class^=validate]").each(function(){callerId=$(this).attr("id") if(!$("."+callerId+"formError").hasClass("ajaxed")){var validationPass=$.validationEngine.loadValidation(this,settings);return(validationPass)?stopForm=true:"";}});ajaxErrorLength=$.validationEngine.ajaxValidArray.length for(x=0;x