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