1var RSFormProCalendars = {}; 2var RSFormProPrices = {}; 3var ajaxExtraValidationScript = {}; 4 5if (typeof RSFormPro != 'object') { 6 var RSFormPro = {}; 7} 8 9RSFormPro.Forms = {}; 10 11/* Field specific functions */ 12 13RSFormPro.refreshCaptcha = function(componentId, captchaPath) { 14 if (!captchaPath) { 15 captchaPath = 'index.php?option=com_rsform&task=captcha&componentId=' + componentId; 16 } 17 document.getElementById('captcha' + componentId).src = captchaPath + '&' + Math.random(); 18 document.getElementById('captchaTxt' + componentId).value = ''; 19 document.getElementById('captchaTxt' + componentId).focus(); 20}; 21 22RSFormPro.initGeoLocation = function(term, id, mapid, map, marker, geocoder, type) { 23 var content = document.getElementById('rsform_geolocation'+id); 24 var address = document.getElementById(mapid).clientWidth; 25 26 document.getElementById('rsform_geolocation'+id).style.width = address+'px'; 27 document.getElementById('rsform_geolocation'+id).style.display = 'none'; 28 document.getElementById('rsform_geolocation'+id).innerHTML = ''; 29 30 if (term != '') { 31 geocoder.geocode( {'address': term }, function(results, status) { 32 if (status == 'OK') { 33 for (var i=0; i<results.length; i++) { 34 var item = results[i]; 35 var theli = document.createElement('li'); 36 var thea = document.createElement('a'); 37 38 thea.setAttribute('href','javascript:void(0)'); 39 thea.innerHTML = item.formatted_address; 40 41 RSFormProUtils.addEvent(thea,'click', (function() { 42 var mapValue = type ? item.formatted_address : item.geometry.location.lat().toFixed(5) + ',' + item.geometry.location.lng().toFixed(5); 43 var mapId = mapid; 44 var location = new google.maps.LatLng(item.geometry.location.lat().toFixed(5), item.geometry.location.lng().toFixed(5)); 45 46 return function() { 47 document.getElementById(mapId).value = mapValue; 48 marker.setPosition(location); 49 map.setCenter(location); 50 document.getElementById('rsform_geolocation'+id).style.display = 'none'; 51 } 52 })()); 53 54 theli.appendChild(thea); 55 content.appendChild(theli); 56 } 57 58 document.getElementById('rsform_geolocation'+id).style.display = ''; 59 } 60 }); 61 } 62}; 63 64RSFormPro.disableInvalidDates = function(fieldName) { 65 var theDate = new Date(), 66 day, 67 index; 68 69 for (day = 1; day <= 31; day++) { 70 var year = parseInt(document.getElementById(fieldName + 'y').value); 71 var month = parseInt(document.getElementById(fieldName + 'm').value) - 1; 72 73 index = day - 1; 74 if (document.getElementById(fieldName + 'd').options[0].value == '') { 75 index++; 76 } 77 document.getElementById(fieldName + 'd').options[index].disabled = false; 78 if (!isNaN(year) && !isNaN(month)) { 79 if (typeof theDate.__msh_oldSetFullYear == 'function') { 80 theDate.__msh_oldSetFullYear(year, month, day); 81 } else { 82 theDate.setFullYear(year, month, day); 83 } 84 85 if (theDate.getDate() != day || theDate.getMonth() != month) { 86 document.getElementById(fieldName + 'd').options[index].disabled = true; 87 } 88 } 89 } 90 if (document.getElementById(fieldName + 'd').options[document.getElementById(fieldName + 'd').selectedIndex].disabled == true) { 91 for (day = 31; day >= 28; day--) { 92 index = day - 1; 93 if (document.getElementById(fieldName + 'd').options[0].value == '') { 94 index++; 95 } 96 if (document.getElementById(fieldName + 'd').options[index].disabled == false) { 97 document.getElementById(fieldName + 'd').value = day; 98 break; 99 } 100 } 101 } 102}; 103 104/* Number functions */ 105 106RSFormPro.formatNumber = function(number, decimals, dec_point, thousands_sep) { 107 var n = number, prec = decimals; 108 n = !isFinite(+n) ? 0 : +n; 109 prec = !isFinite(+prec) ? 0 : Math.abs(prec); 110 var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep; 111 var dec = (typeof dec_point == "undefined") ? '.' : dec_point; 112 113 var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0; 114 115 var abs = Math.abs(n).toFixed(prec); 116 var _, i; 117 118 if (abs >= 1000) { 119 _ = abs.split(/\D/); 120 i = _[0].length % 3 || 3; 121 122 _[0] = s.slice(0,i + (n < 0)) + 123 _[0].slice(i).replace(/(\d{3})/g, sep+'$1'); 124 125 s = _.join(dec); 126 } else { 127 s = s.replace('.', dec); 128 } 129 130 return s; 131}; 132 133RSFormPro.toNumber = function(number, decimal, thousands, decimals) { 134 // Remove decimals first 135 if (parseInt(decimals) > 0 && number.lastIndexOf(decimal) > -1) { 136 var index = number.lastIndexOf(decimal);
137 number = number.substring(0, index) + 'DECIMALS' + number.substring(index + 1); 138 } 139 140 // Remove thousands separator 141 if (number.indexOf(thousands) > -1) { 142 number = number.split(thousands).join(''); 143 } 144 145 number = number.split('DECIMALS').join('.'); 146 return parseFloat(number); 147}; 148 149/* Form and element functions */ 150 151RSFormPro.getForm = function(formId) { 152 if (typeof RSFormPro.Forms[formId] == 'undefined') { 153 var formIds = document.getElementsByName('form[formId]'); 154 for (var i=0; i<formIds.length; i++) 155 { 156 if (parseInt(formIds[i].value) != parseInt(formId)) 157 continue; 158 159 var form = formIds[i].parentNode; 160 if (form.tagName == 'FORM' || form.nodeName == 'FORM') { 161 RSFormPro.Forms[formId] = form; 162 return form; 163 } 164 165 while (form.parentNode) 166 { 167 form = form.parentNode; 168 if (form.tagName == 'FORM' || form.nodeName == 'FORM') { 169 RSFormPro.Forms[formId] = form; 170 return form; 171 } 172 } 173 } 174 } 175 176 return RSFormPro.Forms[formId]; 177}; 178 179RSFormPro.getValue = function(formId, name) { 180 var form = RSFormPro.getForm(formId); 181 var values = []; 182 183 if (typeof form != 'undefined') 184 { 185 for (var i = 0; i < form.elements.length; i++) 186 { 187 var element = form.elements[i]; 188 var tagName = element.tagName || element.nodeName; 189 190 switch (tagName) 191 { 192 case 'INPUT': 193 if (element.type) 194 switch (element.type.toUpperCase()) 195 { 196 case 'TEXT': 197 case 'NUMBER': 198 case 'HIDDEN': 199 if (!element.name || element.name != 'form[' + name + ']') continue; 200 return element.value; 201 break; 202 203 case 'RADIO': 204 if (!element.name || element.name != 'form[' + name + ']') continue; 205 206 if (element.checked == true) { 207 values.push(element.value); 208 } 209 break; 210 211 case 'CHECKBOX': 212 if (!element.name || element.name != 'form[' + name + '][]') continue; 213 if (element.checked == true) { 214 values.push(element.value); 215 } 216 break; 217 } 218 break; 219 220 case 'SELECT': 221 if (!element.name || element.name != 'form[' + name + '][]') continue; 222 223 if (element.options) 224 for (var o=0; o<element.options.length; o++) 225 if (element.options[o].selected) 226 { 227 values.push(element.options[o].value); 228 } 229 break; 230 } 231 } 232 } 233 234 return values; 235}; 236 237RSFormPro.isChecked = function(formId, name, value) { 238 var isChecked = false; 239 var form = RSFormPro.getForm(formId); 240 241 if (typeof form != 'undefined') 242 { 243 primary_loop: 244 for (var i=0; i<form.elements.length; i++) 245 { 246 var element = form.elements[i]; 247 var tagName = element.tagName || element.nodeName; 248 249 switch (tagName) 250 { 251 case 'INPUT': 252 if (element.type) 253 switch (element.type.toUpperCase()) 254 { 255 case 'RADIO': 256 if (!element.name || element.name != 'form[' + name + ']') continue; 257 if (element.checked == true && element.value == value) 258 { 259 isChecked = true; 260 break primary_loop; 261 } 262 break; 263 264 case 'CHECKBOX': 265 if (!element.name || element.name != 'form[' + name + '][]') continue; 266 if (element.checked == true && element.value == value) 267 { 268 isChecked = true; 269 break primary_loop; 270 } 271 break; 272 } 273 break; 274 275 case 'SELECT': 276 if (!element.name || element.name != 'form[' + name + '][]') continue; 277 278 if (element.options) 279 for (var o=0; o<element.options.length; o++) 280 if (element.options[o].selected && element.options[o].value == value) 281 { 282 isChecked = true; 283 break primary_loop; 284 } 285 break; 286 } 287 } 288 } 289 290 return isChecked; 291}; 292 293RSFormPro.getBlock = function(formId, block) { 294 var form = RSFormPro.getForm(formId); 295 var possible = false; 296 var blocks, current_block; 297 298 if (typeof form != 'undefined') { 299 if (blocks = getElementsByClassName('rsform-block')) { 300 for (i=0; i<blocks.length; i++) { 301 var classes = blocks[i].className.split(' '); 302 for (c=0; c<classes.length; c++) { 303 if (classes[c] == 'rsform-block-' + block) { 304 if (blocks[i].parentNode) { 305 current_block = blocks[i]; 306 if (current_block == form) 307 return [ blocks[i] ]; 308 309 while (current_block.parentNode) { 310 current_block = current_block.parentNode; 311 if (current_block == form) 312 return [ blocks[i] ]; 313 } 314 } 315 316 possible = [ blocks[i] ]; 317 } 318 } 319 } 320 } 321 } 322 323 return possible; 324}; 325 326RSFormPro.getFieldsByName = function(formId, name) { 327 var form = RSFormPro.getForm(formId); 328 var results = []; 329 var pushed = false;
330 331 if (typeof form != 'undefined') { 332 for (var i=0; i<form.elements.length; i++) { 333 var element = form.elements[i]; 334 pushed = false; 335 if (element.name && ( 336 // single fields 337 element.name == 'form[' + name + ']' || 338 // multiple fields 339 element.name == 'form[' + name + '][]' || 340 // new field - Birthday field 341 element.name == 'form[' + name + '][d]' || 342 element.name == 'form[' + name + '][m]' || 343 element.name == 'form[' + name + '][y]' 344 )) { 345 results.push(element); 346 pushed = true; 347 } 348 349 if (pushed) { 350 // for calendar 351 if (element.id && element.id.indexOf('txtcal') > -1) { 352 var suffix = element.id.replace('txtcal', ''); 353 results.push(document.getElementById('btn' + suffix)); 354 } 355 // for labels (radio, checkbox) 356 var labels = form.getElementsByTagName('label'); 357 for (var l=0; l<labels.length; l++) { 358 if (labels[l].htmlFor && labels[l].htmlFor == element.id) 359 results.push(labels[l]); 360 } 361 } 362 } 363 } 364 365 return results; 366}; 367 368/* Pagination functions */ 369 370RSFormPro.Pages = { 371 change: function(formId, page, totalPages, validate, parentErrorClass) { 372 // callback functions if next page is clicked 373 var direction = RSFormPro.Pages.checkDirection(formId, page); 374 if (direction == 'next') { 375 RSFormPro.callbacks.runCallback(formId, 'nextPage'); 376 } 377 378 var thePage; 379 380 if (validate) { 381 var form = RSFormPro.getForm(formId); 382 if (!RSFormPro.Ajax.validate(form, page, parentErrorClass)) { 383 return false; 384 } 385 } 386 387 for (var i = 0; i <= totalPages; i++) { 388 thePage = document.getElementById('rsform_' + formId + '_page_' + i); 389 if (thePage) { 390 rsfp_hidePage(thePage); 391 } 392 } 393 394 thePage = document.getElementById('rsform_' + formId + '_page_' + page); 395 if (thePage) { 396 rsfp_showPage(thePage); 397 try { 398 var func = window["rsfp_showProgress_" + formId]; 399 if (typeof func == "function") { 400 func(page); 401 } 402 } 403 catch (err) {} 404 } 405 }, 406 hide: function(thePage) { 407 RSFormProUtils.addClass(thePage, 'formHidden'); 408 }, 409 show: function(thePage) { 410 RSFormProUtils.removeClass(thePage, 'formHidden'); 411 }, 412 413 checkDirection : function(formId, page) { 414 var base = RSFormPro.Pages; 415 if (typeof base.history[formId] == 'undefined') { 416 base.history[formId] = page; 417 return 'next'; 418 } else { 419 var direction; 420 if (base.history[formId] <= page ) { 421 direction = 'next'; 422 } else { 423 direction = 'prev'; 424 } 425 base.history[formId] = page; 426 427 return direction; 428 } 429 }, 430 history: {} 431}; 432 433/* Condition functions */ 434RSFormPro.Conditions = { 435 add: function(formId, name, fnCondition) { 436 var form = RSFormPro.getForm(formId); 437 438 if (typeof form != 'undefined') { 439 for (var i = 0; i < form.elements.length; i++) { 440 var element = form.elements[i]; 441 var tagName = element.tagName || element.nodeName; 442 if (element.name && (element.name == 'form[' + name + ']' || element.name == 'form[' + name + '][]')) { 443 if (tagName == 'SELECT') { 444 RSFormProUtils.addEvent(element, 'change', function() { 445 fnCondition(); 446 }); 447 } else { 448 RSFormProUtils.addEvent(element, 'click', function() { 449 fnCondition(); 450 }); 451 } 452 } 453 } 454 } 455 }, 456 runAll: function(formId) { 457 var func = window["rsfp_runAllConditions" + formId]; 458 if (typeof func == "function") { 459 func(); 460 } 461 } 462}; 463 464/* Calculation functions */ 465 466RSFormPro.Calculations = { 467 addEvents: function(formId, fields) { 468 var func = window["rsfp_Calculations" + formId]; 469 var thefields = fields ? fields : RSFormProPrices; 470 471 // Detect IE8. 472 var isIE8 = navigator.userAgent.match(/MSIE 8\.0/); 473 var event = 'click'; 474 475 for (var field in thefields) { 476 if (!thefields.hasOwnProperty(field)) { 477 continue; 478 } 479 field = field.replace(formId+'_',''); 480 objects = RSFormPro.getFieldsByName(formId,field); 481 for(i = 0; i < objects.length;i++) { 482 tagName = objects[i].tagName || objects[i].nodeName; 483 484 if (tagName == 'INPUT' || tagName == 'SELECT') { 485 // IE8 fix. 486 if (tagName == 'INPUT' && isIE8 && objects[i].type && objects[i].type.toLowerCase() == 'checkbox') { 487 event = 'click'; 488 } else { 489 event = 'change'; 490 } 491
492 RSFormProUtils.addEvent(objects[i], event, function() { 493 if (typeof func == "function") { 494 func(); 495 } 496 }); 497 } 498 } 499 } 500 } 501}; 502 503/* AJAX functions */ 504RSFormPro.Ajax = { 505 URL: false, 506 getXHR: function() { 507 try { 508 return new window.XMLHttpRequest(); 509 } catch ( e ) {} 510 }, 511 displayValidationErrors: function(formComponents, task, formId, data) { 512 if (task == 'afterSend') { 513 var ids, 514 i, 515 j, 516 id, 517 formComponent, 518 elementBlock; 519 520 ids = data.response[0].split(','); 521 for (i = 0; i < ids.length; i++) { 522 id = parseInt(ids[i]); 523 if (!isNaN(id) && typeof formComponents[id] != 'undefined') { 524 formComponent = RSFormPro.getFieldsByName(formId, formComponents[id]); 525 if (formComponent && formComponent.length > 0) { 526 for (j = 0; j < formComponent.length; j++) { 527 if (formComponent[j]) { 528 formComponent[j].className = formComponent[j].className.replace(' rsform-error', ''); 529 if (typeof data.parentErrorClass != 'undefined') { 530 try { 531 elementBlock = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(formComponents[id])); 532 533 elementBlock = elementBlock[0]; 534 elementBlock.className = elementBlock.className.replace(data.parentErrorClass, ''); 535 } catch (err) {} 536 } 537 } 538 } 539 } 540 } 541 } 542 543 ids = data.response[1].split(','); 544 for (i = 0; i < ids.length; i++) { 545 id = parseInt(ids[i]); 546 if (!isNaN(id) && typeof formComponents[id] != 'undefined') { 547 formComponent = RSFormPro.getFieldsByName(formId, formComponents[id]); 548 if (formComponent && formComponent.length > 0) { 549 for (j = 0; j < formComponent.length; j++) { 550 if (formComponent[j]) { 551 formComponent[j].className = formComponent[j].className.replace(' rsform-error', '') + ' rsform-error'; 552 if (typeof data.parentErrorClass != 'undefined') { 553 try { 554 elementBlock = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(formComponents[id])); 555 556 elementBlock = elementBlock[0]; 557 elementBlock.className = elementBlock.className.replace(data.parentErrorClass, '') + data.parentErrorClass; 558 } catch (err) {} 559 } 560 } 561 } 562 } 563 } 564 } 565 } 566 }, 567 validate: function(form, page, parentErrorClass) { 568 try { 569 var el = form.elements.length; 570 } catch (err) { 571 form = this; 572 } 573 574 var xmlHttp = RSFormPro.Ajax.getXHR(); 575 var url = 'index.php?option=com_rsform&task=ajaxValidate'; 576 if (typeof RSFormPro.Ajax.URL == 'string') { 577 url = RSFormPro.Ajax.URL; 578 } 579 580 var params = [], 581 submits = [], 582 success = false, 583 formId = 0, 584 ids, 585 i, 586 j; 587 588 for (i=0; i<form.elements.length; i++) 589 { 590 // don't send an empty value 591 if (!form.elements[i].name) continue; 592 if (form.elements[i].name.length == 0) continue; 593 // check if the checkbox is checked 594 if (form.elements[i].type == 'checkbox' && form.elements[i].checked == false) continue; 595 // check if the radio is selected 596 if (form.elements[i].type == 'radio' && form.elements[i].checked == false) continue; 597 598 if (form.elements[i].type == 'submit') { 599 submits.push(form.elements[i]); 600 form.elements[i].disabled = true; 601 } 602 603 // check if form is a dropdown with multiple selections 604 if (form.elements[i].type == 'select-multiple') 605 { 606 for (j = 0; j < form.elements[i].options.length; j++) { 607 if (form.elements[i].options[j].selected) { 608 params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].options[j].value)); 609 } 610 } 611 612 continue; 613 } 614 615 if (form.elements[i].name == 'form[formId]') { 616 formId = form.elements[i].value; 617 } 618 619 params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value)); 620 } 621 622 if (typeof ajaxExtraValidationScript[formId] == 'function') { 623 ajaxExtraValidationScript[formId]('beforeSend', formId, {'url': url, 'params': params}); 624 } 625 626 if (page) { 627 params.push('page=' + page); 628 } 629 630 params = params.join('&'); 631 632 xmlHttp.open("POST", url, false); 633 634 //Send the proper header information along with the request 635 xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 636 xmlHttp.send(params); 637 success = true; 638 639 if (xmlHttp.responseText.indexOf("\n") != -1) 640 { 641 var response = xmlHttp.responseText.split("\n"); 642 // All spans set to no error 643 ids = response[0].split(','); 644 for (i = 0; i < ids.length; i++) 645 if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i])) { 646 document.getElementById('component'+ids[i]).className = 'formNoError'; 647 } 648 649 // Show errors 650 ids = response[1].split(','); 651 for (i = 0; i < ids.length; i++) 652 if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i])) 653 { 654 document.getElementById('component'+ids[i]).className = 'formError'; 655 success = false;
656 } 657 658 if (response.length == 4) 659 { 660 page = parseInt(response[2]) - 1; 661 var totalPages = parseInt(response[3]); 662 rsfp_changePage(formId, page, totalPages, false); 663 } 664 665 if (typeof ajaxExtraValidationScript[formId] == 'function') { 666 ajaxExtraValidationScript[formId]('afterSend', formId, {'url': url, 'params': params, 'response': response, 'parentErrorClass': parentErrorClass}); 667 } 668 } 669 670 for (i = 0; i < submits.length; i++) { 671 submits[i].disabled = false; 672 } 673 674 if (success == false && document.getElementById('rsform_error_' + formId)) 675 { 676 try { 677 if (typeof page == 'undefined' || page == 0) { 678 RSFormPro.callbacks.runCallback(formId, 'afterValidationFailed'); // callback functions if validation fails when form is submitted 679 } else { 680 RSFormPro.callbacks.runCallback(formId, 'nextPageFailed'); // callback functions if validation fails when a specific page of the form is checked 681 } 682 document.getElementById('rsform_error_' + formId).style.display = 'block'; 683 } 684 catch (err) { } 685 } 686 687 if (success == true) { 688 try { 689 if (typeof page == 'undefined' || page == 0) { 690 RSFormPro.callbacks.runCallback(formId, 'afterValidationSuccess'); // callback functions if validation succeeds 691 } else { 692 RSFormPro.callbacks.runCallback(formId, 'nextPageSuccess'); // callback functions if validation succeeds when a specific page of the form is checked 693 } 694 document.getElementById('rsform_error_' + formId).style.display = 'none'; 695 } 696 catch (err) { } 697 } 698 699 return success; 700 } 701}; 702 703RSFormPro.callbacks = { 704 allCallbacks: {}, 705 706 addCallback: function(formId, callbackName, args) { 707 var base = RSFormPro.callbacks; 708 709 if (typeof base.allCallbacks[formId] == 'undefined') { 710 base.allCallbacks[formId] = {} 711 } 712 713 if (typeof base.allCallbacks[formId][callbackName] == 'undefined') { 714 base.allCallbacks[formId][callbackName] = []; 715 } 716 717 base.allCallbacks[formId][callbackName].push(args); 718 }, 719 720 runCallback: function(formId, callbackName) { 721 var base = RSFormPro.callbacks; 722 if (typeof base.allCallbacks[formId] != 'undefined' && typeof base.allCallbacks[formId][callbackName] != 'undefined' && base.allCallbacks[formId][callbackName].length > 0) { 723 for (var i = 0; i < base.allCallbacks[formId][callbackName].length; i++) { 724 var args = base.allCallbacks[formId][callbackName][i]; 725 var functionName = args[0]; 726 727 var functionArgs = []; 728 for (var j = 1; j < args.length; j++) { 729 functionArgs.push(args[j]); 730 } 731 732 // execute the callback function set for this trigger 733 functionName.apply(self, functionArgs); 734 } 735 } 736 } 737} 738 739/* Helper functions */ 740 741var RSFormProUtils = { 742 addEvent: function(obj, evType, fn) { 743 if (obj.addEventListener) { 744 obj.addEventListener(evType, fn, false); 745 return true; 746 } else if (obj.attachEvent){ 747 var r = obj.attachEvent("on"+evType, fn); 748 return r; 749 } else { 750 return false; 751 } 752 }, 753 hasClass: function (el, name) { 754 return new RegExp('(\\s|^)' + name + '(\\s|$)').test(el.className); 755 }, 756 addClass: function(el, name) { 757 if (!RSFormProUtils.hasClass(el, name)) { 758 el.className += (el.className ? ' ' : '') + name; 759 } 760 }, 761 removeClass: function(el, name) { 762 if (RSFormProUtils.hasClass(el, name)) { 763 el.className = el.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'),' ').replace(/^\s+|\s+$/g, ''); 764 } 765 }, 766 setDisplay: function (items, value) { 767 for (var i = 0; i < items.length; i++) { 768 items[i].style.display = value; 769 } 770 }, 771 getAlias: function(str) { 772 str = str.replace(/\-/g, ' '); 773 774 if (!String.prototype.trim) { 775 str = str.replace(/^\s+|\s+$/g, ''); 776 } else { 777 str = str.trim(); 778 } 779 780 str = str.toLowerCase(); 781 str = str.replace(/(\s|[^A-Za-z0-9\-])+/g, '-'); 782 str = str.replace(/^\-+|\-+$/g, ''); 783 784 return str; 785 }, 786 getElementsByClassName: function (className, tag, elm) { 787 if (document.getElementsByClassName) { 788 getElementsByClassName = function (className, tag, elm) { 789 elm = elm || document; 790 var elements = elm.getElementsByClassName(className), 791 nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null, 792 returnElements = [], 793 current; 794 for(var i=0, il=elements.length; i<il; i+=1){ 795 current = elements[i]; 796 if(!nodeName || nodeName.test(current.nodeName)) { 797 returnElements.push(current); 798 } 799 } 800 return returnElements; 801 }; 802 } else if (document.evaluate) { 803 getElementsByClassName = function (className, tag, elm) { 804 tag = tag || "*"; 805 elm = elm || document; 806 var classes = className.split(" "), 807 classesToCheck = "", 808 xhtmlNamespace = "http://www.w3.org/1999/xhtml", 809 namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null, 810 returnElements = [], 811 elements, 812 node; 813 for(var j=0, jl=classes.length; j<jl; j+=1){ 814 classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"; 815 } 816 try { 817 elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null); 818 } 819 catch (e) { 820 elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null); 821 } 822 while ((node = elements.iterateNext())) { 823 returnElements.push(node); 824 } 825 return returnElements; 826 }; 827 } else { 828 getElementsByClassName = function (className, tag, elm) { 829 tag = tag || "*"; 830 elm = elm || document; 831 var classes = className.split(" "), 832 classesToCheck = [], 833 elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag), 834 current, 835 returnElements = [], 836 match; 837 for(var k=0, kl=classes.length; k<kl; k+=1){ 838 classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)")); 839 }
840 for(var l=0, ll=elements.length; l<ll; l+=1){ 841 current = elements[l]; 842 match = false; 843 for(var m=0, ml=classesToCheck.length; m<ml; m+=1){ 844 match = classesToCheck[m].test(current.className); 845 if (!match) { 846 break; 847 } 848 } 849 if (match) { 850 returnElements.push(current); 851 } 852 } 853 return returnElements; 854 }; 855 } 856 857 return getElementsByClassName(className, tag, elm); 858 } 859}; 860 861function isset() { 862 // http://kevin.vanzonneveld.net 863 // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 864 // + improved by: FremyCompany 865 // + improved by: Onno Marsman 866 // + improved by: RafaÅ Kukawski 867 // * example 1: isset( undefined, true); 868 // * returns 1: false 869 // * example 2: isset( 'Kevin van Zonneveld' ); 870 // * returns 2: true 871 var a = arguments, 872 l = a.length, 873 i = 0, 874 undef; 875 876 if (l === 0) { 877 throw new Error('Empty isset'); 878 } 879 880 while (i !== l) { 881 if (a[i] === undef || a[i] === null) { 882 return false; 883 } 884 i++; 885 } 886 return true; 887} 888 889/* Legacy functions */ 890 891function rsfp_geolocation(term, id, mapid, map, marker, geocoder, type) { 892 return RSFormPro.initGeoLocation(term, id, mapid, map, marker, geocoder, type); 893} 894 895function refreshCaptcha(componentId, captchaPath) { 896 return RSFormPro.refreshCaptcha(componentId, captchaPath); 897} 898 899function number_format(number, decimals, dec_point, thousands_sep) { 900 return RSFormPro.formatNumber(number, decimals, dec_point, thousands_sep); 901} 902 903function rsfp_toNumber(number, decimal, thousands, decimals) { 904 return RSFormPro.toNumber(number, decimal, thousands, decimals); 905} 906 907function rsfp_getForm(formId) { 908 return RSFormPro.getForm(formId); 909} 910 911function rsfp_getValue(formId, name) { 912 return RSFormPro.getValue(formId, name); 913} 914 915function rsfp_verifyChecked(formId, name, value) { 916 return RSFormPro.isChecked(formId, name, value); 917} 918 919function rsfp_getBlock(formId, block) { 920 return RSFormPro.getBlock(formId, block); 921} 922 923function rsfp_getFieldsByName(formId, name) { 924 return RSFormPro.getFieldsByName(formId, name); 925} 926 927function rsfp_addEvent(obj, evType, fn) { 928 return RSFormProUtils.addEvent(obj, evType, fn); 929} 930 931function rsfp_setDisplay(items, value) { 932 return RSFormProUtils.setDisplay(items, value); 933} 934 935function stringURLSafe(str) { 936 return RSFormProUtils.getAlias(str); 937} 938 939function rsfp_changePage(formId, page, totalPages, validate, parentErrorClass) { 940 return RSFormPro.Pages.change(formId, page, totalPages, validate, parentErrorClass); 941} 942 943function rsfp_hidePage(thePage) { 944 return RSFormPro.Pages.hide(thePage); 945} 946 947function rsfp_showPage(thePage) { 948 return RSFormPro.Pages.show(thePage); 949} 950 951function rsfp_checkValidDate(fieldName) { 952 return RSFormPro.disableInvalidDates(fieldName); 953} 954 955function rsfp_addCondition(formId, name, fnCondition) { 956 return RSFormPro.Conditions.add(formId, name, fnCondition); 957} 958 959function rsfp_runAllConditions(formId) { 960 return RSFormPro.Conditions.runAll(formId); 961} 962 963function rsfp_setCalculationsEvents(formId, fields) { 964 return RSFormPro.Calculations.addEvents(formId, fields); 965} 966 967function getElementsByClassName(className, tag, elm) { 968 return RSFormProUtils.getElementsByClassName(className, tag, elm); 969} 970 971function buildXmlHttp() { 972 return RSFormPro.Ajax.getXHR(); 973} 974 975function ajaxDisplayValidationErrors(formComponents, task, formId, data) { 976 return RSFormPro.Ajax.displayValidationErrors(formComponents, task, formId, data); 977} 978 979function ajaxValidation(form, page, parentErrorClass) { 980 return RSFormPro.Ajax.validate(form, page, parentErrorClass); 981}
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.