{"version":3,"file":"../ageGate.js","names":["ageGateDayError","ageGateMonthError","ageGateYearError","handleShowAgeGate","ageGateElement","document","getElementById","classList","add","addEventListener","handleAgeGateInput","window","yearElement","monthElement","dayElement","initTrapFocus","e","trapFocus","injectError","message","targetClass","removeErrors","errorTemplate","elementListRemove","getElementsByClassName","item","remove","elementList","insertAdjacentHTML","dayMessage","getAttribute","monthMessage","yearMessage","target","id","day","value","length","isNaN","oldError","querySelector","dayError","month","monthError","year","yearError","checkAge","ageGateSubmitButton","setAttribute","invalidDateMessage","error","countryDD","country","countryName","options","selectedIndex","text","isEmptyOrSpaces","pleaseCompleteCountry","date","Date","pleaseCompleteDate","getTime","checkAgeWithAPI","then","result","success","allowed","JSON","parse","resultJson","dateYear","getFullYear","alcoholPurchaseProhibited","googleDataLayer","failedAgeGate","notAllowedByCountry","replace","ageCheckResult","passedAgeGate","SetAgeGateCookieAndRedirect","notOldEnoughError","alcoholPurchaseAge","parameters","URLSearchParams","dateOfBirth","toISOString","Promise","resolve","reject","fetch","ageGateUrl","method","headers","Accept","response","json","catch","AgeGateSet","daysInMonth","parseInt","days","getDate","first","option","querySelectorAll","d","createElement","appendChild","focus","event"],"sources":["ageGate.js"],"sourcesContent":["\r\nlet ageGateDayError = false;\r\nlet ageGateMonthError = false;\r\nlet ageGateYearError = false;\r\n\r\nfunction handleShowAgeGate() {\r\n // hide spinner, show age gate\r\n var ageGateElement = document.getElementById('ageGate');\r\n if (ageGateElement) {\r\n ageGateElement.classList.add('modal--visible');\r\n\r\n ageGateElement.addEventListener('input', handleAgeGateInput);\r\n }\r\n}\r\n\r\nwindow.addEventListener(\"load\", handleShowAgeGate);\r\n\r\nvar yearElement = document.getElementById('AGYear');\r\nvar monthElement = document.getElementById('AGMonth');\r\nvar dayElement = document.getElementById('AGDay');\r\n\r\nvar ageGateElement = document.getElementById(\"ageGate\");\r\nif (ageGateElement) {\r\n ageGateElement.focus();\r\n document.addEventListener('keydown', initTrapFocus);\r\n}\r\nfunction initTrapFocus(e) {\r\n return trapFocus(e, 'ageGate');\r\n}\r\n\r\nfunction injectError(message, targetClass, removeErrors = true) {\r\n var errorTemplate = `
${message}
`;\r\n\r\n if (removeErrors) {\r\n // remove old errors\r\n let elementListRemove = document.getElementsByClassName('validationError');\r\n for (let item of elementListRemove) {\r\n item.remove();\r\n }\r\n }\r\n\r\n let elementList = document.getElementsByClassName(targetClass);\r\n for (let item of elementList) {\r\n\r\n item.insertAdjacentHTML('beforeBegin', errorTemplate);\r\n }\r\n}\r\n\r\nfunction handleAgeGateInput(e) {\r\n var dayMessage = document.getElementById('dictionary-values').getAttribute('data-day-message');\r\n var monthMessage = document.getElementById('dictionary-values').getAttribute('data-month-message');\r\n var yearMessage = document.getElementById('dictionary-values').getAttribute('data-year-message');\r\n\r\n\r\n if (e.target.id === 'AGDay') {\r\n var day = e.target.value;\r\n\r\n if (day > 31 || day.length > 2 || isNaN(day)) {\r\n var errorTemplate = `
${dayMessage}
`;\r\n // remove old error\r\n var oldError = document.querySelector('.day-error');\r\n if (oldError) {\r\n oldError.remove();\r\n }\r\n // insert new error\r\n document.querySelector('.select-container-date').insertAdjacentHTML('beforeBegin', errorTemplate);\r\n // add error class to input\r\n e.target.classList.add('input-validation-error');\r\n ageGateDayError = true;\r\n } else {\r\n // remove error\r\n var dayError = document.querySelector('.day-error');\r\n if (dayError) {\r\n dayError.remove();\r\n }\r\n // remove input error class\r\n e.target.classList.remove('input-validation-error');\r\n ageGateDayError = false;\r\n }\r\n }\r\n\r\n\r\n if (e.target.id === 'AGMonth') {\r\n var month = e.target.value;\r\n\r\n if (month > 12 || month.length > 2 || isNaN(month)) {\r\n var errorTemplate = `
${monthMessage}
`;\r\n // remove old error\r\n var oldError = document.querySelector('.month-error');\r\n if (oldError) {\r\n oldError.remove();\r\n }\r\n // insert new error\r\n document.querySelector('.select-container-date').insertAdjacentHTML('beforeBegin', errorTemplate);\r\n // add error class to input\r\n e.target.classList.add('input-validation-error');\r\n ageGateMonthError = true;\r\n } else {\r\n // remove error\r\n var monthError = document.querySelector('.month-error');\r\n if (monthError) {\r\n monthError.remove();\r\n }\r\n // remove input error class\r\n e.target.classList.remove('input-validation-error');\r\n ageGateMonthError = false;\r\n }\r\n }\r\n\r\n\r\n if (e.target.id === 'AGYear') {\r\n var year = e.target.value;\r\n\r\n if (year.length !== 4 || isNaN(year)) {\r\n var errorTemplate = `
${yearMessage}
`;\r\n // remove old error\r\n var oldError = document.querySelector('.year-error');\r\n if (oldError) {\r\n oldError.remove();\r\n }\r\n // insert new error\r\n document.querySelector('.select-container-date').insertAdjacentHTML('beforeBegin', errorTemplate);\r\n // add error class to input\r\n e.target.classList.add('input-validation-error');\r\n ageGateYearError = true;\r\n } else {\r\n // remove error\r\n var yearError = document.querySelector('.year-error');\r\n if (yearError) {\r\n yearError.remove();\r\n }\r\n // remove input error class\r\n e.target.classList.remove('input-validation-error');\r\n ageGateYearError = false;\r\n }\r\n }\r\n}\r\n\r\nfunction checkAge() {\r\n\r\n if (ageGateDayError || ageGateMonthError || ageGateYearError) {\r\n return;\r\n }\r\n\r\n // show loading spinner on button \r\n var ageGateSubmitButton = document.getElementById('age-gate-submit');\r\n ageGateSubmitButton.setAttribute('aria-disabled', 'true');\r\n ageGateSubmitButton.querySelector('.submit__text').classList.add('hidden');\r\n ageGateSubmitButton.querySelector('.spinner').classList.remove('hidden');\r\n\r\n var invalidDateMessage = document.getElementById('dictionary-values').getAttribute('data-invalid-date-message');\r\n\r\n let error = false;\r\n\r\n // VALIDATION\r\n // --------------------\r\n\r\n let countryDD = document.getElementById('Countries');\r\n let country = countryDD.value;\r\n let countryName = countryDD.options[countryDD.selectedIndex].text;\r\n\r\n if (isEmptyOrSpaces(country)) {\r\n injectError(pleaseCompleteCountry, 'Countries');\r\n error = true;\r\n }\r\n\r\n let day = document.getElementById('AGDay').value;\r\n let month = document.getElementById('AGMonth').value;\r\n let year = document.getElementById('AGYear').value;\r\n\r\n let date = new Date(year, month - 1, day);\r\n\r\n if (isEmptyOrSpaces(day) || isEmptyOrSpaces(month) || isEmptyOrSpaces(year) || date == null) {\r\n injectError(pleaseCompleteDate, 'select-container-date');\r\n error = true;\r\n }\r\n\r\n if (isNaN(date.getTime())) {\r\n injectError(invalidDateMessage, 'select-container-date');\r\n error = true;\r\n }\r\n\r\n // API CALL\r\n // --------------------\r\n\r\n if (!error) {\r\n let prom = checkAgeWithAPI(country, date);\r\n prom.then(\r\n function (result) {\r\n if (result.success) {\r\n\r\n var allowed = JSON.parse(result.resultJson);\r\n var dateYear = date.getFullYear();\r\n if (allowed.alcoholPurchaseProhibited) {\r\n if (typeof googleDataLayer !== 'undefined') {\r\n googleDataLayer.failedAgeGate(countryName, dateYear, \"Blocked by country\");\r\n }\r\n injectError(notAllowedByCountry.replace('%%country%%', countryName), 'select-container-date');\r\n\r\n ageGateSubmitButton.setAttribute('aria-disabled', 'false');\r\n ageGateSubmitButton.querySelector('.submit__text').classList.remove('hidden');\r\n ageGateSubmitButton.querySelector('.spinner').classList.add('hidden');\r\n\r\n return;\r\n }\r\n if (allowed.ageCheckResult) {\r\n if (typeof googleDataLayer !== 'undefined') {\r\n googleDataLayer.passedAgeGate(countryName, dateYear);\r\n }\r\n SetAgeGateCookieAndRedirect(countryName);\r\n } else {\r\n if (typeof googleDataLayer !== 'undefined') {\r\n googleDataLayer.failedAgeGate(countryName, dateYear, \"Not old enough\");\r\n }\r\n injectError(notOldEnoughError.replace('%%country%%', countryName).replace('%%purchaseAge%%', allowed.alcoholPurchaseAge), 'select-container-date')\r\n }\r\n }\r\n else {\r\n if (typeof googleDataLayer !== 'undefined') {\r\n googleDataLayer.failedAgeGate(countryName, dateYear, \"API Error\");\r\n }\r\n injectError(invalidDateMessage, 'select-container-date');\r\n }\r\n\r\n ageGateSubmitButton.setAttribute('aria-disabled', 'false');\r\n ageGateSubmitButton.querySelector('.submit__text').classList.remove('hidden');\r\n ageGateSubmitButton.querySelector('.spinner').classList.add('hidden');\r\n }\r\n );\r\n } else {\r\n ageGateSubmitButton.setAttribute('aria-disabled', 'false');\r\n ageGateSubmitButton.querySelector('.submit__text').classList.remove('hidden');\r\n ageGateSubmitButton.querySelector('.spinner').classList.add('hidden');\r\n }\r\n}\r\n\r\n// API / Query\r\n// ===========\r\n\r\nfunction checkAgeWithAPI(country, date) {\r\n //https://dalmore-local.factory73.com/umbraco/surface/API/CheckAgeGate/?country=GB&dateOfBirth=2000-03-02T12:01:19.289Z&brand=Dalmore\r\n\r\n let parameters = new URLSearchParams({\r\n country: country,\r\n dateOfBirth: date.toISOString()\r\n });\r\n\r\n console.log('Parameters : %o', parameters);\r\n\r\n return new Promise(function (resolve, reject) {\r\n fetch(ageGateUrl + '?' + parameters, {\r\n method: 'get', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },\r\n })\r\n .then(function (response) {\r\n resolve(response.json());\r\n })\r\n .catch(error => {\r\n console.log('Failed', error);\r\n reject(error);\r\n });\r\n });\r\n}\r\n\r\nyearElement.addEventListener('change', function (event) {\r\n //console.log(event.target); // The clicked element\r\n daysInMonth();\r\n});\r\nmonthElement.addEventListener('change', function (event) {\r\n //console.log(event.target); // The clicked element\r\n daysInMonth();\r\n});\r\n\r\nfunction SetAgeGateCookieAndRedirect(country) {\r\n AgeGateSet(country); // Scripts.js\r\n //console.log('Allowed');\r\n\r\n document.getElementById(\"ageGate\").classList.add('hidden');\r\n\r\n document.querySelector(\"body\").classList.remove('overflow--hidden');\r\n\r\n document.querySelector('body').classList.add('body--loaded')\r\n}\r\n\r\nfunction daysInMonth() {\r\n var month = parseInt(monthElement.value);\r\n var year = parseInt(yearElement.value);\r\n\r\n if (month !== 0 && year !== 0) {\r\n var days = new Date(year, month, 0).getDate();\r\n\r\n // Remove all\r\n var first = true;\r\n for (const option of document.querySelectorAll('#AGDay > option')) {\r\n if (!first) {\t// Leave the day label\r\n option.remove();\r\n } else {\r\n first = false;\r\n }\r\n }\r\n for (let d = 1; d <= days; d++) {\r\n option = document.createElement(\"option\");\r\n option.text = d;\r\n option.value = d;\r\n dayElement.appendChild(option)\r\n }\r\n\r\n document.getElementById(\"AGDay\").selectedIndex = 1;\r\n } else {\r\n return 0;\r\n }\r\n}"],"mappings":"AACA,IAAIA,iBAAkB,EAClBC,mBAAoB,EACpBC,kBAAmB,EAEvB,SAASC,oBAEL,IAAIC,EAAiBC,SAASC,eAAe,WACzCF,IACAA,EAAeG,UAAUC,IAAI,kBAE7BJ,EAAeK,iBAAiB,QAASC,oBAEjD,CAEAC,OAAOF,iBAAiB,OAAQN,mBAEhC,IAAIS,YAAcP,SAASC,eAAe,UACtCO,aAAeR,SAASC,eAAe,WACvCQ,WAAaT,SAASC,eAAe,SAErCF,eAAiBC,SAASC,eAAe,WAK7C,SAASS,cAAcC,GACnB,OAAOC,UAAUD,EAAG,UACxB,CAEA,SAASE,YAAYC,EAASC,EAAaC,GAAe,GACtD,IAAIC,EAAgB,sCAAsCH,UAE1D,GAAIE,EAAc,CAEd,IAAIE,EAAoBlB,SAASmB,uBAAuB,mBACxD,IAAK,IAAIC,KAAQF,EACbE,EAAKC,QAEb,CAEA,IAAIC,EAActB,SAASmB,uBAAuBJ,GAClD,IAAK,IAAIK,KAAQE,EAEbF,EAAKG,mBAAmB,cAAeN,EAE/C,CAEA,SAASZ,mBAAmBM,GACxB,IAAIa,EAAaxB,SAASC,eAAe,qBAAqBwB,aAAa,oBACvEC,EAAe1B,SAASC,eAAe,qBAAqBwB,aAAa,sBACzEE,EAAc3B,SAASC,eAAe,qBAAqBwB,aAAa,qBAG5E,GAAoB,UAAhBd,EAAEiB,OAAOC,GAAgB,CACzB,IAAIC,EAAMnB,EAAEiB,OAAOG,MAEnB,GAAID,EAAM,IAAMA,EAAIE,OAAS,GAAKC,MAAMH,GAAM,CAC1C,IAAIb,EAAgB,gDAAgDO,WAEhEU,EAAWlC,SAASmC,cAAc,gBAElCD,EAASb,SAGbrB,SAASmC,cAAc,0BAA0BZ,mBAAmB,cAAeN,GAEnFN,EAAEiB,OAAO1B,UAAUC,IAAI,0BACvBR,iBAAkB,CACtB,KAAO,CAEH,IAAIyC,EAAWpC,SAASmC,cAAc,cAClCC,GACAA,EAASf,SAGbV,EAAEiB,OAAO1B,UAAUmB,OAAO,0BAC1B1B,iBAAkB,CACtB,CACJ,CAGA,GAAoB,YAAhBgB,EAAEiB,OAAOC,GAAkB,CAC3B,IAAIQ,EAAQ1B,EAAEiB,OAAOG,MAErB,GAAIM,EAAQ,IAAMA,EAAML,OAAS,GAAKC,MAAMI,GAAQ,CAC5CpB,EAAgB,kDAAkDS,WAElEQ,EAAWlC,SAASmC,cAAc,kBAElCD,EAASb,SAGbrB,SAASmC,cAAc,0BAA0BZ,mBAAmB,cAAeN,GAEnFN,EAAEiB,OAAO1B,UAAUC,IAAI,0BACvBP,mBAAoB,CACxB,KAAO,CAEH,IAAI0C,EAAatC,SAASmC,cAAc,gBACpCG,GACAA,EAAWjB,SAGfV,EAAEiB,OAAO1B,UAAUmB,OAAO,0BAC1BzB,mBAAoB,CACxB,CACJ,CAGA,GAAoB,WAAhBe,EAAEiB,OAAOC,GAAiB,CAC1B,IAAIU,EAAO5B,EAAEiB,OAAOG,MAEpB,GAAoB,IAAhBQ,EAAKP,QAAgBC,MAAMM,GAAO,CAClC,IAEIL,EAFAjB,EAAgB,iDAAiDU,WAEjEO,EAAWlC,SAASmC,cAAc,iBAElCD,EAASb,SAGbrB,SAASmC,cAAc,0BAA0BZ,mBAAmB,cAAeN,GAEnFN,EAAEiB,OAAO1B,UAAUC,IAAI,0BACvBN,kBAAmB,CACvB,KAAO,CAEH,IAAI2C,EAAYxC,SAASmC,cAAc,eACnCK,GACAA,EAAUnB,SAGdV,EAAEiB,OAAO1B,UAAUmB,OAAO,0BAC1BxB,kBAAmB,CACvB,CACJ,CACJ,CAEA,SAAS4C,WAEL,GAAI9C,iBAAmBC,mBAAqBC,iBACxC,OAIJ,IAAI6C,EAAsB1C,SAASC,eAAe,mBAClDyC,EAAoBC,aAAa,gBAAiB,QAClDD,EAAoBP,cAAc,iBAAiBjC,UAAUC,IAAI,UACjEuC,EAAoBP,cAAc,YAAYjC,UAAUmB,OAAO,UAE/D,IAAIuB,EAAqB5C,SAASC,eAAe,qBAAqBwB,aAAa,6BAEnF,IAAIoB,GAAQ,EAKRC,EAAY9C,SAASC,eAAe,aACpC8C,EAAUD,EAAUf,MACpBiB,EAAcF,EAAUG,QAAQH,EAAUI,eAAeC,KAEzDC,gBAAgBL,KAChBlC,YAAYwC,sBAAuB,aACnCR,GAAQ,GAGZ,IAAIf,EAAM9B,SAASC,eAAe,SAAS8B,MACvCM,EAAQrC,SAASC,eAAe,WAAW8B,MAC3CQ,EAAOvC,SAASC,eAAe,UAAU8B,MAEzCuB,EAAO,IAAIC,KAAKhB,EAAMF,EAAQ,EAAGP,GAerC,IAbIsB,gBAAgBtB,IAAQsB,gBAAgBf,IAAUe,gBAAgBb,IAAiB,MAARe,KAC3EzC,YAAY2C,mBAAoB,yBAChCX,GAAQ,GAGRZ,MAAMqB,EAAKG,aACX5C,YAAY+B,EAAoB,yBAChCC,GAAQ,GAMPA,EA6CDH,EAAoBC,aAAa,gBAAiB,SAClDD,EAAoBP,cAAc,iBAAiBjC,UAAUmB,OAAO,UACpEqB,EAAoBP,cAAc,YAAYjC,UAAUC,IAAI,cA/CpD,CACGuD,gBAAgBX,EAASO,GAC/BK,MACD,SAAUC,GACN,GAAIA,EAAOC,QAAS,CAEhB,IAAIC,EAAUC,KAAKC,MAAMJ,EAAOK,YAC5BC,EAAWZ,EAAKa,cACpB,GAAIL,EAAQM,0BAUR,MAT+B,oBAApBC,iBACPA,gBAAgBC,cAActB,EAAakB,EAAU,sBAEzDrD,YAAY0D,oBAAoBC,QAAQ,cAAexB,GAAc,yBAErEN,EAAoBC,aAAa,gBAAiB,SAClDD,EAAoBP,cAAc,iBAAiBjC,UAAUmB,OAAO,eACpEqB,EAAoBP,cAAc,YAAYjC,UAAUC,IAAI,UAI5D2D,EAAQW,gBACuB,oBAApBJ,iBACPA,gBAAgBK,cAAc1B,EAAakB,GAE/CS,4BAA4B3B,KAEG,oBAApBqB,iBACPA,gBAAgBC,cAActB,EAAakB,EAAU,kBAEzDrD,YAAY+D,kBAAkBJ,QAAQ,cAAexB,GAAawB,QAAQ,kBAAmBV,EAAQe,oBAAqB,yBAElI,KAEmC,oBAApBR,iBACPA,gBAAgBC,cAActB,EAAakB,EAAU,aAEzDrD,YAAY+B,EAAoB,yBAGpCF,EAAoBC,aAAa,gBAAiB,SAClDD,EAAoBP,cAAc,iBAAiBjC,UAAUmB,OAAO,UACpEqB,EAAoBP,cAAc,YAAYjC,UAAUC,IAAI,SAChE,GAER,CAKJ,CAKA,SAASuD,gBAAgBX,EAASO,GAG9B,IAAIwB,EAAa,IAAIC,gBAAgB,CACjChC,QAASA,EACTiC,YAAa1B,EAAK2B,gBAKtB,OAAO,IAAIC,SAAQ,SAAUC,EAASC,GAClCC,MAAMC,WAAa,IAAMR,EAAY,CACjCS,OAAQ,MAAOC,QAAS,CAAEC,OAAU,mBAAoB,eAAgB,sBAEvE9B,MAAK,SAAU+B,GACZP,EAAQO,EAASC,OACrB,IACCC,OAAM/C,IAEHuC,EAAOvC,EAAM,GAEzB,GACJ,CAWA,SAAS8B,4BAA4B5B,GACjC8C,WAAW9C,GAGX/C,SAASC,eAAe,WAAWC,UAAUC,IAAI,UAEjDH,SAASmC,cAAc,QAAQjC,UAAUmB,OAAO,oBAEhDrB,SAASmC,cAAc,QAAQjC,UAAUC,IAAI,eACjD,CAEA,SAAS2F,cACL,IAAIzD,EAAQ0D,SAASvF,aAAauB,OAC9BQ,EAAOwD,SAASxF,YAAYwB,OAEhC,GAAc,IAAVM,GAAwB,IAATE,EAqBf,OAAO,EApBP,IAAIyD,EAAO,IAAIzC,KAAKhB,EAAMF,EAAO,GAAG4D,UAGhCC,GAAQ,EACZ,IAAK,MAAMC,KAAUnG,SAASoG,iBAAiB,mBACtCF,EAGDA,GAAQ,EAFRC,EAAO9E,SAKf,IAAK,IAAIgF,EAAI,EAAGA,GAAKL,EAAMK,IACvBF,OAASnG,SAASsG,cAAc,UAChCH,OAAOhD,KAAOkD,EACdF,OAAOpE,MAAQsE,EACf5F,WAAW8F,YAAYJ,QAG3BnG,SAASC,eAAe,SAASiD,cAAgB,CAIzD,CAhSInD,iBACAA,eAAeyG,QACfxG,SAASI,iBAAiB,UAAWM,gBA+OzCH,YAAYH,iBAAiB,UAAU,SAAUqG,GAE7CX,aACJ,IACAtF,aAAaJ,iBAAiB,UAAU,SAAUqG,GAE9CX,aACJ"}