PageSourceSearch

https://clients.europeid.com/cart/fileroot/js/common/jquery/plugins/validator/jquery.validationEngine.js

js europeid.com collected 2026-10-02 10:33:16 UTC 34,879 bytes, 648 lines download raw bytes

1/*
2* Inline Form Validation Engine 1.7.3, jQuery plugin
3* 
4* Copyright(c) 2010, Cedric Dugas
5* http://www.position-absolute.com
6*	
7* Form validation engine allowing custom regex rules to be added.
8* Thanks to Francois Duquette and Teddy Limousin 
9* and everyone helping me find bugs on the forum
10* Licenced under the MIT Licence
11*/
12(function ($j) {
13
14    $j.fn.validationEngine = function (settings) {
15
16        if ($j.validationEngineLanguage) {				// IS THERE A LANGUAGE LOCALISATION ?
17            allRules = $j.validationEngineLanguage.allRules;
18        } else {
19            $j.validationEngine.debug("Validation engine rules are not loaded check your external file");
20        }
21        settings = jQuery.extend({
22            allrules: allRules,
23            validationEventTriggers: "focusout",
24            inlineValidation: true,
25            returnIsValid: false,
26            liveEvent: false,
27            openDebug: true,
28            unbindEngine: true,
29            containerOverflow: false,
30            containerOverflowDOM: "",
31            ajaxSubmit: false,
32            scroll: true,
33            promptPosition: "topLeft", // OPENNING BOX POSITION, IMPLEMENTED: topLeft, topRight, bottomLeft, centerRight, bottomRight
34            success: false,
35            beforeSuccess: function () { },
36            failure: function () { }
37        }, settings);
38        $j.validationEngine.settings = settings;
39        $j.validationEngine.ajaxValidArray = []; // ARRAY FOR AJAX: VALIDATION MEMORY 
40
41        if (settings.inlineValidation === true) { 		// Validating Inline ?
42            if (!settings.returnIsValid) {					// NEEDED FOR THE SETTING returnIsValid
43                // what the hell! orefalo
44                //allowReturnIsvalid = false;
45                if (settings.liveEvent) {						// LIVE event, vast performance improvement over BIND
46                    $j(this).find("[class*=validate]").live(settings.validationEventTriggers,
47					function (caller) {
48					    if ($j(caller).attr("type") != "checkbox")
49					        _inlinEvent(this);
50					});
51                    $j(this).find("[class*=validate][type=checkbox]").live("click", function (caller) { _inlinEvent(this); });
52                } else {
53                    $j(this).find("[class*=validate]").not("[type=checkbox]").bind(settings.validationEventTriggers, function (caller) { _inlinEvent(this); });
54                    $j(this).find("[class*=validate][type=checkbox]").bind("click", function (caller) { _inlinEvent(this); });
55                }
56
57                // what the hell orefalo
58                //firstvalid = false;
59            }
60
61            function _inlinEvent(caller) {
62                $j.validationEngine.settings = settings;
63                if ($j.validationEngine.intercept === false || !$j.validationEngine.intercept) {		// STOP INLINE VALIDATION THIS TIME ONLY
64                    $j.validationEngine.onSubmitValid = false;
65                    $j.validationEngine.loadValidation(caller);
66                } else {
67                    $j.validationEngine.intercept = false;
68                }
69            }
70        }
71        if (settings.returnIsValid) {		// Do validation and return true or false, it bypass everything;
72            if ($j.validationEngine.submitValidation(this, settings)) {
73                return false;
74            } else {
75                return true;
76            }
77        }
78        $j(this).bind("submit", function (caller) {   // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY
79            $j.validationEngine.onSubmitValid = true;
80            $j.validationEngine.settings = settings;
81            if ($j.validationEngine.submitValidation(this, settings) === false) {
82                if ($j.validationEngine.submitForm(this, settings) === true)
83                    return false;
84            } else {
85                // orefalo: what the hell is that ?
86                settings.failure && settings.failure();
87                return false;
88            }
89        });
90        $j(".formError").live("click", function () {	 // REMOVE BOX ON CLICK
91            $j(this).fadeOut(150, function () { $j(this).remove(); });
92        });
93    };
94    $j.validationEngine = {
95        defaultSetting: function (caller) {		// NOT GENERALLY USED, NEEDED FOR THE API, DO NOT TOUCH
96            if ($j.validationEngineLanguage) {
97                allRules = $j.validationEngineLanguage.allRules;
98            } else {
99                $j.validationEngine.debug("Validation engine rules are not loaded check your external file");
100            }
101            settings = {
102                allrules: allRules,
103                validationEventTriggers: "blur",
104                inlineValidation: true,
105                containerOverflow: false,
106                containerOverflowDOM: "",
107                returnIsValid: false,
108                scroll: true,
109                unbindEngine: true,
110                ajaxSubmit: false,
111                promptPosition: "topRight", // OPENNING BOX POSITION, IMPLEMENT
111ED: topLeft, topRight, bottomLeft, centerRight, bottomRight
112                success: false,
113                failure: function () { }
114            };
115            $j.validationEngine.settings = settings;
116        },
117        loadValidation: function (caller) {		// GET VALIDATIONS TO BE EXECUTED
118            if (!$j.validationEngine.settings)
119                $j.validationEngine.defaultSetting();
120            var rulesParsing = $j(caller).attr('class');
121            var rulesRegExp = /\[(.*)\]/;
122            var getRules = rulesRegExp.exec(rulesParsing);
123            if (getRules === null)
124                return false;
125            var str = getRules[1];
126            var pattern = /\[|,|\]/;
127            var result = str.split(pattern);
128            var validateCalll = $j.validationEngine.validateCall(caller, result);
129            return validateCalll;
130        },
131        validateCall: function (caller, rules) {	// EXECUTE VALIDATION REQUIRED BY THE USER FOR THIS FIELD
132            var promptText = "";
133
134            if (!$j(caller).attr("id"))
135                $j.validationEngine.debug("This field have no ID attribut( name & class displayed): " + $j(caller).attr("name") + " " + $j(caller).attr("class"));
136
137            // what the hell!
138            //caller = caller;
139            ajaxValidate = false;
140            var callerName = $j(caller).attr("name");
141            $j.validationEngine.isError = false;
142            $j.validationEngine.showTriangle = true;
143            var callerType = $j(caller).attr("type");
144
145            for (var i = 0; i < rules.length; i++) {
146                if (!$j(caller).attr('disabled')) {
147                    switch (rules[i]) {
148                        case "optional":
149                            if (!$j(caller).val()) {
150                                $j.validationEngine.closePrompt(caller);
151                                return $j.validationEngine.isError;
152                            }
153                            break;
154                        case "required":
155                            _required(caller, rules);
156                            break;
157                        case "custom":
158                            _customRegex(caller, rules, i);
159                            break;
160                        case "exemptString":
161                            _exemptString(caller, rules, i);
162                            break;
163                        case "ajax":
164                            if (!$j.validationEngine.onSubmitValid)
165                                _ajax(caller, rules, i);
166                            break;
167                        case "length":
168                            _length(caller, rules, i);
169                            break;
170                        case "maxCheckbox":
171                            _maxCheckbox(caller, rules, i);
172                            groupname = $j(caller).attr("name");
173                            caller = $j("input[name='" + groupname + "']");
174                            break;
175                        case "minCheckbox":
176                            _minCheckbox(caller, rules, i);
177                            groupname = $j(caller).attr("name");
178                            caller = $j("input[name='" + groupname + "']");
179                            break;
180                        case "equals":
181                            _equals(caller, rules, i);
182                            break;
183                        case "funcCall":
184                            _funcCall(caller, rules, i);
185                            break;
186                        case "text_order":
187                            _text_order(caller);
188                            break;
189                        default:
190                    }
191                }
192            }
193            radioHack();
194            if ($j.validationEngine.isError === true) {
195                var linkTofieldText = "." + $j.validationEngine.linkTofield(caller);
196                if (linkTofieldText != ".") {
197                    if (!$j(linkTofieldText)[0]) {
198                        $j.validationEngine.buildPrompt(caller, promptText, "error");
199                    } else {
200                        $j.validationEngine.updatePromptText(caller, promptText);
201                    }
202                } else {
203                    $j.validationEngine.updatePromptText(caller, promptText);
204                }
205            } else {
206                $j.validationEngine.closePrompt(caller);
207            }
208            /* UNFORTUNATE RADIO AND CHECKBOX GROUP HACKS */
209            /* As my validation is looping input with id's we need a hack for my validation to understand to group these inputs */
210            function radioHack() {
211                if ($j("input[name='" + callerName + "']").size() > 1 && (callerType == "radio" || callerType == "checkbox")) {        // Hack for radio/checkbox group button, the validation go the first radio/checkbox of the group
212                    caller = $j("input[name='" + callerName + "'][type!=hidden]:first");
213                    $j.validationEngine.showTriangle = false;
214                }
215            }
216            /* VALIDATION FUNCTIONS */
217            function _required(caller, rules) {   // VALIDATE BLANK FIELD
218                var callerType = $j(caller).attr("type");
219                if (callerType == "text" || callerType == "password" || callerType == "textarea") {
220
221                    if (!$j(caller).val()) {
222                        $j.validationEngine.isError = true;
223                        promptText += $j.validationEngine.settings.allrules[rules[i]].alertText + "<br />";
224                    }
225                }
226                if (callerType == "radio" || callerType == "checkbox") {
227                    callerName = $j(caller).attr("name");
228
229                    if ($j("input[name='" + callerName + "']:checked").size() === 0) {
230                        $j.validationEngine.isError = true;
231                        if ($j("input[name='" + callerName + "']").size() == 1) {
232                            promptText += $j.validationEngine.settings.allrules[rules[i]].alertTextCheckboxe + "<br />";
233                        } else {
234                            promptText += $j.validationEngine.settings.allrules[rules[i]].alertTextCheckboxMultiple + "<br />";
235                        }
236                    }
237                }
238                if (callerType == "select-one") { // added by [email protected] for select boxes, Thank you		
239                    if (!$j(caller).val()) {
240                        $j.validationEngine.isError = true;
241                        promptText += $j.validationEngine.settings.allrules[rules[i]].alertText + "<br />";
242                    }
243                }
244                if (callerType == "select-multiple") { // added by [email protected] for select boxes, Thank you	
245                    if (!$j(caller).find("option:selected").val()) {
246                        $j.validationEngine.isError = true;
247                        promptText += $j.validationEngine.settings.allrules[rules[i]].alertText + "<br />";
248                    }
249                }
250            }
251            function _customRegex(caller, rules, position) {		 // VALIDATE REGEX RULES
252                var customRule = rules[position + 1];
253                var pattern = eval($j.validationEngine.settings.allrules[customRule].regex);
254
255                if (!pattern.test($j(caller).attr('value'))) {
256                    $j.validationEngine.isError = true;
257                    promptText += $j.validationEngine.settings.allrules[customRule].alertText + "<br />";
258                }
259            }
260            function _exemptString(caller, rules, position) {		 // VALIDATE REGEX RULES
261                var customString = rules[position + 1];
262                if (customString == $j(caller).attr('value')) {
263                    $j.validationEngine.isError = true;
264                    promptText += $j.validationEngine.settings.allrules['required'].alertText + "<br />";
265                }
266            }
267
268            function _funcCall(caller, rules, position) {  		// VALIDATE CUSTOM FUNCTIONS OUTSIDE OF THE ENGINE SCOPE
269                var customRule = rules[position + 1];
270                var funce = $j.validationEngine.settings.allrules[customRule].nname;
271
272                var fn = window[funce];
273                if (typeof (fn) === 'function') {
274                    var fn_result = fn();
275                    if (!fn_result) {
276                        $j.validationEngine.isError = true;
277                    }
278
279                    promptText += $j.validationEngine.settings.allrules[customRule].alertText + "<br />";
280                }
281            }
282            function _ajax(caller, rules, position) {				 // VALIDATE AJAX RULES
283
284                customAjaxRule = rules[position + 1];
285                postfile = $j.validationEngine.settings.allrules[customAjaxRule].file;
286                fieldValue = $j(caller).val();
287                ajaxCaller = caller;
288                fieldId = $j(caller).attr("id");
289                ajaxValidate = true;
290                ajaxisError = $j.validationEngine.isError;
291
292                if ($j.validationEngine.settings.allrules[customAjaxRule].extraData) {
293                    extraData = $j.validationEngine.settings.allrules[customAjaxRule].extraData;
294                } else {
295                    extraData = "";
296                }
297                /* AJAX VALIDATION HAS ITS OWN UPDATE AND BUILD UNLIKE OTHER RULES */
298                if (!ajaxisError) {
299                    $j.ajax({
300                        type: "POST",
301                        url: postfile,
302                        async: true,
303                        data: "validateValue=" + fieldValue + "&validateId=" + fieldId + "&validateError=" + customAjaxRule + "&extraData=" + extraData,
304                        beforeSend: function () {		// BUILD A LOADING PROMPT IF LOAD TEXT EXIST		   			
305                            if ($j.validationEngine.settings.allrules[customAjaxRule].alertTextLoad) {
306
307                                if (!$j("div." + fieldId + "formError")[0]) {
308                                    return $j.validationEngine.buildPrompt(ajaxCaller, $j.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load");
309                                } else {
310                                    $j.validationEngine.updatePromptText(ajaxCaller, $j.validationEngine.settings.allrules[customAjaxRule].alertTextLoad, "load");
311                                }
312                            }
313                        },
314                        error: function (data, transport) { $j.validationEngine.debug("error in the aja
314x: " + data.status + " " + transport); },
315                        success: function (data) {					// GET SUCCESS DATA RETURN JSON
316                            data = eval("(" + data + ")"); 			// GET JSON DATA FROM PHP AND PARSE IT
317                            ajaxisError = data.jsonValidateReturn[2];
318                            customAjaxRule = data.jsonValidateReturn[1];
319                            ajaxCaller = $j("#" + data.jsonValidateReturn[0])[0];
320                            fieldId = ajaxCaller;
321                            ajaxErrorLength = $j.validationEngine.ajaxValidArray.length;
322                            existInarray = false;
323
324                            if (ajaxisError == "false") {			// DATA FALSE UPDATE PROMPT WITH ERROR;
325
326                                _checkInArray(false); 			// Check if ajax validation alreay used on this field
327
328                                if (!existInarray) {		 			// Add ajax error to stop submit		 		
329                                    $j.validationEngine.ajaxValidArray[ajaxErrorLength] = new Array(2);
330                                    $j.validationEngine.ajaxValidArray[ajaxErrorLength][0] = fieldId;
331                                    $j.validationEngine.ajaxValidArray[ajaxErrorLength][1] = false;
332                                    existInarray = false;
333                                }
334
335                                $j.validationEngine.ajaxValid = false;
336                                promptText += $j.validationEngine.settings.allrules[customAjaxRule].alertText + "<br />";
337                                $j.validationEngine.updatePromptText(ajaxCaller, promptText, "", true);
338                            } else {
339                                _checkInArray(true);
340                                $j.validationEngine.ajaxValid = true;
341                                if (!customAjaxRule) {
342                                    $j.validationEngine.debug("wrong ajax response, are you on a server or in xampp? if not delete de ajax[ajaxUser] validating rule from your form ");
343                                }
344                                if ($j.validationEngine.settings.allrules[customAjaxRule].alertTextOk) {	// NO OK TEXT MEAN CLOSE PROMPT	 			
345                                    $j.validationEngine.updatePromptText(ajaxCaller, $j.validationEngine.settings.allrules[customAjaxRule].alertTextOk, "pass", true);
346                                } else {
347                                    ajaxValidate = false;
348                                    $j.validationEngine.closePrompt(ajaxCaller);
349                                }
350                            }
351                            function _checkInArray(validate) {
352                                for (var x = 0; x < ajaxErrorLength; x++) {
353                                    if ($j.validationEngine.ajaxValidArray[x][0] == fieldId) {
354                                        $j.validationEngine.ajaxValidArray[x][1] = validate;
355                                        existInarray = true;
356                                    }
357                                }
358                            }
359                        }
360                    });
361                }
362            }
363            function _equals(caller, rules, position) {		 // VALIDATE FIELD MATCH
364                var equalsField = rules[position + 1];
365
366                if ($j(caller).attr('value') != $j("#" + equalsField).attr('value')) {
367                    $j.validationEngine.isError = true;
368                    promptText += $j.validationEngine.settings.allrules["equals"].alertText + "<br />";
369                }
370            }
371            function _length(caller, rules, position) {    	  // VALIDATE LENGTH
372                var startLength = eval(rules[position + 1]);
373                var endLength = eval(rules[position + 2]);
374                var feildLength = $j(caller).attr('value').length;
375
376                if (feildLength < startLength || feildLength > endLength) {
377                    $j.validationEngine.isError = true;
378                    promptText += $j.validationEngine.settings.allrules["length"].alertText + startLength + $j.validationEngine.settings.allrules["length"].alertText2 + endLength + $j.validationEngine.settings.allrules["length"].alertText3 + "<br />";
379                }
380            }
381            function _text_order(caller) {
382                var words = $j(caller).val().split(" ");
383                for (i = 0; i < words.length; i++) {
384                    var words2 = words[i].split("\n"); j = 0;
385                    for (j = 0; j < words2.length; j++) {
386                        var words3 = words2[j].split("\t"); k = 0;
387                        for (k = 0; k < words3.length; k++) {
388                            if (words3[k].length > 45) {
389                                $j.validationEngine.isError = true;
390                            }
391                        }
392                    }
393                }
394                if ($j.validationEngine.isError == true) {
395                    promptText += $j.validationEngine.settings.allrules["text_order"].alertText + "<br />";
396                }
397            }
398            function _maxCheckbox(caller, rules, position) {  	  // VALIDATE CHECKBOX NUMBER
399
400                var nbCheck = eval(rules[position + 1]);
401                var groupname = $j(caller).attr("name");
402                var groupSize = $j("input[name='" + groupname + "']:checked").size();
403                if (groupSize > nbCheck) {
404                    $j.validationEngine.showTriangle = false;
405                    $j.validationEngine.isError = true;
406                    promptText += $j.validationEngine.settings.allrules["maxCheckbox"].alertText + "<br />";
407                }
408            }
409            function _minCheckbox(caller, rules, position) {  	  // VALIDATE CHECKBOX NUMBER
410
411                var nbCheck = eval(rules[position + 1]);
412                var groupname = $j(caller).attr("name");
413                var groupSize = $j("input[name='" + groupname + "']:checked").size();
414                if (groupSize < nbCheck) {
415
416                    $j.validationEngine.isError = true;
417                    $j.validationEngine.showTriangle = false;
418                    promptText += $j.validationEngine.settings.allrules["minCheckbox"].alertText + " " + nbCheck + " " + $j.validationEngine.settings.allrules["minCheckbox"].alertText2 + "<br />";
419                }
420            }
421            return ($j.validationEngine.isError) ? $j.validationEngine.isError : false;
422        },
423        submitForm: function (caller) {
424
425            if ($j.validationEngine.settings.success) {	// AJAX SUCCESS, STOP THE LOCATION UPDATE
426                if ($j.validationEngine.settings.unbindEngine) $j(caller).unbind("submit");
427                var serializedForm = $j(caller).serialize();
428                $j.validationEngine.settings.success && $j.validationEngine.settings.success(serializedForm);
429                return true;
430            }
431            return false;
432        },
433        buildPrompt: function (caller, promptText, type, ajaxed) {			// ERROR PROMPT CREATION AND DISPLAY WHEN AN ERROR OCCUR
434            if ($j('.formError').length < 1) {
435                if (!$j.validationEngine.settings) {
436                    $j.validationEngine.defaultSetting();
437                }
438                var deleteItself = "." + $j(caller).attr("id") + "formError";
439
440                if ($j(deleteItself)[0]) {
441                    $j(deleteItself).stop();
442                    $j(deleteItself).remove();
443                }
444                var divFormError = document.createElement('div');
445                var formErrorContent = document.createElement('div');
446                var linkTofield = $j.validationEngine.linkTofield(caller);
447                $j(divFormError).addClass("formError");
448
449                if (type == "pass")
450                    $j(divFormError).addClass("greenPopup");
451                if (type == "load")
452                    $j(divFormError).addClass("blackPopup");
453                if (ajaxed)
454                    $j(divFormError).addClass("ajaxed");
455
456                $j(divFormError).addClass(linkTofield);
457                $j(formErrorContent).addClass("formErrorContent");
458
459                if ($j.validationEngine.settings.containerOverflow)		// Is the form contained in an overflown container?
460                    $j(caller).before(divFormError);
461                else
462                    $j("body").append(divFormError);
463
464                $j(divFormError).append(formErrorContent);
465
466                if ($j.validationEngine.showTriangle != false) {		// NO TRIANGLE ON MAX CHECKBOX AND RADIO
467                    var arrow = document.createElement('div');
468                    $j(arrow).addClass("formErrorArrow");
469                    $j(divFormError).append(arrow);
470                    if ($j.validationEngine.settings.promptPosition == "bottomLeft" || $j.validationEngine.settings.promptPosition == "bottomRight") {
471                        $j(arrow).addClass("formErrorArrowBottom");
472                        $j(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>');
473                    }
474                    else if ($j.validationEngine.settings.promptPosition == "topLeft" || $j.validationEngine.settings.promptPosition == "topRight") {
475                        $j(divFormError).append(arrow);
476                        $j(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>');
477                    }
478                }
479                $j(formErrorContent).html(promptText);
480
481                var calculatedPosition = $j.validationEngine.calculatePosition(caller, promptText, type, ajaxed, divFormError);
482                calculatedPosition.callerTopPosition += "px";
483                calculatedPosition.callerleftPosition += "px";
484                calculatedPosition.marginTopSize += "px";
485                $j(divFormError).css({
486                    "top": calculatedPosition.callerTopPosition,
487                    "left": calculatedPosition.callerleftPosition,
488                    "marginTop": calculatedPosition.marginTopSize,
489                    "opacity": 0
490                });
491                //orefalo - what the hell
492                //return $j(divFormError).animate({"opacity":0.87},function(){return true;});
493
494
495                return $j(divFormError).animate({ "opacity": 0.87 });
496            }
497        },
498        updatePromptText: function (caller, promptText, type, ajaxed) {	// UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED
499
500            var linkTofield = $j.validationEngine.linkTofield(caller);
501            var updateThisPrompt = "." + linkTofield;
502
503            if (type == "pass")
504                $j(updateThisPrompt).addClass("greenPopup");
505            else
506                $j(updateThisPrompt).removeClass("greenPopup");
507
508            if (type == "load")
509                $j(updateThisPrompt).addClass("blackPopup");
510            else
511                $j(updateThisPrompt).removeClass("blackPopup");
512
513            if (ajaxed)
514                $j(updateThisPrompt).addClass("ajaxed");
515            else
516                $j(updateThisPrompt).removeClass("ajaxed");
517
518            $j(updateThisPrompt).find(".formErrorContent").html(promptText);
519
520            var calculatedPosition = $j.validationEngine.calculatePosition(caller, promptText, type, ajaxed, updateThisPrompt);
521            calculatedPosition.callerTopPosition += "px";
522            calculatedPosition.callerleftPosition += "px";
523            calculatedPosition.marginTopSize += "px";
524            $j(updateThisPrompt).animate({ "top": calculatedPosition.callerTopPosition, "marginTop": calculatedPosition.marginTopSize });
525        },
526        calculatePosition: function (caller, promptText, type, ajaxed, divFormError) {
527
528            var callerTopPosition, callerleftPosition, inputHeight, marginTopSize;
529            var callerWidth = $j(caller).width();
530
531            if ($j.validationEngine.settings.containerOverflow) {		// Is the form contained in an overflown container?
532                callerTopPosition = 0;
533                callerleftPosition = 0;
534                inputHeight = $j(divFormError).height(); 				// compasation for the triangle
535                marginTopSize = "-" + inputHeight;
536            } else {
537                callerTopPosition = $j(caller).offset().top - 9;
538                callerleftPosition = $j(caller).offset().left - 20;
539                inputHeight = $j(divFormError).height();
540                marginTopSize = 0;
541            }
542
543            /* POSITIONNING */
544            if ($j.validationEngine.settings.promptPosition == "topRight") {
545                if ($j.validationEngine.settings.containerOverflow) {		// Is the form contained in an overflown container?
546                    callerleftPosition += callerWidth - 30;
547                } else {
548                    callerleftPosition += callerWidth - 30;
549                    callerTopPosition += -inputHeight;
550                }
551            }
552            if ($j.validationEngine.settings.promptPosition == "topLeft") { callerTopPosition += -inputHeight - 10; }
553
554            if ($j.validationEngine.settings.promptPosition == "centerRight") { callerleftPosition += callerWidth + 13; }
555
556            if ($j.validationEngine.settings.promptPosition == "bottomLeft") {
557                callerTopPosition = callerTopPosition + $j(caller).height() + 15;
558            }
559            if ($j.validationEngine.settings.promptPosition == "bottomRight") {
560                callerleftPosition += callerWidth - 30;
561                callerTopPosition += $j(caller).height() + 5;
562            }
563            return {
564                "callerTopPosition": callerTopPosition,
565                "callerleftPosition": callerleftPosition,
566                "marginTopSize": marginTopSize
567            };
568        },
569        linkTofield: function (caller) {
570            var linkTofield = $j(caller).attr("id") + "formError";
571            linkTofield = linkTofield.replace(/\[/g, "");
572            linkTofield = linkTofield.replace(/\]/g, "");
573            return linkTofield;
574        },
575        closePrompt: function (caller, outside) {						// CLOSE PROMPT WHEN ERROR CORRECTED
576            if (!$j.validationEngine.settings) {
577                $j.validationEngine.defaultSetting();
578            }
579            if (outside) {
580                $j(caller).fadeTo("fast", 0, function () {
581                    $j(caller).remove();
582                });
583                return false;
584            }
585
586            // orefalo -- review conditions non sense
587            if (typeof (ajaxValidate) == 'undefined')
588            { ajaxValidate = false; }
589            if (!ajaxValidate) {
590                var linkTofield = $j.validationEngine.linkTofield(caller);
591                var closingPrompt = "." + linkTofield;
592                $j(closingPrompt).fadeTo("fast", 0, function () {
593                    $j(closingPrompt).remove();
594                });
595            }
596        },
597        debug: function (error) {
598            if (!$j.validationEngine.settings.openDebug) return false;
599            if (!$j("#debugMode")[0]) {
600                $j("body").append("<div id='debugMode'><div class='debugError'><strong>This is a debug mode, you got a problem with your form, it will try to help you, refresh when you think you nailed down the problem</strong></div></div>");
601            }
602            $j(".debugError").append("<div class='debugerror'>" + error + "</div>");
603        },
604        submitValidation: function (caller) {					// FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION
605            var stopForm = false;
606            $j.validationEngine.ajaxValid = true;
607            var toValidateSize = $j(caller).find("[class*=validate]").size();
608
609            $j(caller).find("[class*=validate]").each(function () {
610                var linkTofield = $j.validationEngine.linkTofield(this);
611
612                if (!$j("." + linkTofield).hasClass("ajaxed")) {	// DO NOT UPDATE ALREADY AJAXED FIELDS (only happen if no normal errors, don't worry)
613                    var validationPass = $j.validationEngine.loadValidation(this);
614                    return (validationPass) ? stopForm = true : "";
615                };
616            });
617            var ajaxErrorLength = $j.validationEngine.ajaxValidArray.length; 	// LOOK IF SOME AJAX IS NOT VALIDATE
618            for (var x = 0; x < ajaxErrorLength; x++) {
619                if ($j.validationEngine.ajaxValidArray[x][1] == false)
620                    $j.validationEngine.ajaxValid = false;
621            }
622            if (stopForm || !$j.validationEngine.ajaxValid) {		// GET IF THERE IS AN ERROR OR NOT FROM THIS VALIDATION FUNCTIONS
623                if ($j.validationEngine.settings.scroll) {
624                    if (!$j.validationEngine.settings.containerOverflow) {
625                        var destination = $j(".formError:not('.greenPopup'):first").offset().top;
626                        $j(".formError:not('.greenPopup')").each(function () {
627                            var testDestination = $j(this).offset().top;
628                            if (destination > testDestination)
629                                destination = $j(this).offset().top;
630                        });
631                        $j("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination }, 1100);
632                    } else {
633                        var destination = $j(".formError:not('.greenPopup'):first").offset().top;
634                        var scrollContainerScroll = $j($j.validationEngine.settings.containerOverflowDOM).scrollTop();
635                        var scrollContainerPos = -parseInt($j($j.validationEngine.settings.containerOverflowDOM).offset().top);
636                        destination = scrollContainerScroll + destination + scrollContainerPos - 5;
637                        var scrollContainer = $j.validationEngine.settings.containerOverflowDOM + ":not(:animated)";
638
639                        $j(scrollContainer).animate({ scrollTop: destination }, 1100);
640                    }
641                }
642                return true;
643            } else {
644                return false;
645            }
646        }
647    };
648})(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.