1// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2// @license: Mad4Media Javascipt License - copyright Mad4Media - Fahrettin Kutyol - All rights reserved ++ 3// (re-) publishing or forking for any purpose of commercial or non-commercial use is not allowed. ++ 4// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 6function comparisonDummy(){}; 7 8comparisonDummy.prototype = { 9 equals: function(){return this}, 10 lower: function(){return this}, 11 lowerOrEqual: function(){return this}, 12 higher: function(){return this}, 13 higherOrEqual: function(){return this}, 14 errorTextIfNot: function(){return this} 15}; 16 17/** 18 * 19 */ 20function MCompare(element){ 21 this.element = element; 22 this.name = "compare"; 23} 24 25MCompare.prototype = { 26 equals : function(el){ 27 this.element2 = el; 28 this.action = "=="; 29 return this; 30 }, 31 32 lower : function(el){ 33 this.element2 = el; 34 this.action = "<"; 35 return this; 36 }, 37 38 lowerOrEqual : function(el){ 39 this.element2 = el; 40 this.action = "<="; 41 return this; 42 }, 43 44 higher : function(el){ 45 this.element2 = el; 46 this.action = ">"; 47 return this; 48 }, 49 50 higherOrEqual : function(el){ 51 this.element2 = el; 52 this.action = ">="; 53 return this; 54 }, 55 56 errorTextIfNot : function(text){ 57 this.onError = text; 58 return this; 59 }, 60 61 lowerThan: function(el){return this.lower(el);}, 62 higherThan: function(el){return this.higher(el);}, 63 64 deleteHandle : function(){ 65 66 var w1 = (this.node1.formType != "checkbox") ? this.node1 : this.node1.parentNode; 67 var w2 = (this.node2.formType != "checkbox") ? this.node2 : this.node2.parentNode; 68 69 if(this.node1.validationError){ 70 this.node1.bubbleInfo = this.node1.bubbleInfo.replace("<br>"+this.onError,"").replace(this.onError,""); 71 }else{ 72 m4jKillBubbleHandle(w1, this.node1); 73 } 74 75 if(this.node2.validationError){ 76 this.node2.bubbleInfo = this.node2.bubbleInfo.replace("<br>"+this.onError,"").replace(this.onError,""); 77 }else{ 78 m4jKillBubbleHandle(w2, this.node2); 79 } 80 81 dojo.disconnect(this.node1.compareOnChangeHandle); 82 this.node1.compareOnChangeHandle = undefined; 83 dojo.disconnect(this.node2.compareOnChangeHandle); 84 this.node2.compareOnChangeHandle = undefined; 85 }, 86 87 checkCondition : function(){ 88 var isError = 0; 89 var el1 = _byName("m4j-"+this.element); 90 var el2 = _byName("m4j-"+this.element2); 91 if( el1 == undefined || el2 == undefined ) return 0 ; 92 this.node1 = el1; 93 this.node2 = el2; 94 95 switch (this.action) { 96 case "==": 97 if (!(el1.value == el2.value ) ) isError = 1; 98 break; 99 100 case "<": 101 if (!(el1.value < el2.value ) ) isError = 1; 102 break; 103 104 case ">": 105 if (!(el1.value > el2.value ) ) isError = 1; 106 break; 107 108 case "<=": 109 if (!(el1.value <= el2.value ) ) isError = 1; 110 break; 111 112 case ">=": 113 if (!(el1.value >= el2.value ) ) isError = 1; 114 break; 115 116 default: 117 return 0; 118 break; 119 } 120 121 if(el1.compare == undefined) el1.compare = this; 122 if(el2.compare == undefined) el2.compare = this; 123 124 if(! el1.compareOnChangeHandle){ 125 el1.compareOnChangeHandle = dojo.connect(el1,"onchange", compareOnChange); 126 } 127 128 if(! el2.compareOnChangeHandle){ 129 el2.compareOnChangeHandle = dojo.connect(el2,"onchange", compareOnChange); 130 } 131 132 if(isError){ 133 var w1 = (el1.formType != "checkbox") ? el1 : el1.parentNode; 134 var w2 = (el2.formType != "checkbox") ? el2 : el2.parentNode; 135 136 if(! w1.errorOverHandle && m4jShowTooltip){ 137 el1.errorOverHandle = dojo.connect(el1,"onmouseover", showErrorTooltip); 138 el1.errorOutHandle = dojo.connect(el1,"onmouseout", hideErrorTooltip); 139 el1.bubbleInfo = this.onError; 140 m4jHighliteError(w1, el1); 141 }else{ 142 if(el1.bubbleInfo.indexOf(this.onError) == -1){ 143 el1.bubbleInfo += "<br>"+this.onError; 144 } 145 } 146 147 if(! w2.errorOverHandle && m4jShowTooltip){ 148 el2.errorOverHandle = dojo.connect(el2,"onmouseover", showErrorTooltip); 149 el2.errorOutHandle = dojo.connect(el2,"onmouseout", hideErrorTooltip); 150 el2.bubbleInfo = this.onError; 151 m4jHighliteError(w2, el2); 152 }else{ 153 if(el2.bubbleInfo.indexOf(this.onError) == -1){ 154 el2.bubbleInfo += "<br>"+this.onError; 155 } 156 } 157 }//EOF isError 158 159 return isError; 160 } 161}//EOF extending MCompare 162 163function compareOnChange(e){ 164 if(this.compare == undefined) return true; 165 var isError = this.compare.checkCondition(); 166 if(!isError){ 167 this.compare.deleteHandle(); 168 } 169 return true; 170} 171 172function m4jHighliteError(node,el){ 173 switch(node.formType){ 174 case "select": 175 if(_Browser.IE && _Browser.IEVersion() < 8){ 176 el.parentNode.style.border = "1px solid " + errorColor; 177 }else{ 178 el.style.borderColor = errorColor; 179 } 180 break; 181 182 case "checkbox": 183 el.style.border = "1px solid " + errorColor; 184 break; 185 186 default: 187 el.style.borderColor = errorColor; 188 break; 189 } 190} 191 192function m4jKillBubbleHandle(node,el){ 193 switch(node.formType){ 194 case "select": 195 if(_Browser.IE && _Browser.IEVersion() < 8){ 196 el.parentNode.style.border = ""; 197 }else{ 198 el.style.borderColor = ""; 199 } 200 break; 201 202 case "checkbox": 203 el.style.border = ""; 204 bubbleWrap.style.left = "-9999em"; 205 break; 206 207 default: 208 el.style.borderColor = ""; 209 break; 210 } 211 212 el.validationError = 0; 213 dojo.disconnect(el.errorOverHandle); 214 dojo.disconnect(el.errorOutHandle); 215 el.errorOverHandle = undefined; 216 el.errorOutHandle = undefined; 217} 218 219 220var m4jAllowSubmission = false; 221var m4jCancelSubmit = false; 222 223function validateField(node){ 224 var error = false; 225 var rError = false; 226 var validateType = node.validateType; 227 var errorText = ""; 228 229 var el = (node.formType != "checkbox") ? node : node.parentNode; 230 231 el.bubbleInfo = ""; 232 233 234 235 // Check Required 236 if(validateType >999){ 237 validateType -= 1000; 238 239 switch(node.formType){ 240 case "select": 241 case "textarea": 242 case "field": 243 if(node.value == ""){ 244 rError = true; 245 el.bubbleInfo = MText.required+"<br/>"; 246 }else{ 247 248 el.bubbleInfo = el.bubbleInfo.replace(MText.required+"<br/>",""); 249 } 250 break; 251 252 case "checkbox": 253 if(node.checked == ""){ 254 rError = true; 255 el.bubbleInfo = MText.required+"<br/>"; 256 }else{ 257 el.bubbleInfo = el.bubbleInfo.replace(MText.required+"<br/>",""); 258 } 259 break; 260 } 261 } 262 263 switch (validateType) { 264 case 1: 265 if(checkRegEx(node.value, "[^\\D\\s]") || rError){ 266 error = true; 267 el.bubbleInfo += MText.alphabetic; 268 } 269 errorText = MText.alphabetic; 270 break; 271 272 case 2: 273 if(checkRegEx(node.value, "[^0-9\.]") || rError){ 274 error = true; 275 el.bubbleInfo += MText.numeric; 276 } 277 errorText = MText.numeric; 278 break; 279 280 case 3: 281 if(checkRegEx(node.value, "[^0-9]") || rError){ 282 error = true; 283 el.bubbleInfo += MText.integer; 284 } 285 errorText = MText.integer; 286 break; 287 288 case 4: 289 var filter = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,6})$/; 290 if(!filter.test(node.value) && node.value.length != 0 || rError){ 291 error = true; 292 el.bubbleInfo += MText.email; 293 } 294 errorText = MText.email; 295 break; 296 297 case 5: 298 var filter = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/; 299 if(!filter.test(node.value) && node.value.length != 0 || rError){ 300 error = true; 301 el.bubbleInfo += MText.url; 302 } 303 errorText = MText.url; 304 break; 305 306 case 6: 307 if(checkRegEx(node.value, "[^A-Za-z0-9\\s]") || rError){ 308 error = true; 309 el.bubbleInfo += MText.alphanumeric; 310 } 311 errorText = MText.alphanumeric; 312 break; 313 default: 314 break; 315 } 316 317 318 if(error || rError){ 319 globalError = true; 320 321 m4jHighliteError(node,el); 322 el.validationError = 1; 323 if(! node.errorOverHandle && m4jShowTooltip){ 324 el.errorOverHandle = dojo.connect(el,"onmouseover", showErrorTooltip); 325 el.errorOutHandle = dojo.connect(el,"onmouseout", hideErrorTooltip); 326 327 } 328 }else{ 329 if(el.errorOverHandle){ 330 331 if(el.compare){ 332 el.bubbleInfo = el.bubbleInfo.replace(errorText+"<br>", "").replace(errorText, ""); 333 }else{ 334 m4jKillBubbleHandle(node, el); 335 } 336 337/* dojo.disconnect(el.errorChangeHandle); 338 el.errorChangeHandle = null; */ 339 el.validationError = 0; 340 } 341 } 342 343} 344 345function checkRegEx(value,regex){ 346 var pos = value.search(regex); 347 if(pos != -1 ) return true; 348 else return false; 349} 350 351var m4jValidationFunctions = new Array(); 352 353function addValidationFunction(functionName){ 354 m4jValidationFunctions.push(functionName); 355} 356 357 358var globalError = false; 359var m4jForm = dojo.byId("m4jForm"); 360 361if(m4jForm){ 362 363 m4jForm.onsubmit = function(){ 364 365 if(m4jCancelSubmit) return false; 366 367 if(m4jAllowSubmission){ 368 return true; 369 } 370 371 globalError = false; 372 var items = new Array(); 373 374 375 if(PROFORMS_USE_JS_VALIDATION){ 376 377 378 var inputs = m4jForm.getElementsByTagName("INPUT"); 379 var textAreas = m4jForm.getElementsByTagName("TEXTAREA"); 380 381 for(t=0;
381 t < inputs.length; t++){ 382 var alt = Number(inputs[t].alt); 383 if(alt > 0) { 384 if(inputs[t].type == "checkbox"){ 385 inputs[t].formType = "checkbox"; 386 }else { 387 inputs[t].formType = "field"; 388 } 389 inputs[t].validateType = alt; 390 items.push(inputs[t]); 391 inputs[t].errorChangeHandle = dojo.connect(inputs[t],"onchange", function(){ 392 validateField(this); 393 }); 394 } 395 } 396 for(t=0; t < textAreas.length; t++){ 397 var lang = Number(textAreas[t].lang); 398 if(lang > 0) { 399 textAreas[t].formType = "textarea"; 400 textAreas[t].validateType = lang; 401 items.push(textAreas[t]); 402 textAreas[t].errorChangeHandle = dojo.connect(textAreas[t],"onchange", function(){ 403 validateField(this); 404 }); 405 } 406 } 407 408 for(t=0; t < items.length; t++){ 409 validateField(items[t]); 410 } 411 412 // Non field / area required queries 413 var selects = m4jForm.getElementsByTagName("SELECT"); 414 for(t=0; t < selects.length; t++){ 415 var lang = Number(selects[t].lang); 416 if(lang > 0) { 417 selects[t].formType = "select"; 418 selects[t].validateType = lang; 419 items.push(selects[t]); 420 selects[t].errorChangeHandle = dojo.connect(selects[t],"onchange", function(){ 421 bubbleWrap.style.left = "-9999em"; 422 validateField(this); 423 }); 424 validateField(selects[t]); 425 } 426 } 427 428 var radioWrap = dojo.query("div.m4jRadioWrap, div.m4jCheckboxWrap"); 429 radioWrap.forEach(function(wrap){ 430 m4jEvalWrap(wrap); 431 }); 432 433 //Check Comparison 434 var compare = proforms.comparisonArray; 435 dojo.forEach(compare,dojo.hitch(this,function(com){ 436 if( com.checkCondition() ) globalError = true; 437 })); 438 439 } 440 441 442 443 444 //Custom Validation CallBacks 445 var funcsSize = m4jValidationFunctions.length; 446 for(var t= 0; t< funcsSize; t++){ 447 var funcName = (typeof m4jValidationFunctions[t] === "string") ? m4jValidationFunctions[t] : null; 448 449 if(funcName && ( dojo.isFunction(window[funcName]) || dojo.isObject(window[funcName]) ) ){ 450 451 var isError = window[funcName](); 452 if(isError){ 453 globalError = true; 454 } 455 } 456 }; 457 458 459 // Cancel if error 460 if(globalError) { 461 alert(MText.errorPrompt); 462 return false; 463 }else { 464 return true; 465 } 466 }//EOF m4jForm onSubmit 467 468}//EOF if m4jForm 469 470function m4jChecker(wrap){ 471 var checked = false; 472 var radioButtons = wrap.getElementsByTagName("INPUT"); 473 for(t=0; t < radioButtons.length; t++){ 474 if(!radioButtons[t].wrap){ 475 radioButtons[t].wrap = wrap; 476 radioButtons[t].errorChangeHandle = dojo.connect(radioButtons[t],"onclick", function(){ 477 m4jEvalWrap(this.wrap); 478 }); 479 } 480 if(radioButtons[t].checked != ""){ 481 checked = true; 482 } 483 } 484 return checked; 485} 486 487 488function m4jEvalWrap(wrap){ 489 var lang = Number(wrap.lang); 490 if(lang > 999 ){ 491 var check = m4jChecker(wrap); 492 if(! check){ 493 wrap.style.border = "1px solid " + errorColor ; 494 wrap.bubbleInfo = MText.required+"<br/>"; 495 if(! wrap.errorOverHandle){ 496 wrap.errorOverHandle = dojo.connect(wrap,"onmouseover", showErrorTooltip); 497 wrap.errorOutHandle = dojo.connect(wrap,"onmouseout", hideErrorTooltip); 498 globalError = true; 499 } 500 }else{ 501 wrap.style.border = ""; 502 wrap.bubbleInfo = ""; 503 if(wrap.errorOverHandle){ 504 dojo.disconnect(wrap.errorOverHandle); 505 dojo.disconnect(wrap.errorOutHandle); 506 wrap.errorOverHandle = undefined; 507 wrap.errorOutHandle = undefined; 508 bubbleWrap.style.left = "-9999em"; 509 } 510 } 511 } 512 513} 514 515 516 517var showErrorTooltip = function(e){ 518 var bW = bubbleWrap; 519 dojo.byId("bubble_tooltip_content").innerHTML = this.bubbleInfo; 520 521 var myBounds = _ViewportOffset(this,true); 522 var docScroll = _docScroll(this); 523 myBounds.t += docScroll.top; 524 myBounds.l += docScroll.left; 525 var bwDim = _Dimensions(bW); 526 var top = myBounds.t - bwDim.height +5; 527 var left = (myBounds.l+myBounds.w)-140; 528 529 bW.style.top = top + "px"; 530 bW.style.left = left + "px"; 531} 532 533var hideErrorTooltip = function(e){ 534 bubbleWrap.style.left = "-9999em"; 535} 536 537function m4jEvalReset(){ 538 var forms = dojo.query("input,select,textarea",m4jForm);
539 forms.forEach(function(node){ 540 if(node.errorOverHandle){ 541 dojo.disconnect(node.errorOverHandle); 542 dojo.disconnect(node.errorOutHandle); 543 node.errorOverHandle = undefined; 544 node.errorOutHandle = undefined; 545 bubbleWrap.style.left = "-9999em"; 546 switch(node.formType){ 547 case "select": 548 if(_Browser.IE && _Browser.IEVersion() < 8){ 549 node.parentNode.style.border = ""; 550 }else{ 551 node.style.borderColor = "green"; 552 } 553 break; 554 555 case "checkbox": 556 node.style.border = ""; 557 bubbleWrap.style.left = "-9999em"; 558 break; 559 560 default: 561 node.style.borderColor = ""; 562 break; 563 } 564 565 node.bubbleInfo = ""; 566 } 567 if(node.wrap){ 568 if(node.formType == "select" && (_Browser.IE && _Browser.IEVersion() >= 8) ) return; 569 node.wrap.style.border = ""; 570 if(node.wrap.errorOverHandle){ 571 dojo.disconnect(node.wrap.errorOverHandle); 572 dojo.disconnect(node.wrap.errorOutHandle); 573 node.wrap.errorOverHandle = undefined; 574 node.wrap.errorOutHandle = undefined; 575 } 576 } 577 }); 578} 579 580 581dojo.addOnLoad(function(){ 582 dojo.connect(dojo.byId("m4jResetButton"),"onclick",m4jEvalReset); 583}); 584 585 586 587
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.