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.