1var RSFormProCalendars = {}; 2var RSFormProPrices = {}; 3 4if (typeof RSFormPro != 'object') { 5 var RSFormPro = {}; 6} 7 8var RSFormProUtils = { 9 hasClass: function (el, name) { 10 return new RegExp('(\\s|^)' + name + '(\\s|$)').test(el.className); 11 }, 12 addClass: function(el, name) { 13 if (!RSFormProUtils.hasClass(el, name)) { 14 el.className += (el.className ? ' ' : '') + name; 15 } 16 }, 17 removeClass: function(el, name) { 18 if (RSFormProUtils.hasClass(el, name)) { 19 el.className = el.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'),' ').replace(/^\s+|\s+$/g, ''); 20 } 21 } 22}; 23 24RSFormPro.Forms = {}; 25 26function isset () { 27 // http://kevin.vanzonneveld.net 28 // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 29 // + improved by: FremyCompany 30 // + improved by: Onno Marsman 31 // + improved by: RafaÅ Kukawski 32 // * example 1: isset( undefined, true); 33 // * returns 1: false 34 // * example 2: isset( 'Kevin van Zonneveld' ); 35 // * returns 2: true 36 var a = arguments, 37 l = a.length, 38 i = 0, 39 undef; 40 41 if (l === 0) { 42 throw new Error('Empty isset'); 43 } 44 45 while (i !== l) { 46 if (a[i] === undef || a[i] === null) { 47 return false; 48 } 49 i++; 50 } 51 return true; 52} 53 54function refreshCaptcha(componentId, captchaPath) 55{ 56 if(!captchaPath) captchaPath = 'index.php?option=com_rsform&task=captcha&componentId=' + componentId; 57 document.getElementById('captcha' + componentId).src = captchaPath + '&' + Math.random(); 58 document.getElementById('captchaTxt' + componentId).value=''; 59 document.getElementById('captchaTxt' + componentId).focus(); 60} 61 62function number_format(number, decimals, dec_point, thousands_sep) 63{ 64 var n = number, prec = decimals; 65 n = !isFinite(+n) ? 0 : +n; 66 prec = !isFinite(+prec) ? 0 : Math.abs(prec); 67 var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep; 68 var dec = (typeof dec_point == "undefined") ? '.' : dec_point; 69 70 var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0; 71 72 var abs = Math.abs(n).toFixed(prec); 73 var _, i; 74 75 if (abs >= 1000) { 76 _ = abs.split(/\D/); 77 i = _[0].length % 3 || 3; 78 79 _[0] = s.slice(0,i + (n < 0)) + 80 _[0].slice(i).replace(/(\d{3})/g, sep+'$1'); 81 82 s = _.join(dec); 83 } else { 84 s = s.replace('.', dec); 85 } 86 87 return s; 88} 89 90function buildXmlHttp() 91{ 92 var xmlHttp; 93 try 94 { 95 xmlHttp=new XMLHttpRequest(); 96 } 97 catch (e) 98 { 99 try 100 { 101 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); 102 } 103 catch (e) 104 { 105 try 106 { 107 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 108 } 109 catch (e) 110 { 111 alert("Your browser does not support AJAX!"); 112 return false; 113 } 114 } 115 } 116 return xmlHttp; 117} 118 119function ajaxValidation(form, page) 120{ 121 try 122 { 123 var el = form.elements.length; 124 } 125 catch (err) 126 { 127 form = this; 128 } 129 130 var xmlHttp = buildXmlHttp(); 131 var url = ''; 132 if (typeof rsfp_ajax_url != 'undefined') { 133 url = rsfp_ajax_url; 134 } else { 135 url = 'index.php?option=com_rsform&task=ajaxValidate'; 136 } 137 138 var params = new Array(); 139 var submits = new Array(); 140 var success = false; 141 var formId = 0; 142 for (i=0; i<form.elements.length; i++) 143 { 144 // don't send an empty value 145 if (!form.elements[i].name) continue; 146 if (form.elements[i].name.length == 0) continue; 147 // check if the checkbox is checked 148 if (form.elements[i].type == 'checkbox' && form.elements[i].checked == false) continue; 149 // check if the radio is selected 150 if (form.elements[i].type == 'radio' && form.elements[i].checked == false) continue; 151 152 if (form.elements[i].type == 'submit') 153 { 154 submits.push(form.elements[i]); 155 form.elements[i].disabled = true; 156 } 157 158 // check if form is a dropdown with multiple selections 159 if (form.elements[i].type == 'select-multiple') 160 { 161 for (var j=0; j<form.elements[i].options.length; j++) 162 if (form.elements[i].options[j].selected) 163 params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].options[j].value)); 164 165 continue; 166 } 167 168 if (form.elements[i].name == 'form[formId]') 169 formId = form.elements[i].value; 170 171 params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value)); 172 } 173 174 if (typeof ajaxExtraValidationScript[formId] == 'function') { 175 ajaxExtraValidationScript[formId]('beforeSend', formId, {'url': url, 'params': params}); 176 } 177 178 if (page) { 179 params.push('page=' + page); 180 } 181 182 params = params.join('&'); 183 184 xmlHttp.open("POST", url, false); 185
186 //Send the proper header information along with the request 187 xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 188 //xmlHttp.setRequestHeader("Content-length", params.length); 189 //xmlHttp.setRequestHeader("Connection", "close"); 190 xmlHttp.send(params); 191 var success = true; 192 193 if (xmlHttp.responseText.indexOf("\n") != -1) 194 { 195 var response = xmlHttp.responseText.split("\n"); 196 // All spans set to no error 197 var ids = response[0].split(','); 198 for (var i=0; i<ids.length; i++) 199 if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i])) 200 document.getElementById('component'+ids[i]).className = 'formNoError'; 201 202 // Show errors 203 var ids = response[1].split(','); 204 for (var i=0; i<ids.length; i++) 205 if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i])) 206 { 207 document.getElementById('component'+ids[i]).className = 'formError'; 208 success = false; 209 } 210 211 if (response.length == 4) 212 { 213 page = parseInt(response[2]) - 1; 214 totalPages = parseInt(response[3]); 215 rsfp_changePage(formId, page, totalPages, false); 216 } 217 218 if (typeof ajaxExtraValidationScript[formId] == 'function') { 219 ajaxExtraValidationScript[formId]('afterSend', formId, {'url': url, 'params': params, 'response': response}); 220 } 221 } 222 223 for (var i=0; i<submits.length; i++) 224 submits[i].disabled = false; 225 226 if (success == false && document.getElementById('rsform_error_' + formId)) 227 { 228 try { 229 document.getElementById('rsform_error_' + formId).style.display = 'block'; 230 } 231 catch (err) { } 232 } 233 234 if (success == true) { 235 try { 236 document.getElementById('rsform_error_' + formId).style.display = 'none'; 237 } 238 catch (err) { } 239 } 240 241 return success; 242} 243 244var ajaxExtraValidationScript = {}; 245 246function rsfp_addEvent(obj, evType, fn){ 247 if (obj.addEventListener){ 248 obj.addEventListener(evType, fn, false); 249 return true; 250 } else if (obj.attachEvent){ 251 var r = obj.attachEvent("on"+evType, fn); 252 return r; 253 } else { 254 return false; 255 } 256} 257 258function rsfp_getForm(formId) 259{ 260 if (typeof RSFormPro.Forms[formId] == 'undefined') { 261 var formIds = document.getElementsByName('form[formId]'); 262 for (var i=0; i<formIds.length; i++) 263 { 264 if (parseInt(formIds[i].value) != parseInt(formId)) 265 continue; 266 267 var form = formIds[i].parentNode; 268 if (form.tagName == 'FORM' || form.nodeName == 'FORM') { 269 RSFormPro.Forms[formId] = form; 270 return form; 271 } 272 273 while (form.parentNode) 274 { 275 form = form.parentNode; 276 if (form.tagName == 'FORM' || form.nodeName == 'FORM') { 277 RSFormPro.Forms[formId] = form; 278 return form; 279 } 280 } 281 } 282 } 283 284 return RSFormPro.Forms[formId]; 285} 286 287function rsfp_setCalculationsEvents(formId, fields) { 288 var func = window["rsfp_Calculations" + formId]; 289 var thefields = fields ? fields : RSFormProPrices; 290 291 // Detect IE8. 292 var isIE8 = navigator.userAgent.match(/MSIE 8\.0/); 293 var event = 'click'; 294 295 for(field in thefields) { 296 field = field.replace(formId+'_',''); 297 objects = rsfp_getFieldsByName(formId,field); 298 for(i=0;i<objects.length;i++) { 299 tagName = objects[i].tagName || objects[i].nodeName; 300 301 if (tagName == 'INPUT' || tagName == 'SELECT') { 302 // IE8 fix. 303 if (tagName == 'INPUT' && isIE8 && objects[i].type && objects[i].type.toLowerCase() == 'checkbox') { 304 event = 'click'; 305 } else { 306 event = 'change'; 307 } 308 309 rsfp_addEvent(objects[i], event, function() { 310 if (typeof func == "function") { 311 func(); 312 } 313 }); 314 } 315 } 316 } 317} 318 319function rsfp_getValue(formId, name) { 320 form = rsfp_getForm(formId); 321 values = []; 322 323 if (typeof form != 'undefined') 324 { 325 for (var i=0; i<form.elements.length; i++) 326 { 327 var element = form.elements[i]; 328 var tagName = element.tagName || element.nodeName; 329 330 switch (tagName) 331 { 332 case 'INPUT': 333 if (element.type) 334 switch (element.type.toUpperCase()) 335 { 336 case 'TEXT': 337 case 'HIDDEN': 338 if (!element.name || element.name != 'form[' + name + ']') continue; 339 return element.value; 340 break; 341 342 case 'RADIO': 343 if (!element.name || element.name != 'form[' + name + ']') continue; 344 345 if (element.checked == true) { 346 values.push(element.value); 347 } 348 break; 349 350 case 'CHECKBOX': 351 if (!element.name || element.name != 'form[' + name + '][]') continue; 352 if (element.checked == true) { 353 values.push(element.value); 354 } 355 break; 356 } 357 break; 358 359 case 'SELECT': 360 if (!element.name || element.name != 'form[' + name + '][]') continue; 361 362 if (element.options) 363 for (var o=0; o<element.options.length; o++) 364 if (element.options[o].selected) 365 { 366 values.push(element.options[o].value); 367 } 368 break; 369 } 370 } 371 } 372 373 return values; 374} 375 376function rsfp_toNumber(number, decimal, thousands, decimals) { 377 // Remove decimals first 378 if (parseInt(decimals) > 0 && number.lastIndexOf(decimal) > -1) { 379 var index = number.lastIndexOf(decimal);
380 number = number.substring(0, index) + 'DECIMALS' + number.substring(index + 1); 381 } 382 383 // Remove thousands separator 384 if (number.indexOf(thousands) > -1) { 385 number = number.split(thousands).join(''); 386 } 387 388 number = number.split('DECIMALS').join('.'); 389 390 return parseFloat(number); 391} 392 393function rsfp_verifyChecked(formId, name, value) { 394 isChecked = false; 395 form = rsfp_getForm(formId); 396 397 if (typeof form != 'undefined') 398 { 399 primary_loop: 400 for (var i=0; i<form.elements.length; i++) 401 { 402 var element = form.elements[i]; 403 var tagName = element.tagName || element.nodeName; 404 405 switch (tagName) 406 { 407 case 'INPUT': 408 if (element.type) 409 switch (element.type.toUpperCase()) 410 { 411 case 'RADIO': 412 if (!element.name || element.name != 'form[' + name + ']') continue; 413 if (element.checked == true && element.value == value) 414 { 415 isChecked = true; 416 break primary_loop; 417 } 418 break; 419 420 case 'CHECKBOX': 421 if (!element.name || element.name != 'form[' + name + '][]') continue; 422 if (element.checked == true && element.value == value) 423 { 424 isChecked = true; 425 break primary_loop; 426 } 427 break; 428 } 429 break; 430 431 case 'SELECT': 432 if (!element.name || element.name != 'form[' + name + '][]') continue; 433 434 if (element.options) 435 for (var o=0; o<element.options.length; o++) 436 if (element.options[o].selected && element.options[o].value == value) 437 { 438 isChecked = true; 439 break primary_loop; 440 } 441 break; 442 } 443 } 444 } 445 446 return isChecked; 447} 448 449function rsfp_addCondition(formId, name, fnCondition) { 450 form = rsfp_getForm(formId); 451 452 if (typeof form != 'undefined') { 453 for (var i=0; i<form.elements.length; i++) { 454 var element = form.elements[i]; 455 var tagName = element.tagName || element.nodeName; 456 if (element.name && (element.name == 'form[' + name + ']' || element.name == 'form[' + name + '][]')) { 457 if (tagName == 'SELECT') { 458 rsfp_addEvent(element, 'change', function() { 459 fnCondition(); 460 }); 461 } else { 462 rsfp_addEvent(element, 'click', function() { 463 fnCondition(); 464 }); 465 } 466 } 467 } 468 } 469} 470 471function rsfp_getBlock(formId, block) { 472 form = rsfp_getForm(formId); 473 474 var possible = false; 475 476 if (typeof form != 'undefined') { 477 if (blocks = getElementsByClassName('rsform-block')) { 478 for (i=0; i<blocks.length; i++) { 479 var classes = blocks[i].className.split(' '); 480 for (c=0; c<classes.length; c++) { 481 if (classes[c] == 'rsform-block-' + block) { 482 if (blocks[i].parentNode) { 483 current_block = blocks[i]; 484 if (current_block == form) 485 return [ blocks[i] ]; 486 487 while (current_block.parentNode) { 488 current_block = current_block.parentNode; 489 if (current_block == form) 490 return [ blocks[i] ]; 491 } 492 } 493 494 possible = [ blocks[i] ]; 495 } 496 } 497 } 498 } 499 } 500 501 return possible; 502} 503 504function rsfp_getFieldsByName(formId, name) { 505 form = rsfp_getForm(formId); 506 507 var results = []; 508 509 if (typeof form != 'undefined') { 510 for (var i=0; i<form.elements.length; i++) { 511 var element = form.elements[i]; 512 pushed = false; 513 if (element.name && ( 514 // single fields 515 element.name == 'form[' + name + ']' || 516 // multiple fields 517 element.name == 'form[' + name + '][]' || 518 // new field - Birthday field 519 element.name == 'form[' + name + '][d]' || 520 element.name == 'form[' + name + '][m]' || 521 element.name == 'form[' + name + '][y]' 522 )) { 523 results.push(element); 524 pushed = true; 525 } 526 527 if (pushed) { 528 // for calendar 529 if (element.id && element.id.indexOf('txtcal') > -1) { 530 var suffix = element.id.replace('txtcal', ''); 531 results.push(document.getElementById('btn' + suffix)); 532 } 533 // for labels (radio, checkbox) 534 var labels = form.getElementsByTagName('label'); 535 for (var l=0; l<labels.length; l++) {
536 if (labels[l].htmlFor && labels[l].htmlFor == element.id) 537 results.push(labels[l]); 538 } 539 } 540 } 541 } 542 543 return results; 544} 545 546function rsfp_setDisplay(items, value) { 547 for (i=0; i<items.length; i++) 548 items[i].style.display = value; 549} 550 551function rsfp_checkValidDate(fieldName) { 552 var theDate = new Date(); 553 for (var day=1; day<=31; day++) { 554 var year = parseInt(document.getElementById(fieldName + 'y').value); 555 var month = parseInt(document.getElementById(fieldName + 'm').value) - 1; 556 557 var index = day - 1; 558 if (document.getElementById(fieldName + 'd').options[0].value == '') { 559 index++; 560 } 561 document.getElementById(fieldName + 'd').options[index].disabled = false; 562 if (!isNaN(year) && !isNaN(month)) { 563 if (typeof theDate.__msh_oldSetFullYear == 'function') { 564 theDate.__msh_oldSetFullYear(year, month, day); 565 } else { 566 theDate.setFullYear(year, month, day); 567 } 568 569 if (theDate.getDate() != day || theDate.getMonth() != month) { 570 document.getElementById(fieldName + 'd').options[index].disabled = true; 571 } 572 } 573 } 574 if (document.getElementById(fieldName + 'd').options[document.getElementById(fieldName + 'd').selectedIndex].disabled == true) { 575 for (var day=31; day>=28; day--) { 576 var index = day - 1; 577 if (document.getElementById(fieldName + 'd').options[0].value == '') { 578 index++; 579 } 580 if (document.getElementById(fieldName + 'd').options[index].disabled == false) { 581 document.getElementById(fieldName + 'd').value = day; 582 break; 583 } 584 } 585 } 586} 587 588function rsfp_geolocation(term, id, mapid, map, marker, geocoder, type) { 589 var content = document.getElementById('rsform_geolocation'+id); 590 var address = document.getElementById(mapid).clientWidth; 591 592 document.getElementById('rsform_geolocation'+id).style.width = address+'px'; 593 document.getElementById('rsform_geolocation'+id).style.display = 'none'; 594 document.getElementById('rsform_geolocation'+id).innerHTML = ''; 595 596 if (term != '') { 597 geocoder.geocode( {'address': term }, function(results, status) { 598 if (status == 'OK') { 599 for (var i=0; i<results.length; i++) { 600 var item = results[i]; 601 var theli = document.createElement('li'); 602 var thea = document.createElement('a'); 603 604 thea.setAttribute('href','javascript:void(0)'); 605 thea.innerHTML = item.formatted_address; 606 607 rsfp_addEvent(thea,'click', (function() { 608 var mapValue = type ? item.formatted_address : item.geometry.location.lat().toFixed(5) + ',' + item.geometry.location.lng().toFixed(5); 609 var mapId = mapid; 610 var location = new google.maps.LatLng(item.geometry.location.lat().toFixed(5), item.geometry.location.lng().toFixed(5)); 611 612 return function() { 613 document.getElementById(mapId).value = mapValue; 614 marker.setPosition(location); 615 map.setCenter(location); 616 document.getElementById('rsform_geolocation'+id).style.display = 'none'; 617 } 618 })()); 619 620 theli.appendChild(thea); 621 content.appendChild(theli); 622 } 623 624 document.getElementById('rsform_geolocation'+id).style.display = ''; 625 } 626 }); 627 } 628} 629 630function rsfp_runAllConditions(formId) { 631 var func = window["rsfp_runAllConditions" + formId]; 632 if (typeof func == "function") { 633 func(); 634 } 635} 636 637/* 638 Developed by Robert Nyman, http://www.robertnyman.com 639 Code/licensing: http://code.google.com/p/getelementsbyclassname/ 640*/ 641var getElementsByClassName = function (className, tag, elm){ 642 if (document.getElementsByClassName) { 643 getElementsByClassName = function (className, tag, elm) { 644 elm = elm || document; 645 var elements = elm.getElementsByClassName(className), 646 nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null, 647 returnElements = [], 648 current; 649 for(var i=0, il=elements.length; i<il; i+=1){ 650 current = elements[i]; 651 if(!nodeName || nodeName.test(current.nodeName)) { 652 returnElements.push(current); 653 } 654 } 655 return returnElements; 656 }; 657 } 658 else if (document.evaluate) { 659 getElementsByClassName = function (className, tag, elm) { 660 tag = tag || "*"; 661 elm = elm || document; 662 var classes = className.split(" "), 663 classesToCheck = "", 664 xhtmlNamespace = "http://www.w3.org/1999/xhtml", 665 namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null, 666 returnElements = [], 667 elements, 668 node; 669 for(var j=0, jl=classes.length; j<jl; j+=1){ 670 classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"; 671 } 672 try { 673 elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null); 674 } 675 catch (e) { 676 elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null); 677 } 678 while ((node = elements.iterateNext())) { 679 returnElements.push(node); 680 } 681 return returnElements; 682 }; 683 } 684 else { 685 getElementsByClassName = function (className, tag, elm) { 686 tag = tag || "*"; 687 elm = elm || document; 688 var classes = className.split(" "), 689 classesToCheck = [], 690 elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag), 691 current, 692 returnElements = [], 693 match; 694 for(var k=0, kl=classes.length; k<kl; k+=1){ 695 classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)")); 696 } 697 for(var l=0, ll=elements.length; l<ll; l+=1){ 698 current = elements[l]; 699 match = false; 700 for(var m=0, ml=classesToCheck.length; m<ml; m+=1){ 701 match = classesToCheck[m].test(current.className); 702 if (!match) { 703 break; 704 } 705 } 706 if (match) { 707 returnElements.push(current); 708 } 709 } 710 return returnElements; 711 }; 712 } 713 return getElementsByClassName(className, tag, elm); 714}; 715 716function rsfp_changePage(formId, page, totalPages, validate) 717{ 718 if (validate) 719 { 720 var form = rsfp_getForm(formId); 721 if (!ajaxValidation(form, page)) 722 return false; 723 } 724 725 for (var i=0; i<=totalPages; i++) 726 { 727 var thePage = document.getElementById('rsform_' + formId + '_page_' + i); 728 if (thePage)
729 rsfp_hidePage(thePage); 730 } 731 732 var thePage = document.getElementById('rsform_' + formId + '_page_' + page); 733 if (thePage) 734 { 735 rsfp_showPage(thePage); 736 try { 737 var func = window["rsfp_showProgress_" + formId]; 738 if (typeof func == "function") { 739 func(page); 740 } 741 } 742 catch (err) { } 743 } 744} 745 746function rsfp_hidePage(thePage) { 747 RSFormProUtils.addClass(thePage, 'formHidden'); 748} 749 750function rsfp_showPage(thePage) { 751 RSFormProUtils.removeClass(thePage, 'formHidden'); 752}
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.