(function (getJq) { 'use strict'; function $(selector, context) { var jq = getJq(); if (!jq) { return { length: 0 }; } return arguments.length > 1 ? jq(selector, context) : jq(selector); } var TEXT_ALLOWED = /^[A-Za-z0-9/_.\- ]*$/; var EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; var FORM_SELECTOR = '#leads_form_id'; var NS = '.leadsFormValidate'; var MESSAGES = { text: 'Only letters, numbers, spaces, and the characters / _ - . are allowed.', mobile: 'Mobile number must be exactly 10 digits (numbers only).', email: 'Please enter a valid email address.' }; function isParsleyReady() { return !!window.Parsley; } function isSkippableField(el) { return !el || el.disabled || el.type === 'hidden'; } function isPanOrGstField(el) { if (!el) { return false; } var id = (el.id || '').toLowerCase(); return id === 'pan' || id === 'gst'; } function isEmailField(el) { if (!el) { return false; } var id = (el.id || '').toLowerCase(); var name = (el.name || '').toLowerCase(); var type = (el.type || '').toLowerCase(); return id === 'contact_person_email' || name === 'contact_person_email' || type === 'email'; } function isMobileField(el) { if (!el) { return false; } var id = (el.id || '').toLowerCase(); var name = (el.name || '').toLowerCase(); return id === 'contact_person_mobile' || name === 'contact_person_mobile'; } function isCharsetCandidate(el) { if (!el || el.tagName === 'SELECT') { return false; } var type = (el.type || '').toLowerCase(); if (type === 'file' || type === 'checkbox' || type === 'radio' || type === 'password' || type === 'submit' || type === 'button' || type === 'reset') { return false; } if (isPanOrGstField(el) || isEmailField(el) || isMobileField(el)) { return false; } return true; } function registerValidators() { if (!isParsleyReady() || window.Parsley.__leadsFormValidatorsRegistered) { return; } window.Parsley.addValidator('leadscharset', { validateString: function (value) { if (!value || String(value).trim() === '') { return true; } return TEXT_ALLOWED.test(String(value)); }, messages: { en: MESSAGES.text } }); window.Parsley.addValidator('leadsmobile10', { validateString: function (value, req, instance) { var v = String(value || '').replace(/\D/g, ''); if (!instance.$element.prop('required') && v.length === 0) { return true; } if (instance.$element.prop('required') && v.length === 0) { return true; } return v.length === 10; }, messages: { en: MESSAGES.mobile } }); window.Parsley.addValidator('leadsemail', { validateString: function (value) { if (!value || String(value).trim() === '') { return true; } return EMAIL_RE.test(String(value).trim()); }, messages: { en: MESSAGES.email } }); window.Parsley.__leadsFormValidatorsRegistered = true; } function clearAttrs($el) { ['data-parsley-leadscharset', 'data-parsley-leadsmobile10', 'data-parsley-leadsemail'].forEach(function (a) { $el.removeAttr(a); }); } function applyConstraints($form) { if (!$form || !$form.length) { return; } $form.find('input, textarea, select').each(function () { var el = this; var $el = $(el); if (isSkippableField(el) || isPanOrGstField(el)) { return; } clearAttrs($el); if (isMobileField(el)) { $el.attr('data-parsley-leadsmobile10', 'true'); if (!$el.attr('data-parsley-trigger')) { $el.attr('data-parsley-trigger', 'input change'); } return; } if (isEmailField(el)) { $el.attr('data-parsley-leadsemail', 'true'); if (!$el.attr('data-parsley-trigger')) { $el.attr('data-parsley-trigger', 'input change'); } return; } if (isCharsetCandidate(el)) { $el.attr('data-parsley-leadscharset', 'true'); if (!$el.attr('data-parsley-trigger')) { $el.attr('data-parsley-trigger', 'input change'); } return; } if (el.tagName === 'SELECT' && !$el.attr('data-parsley-trigger')) { $el.attr('data-parsley-trigger', 'change'); } }); } function sanitizeOnInput(el) { if (!el || isSkippableField(el)) { return; } if (isMobileField(el)) { var clean = (el.value || '').replace(/\D/g, '').substring(0, 10); if (el.value !== clean) { el.value = clean; } return; } if (isCharsetCandidate(el)) { var raw = el.value || ''; if (!TEXT_ALLOWED.test(raw)) { el.value = raw.replace(/[^A-Za-z0-9/_.\- ]/g, ''); } } } function refreshParsley($form) { if (!$form || !$form.length || !isParsleyReady()) { return; } try { var instance = $form.parsley(); if (instance && typeof instance.refresh === 'function') { instance.refresh(); } } catch (e) { // no-op } } function validateField(field) { if (!field || isSkippableField(field) || !isParsleyReady()) { return; } var $field = $(field); var $form = $field.closest('form'); if (!$form.length || typeof $field.parsley !== 'function') { return; } applyConstraints($form); refreshParsley($form); try { $field.parsley().validate(); } catch (e) { // no-op } } function init() { var $form = $(FORM_SELECTOR); if (!$form.length || !isParsleyReady()) { return; } registerValidators(); applyConstraints($form); refreshParsley($form); $form.off(NS); $form.on('input' + NS, 'input:not([type=hidden]), textarea', function () { sanitizeOnInput(this); validateField(this); }); $form.on('change' + NS, 'select, input:not([type=hidden]), textarea', function () { validateField(this); }); } $(function () { init(); }); window.refreshLeadsFormValidation = function () { init(); }; })(function () { return window.jQuery; });