/* * @licstart The following is the entire license notice for the * JavaScript code in this page. * * Copyright (c) 2007-2012 Oliver Seidel (email : oliver.seidel @ deliciousdays.com) * Copyright (c) 2014-2017 Bastian Germann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * @licend The above is the entire license notice * for the JavaScript code in this page. */ function clearField(thefield) { if (thefield.defaultValue == thefield.value) thefield.value = ''; } function setField(thefield) { if (thefield.value == '') thefield.value = thefield.defaultValue; } function cforms_validate(no, directFormSubmission) { var doInnerXHTML = function (elementId, stringXHTML) { try { if (document.getElementById(elementId + 'a')) document.getElementById(elementId + 'a').innerHTML = stringXHTML; if (document.getElementById(elementId + 'b')) document.getElementById(elementId + 'b').innerHTML = stringXHTML; return true; } catch (ee) { return false; } }; var stripslashes = function (str) { str = str.replace(/\\'/g, '\''); str = str.replace(/\\"/g, '"'); str = str.replace(/\\\\/g, '\\'); str = str.replace(/\\0/g, '\0'); return str; }; var set_customerr = function (id, parent_el) { var gotone = all_custom_error[id]; if (all_custom_error[id] && gotone != '') { if (show_err_ins === 'y') { insert_err_p[insert_err_count] = parent_el.id; var ul = document.createElement('UL'); var li = document.createElement('LI'); li.innerHTML = stripslashes(gotone); ul.appendChild(li); ul.setAttribute('class', 'cf_li_text_err'); insert_err[insert_err_count++] = ul; } if (parent_el.id != '') return custom_error + '
  • ' + gotone + ' »
  • '; else return custom_error + '
  • ' + gotone + '
  • '; } else return custom_error; }; // track and store all errors until end var check_for_customerr = function (id) { var parent_el = document.getElementById(id).parentNode; parent_el.className = "cf_li_err"; return set_customerr(id, parent_el); }; var check_for_customerr_radio = function (id, cerr) { var parent_el = document.getElementById(id.substr(0, id.length - 5)); parent_el.className = "cf-box-title cf_li_err"; return set_customerr(cerr, parent_el); }; var isParentChkBoxGroup = function (el) { while (el.parentNode) { if (el.parentNode.className === 'cf-box-group') return true; else el = el.parentNode; } return false; }; var cforms_submitform = function (no) { var regexp = new RegExp('[$][#][$]', ['g']); var prefix = '\n'; var params = ''; var objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('*'); for (var i = 0, j = objColl.length; i < j; i++) { var fld = objColl[i].nodeName.toLowerCase(); var typ = objColl[i].type; if (fld == "input" || fld == "textarea" || fld == "select") { if (typ == "checkbox") { if (objColl[i].name.match(/\[\]/)) { var group = ''; while (i < j && isParentChkBoxGroup(objColl[i])) { if (objColl[i].type == 'checkbox' && objColl[i].name.match(/\[\]/) && objColl[i].checked) { group = group + objColl[i].value + ','; } i++; } if (group.length > 1) params = params + prefix + group.substring(0, group.length - 1); else params = params + prefix + ""; } else params = params + prefix + (objColl[i].checked ? ((objColl[i].value != "") ? objColl[i].value : "X") : ""); } else if (typ == "radio") { var group = objColl[i].checked ? ((objColl[i].value != "") ? objColl[i].value : "X") : ''; while (i < j && isParentChkBoxGroup(objColl[i + 1])) { if (objColl[i + 1].type == 'radio' && objColl[i + 1].checked) { group = group + ',' + objColl[i + 1].value; } i++; } if (group.charAt(0) == ',') params = params + prefix + group.substring(1, group.length); else params = params + prefix + group; } else if (typ == "select-multiple") { var all_child_obj = ''; for (var z = 0; z < objColl[i].childNodes.length; z++) { if (objColl[i].childNodes[z].nodeName.toLowerCase() == 'option' && objColl[i].childNodes[z].selected) { all_child_obj = all_child_obj + objColl[i].childNodes[z].value.replace(regexp, '$') + ','; } } params = params + prefix + all_child_obj.substring(0, all_child_obj.length - 1); } else if (typ == "hidden" && objColl[i].className.match(/cfhidden/)) { params = params + prefix + objColl[i].value; } else if (typ != "hidden" && typ != "submit") { params = params + prefix + objColl[i].value.replace(regexp, '$'); } } } // Overwrite params with generic form params = jQuery('#cforms' + no + 'form').serialize(); var post_data = 'action=submitcform&_wpnonce=' + cforms2_ajax.nonces['submitcform'] + '&cforms_id=' + no + '&' + params; jQuery.post( cforms2_ajax.url, post_data, function (data) { cforms_setsuccessmessage(data); } ); }; var cforms_setsuccessmessage = function (message) { var no = message.no; if (!message.result.match(/success/)) { call_err(no, message.html, ''); return; } if (!document.getElementById('cforms' + no + 'form').className.match(/cfnoreset/)) document.getElementById('cforms' + no + 'form').reset(); document.getElementById('sendbutton' + no).style.cursor = "auto"; document.getElementById('sendbutton' + no).disabled = false; if (document.createEvent) { var event = document.createEvent("HTMLEvents"); event.initEvent("cforms2FormSent", true, true); event.eventName = "cforms2FormSent"; event.formNumber = no; document.body.dispatchEvent(event); } var stringXHTML = message.html; // for both message boxes var isA = false; var ucm = (parseInt(no) > 1) ? ' ' + message.result + no : ''; if (document.getElementById('usermessage' + no + 'a')) { document.getElementById('usermessage' + no + 'a').className = "cf_info " + message.result + ucm; isA = true; } if (document.getElementById('usermessage' + no + 'b') && !(message.hide && isA)) { document.getElementById('usermessage' + no + 'b').className = "cf_info " + message.result + ucm; } doInnerXHTML('usermessage' + no, stringXHTML); if (message.hide) { document.getElementById('cforms' + no + 'form').style.display = 'none'; if (!message.redirection) location.hash = '#usermessage' + no + 'a'; } if (message.redirection) { location.href = message.redirection; } }; var write_customerr = function () { for (var n = 0; n < insert_err_p.length; n++) { if (document.getElementById(insert_err_p[n])) { document.getElementById(insert_err_p[n]).insertBefore( insert_err[n], document.getElementById(insert_err_p[n]).firstChild ); } } }; if (!no) no = ''; var msgbox = 'usermessage' + no; if (document.getElementById(msgbox + 'a')) { document.getElementById(msgbox + 'a').className = "cf_info waiting"; } if (document.getElementById(msgbox + 'b')) { document.getElementById(msgbox + 'b').className = "cf_info waiting"; } var waiting = decodeURI(document.getElementById('cf_working' + no).value); waiting = waiting.replace(/\\/g, ""); var insert_err = []; var insert_err_p = []; var insert_err_count = 0; var all_custom_error = []; var customerr_concatenated = document.getElementById('cf_customerr' + no).value; var show_err_ins = customerr_concatenated.substr(0, 1); var error_container = decodeURIComponent(customerr_concatenated.substr(1)).split('|'); for (var i = 0; i < error_container.length; i++) { var keyvalue = error_container[i].split('$#$'); all_custom_error[keyvalue[0]] = keyvalue[1]; } var custom_error = ''; if (!doInnerXHTML(msgbox, waiting)) { return true; } var all_valid = true; var regexp_e = new RegExp('^[_a-z0-9+-]+(\\.[_a-z0-9+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,63})$', 'i'); // email regexp // clean enhanced error if present var objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('li'); for (var i = 0; i < objColl.length; i++) { if (objColl[i].className.match(/cf_li_err/)) { if (objColl[i].className.match(/cf-box-title/)) objColl[i].className = 'cf-box-title'; else objColl[i].className = ''; } } objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('ul'); while (objColl.length > 0) { objColl[0].parentNode.removeChild(objColl[0]); } objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('*'); var last_one = false; for (var i = 0, j = objColl.length; i < j; i++) { var temp = objColl[i].className; var newclass = ''; if (temp.match(/secinput/)) newclass = 'secinput'; else if (temp.match(/cf-box-./)) newclass = temp.match(/cf-box-./); else if (temp.match(/cformselect/)) newclass = 'cformselect'; else if (temp.match(/upload/)) newclass = 'cf_upload'; else if (temp.match(/single/)) newclass = 'single'; else if (temp.match(/area/)) newclass = 'area'; else if (temp.match(/cfselectmulti/)) newclass = 'cfselectmulti'; var fld = objColl[i].nodeName.toLowerCase(); var typ = objColl[i].type; if ((fld == "input" || fld == "textarea" || fld == "select") && !(typ == "hidden" || typ == "submit")) { if (temp.match(/required/) && !temp.match(/email/) && typ != "radio") { newclass = newclass + ' fldrequired'; var n = objColl[i].nextSibling; var p = objColl[i].previousSibling; if (temp.match(/cf-box-./)) { if (!objColl[i].checked) { custom_error = check_for_customerr(objColl[i].id); newclass = newclass + ' cf_error'; // we can't change the checkbox much but the text on the side! if (n && n.nodeName.toLowerCase() == "label" && !n.className.match(/errortxt/)) n.className = n.className + " cf_errortxt"; else if (p && p.nodeName.toLowerCase() == "label" && !p.className.match(/errortxt/)) p.className = p.className + " cf_errortxt"; all_valid = false; if (!last_one && objColl[i].id != '') last_one = objColl[i].id; } else { // we can't change the checkbox much but the text on the side! if (n && n.nodeName.toLowerCase() == "label" && n.className.match(/cf_errortxt/)) n.className = n.className.substr(0, n.className.search(/ cf_errortxt/)); else if (p && p.nodeName.toLowerCase() == "label" && p.className.match(/cf_errortxt/)) p.className = p.className.substr(0, p.className.search(/ cf_errortxt/)); } } else if (temp.match(/cformselect/)) { if (objColl[i].value == '' || objColl[i].value == '-') { newclass = newclass + ' cf_error'; all_valid = false; if (!last_one && objColl[i].id != '') last_one = objColl[i].id; custom_error = check_for_customerr(objColl[i].id); } } else if (objColl[i].value == '') { newclass = newclass + ' cf_error'; all_valid = false; if (!last_one && objColl[i].id != '') last_one = objColl[i].id; custom_error = check_for_customerr(objColl[i].id); } } if (temp.match(/email/)) { newclass = newclass + ' fldemail'; if (!(objColl[i].value == '' && !temp.match(/required/))) { if (!regexp_e.test(objColl[i].value)) { newclass = newclass + ' fldrequired cf_error'; all_valid = false; if (!last_one) last_one = objColl[i].name; custom_error = check_for_customerr(objColl[i].id); } else newclass = newclass + ' fldrequired'; } } if (temp.match(/required/) && temp.match(/cf-box-b/) && typ.match(/radio/)) { var temp_i = i; var radio_valid = false; while (objColl[i].parentNode.className.match(/cf-box-group/) || objColl[i].parentNode.parentNode.className.match(/cf-box-group/)) { temp = objColl[i].className; if (temp.match(/cf-box-b/) && objColl[i].checked) { radio_valid = true; } i++; } if (!radio_valid) { all_valid = false; if (!last_one) last_one = objColl[temp_i].parentNode.id; custom_error = check_for_customerr_radio( objColl[temp_i].parentNode.id, objColl[temp_i].id.substr(0, objColl[temp_i].id.length - 2) ); } } else objColl[i].className = newclass; } // if regexp provided use it! var regexp = 1; if (objColl[i] && document.getElementById(objColl[i].id + '_regexp')) { var obj_regexp = document.getElementById(objColl[i].id + '_regexp'); var inpVal = objColl[i].value; if (typ == 'textarea') inpVal = inpVal.replace(/\n\r?/g, ' '); if (obj_regexp && obj_regexp.value != '') { if (document.getElementById(obj_regexp.value)) { if (inpVal != document.getElementById(obj_regexp.value).value) regexp = null; } else { if (inpVal != '') { // overrule: normal field, normal regexp, left empty regexp = new RegExp(obj_regexp.value, ['g']); regexp = inpVal.match(regexp); } } if (regexp == null) { newclass = newclass + ' cf_error'; all_valid = false; if (!last_one && objColl[i].id != '') last_one = objColl[i].id; custom_error = check_for_customerr(objColl[i].id); } } } } // write out all custom errors if (show_err_ins === 'y') write_customerr(); if (all_valid) { document.getElementById('sendbutton' + no).style.cursor = "progress"; if (directFormSubmission) { return true; } else { document.getElementById('sendbutton' + no).disabled = true; cforms_submitform(no); } } var call_err = function (no, err, custom_error) { // temp. turn send button back on document.getElementById('sendbutton' + no).style.cursor = "auto"; document.getElementById('sendbutton' + no).disabled = false; if (custom_error != '') custom_error = '
      ' + custom_error + '
    '; err = decodeURI(err) + custom_error; var stringXHTML = err.replace(/(\r\n)/g, '
    '); var msgbox = 'usermessage' + no; var ucm = (parseInt(no) > 1) ? ' failure' + no : ''; if (document.getElementById(msgbox + 'a')) document.getElementById(msgbox + 'a').className = "cf_info failure" + ucm; if (document.getElementById(msgbox + 'b')) document.getElementById(msgbox + 'b').className = "cf_info failure" + ucm; doInnerXHTML(msgbox, stringXHTML.replace(/\\/g, "")); }; if (!all_valid) { call_err(no, document.getElementById('cf_failure' + no).value, custom_error); } return false; } jQuery(function () { jQuery('form.cform[id^="cforms"][id$="form"]').submit(function (ev) { var id = jQuery(ev.target).attr('id'); var no = /^cforms(\d*)form$/.exec(id)[1]; var direct = jQuery(ev.target).hasClass('cformsdirect'); return cforms_validate(no, direct); }); });