PageSourceSearch

https://www.getahome.org/wp-content/themes/realestate-7/js/jquery.validationEngine.js?ver=1.0

js getahome.org collected 2026-10-02 06:14:44 UTC 20,673 bytes, 507 lines download raw bytes

1/**
2 * Form Validation
3 *
4 * @package WP Pro Real Estate 7
5 * @subpackage JavaScript
6 */
7 
8(function($) {
9	$.fn.validationEngine = function(settings) {
10
11	if($.validationEngineLanguage){				// IS THERE A LANGUAGE LOCALISATION ?
12		allRules = $.validationEngineLanguage.allRules
13	}else{
14		allRules = 	{"required":{    			// Add your regex rules here, you can take telephone as an example
15						"regex":"none",
16						"alertText":validationError.required,
17						"alertTextCheckboxMultiple":validationError.requiredCheckboxMulti,
18						"alertTextCheckboxe":validationError.requiredCheckbox},
19					"length":{
20						"regex":"none",
21						"alertText":"*Between ",
22						"alertText2":" and ",
23						"alertText3": " characters allowed"},
24					"minCheckbox":{
25						"regex":"none",
26						"alertText":"* Checks allowed Exceeded"},	
27					"confirm":{
28						"regex":"none",
29						"alertText":"* Your field is not matching"},		
30					"telephone":{
31						"regex":"/^[0-9\-\(\)\ ]+$/",
32						"alertText":validationError.invalidTelephone},	
33					"email":{
34						"regex":"/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\\.)+[a-zA-Z0-9]{2,4}$/",
35						"alertText":validationError.invalidEmail},	
36					"date":{
37                         "regex":"/^[0-9]{4}\-\[0-9]{1,2}\-\[0-9]{1,2}$/",
38                         "alertText":validationError.invalidDate},
39					"onlyNumber":{
40						"regex":"/^[0-9\ ]+$/",
41						"alertText":validationError.numbersOnly},	
42					"noSpecialCaracters":{
43						"regex":"/^[0-9a-zA-Z]+$/",
44						"alertText":validationError.noSpecialChar},	
45					"ajaxUser":{
46						"file":"validateUser.php",
47						"alertTextOk":"* This user is available",	
48						"alertTextLoad":"* Loading, please wait",
49						"alertText":"* This user is already taken"},	
50					"ajaxName":{
51						"file":"validateUser.php",
52						"alertText":"* This name is already taken",
53						"alertTextOk":"* This name is available",	
54						"alertTextLoad":"* Loading, please wait"},		
55					"onlyLetter":{
56						"regex":"/^[a-zA-Z\ \']+$/",
57						"alertText":validationError.letterOnly}
58					}	
59	}
60 	settings = jQuery.extend({
61		allrules:allRules,					
62		inlineValidation: true,	
63		ajaxSubmit: false,
64		promptPosition: "topRight",	// OPENNING BOX POSITION, IMPLEMENTED: topLeft, topRight, bottomLeft, centerRight, bottomRight
65		success : false,
66		failure : function() {}
67	}, settings);	
68	
69	
70 
71	$.validationEngine.ajaxValidArray = new Array()	// ARRAY FOR AJAX: VALIDATION MEMORY 
72
73	$(this).bind("submit", function(caller){   // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY
74		$.validationEngine.onSubmitValid = true;
75		
76		if($.validationEngine.submitValidation(this,settings) == false){
77			if($.validationEngine.submitForm(this,settings) == true) {return false;}
78		}else{
79			settings.failure && settings.failure(); 
80			return false;
81		}		
82	})
83	if(settings.inlineValidation == true){ 		// Validating Inline ?
84		
85		$(this).find("[class^=validate]").not("[type=checkbox]").bind("blur", function(caller){	_inlinEvent(this)   })
86		$(this).find("[class^=validate][type=checkbox]").bind("click", function(caller){		_inlinEvent(this)   })
87		
88			function _inlinEvent(caller){
89				if($.validationEngine.intercept == false || !$.validationEngine.intercept){		// STOP INLINE VALIDATION THIS TIME ONLY
90					$.validationEngine.onSubmitValid=false;
91					$.validationEngine.loadValidation(caller,settings); 
92				}else{
93					$.validationEngine.intercept = false;
94				}
95			}
96	}
97};	
98$.validationEngine = {
99	submitForm : function(caller){
100		if($.validationEngine.settings.ajaxSubmit){		
101			$.ajax({
102			   	type: "POST",
103			   	url: $.validationEngine.settings.ajaxSubmitFile,
104			   	async: true,
105			   	data: $(caller).serialize(),
106			   	success: function(data){
107			   		if(data == "true"){			// EVERYTING IS FINE, SHOW SUCCESS MESSAGE
108			   			$(caller).css("opacity",1)
109			   			$(caller).animate({opacity: 0, height: 0}, function(){
110			   				$(caller).css("display","none")
111			   				$(caller).before("<div class='ajaxSubmit'>"+$.validationEngine.settings.ajaxSubmitMessage+"</div>")
112			   				$.validationEngine.closePrompt(".formError",true) 	
113			   				$(".ajaxSubmit").slideDown("slow")
114			   				if ($.validationEngine.settings.success){	// AJAX SUCCESS, STOP THE LOCATION UPDATE
115								$.validationEngine.settings.success && $.validationEngine.settings.success(); 
116								return false;
117							}
118			   			})
119		   			}else{						// HOUSTON WE GOT A PROBLEM (SOMETING IS NOT VALIDATING)
120			   			data = eval( "("+data+")");	
121			   			errorNumber = data.jsonValidateReturn.length	
122			   			for(index=0; index<errorNumber; index++){	
123			   				fieldId = data.jsonValidateReturn[index][0];
124			   				promptError = data.jsonValidateReturn[index][1];
125			   				type = data.jsonValidateReturn[index][2];
126			   				$.validationEngine.buildPrompt(fieldId,promptError,type);
127		   				}
128	   				}
129   				}
130			})	
131			return true;
132		}
133		if ($.validationEngine.settings.success){	// AJAX SUCCESS, STOP THE LOCATION UPDATE
134			$.validationEngine.settings.success && $.validationEngine.settings.success(); 
135			return true;
136		}
137		return false;
138	},
139	buildPrompt : function(caller,promptText,type,ajaxed) {			// ERROR PROMPT CREATION AND DISPLAY WHEN AN ERROR OCCUR
140		var divFormError = document.createElement('div')
141		var formErrorContent = document.createElement('div')
142		
143		$(divFormError).addClass("formError")
144		
145		if(type == "pass"){ $(divFormError).addClass("greenPopup") }
146		if(type == "load"){ $(divFormError).addClass("blackPopup") }
147		if(ajaxed){ $(divFormError).addClass("ajaxed") }
148		
149		$(divFormError).addClass($(caller).attr("id"))
150		$(formErrorContent).addClass("formErrorContent")
151		
152		$("body").append(divFormError)
153		$(divFormError).append(formErrorContent)
154			
155		if($.validationEngine.showTriangle != false){		// NO TRIANGLE ON MAX CHECKBOX AND RADIO
156			var arrow = document.createElement('div')
157			$(arrow).addClass("formErrorArrow")
158			$(divFormError).append(arrow)
159			if($.validationEngine.settings.promptPosition == "bottomLeft" || $.validationEngine.settings.promptPosition == "bottomRight"){
160			$(arrow).addClass("formErrorArrowBottom")
161			$(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>');
162		}
163			if($.validationEngine.settings.promptPosition == "topLeft" || $.validationEngine.settings.promptPosition == "topRight"){
164				$(divFormError).append(arrow)
165				$(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>');
166			}
167		}
168		$(formErrorContent).html(promptText)
169	
170		callerTopPosition = $(caller).offset().top;
171		callerleftPosition = $(caller).offset().left;
172		callerWidth =  $(caller).width()
173		inputHeight = $(divFormError).height()
174	
175		/* POSITIONNING */
176		if($.validationEngine.settings.promptPosition == "topRight"){callerleftPosition +=  callerWidth -30; callerTopPosition += -inputHeight -10; }
177		if($.validationEngine.settings.promptPosition == "topLeft"){ callerTopPosition += -inputHeight -10; }
178		
179		if($.validationEngine.settings.promptPosition == "centerRight"){ callerleftPosition +=  callerWidth +13; }
180		
181		if($.validationEngine.settings.promptPosition == "bottomLeft"){
182			callerHeight =  $(caller).height();
183			callerleftPosition = callerleftPosition;
184			callerTopPosition = callerTopPosition + callerHeight + 15;
185		}
186		if($.validationEngine.settings.promptPosition == "bottomRight"){
187			callerHeight =  $(caller).height();
188			callerleftPosition +=  callerWidth -30;
189			callerTopPosition +=  callerHeight + 15;
190		}
191		$(divFormError).css({
192			top:callerTopPosition,
193			left:callerleftPosition,
194			opacity:0
195		})
196		return $(divFormError).animate({"opacity":0.87},function(){return true;});	
197	},
198	updatePromptText : function(caller,promptText,type,ajaxed) {	// UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED
199		updateThisPrompt =  $(caller).attr("id");
200		updateThisPrompt = "."+updateThisPrompt;
201		
202		(type == "pass") ? $(updateThisPrompt).addClass("greenPopup") : $(updateThisPrompt).removeClass("greenPopup");
203		(type == "load") ? $(updateThisPrompt).addClass("blackPopup") : $(updateThisPrompt).removeClass("blackPopup");
204		(ajaxed) ? $(updateThisPrompt).addClass("ajaxed") : $(updateThisPrompt).removeClass("ajaxed");
205	
206		$(updateThisPrompt).find(".formErrorContent").html(promptText)
207		callerTopPosition  = $(caller).offset().top;
208		inputHeight = $(updateThisPrompt).height()
209		
210		if($.validationEngine.settings.promptPosition == "bottomLeft" || $.validationEngine.settings.promptPosition == "bottomRight"){
211			callerHeight =  $(caller).height()
212			callerTopPosition =  callerTopPosition + callerHeight + 15
213		}
214		if($.validationEngine.settings.promptPosition == "centerRight"){  callerleftPosition +=  callerWidth +13;}
215		if($.validationEngine.settings.promptPosition == "topLeft" || $.validationEngine.settings.promptPosition == "topRight"){
216			callerTopPosition = callerTopPosition  -inputHeight -10
217		}
218		$(updateThisPrompt).animate({
219			top:callerTopPosition
220		});
221	},
222	loadValidation : function(caller,settings) {		// GET VALIDATIONS TO BE EXECUTED
223		$.validationEngine.settings = settings
224		rulesParsing = $(caller).attr('class');
225		rulesRegExp = /\[(.*)\]/;
226		getRules = rulesRegExp.exec(rulesParsing);
227		str = getRules[1]
228		pattern = /\W+/;
229		result= str.split(pattern);	
230	
231		var validateCalll = $.validationEngine.validateCall(caller,result)
232		return validateCalll
233	},
234	validateCall : function(caller,rules) {	// EXECUTE VALIDATION REQUIRED BY THE USER FOR THIS FIELD
235		var promptText =""	
236		var prompt = $(caller).attr("id");
237		var caller = caller;
238		ajaxValidate = false
239		var callerName = $(caller).attr("name");
240		$.validationEngine.isError = false;
241		$.validationEngine.showTriangle = true
242		callerType = $(caller).attr("type");
243		
244		for (i=0; i<rules.length;i++){
245			switch (rules[i]){
246			case "optional": 
247				if(!$(caller).val()){
248					$.validationEngine.closePrompt(caller)
249					return $.validationEngine.isError
250				}
251			break;
252			case "required": 
253				_required(caller,rules);
254			break;
255			case "custom": 
256				 _customRegex(caller,rules,i);
257			break;
258			case "ajax": 
259				if(!$.validationEngine.onSubmitValid){
260					_ajax(caller,rules,i);	
261				}
262			break;
263			case "length": 
264				 _length(caller,rules,i);
265			break;
266			case "minCheckbox": 
267				 _minCheckbox(caller,rules,i);
268			break;
269			case "confirm": 
270				 _confirm(caller,rules,i);
271			break;
272			default :;
273			};
274		};
275		if ($.validationEngine.isError == true){
276			
277			radioHackOpen();
278			if ($.validationEngine.isError == true){ // show only one
279				($("div."+prompt).size() ==0) ? $.validationEngine.buildPrompt(caller,promptText,"error")	: $.validationEngine.updatePromptText(caller,promptText);
280			}
281		}else{
282			radioHackClose();
283			$.validationEngine.closePrompt(caller);
284		}		
285		/* UNFORTUNATE RADIO AND CHECKBOX GROUP HACKS */
286		/* As my validation is looping input with id's we need a hack for my validation to understand to group these inputs */
287		function radioHackOpen(){
288			if($("input[name="+callerName+"]").size()> 1 && callerType == "radio") {		// Hack for radio group button, the validation go the first radio
289				caller = $("input[name="+callerName+"]:first");
290				$.validationEngine.showTriangle = false;
291				var callerId ="."+ $(caller).attr("id");
292				if($(callerId).size()==0){ $.validationEngine.isError = true; }else{ $.validationEngine.isError = false;}
293			}
294			if($("input[name="+callerName+"]").size()> 1 && callerType == "checkbox") {		// Hack for checkbox group button, the validation go the first radio
295				caller = $("input[name="+callerName+"]:first");
296				$.validationEngine.showTriangle = false;
297				var callerId ="div."+ $(caller).attr("id");
298				if($(callerId).size()==0){ $.validationEngine.isError = true; }else{ $.validationEngine.isError = false;}
299			}
300		}
301		function radioHackClose(){
302			if($("input[name="+callerName+"]").size()> 1 && callerType == "radio") {		// Hack for radio group button, the validation go the first radio
303				caller = $("input[name="+callerName+"]:first");
304			}
305			if($("input[name="+callerName+"]").size()> 1 && callerType == "checkbox") {		// Hack for checkbox group button, the validation go the first radio
306				caller = $("input[name="+callerName+"]:first");
307			}
308		}
309		/* VALIDATION FUNCTIONS */
310		function _required(caller,rules){   // VALIDATE BLANK FIELD
311			callerType = $(caller).attr("type");
312			if (callerType == "text" || callerType == "password" || callerType == "textarea"){
313								
314				if(!$(caller).val()){
315					$.validationEngine.isError = true;
316					promptText += $.validationEngine.settings.allrules[rules[i]].alertText+"<br />";
317				}	
318			}	
319			if (callerType == "radio" || callerType == "checkbox" ){
320				callerName = $(caller).attr("name");
321		
322				if($("input[name="+callerName+"]:checked").size() == 0) {
323					$.validationEngine.isError = true;
324					if($("input[name="+callerName+"]").size() ==1) {
325						promptText += $.validationEngine.settings.allrules[rules[i]].alertTextCheckboxe+"<br />"; 
326					}else{
327						 promptText += $.validationEngine.settings.allrules[rules[i]].alertTextCheckboxMultiple+"<br />";
328					}	
329				}
330			}	
331			if (callerType == "select-one") { // added by [email protected] for select boxes, Thank you
332					callerName = $(caller).attr("id");
333				
334				if(!$("select[name="+callerName+"]").val()) {
335					$.validationEngine.isError = true;
336					promptText += $.validationEngine.settings.allrules[rules[i]].alertText+"<br />";
337				}
338			}
339			if (callerType == "select-multiple") { // added by [email protected] for select boxes, Thank y
339ou
340					callerName = $(caller).attr("id");
341				
342				if(!$("#"+callerName).val()) {
343					$.validationEngine.isError = true;
344					promptText += $.validationEngine.settings.allrules[rules[i]].alertText+"<br />";
345				}
346			}
347		}
348		function _customRegex(caller,rules,position){		 // VALIDATE REGEX RULES
349			customRule = rules[position+1];
350			pattern = eval($.validationEngine.settings.allrules[customRule].regex);
351			
352			if(!pattern.test($(caller).attr('value'))){
353				$.validationEngine.isError = true;
354				promptText += $.validationEngine.settings.allrules[customRule].alertText+"<br />";
355			}
356		}
357		function _ajax(caller,rules,position){				 // VALIDATE AJAX RULES
358			
359			customAjaxRule = rules[position+1];
360			postfile = $.validationEngine.settings.allrules[customAjaxRule].file;
361			fieldValue = $(caller).val();
362			ajaxCaller = caller;
363			fieldId = $(caller).attr("id");
364			ajaxValidate = true;
365			ajaxisError = $.validationEngine.isError;
366			
367			/* AJAX VALIDATION HAS ITS OWN UPDATE AND BUILD UNLIKE OTHER RULES */	
368			if(!ajaxisError){
369				$.ajax({
370				   	type: "POST",
371				   	url: postfile,
372				   	async: true,
373				   	data: "validateValue="+fieldValue+"&validateId="+fieldId+"&validateError="+customAjaxRule,
374				   	beforeSend: function(){		// BUILD A LOADING PROMPT IF LOAD TEXT EXIST		   			
375				   		if($.validationEngine.settings.allrules[customAjaxRule].alertTextLoad){
376				   		
377				   			if(!$("div."+fieldId)[0]){				   				
378	 			 				return $.validationEngine.buildPrompt(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");
379	 			 			}else{
380	 			 				$.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextLoad,"load");
381	 			 			}
382			   			}
383			  	 	},
384					success: function(data){					// GET SUCCESS DATA RETURN JSON
385						data = eval( "("+data+")");				// GET JSON DATA FROM PHP AND PARSE IT
386						ajaxisError = data.jsonValidateReturn[2];
387						customAjaxRule = data.jsonValidateReturn[1];
388						ajaxCaller = $("#"+data.jsonValidateReturn[0])[0];
389						fieldId = ajaxCaller;
390						ajaxErrorLength = $.validationEngine.ajaxValidArray.length
391						existInarray = false;
392						
393			 			 if(ajaxisError == "false"){			// DATA FALSE UPDATE PROMPT WITH ERROR;
394			 			 	
395			 			 	_checkInArray(false)				// Check if ajax validation alreay used on this field
396			 			 	
397			 			 	if(!existInarray){		 			// Add ajax error to stop submit		 		
398				 			 	$.validationEngine.ajaxValidArray[ajaxErrorLength] =  new Array(2)
399				 			 	$.validationEngine.ajaxValidArray[ajaxErrorLength][0] = fieldId
400				 			 	$.validationEngine.ajaxValidArray[ajaxErrorLength][1] = false
401				 			 	existInarray = false;
402			 			 	}
403				
404			 			 	$.validationEngine.ajaxValid = false;
405							promptText += $.validationEngine.settings.allrules[customAjaxRule].alertText+"<br />";
406							$.validationEngine.updatePromptText(ajaxCaller,promptText,"",true);				
407						 }else{	 
408						 	_checkInArray(true)
409					
410						 	$.validationEngine.ajaxValid = true; 						   
411	 			 			if($.validationEngine.settings.allrules[customAjaxRule].alertTextOk){	// NO OK TEXT MEAN CLOSE PROMPT	 			
412	 			 				 				$.validationEngine.updatePromptText(ajaxCaller,$.validationEngine.settings.allrules[customAjaxRule].alertTextOk,"pass",true);
413 			 				}else{
414				 			 	ajaxValidate = false;		 	
415				 			 	$.validationEngine.closePrompt(ajaxCaller);
416 			 				}		
417			 			 }
418				 			function  _checkInArray(validate){
419				 				for(x=0;x<ajaxErrorLength;x++){
420				 			 		if($.validationEngine.ajaxValidArray[x][0] == fieldId){
421				 			 			$.validationEngine.ajaxValidArray[x][1] = validate
422				 			 			existInarray = true;
423				 			 		
424				 			 		}
425				 			 	}
426				 			}
427			 		}				
428				});
429			}
430		}
431		function _confirm(caller,rules,position){		 // VALIDATE FIELD MATCH
432			confirmField = rules[position+1];
433			
434			if($(caller).attr('value') != $("#"+confirmField).attr('value')){
435				$.validationEngine.isError = true;
436				promptText += $.validationEngine.settings.allrules["confirm"].alertText+"<br />";
437			}
438		}
439		function _length(caller,rules,position){    	  // VALIDATE LENGTH
440		
441			startLength = eval(rules[position+1]);
442			endLength = eval(rules[position+2]);
443			feildLength = $(caller).attr('value').length;
444
445			if(feildLength<startLength || feildLength>endLength){
446				$.validationEngine.isError = true;
447				promptText += $.validationEngine.settings.allrules["length"].alertText+startLength+$.validationEngine.settings.allrules["length"].alertText2+endLength+$.validationEngine.settings.allrules["length"].alertText3+"<br />"
448			}
449		}
450		function _minCheckbox(caller,rules,position){  	  // VALIDATE CHECKBOX NUMBER
451		
452			nbCheck = eval(rules[position+1]);
453			groupname = $(caller).attr("name");
454			groupSize = $("input[name="+groupname+"]:checked").size();
455			
456			if(groupSize > nbCheck){	
457				$.validationEngine.isError = true;
458				promptText += $.validationEngine.settings.allrules["minCheckbox"].alertText+"<br />";
459			}
460		}
461		return($.validationEngine.isError) ? $.validationEngine.isError : false;
462	},
463	closePrompt : function(caller,outside) {						// CLOSE PROMPT WHEN ERROR CORRECTED
464		if(outside){
465			$(caller).fadeTo("fast",0,function(){
466				$(caller).remove();
467			});
468			return false;
469		}
470		if(!ajaxValidate){
471			closingPrompt = $(caller).attr("id");
472	
473			$("."+closingPrompt).fadeTo("fast",0,function(){
474				$("."+closingPrompt).remove();
475			});
476		}
477	},
478	submitValidation : function(caller,settings) {					// FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION
479		var stopForm = false;
480		$.validationEngine.settings = settings
481		$.validationEngine.ajaxValid = true
482		$(caller).find(".formError").remove();
483		var toValidateSize = $(caller).find("[class^=validate]").size();
484		
485		$(caller).find("[class^=validate]").each(function(){
486			callerId = $(this).attr("id")
487			if(!$("."+callerId).hasClass("ajaxed")){	// DO NOT UPDATE ALREADY AJAXED FIELDS (only happen is no normal errors, don't worry)
488				var validationPass = $.validationEngine.loadValidation(this,settings);
489				return(validationPass) ? stopForm = true : "";					
490			}
491		});
492		ajaxErrorLength = $.validationEngine.ajaxValidArray.length		// LOOK IF SOME AJAX IS NOT VALIDATE
493		for(x=0;x<ajaxErrorLength;x++){
494	 		if($.validationEngine.ajaxValidArray[x][1] == false){
495	 			$.validationEngine.ajaxValid = false
496	 		}
497	 	}
498		if(stopForm || !$.validationEngine.ajaxValid){		// GET IF THERE IS AN ERROR OR NOT FROM THIS VALIDATION FUNCTIONS
499			destination = $(".formError:not('.greenPopup'):first").offset().top;
500			$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 1100);
501			return true;
502		}else{
503			return false
504		}
505	}
506}	
507})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.