{"version":3,"sources":["m82.js"],"names":["window","NodeList","prototype","forEach","Array","from","symbolIterator","Symbol","iterator","e","toStr","Object","toString","isCallable","fn","call","toInteger","value","number","Number","isNaN","isFinite","Math","floor","abs","maxSafeInteger","pow","toLength","len","min","max","setGetItemHandler","isIterator","items","getItem","k","next","getArray","T","A","mapFn","item","kValue","done","TypeError","length","arrayLikeOrIterator","C","arguments","undefined","assign","defineProperty","enumerable","configurable","writable","target","to","i","nextSource","keysArray","keys","nextIndex","nextKey","desc","getOwnPropertyDescriptor","CustomEvent","event","params","bubbles","cancelable","detail","evt","document","createEvent","initCustomEvent","Event","doc","proto","querySelector","err","method","nativ","selectors","test","id","Date","now","replace","result","Element","arr","hasOwnProperty","append","argArr","slice","docFrag","createDocumentFragment","argItem","isNode","Node","appendChild","createTextNode","String","Document","DocumentFragment","remove","parentNode","removeChild","Text","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","parentElement","nodeType","contains","indexOf","apply","IntersectionObserverEntry","get","intersectionRatio","getFrameElement","defaultView","frameElement","startDoc","frame","ownerDocument","registry","crossOriginUpdater","crossOriginRect","entry","time","rootBounds","ensureDOMRect","boundingClientRect","intersectionRect","getEmptyRect","isIntersecting","targetRect","targetArea","width","height","intersectionArea","toFixed","IntersectionObserver","callback","opt_options","options","Error","root","_checkForIntersections","throttle","bind","THROTTLE_TIMEOUT","_callback","_observationTargets","_queuedEntries","_rootMarginValues","_parseRootMargin","rootMargin","thresholds","_initThresholds","threshold","map","margin","unit","join","_monitoringDocuments","_monitoringUnsubscribes","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","convertFromParentRect","observer","_resetCrossOriginUpdater","observe","isTargetAlreadyObserved","some","element","_registerInstance","push","_monitorIntersections","unobserve","filter","_unmonitorIntersections","_unregisterInstance","disconnect","_unmonitorAllIntersections","takeRecords","records","opt_threshold","isArray","sort","t","a","opt_rootMargin","marginString","margins","split","parts","exec","parseFloat","win","monitoringInterval","domObserver","setInterval","addEvent","MutationObserver","attributes","childList","characterData","subtree","clearInterval","removeEvent","rootDoc","index","hasDependentTargets","itemDoc","unsubscribe","splice","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","getBoundingClientRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","newEntry","_hasCrossedThreshold","getComputedStyle","display","parent","getParentNode","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","body","documentElement","overflow","computeRectIntersection","isDoc","html","top","left","right","clientWidth","bottom","clientHeight","_expandRectByRootMargin","rect","newRect","oldRatio","newRatio","containsDeep","performance","timeout","timer","setTimeout","node","opt_useCapture","addEventListener","attachEvent","removeEventListener","detatchEvent","rect1","rect2","y","x","parentBoundingRect","parentIntersectionRect","child","assignedSlot","host","MOBILE_BREAKPOINT","MOBILE_LARGE_BREAKPOINT","TABLET_BREAKPOINT","DESKTOP_SMALL_BREAKPOINT","DESKTOP_BREAKPOINT","XHR_REQUEST","XMLHttpRequest","debounce","functionCall","clearTimeout","doLoop","wrap","wrapper","insertBefore","createEl","elm","cls","newel","createElement","className","toggleAriaExpanded","setAttribute","getAttribute","toggleAriaHidden","toggleAnswerVisibility","classList","style","visibility","calculateHeight","children","total","offsetHeight","removeAttribute","trimHtml","limit","preserveTags","wordBreak","suffix","moreLink","sum","row","cut","add","tagMatch","tagName","tagStack","more","rowCut","substring","class","link","match","pop","findAncestor","reCAPTCHArenderer","M52container","M52","reCAPTCHArender","RenderRecaptchas","F13container","f13","F02container","f02","M19container","m19","F20container","f20","F21container","f21","F22container","f22","F23container","f23","M46container","M46","M76container","m76","M92container","m92","M106container","m106","getQueryStringParams","query","clean_query","reduce","param","key","decodeURIComponent","validateAnPostCode","ap_check","anpostcode","substr","ap_code","ap_weights","ap_total","ap_anticipated_check","ap_spaceleft","parseInt","numberWithCommas","log10","log","LOG10E","checkIsValidDate","day","month","year","date","setFullYear","getFullYear","getMonth","getDate","setSessionCookie","name","cookie","escape","getCookie","cname","decodedCookie","cookiesArray","selectedCookie","charAt","deleteCookie","setMonth","toUTCString","showAPLoader","show","loaderWrapper","loaderShownCls","redirectTimer","setRedirectTimer","url","allowedTime","location","href","reauthenticateUser","origin","sendXhrRequest","headers","successCallback","data","errorCallback","open","setRequestHeader","send","JSON","stringify","onreadystatechange","currentTarget","readyState","response","parse","responseText","status","trackItem","form","tracking_code","dataLayer","isFormValid","serviceCode","toUpperCase","countryCode","console","pushDataLayer","obj","virtualPageView","pageviewUrl","pageviewTitle","GTMData","pageview_url","pageview_title","doValidation","constraints","onValidSubmit","validateOnKeyup","submitDisabled","button","ev","handleFormSubmit","inputs","querySelectorAll","errors","validate","showErrorsForInput","checkForEnabled","errorFound","findError","updatedString","type","preventNonNumericalInput","charCode","which","keyCode","charStr","fromCharCode","preventDefault","checkRequiredFieldsComplete","disabled","innerHTML","checkError","errorObj","error","message","maximum","lessThanOrEqualTo","strict","allowKeyup","format","numericality","showErrors","disableButtonAfterSubmission","scrolledToFirstError","scrollIntoView","focus","scrollBy","input","formGroup","closestParent","messages","resetFormGroup","addError","error_blocks","block","innerText","textContent","customRangeSlider","slider","init","sliders","currentSlider","thisSliderInput","prependText","appendText","icon","maxYearsLabel","_setOutput","_onSliderChange","_initRangeTouch","RangeTouch","ranges","setup","_updateOutput","_updateSliderPosition","percentage","Forms","inputWrapper","selectWrapper","textareaWrapper","radioWrapper","focused","showPassword","showPasswordShown","inputWrappers","_handleFocus","_handleBlur","_handleDynamicFields","_handlePreFilledFields","_handleNumberField","_handlePasswordField","select","_handleChange","textarea","radioInput","_handleRadioBlur","onfocus","oninput","onchange","onblur","onkeydown","toggle","m82","dateComplaint","dateDecision","tabBtn","tabField","charCounter","charCounterMax","field","caseNumber","selector","firstName","lastName","email","complaintDay","complaintMonth","complaintYear","complaintHiddenDate","decisionDay","decisionMonth","decisionYear","decisionHiddenDate","notes","stampValue","chequeValue","noteLength","submitValidCallBackFunction","assignFieldProperties","f","errorMessage","handleClickOption","setComplaintValues","fullDate","setDecisionValues","currentYear","today","currentDate","getUTCDate","currentMonth","getUTCMonth","getUTCFullYear","lastYear","fullDateLastYear","charCount","noteBox","maxLength","maxCounter","counter","setConstraints","presence","pattern","is","onlyInteger","greaterThan","m82_date_validator","validators"],"mappings":"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","file":"m82.js","sourcesContent":["// forEach\r\nif (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n}\r\n\r\n// Array.from\r\nif (!Array.from) {\r\n Array.from = (function () {\r\n var symbolIterator;\r\n try {\r\n symbolIterator = Symbol.iterator\r\n ? Symbol.iterator\r\n : 'Symbol(Symbol.iterator)';\r\n } catch (e) {\r\n symbolIterator = 'Symbol(Symbol.iterator)';\r\n }\r\n\r\n var toStr = Object.prototype.toString;\r\n var isCallable = function (fn) {\r\n return (\r\n typeof fn === 'function' ||\r\n toStr.call(fn) === '[object Function]'\r\n );\r\n };\r\n var toInteger = function (value) {\r\n var number = Number(value);\r\n if (isNaN(number)) return 0;\r\n if (number === 0 || !isFinite(number)) return number;\r\n return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));\r\n };\r\n var maxSafeInteger = Math.pow(2, 53) - 1;\r\n var toLength = function (value) {\r\n var len = toInteger(value);\r\n return Math.min(Math.max(len, 0), maxSafeInteger);\r\n };\r\n\r\n var setGetItemHandler = function setGetItemHandler(isIterator, items) {\r\n var iterator = isIterator && items[symbolIterator]();\r\n return function getItem(k) {\r\n return isIterator ? iterator.next() : items[k];\r\n };\r\n };\r\n\r\n var getArray = function getArray(\r\n T,\r\n A,\r\n len,\r\n getItem,\r\n isIterator,\r\n mapFn\r\n ) {\r\n // 16. Let k be 0.\r\n var k = 0;\r\n\r\n // 17. Repeat, while k < len… or while iterator is done (also steps a - h)\r\n while (k < len || isIterator) {\r\n var item = getItem(k);\r\n var kValue = isIterator ? item.value : item;\r\n\r\n if (isIterator && item.done) {\r\n return A;\r\n } else {\r\n if (mapFn) {\r\n A[k] =\r\n typeof T === 'undefined'\r\n ? mapFn(kValue, k)\r\n : mapFn.call(T, kValue, k);\r\n } else {\r\n A[k] = kValue;\r\n }\r\n }\r\n k += 1;\r\n }\r\n\r\n if (isIterator) {\r\n throw new TypeError(\r\n 'Array.from: provided arrayLike or iterator has length more then 2 ** 52 - 1'\r\n );\r\n } else {\r\n A.length = len;\r\n }\r\n\r\n return A;\r\n };\r\n\r\n // The length property of the from method is 1.\r\n return function from(arrayLikeOrIterator /*, mapFn, thisArg */) {\r\n // 1. Let C be the this value.\r\n var C = this;\r\n\r\n // 2. Let items be ToObject(arrayLikeOrIterator).\r\n var items = Object(arrayLikeOrIterator);\r\n var isIterator = isCallable(items[symbolIterator]);\r\n\r\n // 3. ReturnIfAbrupt(items).\r\n if (arrayLikeOrIterator == null && !isIterator) {\r\n throw new TypeError(\r\n 'Array.from requires an array-like object or iterator - not null or undefined'\r\n );\r\n }\r\n\r\n // 4. If mapfn is undefined, then let mapping be false.\r\n var mapFn = arguments.length > 1 ? arguments[1] : void undefined;\r\n var T;\r\n if (typeof mapFn !== 'undefined') {\r\n // 5. else\r\n // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.\r\n if (!isCallable(mapFn)) {\r\n throw new TypeError(\r\n 'Array.from: when provided, the second argument must be a function'\r\n );\r\n }\r\n\r\n // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n if (arguments.length > 2) {\r\n T = arguments[2];\r\n }\r\n }\r\n\r\n // 10. Let lenValue be Get(items, \"length\").\r\n // 11. Let len be ToLength(lenValue).\r\n var len = toLength(items.length);\r\n\r\n // 13. If IsConstructor(C) is true, then\r\n // 13. a. Let A be the result of calling the [[Construct]] internal method\r\n // of C with an argument list containing the single item len.\r\n // 14. a. Else, Let A be ArrayCreate(len).\r\n var A = isCallable(C) ? Object(new C(len)) : new Array(len);\r\n\r\n return getArray(\r\n T,\r\n A,\r\n len,\r\n setGetItemHandler(isIterator, items),\r\n isIterator,\r\n mapFn\r\n );\r\n };\r\n })();\r\n}\r\n\r\n// Object.assign\r\nif (!Object.assign) {\r\n Object.defineProperty(Object, 'assign', {\r\n enumerable: false,\r\n configurable: true,\r\n writable: true,\r\n value: function (target) {\r\n 'use strict';\r\n if (target === undefined || target === null) {\r\n throw new TypeError('Cannot convert first argument to object');\r\n }\r\n\r\n var to = Object(target);\r\n for (var i = 1; i < arguments.length; i++) {\r\n var nextSource = arguments[i];\r\n if (nextSource === undefined || nextSource === null) {\r\n continue;\r\n }\r\n nextSource = Object(nextSource);\r\n\r\n var keysArray = Object.keys(Object(nextSource));\r\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\r\n var nextKey = keysArray[nextIndex];\r\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\r\n if (desc !== undefined && desc.enumerable) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n return to;\r\n }\r\n });\r\n}\r\n\r\n// new Event\r\n(function () {\r\n if ( typeof window.CustomEvent === \"function\" ) return false; //If not IE\r\n\r\n function CustomEvent ( event, params ) {\r\n params = params || { bubbles: false, cancelable: false, detail: undefined };\r\n var evt = document.createEvent( 'CustomEvent' );\r\n evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );\r\n return evt;\r\n }\r\n\r\n CustomEvent.prototype = window.Event.prototype;\r\n\r\n window.Event = CustomEvent;\r\n})();\r\n\r\n// querySelector(:scope)\r\n(function (doc, proto) {\r\n try { // check if browser supports :scope natively\r\n doc.querySelector(':scope body');\r\n } catch (err) { // polyfill native methods if it doesn't\r\n ['querySelector', 'querySelectorAll'].forEach(function (method) {\r\n var nativ = proto[method];\r\n proto[method] = function (selectors) {\r\n if (/(^|,)\\s*:scope/.test(selectors)) { // only if selectors contains :scope\r\n var id = this.id; // remember current element id\r\n this.id = 'ID_' + Date.now(); // assign new unique id\r\n selectors = selectors.replace(/((^|,)\\s*):scope/g, '$1#' + this.id); // replace :scope with #ID\r\n var result = doc[method](selectors);\r\n this.id = id; // restore previous id\r\n return result;\r\n } else {\r\n return nativ.call(this, selectors); // use native code for other selectors\r\n }\r\n }\r\n });\r\n }\r\n})(window.document, Element.prototype);\r\n\r\n// append/appendChild fix for IE 9+\r\n(function (arr) {\r\n arr.forEach(function (item) {\r\n if (item.hasOwnProperty('append')) {\r\n return;\r\n }\r\n Object.defineProperty(item, 'append', {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true,\r\n value: function append() {\r\n var argArr = Array.prototype.slice.call(arguments),\r\n docFrag = document.createDocumentFragment();\r\n \r\n argArr.forEach(function (argItem) {\r\n var isNode = argItem instanceof Node;\r\n docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\r\n });\r\n \r\n this.appendChild(docFrag);\r\n }\r\n });\r\n });\r\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\r\n\r\n\r\n// poly fill for remove()\r\n(function() {\r\n function remove() { this.parentNode && this.parentNode.removeChild(this); }\r\n if (!Element.prototype.remove) Element.prototype.remove = remove;\r\n if (Text && !Text.prototype.remove) Text.prototype.remove = remove;\r\n })();\r\n\r\n\r\n // polyfill for closest()\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches = Element.prototype.msMatchesSelector || \r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n \r\n if (!Element.prototype.closest) {\r\n Element.prototype.closest = function(s) {\r\n var el = this;\r\n \r\n do {\r\n if (Element.prototype.matches.call(el, s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n }\r\n\r\n // polyfill for contains()\r\nif ( !String.prototype.contains ) {\r\n String.prototype.contains = function() {\r\n return String.prototype.indexOf.apply( this, arguments ) !== -1;\r\n };\r\n};/**\r\n * Copyright 2016 Google Inc. All Rights Reserved.\r\n *\r\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\r\n *\r\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\r\n *\r\n */\r\n(function () {\r\n \"use strict\";\r\n\r\n // Exit early if we're not running in a browser.\r\n if (typeof window !== \"object\") {\r\n return;\r\n }\r\n\r\n // Exit early if all IntersectionObserver and IntersectionObserverEntry\r\n // features are natively supported.\r\n if (\r\n \"IntersectionObserver\" in window &&\r\n \"IntersectionObserverEntry\" in window &&\r\n \"intersectionRatio\" in window.IntersectionObserverEntry.prototype\r\n ) {\r\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\r\n // See: https://github.com/w3c/IntersectionObserver/issues/211\r\n if (!(\"isIntersecting\" in window.IntersectionObserverEntry.prototype)) {\r\n Object.defineProperty(\r\n window.IntersectionObserverEntry.prototype,\r\n \"isIntersecting\",\r\n {\r\n get: function () {\r\n return this.intersectionRatio > 0;\r\n },\r\n }\r\n );\r\n }\r\n return;\r\n }\r\n\r\n /**\r\n * Returns the embedding frame element, if any.\r\n * @param {!Document} doc\r\n * @return {!Element}\r\n */\r\n function getFrameElement(doc) {\r\n try {\r\n return (doc.defaultView && doc.defaultView.frameElement) || null;\r\n } catch (e) {\r\n // Ignore the error.\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * A local reference to the root document.\r\n */\r\n var document = (function (startDoc) {\r\n var doc = startDoc;\r\n var frame = getFrameElement(doc);\r\n while (frame) {\r\n doc = frame.ownerDocument;\r\n frame = getFrameElement(doc);\r\n }\r\n return doc;\r\n })(window.document);\r\n\r\n /**\r\n * An IntersectionObserver registry. This registry exists to hold a strong\r\n * reference to IntersectionObserver instances currently observing a target\r\n * element. Without this registry, instances without another reference may be\r\n * garbage collected.\r\n */\r\n var registry = [];\r\n\r\n /**\r\n * The signal updater for cross-origin intersection. When not null, it means\r\n * that the polyfill is configured to work in a cross-origin mode.\r\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\r\n */\r\n var crossOriginUpdater = null;\r\n\r\n /**\r\n * The current cross-origin intersection. Only used in the cross-origin mode.\r\n * @type {DOMRect|ClientRect}\r\n */\r\n var crossOriginRect = null;\r\n\r\n /**\r\n * Creates the global IntersectionObserverEntry constructor.\r\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\r\n * @param {Object} entry A dictionary of instance properties.\r\n * @constructor\r\n */\r\n function IntersectionObserverEntry(entry) {\r\n this.time = entry.time;\r\n this.target = entry.target;\r\n this.rootBounds = ensureDOMRect(entry.rootBounds);\r\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\r\n this.intersectionRect = ensureDOMRect(\r\n entry.intersectionRect || getEmptyRect()\r\n );\r\n this.isIntersecting = !!entry.intersectionRect;\r\n\r\n // Calculates the intersection ratio.\r\n var targetRect = this.boundingClientRect;\r\n var targetArea = targetRect.width * targetRect.height;\r\n var intersectionRect = this.intersectionRect;\r\n var intersectionArea = intersectionRect.width * intersectionRect.height;\r\n\r\n // Sets intersection ratio.\r\n if (targetArea) {\r\n // Round the intersection ratio to avoid floating point math issues:\r\n // https://github.com/w3c/IntersectionObserver/issues/324\r\n this.intersectionRatio = Number(\r\n (intersectionArea / targetArea).toFixed(4)\r\n );\r\n } else {\r\n // If area is zero and is intersecting, sets to 1, otherwise to 0\r\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\r\n }\r\n }\r\n\r\n /**\r\n * Creates the global IntersectionObserver constructor.\r\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\r\n * @param {Function} callback The function to be invoked after intersection\r\n * changes have queued. The function is not invoked if the queue has\r\n * been emptied by calling the `takeRecords` method.\r\n * @param {Object=} opt_options Optional configuration options.\r\n * @constructor\r\n */\r\n function IntersectionObserver(callback, opt_options) {\r\n var options = opt_options || {};\r\n\r\n if (typeof callback != \"function\") {\r\n throw new Error(\"callback must be a function\");\r\n }\r\n\r\n if (\r\n options.root &&\r\n options.root.nodeType != 1 &&\r\n options.root.nodeType != 9\r\n ) {\r\n throw new Error(\"root must be a Document or Element\");\r\n }\r\n\r\n // Binds and throttles `this._checkForIntersections`.\r\n this._checkForIntersections = throttle(\r\n this._checkForIntersections.bind(this),\r\n this.THROTTLE_TIMEOUT\r\n );\r\n\r\n // Private properties.\r\n this._callback = callback;\r\n this._observationTargets = [];\r\n this._queuedEntries = [];\r\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\r\n\r\n // Public properties.\r\n this.thresholds = this._initThresholds(options.threshold);\r\n this.root = options.root || null;\r\n this.rootMargin = this._rootMarginValues\r\n .map(function (margin) {\r\n return margin.value + margin.unit;\r\n })\r\n .join(\" \");\r\n\r\n /** @private @const {!Array} */\r\n this._monitoringDocuments = [];\r\n /** @private @const {!Array} */\r\n this._monitoringUnsubscribes = [];\r\n }\r\n\r\n /**\r\n * The minimum interval within which the document will be checked for\r\n * intersection changes.\r\n */\r\n IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\r\n\r\n /**\r\n * The frequency in which the polyfill polls for intersection changes.\r\n * this can be updated on a per instance basis and must be set prior to\r\n * calling `observe` on the first target.\r\n */\r\n IntersectionObserver.prototype.POLL_INTERVAL = null;\r\n\r\n /**\r\n * Use a mutation observer on the root element\r\n * to detect intersection changes.\r\n */\r\n IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\r\n\r\n /**\r\n * Sets up the polyfill in the cross-origin mode. The result is the\r\n * updater function that accepts two arguments: `boundingClientRect` and\r\n * `intersectionRect` - just as these fields would be available to the\r\n * parent via `IntersectionObserverEntry`. This function should be called\r\n * each time the iframe receives intersection information from the parent\r\n * window, e.g. via messaging.\r\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\r\n */\r\n IntersectionObserver._setupCrossOriginUpdater = function () {\r\n if (!crossOriginUpdater) {\r\n /**\r\n * @param {DOMRect|ClientRect} boundingClientRect\r\n * @param {DOMRect|ClientRect} intersectionRect\r\n */\r\n crossOriginUpdater = function (boundingClientRect, intersectionRect) {\r\n if (!boundingClientRect || !intersectionRect) {\r\n crossOriginRect = getEmptyRect();\r\n } else {\r\n crossOriginRect = convertFromParentRect(\r\n boundingClientRect,\r\n intersectionRect\r\n );\r\n }\r\n registry.forEach(function (observer) {\r\n observer._checkForIntersections();\r\n });\r\n };\r\n }\r\n return crossOriginUpdater;\r\n };\r\n\r\n /**\r\n * Resets the cross-origin mode.\r\n */\r\n IntersectionObserver._resetCrossOriginUpdater = function () {\r\n crossOriginUpdater = null;\r\n crossOriginRect = null;\r\n };\r\n\r\n /**\r\n * Starts observing a target element for intersection changes based on\r\n * the thresholds values.\r\n * @param {Element} target The DOM element to observe.\r\n */\r\n IntersectionObserver.prototype.observe = function (target) {\r\n var isTargetAlreadyObserved = this._observationTargets.some(function (\r\n item\r\n ) {\r\n return item.element == target;\r\n });\r\n\r\n if (isTargetAlreadyObserved) {\r\n return;\r\n }\r\n\r\n if (!(target && target.nodeType == 1)) {\r\n throw new Error(\"target must be an Element\");\r\n }\r\n\r\n this._registerInstance();\r\n this._observationTargets.push({ element: target, entry: null });\r\n this._monitorIntersections(target.ownerDocument);\r\n this._checkForIntersections();\r\n };\r\n\r\n /**\r\n * Stops observing a target element for intersection changes.\r\n * @param {Element} target The DOM element to observe.\r\n */\r\n IntersectionObserver.prototype.unobserve = function (target) {\r\n this._observationTargets = this._observationTargets.filter(function (item) {\r\n return item.element != target;\r\n });\r\n this._unmonitorIntersections(target.ownerDocument);\r\n if (this._observationTargets.length == 0) {\r\n this._unregisterInstance();\r\n }\r\n };\r\n\r\n /**\r\n * Stops observing all target elements for intersection changes.\r\n */\r\n IntersectionObserver.prototype.disconnect = function () {\r\n this._observationTargets = [];\r\n this._unmonitorAllIntersections();\r\n this._unregisterInstance();\r\n };\r\n\r\n /**\r\n * Returns any queue entries that have not yet been reported to the\r\n * callback and clears the queue. This can be used in conjunction with the\r\n * callback to obtain the absolute most up-to-date intersection information.\r\n * @return {Array} The currently queued entries.\r\n */\r\n IntersectionObserver.prototype.takeRecords = function () {\r\n var records = this._queuedEntries.slice();\r\n this._queuedEntries = [];\r\n return records;\r\n };\r\n\r\n /**\r\n * Accepts the threshold value from the user configuration object and\r\n * returns a sorted array of unique threshold values. If a value is not\r\n * between 0 and 1 and error is thrown.\r\n * @private\r\n * @param {Array|number=} opt_threshold An optional threshold value or\r\n * a list of threshold values, defaulting to [0].\r\n * @return {Array} A sorted list of unique and valid threshold values.\r\n */\r\n IntersectionObserver.prototype._initThresholds = function (opt_threshold) {\r\n var threshold = opt_threshold || [0];\r\n if (!Array.isArray(threshold)) threshold = [threshold];\r\n\r\n return threshold.sort().filter(function (t, i, a) {\r\n if (typeof t != \"number\" || isNaN(t) || t < 0 || t > 1) {\r\n throw new Error(\r\n \"threshold must be a number between 0 and 1 inclusively\"\r\n );\r\n }\r\n return t !== a[i - 1];\r\n });\r\n };\r\n\r\n /**\r\n * Accepts the rootMargin value from the user configuration object\r\n * and returns an array of the four margin values as an object containing\r\n * the value and unit properties. If any of the values are not properly\r\n * formatted or use a unit other than px or %, and error is thrown.\r\n * @private\r\n * @param {string=} opt_rootMargin An optional rootMargin value,\r\n * defaulting to '0px'.\r\n * @return {Array} An array of margin objects with the keys\r\n * value and unit.\r\n */\r\n IntersectionObserver.prototype._parseRootMargin = function (opt_rootMargin) {\r\n var marginString = opt_rootMargin || \"0px\";\r\n var margins = marginString.split(/\\s+/).map(function (margin) {\r\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\r\n if (!parts) {\r\n throw new Error(\"rootMargin must be specified in pixels or percent\");\r\n }\r\n return { value: parseFloat(parts[1]), unit: parts[2] };\r\n });\r\n\r\n // Handles shorthand.\r\n margins[1] = margins[1] || margins[0];\r\n margins[2] = margins[2] || margins[0];\r\n margins[3] = margins[3] || margins[1];\r\n\r\n return margins;\r\n };\r\n\r\n /**\r\n * Starts polling for intersection changes if the polling is not already\r\n * happening, and if the page's visibility state is visible.\r\n * @param {!Document} doc\r\n * @private\r\n */\r\n IntersectionObserver.prototype._monitorIntersections = function (doc) {\r\n var win = doc.defaultView;\r\n if (!win) {\r\n // Already destroyed.\r\n return;\r\n }\r\n if (this._monitoringDocuments.indexOf(doc) != -1) {\r\n // Already monitoring.\r\n return;\r\n }\r\n\r\n // Private state for monitoring.\r\n var callback = this._checkForIntersections;\r\n var monitoringInterval = null;\r\n var domObserver = null;\r\n\r\n // If a poll interval is set, use polling instead of listening to\r\n // resize and scroll events or DOM mutations.\r\n if (this.POLL_INTERVAL) {\r\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\r\n } else {\r\n addEvent(win, \"resize\", callback, true);\r\n addEvent(doc, \"scroll\", callback, true);\r\n if (this.USE_MUTATION_OBSERVER && \"MutationObserver\" in win) {\r\n domObserver = new win.MutationObserver(callback);\r\n domObserver.observe(doc, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true,\r\n });\r\n }\r\n }\r\n\r\n this._monitoringDocuments.push(doc);\r\n this._monitoringUnsubscribes.push(function () {\r\n // Get the window object again. When a friendly iframe is destroyed, it\r\n // will be null.\r\n var win = doc.defaultView;\r\n\r\n if (win) {\r\n if (monitoringInterval) {\r\n win.clearInterval(monitoringInterval);\r\n }\r\n removeEvent(win, \"resize\", callback, true);\r\n }\r\n\r\n removeEvent(doc, \"scroll\", callback, true);\r\n if (domObserver) {\r\n domObserver.disconnect();\r\n }\r\n });\r\n\r\n // Also monitor the parent.\r\n var rootDoc =\r\n (this.root && (this.root.ownerDocument || this.root)) || document;\r\n if (doc != rootDoc) {\r\n var frame = getFrameElement(doc);\r\n if (frame) {\r\n this._monitorIntersections(frame.ownerDocument);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Stops polling for intersection changes.\r\n * @param {!Document} doc\r\n * @private\r\n */\r\n IntersectionObserver.prototype._unmonitorIntersections = function (doc) {\r\n var index = this._monitoringDocuments.indexOf(doc);\r\n if (index == -1) {\r\n return;\r\n }\r\n\r\n var rootDoc =\r\n (this.root && (this.root.ownerDocument || this.root)) || document;\r\n\r\n // Check if any dependent targets are still remaining.\r\n var hasDependentTargets = this._observationTargets.some(function (item) {\r\n var itemDoc = item.element.ownerDocument;\r\n // Target is in this context.\r\n if (itemDoc == doc) {\r\n return true;\r\n }\r\n // Target is nested in this context.\r\n while (itemDoc && itemDoc != rootDoc) {\r\n var frame = getFrameElement(itemDoc);\r\n itemDoc = frame && frame.ownerDocument;\r\n if (itemDoc == doc) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n if (hasDependentTargets) {\r\n return;\r\n }\r\n\r\n // Unsubscribe.\r\n var unsubscribe = this._monitoringUnsubscribes[index];\r\n this._monitoringDocuments.splice(index, 1);\r\n this._monitoringUnsubscribes.splice(index, 1);\r\n unsubscribe();\r\n\r\n // Also unmonitor the parent.\r\n if (doc != rootDoc) {\r\n var frame = getFrameElement(doc);\r\n if (frame) {\r\n this._unmonitorIntersections(frame.ownerDocument);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Stops polling for intersection changes.\r\n * @param {!Document} doc\r\n * @private\r\n */\r\n IntersectionObserver.prototype._unmonitorAllIntersections = function () {\r\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\r\n this._monitoringDocuments.length = 0;\r\n this._monitoringUnsubscribes.length = 0;\r\n for (var i = 0; i < unsubscribes.length; i++) {\r\n unsubscribes[i]();\r\n }\r\n };\r\n\r\n /**\r\n * Scans each observation target for intersection changes and adds them\r\n * to the internal entries queue. If new entries are found, it\r\n * schedules the callback to be invoked.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._checkForIntersections = function () {\r\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\r\n // Cross origin monitoring, but no initial data available yet.\r\n return;\r\n }\r\n\r\n var rootIsInDom = this._rootIsInDom();\r\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\r\n\r\n this._observationTargets.forEach(function (item) {\r\n var target = item.element;\r\n var targetRect = getBoundingClientRect(target);\r\n var rootContainsTarget = this._rootContainsTarget(target);\r\n var oldEntry = item.entry;\r\n var intersectionRect =\r\n rootIsInDom &&\r\n rootContainsTarget &&\r\n this._computeTargetAndRootIntersection(target, targetRect, rootRect);\r\n\r\n var rootBounds = null;\r\n if (!this._rootContainsTarget(target)) {\r\n rootBounds = getEmptyRect();\r\n } else if (!crossOriginUpdater || this.root) {\r\n rootBounds = rootRect;\r\n }\r\n\r\n var newEntry = (item.entry = new IntersectionObserverEntry({\r\n time: now(),\r\n target: target,\r\n boundingClientRect: targetRect,\r\n rootBounds: rootBounds,\r\n intersectionRect: intersectionRect,\r\n }));\r\n\r\n if (!oldEntry) {\r\n this._queuedEntries.push(newEntry);\r\n } else if (rootIsInDom && rootContainsTarget) {\r\n // If the new entry intersection ratio has crossed any of the\r\n // thresholds, add a new entry.\r\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\r\n this._queuedEntries.push(newEntry);\r\n }\r\n } else {\r\n // If the root is not in the DOM or target is not contained within\r\n // root but the previous entry for this target had an intersection,\r\n // add a new record indicating removal.\r\n if (oldEntry && oldEntry.isIntersecting) {\r\n this._queuedEntries.push(newEntry);\r\n }\r\n }\r\n }, this);\r\n\r\n if (this._queuedEntries.length) {\r\n this._callback(this.takeRecords(), this);\r\n }\r\n };\r\n\r\n /**\r\n * Accepts a target and root rect computes the intersection between then\r\n * following the algorithm in the spec.\r\n * TODO(philipwalton): at this time clip-path is not considered.\r\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\r\n * @param {Element} target The target DOM element\r\n * @param {Object} targetRect The bounding rect of the target.\r\n * @param {Object} rootRect The bounding rect of the root after being\r\n * expanded by the rootMargin value.\r\n * @return {?Object} The final intersection rect object or undefined if no\r\n * intersection is found.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._computeTargetAndRootIntersection = function (\r\n target,\r\n targetRect,\r\n rootRect\r\n ) {\r\n // If the element isn't displayed, an intersection can't happen.\r\n if (window.getComputedStyle(target).display == \"none\") return;\r\n\r\n var intersectionRect = targetRect;\r\n var parent = getParentNode(target);\r\n var atRoot = false;\r\n\r\n while (!atRoot && parent) {\r\n var parentRect = null;\r\n var parentComputedStyle =\r\n parent.nodeType == 1 ? window.getComputedStyle(parent) : {};\r\n\r\n // If the parent isn't displayed, an intersection can't happen.\r\n if (parentComputedStyle.display == \"none\") return null;\r\n\r\n if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {\r\n atRoot = true;\r\n if (parent == this.root || parent == document) {\r\n if (crossOriginUpdater && !this.root) {\r\n if (\r\n !crossOriginRect ||\r\n (crossOriginRect.width == 0 && crossOriginRect.height == 0)\r\n ) {\r\n // A 0-size cross-origin intersection means no-intersection.\r\n parent = null;\r\n parentRect = null;\r\n intersectionRect = null;\r\n } else {\r\n parentRect = crossOriginRect;\r\n }\r\n } else {\r\n parentRect = rootRect;\r\n }\r\n } else {\r\n // Check if there's a frame that can be navigated to.\r\n var frame = getParentNode(parent);\r\n var frameRect = frame && getBoundingClientRect(frame);\r\n var frameIntersect =\r\n frame &&\r\n this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\r\n if (frameRect && frameIntersect) {\r\n parent = frame;\r\n parentRect = convertFromParentRect(frameRect, frameIntersect);\r\n } else {\r\n parent = null;\r\n intersectionRect = null;\r\n }\r\n }\r\n } else {\r\n // If the element has a non-visible overflow, and it's not the \r\n // or element, update the intersection rect.\r\n // Note: and cannot be clipped to a rect that's not also\r\n // the document rect, so no need to compute a new intersection.\r\n var doc = parent.ownerDocument;\r\n if (\r\n parent != doc.body &&\r\n parent != doc.documentElement &&\r\n parentComputedStyle.overflow != \"visible\"\r\n ) {\r\n parentRect = getBoundingClientRect(parent);\r\n }\r\n }\r\n\r\n // If either of the above conditionals set a new parentRect,\r\n // calculate new intersection data.\r\n if (parentRect) {\r\n intersectionRect = computeRectIntersection(\r\n parentRect,\r\n intersectionRect\r\n );\r\n }\r\n if (!intersectionRect) break;\r\n parent = parent && getParentNode(parent);\r\n }\r\n return intersectionRect;\r\n };\r\n\r\n /**\r\n * Returns the root rect after being expanded by the rootMargin value.\r\n * @return {ClientRect} The expanded root rect.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._getRootRect = function () {\r\n var rootRect;\r\n if (this.root && !isDoc(this.root)) {\r\n rootRect = getBoundingClientRect(this.root);\r\n } else {\r\n // Use / instead of window since scroll bars affect size.\r\n var doc = isDoc(this.root) ? this.root : document;\r\n var html = doc.documentElement;\r\n var body = doc.body;\r\n rootRect = {\r\n top: 0,\r\n left: 0,\r\n right: html.clientWidth || body.clientWidth,\r\n width: html.clientWidth || body.clientWidth,\r\n bottom: html.clientHeight || body.clientHeight,\r\n height: html.clientHeight || body.clientHeight,\r\n };\r\n }\r\n return this._expandRectByRootMargin(rootRect);\r\n };\r\n\r\n /**\r\n * Accepts a rect and expands it by the rootMargin value.\r\n * @param {DOMRect|ClientRect} rect The rect object to expand.\r\n * @return {ClientRect} The expanded rect.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._expandRectByRootMargin = function (rect) {\r\n var margins = this._rootMarginValues.map(function (margin, i) {\r\n return margin.unit == \"px\"\r\n ? margin.value\r\n : (margin.value * (i % 2 ? rect.width : rect.height)) / 100;\r\n });\r\n var newRect = {\r\n top: rect.top - margins[0],\r\n right: rect.right + margins[1],\r\n bottom: rect.bottom + margins[2],\r\n left: rect.left - margins[3],\r\n };\r\n newRect.width = newRect.right - newRect.left;\r\n newRect.height = newRect.bottom - newRect.top;\r\n\r\n return newRect;\r\n };\r\n\r\n /**\r\n * Accepts an old and new entry and returns true if at least one of the\r\n * threshold values has been crossed.\r\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\r\n * particular target element or null if no previous entry exists.\r\n * @param {IntersectionObserverEntry} newEntry The current entry for a\r\n * particular target element.\r\n * @return {boolean} Returns true if a any threshold has been crossed.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._hasCrossedThreshold = function (\r\n oldEntry,\r\n newEntry\r\n ) {\r\n // To make comparing easier, an entry that has a ratio of 0\r\n // but does not actually intersect is given a value of -1\r\n var oldRatio =\r\n oldEntry && oldEntry.isIntersecting\r\n ? oldEntry.intersectionRatio || 0\r\n : -1;\r\n var newRatio = newEntry.isIntersecting\r\n ? newEntry.intersectionRatio || 0\r\n : -1;\r\n\r\n // Ignore unchanged ratios\r\n if (oldRatio === newRatio) return;\r\n\r\n for (var i = 0; i < this.thresholds.length; i++) {\r\n var threshold = this.thresholds[i];\r\n\r\n // Return true if an entry matches a threshold or if the new ratio\r\n // and the old ratio are on the opposite sides of a threshold.\r\n if (\r\n threshold == oldRatio ||\r\n threshold == newRatio ||\r\n threshold < oldRatio !== threshold < newRatio\r\n ) {\r\n return true;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Returns whether or not the root element is an element and is in the DOM.\r\n * @return {boolean} True if the root element is an element and is in the DOM.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._rootIsInDom = function () {\r\n return !this.root || containsDeep(document, this.root);\r\n };\r\n\r\n /**\r\n * Returns whether or not the target element is a child of root.\r\n * @param {Element} target The target element to check.\r\n * @return {boolean} True if the target element is a child of root.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._rootContainsTarget = function (target) {\r\n var rootDoc =\r\n (this.root && (this.root.ownerDocument || this.root)) || document;\r\n return (\r\n containsDeep(rootDoc, target) &&\r\n (!this.root || rootDoc == target.ownerDocument)\r\n );\r\n };\r\n\r\n /**\r\n * Adds the instance to the global IntersectionObserver registry if it isn't\r\n * already present.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._registerInstance = function () {\r\n if (registry.indexOf(this) < 0) {\r\n registry.push(this);\r\n }\r\n };\r\n\r\n /**\r\n * Removes the instance from the global IntersectionObserver registry.\r\n * @private\r\n */\r\n IntersectionObserver.prototype._unregisterInstance = function () {\r\n var index = registry.indexOf(this);\r\n if (index != -1) registry.splice(index, 1);\r\n };\r\n\r\n /**\r\n * Returns the result of the performance.now() method or null in browsers\r\n * that don't support the API.\r\n * @return {number} The elapsed time since the page was requested.\r\n */\r\n function now() {\r\n return window.performance && performance.now && performance.now();\r\n }\r\n\r\n /**\r\n * Throttles a function and delays its execution, so it's only called at most\r\n * once within a given time period.\r\n * @param {Function} fn The function to throttle.\r\n * @param {number} timeout The amount of time that must pass before the\r\n * function can be called again.\r\n * @return {Function} The throttled function.\r\n */\r\n function throttle(fn, timeout) {\r\n var timer = null;\r\n return function () {\r\n if (!timer) {\r\n timer = setTimeout(function () {\r\n fn();\r\n timer = null;\r\n }, timeout);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\r\n * @param {Node} node The DOM node to add the event handler to.\r\n * @param {string} event The event name.\r\n * @param {Function} fn The event handler to add.\r\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\r\n * phase. Note: this only works in modern browsers.\r\n */\r\n function addEvent(node, event, fn, opt_useCapture) {\r\n if (typeof node.addEventListener == \"function\") {\r\n node.addEventListener(event, fn, opt_useCapture || false);\r\n } else if (typeof node.attachEvent == \"function\") {\r\n node.attachEvent(\"on\" + event, fn);\r\n }\r\n }\r\n\r\n /**\r\n * Removes a previously added event handler from a DOM node.\r\n * @param {Node} node The DOM node to remove the event handler from.\r\n * @param {string} event The event name.\r\n * @param {Function} fn The event handler to remove.\r\n * @param {boolean} opt_useCapture If the event handler was added with this\r\n * flag set to true, it should be set to true here in order to remove it.\r\n */\r\n function removeEvent(node, event, fn, opt_useCapture) {\r\n if (typeof node.removeEventListener == \"function\") {\r\n node.removeEventListener(event, fn, opt_useCapture || false);\r\n } else if (typeof node.detatchEvent == \"function\") {\r\n node.detatchEvent(\"on\" + event, fn);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the intersection between two rect objects.\r\n * @param {Object} rect1 The first rect.\r\n * @param {Object} rect2 The second rect.\r\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\r\n * intersection is found.\r\n */\r\n function computeRectIntersection(rect1, rect2) {\r\n var top = Math.max(rect1.top, rect2.top);\r\n var bottom = Math.min(rect1.bottom, rect2.bottom);\r\n var left = Math.max(rect1.left, rect2.left);\r\n var right = Math.min(rect1.right, rect2.right);\r\n var width = right - left;\r\n var height = bottom - top;\r\n\r\n return (\r\n (width >= 0 &&\r\n height >= 0 && {\r\n top: top,\r\n bottom: bottom,\r\n left: left,\r\n right: right,\r\n width: width,\r\n height: height,\r\n }) ||\r\n null\r\n );\r\n }\r\n\r\n /**\r\n * Shims the native getBoundingClientRect for compatibility with older IE.\r\n * @param {Element} el The element whose bounding rect to get.\r\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\r\n */\r\n function getBoundingClientRect(el) {\r\n var rect;\r\n\r\n try {\r\n rect = el.getBoundingClientRect();\r\n } catch (err) {\r\n // Ignore Windows 7 IE11 \"Unspecified error\"\r\n // https://github.com/w3c/IntersectionObserver/pull/205\r\n }\r\n\r\n if (!rect) return getEmptyRect();\r\n\r\n // Older IE\r\n if (!(rect.width && rect.height)) {\r\n rect = {\r\n top: rect.top,\r\n right: rect.right,\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n width: rect.right - rect.left,\r\n height: rect.bottom - rect.top,\r\n };\r\n }\r\n return rect;\r\n }\r\n\r\n /**\r\n * Returns an empty rect object. An empty rect is returned when an element\r\n * is not in the DOM.\r\n * @return {ClientRect} The empty rect.\r\n */\r\n function getEmptyRect() {\r\n return {\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0,\r\n width: 0,\r\n height: 0,\r\n };\r\n }\r\n\r\n /**\r\n * Ensure that the result has all of the necessary fields of the DOMRect.\r\n * Specifically this ensures that `x` and `y` fields are set.\r\n *\r\n * @param {?DOMRect|?ClientRect} rect\r\n * @return {?DOMRect}\r\n */\r\n function ensureDOMRect(rect) {\r\n // A `DOMRect` object has `x` and `y` fields.\r\n if (!rect || \"x\" in rect) {\r\n return rect;\r\n }\r\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\r\n // for internally calculated Rect objects. For the purposes of\r\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\r\n // for these fields.\r\n return {\r\n top: rect.top,\r\n y: rect.top,\r\n bottom: rect.bottom,\r\n left: rect.left,\r\n x: rect.left,\r\n right: rect.right,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n }\r\n\r\n /**\r\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\r\n * the local BCR space.\r\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\r\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\r\n * @return {ClientRect} The local root bounding rect for the parent's children.\r\n */\r\n function convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\r\n var top = parentIntersectionRect.top - parentBoundingRect.top;\r\n var left = parentIntersectionRect.left - parentBoundingRect.left;\r\n return {\r\n top: top,\r\n left: left,\r\n height: parentIntersectionRect.height,\r\n width: parentIntersectionRect.width,\r\n bottom: top + parentIntersectionRect.height,\r\n right: left + parentIntersectionRect.width,\r\n };\r\n }\r\n\r\n /**\r\n * Checks to see if a parent element contains a child element (including inside\r\n * shadow DOM).\r\n * @param {Node} parent The parent element.\r\n * @param {Node} child The child element.\r\n * @return {boolean} True if the parent node contains the child node.\r\n */\r\n function containsDeep(parent, child) {\r\n var node = child;\r\n while (node) {\r\n if (node == parent) return true;\r\n\r\n node = getParentNode(node);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets the parent node of an element or its host element if the parent node\r\n * is a shadow root.\r\n * @param {Node} node The node whose parent to get.\r\n * @return {Node|null} The parent node or null if no parent exists.\r\n */\r\n function getParentNode(node) {\r\n var parent = node.parentNode;\r\n\r\n if (node.nodeType == /* DOCUMENT */ 9 && node != document) {\r\n // If this node is a document node, look for the embedding frame.\r\n return getFrameElement(node);\r\n }\r\n\r\n // If the parent has element that is assigned through shadow root slot\r\n if (parent && parent.assignedSlot) {\r\n parent = parent.assignedSlot.parentNode;\r\n }\r\n\r\n if (parent && parent.nodeType == 11 && parent.host) {\r\n // If the parent is a shadow root, return the host element.\r\n return parent.host;\r\n }\r\n\r\n return parent;\r\n }\r\n\r\n /**\r\n * Returns true if `node` is a Document.\r\n * @param {!Node} node\r\n * @returns {boolean}\r\n */\r\n function isDoc(node) {\r\n return node && node.nodeType === 9;\r\n }\r\n\r\n // Exposes the constructors globally.\r\n window.IntersectionObserver = IntersectionObserver;\r\n window.IntersectionObserverEntry = IntersectionObserverEntry;\r\n})();\r\n;const MOBILE_BREAKPOINT = \"320\";\r\nconst MOBILE_LARGE_BREAKPOINT = \"414\";\r\nconst TABLET_BREAKPOINT = \"769\";\r\nconst DESKTOP_SMALL_BREAKPOINT = \"940\";\r\nconst DESKTOP_BREAKPOINT = \"1170\";\r\nconst XHR_REQUEST = new XMLHttpRequest();\r\n\r\n/**\r\n * Debouncing resize will only call the event handler after the event\r\n * has stopped firing for a certain amount of time. This will ensure that your\r\n * function will only be called once the resizing is “complete.”\r\n */\r\n\r\nconst debounce = (fn, time) => {\r\n\tlet timeout;\r\n\r\n\treturn function () {\r\n\t\tconst functionCall = () => fn.apply(this, arguments);\r\n\r\n\t\tclearTimeout(timeout);\r\n\t\ttimeout = setTimeout(functionCall, time);\r\n\t};\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} options\r\n * @param {*} callback\r\n * reusable function accepts two params - object to loop through and a callback\r\n * loops through object and executes callback\r\n */\r\nconst doLoop = (options, callback) => {\r\n\tfor (let i = 0; i < options.length; i++) {\r\n\t\tif (callback(i, options[i]) === false) break;\r\n\t}\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} el\r\n * @param {*} wrapper\r\n * wraps element in wrapper element\r\n */\r\nconst wrap = (el, wrapper) => {\r\n\tel.parentNode.insertBefore(wrapper, el);\r\n\twrapper.appendChild(el);\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} cls\r\n * returns a new element\r\n */\r\nconst createEl = (elm, cls) => {\r\n\tvar newel = document.createElement(elm);\r\n\tnewel.className = cls;\r\n\treturn newel;\r\n};\r\n\r\nconst toggleAriaExpanded = elm => {\r\n\telm.setAttribute(\"aria-expanded\", elm.getAttribute(\"aria-expanded\") === \"false\" ? \"true\" : \"false\");\r\n};\r\n\r\nconst toggleAriaHidden = elm => {\r\n\telm.setAttribute(\"aria-hidden\", elm.getAttribute(\"aria-hidden\") === \"false\" ? \"true\" : \"false\");\r\n};\r\n\r\nconst toggleAnswerVisibility = (elm, cls) => {\r\n\telm.classList.contains(cls) ? (elm.style.visibility = \"visible\") : (elm.style.visibility = \"hidden\");\r\n};\r\n\r\n/**\r\n * calculates the height of all child element\r\n * inside passed element\r\n * @param {*} elm\r\n * @param {*} cls\r\n */\r\nconst calculateHeight = (elm, cls) => {\r\n\t\r\n\tlet children = elm.children,\r\n\t\ttotal = 0;\r\n\tfor (let x = 0; x < children.length; x++) {\r\n\t\ttotal = total + children[x].offsetHeight;\r\n\t}\r\n\telm.classList.contains(cls) ? (elm.style.height = `${total}px`) : elm.removeAttribute(\"style\");\r\n};\r\n\r\n/**\r\n * Truncates HTML. Is able to handle nested elements, sibling elements, etc.\r\n * Doesn't break HTML tags. Doesn't truncate in middle of word.\r\n * @param {*} elm\r\n * @param {*} options {char limit, keep html tags, break word, custom suffix, 'read more' link}\r\n */\r\nconst trimHtml = (html, options) => {\r\n\r\n\toptions = options || {};\r\n\r\n\tlet limit = options.limit || 100,\r\n\t\tpreserveTags = (typeof options.preserveTags !== 'undefined') ? options.preserveTags : true,\r\n\t\twordBreak = (typeof options.wordBreak !== 'undefined') ? options.wordBreak : false,\r\n\t\tsuffix = options.suffix || '...',\r\n\t\tmoreLink = options.moreLink || '';\r\n\r\n\tlet arr = html.replace(//g, \">\\n\")\r\n\t\t.replace(/\\n\\n/g, \"\\n\")\r\n\t\t.replace(/^\\n/g, \"\")\r\n\t\t.replace(/\\n$/g, \"\")\r\n\t\t.split(\"\\n\");\r\n\r\n\tlet sum = 0,\r\n\t\trow, cut, add,\r\n\t\ttagMatch,\r\n\t\ttagName,\r\n\t\ttagStack = [],\r\n\t\tmore = false;\r\n\r\n\tfor (let i = 0; i < arr.length; i++) {\r\n\r\n\t\tlet row = arr[i];\r\n\t\t// count multiple spaces as one character\r\n\t\tlet rowCut = row.replace(/[ ]+/g, ' ');\r\n\r\n\t\tif (!row.length) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (row[0] !== \"<\") {\r\n\r\n\t\t\tif (sum >= limit) {\r\n\t\t\t\trow = \"\";\r\n\t\t\t} else if ((sum + rowCut.length) >= limit) {\r\n\r\n\t\t\t\tcut = limit - sum;\r\n\r\n\t\t\t\tif (row[cut - 1] === ' ') {\r\n\t\t\t\t\twhile (cut) {\r\n\t\t\t\t\t\tcut -= 1;\r\n\t\t\t\t\t\tif (row[cut - 1] !== ' ') {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\tadd = row.substring(cut).split('').indexOf(' ');\r\n\r\n\t\t\t\t\t// break on half of word\r\n\t\t\t\t\tif (!wordBreak) {\r\n\t\t\t\t\t\tif (add !== -1) {\r\n\t\t\t\t\t\t\tcut += add;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tcut = row.length;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = row.substring(0, cut) + suffix;\r\n\r\n\t\t\t\tif (moreLink) {\r\n\t\t\t\t\trow += '

Read More

';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsum = limit;\r\n\t\t\t\tmore = true;\r\n\t\t\t} else {\r\n\t\t\t\tsum += rowCut.length;\r\n\t\t\t}\r\n\t\t} else if (!preserveTags) {\r\n\t\t\trow = '';\r\n\t\t} else if (sum >= limit) {\r\n\r\n\t\t\ttagMatch = row.match(/[a-zA-Z]+/);\r\n\t\t\ttagName = tagMatch ? tagMatch[0] : '';\r\n\r\n\t\t\tif (tagName) {\r\n\t\t\t\tif (row.substring(0, 2) !== ' {\r\n\twhile ((el = el.parentElement) && !el.classList.contains(cls));\r\n\treturn el;\r\n}\r\n\r\n/**\r\n *\r\n * Render reCAPTCHA for different modules \r\n * after the reCAPTCHA API is loaded \r\n */\r\nconst reCAPTCHArenderer = ( ) => {\r\n\r\n\t// Render the reCAPTCHA for M52\r\n\tconst M52container = document.querySelector(\".m52\");\r\n\tif( M52container ) if( M52.reCAPTCHArender ) M52.reCAPTCHArender()\r\n\r\n\t// Render the reCAPTCHA for other modules \r\n\t// ...\r\n\r\n}\r\n\r\nconst RenderRecaptchas = () => {\r\n\r\n\t// Render the reCAPTCHA for f13 and server side validation\r\n\tconst F13container = document.querySelector(\".f13\");\r\n\tif( F13container ) if( f13.reCAPTCHArender ) f13.reCAPTCHArender();\r\n\r\n\t// Render the reCAPTCHA for f02 and server side validation\r\n\tconst F02container = document.querySelector(\".f02\");\r\n\tif( F02container ) if( f02.reCAPTCHArender ) f02.reCAPTCHArender();\r\n\t\r\n\t// Render the reCAPTCHA for m19 and server side validation\r\n\tconst M19container = document.querySelector(\".m19\");\r\n\tif( M19container ) if( m19.reCAPTCHArender ) m19.reCAPTCHArender();\r\n\r\n\t// Render the reCAPTCHA for f20 and server side validation\r\n\tconst F20container = document.querySelector(\".f20\");\r\n\tif (F20container) if (f20.reCAPTCHArender) f20.reCAPTCHArender();\r\n\r\n\t// Render the reCAPTCHA for f21 and server side validation\r\n\tconst F21container = document.querySelector(\".f21\");\r\n\tif (F21container) if (f21.reCAPTCHArender) f21.reCAPTCHArender();\r\n\r\n\t// Render the reCAPTCHA for f22 and server side validation\r\n\tconst F22container = document.querySelector(\".f22\");\r\n\tif (F22container) if (f22.reCAPTCHArender) f22.reCAPTCHArender();\r\n\t\r\n\t// Render the reCAPTCHA for f23 and server side validation\r\n\tconst F23container = document.querySelector(\".f23\");\r\n\tif (F23container) if (f23.reCAPTCHArender) f23.reCAPTCHArender();\r\n\r\n\t// Render the reCAPTCHA for m46 and server side validation\r\n\tconst M46container = document.querySelector(\".m46\");\r\n\tif (M46container) if (M46.reCAPTCHArender) M46.reCAPTCHArender();\r\n\t\r\n\t// Render the reCAPTCHA for m82 and server side validation\r\n\tconst M76container = document.querySelector(\".m76\");\r\n\tif( M76container ) if( m76.reCAPTCHArender ) m76.reCAPTCHArender();\r\n\t\r\n\t// Render the reCAPTCHA for m92 and server side validation\r\n\tconst M92container = document.querySelector(\".m92\");\r\n\tif( M92container ) if( m92.reCAPTCHArender ) m92.reCAPTCHArender();\r\n\t\r\n\t// Render the reCAPTCHA for m106 and server side validation\r\n\tconst M106container = document.querySelector(\".m106\");\r\n\tif( M106container ) if( m106.reCAPTCHArender ) m106.reCAPTCHArender();\r\n}\r\n\r\n/**\r\n * getQueryStringParams\r\n * Pass a window.location.search string inside the function and it will \r\n * parse the different query parameters that exists\r\n * @param {String} query \r\n */\r\nconst getQueryStringParams = query => {\r\n\t// if the query is not empty\r\n\tif( query ){\r\n\r\n\t\t// if the query starts w/ a ? or a # remove it \r\n\t\tlet clean_query = query\r\n\t\tif( /^[?#]/.test( query ) ) clean_query = query.slice(1);\r\n\r\n\t\t// split and create a object w/ all the query parameters \r\n\t\treturn clean_query\r\n\t\t.split('&')\r\n\t\t.reduce((params, param) => {\r\n\t\t\tlet [key, value] = param.split('=');\r\n\t\t\tparams[key] = value ? decodeURIComponent(value.replace(/\\+/g, ' ')) : '';\r\n\t\t\treturn params;\r\n\t\t}, {})\r\n\r\n\t}else{\r\n\t\treturn {}\r\n\t}\r\n};\r\n\r\n/**\r\n * AnPost codes check digit\r\n * @param {Number} code \r\n */\r\n\r\nconst validateAnPostCode = anpostcode => {\r\n\r\n\t/*\r\n\t\tHow to validate an ANPOST code with the check digit : \r\n\t\t- - -\r\n\t\tUsing a valid code like this one : LX 836 659 176 IE\r\n\t\tThe Check digit is the number : 6 \r\n\t\tThe multipliers are and will always be ( not depending on the code ) : 8, 6, 4, 2, 3, 5, 9, 7 \r\n\t\tThe total is the result of this calculation : \r\n\t\t( ( 8 * 8 ) + ( 3 * 6 ) + ( 6 * 4 ) + ( 6 * 2 ) + ( 5 * 3 ) + ( 9 * 5 ) + ( 1 * 9 ) + ( 7 * 7 ) ) % 11 = 5\r\n\t\tIf the total is 0 : the check digit should be 5 ( not the case here )\r\n\t\tIf the total is 1 : the check digit should be 0 ( not the case here )\r\n\t\tIf the total is any other number : the check digit should be 11 - total ( our situation )\r\n\t\t11 - 5 = 6 , Our check digit should be 6\r\n\t*/\r\n\r\n\tconst ap_check \t\t= anpostcode.substr(anpostcode.length - 1); // isolate check digit\r\n\tlet ap_code \t\t= anpostcode.substring(0, anpostcode.length - 1); // rest of the code\r\n\tconst ap_weights\t= [ 8, 6, 4, 2, 3, 5, 9, 7 ]; // anpost weights \r\n\tlet ap_total = 0;\r\n\tlet ap_anticipated_check = 0;\r\n\r\n\t// If the code is not 8 char , we need to fill it w/ 0\r\n\tif( ap_code.length !== 8 ){\r\n\t\tconst ap_spaceleft = new Array(8 - ap_code.length)\r\n\t\tfor( let i = 0 ; i < ap_spaceleft.length ; i ++ ){\r\n\t\t\tap_code = \"0\"+ap_code\r\n\t\t}\r\n\t}\r\n\r\n\t// Looping through the numbers in the code , multipling by the related weights , adding to the total\r\n\tdoLoop( ap_code , ( i , value ) => {\r\n\t\tap_total = ap_total + ( parseInt(value,10) * parseInt(ap_weights[i],10) )\r\n\t} )\r\n\r\n\t// Check the total % 11 to determine the anticipated check digit \r\n\tswitch( ap_total % 11 ){\r\n\t\tcase 0 : {\r\n\t\t\tap_anticipated_check = 5\r\n\t\t\tbreak\r\n\t\t}\r\n\t\tcase 1 : {\r\n\t\t\tap_anticipated_check = 0\r\n\t\t\tbreak\r\n\t\t}\r\n\t\tdefault : {\r\n\t\t\tap_anticipated_check = (11-(ap_total % 11))\r\n\t\t\tbreak\r\n\t\t}\r\n\t}\r\n\r\n\t// If the check digit equals the anticipated check digit , code is valid \r\n\tif( parseInt(ap_check,10) === parseInt(ap_anticipated_check,10) ) return true \r\n\treturn false\r\n\r\n}\r\n\r\n//add commas to number\r\nfunction numberWithCommas(x) {\r\n\tif(!x)return \"\";\r\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n}\r\n\r\n//IE fix for Math.log(10)\r\nMath.log10 = Math.log10 || function(x) {\r\n\treturn Math.log(x) * Math.LOG10E;\r\n};\r\n\r\n/**\r\n *\r\n * Check if it's a valid date\r\n * @param {number} day \r\n * @param {number} month \r\n * @param {number} year \r\n * \r\n */\r\nconst checkIsValidDate = (day, month, year) => {\r\n\tconst date = new Date();\r\n\tdate.setFullYear(year, month - 1, day);\r\n\t// month - 1 since the month index is 0-based (0 = January)\r\n\t\r\n\tif ( (date.getFullYear() === year) && (date.getMonth() + 1 === month) && (date.getDate() === day) )\r\n\t\treturn true;\r\n\r\n\treturn false;\r\n}\r\n\r\n// set a cookie that will expire at the end of the session\r\nconst setSessionCookie = (name, value) => {\r\n\tdocument.cookie = `${name} = ${escape(value)};path=/`;\r\n}\r\n\r\n// Cookie getter is an es6 version of https://www.w3schools.com/js/js_cookies.asp\r\nconst getCookie = (cname) => {\r\n\tconst name = cname + \"=\";\r\n\tconst decodedCookie = decodeURIComponent(document.cookie);\r\n\t// split up the cookies in an array\r\n\tconst cookiesArray = decodedCookie.split(';');\r\n\r\n\t// loop through the cookies\r\n\tfor(let i = 0; i {\r\n\r\n\t// to delete a cookie you need to set it's expiry date to a past date\r\n\tconst now = new Date(); \r\n\tnow.setMonth( now.getMonth() - 1 ); \r\n\t\r\n\t\r\n\t// set cookie and expiration date\r\n\tdocument.cookie = `${name} = ${escape(value)};expires = ${now.toUTCString()};path=/`; \r\n}\r\n\r\n// Show loader \r\nconst showAPLoader = (show) => {\r\n\tconst loaderWrapper = document.querySelector(\".js-loader\");\r\n\tconst loaderShownCls = \"loader-wrapper--shown\";\r\n\r\n\tif( loaderWrapper ) {\r\n\t\tif(show) {\r\n\t\t\tloaderWrapper.classList.add(loaderShownCls);\r\n\t\t} else {\r\n\t\t\tloaderWrapper.classList.remove(loaderShownCls);\r\n\t\t}\r\n\t} \r\n}\r\n/**\r\n *\r\n * Redirect page to a URL after a certain amount of time\r\n * @param {string} url \r\n * @param {number} time // number of minutes \r\n * \r\n */\r\n\r\nlet redirectTimer;\r\n\r\nconst setRedirectTimer = (url, time) => {\r\n\tconst allowedTime = time * 60000;\r\n\r\n\t// reset timer if it already exist\r\n\tclearTimeout(redirectTimer);\r\n\r\n\t// set up the timer\r\n\tredirectTimer = setTimeout(() => {\r\n\t\twindow.location.href = url;\r\n\t }, allowedTime);\r\n}\r\n\r\n\r\n// send user to reauthenticator url;\r\nconst reauthenticateUser = () => {\r\n\twindow.location.href = `${window.location.origin}/myAccount/Auth?loggedout=true`;\r\n}\r\n\r\n\r\n// Template for requesting XHR calls \r\nconst sendXhrRequest = (method, url, headers, successCallback, data, errorCallback) => {\r\n\t\r\n\t// set loader\r\n\tshowAPLoader(true);\r\n\r\n\t// open request\r\n\tXHR_REQUEST.open(method, url, true);\r\n\t// set ajax headers\r\n\tXHR_REQUEST.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n\r\n\t// set json headers\r\n\tXHR_REQUEST.setRequestHeader('Content-Type', 'application/json; charset=utf-8');\r\n\r\n\t// set additional headers\r\n\tif(headers) {\r\n\t\tfor (let i = 0; i < headers.length; i++) {\r\n\t\t\tXHR_REQUEST.setRequestHeader(headers[i].name, headers[i].value);\r\n\t\t}\r\n\t}\r\n\r\n\t// send request\r\n\t// when data has to be sent\r\n\tif (['POST','PUT','PATCH'].indexOf(method) !== -1) {\r\n\t\t// format data into json and send request\r\n\t\tXHR_REQUEST.send(JSON.stringify(data));\r\n\t} else {\r\n\t\t// send no data\r\n\t\tXHR_REQUEST.send();\r\n\t}\r\n\r\n\t// set request listener\r\n\tXHR_REQUEST.onreadystatechange = e => {\r\n\t\t// when answer received\r\n\t\tif (e && e.currentTarget.readyState === 4) {\r\n\t\t\tconst response = JSON.parse(e.currentTarget.responseText);\r\n\r\n\t\t\t// hide loader\r\n\t\t\tshowAPLoader(false);\r\n\t\t\t\r\n\t\t\t// switch http status code\r\n\t\t\tswitch (e.currentTarget.status) {\r\n\t\t\t\t\r\n\t\t\t\tcase 200:\r\n\t\t\t\t\tsuccessCallback(response);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 400:\r\n\t\t\t\t\terrorCallback && errorCallback(response);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 401: \r\n\t\t\t\t\treauthenticateUser();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 404:\r\n\t\t\t\t\terrorCallback && errorCallback(response);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 500:\r\n\t\t\t\t\terrorCallback && errorCallback(response);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\t// do nothing\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n};/**\r\n * trackItem\r\n *\r\n * @param {string} form string tracking form being submitted\r\n * @param {string} tracking_code string tracking code entered by user\r\n */\r\nconst trackItem = (form, tracking_code) => {\r\n\t// handles Google Tag Manager event tracking\r\n\twindow.dataLayer = window.dataLayer || [];\r\n\r\n // push \"trackItem\" event, service code (1st two characters)\r\n // and country code (last two characters) to data layer\r\n if (isFormValid(form) && tracking_code) {\r\n // matches only tracking code in the \"AB 123456789 YZ\" format - no order number\r\n const match = tracking_code.match(/^([a-z]{2})[0-9]{9}([a-z]{2})$/i);\r\n if (match) {\r\n dataLayer.push({\r\n \"event\": \"trackItem\",\r\n \"result\": \"found\",\r\n serviceCode: match[1].toUpperCase(),\r\n countryCode: match[2].toUpperCase()\r\n });\r\n console.log(dataLayer);\r\n } else {\r\n dataLayer.push({\r\n \"event\": \"trackItem\",\r\n \"result\": \"not found\",\r\n serviceCode: \"not found\",\r\n countryCode: \"not found\"\r\n })\r\n console.log(dataLayer);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {*} obj\r\n * reusable function to push data to GTM\r\n * expects an object\r\n */\r\nconst pushDataLayer = obj => {\r\n window.dataLayer.push(obj);\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} obj\r\n * reusable function to push virtualPageView event to GA\r\n * pageviewUrl : string\r\n * pageviewTitle : string\r\n */\r\nconst virtualPageView = (pageviewUrl, pageviewTitle) => {\r\n const GTMData = {\r\n event: \"virtualPageView\",\r\n pageview_url: pageviewUrl,\r\n pageview_title: pageviewTitle\r\n }\r\n pushDataLayer(GTMData);\r\n};;function doValidation(form, constraints, onValidSubmit = null, validateOnKeyup = false, submitDisabled = false) {\r\n\tvar button = form.querySelector(\".submit\");\r\n\tif(button) {\r\n\t\tbutton.addEventListener(\"click\", function (ev) {\r\n\t\t\thandleFormSubmit(form, ev, constraints, onValidSubmit);\r\n\t\t});\r\n\t}\r\n\t// Hook up the inputs to validate on the fly\r\n\tvar inputs = form.querySelectorAll(\"[data-required]\");\r\n\tfor (var i = 0; i < inputs.length; ++i) {\r\n\t\tinputs.item(i).addEventListener(\"change\", function (ev) {\r\n\t\t\tvar errors = validate(form, constraints) || {};\r\n\t\t\tshowErrorsForInput(form, this, errors[this.name]);\r\n\r\n\t\t\t// if submit button is disabled, check for required fields as the user types\r\n\t\t\tif(submitDisabled) {\r\n\t\t\t\tcheckForEnabled(form, button);\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(validateOnKeyup) {\r\n\t\t\tinputs.item(i).addEventListener(\"keyup\", function (ev) {\r\n\t\t\t\tconst errors = validate(form, constraints) || {};\r\n\t\t\t\tlet errorFound = false;\r\n\t\t\t\t// if an error exists for this field, remove the last character just typed\r\n\t\t\t\tif(errors[this.name]){\r\n\t\t\t\t\terrorFound = findError(this, errors[this.name]);\r\n\t\t\t\t\tif(errorFound) {\r\n\t\t\t\t\t\t// Remove last character in string if there is an error.\r\n\t\t\t\t\t\tconst updatedString = this.value.slice(0, -1);\r\n\t\t\t\t\t\tthis.value = updatedString;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// if submit button is disabled, check for required fields as the user types\r\n\t\t\t\tif(submitDisabled) {\r\n\t\t\t\t\tcheckForEnabled(form, button);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t});\r\n\t\t\tif(inputs.item(i).type === \"number\") {\r\n\t\t\t\tinputs.item(i).addEventListener(\"keypress\", function (ev) {\r\n\t\t\t\t\tpreventNonNumericalInput(ev);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// This prevents anything other than numbers on input type number fields\r\n\tfunction preventNonNumericalInput(e) {\r\n\t\te = e || window.event;\r\n\t\tvar charCode = (typeof e.which == \"undefined\") ? e.keyCode : e.which;\r\n\t\tvar charStr = String.fromCharCode(charCode);\r\n\t\t\r\n\t\tif (!charStr.match(/^[0-9\\.\\+]$/))\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\t// loop through all the required fields in the form\r\n\t// if they all have values - enable the disabled button\r\n\tconst checkRequiredFieldsComplete = form => {\r\n\t\tvar inputs = form.querySelectorAll(\"[data-required]\");\r\n\t\tfor (var i = 0; i < inputs.length; ++i) {\r\n\t\t\tif(!inputs[i].value) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// check for enabled\r\n\tconst checkForEnabled = (form, button) => {\r\n\t\tif(checkRequiredFieldsComplete(form)) {\r\n\t\t\tbutton.disabled = false;\r\n\t\t\tbutton.classList.remove(\"bn--disabled\");\r\n\r\n\t\t\t// if the text is different when enabled\r\n\t\t\tif(button.getAttribute(\"data-enabled-text\")) {\r\n\t\t\t\tbutton.innerHTML = button.getAttribute(\"data-enabled-text\");\r\n\t\t\t\tbutton.value = button.getAttribute(\"data-enabled-text\");\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tbutton.disabled = true;\r\n\t\t\tbutton.classList.add(\"bn--disabled\");\r\n\t\t\t\r\n\t\t\t// if the text is different when disabled\r\n\t\t\tif(button.getAttribute(\"data-disabled-text\")) {\r\n\t\t\t\tbutton.innerHTML = button.getAttribute(\"data-disabled-text\");\r\n\t\t\t\tbutton.value = button.getAttribute(\"data-disabled-text\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction checkError(errorObj, error, elm) {\r\n\t\tlet errorFound = false;\r\n\t\t// if the error object is a dynamic function, set it to the returned object from the function\r\n\t\tif (typeof errorObj === \"function\") {\r\n\t\t\terrorObj = errorObj(elm.value);\r\n\t\t} \r\n\t\t// the error object can return multiple errors from the form, check that it is associated with this field\r\n\t\tif (errorObj && errorObj.message && (error.indexOf(errorObj.message.replace(\"^\", \"\")) !== -1)) {\r\n\t\t\t// for length\r\n\t\t\tif(errorObj.maximum && elm.value.length > errorObj.maximum) {\r\n\t\t\t\terrorFound = true;\r\n\t\t\t// For numericality max number\r\n\t\t\t} else if(errorObj.lessThanOrEqualTo && parseInt(elm.value) > errorObj.lessThanOrEqualTo) {\r\n\t\t\t\terrorFound = true;\r\n\t\t\t// For format\r\n\t\t\t} else if(errorObj.strict && !errorObj.allowKeyup) {\r\n\t\t\t\terrorFound = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn errorFound;\r\n\t}\r\n\r\n\t// Error validating on the fly, validate by length, format and max number\r\n\tfunction findError(elm, error) {\r\n\t\tlet errorFound = false;\r\n\t\t// length validation\r\n\t\terrorFound = checkError(constraints[elm.name].length, error, elm);\r\n\t\tif(!errorFound) {\r\n\t\t\t// format validation\r\n\t\t\terrorFound = checkError(constraints[elm.name].format, error, elm);\r\n\t\t}\r\n\t\tif(!errorFound) {\r\n\t\t\t// max number validation\r\n\t\t\terrorFound = checkError(constraints[elm.name].numericality, error, elm);\r\n\t\t}\r\n\t\r\n\t\treturn errorFound;\r\n\t}\r\n}\r\n\r\nfunction handleFormSubmit(form, ev, constraints, onValidSubmit = null) {\r\n\t// validate the form against the constraints\r\n\tvar errors = validate(form, constraints);\r\n\t// then we update the form to reflect the results\r\n\tshowErrors(form, errors || {});\r\n\tif (!errors) {\r\n\t\tform.classList.add(\"form-is-valid\");\r\n\t\tdisableButtonAfterSubmission(form);\r\n\t\tif (onValidSubmit) {\r\n\t\t\tev.preventDefault();\r\n\t\t\twindow[onValidSubmit]();\r\n\t\t}\r\n\t} else {\r\n\t\tform.classList.remove(\"form-is-valid\");\r\n\t\tev.preventDefault();\r\n\t}\r\n}\r\n\r\nfunction isFormValid(form) {\r\n\treturn form.classList.contains(\"form-is-valid\") ? true : false;\r\n}\r\n// Updates the inputs with the validation errors\r\nfunction showErrors(form, errors) {\r\n\t// We loop through all the inputs and show the errors for that input\r\n\tconst inputs = form.querySelectorAll(\"[data-required]\");\r\n\tlet scrolledToFirstError = false;\r\n\tfor (let i = 0; i < inputs.length; i++) {\r\n\t\tshowErrorsForInput(form, inputs[i], errors && errors[inputs[i].name]);\r\n\t\t// scroll to the first error in the list (if there are errors)\r\n\t\tif(errors && !scrolledToFirstError && errors[inputs[i].name]) {\r\n\t\t\tinputs[i].scrollIntoView();\r\n\t\t\t// focus on the first error message for accessiblilty\r\n\t\t\tinputs[i].focus();\r\n\t\t\t// add it little room to breath\r\n\t\t\twindow.scrollBy(0, -100);\r\n\t\t\t// set this variable to true, so that this only gets called for the first error\r\n\t\t\tscrolledToFirstError = true;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Shows the errors for a specific input\r\nfunction showErrorsForInput(form, input, errors) {\r\n\t// flags form as changed for GTM\r\n\tform.classList.add(\"form-is-changed\");\r\n\tform.classList.remove(\"form-is-valid\");\r\n\t// This is the root of the input\r\n\tvar formGroup = closestParent(input.parentNode, \"form__group\") || closestParent(input.parentNode, \"form__group__checkbox\") || closestParent(input.parentNode, \"form__group__radio\"),\r\n\t\t// Find where the error messages will be insert into\r\n\t\tmessages = formGroup.querySelector(\".form__group__error\");\r\n\t// First we remove any old messages and resets the classes\r\n\tresetFormGroup(formGroup);\r\n\t// If we have errors\r\n\tif (errors) {\r\n\t\t// we first mark the group has having errors\r\n\t\tformGroup.classList.add(\"has-error\");\r\n\t\t// then we append all the errors\r\n\t\tfor (let i = 0; i < errors.length; i++) {\r\n\t\t\tinput.setAttribute(\"aria-label\", errors[i]);\t\r\n\t\t\taddError(messages, errors[i]);\r\n\t\t}\r\n\t} else {\r\n\t\t// otherwise we simply mark it as success\r\n\t\tformGroup.classList.add(\"has-success\");\r\n\t\t// remove error attribute\t\r\n\t\tinput.removeAttribute(\"aria-label\");\r\n\t}\r\n}\r\n\r\n// Recusively finds the closest parent that has the specified class\r\nfunction closestParent(child, className) {\r\n\tif (!child || child == document) {\r\n\t\treturn null;\r\n\t}\r\n\tif (child.classList.contains(className)) {\r\n\t\treturn child;\r\n\t} else {\r\n\t\treturn closestParent(child.parentNode, className);\r\n\t}\r\n}\r\n\r\nfunction resetFormGroup(formGroup) {\r\n\t// Remove the success and error classes\r\n\tformGroup.classList.remove(\"has-error\");\r\n\tformGroup.classList.remove(\"has-success\");\r\n\t// and remove any old messages\r\n\tconst error_blocks = formGroup.querySelectorAll(\".error\");\r\n\tfor (let i = 0; i < error_blocks.length; i++) {\r\n\t\terror_blocks[i].parentNode.removeChild(error_blocks[i]);\r\n\t}\r\n}\r\n\r\n// Adds the specified error with the following markup\r\n//

[message]

\r\nfunction addError(messages, error) {\r\n\tvar block = document.createElement(\"p\");\r\n\tblock.classList.add(\"error\");\r\n\tblock.innerText = error;\r\n\tmessages.appendChild(block);\r\n}\r\n\r\n// disables submit button and changes text to \"please wait\" after submission\r\nfunction disableButtonAfterSubmission(form) {\r\n\tvar button = form.querySelector(\".js-disable-on-submit\");\r\n\tif (button) {\r\n\t\tbutton.classList.add('bn--disabled');\r\n\t\tif (button.tagName.toUpperCase() === 'BUTTON') {\r\n\t\t\tbutton.textContent = 'Please wait...';\r\n\t\t} else if (button.tagName.toUpperCase() === 'INPUT') {\r\n\t\t\tbutton.value = 'Please wait...';\r\n\t\t}\r\n\t}\r\n};/***************************************************\r\n## Custom Range Slider\r\n## Custom range inputs take the following data attribute to allow\r\n## config from within the CMS:\r\n## (output = the label that floats beside the range slider thumb)\r\n## data-icon: the icon that gets added to the output label\r\n## data-prepend: any symbol to be prepended to the output label (e.g. €)\r\n## data-append: any string that is to be appended to the output label (e.g. years)\r\n\r\n ***************************************************/\r\nconst customRangeSlider = (() => {\r\n const s = {\r\n slider: '.slider-wrapper',\r\n }\r\n\r\n\r\nconst init = () => {\r\n\r\n const sliders = document.querySelectorAll(s.slider);\r\n\r\n for (let i=0; i {\r\n _onSliderChange(event,currentSlider,min,max,prependText,appendText);\r\n });\r\n thisSliderInput.addEventListener('change', (event) => {\r\n _onSliderChange(event,currentSlider,min,max,prependText,appendText);\r\n });\r\n }\r\n _initRangeTouch();\r\n}\r\n\r\n // Initialises Range Touch library for range inputs if the library is available on the page.\r\n const _initRangeTouch = () => {\r\n if(typeof RangeTouch !== \"undefined\") {\r\n // only initialise rangetouch on touch devices.\r\n if ('ontouchstart' in document.documentElement) {\r\n const ranges = RangeTouch.setup('input[type=\"range\"]');\r\n }\r\n }\r\n }\r\n\r\n const _setOutput = (currentSlider, value, icon, prependText, appendText, min, max, maxYearsLabel) => {\r\n //set icon\r\n currentSlider.querySelector(\".output-icon\").innerHTML =\"\";\r\n //set value \r\n currentSlider.querySelector(\".output-value\").innerHTML = numberWithCommas(parseInt(value));\r\n //set prepend text\r\n if(prependText){\r\n currentSlider.querySelector(\".output-prepend\").innerHTML = prependText;\r\n }\r\n //set append text\r\n if(appendText){\r\n currentSlider.querySelector(\".output-append\").innerHTML = \" \" + appendText;\r\n }\r\n //set min/max vals\r\n currentSlider.querySelector(\".js-slider__min\").innerHTML = numberWithCommas(min);\r\n currentSlider.querySelector(\".js-slider__max\").innerHTML = `${numberWithCommas(max)}`;\r\n \r\n // set year label if there is one\r\n if(currentSlider.querySelector(\".js-slider-max-year\")) {\r\n currentSlider.querySelector(\".js-slider-max-year\").innerHTML = ` ${maxYearsLabel}`;\r\n }\r\n \r\n\r\n\r\n }\r\n\r\n const _updateOutput = (currentSlider,value) => {\r\n //update value for output field\r\n currentSlider.querySelector(\".output-value\").innerHTML = numberWithCommas(value);\r\n\r\n }\r\n\r\n //when slider updates change output text and update styles\r\n const _onSliderChange = (event,slider,min,max) => {\r\n\r\n let value = event.target.value;\r\n\r\n _updateOutput(slider,value);\r\n\r\n _updateSliderPosition(slider, value, min,max);\r\n\r\n }\r\n\r\n const _updateSliderPosition = (slider, value, min,max) => {\r\n let percentage = ((value-min)/(max - min))*100; //slider value as a percentage of the range\r\n // if it not possible to calculate a percentage, then set the slider position to 100%\r\n if(isNaN(percentage)) {\r\n percentage = 100;\r\n }\r\n slider.querySelector(\".custom-thumb\").style.left = percentage + '%';\r\n slider.querySelector(\".custom-text\").style.left = percentage + '%';\r\n slider.querySelector(\".custom-fill\").style.width = percentage + '%';\r\n //flip output label if swiped past the halfway mark\r\n if(percentage > 70){\r\n slider.querySelector(\".custom-text\").classList.add(\"invert\");\r\n }else{\r\n slider.querySelector(\".custom-text\").classList.remove(\"invert\");\r\n }\r\n }\r\n\r\n return {\r\n init,\r\n _onSliderChange,\r\n _updateSliderPosition\r\n };\r\n\r\n})();\r\n\r\nif (document.querySelectorAll(\".slider-wrapper input\").value > 0) {\r\n customRangeSlider.init();\r\n}\r\n\r\n;/***************************************************\r\n## Forms\r\n***************************************************/\r\nvar Forms = (() => {\r\n\r\n /**\r\n * when field is focused add active class\r\n * when field is blurred remove active class\r\n * on page load if any fields have a value an active class is applied\r\n */\r\n\r\n const s = {\r\n inputWrapper: 'js-slideup',\r\n selectWrapper: 'js-slideup-select',\r\n textareaWrapper: 'js-slideup-textarea',\r\n radioWrapper: 'js-radio-group',\r\n focused: 'form__group__focused',\r\n showPassword: 'js-show-password',\r\n showPasswordShown: 'js-show-password--selected'\r\n };\r\n\r\n const init = () => {\r\n // handle inputs\r\n const inputWrappers = document.querySelectorAll(`.${s.inputWrapper}`);\r\n if (inputWrappers) {\r\n doLoop(inputWrappers, (i, wrapper) => {\r\n const input = wrapper.querySelector(\"input\");\r\n _handleFocus(input, wrapper);\r\n _handleBlur(input, wrapper);\r\n _handleDynamicFields(input, wrapper);\r\n _handlePreFilledFields(input, wrapper);\r\n _handleNumberField(input, wrapper);\r\n _handlePasswordField(input, wrapper);\r\n });\r\n }\r\n\r\n // handle selects\r\n const selectWrapper = document.querySelectorAll(`.${s.selectWrapper}`);\r\n if (selectWrapper) {\r\n doLoop(selectWrapper, (i, wrapper) => {\r\n const select = wrapper.querySelector(\"select\");\r\n _handleChange(select, wrapper);\r\n _handlePreFilledFields(select, wrapper)\r\n });\r\n }\r\n\r\n // handle textarea\r\n const textareaWrapper = document.querySelectorAll(`.${s.textareaWrapper}`);\r\n if (textareaWrapper) {\r\n doLoop(textareaWrapper, (i, wrapper) => {\r\n const textarea = wrapper.querySelector(\"textarea\");\r\n _handleFocus(textarea, wrapper);\r\n _handleBlur(textarea, wrapper);\r\n _handlePreFilledFields(textarea, wrapper)\r\n });\r\n }\r\n\r\n // handle radio group\r\n // add events to radio group. Toggling a focused state on focus / blur\r\n const radioWrapper = document.querySelectorAll(`.${s.radioWrapper}`);\r\n if (radioWrapper) {\r\n doLoop(radioWrapper, (i, wrapper) => {\r\n const radioInput = wrapper.querySelector(\"input\");\r\n _handleFocus(radioInput, wrapper);\r\n _handleRadioBlur(radioInput, wrapper);\r\n });\r\n }\r\n };\r\n\r\n const _handleFocus = (input, wrapper) => {\r\n input.onfocus = () => {\r\n wrapper.classList.add(s.focused);\r\n };\r\n }\r\n\r\n const _handleDynamicFields = (input, wrapper) => {\r\n input.oninput = () => {\r\n wrapper.classList.add(s.focused);\r\n };\r\n }\r\n\r\n const _handleChange = (select, wrapper) => {\r\n select.onchange = () => {\r\n wrapper.classList.add(s.focused);\r\n };\r\n }\r\n\r\n const _handlePreFilledFields = (elm, wrapper) => {\r\n if (elm.value) {\r\n wrapper.classList.add(s.focused)\r\n } else {\r\n\t\t\twrapper.classList.remove(s.focused);\r\n\t\t}\r\n };\r\n\r\n\r\n const _handleBlur = (input, wrapper) => {\r\n\r\n input.onblur = () => {\r\n if (!input.value) {\r\n wrapper.classList.remove(s.focused);\r\n }\r\n };\r\n }\r\n\r\n // handle radio blur\r\n // on blur of the radio buttons, remove the focussed class\r\n const _handleRadioBlur = (input, wrapper) => {\r\n input.onblur = () => {\r\n wrapper.classList.remove(s.focused);\r\n\r\n };\r\n }\r\n\r\n // handle number fields,\r\n const _handleNumberField = (input, wrapper) => {\r\n if(input.type === \"number\") {\r\n input.onkeydown = () => {\r\n // the character 'e' for exponential is valid in a number input. Strip it out for us!\r\n return event.keyCode !== 69;\r\n }\r\n }\r\n }\r\n\r\n // handlle password screen\r\n const _handlePasswordField = (input, wrapper) => {\r\n if(input.type === \"password\") {\r\n if(wrapper.querySelector(`.${s.showPassword}`)) {\r\n wrapper.querySelector(`.${s.showPassword}`).addEventListener(\"click\", e => {\r\n\r\n // change input to a text input\r\n if(e.target.classList.contains(s.showPasswordShown)) {\r\n input.type = \"password\";\r\n } else {\r\n input.type = \"text\";\r\n }\r\n\r\n // change class of the click button\r\n e.target.classList.toggle(s.showPasswordShown);\r\n });\r\n }\r\n }\r\n }\r\n\r\n return {\r\n init: init\r\n };\r\n})();\r\n;/***************************************************\r\n ## m82\r\n***************************************************/\r\n\r\nconst m82 = (() => {\r\n\tconst s = {\r\n\t\tform: document.querySelector(\".m82\"),\r\n\t\tdateComplaint: document.querySelectorAll(\".js-date-complaint input\"),\r\n\t\tdateDecision: document.querySelectorAll(\".js-date-decision input\"),\r\n\t\ttabBtn: document.querySelectorAll(\".m82__tabbed__option\"),\r\n\t\ttabField: document.querySelectorAll(\".m82__tabbed__input\"),\r\n\t\tday: document.querySelectorAll(\".m82__datefield\"),\r\n\t\tmonth: document.querySelectorAll(\".m82__monthfield\"),\r\n\t\tyear: document.querySelectorAll(\".m82__monthfield\"),\r\n\t\tcharCounter: document.querySelector(\".m82__char__count\"),\r\n\t\tcharCounterMax: document.querySelector(\".m82__char__count__max\"),\r\n\t\tfield: {\r\n\t\t\tcaseNumber: { selector: \".js-m82-case__number\" },\r\n\t\t\tfirstName: { selector: \".js-m82-firstname\" },\r\n\t\t\tlastName: { selector: \".js-m82-lastname\" },\r\n\t\t\temail: { selector: \".js-m82-email\" },\r\n\t\t\tcomplaintDay: { selector: \".js-m82-day-complaint\" },\r\n\t\t\tcomplaintMonth: { selector: \".js-m82-month-complaint\" },\r\n\t\t\tcomplaintYear: { selector: \".js-m82-year-complaint\" },\r\n\t\t\tcomplaintHiddenDate: { selector: \".js-m82-full-date-complaint\" },\r\n\t\t\tdecisionDay: { selector: \".js-m82-day-decision\" },\r\n\t\t\tdecisionMonth: { selector: \".js-m82-month-decision\" },\r\n\t\t\tdecisionYear: { selector: \".js-m82-year-decision\" },\r\n\t\t\tdecisionHiddenDate: { selector: \".js-m82-full-date-decision\" },\r\n\t\t\tnotes: { selector: \".js-m82-notes\" },\r\n\t\t\tstampValue: { selector: \".m82__stamps\" },\r\n\t\t\tchequeValue: { selector: \".m82__cheque\" }\r\n\t\t},\r\n\t\tnoteLength: document.querySelector(\".js-m82-notes\") && document.querySelector(\".js-m82-notes\").getAttribute(\"maxlength\") ? document.querySelector(\".js-m82-notes\").getAttribute(\"maxlength\") : 100,\r\n\t\tsubmitValidCallBackFunction:\r\n\t\t\tdocument.querySelector(\".m82__form\") &&\r\n\t\t\tdocument.querySelector(\".m82__form\").getAttribute(\"data-valid-function\") ?\r\n\t\t\tdocument.querySelector(\".m82__form\").getAttribute(\"data-valid-function\") : null\r\n\t};\r\n\r\n\r\n\r\n const assignFieldProperties = () => {\r\n Object.keys(s.field).map(f => {\r\n const el = s.form.querySelector(`${s.field[f].selector}`);\r\n\r\n s.field[f].name = el ? el.getAttribute(\"name\") : null;\r\n s.field[f].errorMessage = el ? el.getAttribute(\"data-required-message\") : null;\r\n });\r\n }\r\n\r\n\t// Add select class to clicked option\r\n\tconst handleClickOption = () => {\r\n\t\tfor (let i = 0; i < s.tabBtn.length; i++) {\r\n\t\t\ts.tabBtn[i].addEventListener(\"click\", e => {\r\n\t\t\t\te.target.parentElement.querySelector(\".selected\").classList.remove(\"selected\"); // Remove selected class from sibling\r\n\t\t\t\te.target.classList.add(\"selected\"); // Add selected class\r\n\t\t\t\t// check if no option is selected and hide input field\r\n\t\t\t\te.target.getAttribute(\"data-value\") && e.target.getAttribute(\"data-value\") === \"no\" ? e.target.parentElement.parentElement.querySelector(\".form__group\").style.display = \"none\" : e.target.parentElement.parentElement.querySelector(\".form__group\").style.display = \"\";\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t// Set hidden field date value for Complaints\r\n\tconst setComplaintValues = () => {\r\n\t\tfor(let i = 0; i < s.dateComplaint.length; i++) { \r\n\t\t\ts.dateComplaint[i].addEventListener('input', () => {\r\n\t\t\t\tlet date = document.querySelector(s.field.complaintDay.selector).value,\r\n\t\t\t\tmonth = document.querySelector(s.field.complaintMonth.selector).value,\r\n\t\t\t\tyear = document.querySelector(s.field.complaintYear.selector).value,\r\n\t\t\t\tfullDate = document.querySelector(s.field.complaintHiddenDate.selector);\r\n return fullDate.value = `${date}-${month}-${year}`;\r\n\t\t\t});\r\n }\r\n\t}\r\n\r\n\t// Set hidden field date value for Decision\r\n\tconst setDecisionValues = () => {\r\n\t\tfor(let i = 0; i < s.dateDecision.length; i++) { \r\n\t\t\ts.dateDecision[i].addEventListener('input', () => {\r\n\t\t\t\tlet date = document.querySelector(s.field.decisionDay.selector).value,\r\n\t\t\t\tmonth = document.querySelector(s.field.decisionMonth.selector).value,\r\n\t\t\t\tyear = document.querySelector(s.field.decisionYear.selector).value,\r\n\t\t\t\tfullDate = document.querySelector(s.field.decisionHiddenDate.selector);\r\n return fullDate.value = `${date}-${month}-${year}`;\r\n\t\t\t});\r\n }\r\n\t}\r\n\r\n\t// Get Current Year\r\n\tconst currentYear = () => {\r\n const today = new Date();\r\n const currentDate = today.getUTCDate();\r\n const currentMonth = today.getUTCMonth();\r\n\t\tconst currentYear = today.getUTCFullYear();\r\n\t\treturn {\r\n date: currentDate,\r\n month: currentMonth + 1,\r\n year: currentYear,\r\n lastYear: currentYear - 1,\r\n fullDate : `${currentYear}-${currentMonth}-${currentDate}`,\r\n fullDateLastYear : `${currentYear - 1}-${currentMonth}-${currentDate}`\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// Count Characters in textarea\r\n\tconst charCount = () => {\r\n\t\tconst noteBox = document.querySelector(\".js-m82-notes\");\r\n\t\tconst maxLength = s.noteLength;\r\n\t\tconst maxCounter = s.charCounterMax;\r\n\t\tconst counter = s.charCounter;\r\n\t\tcounter.innerHTML = maxLength;\r\n\t\tmaxCounter.innerHTML = `/${maxLength}`;\r\n\t\tnoteBox.addEventListener(\"keyup\", e => {\r\n\t\t\tcounter.innerHTML = maxLength - e.target.value.length;\r\n\t\t\tcounter.innerHTML <= 0 ? counter.classList.add(\"count__error\") : counter.classList.remove(\"count__error\");\r\n\t\t});\r\n\t}\r\n\t\r\n\r\n\tconst setConstraints = () => {\r\n\t\tassignFieldProperties();\r\n\t\t\r\n\t\treturn {\r\n\r\n\t\t\t[s.field.caseNumber.name]: {\r\n presence: {\r\n message: `^${s.field.caseNumber.errorMessage}`\r\n },\r\n format: {\r\n pattern: \"^[(CS|WB|CC|cs|wb|cc)0-9]+$\",\r\n message: \"^Customer Service Case number must begin with CS/WB/CC followed by 6 digits\"\r\n },\r\n length: {\r\n is: 8,\r\n message: \"^Customer Service Case number must begin with CS/WB/CC followed by 6 digits\"\r\n }\r\n },\r\n [s.field.firstName.name]: {\r\n presence: {\r\n message: `^${s.field.firstName.errorMessage}`\r\n },\r\n format: {\r\n pattern: \"^[A-Za-záÁóÓúÚíÍéÉ '\\-\\.]+$\",\r\n message: \"^Only letters allowed\"\r\n },\r\n length: {\r\n maximum: 20,\r\n message: \"^The maximum number of characters allowed is 20\"\r\n }\r\n },\r\n [s.field.lastName.name]: {\r\n presence: {\r\n message: `^${s.field.lastName.errorMessage}`\r\n },\r\n format: {\r\n pattern: \"^[A-Za-záÁóÓúÚíÍéÉ '\\-\\.]+$\",\r\n message: \"^Only letters allowed\"\r\n },\r\n length: {\r\n maximum: 20,\r\n message: \"^The maximum number of characters allowed is 20\"\r\n }\r\n\t\t\t},\r\n\t\t\t[s.field.email.name]: {\r\n\t\t\t\tpresence: {\r\n\t\t\t\t\tmessage: `^${s.field.email.errorMessage}`\r\n\t\t\t\t},\r\n\t\t\t\temail: true\r\n\t\t\t},\r\n\t\t\t[s.field.notes.name]: {\r\n\t\t\t\tpresence: false,\r\n\t\t\t\tlength: {\r\n\t\t\t\t\tmaximum: s.noteLength,\r\n\t\t\t\t\tmessage: `^Max. ${s.noteLength} characters`\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t[s.field.complaintDay.name]: {\r\n\t\t\t\tpresence: {\r\n\t\t\t\t\tmessage: `^${s.field.complaintDay.errorMessage}`\r\n\t\t\t\t},\r\n\t\t\t\tnumericality: {\r\n\t\t\t\t\tonlyInteger: true,\r\n\t\t\t\t\tgreaterThan: 0,\r\n\t\t\t\t\tlessThanOrEqualTo: 31,\r\n\t\t\t\t\tmessage: \"^Day field must be between 01 and 31\"\r\n\t\t\t\t},\r\n\t\t\t\tm82_date_validator: {}\r\n\t\t\t},\r\n\t\t\t[s.field.complaintMonth.name]: {\r\n\t\t\t\tpresence: {\r\n\t\t\t\t\tmessage: `^${s.field.complaintMonth.errorMessage}`\r\n\t\t\t\t},\r\n\t\t\t\tnumericality: {\r\n\t\t\t\t\tonlyInteger: true,\r\n\t\t\t\t\tgreaterThan: 0,\r\n\t\t\t\t\tlessThanOrEqualTo: 12,\r\n\t\t\t\t\tmessage: `^Month field must be between 01 and 12`\r\n\t\t\t\t},\r\n\t\t\t\tm82_date_validator: {}\r\n\t\t\t},\r\n\t\t\t[s.field.complaintYear.name]: {\r\n\t\t\t\tpresence: {\r\n\t\t\t\t\tmessage: `^${s.field.complaintYear.errorMessage}`\r\n\t\t\t\t},\r\n\t\t\t\tnumericality: {\r\n\t\t\t\t\tonlyInteger: true,\r\n\t\t\t\t\tgreaterThan: 2000,\r\n\t\t\t\t\tlessThanOrEqualTo: currentYear().fullDate,\r\n\t\t\t\t\tmessage: `^Please enter a valid year`\r\n\t\t\t\t},\r\n\t\t\t\tm82_date_validator: {}\r\n\t\t\t},\r\n\t\t\t[s.field.decisionDay.name]: {\r\n\t\t\t\tpresence: {\r\n\t\t\t\t\tmessage: `^${s.field.decisionDay.errorMessage}`\r\n\t\t\t\t},\r\n\t\t\t\tnumericality: {\r\n\t\t\t\t\tonlyInteger: true,\r\n\t\t\t\t\tgreaterThan: 0,\r\n\t\t\t\t\tlessThanOrEqualTo: 31,\r\n\t\t\t\t\tmessage: \"^Day field must be between 01 and 31\"\r\n\t\t\t\t},\r\n\t\t\t\tm82_date_validator: {}\r\n\t\t\t},\r\n\t\t\t[s.field.decisionMonth.name]: {\r\n\t\t\t\tpresence: {\r\n\t\t\t\t\tmessage: `^${s.field.decisionMonth.errorMessage}`\r\n\t\t\t\t},\r\n\t\t\t\tnumericality: {\r\n\t\t\t\t\tonlyInteger: true,\r\n\t\t\t\t\tgreaterThan: 0,\r\n\t\t\t\t\tlessThanOrEqualTo: 12,\r\n\t\t\t\t\tmessage: `^Month field must be between 01 and 12`\r\n\t\t\t\t},\r\n\t\t\t\tm82_date_validator: {}\r\n\t\t\t},\r\n\t\t\t[s.field.decisionYear.name]: {\r\n\t\t\t\tpresence: {\r\n\t\t\t\t\tmessage: `^${s.field.decisionYear.errorMessage}`\r\n\t\t\t\t},\r\n\t\t\t\tnumericality: {\r\n\t\t\t\t\tonlyInteger: true,\r\n\t\t\t\t\tgreaterThan: 2000,\r\n\t\t\t\t\tlessThanOrEqualTo: currentYear().year,\r\n\t\t\t\t\tmessage: `^Please enter a valid year`\r\n\t\t\t\t},\r\n\t\t\t\tm82_date_validator: {}\r\n\t\t\t},\r\n\t\t\t[s.field.stampValue.name]: {\r\n\t\t\t\tpresence: false,\r\n format: {\r\n pattern: \"^[0-9 \\.]+$\",\r\n message: \"^Only numbers allowed\"\r\n }\r\n\t\t\t},\r\n\t\t\t[s.field.chequeValue.name]: {\r\n\t\t\t\tpresence: false,\r\n format: {\r\n pattern: \"^[0-9 \\.]+$\",\r\n message: \"^Only numbers and decimal points allowed\"\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tvalidate.validators.m82_date_validator = ( value ) => {\r\n // get the day, month and year entered by the user\r\n const complaintDay = document.querySelector(s.field.complaintDay.selector).value, \r\n\t\tcomplaintMonth = document.querySelector(s.field.complaintMonth.selector).value,\r\n\t\tcomplaintYear = document.querySelector(s.field.complaintYear.selector).value,\r\n\t\tdecisionDay = document.querySelector(s.field.decisionDay.selector).value, \r\n decisionMonth = document.querySelector(s.field.decisionMonth.selector).value,\r\n decisionYear = document.querySelector(s.field.decisionYear.selector).value;\r\n \r\n // Only perform validation if complaint day, month and year are selected\r\n if(complaintDay && complaintMonth && complaintYear) {\r\n // first check the date is a valid date. e.g. not 31st of Feb (invalid)\r\n if(!checkIsValidDate(parseInt(complaintDay), parseInt(complaintMonth), parseInt(complaintYear))) {\r\n return `^Please enter a valid date`;\r\n\t\t\t}\r\n\t\t\t\r\n // If it is the same year, make sure date isn't in future\r\n if(parseInt(complaintYear) === currentYear().year) {\r\n // Make sure it is not a later month.\r\n if(parseInt(complaintMonth) > currentYear().month) {\r\n\t\t\t\t\t// Reset value if true\r\n\t\t\t\t\tdocument.querySelector(s.field.complaintYear.selector).value = \"\";\r\n return `^Date cannot be in the future`;\r\n }\r\n // If it is the same month as the current month, validate the day. \r\n if(parseInt(complaintMonth) === currentYear().month) {\r\n if(parseInt(complaintDay) > currentYear().day) {\r\n\t\t\t\t\t\t// reset value if true\r\n\t\t\t\t\t\tdocument.querySelector(s.field.complaintYear.selector).value = \"\";\r\n return `^Date cannot be in the future`; \r\n }\r\n }\r\n }\r\n\t\t}\r\n\r\n\t\t// Only perform validation if decision day, month and year are selected\r\n\t\tif (decisionDay && decisionMonth && decisionYear) {\r\n // first check the date is a valid date. e.g. not 31st of Feb (invalid)\r\n if(!checkIsValidDate(parseInt(decisionDay), parseInt(decisionMonth), parseInt(decisionYear))) {\r\n return `^Please enter a valid date`;\r\n }\r\n\t\t\t\r\n // If it is the same year, make sure date isn't in future\r\n if(parseInt(decisionYear) === currentYear().year) {\r\n // Make sure it is not a later month.\r\n if(parseInt(decisionMonth) > currentYear().month) {\r\n\t\t\t\t\t// reset value if true\r\n\t\t\t\t\tdocument.querySelector(s.field.decisionYear.selector).value = \"\";\r\n return `^Date cannot be in the future`;\r\n }\r\n // If it is the same month as the current month, validate the day. \r\n if(parseInt(decisionMonth) === currentYear().month) {\r\n if(parseInt(decisionDay) > currentYear().day) {\r\n\t\t\t\t\t\t// reset value if true\r\n\t\t\t\t\t\tdocument.querySelector(s.field.decisionYear.selector).value = \"\";\r\n return `^Date cannot be in the future`; \r\n }\r\n }\r\n }\r\n\t\t}\r\n\t\t\r\n\t\treturn null;\r\n\t}\r\n\r\n\r\n\tconst init = () => {\r\n\t\tif (s.form) {\r\n\t\t\t// Set yes or no options\r\n\t\t\thandleClickOption();\r\n\r\n\t\t\t// Set character count above notes box\r\n\t\t\tcharCount();\r\n\r\n\t\t\tdoValidation(s.form, setConstraints(), s.submitValidCallBackFunction, true);\r\n\r\n\t\t\t// Set complaint date to hidden date field value\r\n\t\t\tsetComplaintValues();\r\n\r\n\t\t\t// Set decision date to hidden date field value\r\n\t\t\tsetDecisionValues();\r\n\r\n\t\t\t\r\n\t\t\tconsole.log();\r\n\t\t\t\r\n\t\t}\r\n\t};\r\n\r\n\treturn {\r\n\t\tinit\r\n\t};\r\n})();\r\n\r\n{\r\n\tif(document.querySelectorAll(\".m82\")) {\r\n\t\tm82.init();\r\n\t}\r\n}\r\n"]}