/* PRE contactForm */ /* Formtools: Form Scripts */ /* Formtools JS */ // #### [formtools-obj] if (typeof FormTools == 'undefined') { var FormTools = { VERSION: '19.5.8.0', FORMTOOLS_PATH: './', FORMTOOLS_BASE_URL: './', FORMS_BASE_URL: '/forms/', EMAIL_TEMPLATES_PATH: './email_templates/' }; } // #### [formtools-obj] var contact_form = []; contact_form.selector = '#contact_form'; // #### [debug] var FORMTOOL_DEBUG_JS = false; // #### [initial-values] contact_form_initial_values = {"full-name":{"type":"text","value":""},"phone":{"type":"tel","value":""},"email":{"type":"email","value":""},"subject":{"type":"text","value":""},"message":{"type":"textarea","value":""}}; function contact_form_reset_field_values($) { for (var fname in contact_form_initial_values) { if (contact_form_initial_values.hasOwnProperty(fname)) { var field = contact_form_initial_values[fname]; var fieldValue = decodeURIComponent(escape(window.atob(field.value))); switch (field.type) { case 'text': case 'file': case 'email': case 'tel': case 'number': $("#contact_form input[name='" + fname + "']").val(fieldValue).change().blur(); break; case 'textarea': $("#contact_form textarea[name='" + fname + "']").val(fieldValue).change().blur(); break; case 'select': $select = $("#contact_form select[name='" + fname + "']"); $select.val(fieldValue).change().blur(); if (true) { $select.selectric('refresh'); } break; case 'radio': $("#contact_form input:radio[name='" + fname + "']") .filter('[value="' + fieldValue + '"]').prop('checked', true).change().blur(); break; case 'checkbox': var $cbs = $("#contact_form input:checkbox[name='" + fname + "']"); $cbs.prop('checked', false); $cbs.filter('[value="' + fieldValue + '"]').prop('checked', false).change().blur(); break; default: } if (FORMTOOL_DEBUG_JS) { console.log('Reset ' + fname + '.'); } // Todo... reset by type. check for [] at end of name, indicates multiple values. } } $('#contact_form label.infield').css('opacity', 1); } // #### [validation] if (typeof formatBytes != 'function') { window.formatBytes = function(a,b){if(0==a)return"0";var c=1024,d=b||2,e=["B","KB","MB","GB","TB","PB","EB","ZB","YB"],f=Math.floor(Math.log(a)/Math.log(c));return parseFloat((a/Math.pow(c,f)).toFixed(d))+e[f];}; } if (typeof sizeInBytes != 'function') { window.sizeInBytes = function(a){var e=parseInt(a,10),t=e;switch(a.substr(a.length-2).toLowerCase()){case"kb":t=e*Math.pow(2,10);break;case"mb":t=e*Math.pow(2,20);break;case"gb":t=e*Math.pow(2,30);break;case"tb":t=e*Math.pow(2,40);}return t;}; } var frmvalidator_contact_form = null; var contact_form_onEditCallback = null; var contact_form_submitting = false; var contact_form_fields_not_required = []; var contact_form_field_validations = []; var contact_form_field_group_validations = []; var contact_form_per_page_validation = false; contact_form_field_validations.push({ field: 'full-name', page: 1, type: "req", response: "'Full Name' is required.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'full-name', page: 1, type: "maxlen=50", response: "'Full Name' can be no more than 50 characters.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'phone', page: 1, type: "req", response: "'Phone Number' is required.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'phone', page: 1, type: "maxlen=50", response: "'Phone Number' can be no more than 50 characters.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'email', page: 1, type: "req", response: "'Email' is required.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'email', page: 1, type: "maxlen=50", response: "'Email' can be no more than 50 characters.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'email', page: 1, type: "email", response: "'Email' must be a valid email address.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'subject', page: 1, type: "req", response: "'Subject' is required.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'subject', page: 1, type: "maxlen=50", response: "'Subject' can be no more than 50 characters.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'message', page: 1, type: "req", response: "'How can we help you' is required.", option: "", optional_req: false }); contact_form_field_validations.push({ field: 'message', page: 1, type: "maxlen=1000", response: "'How can we help you' can be no more than 1000 characters.", option: "", optional_req: false }); function contact_form_setActiveValidations(page) { var activePage = (typeof page !== 'undefined') ? page : 'all'; if (FORMTOOL_DEBUG_JS) { console.log('setActiveValidations: page ' + activePage); } for (var vname in contact_form_field_validations) { if (contact_form_field_validations.hasOwnProperty(vname)) { var vspec = contact_form_field_validations[vname]; if (activePage !== 'all' && vspec.page != activePage) { continue; } var option = null; if (vspec.optional_req) { var label_name = vspec.field.replace('[]', ''); option = vspec.option === '' ? null : vspec.option; if (!contact_form_is_in_list(vspec.field, contact_form_fields_not_required)) { frmvalidator_contact_form.addValidation(vspec.field, vspec.type, vspec.response, option); jQuery('#contact_form-field-' + label_name + '_label .required').removeClass('inactive'); } else { jQuery('#contact_form-field-' + label_name + '_label .required').addClass('inactive'); } } else { frmvalidator_contact_form.addValidation(vspec.field, vspec.type, vspec.response, option); if (FORMTOOL_DEBUG_JS) { console.log('addValidation: ' + vspec.field); } } } } for (var gvname in contact_form_field_group_validations) { if (contact_form_field_group_validations.hasOwnProperty(gvname)) { var gvspec = contact_form_field_group_validations[gvname]; if (activePage !== 'all' && gvspec.page != activePage) { continue; } var glabel_name = gvspec.group.replace('[]', ''); frmvalidator_contact_form.setAddnlValidationFunction(eval(gvspec.function)); jQuery('#contact_form-field-' + glabel_name + '_label .required').removeClass('inactive'); if (FORMTOOL_DEBUG_JS) { console.log('addGroupValidation: ' + gvspec.group); } } } } function contact_form_initValidation(isNew, page) { page = (typeof page !== 'undefined') ? page : 'all'; if (isNew) { frmvalidator_contact_form = new Validator('contact_form'); frmvalidator_contact_form.EnableMsgsTogether(); } else { frmvalidator_contact_form.clearAllValidations(); } var contact_form_onErrorCallback = function(fields) { if (FORMTOOL_DEBUG_JS) { console.log('onErrorCallback ' + fields); } jQuery('#contact_form *').removeClass('validation_error'); var nf = fields.length; for (var n = 0; n < nf; n++) { var elements = document.getElementsByName(fields[n]); var ne = elements.length; for (var e = 0; e < ne; e++) { var field = elements[e]; field.className += ' validation_error'; if ((' ' + field.className + ' ').indexOf(' select2 ') > -1) { field.parentNode.className += ' validation_error'; } if ((' ' + field.className + ' ').indexOf(' selectric ') > -1) { field.parentNode.parentNode.parentNode.className += ' validation_error'; } } jQuery("#contact_form *[data-validation-field='" + fields[n] + "']").addClass('validation_error'); } /*if (true) { var scrollToY = jQuery("#contact_form_errorloc").position().top; jQuery('html, body').animate({ scrollTop: scrollToY }, 'slow'); }*/ }; frmvalidator_contact_form.setPostValidationCallback(contact_form_onErrorCallback); frmvalidator_contact_form.EnableOnPageErrorDisplaySingleBox(); contact_form_setActiveValidations(page); } function contact_form_reset_validations(page) { page = (typeof page !== 'undefined') ? page : 'all'; contact_form_initValidation(false, page); } function contact_form_ClearErrors() { jQuery('#contact_form_errorloc').html(''); jQuery('#contact_form_errorloc').css('visibility', 'hidden'); jQuery("#contact_form *").removeClass('validation_error'); } function contact_form_RefreshErrors() { jQuery('#contact_form_errorloc').html(''); jQuery('#contact_form_errorloc').css('visibility', 'hidden'); } function contact_form_initEditHandlers() { contact_form_onEditCallback = function(remaining) { jQuery(this).siblings('.chars_remain') .text(remaining); if (remaining > 0) { jQuery(this).removeClass('limit'); } }; jQuery('#contact_form textarea[maxlength]').limitMaxlength({ onEdit: contact_form_onEditCallback }); } contact_form_initValidation(true); contact_form_initEditHandlers(); // #### [ajax] function contact_form_reloadRecaptcha() { var contact_form_recaptcha_id = jQuery('#contact_form .g-recaptcha').attr('id'); grecaptcha.reset(contact_form_recaptcha_widget_id); } function contact_form_clearForm(ele) { jQuery(ele).find(':input').each(function() { switch(this.type) { case 'password': case 'select-multiple': case 'select-one': case 'text': case 'textarea': case 'email': case 'tel': case 'number': jQuery(this).val(''); break; case 'checkbox': case 'radio': this.checked = false; } var $infieldLabels = jQuery("#contact_form label.infield"); $infieldLabels.focus(); $infieldLabels.first().focus(); }); contact_form_reloadRecaptcha(); jQuery('#contact_form_ajax_msg').stop(true).hide(); } function contact_form_submitForm() { if (!frmvalidator_contact_form.hasMessages()) { if (contact_form_submitting == true) { return false; } contact_form_submitting = true; var contact_form_ajaxMsg = jQuery('#contact_form_ajax_msg'); var contact_form_thisForm = jQuery(this); contact_form_ajaxMsg.html('Please wait...'); contact_form_ajaxMsg.stop(true).hide().fadeIn(); jQuery.ajax({ url: contact_form_thisForm.attr('action') + '?contact_form_ajax=true', type: contact_form_thisForm.attr('method'), data: contact_form_thisForm.serialize(), success: contact_form_submitFinished, error: function() { contact_form_submitting = false; } }); } else { contact_form_submitting = false; } return false; } function contact_form_submitFinished(response) { contact_form_submitting = false; contact_form_ClearErrors(); var contact_form_ajaxMsg = jQuery('#contact_form_ajax_msg'); contact_form_response = jQuery.trim(response); contact_form_ajaxMsg.stop(true).hide(); if (contact_form_response == 'success') { contact_form_clearForm(jQuery('#contact_form')); contact_form_ajaxMsg.html('Thank you for your enquiry.'); contact_form_ajaxMsg.fadeIn().delay(10000).fadeOut(); } else { contact_form_ajaxMsg.html('Submission failed.
' + contact_form_response + '
'); contact_form_ajaxMsg.fadeIn(); } } function contact_form_initSubmitHandler() { jQuery('#contact_form').submit(contact_form_submitForm); jQuery('#contact_form_ajax_msg').stop(true).hide(); } if (jQuery("#contact_form").length != 0) { jQuery(function($) { contact_form_initSubmitHandler(); }); } // #### [infield-labels] jQuery('#contact_form label.infield').inFieldLabels({ fadeOpacity: 0.3 }); // #### [no-pager] jQuery('#contact_form .page_wrapper').removeClass('hidden'); // #### [selectric] function contact_form_selectric_on_change($select) { var $label = $select.parent().next().find('.label'); var $req = $select.parent().next().find('.required'); if ($select.val() === 'not-selected') { $req.show(); $label.addClass('not-selected'); } else { $req.hide(); $label.removeClass('not-selected'); } } jQuery(function($) { var $select = $('#contact_form select.selectric'); $select.selectric(); if (true) { var $select = $('#contact_form select.selectric'); $select.each(function() { var $s = $(this); var $label = $s.parent().next().find('.label'); if (JSON.parse($s.data('required'))) { $label.after('*'); } $s.on('change', function() { contact_form_selectric_on_change($(this)); }); }); } }); /* Formtools: Field Scripts */ /* Formtools JS After */ // #### [contact_form_recaptcha_render] var contact_form_recaptcha_widget_id = null; var contact_form_recaptcha_loaded = false; var contact_form_recaptcha_completed = false; var contact_form_recaptcha_inputSubmit = jQuery("#contact_form input[type='submit']"); function contact_form_load_recaptcha() { if (contact_form_recaptcha_loaded) { return; } contact_form_recaptcha_widget_id = grecaptcha.render("contact_form_recaptcha", { 'sitekey' : '6Ld9OroUAAAAAMlZRJA6Wmtf1g70_3_qn1MadYHT', 'size' : 'normal', 'theme' : 'light', 'callback': 'contact_form_recaptchaCompleteCallback', 'expired-callback': 'contact_form_recaptchaExpiredCallback' }); contact_form_recaptcha_loaded = true; } var contact_form_onloadCallback = function() { contact_form_load_recaptcha(); }; var contact_form_recaptchaCompleteCallback = function() { contact_form_recaptcha_completed = true; }; var contact_form_recaptchaExpiredCallback = function() { contact_form_recaptcha_completed = false; //console.log('captcha expired.'); //grecaptcha.reset(contact_form_recaptcha_widget_id); }; contact_form_recaptcha_inputSubmit.on('click', function(e) { if (!contact_form_recaptcha_completed) { e.preventDefault(); jQuery('#contact_form_ajax_msg').html('You must complete the reCAPTCHA.'); jQuery('#contact_form_ajax_msg').fadeIn(); return false; } else { jQuery('#contact_form_ajax_msg').html(''); } }); /* POST contactForm */ /* Formtools: Post-Form Scripts */ /* Formtools: Post-Field Scripts */