{"version":3,"sources":["contact-from-CLs.min-source.js"],"names":["onloadGRecaptchaCallback","$","each","i","obj","children","length","widgetId","grecaptcha","render","sitekey","attr","increaseNumber","theButton","window","event","preventDefault","theInput","closest","currentVal","parseInt","val","maxAllowed","isNumeric","trigger","decreaseNumber","minAllowed","document","ready","contactFormClosure","contactWithin","anyFormInPageSelector","stagesBeforeSubmitIdentifier","stageDataAttribute","forwardButtonSelector","backwardButtonSelector","stagesContainerSelector","submitAreaSelector","currentStageClass","fieldsSelectors","spacer","title","subject","newsletterSignup","emailAddress","recaptcha","validationIdentifiers","inputErrorClass","messageErrorClass","requiredClass","requiredDataAttribute","emailClass","emailDataAttribute","phoneDataAttribute","phoneIncCountryDataAttribute","submitButtonSelector","successMessageSelector","increaseDecreaseButtonAreaClass","contactSetup","startingElement","find","addBack","contactForm","setupContactForm","$spacerCount","$titleCount","$contactForm","setupStages","setupRequiredFieldsOnSpotValidation","setupPlusMinusButtons","on","e","submitContactForm","$theForm","$stagesContainer","click","handleNavigationButtons","isForwardButton","$currentStage","theLanguage","getLanguage","validateAnArea","handleStagesUiTransition","animate","opacity","setTimeout","$element","removeClass","next","prev","addClass","filter","keyup","currentTarget","remove","trim","addErrorMessage","data","target","$submitArea","$sendButton","oldButtonMessage","prop","$NewsletterSignup","mcURL","guestEmail","guestName","guestFirstName","slice","indexOf","$mailchimpForm","append","ajax","type","url","serialize","cache","dataType","jsonp","contentType","error","addNewsletterSignupResultToForm","postEmailToServer","success","NewsLetterSignupResult","result","msg","theForm","SUResult","filterEmptyInputs","$serializedData","hasClass","beforeSend","response","resetSendButton","fadeOut","parent","fadeIn","scrollTop","first","offset","top","ga","hitType","eventCategory","eventAction","eventLabel","statusText","getResponseHeader","reset","scrollToElementInError","complete","removeOldValidationWarningsFromArea","$area","firstElementInError","errCode","language","after","getErrorMessage","focus","errorCodeDescriptor","errorCode","english","french","errorCodes","push","len","validationSuccess","toLowerCase","undefined","is","match","baseValue","matchingFieldValue","index","toMatchElement","gRecaptchaId","getResponse","wrap","before"],"mappings":"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","sourcesContent":["// this will load the google recaptchas. There can be multiple on one page.\r\nfunction onloadGRecaptchaCallback() {\r\n $(\".recaptchaDiv\").each(function (i, obj) {\r\n //only load if not already loaded (to cover ajax delayed loading)\r\n if ($(obj).children().length == 0) {\r\n var widgetId = grecaptcha.render(obj, {\r\n sitekey: \"6Lfv608UAAAAAKccrAbr96o8xMVbZmOzlH2jKBRH\",\r\n });\r\n\r\n //save the generated id to the parent Div\r\n $(obj).attr(\"data-grecaptchaid\", widgetId);\r\n }\r\n });\r\n}\r\n\r\n// This method should be defined globally, because a call for this method is added dynamically to a button link\r\nfunction increaseNumber(theButton) {\r\n if (window.event) window.event.preventDefault();\r\n\r\n // get input\r\n var theInput = $(theButton)\r\n .closest(\".increaseDecreaseButtonArea\")\r\n .children('input[type=\"number\"]');\r\n\r\n //get current value\r\n var currentVal = parseInt($(theInput).val());\r\n\r\n var maxAllowed = parseInt($(theInput).attr(\"max\"));\r\n\r\n //if undefined set as 1\r\n if (!$.isNumeric(currentVal)) {\r\n $(theInput).val(1).trigger(\"input\");\r\n }\r\n // only increase if below max value\r\n else if (maxAllowed != null && currentVal == maxAllowed) {\r\n //do nothing\r\n } else {\r\n $(theInput)\r\n .val(currentVal + 1)\r\n .trigger(\"input\");\r\n }\r\n}\r\n\r\n// This method should be defined globally, because a call for this method is added dynamically to a button link\r\nfunction decreaseNumber(theButton) {\r\n if (window.event) window.event.preventDefault();\r\n\r\n // get input\r\n var theInput = $(theButton)\r\n .closest(\".increaseDecreaseButtonArea\")\r\n .children('input[type=\"number\"]');\r\n\r\n //get current value\r\n var currentVal = parseInt($(theInput).val());\r\n\r\n var minAllowed = parseInt($(theInput).attr(\"min\"));\r\n\r\n //if undefined set as 0\r\n if (!$.isNumeric(currentVal)) {\r\n $(theInput).val(0).trigger(\"input\");\r\n }\r\n // only decrease if above min value\r\n else if (minAllowed != null && currentVal == minAllowed) {\r\n //do nothing\r\n } else {\r\n $(theInput)\r\n .val(currentVal - 1)\r\n .trigger(\"input\");\r\n }\r\n}\r\n\r\n$(document).ready(function () {\r\n contactFormClosure();\r\n});\r\n\r\nconst contactFormClosure = (contactWithin = document) => {\r\n // ******************************** Variables ***************************\r\n\r\n const anyFormInPageSelector =\r\n \".autoProcessContactForm, .processAllFormsTogether\";\r\n\r\n const stagesBeforeSubmitIdentifier = {\r\n stageDataAttribute: \"stage-before-submit\",\r\n forwardButtonSelector: '.stageControls [data-button-type=\"forward\"]',\r\n backwardButtonSelector: '.stageControls [data-button-type=\"backward\"]',\r\n };\r\n const stagesContainerSelector = \"#leadCaptureForm\";\r\n const submitAreaSelector = \"[data-stage-submit]\";\r\n const currentStageClass = \"current\";\r\n\r\n const fieldsSelectors = {\r\n spacer: '[name=\"SpacerForEmail\"]',\r\n title: '[name=\"TitleForEmail\"]',\r\n subject: \"#emailSubject\",\r\n newsletterSignup: 'input[name=\"NewsletterSignup\"]',\r\n emailAddress: '[name=\"Email Address\"]',\r\n recaptcha: \".recaptchaDiv\",\r\n };\r\n\r\n const validationIdentifiers = {\r\n inputErrorClass: \"validationError\",\r\n messageErrorClass: \"validationErrorMessage\",\r\n requiredClass: \"required\",\r\n requiredDataAttribute: \"is-required\",\r\n emailClass: \"emailAddress\",\r\n emailDataAttribute: \"is-email-address\",\r\n phoneDataAttribute: \"is-phone\",\r\n phoneIncCountryDataAttribute: \"is-phone-with-country-code\",\r\n };\r\n\r\n const submitButtonSelector = '[type=\"submit\"]';\r\n\r\n const successMessageSelector = \".successMessage\";\r\n\r\n const increaseDecreaseButtonAreaClass = \"increaseDecreaseButtonArea\";\r\n\r\n // *********************************************************************\r\n\r\n contactSetup(contactWithin);\r\n\r\n function contactSetup(startingElement) {\r\n //this sets up the contact form processing.\r\n //\tcan also call the setup function setupContactFormProcessing directly (e.g. on delayed Ajax loading)\r\n $(startingElement)\r\n .find(anyFormInPageSelector)\r\n .addBack(anyFormInPageSelector)\r\n .each(function (i, contactForm) {\r\n setupContactForm(contactForm);\r\n });\r\n\r\n // setup spacers and titles (keys need to be unique, so append integer)\r\n // needs to be done just once (to stop duplicate keys) so we call this here, not in setupContactForm\r\n\r\n $spacerCount = 0;\r\n\r\n $(startingElement)\r\n .find(fieldsSelectors.spacer)\r\n .each(function () {\r\n $(this).attr(\"name\", $(this).attr(\"name\") + $spacerCount);\r\n $spacerCount++;\r\n });\r\n\r\n $titleCount = 0;\r\n\r\n $(startingElement)\r\n .find(fieldsSelectors.title)\r\n .each(function () {\r\n $(this).attr(\"name\", $(this).attr(\"name\") + $titleCount);\r\n $titleCount++;\r\n });\r\n }\r\n\r\n function setupContactForm(contactForm) {\r\n const $contactForm = $(contactForm);\r\n\r\n // if the contact form has stages, we setup the stages, i.e., forward/backward etc.\r\n setupStages($contactForm);\r\n\r\n // we do a validation for required fields on key up. This is in addition to the validation when the next/submit button clicked\r\n setupRequiredFieldsOnSpotValidation($contactForm);\r\n\r\n //setup plus minus buttons\r\n setupPlusMinusButtons($contactForm);\r\n\r\n //setup submit button handling\r\n $contactForm.on(\"submit\", function (e) {\r\n submitContactForm(e);\r\n });\r\n }\r\n\r\n // if the contact form has stages, we setup the stages, i.e., forward/backward etc.\r\n function setupStages($theForm) {\r\n // some parts of stages, can be technically placed outside the form. So, we get the parent of the form.\r\n const $stagesContainer = $theForm.closest(stagesContainerSelector);\r\n\r\n // Do we have no stage (step) for this contact form, i.e., all happen in one step?\r\n if ($stagesContainer.length === 0) {\r\n return;\r\n }\r\n\r\n $stagesContainer\r\n .find(stagesBeforeSubmitIdentifier.forwardButtonSelector)\r\n .click((e) => {\r\n handleNavigationButtons(e, true);\r\n });\r\n $stagesContainer\r\n .find(stagesBeforeSubmitIdentifier.backwardButtonSelector)\r\n .click((e) => {\r\n handleNavigationButtons(e, false);\r\n });\r\n\r\n /**\r\n * handle navigation for forward/backward buttons\r\n * @param {event} e The native javascript click event argument.\r\n * @param {bool} isForwardButton Indicates if the call is for forward button or backward.\r\n * @returns void\r\n */\r\n function handleNavigationButtons(e, isForwardButton) {\r\n e.preventDefault();\r\n\r\n const $currentStage = $stagesContainer.find(\r\n `[data-${stagesBeforeSubmitIdentifier.stageDataAttribute}].${currentStageClass}`\r\n );\r\n\r\n const theLanguage = getLanguage($theForm);\r\n\r\n // validate the current stage if needed, this excludes the last stage which the submit stage because we don't have forward button for it\r\n // of course we don't have validation for backward button\r\n if (isForwardButton && !validateAnArea($currentStage, theLanguage)) {\r\n return;\r\n }\r\n\r\n // handle transition from current stage to the next stage (or previous stage if it is backward button) UI wise.\r\n handleStagesUiTransition(isForwardButton);\r\n }\r\n\r\n /**\r\n * Handle transition from current stage to the next stage (or previous stage if it is backward button) UI wise.\r\n * @param {bool} isForwardButton Indicates if the call is for forward button or backward.\r\n */\r\n function handleStagesUiTransition(isForwardButton) {\r\n // hide stages container temporarily, until we load the next stage\r\n $stagesContainer.animate({ opacity: \"0\" });\r\n\r\n setTimeout(() => {\r\n // find all elements with the current class, this would be the stage, the buttons and stage progress\r\n let $element = $stagesContainer\r\n .find(`.${currentStageClass}`)\r\n .removeClass(currentStageClass);\r\n\r\n // what would be the next step, forward or backward?\r\n if (isForwardButton) {\r\n $element = $element.next();\r\n } else {\r\n $element = $element.prev();\r\n }\r\n\r\n // add the class to the next step\r\n $element.addClass(currentStageClass);\r\n }, 600);\r\n\r\n // show stages container again\r\n $stagesContainer.animate({ opacity: \"1.0\" });\r\n }\r\n }\r\n\r\n /**\r\n * It adds a validation for required fields on key up. This is in addition to the validation when the next/submit button clicked.\r\n * @param {JQueryObject} $theForm The form which is converted to a JQuery object.\r\n */\r\n function setupRequiredFieldsOnSpotValidation($theForm) {\r\n // The validation is done for elements that are typeable\r\n $theForm\r\n .find(\"input,textarea\")\r\n .filter(\r\n `.${validationIdentifiers.requiredClass}, [data-${validationIdentifiers.requiredDataAttribute}]`\r\n )\r\n // when the text box is clicked, and user releases a key.\r\n .keyup((event) => {\r\n // Converting the current target, i.e., the text box, to a JQuery object.\r\n const $element = $(event.currentTarget);\r\n\r\n //Remove old validation error classes on this text box, because we want to revalidate the text box again in respect of \"required validation\"\r\n $element.removeClass(validationIdentifiers.inputErrorClass);\r\n\r\n //remove old validation messages\r\n $element\r\n .next(\r\n `.${validationIdentifiers.messageErrorClass}[data-error-for=\"requiredText\"]`\r\n )\r\n .remove();\r\n\r\n // Now, if the box is empty after releasing the key (in most cases this means the key that was just released was Backspace)\r\n if ($element.val()?.trim() == \"\") {\r\n addErrorMessage($element, \"requiredText\", getLanguage($theForm));\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * A utility function to find the current language of the contact page\r\n * @param {JQueryObject} $theForm he form which is converted to a JQuery object.\r\n * @returns A string that indicates the language\r\n */\r\n function getLanguage($theForm) {\r\n // set the language. if not set use english as the default\r\n let theLanguage;\r\n\r\n if ($theForm.attr(\"data-language\")) {\r\n theLanguage = $theForm.data(\"language\");\r\n } else {\r\n theLanguage = \"english\";\r\n }\r\n return theLanguage;\r\n }\r\n\r\n /**\r\n * It processes the form to submit to the PHP file, i.e., anyContactFormProcessor.php\r\n * @param {event} e The native javascript of form submit argument.\r\n */\r\n function submitContactForm(e) {\r\n // stop default submit form action from happening\r\n e.preventDefault();\r\n\r\n var $theForm = $(e.target);\r\n\r\n // set the language. if not set use english as the default\r\n const theLanguage = getLanguage($theForm);\r\n\r\n // if we have stages, we have a submit area which is basically the last stage\r\n // otherwise for those contact forms that we have only one stage, the whole form is considered as the submit area\r\n let $submitArea = $theForm.find(submitAreaSelector);\r\n if ($submitArea.length === 0) {\r\n $submitArea = $theForm;\r\n }\r\n\r\n // we first validate the submit area locally, and then post data to the server, i.e., anyContactFormProcessor.php\r\n if (validateAnArea($submitArea, theLanguage) !== false) {\r\n // email subject\r\n // can use values from multiple fields to create the email subject and they will be concatenated\r\n $theForm.find(\".useForEmailSubject\").each(function () {\r\n $theForm\r\n .find(fieldsSelectors.subject)\r\n .val($theForm.find(fieldsSelectors.subject).val() + $(this).val());\r\n });\r\n\r\n // let user know message is sending\r\n var $sendButton = $theForm.find(submitButtonSelector);\r\n var oldButtonMessage = $sendButton.val();\r\n\r\n // while submiting the data, a 'disabled' attribute added to the button. So, we need to have an appropriate styling for this case.\r\n $sendButton\r\n .val(theLanguage === \"french\" ? \"Envoi...\" : \"sending...\")\r\n .prop(\"disabled\", true);\r\n\r\n // submit to mailchimp, if appropriate\r\n if ($theForm.attr(\"data-mailchimpURL\")) {\r\n var $NewsletterSignup = $theForm.find(fieldsSelectors.newsletterSignup);\r\n\r\n if ($NewsletterSignup.prop(\"checked\")) {\r\n var mcURL = $theForm.attr(\"data-mailchimpURL\");\r\n\r\n //find their email address\r\n var guestEmail = $theForm\r\n .find('input[data-mailchimpEmail=\"true\"]')\r\n .val();\r\n var guestName = $theForm\r\n .find('input[data-mailchimpName=\"true\"]')\r\n .val();\r\n var guestFirstName = guestName.slice(0, guestName.indexOf(\" \"));\r\n\r\n //create new form\r\n var $mailchimpForm = $(\r\n '
'\r\n );\r\n\r\n //append to page\r\n $(\"body\").append($mailchimpForm);\r\n\r\n //submit new form\r\n //var $mcForm = $('#mailchimpSignUpForm');\r\n\r\n $.ajax({\r\n type: \"GET\",\r\n url: $($mailchimpForm).attr(\"action\"),\r\n data: $($mailchimpForm).serialize(),\r\n cache: false,\r\n dataType: \"jsonp\",\r\n jsonp: \"c\", // trigger MailChimp to return a JSONP response\r\n contentType: \"application/json; charset=utf-8\",\r\n error: function (error) {\r\n // According to jquery docs, this is never called for cross-domain JSONP requests\r\n\r\n addNewsletterSignupResultToForm(\r\n $theForm,\r\n \"Will add to newsletter list.\"\r\n );\r\n\r\n // send email\r\n postEmailToServer(\r\n $theForm,\r\n $sendButton,\r\n oldButtonMessage,\r\n theLanguage\r\n );\r\n },\r\n success: function (data) {\r\n var NewsLetterSignupResult;\r\n\r\n if (data.result != \"success\") {\r\n NewsLetterSignupResult =\r\n data.msg || \"Will add to newsletter list.\";\r\n } else {\r\n NewsLetterSignupResult = \"success!\";\r\n }\r\n\r\n addNewsletterSignupResultToForm($theForm, NewsLetterSignupResult);\r\n\r\n // send email\r\n postEmailToServer(\r\n $theForm,\r\n $sendButton,\r\n oldButtonMessage,\r\n theLanguage\r\n );\r\n },\r\n });\r\n } else {\r\n // do not submit to mailchimp, so go straight to email sending\r\n postEmailToServer(\r\n $theForm,\r\n $sendButton,\r\n oldButtonMessage,\r\n theLanguage\r\n );\r\n }\r\n } else {\r\n // do not submit to mailchimp, so go straight to email sending\r\n postEmailToServer($theForm, $sendButton, oldButtonMessage, theLanguage);\r\n }\r\n }\r\n }\r\n\r\n function addNewsletterSignupResultToForm(theForm, SUResult) {\r\n //remove embedded links from error messages\r\n SUResult = SUResult.slice(0, SUResult.indexOf(\"<\"));\r\n\r\n $(theForm).append(\r\n ''\r\n );\r\n }\r\n\r\n /**\r\n * It filters out empty inputs for when the class hideEmptyFields is used.\r\n * @param {HtmlElement} theInput Native Html element for the input\r\n * @returns false if the input is empty, otherwise true..\r\n */\r\n function filterEmptyInputs(theInput) {\r\n if (\r\n $(theInput).attr(\"type\") == \"number\" ||\r\n $(theInput).attr(\"type\") == \"text\" ||\r\n $(theInput).attr(\"type\") == \"hidden\"\r\n ) {\r\n // var toReturn = $(theInput).val() !== '';\r\n\r\n // console.log( $(theInput).attr('name') + ': ' + toReturn + '\\n');\r\n\r\n //return toReturn;\r\n\r\n return $(theInput).val() !== \"\";\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * Posts the data to the server, i.e., anyContactFormProcessor.php\r\n * @param {JQueryObject} $theForm he form which is converted to a JQuery object.\r\n * @param {JQueryObject} $sendButton The submit button, being used to re-enable the button.\r\n * @param {string} oldButtonMessage The original text for the submit button, being used when the submit button is being re-enabled.\r\n * @param {string} theLanguage The current language of the page.\r\n */\r\n function postEmailToServer(\r\n $theForm,\r\n $sendButton,\r\n oldButtonMessage,\r\n theLanguage\r\n ) {\r\n //get the data to send to server\r\n var $serializedData;\r\n\r\n if ($theForm.hasClass(\"processAllFormsTogether hideEmptyFields\")) {\r\n $serializedData = $(\".processAllFormsTogether :input\")\r\n .filter(function () {\r\n return filterEmptyInputs(this);\r\n })\r\n .serialize();\r\n\r\n //$data = $('.processAllFormsTogether :input').serialize();\r\n } else if ($theForm.hasClass(\"processAllFormsTogether\")) {\r\n $serializedData = $(\".processAllFormsTogether :input\").serialize();\r\n } else if ($theForm.hasClass(\"hideEmptyFields\")) {\r\n $serializedData = $theForm\r\n .find(\":input\")\r\n .filter(function () {\r\n return filterEmptyInputs(this);\r\n })\r\n .serialize();\r\n\r\n //$data = $(theForm).find(':input').serialize();\r\n } else {\r\n $serializedData = $theForm.serialize();\r\n }\r\n\r\n // post submission to server, i.e., anyContactFormProcessor.php\r\n $.ajax({\r\n type: \"post\",\r\n url: $theForm.data(\"form-processor-location\"),\r\n data: $serializedData,\r\n beforeSend: () => {\r\n // we trigger an event on the form, beforeSubmit, so if another js file wants to do something before submitting the data\r\n $theForm.trigger(\"beforeSubmit\");\r\n return true;\r\n },\r\n success: function (response) {\r\n // we trigger an event on the form, afterSuccess, so if another js file wants to do something after successful submission\r\n $theForm.trigger(\"afterSuccess\", response);\r\n\r\n // re-enable the send button\r\n resetSendButton();\r\n\r\n //hide the form and show success message (must be sibling to the form and have class successMessage)\r\n $theForm.fadeOut(500, function () {\r\n $theForm\r\n .parent()\r\n .find(successMessageSelector)\r\n .fadeIn(100, function () {\r\n $(\"html, body\").animate(\r\n {\r\n scrollTop:\r\n $theForm\r\n .parent()\r\n .find(successMessageSelector)\r\n .first()\r\n .offset().top - 100,\r\n },\r\n 500\r\n );\r\n });\r\n });\r\n\r\n //record success in Google Analytics\r\n if (ga)\r\n ga(\"send\", {\r\n hitType: \"event\",\r\n eventCategory: \"FormSubmission\",\r\n eventAction: \"ButtonClick\",\r\n eventLabel: $theForm.attr(\"id\"),\r\n });\r\n },\r\n error: function (response) {\r\n // we trigger an event on the form, afterError, so if another js file wants to do something after unsuccessful submission\r\n $theForm.trigger(\"afterError\", response);\r\n\r\n // we don't have statusText in http/2 (server), so using a custom header, reason-phrase, we created.\r\n if (\r\n response.statusText == \"Recaptcha Incorrect\" ||\r\n response.getResponseHeader(\"reason-phrase\") == \"Recaptcha Incorrect\"\r\n ) {\r\n addErrorMessage(\r\n $theForm.find(fieldsSelectors.recaptcha),\r\n \"recaptchaNotTicked\",\r\n theLanguage\r\n );\r\n\r\n grecaptcha.reset();\r\n\r\n scrollToElementInError();\r\n } else if (\r\n response.statusText == \"Email Invalid\" ||\r\n response.getResponseHeader(\"reason-phrase\") == \"Email Invalid\"\r\n ) {\r\n addErrorMessage(\r\n $theForm.find(fieldsSelectors.emailAddress),\r\n \"emailNotValid\",\r\n theLanguage\r\n );\r\n\r\n grecaptcha.reset();\r\n\r\n scrollToElementInError();\r\n } else {\r\n addErrorMessage(\r\n $theForm.find(submitButtonSelector),\r\n \"unknownError\",\r\n theLanguage\r\n );\r\n }\r\n\r\n resetSendButton();\r\n },\r\n complete: function (response) {\r\n // we trigger an event on the form, afterComplete, so if another js file wants to do something after the submission regardless of success or failure of submission\r\n $theForm.trigger(\"afterComplete\", response);\r\n },\r\n });\r\n\r\n /**\r\n * It re-enables the send button\r\n */\r\n function resetSendButton() {\r\n $sendButton.val(oldButtonMessage).prop(\"disabled\", false);\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {JQueryObject} $area The area for which we are removing the validation errors. It could be the submit area or a particular stage.\r\n */\r\n function removeOldValidationWarningsFromArea($area) {\r\n //Remove old validation error classes\r\n $area\r\n .find(`.${validationIdentifiers.inputErrorClass}`)\r\n .removeClass(validationIdentifiers.inputErrorClass);\r\n\r\n //remove old validation messages\r\n $area.find(`.${validationIdentifiers.messageErrorClass}`).remove();\r\n\r\n firstElementInError = null;\r\n }\r\n\r\n /**\r\n * Being used to set the focus on the first element with validation error.\r\n */\r\n let firstElementInError = null;\r\n\r\n /**\r\n * It adds a proper validation error style and message for the element.\r\n * @param {JQueryObject} $element The element for which we want to add the validation error.\r\n * @param {string} errCode The validation error type, e.g., required filed error. The codes defined down in this file.\r\n * @param {string} language The current language of the page.\r\n */\r\n function addErrorMessage($element, errCode, language) {\r\n $element.addClass(validationIdentifiers.inputErrorClass);\r\n\r\n //css hides validationErrorMessages by default, so need to display block here.\r\n $element.after(\r\n `
` +\r\n getErrorMessage(errCode, language) +\r\n \"
\"\r\n );\r\n\r\n if (firstElementInError == null) {\r\n firstElementInError = $element;\r\n }\r\n }\r\n\r\n /**\r\n * Scroll to first element in error\r\n */\r\n function scrollToElementInError() {\r\n firstElementInError.focus();\r\n firstElementInError = null;\r\n }\r\n\r\n //*************** error messages *****************\r\n\r\n //object type to store useful error messages in\r\n\r\n function errorCodeDescriptor(errorCode, english, french) {\r\n this.errorCode = errorCode;\r\n this.english = english;\r\n this.french = french;\r\n }\r\n\r\n const errorCodes = [];\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"http\",\r\n \"http is not allowed in entries\",\r\n \"http n'est pas autorisé\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"requiredText\",\r\n \"Please enter a value.\",\r\n \"Entrez une valeur, il est nécessaire\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"requiredCheck\",\r\n \"This is required to continue. Thank you.\",\r\n \"Ceci est nécessaire pour continuer. Je vous remercie.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"requiredSelection\",\r\n \"Please select an option.\",\r\n \"Veuillez sélectionner une option. Je vous remercie\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"emailNotValid\",\r\n \"Please check your email address.\",\r\n \"Vérifiez votre adresse e-mail, cela ne semble pas être valide. Je vous remercie.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"phoneNotValid\",\r\n \"Please check your phone number.\",\r\n \"Veuillez vérifiez votre numéro de téléphone, Celui-ci ne semble pas être valide. Je vous remercie.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"phoneIncCountryNotValid\",\r\n \"Please check your phone number. Please include the country code starting with + (e.g +353 / +44), but do not include any brackets.\",\r\n \"Veuillez vérifiez votre numéro de téléphone. Veuillez inclure le code du pays commençant par +33, +44 etc.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"valuesDoNotMatch\",\r\n \"Please check. These values do not match.\",\r\n \"Vérifiez s'il vous plaît. Ces valeurs ne correspondent pas. Je vous remercie.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"recaptchaNotTicked\",\r\n \"Please tick the 'I'm not a Robot' box. Thank you.\",\r\n \"Veuillez compléter l'anti-spam en cochant la case. Je vous remercie.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"singleOccupancyNotSelected2PerRoom\",\r\n \"You must select the number of Single Occupancy Rooms you require (max 2 people per room).\",\r\n \"You must select the number of Single Occupancy Rooms you require (max 2 people per room).\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"unknownError\",\r\n \"I'm sorry, there was an error and the message cannot be sent. Please email or phone us instead. We're sorry for the inconvenience.\",\r\n \"Je suis désolé, il y a eu une erreur et le message ne peut pas être envoyé. Pourriez-vous nous envoyer un courriel ou nous téléphoner plutôt s'il vous plait? Nous nous excusons pour le désagrément.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"voucherCodeInvalid\",\r\n \"I'm sorry, that does not appear to be a valid voucher code.\",\r\n \"Je suis désolé, cela ne semble pas être un code de bon valable.\"\r\n )\r\n );\r\n\r\n errorCodes.push(\r\n new errorCodeDescriptor(\r\n \"voucherCodeExpired\",\r\n \"I'm sorry, that voucher code has expired.\",\r\n \"Je suis désolé, ce code de bon a expiré.\"\r\n )\r\n );\r\n\r\n function getErrorMessage(errCode, language) {\r\n for (var i = 0, len = errorCodes.length; i < len; i++) {\r\n if (errorCodes[i][\"errorCode\"] == errCode) {\r\n return errorCodes[i][language];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * It validates the area, could be the submit area or one particular stage.\r\n * @param {JQueryObject} $area The area for which we are doing the validation, i.e., submit area or a particular stage.\r\n * @param {string} theLanguage The current language of the page.\r\n * @returns true if the area is valid, otherwise false.\r\n */\r\n function validateAnArea($area, theLanguage) {\r\n removeOldValidationWarningsFromArea($area);\r\n\r\n let validationSuccess = true;\r\n\r\n // check all fields\r\n $area\r\n .find(`input:not(${submitButtonSelector}), textarea, select`)\r\n .each(function () {\r\n const $element = $(this);\r\n\r\n // Check for code insertion\r\n if ($element.val().toLowerCase().indexOf(\"http\") != -1) {\r\n addErrorMessage($element, \"http\", theLanguage);\r\n validationSuccess = false;\r\n }\r\n\r\n //check if is required\r\n if (\r\n $element.hasClass(validationIdentifiers.requiredClass) ||\r\n $element.data(validationIdentifiers.requiredDataAttribute) !==\r\n undefined\r\n ) {\r\n if ($element.is(\"input,textarea\") && $element.val()?.trim() == \"\") {\r\n addErrorMessage($element, \"requiredText\", theLanguage);\r\n validationSuccess = false;\r\n }\r\n\r\n if (\r\n $element.is('input[type=\"checkbox\"]') &&\r\n !$element.prop(\"checked\")\r\n ) {\r\n addErrorMessage($element, \"requiredCheck\", theLanguage);\r\n validationSuccess = false;\r\n }\r\n\r\n if ($element.is(\"select\") && $element.val() == \"notSet\") {\r\n addErrorMessage($element, \"requiredSelection\", theLanguage);\r\n validationSuccess = false;\r\n }\r\n }\r\n\r\n //check if is an email address\r\n if (\r\n ($element.hasClass(validationIdentifiers.emailClass) ||\r\n $element.data(validationIdentifiers.emailDataAttribute) !==\r\n undefined) &&\r\n $element.val() != \"\"\r\n ) {\r\n if ($element.val().indexOf(\"@\") == -1) {\r\n addErrorMessage($element, \"emailNotValid\", theLanguage);\r\n validationSuccess = false;\r\n }\r\n }\r\n\r\n ///^[+]?(1\\-|1\\s|1|\\d{3}\\-|\\d{3}\\s|)?((\\(\\d{3}\\))|\\d{3})(\\-|\\s)?(\\d{3})(\\-|\\s)?(\\d{4})$/g\r\n //check if is a phone number, we are using a regular expression for this\r\n if (\r\n $element.data(validationIdentifiers.phoneDataAttribute) !==\r\n undefined &&\r\n $element.val() != \"\" &&\r\n !$element\r\n .val()\r\n .match(\r\n /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/im\r\n )?.length\r\n ) {\r\n addErrorMessage($element, \"phoneNotValid\", theLanguage);\r\n validationSuccess = false;\r\n }\r\n\r\n //check if is a phone number, we are using a regular expression for this\r\n if (\r\n $element.data(validationIdentifiers.phoneIncCountryDataAttribute) !==\r\n undefined &&\r\n $element.val() != \"\" &&\r\n !$element.val().match(/^[\\+]{1}[0-9 ]{12,18}$/im)?.length\r\n ) {\r\n addErrorMessage($element, \"phoneIncCountryNotValid\", theLanguage);\r\n validationSuccess = false;\r\n }\r\n\r\n if ($element.data(\"matching-field\")) {\r\n var baseValue = $element.val();\r\n\r\n var matchingFieldValue = $element.data(\"matching-field\");\r\n\r\n // get all the matching fields\r\n $area\r\n .find(\"[data-matching-field='\" + matchingFieldValue + \"']\")\r\n .each(function (index, toMatchElement) {\r\n if ($(toMatchElement).val() != baseValue) {\r\n addErrorMessage(\r\n $(toMatchElement),\r\n \"valuesDoNotMatch\",\r\n theLanguage\r\n );\r\n validationSuccess = false;\r\n }\r\n });\r\n }\r\n });\r\n\r\n //Check if google recaptcha has been passed\r\n var gRecaptchaId = $area\r\n .find(fieldsSelectors.recaptcha)\r\n .data(\"grecaptchaid\");\r\n if (gRecaptchaId != undefined) {\r\n var response = grecaptcha.getResponse(gRecaptchaId);\r\n\r\n if (response.length == 0) {\r\n $area\r\n .find(fieldsSelectors.recaptcha)\r\n .addClass(validationIdentifiers.inputErrorClass);\r\n\r\n addErrorMessage(\r\n $area.find(fieldsSelectors.recaptcha),\r\n \"recaptchaNotTicked\",\r\n theLanguage\r\n );\r\n\r\n validationSuccess = false;\r\n }\r\n }\r\n\r\n //scroll to first element in error\r\n if (!validationSuccess) {\r\n scrollToElementInError();\r\n }\r\n\r\n //All conditions passed so return true.\r\n return validationSuccess;\r\n }\r\n\r\n function setupPlusMinusButtons($contactForm) {\r\n $contactForm.find('input[type=\"number\"]').each(function () {\r\n //see if it's already been setup. This way we can call this function again later on when extra number inputs have been created.\r\n if (!$(this).next().hasClass(increaseDecreaseButtonAreaClass)) {\r\n $(this).wrap(`
`);\r\n\r\n $(this).before(\r\n '
'\r\n );\r\n\r\n $(this).after(\r\n '
'\r\n );\r\n }\r\n });\r\n }\r\n};\r\n"]}