{"version":3,"sources":["app/js/trial-page.js","app/js/14-days-trial-modal.js","app/js/common/beauty-slider.js","app/js/common/play-pause-modal-video.js","app/js/14-days-trial-active-camaign.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"trial.js","sourcesContent":["PES = PES || {};\r\nPES.TrialPage = function () {\r\n\r\n var displayErrorAsPopup = function (element, errorMessage) {\r\n var parentElement;\r\n if (errorMessage !== \"\") {\r\n if (!$(element).next().hasClass(\"popover\")) {\r\n\r\n if ($(element).closest('.yellow-tooltip').length > 0) {\r\n parentElement = \".yellow-tooltip\";\r\n } else {\r\n parentElement = \"body\";\r\n }\r\n $(element).popover({\r\n content: errorMessage,\r\n placement: \"top\",\r\n trigger: \"manual\",\r\n container: parentElement\r\n }).popover(\"show\");\r\n }\r\n }\r\n };\r\n\r\n function modifyFormSubmitHref() {\r\n var defaultUrl = 'download-office-timeline';\r\n var anchor;\r\n var submitButton;\r\n var submitForm;\r\n var currentUrl;\r\n\r\n for (var i = 1; i < 5; i++) {\r\n anchor = defaultUrl + i.toString();\r\n submitForm = '.' + anchor + ' .first-form';\r\n currentUrl = $(submitForm).attr('action');\r\n $(submitForm).attr('action', currentUrl + '#' + anchor);\r\n submitButton = '.' + anchor + ' .form-button.input-group-addon';\r\n $(submitButton).attr('href', '#' + anchor);\r\n }\r\n }\r\n\r\n var init = function () {\r\n $(document).ready(function () {\r\n\r\n if ($(\".field-validation-error\").text() && window.location.hash.length > 0) {\r\n displayErrorAsPopup($(\".js-first-email\")[0], $(\".field-validation-error\").first().text());\r\n $(document).scrollTop(0);\r\n } else if (window.location.hash) {\r\n var targetClass = window.location.hash.replace(\"#\", \"\");\r\n var scrollToElement = $(\".\" + targetClass).offset().top;\r\n $(document).scrollTop(scrollToElement);\r\n }\r\n\r\n });\r\n $(document).on(\"click\", function () {\r\n if ($(this).attr(\"id\") !== \"subscribeFirst\") {\r\n $(\"a.form-button-try-for-free\").siblings(\"input[type='text']\").popover(\"dispose\");\r\n }\r\n });\r\n\r\n $('[data-toggle=\"popover\"]').popover({\r\n container: 'body'\r\n });\r\n\r\n $(\"a.form-button-try-for-free\").on(\"click\", function (evt) {\r\n evt.preventDefault();\r\n evt.stopImmediatePropagation();\r\n\r\n var form = $(this).parents(\"form\");\r\n if (form.valid()) {\r\n form.submit();\r\n } else {\r\n var element = $(this).siblings(\"input[type='text']\");\r\n var error = $(this).siblings(\"span\").text();\r\n displayErrorAsPopup(element, error);\r\n }\r\n\r\n return false;\r\n });\r\n\r\n $(\"a.form-button-try-for-free\").on(\"focusout\", function () {\r\n var element = $(this).siblings(\"input[type='text']\");\r\n $(element).popover(\"hide\");\r\n });\r\n\r\n modifyFormSubmitHref();\r\n };\r\n\r\n return {\r\n init: init\r\n };\r\n};","PES = PES || {}\r\nPES.TrialModal = function () {\r\n PES.emailValidation =\r\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n PES.scrollPosHidingPopup = 100;\r\n var registerUserForTrial = function () {\r\n $(\"#submitPlanviewRequest\").on(\"click\", function (e) {\r\n e.preventDefault();\r\n e.stopImmediatePropagation();\r\n tryForFreePost();\r\n });\r\n $(\".trial-email\").on('keyup', function (e) {\r\n if (e.keyCode == 13) {\r\n tryForFreePost();\r\n }\r\n });\r\n function tryForFreePost() {\r\n var email = $(\".trial-email\").val();\r\n if (PES.emailValidation.test(String(email).toLowerCase())) {\r\n $(\".try-for-free-txt\").addClass(\"inactive\");\r\n $(\".try-for-free\").attr(\"disabled\", \"disabled\");\r\n $(\".loading-gif\").removeClass(\"inactive\");\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: $(\".try-for-free\").attr(\"data-url\"),\r\n data: { email: email },\r\n success: function (response) {\r\n setTimeout(function () {\r\n $(\".try-for-free\").removeAttr(\"disabled\");\r\n $(\".loading-gif\").addClass(\"inactive\");\r\n\r\n $(\".try-for-free-txt\").removeClass(\"inactive\");\r\n }, 100);\r\n\r\n if (response.trialUserExists) {\r\n showErrorMessage(\".trial-email\", $(\".trial-email\").attr(\"data-used-email\"));\r\n } else if (!response.isEmailValid) {\r\n showErrorMessage(\".trial-email\", $(\".trial-email\").attr(\"data-invalid-email\"));\r\n } else {\r\n $(\".trust-pilot-content\").addClass(\"hidden\");\r\n $(\".planview-form\").css(\"display\", \"none\");\r\n $(\".enrolment-confirmation\").removeClass(\"hidden\");\r\n }\r\n }\r\n });\r\n } else {\r\n showErrorMessage(\".trial-email\", $(\".trial-email\").attr(\"data-invalid-email\"));\r\n }\r\n }\r\n\r\n function showErrorMessage(element, errorMessage) {\r\n $(element).first().popover({\r\n content: errorMessage,\r\n placement: \"top\",\r\n trigger: \"manual\"\r\n }).popover(\"show\");\r\n\r\n $(\"body\").on('click', function (e) {\r\n if (!$(e.target).hasClass(\"popover\") && !$(e.target).hasClass(\"try-for-free\") && $(\".popover\").length > 0) {\r\n $(\".popover\").popover(\"dispose\");\r\n }\r\n $(\"body\").off('click');\r\n });\r\n\r\n $(\".trial-email\").on(\"onkeydown\",\r\n function() {\r\n if ($(\".popover\").length > 0) {\r\n $(\".popover\").popover(\"dispose\");\r\n }\r\n });\r\n }\r\n\r\n setTimeout(function() {\r\n $(\".loading-gif\").html($(\".try-for-free\").attr(\"data-loading-text\"));\r\n },500);\r\n }\r\n\r\n\r\n var handlePopUpDisplay = function () {\r\n var startWindowScroll = $(window).scrollTop();\r\n\r\n if (startWindowScroll > PES.scrollPosHidingPopup) {\r\n $(\".new-banner.scroll-y\").removeClass(\"hide-popup\");\r\n } \r\n\r\n $(window).scroll(function () {\r\n var scroll = $(window).scrollTop();\r\n\r\n if (scroll >= PES.scrollPosHidingPopup) {\r\n $(\".new-banner.scroll-y\").removeClass(\"hide-popup\");\r\n } else {\r\n $(\".new-banner.scroll-y\").addClass(\"hide-popup\");\r\n }\r\n });\r\n }\r\n\r\n var init = function () {\r\n registerUserForTrial();\r\n handlePopUpDisplay();\r\n }\r\n\r\n return {\r\n init: init\r\n }\r\n}","var PES = PES || {};\r\nPES.BeautySlider = function () {\r\n function init(container, hasTooltips, navContainer, navAsThumbnails) {\r\n var options = {\r\n items: 1,\r\n mouseDrag: true,\r\n touch: true,\r\n autoplayButtonOutput: false,\r\n speed: 1000,\r\n loop: true,\r\n mode: 'gallery',\r\n navPosition: 'bottom' \r\n }; \r\n if (container) {\r\n options.container = container;\r\n }\r\n if (navContainer) {\r\n options.navContainer = navContainer;\r\n }\r\n if (options.navAsThumbnails) {\r\n options.navAsThumbnails = navAsThumbnails;\r\n }\r\n\r\n var slider = tns(options);\r\n\r\n var onSliderIndexChanged = function(info, eventName) {\r\n //remove and reinsert the pulsating circle elements (this is required in Safari, in order for the animation to work properly)\r\n const activeSlideCircles = $(\"div.slider-with-circles.tns-slide-active\").children(\"span.circle-with-popup\");\r\n if (activeSlideCircles.length > 0) {\r\n activeSlideCircles.each(function() {\r\n const element = this;\r\n const clone = element.cloneNode(true);\r\n element.parentNode.replaceChild(clone, element);\r\n //reinit the tooltip for cloned elements\r\n if (hasTooltips) {\r\n PES.ImageTooltip().initElement(clone);\r\n }\r\n });\r\n } \r\n };\r\n\r\n var resetToZeroIndex = function (info, eventName) {\r\n \r\n if (info.index == 0) { \r\n $(\".made-with-pro-badge\").addClass(\"is-shown\"); \r\n } else {\r\n $(\".made-with-pro-badge\").removeClass(\"is-shown\");\r\n }\r\n\r\n if (info.index == 1) {\r\n $(\".made-with-pro-plus-badge\").addClass(\"is-shown\");\r\n } else {\r\n $(\".made-with-pro-plus-badge\").removeClass(\"is-shown\");\r\n }\r\n\r\n if (info.index == 7 && $(info.container).hasClass('online-general-slider')) {\r\n slider.goTo('next');\r\n slider.goTo('prev'); \r\n }\r\n }\r\n\r\n var isSafari = navigator.vendor &&\r\n navigator.vendor.indexOf('Apple') > -1 &&\r\n navigator.userAgent &&\r\n navigator.userAgent.indexOf('CriOS') == -1 &&\r\n navigator.userAgent.indexOf('FxiOS') == -1;\r\n if (isSafari) {\r\n slider.events.on('indexChanged', onSliderIndexChanged);\r\n }\r\n\r\n slider.events.on('indexChanged', resetToZeroIndex);\r\n }\r\n return {\r\n init: init\r\n };\r\n};","var PES = PES || {};\r\nPES.PlayPauseVideo = function () {\r\n\r\n function playPauseVideo() {\r\n\r\n var modalWindow = \"#video-modal\";\r\n var playerIframe = \".video__container > iframe.video-player\";\r\n var videoId = $(playerIframe).attr(\"data-video\");\r\n var openModalVideo = \".js-open-modal.video-open\";\r\n\r\n function waitForVideo(callback) {\r\n setTimeout(callback, 10);\r\n };\r\n\r\n function checkVideo() {\r\n if ($(modalWindow).hasClass(\"play-video\")) {\r\n $(playerIframe).attr('src', 'https://player.vimeo.com/video/' + videoId + '?autoplay=1');\r\n } else {\r\n $(playerIframe).attr('src', ' ');\r\n }\r\n }\r\n\r\n $(openModalVideo).on(\"click\", function () {\r\n waitForVideo(checkVideo);\r\n });\r\n\r\n $(\"body\").on(\"click\", function (e) {\r\n var target = e.target;\r\n\r\n if ($(target).hasClass(\"video-open\")) {\r\n $(modalWindow).addClass(\"play-video\");\r\n waitForVideo(checkVideo);\r\n } else if ($(target).hasClass(\"close-button\") || (!$(target).closest(\"modal__box\").length && !$(target).hasClass(\"modal__box\"))) {\r\n $(modalWindow).removeClass(\"play-video\");\r\n waitForVideo(checkVideo);\r\n }\r\n });\r\n };\r\n\r\n var init = function () {\r\n playPauseVideo();\r\n };\r\n\r\n return {\r\n init: init\r\n };\r\n}();","PES = PES || {}\r\nPES.ActiveCampaign = function () { \r\n\r\n var scrollAndFocus = function () {\r\n var targetButtons = '.scroll-to-top';\r\n var targetInput = 'input#email';\r\n\r\n $(targetButtons).on('click', function () {\r\n $(window).scrollTop(0);\r\n setTimeout(function () {\r\n $(targetInput).focus();\r\n }, 300);\r\n });\r\n }\r\n\r\n var init = function () {\r\n window.cfields = [];\r\n window._show_thank_you = function (id, message, trackcmp_url, email) {\r\n var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you');\r\n form.querySelector('._form-content').style.display = 'none';\r\n thank_you.style.display = 'block';\r\n const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;\r\n var visitorObject = window[vgoAlias];\r\n if (email && typeof visitorObject !== 'undefined') {\r\n visitorObject('setEmail', email);\r\n visitorObject('update');\r\n } else if (typeof (trackcmp_url) != 'undefined' && trackcmp_url) {\r\n // Site tracking URL to use after inline form submission.\r\n _load_script(trackcmp_url);\r\n }\r\n if (typeof window._form_callback !== 'undefined') window._form_callback(id);\r\n };\r\n window._show_error = function (id, message, html) {\r\n var form = document.getElementById('_form_' + id + '_'), err = document.createElement('div'), button = form.querySelector('button'), old_error = form.querySelector('._form_error'), captcha_label = form.querySelector('.captcha-label');\r\n if (old_error) old_error.parentNode.removeChild(old_error);\r\n err.innerHTML = \"Confirm you’re not a robot:\";\r\n err.className = '_error-inner _form_error _no_arrow';\r\n var wrapper = document.createElement('div');\r\n wrapper.className = '_form-inner';\r\n wrapper.appendChild(err);\r\n captcha_label.parentNode.insertBefore(wrapper, captcha_label);\r\n document.querySelector('[id^=\"_form\"][id$=\"_submit\"]').disabled = false;\r\n if (html) {\r\n var div = document.createElement('div');\r\n div.className = '_error-html';\r\n div.innerHTML = html;\r\n err.appendChild(div);\r\n }\r\n };\r\n window._load_script = function (url, callback) {\r\n var head = document.querySelector('head'), script = document.createElement('script'), r = false;\r\n script.type = 'text/javascript';\r\n script.charset = 'utf-8';\r\n script.src = url;\r\n if (callback) {\r\n script.onload = script.onreadystatechange = function () {\r\n if (!r && (!this.readyState || this.readyState == 'complete')) {\r\n r = true;\r\n callback();\r\n }\r\n };\r\n }\r\n head.appendChild(script);\r\n };\r\n (function () {\r\n if (window.location.search.search(\"excludeform\") !== -1) return false;\r\n var getCookie = function (name) {\r\n var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)'));\r\n return match ? match[2] : null;\r\n }\r\n var setCookie = function (name, value) {\r\n var now = new Date();\r\n var time = now.getTime();\r\n var expireTime = time + 1000 * 60 * 60 * 24 * 365;\r\n now.setTime(expireTime);\r\n document.cookie = name + '=' + value + '; expires=' + now + ';path=/; Secure; SameSite=Lax;';// cannot be HttpOnly\r\n }\r\n var addEvent = function (element, event, func) {\r\n if (element.addEventListener) {\r\n element.addEventListener(event, func);\r\n } else {\r\n var oldFunc = element['on' + event];\r\n element['on' + event] = function () {\r\n oldFunc.apply(this, arguments);\r\n func.apply(this, arguments);\r\n };\r\n }\r\n }\r\n var _removed = false;\r\n var form_to_submit = document.getElementById('_form_4_');\r\n var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false;\r\n\r\n var getUrlParam = function (name) {\r\n var params = new URLSearchParams(window.location.search);\r\n return params.get(name) || false;\r\n };\r\n\r\n for (var i = 0; i < allInputs.length; i++) {\r\n var regexStr = \"field\\\\[(\\\\d+)\\\\]\";\r\n var results = new RegExp(regexStr).exec(allInputs[i].name);\r\n if (results != undefined) {\r\n allInputs[i].dataset.name = window.cfields[results[1]];\r\n } else {\r\n allInputs[i].dataset.name = allInputs[i].name;\r\n }\r\n var fieldVal = getUrlParam(allInputs[i].dataset.name);\r\n\r\n if (fieldVal) {\r\n if (allInputs[i].dataset.autofill === \"false\") {\r\n continue;\r\n }\r\n if (allInputs[i].type == \"radio\" || allInputs[i].type == \"checkbox\") {\r\n if (allInputs[i].value == fieldVal) {\r\n allInputs[i].checked = true;\r\n }\r\n } else {\r\n allInputs[i].value = fieldVal;\r\n }\r\n }\r\n }\r\n\r\n var remove_tooltips = function () {\r\n for (var i = 0; i < tooltips.length; i++) {\r\n tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\r\n }\r\n tooltips = [];\r\n };\r\n var remove_tooltip = function (elem) {\r\n for (var i = 0; i < tooltips.length; i++) {\r\n if (tooltips[i].elem === elem) {\r\n tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\r\n tooltips.splice(i, 1);\r\n return;\r\n }\r\n }\r\n };\r\n var create_tooltip = function (elem, text) {\r\n var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {};\r\n if (elem.type != 'radio' && elem.type != 'checkbox') {\r\n tooltip.className = '_error';\r\n arrow.className = '_error-arrow';\r\n inner.className = '_error-inner';\r\n inner.innerHTML = text;\r\n tooltip.appendChild(arrow);\r\n tooltip.appendChild(inner);\r\n elem.parentNode.appendChild(tooltip);\r\n } else {\r\n tooltip.className = '_error-inner _no_arrow';\r\n tooltip.innerHTML = text;\r\n elem.parentNode.insertBefore(tooltip, elem);\r\n new_tooltip.no_arrow = true;\r\n }\r\n new_tooltip.tip = tooltip;\r\n new_tooltip.elem = elem;\r\n tooltips.push(new_tooltip);\r\n return new_tooltip;\r\n };\r\n var resize_tooltip = function (tooltip) {\r\n var rect = tooltip.elem.getBoundingClientRect();\r\n var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0));\r\n if (scrollPosition < 40) {\r\n tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below';\r\n } else {\r\n tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above';\r\n }\r\n };\r\n var resize_tooltips = function () {\r\n if (_removed) return;\r\n for (var i = 0; i < tooltips.length; i++) {\r\n if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]);\r\n }\r\n };\r\n var validate_field = function (elem, remove) {\r\n var tooltip = null, value = elem.value, no_error = true;\r\n remove ? remove_tooltip(elem) : false;\r\n if (elem.type != 'checkbox') elem.className = elem.className.replace(/ ?_has_error ?/g, '');\r\n if (elem.getAttribute('required') !== null) {\r\n if (elem.type == 'radio' || (elem.type == 'checkbox' && /any/.test(elem.className))) {\r\n var elems = form_to_submit.elements[elem.name];\r\n if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) {\r\n no_error = elem.checked;\r\n }\r\n else {\r\n no_error = false;\r\n for (var i = 0; i < elems.length; i++) {\r\n if (elems[i].checked) no_error = true;\r\n }\r\n }\r\n if (!no_error) {\r\n tooltip = create_tooltip(elem, \"Please select an option.\");\r\n }\r\n } else if (elem.type == 'checkbox') {\r\n var elems = form_to_submit.elements[elem.name], found = false, err = [];\r\n no_error = true;\r\n for (var i = 0; i < elems.length; i++) {\r\n if (elems[i].getAttribute('required') === null) continue;\r\n if (!found && elems[i] !== elem) return true;\r\n found = true;\r\n elems[i].className = elems[i].className.replace(/ ?_has_error ?/g, '');\r\n if (!elems[i].checked) {\r\n no_error = false;\r\n elems[i].className = elems[i].className + ' _has_error';\r\n err.push(\"Checking %s is required\".replace(\"%s\", elems[i].value));\r\n }\r\n }\r\n if (!no_error) {\r\n tooltip = create_tooltip(elem, err.join('
'));\r\n }\r\n } else if (elem.tagName == 'SELECT') {\r\n var selected = true;\r\n if (elem.multiple) {\r\n selected = false;\r\n for (var i = 0; i < elem.options.length; i++) {\r\n if (elem.options[i].selected) {\r\n selected = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n for (var i = 0; i < elem.options.length; i++) {\r\n if (elem.options[i].selected && (!elem.options[i].value || (elem.options[i].value.match(/\\n/g)))) {\r\n selected = false;\r\n }\r\n }\r\n }\r\n if (!selected) {\r\n elem.className = elem.className + ' _has_error';\r\n no_error = false;\r\n tooltip = create_tooltip(elem, \"Please select an option.\");\r\n }\r\n } else if (value === undefined || value === null || value === '') {\r\n elem.className = elem.className + ' _has_error';\r\n no_error = false;\r\n tooltip = create_tooltip(elem, \"This field is required\");\r\n }\r\n }\r\n if (no_error && (elem.id == 'field[]' || elem.id == 'ca[11][v]')) {\r\n if (elem.className.includes('phone-input-error')) {\r\n elem.className = elem.className + ' _has_error';\r\n no_error = false;\r\n }\r\n }\r\n if (no_error && elem.name == 'email') {\r\n if (!value.match(/^[\\+_a-z0-9-'&=]+(\\.[\\+_a-z0-9-']+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,})$/i)) {\r\n elem.className = elem.className + ' _has_error';\r\n no_error = false;\r\n tooltip = create_tooltip(elem, \"Please enter a valid email address\");\r\n }\r\n }\r\n if (no_error && /date_field/.test(elem.className)) {\r\n if (!value.match(/^\\d\\d\\d\\d-\\d\\d-\\d\\d$/)) {\r\n elem.className = elem.className + ' _has_error';\r\n no_error = false;\r\n tooltip = create_tooltip(elem, \"Enter a valid date.\");\r\n }\r\n }\r\n tooltip ? resize_tooltip(tooltip) : false;\r\n return no_error;\r\n };\r\n var needs_validate = function (el) {\r\n if (el.getAttribute('required') !== null) {\r\n return true\r\n }\r\n if (el.name === 'email' && el.value !== \"\") {\r\n return true\r\n }\r\n\r\n if ((el.id == 'field[]' || el.id == 'ca[11][v]') && el.className.includes('phone-input-error')) {\r\n return true\r\n }\r\n\r\n return false\r\n };\r\n var validate_form = function (e) {\r\n var err = form_to_submit.querySelector('._form_error'), no_error = true;\r\n if (!submitted) {\r\n submitted = true;\r\n for (var i = 0, len = allInputs.length; i < len; i++) {\r\n var input = allInputs[i];\r\n if (needs_validate(input)) {\r\n if (input.type == 'tel') {\r\n addEvent(input, 'blur', function () {\r\n this.value = this.value.trim();\r\n validate_field(this, true);\r\n });\r\n }\r\n if (input.type == 'text' || input.type == 'number' || input.type == 'time') {\r\n addEvent(input, 'blur', function () {\r\n this.value = this.value.trim();\r\n validate_field(this, true);\r\n });\r\n addEvent(input, 'input', function () {\r\n validate_field(this, true);\r\n });\r\n } else if (input.type == 'radio' || input.type == 'checkbox') {\r\n (function (el) {\r\n var radios = form_to_submit.elements[el.name];\r\n for (var i = 0; i < radios.length; i++) {\r\n addEvent(radios[i], 'click', function () {\r\n validate_field(el, true);\r\n });\r\n }\r\n })(input);\r\n } else if (input.tagName == 'SELECT') {\r\n addEvent(input, 'change', function () {\r\n validate_field(this, true);\r\n });\r\n } else if (input.type == 'textarea') {\r\n addEvent(input, 'input', function () {\r\n validate_field(this, true);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n remove_tooltips();\r\n for (var i = 0, len = allInputs.length; i < len; i++) {\r\n var elem = allInputs[i];\r\n if (needs_validate(elem)) {\r\n if (elem.tagName.toLowerCase() !== \"select\") {\r\n elem.value = elem.value.trim();\r\n }\r\n validate_field(elem) ? true : no_error = false;\r\n }\r\n }\r\n if (!no_error && e) {\r\n e.preventDefault();\r\n }\r\n resize_tooltips();\r\n return no_error;\r\n };\r\n addEvent(window, 'resize', resize_tooltips);\r\n addEvent(window, 'scroll', resize_tooltips);\r\n\r\n var hidePhoneInputError = function (inputId) {\r\n var errorMessage = document.getElementById(\"error-msg-\" + inputId);\r\n var input = document.getElementById(inputId);\r\n errorMessage.classList.remove(\"phone-error\");\r\n errorMessage.classList.add(\"phone-error-hidden\");\r\n input.classList.remove(\"phone-input-error\");\r\n };\r\n\r\n var initializePhoneInput = function (input, defaultCountry) {\r\n return window.intlTelInput(input, {\r\n utilsScript: \"https://unpkg.com/intl-tel-input@17.0.18/build/js/utils.js\",\r\n autoHideDialCode: false,\r\n separateDialCode: true,\r\n initialCountry: defaultCountry,\r\n preferredCountries: []\r\n });\r\n }\r\n\r\n var setPhoneInputEventListeners = function (inputId, input, iti) {\r\n input.addEventListener('blur', function () {\r\n var errorMessage = document.getElementById(\"error-msg-\" + inputId);\r\n if (input.value.trim()) {\r\n if (iti.isValidNumber()) {\r\n iti.setNumber(iti.getNumber());\r\n if (errorMessage.classList.contains(\"phone-error\")) {\r\n hidePhoneInputError(inputId);\r\n }\r\n } else {\r\n showPhoneInputError(inputId)\r\n }\r\n } else {\r\n if (errorMessage.classList.contains(\"phone-error\")) {\r\n hidePhoneInputError(inputId);\r\n }\r\n }\r\n });\r\n\r\n input.addEventListener(\"countrychange\", function () {\r\n iti.setNumber('');\r\n });\r\n\r\n input.addEventListener(\"keydown\", function (e) {\r\n var charCode = (e.which) ? e.which : e.keyCode;\r\n if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode !== 8) {\r\n e.preventDefault();\r\n }\r\n });\r\n };\r\n\r\n var showPhoneInputError = function (inputId) {\r\n var errorMessage = document.getElementById(\"error-msg-\" + inputId);\r\n var input = document.getElementById(inputId);\r\n errorMessage.classList.add(\"phone-error\");\r\n errorMessage.classList.remove(\"phone-error-hidden\");\r\n input.classList.add(\"phone-input-error\");\r\n };\r\n\r\n\r\n window['recaptcha_callback'] = function () {\r\n // Get all recaptchas in the DOM (there may be more than one form on the page).\r\n var recaptchas = document.getElementsByClassName(\"g-recaptcha\");\r\n for (var i in recaptchas) {\r\n // Set the recaptcha element ID, so the recaptcha can be applied to each element.\r\n var recaptcha_id = \"recaptcha_\" + i;\r\n recaptchas[i].id = recaptcha_id;\r\n var el = document.getElementById(recaptcha_id);\r\n if (el != null) {\r\n var sitekey = el.getAttribute(\"data-sitekey\");\r\n var stoken = el.getAttribute(\"data-stoken\");\r\n grecaptcha.render(recaptcha_id, { \"sitekey\": sitekey, \"stoken\": stoken });\r\n }\r\n }\r\n }; _load_script(\"https://www.google.com/recaptcha/api.js?onload=recaptcha_callback&render=explicit\");\r\n var _form_serialize = function (form) { if (!form || form.nodeName !== \"FORM\") { return } var i, j, q = []; for (i = 0; i < form.elements.length; i++) { if (form.elements[i].name === \"\") { continue } switch (form.elements[i].nodeName) { case \"INPUT\": switch (form.elements[i].type) { case \"tel\": q.push(form.elements[i].name + \"=\" + encodeURIComponent(form.elements[i].previousSibling.querySelector('div.iti__selected-dial-code').innerText) + encodeURIComponent(\" \") + encodeURIComponent(form.elements[i].value)); break; case \"text\": case \"number\": case \"date\": case \"time\": case \"hidden\": case \"password\": case \"button\": case \"reset\": case \"submit\": q.push(form.elements[i].name + \"=\" + encodeURIComponent(form.elements[i].value)); break; case \"checkbox\": case \"radio\": if (form.elements[i].checked) { q.push(form.elements[i].name + \"=\" + encodeURIComponent(form.elements[i].value)) } break; case \"file\": break }break; case \"TEXTAREA\": q.push(form.elements[i].name + \"=\" + encodeURIComponent(form.elements[i].value)); break; case \"SELECT\": switch (form.elements[i].type) { case \"select-one\": q.push(form.elements[i].name + \"=\" + encodeURIComponent(form.elements[i].value)); break; case \"select-multiple\": for (j = 0; j < form.elements[i].options.length; j++) { if (form.elements[i].options[j].selected) { q.push(form.elements[i].name + \"=\" + encodeURIComponent(form.elements[i].options[j].value)) } } break }break; case \"BUTTON\": switch (form.elements[i].type) { case \"reset\": case \"submit\": case \"button\": q.push(form.elements[i].name + \"=\" + encodeURIComponent(form.elements[i].value)); break }break } } return q.join(\"&\") };\r\n var form_submit = function (e) {\r\n e.preventDefault();\r\n if (validate_form()) {\r\n // use this trick to get the submit button & disable it using plain javascript\r\n document.querySelector('#_form_4_submit').disabled = true;\r\n var serialized = _form_serialize(document.getElementById('_form_4_')).replace(/%0A/g, '\\\\n');\r\n var err = form_to_submit.querySelector('._form_error');\r\n err ? err.parentNode.removeChild(err) : false;\r\n _load_script('https://news-officetimeline.activehosted.com/proc.php?' + serialized + '&jsonp=true');\r\n }\r\n return false;\r\n };\r\n addEvent(form_to_submit, 'submit', form_submit);\r\n })();\r\n\r\n scrollAndFocus();\r\n }\r\n\r\n return {\r\n init: init\r\n }\r\n}"]}