var RSFormProCalendars = {}; var RSFormProPrices = {}; var ajaxExtraValidationScript = {}; var RSClickedSubmitElement = false; if (typeof RSFormPro != 'object') { var RSFormPro = {}; } RSFormPro.Forms = {}; RSFormPro.Editors = {}; RSFormPro.scrollToError = false; RSFormPro.usePositioning = false; /* Handle HTML5 form fields validation for the forms without AjaxValidation enabled */ RSFormPro.setHTML5Validation = function (formId, isDisabledSubmit, errorClasses, totalPages) { var parentErrorClass = errorClasses.parent; var fieldErrorClass = errorClasses.field; var submitElement = RSFormPro.getElementByType(formId, 'submit'); var i, j; for (i = 0; i < submitElement.length; i++) { if (RSFormProUtils.hasClass(submitElement[i],'rsform-submit-button')) { RSFormProUtils.addEvent(submitElement[i], 'click', (function (event) { errorElements = RSFormPro.HTML5.validation(formId); if (errorElements.length) { var errorPagesFound = []; for (j = 0; j < errorElements.length; j++) { RSFormProUtils.addClass(errorElements[j], 'rsform-error'); if (document.getElementById('component' + errorElements[j].componentId)) { document.getElementById('component' + errorElements[j].componentId).className = 'formError'; } if (parentErrorClass) { try { var block = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(errorElements[j].field.getAttribute('id'))); RSFormProUtils.addClass(block[0], parentErrorClass); } catch (err) {} } if (totalPages > 0) { errorPagesFound.push(errorElements[j].page); } } if (totalPages > 0 && errorPagesFound.length) { var firstErrorPage = Math.min.apply(null, errorPagesFound); RSFormPro.Pages.change(formId, firstErrorPage, totalPages, false, errorClasses) } if (RSFormPro.scrollToError){ RSFormPro.gotoErrorElement(formId); } if (isDisabledSubmit) { for (j = 0; j < submitElement.length; j++) { submitElement[j].disabled = false; } } event.preventDefault(); } else { if (isDisabledSubmit) { RSFormPro.submitForm(this.form); } } })); } } }; RSFormPro.formEvents = {}; RSFormPro.addFormEvent = function(formId, func) { if (typeof RSFormPro.formEvents[formId] !== 'object') { RSFormPro.formEvents[formId] = []; } RSFormPro.formEvents[formId].push(func); }; RSFormPro.submitForm = function(form) { var formId = form.elements['form[formId]'].value; var func; if (typeof RSFormPro.formEvents[formId] === 'object' && RSFormPro.formEvents[formId].length > 0) { if (func = RSFormPro.formEvents[formId].shift()) { if (typeof func === 'function') { func(); return false; } } } // if the submit button or any other element has the id submit the form.submit() function is overwritten if (typeof form.submit === 'function') { form.submit(); } else { document.createElement('form').submit.call(form) } }; /* Disable the submit button when form is submitted functions */ RSFormPro.setDisabledSubmit = function(formId, ajaxValidation){ if (!ajaxValidation) { var i, j; var submitElement = RSFormPro.getElementByType(formId, 'submit'); for (i = 0; i < submitElement.length; i++) { if (RSFormProUtils.hasClass(submitElement[i],'rsform-submit-button')) { RSFormProUtils.addEvent(submitElement[i],'click', (function(event) { event.preventDefault(); for (j = 0; j < submitElement.length; j++) { submitElement[j].disabled = true; } })); } } } }; /* Thank You Message in Popup Window functions */ RSFormPro.showThankYouPopup = function (thankYouContainer){ var content = thankYouContainer.innerHTML; var gotoUrl = thankYouContainer.querySelector('#rsfp-thankyou-popup-return-link').value; // remove the html part from the layout thankYouContainer.parentNode.removeChild( thankYouContainer ); document.body.className = document.body.className+' rsfp_popup_activated'; document.body.innerHTML += '
×
'+content+'
'; var popupWindowHeight = document.getElementById('rsfp_thankyou_popup_inner').offsetHeight; var windowHeight = window.innerHeight; var marginTop = (windowHeight - popupWindowHeight) / 2; document.getElementById('rsfp_thankyou_popup_inner').style.marginTop = marginTop+'px'; }; RSFormPro.accessLink = function(event,link) { var clickedElementClass = event.target.className; if (clickedElementClass == 'rsfp_thankyou_popup_outer' || clickedElementClass == 'rsfp_thankou_popup_close_btn') { if (link.length > 0) { document.location = link; } else { document.location.reload(); } } }; /* Scroll to first error element */ RSFormPro.gotoErrorElement = function(formId){ var form = RSFormPro.getForm(formId); var errorElements = form.getElementsByClassName('formError'); if (errorElements.length) { var block = RSFormPro.findAncestor(errorElements[0], 'rsform-block'); if (block) { RSFormPro.scrollToElement(block); } else { RSFormPro.scrollToElement(errorElements[0]); } } }; RSFormPro.findAncestor = function(el, cls){ while(el = el.parentElement) { var elementClasses = el.className; elementClasses = elementClasses.split(' '); if (elementClasses.indexOf(cls) >= 0) { return el; } } return false; }; /* ScrollTo functions */ RSFormPro.scrollToElement = function(element){ var to = element.offsetTop; var scrollTop = window.pageYOffset || document.documentElement.scrollTop; var documentView = window.innerHeight + scrollTop; // this is more specific for the modern browsers if (typeof element.getBoundingClientRect == 'function') { to = element.getBoundingClientRect().top + scrollTop; } if (to < scrollTop || to > documentView) { RSFormPro.scrollTo(to, 300); } }; RSFormPro.scrollTo = function(to, duration) { if (duration <= 0) return; var elementScrollTop = window.pageYOffset ? window.pageYOffset : document.documentElement.scrollTop; var difference = to - elementScrollTop; var perTick = difference / duration * 10; setTimeout(function() { var limitControl; limitControl = window.pageYOffset ? window.pageYOffset : document.documentElement.scrollTop; limitControl = limitControl + perTick; window.scrollTo(0, limitControl); // if the element has been reached or the scroll is at the bottom of the page no need to continue if (limitControl == to) return; RSFormPro.scrollTo(to, duration - 10); }, 10); }; /* Field specific functions */ RSFormPro.refreshCaptcha = function(componentId, captchaPath) { if (!captchaPath) { captchaPath = 'index.php?option=com_rsform&task=captcha&format=image&componentId=' + componentId; } document.getElementById('captcha' + componentId).src = captchaPath + '&' + Math.random(); document.getElementById('captchaTxt' + componentId).value = ''; document.getElementById('captchaTxt' + componentId).focus(); }; RSFormPro.initGeoLocation = function(term, id, mapid, map, marker, geocoder, type) { var content = document.getElementById('rsform_geolocation'+id); var address = document.getElementById(mapid).clientWidth; document.getElementById('rsform_geolocation'+id).style.width = address+'px'; document.getElementById('rsform_geolocation'+id).style.display = 'none'; document.getElementById('rsform_geolocation'+id).innerHTML = ''; if (term != '') { geocoder.geocode( {'address': term }, function(results, status) { if (status == 'OK') { for (var i=0; i= 28; day--) { index = day - 1; if (document.getElementById(fieldName + 'd').options[0].value == '') { index++; } if (document.getElementById(fieldName + 'd').options[index].disabled == false) { document.getElementById(fieldName + 'd').value = day; break; } } } }; RSFormPro.addMoreFiles = function(button) { var clone = button.previousSibling.cloneNode(true); var inputs = clone.getElementsByTagName('input'); if (inputs.length) { for (var i = 0; i < inputs.length; i++) { if (inputs[i].type && inputs[i].type.toUpperCase() === 'FILE') { var fieldName = inputs[i].getAttribute('id'); inputs[i].value = ''; } } } var images = clone.getElementsByTagName('img'); if (images.length) { for (var j = 0; j < images.length; j++) { if (RSFormProUtils.hasClass(images[j], 'rsfp-image-polaroid')) { images[j].parentNode.parentNode.removeChild(images[j].parentNode); } } } button.parentNode.appendChild(clone); var maxFiles = parseInt(button.getAttribute('data-rsfp-maxfiles')); if (maxFiles > 0) { if (RSFormPro.getFieldsByName(button.getAttribute('data-rsfp-formid'), fieldName).length / 2 >= maxFiles) { button.disabled = true; } } }; RSFormPro.loadImage = function(input) { if ('files' in input && typeof FileReader === 'function') { var file, reader; var images = input.parentNode.querySelectorAll('.rsfp-image-container'); for (var j = 0; j < images.length; j++) { images[j].parentNode.removeChild(images[j]); } for (var i = 0; i < input.files.length; i++) { file = input.files[i]; reader = new FileReader(); reader.onload = function(e) { var div = document.createElement('div'); div.setAttribute('class', 'rsfp-image-container'); var img = document.createElement('img'); img.setAttribute('src', e.target.result); img.setAttribute('alt', file.name); img.setAttribute('title', file.name); img.setAttribute('class', 'rsfp-image-polaroid'); img.onerror = function() { img.src = "data:image/svg+xml,%3Csvg role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='currentColor' d='M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z'%3E%3C/path%3E%3C/svg%3E"; img.onclick = false; }; img.onclick = function() { var modal = document.createElement('div'); modal.setAttribute('class', 'rsfp-modal'); var close = document.createElement('span'); close.innerHTML = '×'; close.setAttribute('class', 'rsfp-modal-close-button'); modal.onclick = close.onclick = function() { modal.parentNode.removeChild(modal); }; var img = document.createElement('img'); img.setAttribute('class', 'rsfp-modal-image'); img.setAttribute('src', this.getAttribute('src')); var caption = document.createElement('div'); caption.setAttribute('class', 'rsfp-modal-caption'); caption.innerHTML = this.getAttribute('alt'); modal.appendChild(close); modal.appendChild(img); modal.appendChild(caption); document.getElementsByTagName('body')[0].appendChild(modal); modal.style.display = 'block'; }; div.appendChild(img); input.parentNode.insertBefore(div, input.nextSibling); }; reader.readAsDataURL(file); } } }; /* Number functions */ RSFormPro.formatNumber = function(number, decimals, dec_point, thousands_sep) { var n = number, prec = decimals; n = !isFinite(+n) ? 0 : +n; prec = !isFinite(+prec) ? 0 : Math.abs(prec); var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep; var dec = (typeof dec_point == "undefined") ? '.' : dec_point; var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0; var abs = Math.abs(n).toFixed(prec); var _, i; if (abs >= 1000) { _ = abs.split(/\D/); i = _[0].length % 3 || 3; _[0] = s.slice(0,i + (n < 0)) + _[0].slice(i).replace(/(\d{3})/g, sep+'$1'); s = _.join(dec); } else { s = s.replace('.', dec); } return s; }; RSFormPro.toNumber = function(number, decimal, thousands, decimals) { // Remove decimals first if (parseInt(decimals) > 0 && number.lastIndexOf(decimal) > -1) { var index = number.lastIndexOf(decimal); number = number.substring(0, index) + 'DECIMALS' + number.substring(index + 1); } // Remove thousands separator if (number.indexOf(thousands) > -1) { number = number.split(thousands).join(''); } number = number.split('DECIMALS').join('.'); return parseFloat(number); }; /* Form and element functions */ RSFormPro.getForm = function(formId) { if (typeof RSFormPro.Forms[formId] == 'undefined') { var formIds = document.getElementsByName('form[formId]'); for (var i=0; i -1) { var suffix = element.id.replace('txtcal', ''); if (document.getElementById('btn' + suffix)) { results.push(document.getElementById('btn' + suffix)); } } // for labels (radio, checkbox) var labels = form.getElementsByTagName('label'); for (var l=0; l 0) { result = current + '/' + element.maxLength; } else { result = current; } document.getElementById('rsfp-counter-' + id).innerText = result; }; RSFormPro.limitSelections = function(formId, field, max) { RSFormProUtils.addEvent(window, 'load', function() { var fields = RSFormPro.getFieldsByName(formId, field); var objects = []; var i; var tagName; if (!fields || !fields.length) { return; } for (i = 0; i < fields.length; i++) { tagName = fields[i].tagName || fields[i].nodeName; tagName = tagName.toUpperCase(); if (tagName === 'INPUT' && fields[i].type && fields[i].type.toUpperCase() === 'CHECKBOX' && !fields[i].disabled) { objects.push(fields[i]); } } if (!objects.length) { return; } function limitSelections() { var values = RSFormProUtils.getChecked(objects); RSFormProUtils.remAttr(objects, 'disabled'); if (values && values.length > 0 && values.length >= max) { RSFormProUtils.setAttr(RSFormProUtils.getUnchecked(objects), 'disabled', true); } } for (i = 0; i < objects.length; i++) { RSFormProUtils.addEvent(objects[i], 'change', limitSelections); } limitSelections(); }); }; /*HTML5 simulators*/ RSFormPro.HTML5 = { validation: function(formId){ var form = RSFormPro.getForm(formId); var errorElements = []; var html5types = ['number', 'email', 'range', 'url', 'tel']; var checkValidityExists = true; var page = 0; if (form.elements.length) { for (i=0; i= 0){ var countCommas = 0; var pos = onclick.indexOf(','); while (pos > -1) { ++countCommas; pos = onclick.indexOf(',', ++pos); } if (countCommas > 2) { page++; } } } if (html5types.indexOf(form.elements[i].type) >= 0) { if ( typeof(form.elements[i].checkValidity) == "function" && checkValidityExists) { if (!form.elements[i].checkValidity()) { var elementObj = { field: form.elements[i], page: page }; // try to get the componentId var componentId = RSFormPro.HTML5.getComponentId(formId, form.elements[i].getAttribute('id')); if (componentId) { elementObj.componentId = componentId; } errorElements.push(elementObj); } } else { checkValidityExists = false; } } } } return errorElements; }, componentIds: {}, getComponentId: function(formId, elementAlias) { if (typeof RSFormPro.HTML5.componentIds[formId] == 'undefined') { RSFormPro.HTML5.componentIds[formId] = {}; } if (typeof RSFormPro.HTML5.componentIds[formId][elementAlias] == 'undefined') { var block = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(elementAlias)); var componentIdBlock = RSFormProUtils.getElementsByClassName('formNoError', 'span', block[0]); if (componentIdBlock.length) { var componentId = componentIdBlock[0].getAttribute('id'); RSFormPro.HTML5.componentIds[formId][elementAlias] = componentId.replace('component', ''); } else { RSFormPro.HTML5.componentIds[formId][elementAlias] = false; } } return RSFormPro.HTML5.componentIds[formId][elementAlias]; } }; /* Pagination functions */ RSFormPro.Pages = { change: function(formId, page, totalPages, validate, errorClasses) { // callback functions if next page is clicked var direction = RSFormPro.Pages.checkDirection(formId, page); if (direction == 'next') { RSFormPro.callbacks.runCallback(formId, 'nextPage'); } RSFormPro.callbacks.runCallback(formId, 'changePage'); var thePage; if (validate) { var form = RSFormPro.getForm(formId); if (!RSFormPro.Ajax.validate(form, page, errorClasses, totalPages)) { return false; } } for (var i = 0; i <= totalPages; i++) { thePage = document.getElementById('rsform_' + formId + '_page_' + i); if (thePage) { rsfp_hidePage(thePage); } } thePage = document.getElementById('rsform_' + formId + '_page_' + page); if (thePage) { rsfp_showPage(thePage); try { var func = window["rsfp_showProgress_" + formId]; if (typeof func == "function") { func(page); } } catch (err) {} } }, hide: function(thePage) { RSFormProUtils.addClass(thePage, 'formHidden'); }, show: function(thePage) { RSFormProUtils.removeClass(thePage, 'formHidden'); }, checkDirection : function(formId, page) { var base = RSFormPro.Pages; if (typeof base.history[formId] == 'undefined') { base.history[formId] = page; return 'next'; } else { var direction; if (base.history[formId] <= page ) { direction = 'next'; } else { direction = 'prev'; } base.history[formId] = page; return direction; } }, history: {} }; /* Condition functions */ RSFormPro.Conditions = { add: function(formId, name, fnCondition) { var form = RSFormPro.getForm(formId); if (typeof form != 'undefined') { for (var i = 0; i < form.elements.length; i++) { var element = form.elements[i]; if (element.name && (element.name == 'form[' + name + ']' || element.name == 'form[' + name + '][]')) { RSFormProUtils.addEvent(element, 'change', function() { fnCondition(); }); } } } }, run: function(condition) { var formId = condition.form_id, conditions = [], items = [], detail, isChecked, displayValue, match; if (typeof condition.details === 'object') { for (var i = 0; i < condition.details.length; i++) { detail = condition.details[i]; isChecked = RSFormPro.isChecked(formId, detail.ComponentName, detail.value); conditions.push(isChecked === (detail.operator === 'is')); } if (parseInt(condition.block) === 1) { items = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(condition.ComponentName)); } else { items = RSFormPro.getFieldsByName(formId, condition.ComponentName); } if (items.length > 0) { if (condition.condition === 'all') { // && conditions need all elements of the Array to be true -> no false in Array match = conditions.indexOf(false) === -1; } else { // || conditions need only one element to be true -> one true in array match = conditions.indexOf(true) > -1; } if (match) { displayValue = condition.action === 'show' ? '' : 'none'; } else { displayValue = condition.action === 'show' ? 'none' : ''; } RSFormProUtils.setDisplay(items, displayValue); if (displayValue === 'none') { RSFormPro.resetValues(RSFormPro.getFieldsByName(formId, condition.ComponentName)); } } } }, runAll: function(formId) { var func = window["rsfp_runAllConditions" + formId]; if (typeof func == "function") { func(); } }, addReset: function(formId) { var resetElements = RSFormPro.getElementByType(formId, 'reset'); if (resetElements.length > 0) { for (var i = 0; i < resetElements.length; i++) { RSFormProUtils.addEvent(resetElements[i], 'click', function() { window.setTimeout(function() { RSFormPro.Conditions.runAll(formId); }, 1); }); } } }, delayRun: function(formId) { var func = window["rsfp_runAllConditions" + formId]; if (typeof func == "function") { RSFormProUtils.addEvent(window, 'load', func); } } }; /* Calculation functions */ RSFormPro.Calculations = { toDays: function(seconds) { return Math.round(parseFloat(seconds) / 86400); }, toHours: function(seconds) { return Math.round(parseFloat(seconds) / 86400 * 24); }, addEvents: function(formId, fields) { RSFormProUtils.addEvent(window, 'load', function(){ RSFormPro.Calculations._addEvents(formId, fields); }); }, _addEvents: function(formId, fields) { var func = window["rsfp_Calculations" + formId]; var thefields = fields ? fields : RSFormProPrices; var event = 'change'; var resetElements = RSFormPro.getElementByType(formId, 'reset'); if (resetElements.length > 0) { for (var i = 0; i < resetElements.length; i++) { RSFormProUtils.addEvent(resetElements[i], 'click', function() { if (typeof func == "function") { window.setTimeout(func, 1); } }); } } for (var field in thefields) { if (!thefields.hasOwnProperty(field)) { continue; } field = field.replace(formId+'_',''); objects = RSFormPro.getFieldsByName(formId,field); for(i = 0; i < objects.length;i++) { tagName = objects[i].tagName || objects[i].nodeName; if (tagName == 'INPUT' || tagName == 'SELECT') { event = 'change'; if (tagName == 'INPUT' && typeof objects[i].type == 'string') { switch (objects[i].type.toUpperCase()) { default: event = 'change'; break; case 'NUMBER': case 'TEXT': event = 'input'; if (typeof RSFormPro.jQueryCalendar != 'undefined' && typeof RSFormPro.jQueryCalendar.calendars[formId] != 'undefined' && typeof RSFormPro.jQueryCalendar.calendars[formId][field] != 'undefined') { RSFormPro.jQueryCalendar.calendars[formId][field].calendarInstance.setOptions({onChangeDateTime: function() { if (typeof func == "function") { func(); } }}); } if (typeof RSFormPro.YUICalendar != 'undefined' && typeof RSFormPro.YUICalendar.calendars[formId] != 'undefined' && typeof RSFormPro.YUICalendar.calendars[formId][field] != 'undefined') { RSFormPro.YUICalendar.calendars[formId][field].selectEvent.subscribe(function() { if (typeof func == "function") { func(); } }, RSFormPro.YUICalendar.calendars[formId][field], true); } break; } } RSFormProUtils.addEvent(objects[i], event, function() { if (typeof func == "function") { func(); } }); } } } } }; /* AJAX functions */ RSFormPro.Ajax = { Wait: false, URL: false, Params: {}, getParamsObject: function() { return { vars: [], push: function(str) { return this.vars.push(str); }, indexOf: function(str) { return this.vars.join('&').indexOf(str); }, replace: function(r, w) { this.vars = this.vars.join('&').replace(r, w).split('&'); return this.vars.join('&'); }, toString: function() { return this.vars.join('&'); } }; }, getXHR: function() { try { return new window.XMLHttpRequest(); } catch ( e ) {} }, getXHRLegacy: function() { return { send: function(data) { if (data === RSFormPro.Ajax.Params) { data = data.toString(); } return RSFormPro.Ajax.xhr.send(data); } } }, displayValidationErrors: function(formComponents, task, formId, data) { if (task == 'afterSend') { var ids, i, j, id, formComponent, firstErrorElement, elementBlock; ids = data.response[0].split(','); for (i = 0; i < ids.length; i++) { id = parseInt(ids[i]); if (!isNaN(id) && typeof formComponents[id] != 'undefined') { formComponent = RSFormPro.getFieldsByName(formId, formComponents[id]); if (formComponent && formComponent.length > 0) { for (j = 0; j < formComponent.length; j++) { if (formComponent[j]) { RSFormProUtils.removeClass(formComponent[j], 'rsform-error'); if (typeof data.parentErrorClass != 'undefined' && data.parentErrorClass.length > 0) { try { elementBlock = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(formComponents[id])); RSFormProUtils.removeClass(elementBlock[0], data.parentErrorClass); } catch (err) {} } if (typeof data.fieldErrorClass != 'undefined' && data.fieldErrorClass.length > 0) { try { results = RSFormPro.getFieldsByName(formId, formComponents[id]); if (results.length > 0) { for (var r = 0; r < results.length; r++) { RSFormProUtils.removeClass(results[r], data.fieldErrorClass); } } } catch (err) {} } } } } } } ids = data.response[1].split(','); var doScroll = false; var doFocus = false; for (i = 0; i < ids.length; i++) { id = parseInt(ids[i]); if (isNaN(id)) { continue; } if (typeof formComponents[id] == 'undefined') { continue; } formComponent = RSFormPro.getFieldsByName(formId, formComponents[id]); if (!formComponent || formComponent.length < 1) { continue; } for (j = 0; j < formComponent.length; j++) { if (formComponent[j]) { RSFormProUtils.addClass(formComponent[j], 'rsform-error'); if (!doScroll) { doScroll = true; } if (typeof data.parentErrorClass != 'undefined' && data.parentErrorClass.length > 0) { try { elementBlock = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(formComponents[id])); RSFormProUtils.addClass(elementBlock[0], data.parentErrorClass); } catch (err) {} } try { results = RSFormPro.getFieldsByName(formId, formComponents[id]); if (results.length > 0) { for (var r = 0; r < results.length; r++) { if (typeof data.fieldErrorClass != 'undefined' && data.fieldErrorClass.length > 0) { RSFormProUtils.addClass(results[r], data.fieldErrorClass); } if (!doFocus) { results[r].focus(); doFocus = true; } } } } catch (err) {} } } } // scroll to first error elment if (RSFormPro.scrollToError && doScroll){ RSFormPro.gotoErrorElement(formId); } } }, validate: function(form, page, errorClasses, totalPages) { try { var el = form.elements.length; } catch (err) { form = this; } RSFormPro.Ajax.xhr = RSFormPro.Ajax.getXHR(); RSFormPro.Ajax.xmlHttp = RSFormPro.Ajax.getXHRLegacy(); var url = 'index.php?option=com_rsform&task=ajaxValidate'; if (typeof RSFormPro.Ajax.URL == 'string') { url = RSFormPro.Ajax.URL; } RSFormPro.Ajax.Params = RSFormPro.Ajax.getParamsObject(); var submits = [], errorFields = [], success = false, formId = form.elements['form[formId]'].value, totalJSDetectedPages = 0, i, j; // File uploads AJAX validation variabiles var ajaxSkippedFileUploads = [], filesLength = 0, filesCollection = [], identicalFiles = []; if (typeof errorClasses != 'object') { errorClasses = {'parent': '', 'field': ''} } for (i=0; i -1 || onclick.indexOf('RSFormPro.Pages.change') > -1)) { var countCommas = 0; var pos = onclick.indexOf(','); while (pos > -1) { ++countCommas; pos = onclick.indexOf(',', ++pos); } if (countCommas > 2) { totalJSDetectedPages++; } } } // don't send an empty value if (!form.elements[i].name) continue; if (form.elements[i].name.length == 0) continue; // check if the checkbox is checked if (form.elements[i].type == 'checkbox' && form.elements[i].checked == false) continue; // check if the radio is selected if (form.elements[i].type == 'radio' && form.elements[i].checked == false) continue; if (form.elements[i].type == 'submit' && form.elements[i].getAttribute('data-disableonsubmit') == '1') { submits.push(form.elements[i]); form.elements[i].disabled = true; } // check if form is a dropdown with multiple selections if (form.elements[i].type == 'select-multiple') { for (j = 0; j < form.elements[i].options.length; j++) { if (form.elements[i].options[j].selected) { RSFormPro.Ajax.Params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].options[j].value)); } } continue; } if (form.elements[i].type == 'file') { if ('files' in form.elements[i]) { try { if (RSFormPro.usePositioning) { if (form.elements[i].offsetParent !== document.getElementsByTagName('body')[0]) { throw 'CONDITIONAL_HIDDEN'; } } else { if (form.elements[i].offsetParent === null) { throw 'CONDITIONAL_HIDDEN'; } } if (form.elements[i].getAttribute('data-rsfp-skip-ajax') === 'true') { // Not already processed if (ajaxSkippedFileUploads.indexOf(form.elements[i].name) === -1) { // All fields are identical, make sure this code is only run once. ajaxSkippedFileUploads.push(form.elements[i].name); // Get all identical fields identicalFiles = form.elements[form.elements[i].name]; filesLength = 0; filesCollection = []; for (var tmp = 0; tmp < identicalFiles.length; tmp++) { if (identicalFiles[tmp].files.length > 0) { filesLength += identicalFiles[tmp].files.length; filesCollection = filesCollection.concat(identicalFiles[tmp].files[0]); } } } else { throw 'AJAX_SKIPPED_FILE_UPLOAD'; } } else { filesLength = form.elements[i].files.length; filesCollection = form.elements[i].files; } if (filesLength === 0 && form.elements[i].getAttribute('data-rsfp-required') === 'true') { throw new RSFormPro.validationError('VALIDATION_ERROR', RSFormPro.Translations.translate(formId, form.elements[i].getAttribute('id'), 'VALIDATIONMESSAGE')); } if (form.elements[i].getAttribute('data-rsfp-required') === 'true' || filesLength > 0) { if (form.elements[i].getAttribute('data-rsfp-minfiles')) { var minFiles = parseInt(form.elements[i].getAttribute('data-rsfp-minfiles')); if (filesLength < minFiles) { throw new RSFormPro.validationError('VALIDATION_ERROR', RSFormProUtils.sprintf(RSFormPro.Translations.translate(formId, form.elements[i].getAttribute('id'), 'COM_RSFORM_MINFILES_REQUIRED'), minFiles)); } } if (form.elements[i].getAttribute('data-rsfp-maxfiles')) { var maxFiles = parseInt(form.elements[i].getAttribute('data-rsfp-maxfiles')); if (filesLength > maxFiles) { throw new RSFormPro.validationError('VALIDATION_ERROR', RSFormProUtils.sprintf(RSFormPro.Translations.translate(formId, form.elements[i].getAttribute('id'), 'COM_RSFORM_MAXFILES_REQUIRED'), maxFiles)); } } } for (var f = 0; f < filesLength; f++) { var file = filesCollection[f]; var maxSize = parseInt(form.elements[i].getAttribute('data-rsfp-size')); if ('size' in file && maxSize > 0) { if (file.size > maxSize) { throw new RSFormPro.validationError('VALIDATION_ERROR', RSFormProUtils.sprintf(RSFormPro.Translations.translate(formId, form.elements[i].getAttribute('id'), 'COM_RSFORM_FILE_EXCEEDS_LIMIT'), file.name, maxSize / 1024)); } } if ('name' in file) { var exts = form.elements[i].getAttribute('data-rsfp-exts'); if (exts) { exts = JSON.parse(exts); var ext = file.name.slice((file.name.lastIndexOf(".") - 1 >>> 0) + 2); if (exts.indexOf(ext.toLowerCase()) === -1) { throw new RSFormPro.validationError('VALIDATION_ERROR', RSFormProUtils.sprintf(RSFormPro.Translations.translate(formId, form.elements[i].getAttribute('id'), 'COM_RSFORM_FILE_EXTENSION_NOT_ALLOWED'), file.name)); } } } } } catch (error) { if (typeof error === 'object') { if (error.toString() === 'VALIDATION_ERROR') { var parents = RSFormProUtils.getParents(form.elements[i]), page_number, parent; if (parents.length > 0) { for (var p = 0; p < parents.length; p++) { parent = parents[p]; if ('getAttribute' in parent) { var hasId = parents[p].getAttribute('id'); var pageId = 'rsform_' + formId + '_page_'; if (hasId && hasId.indexOf(pageId) === 0) { page_number = hasId.slice(pageId.length); break; } } } } var elementObj = { field: form.elements[i], page: page_number }; // try to get the componentId var componentId = RSFormPro.HTML5.getComponentId(formId, form.elements[i].getAttribute('id')); if (componentId) { elementObj.componentId = componentId; if (document.getElementById('component' + componentId) && error.message.length > 0) { document.getElementById('component' + componentId).innerText = error.message; } } errorFields.push(elementObj); } } } } } if (form.elements[i].type !== 'file') { if (typeof RSFormPro.Editors[form.elements[i].name] === 'function') { RSFormPro.Ajax.Params.push(form.elements[i].name + '=' + encodeURIComponent(RSFormPro.Editors[form.elements[i].name]())); } else { RSFormPro.Ajax.Params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value)); } } } errorFields = errorFields.concat(RSFormPro.HTML5.validation(formId)); if (page) { RSFormPro.Ajax.Params.push('page=' + page); } RSFormPro.Ajax.xhr.open("POST", url, true); //Send the proper header information along with the request RSFormPro.Ajax.xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); if (typeof ajaxExtraValidationScript[formId] == 'function') { ajaxExtraValidationScript[formId]('beforeSend', formId, {'url': url, 'params': RSFormPro.Ajax.Params}); } if (!RSFormPro.Ajax.Wait) { // B/C layer RSFormPro.Ajax.xmlHttp.send(RSFormPro.Ajax.Params); } success = true; RSFormPro.Ajax.xhr.onreadystatechange = function() { if (RSFormPro.Ajax.xhr.readyState === 4 && RSFormPro.Ajax.xhr.status === 200) { try { var RSFormProResponse = JSON.parse(RSFormPro.Ajax.xhr.responseText); } catch (error) { // Parse invalid data if (typeof RSFormProResponse !== 'object') { var match = RSFormPro.Ajax.xhr.responseText.match(/{.*}/); if (match.length > 0) { RSFormProResponse = JSON.parse(match[0]); } } } var response = []; var ids; var i; if (typeof RSFormProResponse.formComponents !== 'undefined') { // All spans set to no error ids = RSFormProResponse.formComponents; for (i = 0; i < ids.length; i++) { if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i])) { document.getElementById('component'+ids[i]).className = 'formNoError'; } } // Legacy response.push(RSFormProResponse.formComponents.join(',')); } if (typeof RSFormProResponse.invalidComponents === 'undefined') { RSFormProResponse.invalidComponents = []; } // add the HTML5 elements with errors var errorOnPage; if (errorFields.length) { for (i = 0; i < errorFields.length; i++) { if (typeof errorFields[i].componentId !== 'undefined') { if (typeof page === 'undefined' || (page - 1) == errorFields[i].page) { RSFormProResponse.invalidComponents.push(errorFields[i].componentId); if (typeof errorOnPage !== 'undefined') { errorOnPage = errorFields[i].page < errorOnPage ? errorFields[i].page : errorOnPage; } else { errorOnPage = errorFields[i].page; } } } } } // Show errors var errorComponents = []; var errorMessageContainer; for (i = 0; i < RSFormProResponse.invalidComponents.length; i++) { if (!isNaN(parseInt(RSFormProResponse.invalidComponents[i]))) { errorMessageContainer = document.getElementById('component' + RSFormProResponse.invalidComponents[i]); if (errorMessageContainer) { errorMessageContainer.className = 'formError'; if (RSFormProResponse.validationMessages && typeof RSFormProResponse.validationMessages[RSFormProResponse.invalidComponents[i]] !== 'undefined') { errorMessageContainer.innerHTML = RSFormProResponse.validationMessages[RSFormProResponse.invalidComponents[i]]; } } errorComponents.push(RSFormProResponse.invalidComponents[i]); success = false; } } // lets detect if the multiple page form is submitted var changePageHTML5Errors = false; if (totalJSDetectedPages > 0 && RSClickedSubmitElement && submits.indexOf(RSClickedSubmitElement) >= 0 && typeof errorOnPage !== 'undefined') { changePageHTML5Errors = true; } // Legacy response.push(RSFormProResponse.invalidComponents.join(',')); if (typeof RSFormProResponse.allPages !== 'undefined' || changePageHTML5Errors) { // Legacy response.push(RSFormProResponse.currentPage); response.push(RSFormProResponse.allPages); if (typeof RSFormProResponse.allPages !== 'undefined') { page = parseInt(RSFormProResponse.currentPage) - 1; totalPages = parseInt(RSFormProResponse.allPages); if (changePageHTML5Errors) { page = page > errorOnPage ? errorOnPage : page; } } else { if (changePageHTML5Errors) { page = errorOnPage; totalPages = totalJSDetectedPages; } } rsfp_changePage(formId, page, totalPages, false); } if (typeof ajaxExtraValidationScript[formId] === 'function') { // rewrite the response so that all the error components are added (that includes HTML5 fields) if (errorComponents.length) { response[1] = errorComponents.join(); } ajaxExtraValidationScript[formId]('afterSend', formId, {'url': url, 'params': RSFormPro.Ajax.Params, 'response': response, 'parentErrorClass': errorClasses.parent, 'fieldErrorClass': errorClasses.field, 'json': RSFormProResponse}); } if (success === false) { // The submits must be clickable again for (i = 0; i < submits.length; i++) { submits[i].disabled = false; } try { if (typeof page === 'undefined' || page == 0) { RSFormPro.callbacks.runCallback(formId, 'afterValidationFailed'); // callback functions if validation fails when form is submitted } else { RSFormPro.callbacks.runCallback(formId, 'nextPageFailed'); // callback functions if validation fails when a specific page of the form is checked } if (document.getElementById('rsform_error_' + formId)) { document.getElementById('rsform_error_' + formId).style.display = 'block'; } } catch (err) { } } else { // Change the page if the validation passes if (page) { rsfp_changePage(formId, page, totalPages, false); // The submits must be clickable again for (i = 0; i < submits.length; i++) { submits[i].disabled = false; } } else { // the submit button has been pressed so we need to submit the form // if the submit button or any other element has the id submit the form.submit() function is overwritten RSFormPro.submitForm(form); } try { if (typeof page === 'undefined' || page == 0) { RSFormPro.callbacks.runCallback(formId, 'afterValidationSuccess'); // callback functions if validation succeeds } else { RSFormPro.callbacks.runCallback(formId, 'nextPageSuccess'); // callback functions if validation succeeds when a specific page of the form is checked } if (document.getElementById('rsform_error_' + formId)) { document.getElementById('rsform_error_' + formId).style.display = 'none'; } } catch (err) { } } return success; } }; return false; }, overrideSubmit: function(formId, validationParams, disableSubmitButton) { var form = RSFormPro.getForm(formId); var submitElement = RSFormPro.getElementByType(formId, 'submit'); var i, j; for (i = 0; i < submitElement.length; i++) { if (RSFormProUtils.hasClass(submitElement[i],'rsform-submit-button')) { RSFormProUtils.addEvent(submitElement[i],'click', (function(event) { event.preventDefault(); RSClickedSubmitElement = this; if (disableSubmitButton) { for (j = 0; j < submitElement.length; j++) { submitElement[j].setAttribute('data-disableonsubmit','1'); } } RSFormPro.Ajax.validate(form, undefined, validationParams); })); } } } }; RSFormPro.validationError = function(type, message) { this.type = type; this.message = message; }; RSFormPro.validationError.prototype.toString = function() { return this.type; }; RSFormPro.callbacks = { allCallbacks: {}, addCallback: function(formId, callbackName, args) { var base = RSFormPro.callbacks; if (typeof base.allCallbacks[formId] == 'undefined') { base.allCallbacks[formId] = {} } if (typeof base.allCallbacks[formId][callbackName] == 'undefined') { base.allCallbacks[formId][callbackName] = []; } base.allCallbacks[formId][callbackName].push(args); }, runCallback: function(formId, callbackName) { var base = RSFormPro.callbacks; if (typeof base.allCallbacks[formId] != 'undefined' && typeof base.allCallbacks[formId][callbackName] != 'undefined' && base.allCallbacks[formId][callbackName].length > 0) { for (var i = 0; i < base.allCallbacks[formId][callbackName].length; i++) { var args = base.allCallbacks[formId][callbackName][i]; var functionName = args[0]; var functionArgs = []; for (var j = 1; j < args.length; j++) { functionArgs.push(args[j]); } // execute the callback function set for this trigger functionName.apply(self, functionArgs); } } } }; /* Translations */ RSFormPro.Translations = { translations: {}, add: function(formId, name, key, translation) { if (typeof this.translations[formId + '-' + name] !== 'object') { this.translations[formId + '-' + name] = {}; } this.translations[formId + '-' + name][key] = translation; }, translate: function(formId, name, key) { if (typeof this.translations[formId + '-' + name][key] == 'string') { return this.translations[formId + '-' + name][key]; } return key; } }; /* Helper functions */ var RSFormProUtils = { addEvent: function(obj, evType, fn) { if (obj.addEventListener) { obj.addEventListener(evType, fn, false); return true; } else if (obj.attachEvent) { var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } }, hasClass: function (el, name) { return new RegExp('(\\s|^)' + name + '(\\s|$)').test(el.className); }, addClass: function(el, name) { if (!RSFormProUtils.hasClass(el, name)) { el.className += (el.className ? ' ' : '') + name; } }, removeClass: function(el, name) { if (RSFormProUtils.hasClass(el, name)) { el.className = el.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'),' ').replace(/^\s+|\s+$/g, ''); } }, setDisplay: function (items, value) { for (var i = 0; i < items.length; i++) { if (!RSFormPro.usePositioning) { items[i].style.display = value; } else { value === 'none' ? RSFormProUtils.addClass(items[i], 'formHidden') : RSFormProUtils.removeClass(items[i], 'formHidden'); } } }, setAttr: function (items, attr, value) { for (var i = 0; i < items.length; i++) { items[i].setAttribute(attr, value); } }, remAttr: function (items, attr) { for (var i = 0; i < items.length; i++) { items[i].removeAttribute(attr); } }, getChecked: function (items) { var elements = []; var element, tagName; for (var i = 0; i < items.length; i++) { element = items[i]; tagName = element.tagName || element.nodeName; if (tagName == 'INPUT' && element.type && element.type.toUpperCase() == 'CHECKBOX' && element.checked == true) { elements.push(element); } } return elements; }, getUnchecked: function (items) { var elements = []; var element, tagName; for (var i = 0; i < items.length; i++) { element = items[i]; tagName = element.tagName || element.nodeName; if (tagName == 'INPUT' && element.type && element.type.toUpperCase() == 'CHECKBOX' && !element.checked) { elements.push(element); } } return elements; }, getAlias: function(str) { str = str.replace(/\-/g, ' '); if (!String.prototype.trim) { str = str.replace(/^\s+|\s+$/g, ''); } else { str = str.trim(); } str = str.toLowerCase(); str = str.replace(/(\s|[^A-Za-z0-9\-])+/g, '-'); str = str.replace(/^\-+|\-+$/g, ''); return str; }, getParents: function(a) { var els = []; while (a) { els.push(a); a = a.parentNode; } // Remove our own element if (els.length > 0) { els.shift() } return els; }, getElementsByClassName: function (className, tag, elm) { if (document.getElementsByClassName) { getElementsByClassName = function (className, tag, elm) { elm = elm || document; var elements = elm.getElementsByClassName(className), nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null, returnElements = [], current; for(var i=0, il=elements.length; i ** Partly based on Public Domain code by Jan Moesen ** ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ sprintf: function () { /* argument sanity checking */ if (!arguments || arguments.length < 1) throw new Error("sprintf: ERROR: not enough arguments"); /* initialize processing queue */ var argumentnum = 0; var done = "", todo = arguments[argumentnum++]; /* parse still to be done format string */ var m; while ((m = /^([^%]*)%(?:(\d+)\$|\((.*?)\))?([#0 +'-]+)?(\*|\d+)?(\.\*|\.\d+)?([%diouxXfFeEcs])((?:.|[\r\n])*)$/.exec(todo))) { var pProlog = m[1], pAccessD = m[2], pAccessN = m[3], pFlags = m[4], pMinLength = m[5], pPrecision = m[6], pType = m[7], pEpilog = m[8]; /* determine substitution */ var subst; if (pType === "%") /* special case: escaped percent character */ subst = "%"; else { /* parse padding and justify aspects of flags */ var padWith = " "; var justifyRight = true; if (pFlags) { if (pFlags.indexOf("0") >= 0) padWith = "0"; if (pFlags.indexOf("-") >= 0) { padWith = " "; justifyRight = false; } } else pFlags = ""; /* determine minimum length */ var access; var minLength = -1; if (pMinLength) { if (pMinLength === "*") { access = argumentnum++; if (access >= arguments.length) throw new Error("sprintf: ERROR: not enough arguments"); minLength = arguments[access]; } else minLength = parseInt(pMinLength, 10); } /* determine precision */ var precision = -1; if (pPrecision) { if (pPrecision === ".*") { access = argumentnum++; if (access >= arguments.length) throw new Error("sprintf: ERROR: not enough arguments"); precision = arguments[access]; } else precision = parseInt(pPrecision.substring(1), 10); } /* determine how to fetch argument */ access = argumentnum++; if (pAccessD) { access = parseInt(pAccessD, 10); if (access >= arguments.length) throw new Error("sprintf: ERROR: not enough arguments"); subst = arguments[access]; } else if (pAccessN) { if (typeof arguments[1] !== "object") throw new Error("sprintf: ERROR: invalid non-object arguments for named argument"); subst = arguments[1][pAccessN]; if (typeof subst === "undefined") throw new Error("sprintf: ERROR: invalid undefined value for named argument"); } else { if (access >= arguments.length) throw new Error("sprintf: ERROR: not enough arguments"); subst = arguments[access]; } /* dispatch into expansions according to type */ var prefix = ""; switch (pType) { /* decimal number */ case "d": case "i": if (typeof subst !== "number") subst = 0; subst = subst.toString(10); if (pFlags.indexOf("#") >= 0 && subst >= 0) subst = "+" + subst; if (pFlags.indexOf(" ") >= 0 && subst >= 0) subst = " " + subst; break; /* binary number */ case "b": if (typeof subst !== "number") subst = 0; subst = subst.toString(2); break; /* octal number */ case "o": if (typeof subst !== "number") subst = 0; subst = subst.toString(8); break; /* unsigned decimal number */ case "u": if (typeof subst !== "number") subst = 0; subst = Math.abs(subst); subst = subst.toString(10); break; /* (lower-case) hexadecimal number */ case "x": if (typeof subst !== "number") subst = 0; subst = subst.toString(16).toLowerCase(); if (pFlags.indexOf("#") >= 0) prefix = "0x"; break; /* (upper-case) hexadecimal number */ case "X": if (typeof subst !== "number") subst = 0; subst = subst.toString(16).toUpperCase(); if (pFlags.indexOf("#") >= 0) prefix = "0X"; break; /* (lower/upper-case) floating point number (fixed precision) */ case "f": case "F": if (typeof subst !== "number") subst = 0.0; subst = 0.0 + subst; if (precision > -1) { if (subst.toFixed) subst = subst.toFixed(precision); else { subst = (Math.round(subst * Math.pow(10, precision)) / Math.pow(10, precision)); subst += "0000000000"; subst = subst.substr(0, subst.indexOf(".") + precision + 1); } } subst = "" + subst; if (pFlags.indexOf("'") >= 0) { var k = 0; for (var i = (subst.length - 1) - 3; i >= 0; i -= 3) { subst = subst.substring(0, i) + (k === 0 ? "." : ",") + subst.substring(i); k = (k + 1) % 2; } } break; /* (lower/upper-case) floating point number (exponential-based precision) */ case "e": case "E": if (typeof subst !== "number") subst = 0.0; subst = 0.0 + subst; if (precision > -1) { if (subst.toExponential) subst = subst.toExponential(precision); else throw new Error("sprintf: ERROR: toExponential() method not supported"); } subst = "" + subst; if (pType === "E") subst = subst.replace(/e\+/, "E+"); break; /* single character */ case "c": if (typeof subst !== "number") subst = 0; subst = String.fromCharCode(subst); break; /* string */ case "s": if (typeof subst !== "string") subst = String(subst); if (precision > -1) subst = subst.substr(0, precision); break; default: throw new Error("sprintf: ERROR: invalid conversion character \"" + pType + "\""); } /* apply optional padding */ var padding = minLength - subst.toString().length - prefix.toString().length; if (padding > 0) { var arrTmp = new Array(padding + 1); if (justifyRight) subst = arrTmp.join(padWith) + subst; else subst = subst + arrTmp.join(padWith); } /* add optional prefix */ subst = prefix + subst; } /* update the processing queue */ done = done + pProlog + subst; todo = pEpilog; } /* return finally formatted string */ return (done + todo); } }; function isset() { // http://kevin.vanzonneveld.net // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // + improved by: FremyCompany // + improved by: Onno Marsman // + improved by: RafaƂ Kukawski // * example 1: isset( undefined, true); // * returns 1: false // * example 2: isset( 'Kevin van Zonneveld' ); // * returns 2: true var a = arguments, l = a.length, i = 0, undef; if (l === 0) { throw new Error('Empty isset'); } while (i !== l) { if (a[i] === undef || a[i] === null) { return false; } i++; } return true; } /* Legacy functions */ function rsfp_geolocation(term, id, mapid, map, marker, geocoder, type) { return RSFormPro.initGeoLocation(term, id, mapid, map, marker, geocoder, type); } function refreshCaptcha(componentId, captchaPath) { return RSFormPro.refreshCaptcha(componentId, captchaPath); } function number_format(number, decimals, dec_point, thousands_sep) { return RSFormPro.formatNumber(number, decimals, dec_point, thousands_sep); } function rsfp_toNumber(number, decimal, thousands, decimals) { return RSFormPro.toNumber(number, decimal, thousands, decimals); } function rsfp_getForm(formId) { return RSFormPro.getForm(formId); } function rsfp_getValue(formId, name) { return RSFormPro.getValue(formId, name); } function rsfp_verifyChecked(formId, name, value) { return RSFormPro.isChecked(formId, name, value); } function rsfp_getBlock(formId, block) { return RSFormPro.getBlock(formId, block); } function rsfp_getFieldsByName(formId, name) { return RSFormPro.getFieldsByName(formId, name); } function rsfp_addEvent(obj, evType, fn) { return RSFormProUtils.addEvent(obj, evType, fn); } function rsfp_setDisplay(items, value) { return RSFormProUtils.setDisplay(items, value); } function stringURLSafe(str) { return RSFormProUtils.getAlias(str); } function rsfp_changePage(formId, page, totalPages, validate, errorClasses) { return RSFormPro.Pages.change(formId, page, totalPages, validate, errorClasses); } function rsfp_hidePage(thePage) { return RSFormPro.Pages.hide(thePage); } function rsfp_showPage(thePage) { return RSFormPro.Pages.show(thePage); } function rsfp_checkValidDate(fieldName) { return RSFormPro.disableInvalidDates(fieldName); } function rsfp_addCondition(formId, name, fnCondition) { return RSFormPro.Conditions.add(formId, name, fnCondition); } function rsfp_runAllConditions(formId) { return RSFormPro.Conditions.runAll(formId); } function rsfp_setCalculationsEvents(formId, fields) { return RSFormPro.Calculations.addEvents(formId, fields); } function getElementsByClassName(className, tag, elm) { return RSFormProUtils.getElementsByClassName(className, tag, elm); } function buildXmlHttp() { return RSFormPro.Ajax.getXHR(); } function ajaxDisplayValidationErrors(formComponents, task, formId, data) { return RSFormPro.Ajax.displayValidationErrors(formComponents, task, formId, data); } function ajaxValidation(form, page, errorClasses) { return RSFormPro.Ajax.validate(form, page, errorClasses); }