﻿(function($){$.fn.validationEngine=function(settings){if($.validationEngineLanguage){allRules=$.validationEngineLanguage.allRules}else{allRules={"required":{"regex":"none","alertText":"* Заполните поле","alertTextCheckboxMultiple":"* Please select an option","alertTextCheckboxe":"* This checkbox is required"},"region":{"regex":/^.{1,100}$/,"alertText":"* Заполните список"},"rubrics":{"regex":/^.{1,100}$/,"alertText":"* укажите хотя бы одну рубрику"},"postCode":{"regex":/^[0-9]{6,6}$/,"alertText":"* 6 цифр"},"opid":{"regex":/^([1-9]$)|(^[1-9][0-9]{1,20})$/,"alertText":"* введите корректный ID (целое число > 0)"},"length":{"regex":"none","alertText":"*От ","alertText2":" до ","alertText3":" символов"},"minCheckbox":{"regex":"none","alertText":"* Checks allowed Exceeded"},"sum":{"regex":/^([3-9][0-9][0-9]$)|(^[0-9]{4,100})$/,"alertText":"* мин. сумма: 300 руб."},"confirm":{"regex":"none","alertText":"* Поля не совпадают"},"telephone":{"regex":/^\+7[0-9\-\(\)\ ]+$/,"alertText":"* Invalid phone number"},"phone":{"regex":/^\+7\([0-9]{2,6}\)[0-9]{4,11}[а-яА-Я0-9\.]{0,9}$/i,"alertText":"* укажите телефон в формате +7(123)1234567)"},"password":{"regex":"/^.{6,12}$/i","alertText":"* от 6 до 12 символов"},"email":{"regex":/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/,"alertText":"* укажите email "},"email2":{"regex":"/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/","alertText":"* укажите email "},"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":"/m009/xml/checkLogin","params":"login","alertTextLoad":"* проверка login'a","alertText":"* такой login уже существует"},"ajaxName":{"file":"validateUser.php","alertText":"* This name is already taken","alertTextOk":"* This name is available","alertTextLoad":"* Loading, please wait"},"ajaxEmail":{"file":"/m009/xml/checkEmail","params":"email","alertText":"* такой email уже существует","alertTextLoad":"* проверка email'a"},"onlyLetter":{"regex":"/^[a-zA-Z\ \']+$/","alertText":"* Letters only"}}}settings=jQuery.extend({allrules:allRules,inlineValidation:true,ajaxSubmit:false,promptPosition:"topRight",success:false,failure:function(){}},settings);$.validationEngine.ajaxValidArray=new Array();$(this).unbind('validate').bind("validate",function(caller){$.validationEngine.onSubmitValid=false;$(this).data('valid',false);if($.validationEngine.submitValidation(this,settings)==false){if($('.formError',this).not('.greenPopup').not('.blackPopup').size()==0)$(this).data('valid',true);if($.validationEngine.submitForm(this,settings)==true){return false;}}else{settings.failure&&settings.failure();return false;}});$(this).find("[class^=validate]").bind("blur",function(caller){_inlinEvent(this)});function _inlinEvent(caller){$.validationEngine.onSubmitValid=false;$.validationEngine.loadValidation(caller,settings);};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(),success:function(data){if(data=="true"){$(caller).css("opacity",1);$(caller).animate({opacity:0,height:0},function(){$(caller).css("display","none");$(caller).before("<div class='ajaxSubmit'>"+$.validationEngine.settings.ajaxSubmitMessage+"</div>");$.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<errorNumber;index++){fieldId=data.jsonValidateReturn[index][0];promptError=data.jsonValidateReturn[index][1];type=data.jsonValidateReturn[index][2];$.validationEngine.buildPrompt(fieldId,promptError,type);}}}});return true;}if($.validationEngine.settings.success){$.validationEngine.settings.success&&$.validationEngine.settings.success();return true;}return false;},buildPrompt:function(caller,promptText,type,ajaxed){var divFormError=document.createElement('div');var formErrorContent=document.createElement('div');$(divFormError).addClass("formError");if(type=="pass"){$(divFormError).addClass("greenPopup")}if(type=="load"){$(divFormError).addClass("blackPopup")}if(ajaxed){$(divFormError).addClass("ajaxed")}$(divFormError).addClass($(caller).attr("id"));$(formErrorContent).addClass("formErrorContent");if($('.inner_container').size()!=0){$('.inner_container').append(divFormError);}else{$("body").append(divFormError);}$(divFormError).append(formErrorContent);if($.validationEngine.showTriangle!=false){var arrow=document.createElement('div');$(arrow).addClass("formErrorArrow");$(divFormError).append(arrow);if($.validationEngine.settings.promptPosition=="bottomLeft"||$.validationEngine.settings.promptPosition=="bottomRight"){$(arrow).addClass("formErrorArrowBottom");$(arrow).html('<div class="line1"><!-- --></div><div class="line2"><!-- --></div><div class="line3"><!-- --></div><div class="line4"><!-- --></div><div class="line5"><!-- --></div><div class="line6"><!-- --></div><div class="line7"><!-- --></div><div class="line8"><!-- --></div><div class="line9"><!-- --></div><div class="line10"><!-- --></div>');}if($.validationEngine.settings.promptPosition=="topLeft"||$.validationEngine.settings.promptPosition=="topRight"){$(divFormError).append(arrow);$(arrow).html('<div class="line10"><!-- --></div><div class="line9"><!-- --></div><div class="line8"><!-- --></div><div class="line7"><!-- --></div><div class="line6"><!-- --></div><div class="line5"><!-- --></div><div class="line4"><!-- --></div><div class="line3"><!-- --></div><div class="line2"><!-- --></div><div class="line1"><!-- --></div>');}}$(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){updateThisPrompt=$(caller).attr("id");updateThisPrompt="."+updateThisPrompt;(type=="pass")?$(updateThisPrompt).addClass("greenPopup"):$(updateThisPrompt).removeClass("greenPopup");(type=="load")?$(updateThisPrompt).addClass("blackPopup"):$(updateThisPrompt).removeClass("blackPopup");(ajaxed)?$(updateThisPrompt).addClass("ajaxed"):$(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}},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");ajaxValidate=false;var callerName=$(caller).attr("name");$.validationEngine.isError=false;$.validationEngine.showTriangle=true;callerType=$(caller).attr("type");for(i=0;i<rules.length;i++){switch(rules[i]){case "optional":if(!$(caller).val()){$.validationEngine.closePrompt(caller);return $.validationEngine.isError}break;case "required":_required(caller,rules);break;case "custom":_customRegex(caller,rules,i);break;case "ajax":_ajax(caller,rules,i);break;case "length":_length(caller,rules,i);break;case "minCheckbox":_minCheckbox(caller,rules,i);break;case "confirm":_confirm(caller,rules,i);break;default:;}}if($.validationEngine.isError==true){radioHackOpen();if($.validationEngine.isError==true){$.validationEngine.buildPrompt(caller,promptText,"error");}}else{radioHackClose();$.validationEngine.closePrompt(caller);}function radioHackOpen(){if($("input[name="+callerName+"]").size()>1&&callerType=="radio"){caller=$("input[name="+callerName+"]:first");$.validationEngine.showTriangle=false;var callerId="."+$(caller).attr("id");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");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+"<br />";}}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+"<br />";}else{promptText+=$.validationEngine.settings.allrules[rules[i]].alertTextCheckboxMultiple+"<br />";}}}if(callerType=="select-one"){callerName=$(caller).attr("id");if(!$("select[name="+callerName+"]").val()){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules[rules[i]].alertText+"<br />";}}if(callerType=="select-multiple"){callerName=$(caller).attr("id");if(!$("#"+callerName).val()){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules[rules[i]].alertText+"<br />";}}};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+"<br />";}};function _ajax(caller,rules,position){customAjaxRule=rules[position+1];postfile=$.validationEngine.settings.allrules[customAjaxRule].file;postparams=$.validationEngine.settings.allrules[customAjaxRule].params;fieldValue=$(caller).val();ajaxCaller=caller;fieldId=$(caller).attr("id");ajaxValidate=true;ajaxisError=$.validationEngine.isError;if(!ajaxisError){$.ajax({type:"POST",url:postfile,async:true,data:"email="+fieldValue+"&login="+fieldValue,beforeSend:function(){if($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad){if(!$("div."+fieldId)[0]){return $.validationEngine.buildPrompt(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");}else{$.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");}}},success:function(xml){code=$('code',xml).text();fieldId=ajaxCaller;ajaxErrorLength=$.validationEngine.ajaxValidArray.length;existInarray=false;if(code!=1){$.validationEngine.ajaxValid=false;promptText+=$.validationEngine.settings.allrules[customAjaxRule].alertText+"<br />";$.validationEngine.updatePromptText(caller,promptText,"",true);}else{$.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 _confirm(caller,rules,position){confirmField=rules[position+1];if($(caller).attr('value')!=$("#"+confirmField).attr('value')){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules["confirm"].alertText+"<br />";}};function _length(caller,rules,position){startLength=eval(rules[position+1]);endLength=eval(rules[position+2]);feildLength=$(caller).attr('value').length;if(feildLength<startLength||feildLength>endLength){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules["length"].alertText+startLength+$.validationEngine.settings.allrules["length"].alertText2+endLength+$.validationEngine.settings.allrules["length"].alertText3+"<br />"}};function _minCheckbox(caller,rules,position){nbCheck=eval(rules[position+1]);groupname=$(caller).attr("name");groupSize=$("input[name="+groupname+"]:checked").size();if(groupSize>nbCheck){$.validationEngine.isError=true;promptText+=$.validationEngine.settings.allrules["minCheckbox"].alertText+"<br />";}};return($.validationEngine.isError)?$.validationEngine.isError:false;},closePrompt:function(caller,outside){if(outside){$(caller).fadeTo("fast",0,function(){$(caller).remove();});return false;}if(!ajaxValidate){var closingPrompt=$(caller).attr("id");$("."+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]").not("[class*=ajax]").each(function(){callerId=$(this).attr("id");if(!$("."+callerId).hasClass("ajaxed")){var validationPass=$.validationEngine.loadValidation(this,settings);return(validationPass)?stopForm=true:"";}});ajaxErrorLength=$.validationEngine.ajaxValidArray.length;for(x=0;x<ajaxErrorLength;x++){if($.validationEngine.ajaxValidArray[x][1]==false){$.validationEngine.ajaxValid=false}}if(stopForm|| !$.validationEngine.ajaxValid){destination=$(".formError:not('.greenPopup'):first").offset().top;$("html:not(:animated),body:not(:animated)").animate({scrollTop:destination},1100);return true;}else{return false}}}})(jQuery);function hide_validation(){$.validationEngine.closePrompt(".formError",true)}
