{"version":3,"file":"drink-driving-widget.min.js","names":["window","_drinkDrivingCalc","stoneText","document","getElementById","poundsText","kilosText","steppers","querySelectorAll","selects","numInputs","radios","calcForm","querySelector","genderRadios","calcBtn","toggleForm","e","isHideForm","preventDefault","heading","form","results","timeLeft","validateForm","stoppedText","bacText","highLowText","userMinute","value","userHour","highLow","bac","calculateBAC","bacPercent","toString","innerHTML","calculateStoppedDrinking","exampleDate","Date","setHours","parseInt","substring","getHours","calculateTime","amPm","timeString","toLocaleTimeString","hour","minute","startsWith","replace","trimEnd","classList","add","setAttribute","remove","removeAttribute","scrollIntoView","behavior","reset","stoneWrapper","parentElement","totalAlcoholInGrams","genderConstant","checked","isKilos","weightObj","kilos","stone","pounds","weightToGrams","toFixed","numberOfUnits","Math","ceil","date","hourDiff","string","timeStart","hoursNow","startDate","diffMs","getMinutes","diffMins","round","weight","weightInGrams","setUpWeightRadios","_loop","i","addEventListener","removeErrorStates","closest","kiloWrapper","this","getAttribute","length","numberInputStep","parentNode","_this","target","input","currentVal","incVal","id","contains","valid","validateRadioInputs","validateNumberInputs","validateSelects","maleChecked","femaleChecked","stoneChecked","kilosChecked","radiosValid","insertError","forEach","count","numberInputs","hourValue","minuteValue","hasErrored","el","fieldValidationDiv","createElement","errorText","textContent","srErrorText","appendChild","insertBefore","nextSibling","removeErrorStatesSelects","select","stopNegNums","keyCode"],"sources":["drink-driving/drink-driving-widget.js"],"mappings":"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","ignoreList":[],"sourcesContent":["window._drinkDrivingCalc = {\r\n\tstoneText: document.getElementById('stone-text-input'),\r\n\tpoundsText: document.getElementById('pounds-text-input'),\r\n\tkilosText: document.getElementById('kilograms-text-input'),\r\n\tsteppers: document.querySelectorAll('.stepper'),\r\n\tselects: document.querySelectorAll('select'),\r\n\tnumInputs: document.querySelectorAll('input[type=number]'),\r\n\tradios: document.querySelectorAll('.field-group--indented-below input[type=radio]'),\r\n\tcalcForm: document.querySelector('.calculator__form'),\r\n\tgenderRadios: document.querySelector('.field-group--radios-gender'),\r\n\tcalcBtn: document.querySelector('.calculator__results button'),\r\n\r\n\ttoggleForm: (e, isHideForm) => {\r\n\t\tisHideForm && e.preventDefault();\r\n\t\tconst heading = document.querySelector('.calculator__container h2');\r\n\t\tconst form = document.querySelector('.calculator__form');\r\n\t\tconst results = document.querySelector('.calculator__results');\r\n\t\tconst timeLeft = document.querySelector('#timeLeft');\r\n\r\n\t\tif (isHideForm) {\r\n\t\t\tif (!_drinkDrivingCalc.validateForm()) return;\r\n\t\t\tconst stoppedText = document.getElementById('stopped');\r\n\t\t\tconst bacText = document.getElementById('bac');\r\n\t\t\tconst highLowText = document.getElementById('highLow');\r\n\t\t\tconst userMinute = +document.getElementById('minute').value;\r\n\t\t\tconst userHour = document.getElementById('hour').value;\r\n\t\t\tlet highLow;\r\n\r\n\t\t\tconst bac = _drinkDrivingCalc.calculateBAC();\r\n\r\n\t\t\tconst bacPercent = `${bac.toString()}%`;\r\n\t\t\tbacText.innerHTML = bacPercent;\r\n\t\t\tstoppedText.innerHTML = _drinkDrivingCalc.calculateStoppedDrinking();\r\n\r\n\t\t\tif (bac > 0.08) {\r\n\t\t\t\thighLow = 'higher than';\r\n\t\t\t} else if (bac == 0.08) {\r\n\t\t\t\thighLow = 'equal to';\r\n\t\t\t} else {\r\n\t\t\t\thighLow = 'lower than';\r\n\t\t\t}\r\n\r\n\t\t\thighLowText.innerHTML = highLow;\r\n\t\t\tconst exampleDate = new Date();\r\n\t\t\texampleDate.setHours(parseInt(userHour.substring(0, 2)), parseInt(userMinute), 0);\r\n\t\t\texampleDate.setHours(exampleDate.getHours() + _drinkDrivingCalc.calculateTime());\r\n\t\t\tconst amPm = exampleDate.getHours() >= 12 ? 'pm' : 'am';\r\n\t\t\tlet timeString = exampleDate.toLocaleTimeString([], {\r\n\t\t\t\thour: '2-digit',\r\n\t\t\t\tminute: '2-digit',\r\n\t\t\t});\r\n\r\n\t\t\tif (amPm === 'pm' && timeString.startsWith('0')) {\r\n\t\t\t\ttimeString = timeString.substring(1);\r\n\t\t\t}\r\n\r\n\t\t\ttimeLeft.innerHTML = `${_drinkDrivingCalc.calculateTime().toString()} hours at ${timeString\r\n\t\t\t\t.replace('AM', '')\r\n\t\t\t\t.replace('PM', '')\r\n\t\t\t\t.trimEnd()} ${amPm}`;\r\n\t\t\theading.classList.add('large-heading');\r\n\t\t\theading.innerHTML = 'Your results';\r\n\t\t\tform.classList.add('visuallyhidden');\r\n\t\t\tform.setAttribute('aria-hidden', 'true');\r\n\t\t\tresults.classList.remove('visuallyhidden');\r\n\t\t\tresults.removeAttribute('aria-hidden');\r\n\r\n\t\t\tdocument.querySelector('.calculator__container .large-heading').scrollIntoView({\r\n\t\t\t\tbehavior: 'smooth',\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t_drinkDrivingCalc.calcForm.reset();\r\n\r\n\t\t\tconst stoneWrapper = document.getElementById('weight-option-wrapper--stone');\r\n\t\t\tstoneWrapper.parentElement.classList.add('display-none');\r\n\t\t\tstoneWrapper.classList.add('display-none');\r\n\t\t\tdocument.querySelector('.field-group--radios.active').classList.remove('active');\r\n\t\t\tdocument.getElementById('weight-option-wrapper--kilograms').classList.add('display-none');\r\n\t\t\theading.classList.remove('large-heading');\r\n\t\t\theading.innerHTML = \"Enter a few details to see when it's safe to drive after drinking\";\r\n\t\t\tresults.classList.add('visuallyhidden');\r\n\t\t\tresults.setAttribute('aria-hidden', 'true');\r\n\t\t\tform.classList.remove('visuallyhidden');\r\n\t\t\tform.removeAttribute('aria-hidden');\r\n\t\t}\r\n\t},\r\n\r\n\tcalculateBAC: () => {\r\n\t\tconst numberOfWineGrams = document.getElementById('wine').value * 2.1 * 8;\r\n\t\tconst numberOfPintGrams = document.getElementById('pints').value * 2.3 * 8;\r\n\t\tconst numberOfSpiritGrams = document.getElementById('spirits').value * 8;\r\n\t\tconst totalAlcoholInGrams = +numberOfWineGrams + +numberOfPintGrams + +numberOfSpiritGrams;\r\n\t\tconst genderConstant = document.getElementById('female').checked ? 0.55 : 0.68;\r\n\t\tconst isKilos = document.getElementById('kilograms').checked;\r\n\t\tconst weightObj = {};\r\n\r\n\t\tif (isKilos) {\r\n\t\t\tweightObj.kilos = document.getElementById('kilograms-text-input').value;\r\n\t\t} else {\r\n\t\t\tweightObj.stone = document.getElementById('stone-text-input').value;\r\n\t\t\tweightObj.pounds = document.getElementById('pounds-text-input').value;\r\n\t\t}\r\n\r\n\t\tconst weight = _drinkDrivingCalc.weightToGrams(weightObj, isKilos);\r\n\r\n\t\tconst BAC = ((totalAlcoholInGrams / (weight * genderConstant)) * 100).toFixed(2);\r\n\t\treturn BAC;\r\n\t},\r\n\r\n\tcalculateTime: () => {\r\n\t\tconst numberOfUnits =\r\n\t\t\t+document.getElementById('wine').value * 2.1 +\r\n\t\t\t+document.getElementById('pints').value * 2.3 +\r\n\t\t\t+document.getElementById('spirits').value;\r\n\t\treturn Math.ceil(+numberOfUnits + 1);\r\n\t},\r\n\r\n\tcalculateStoppedDrinking: () => {\r\n\t\tconst date = new Date();\r\n\t\tconst userMinute = +document.getElementById('minute').value;\r\n\t\tconst userHour = document.getElementById('hour').value;\r\n\t\tlet hourDiff;\r\n\t\tlet string;\r\n\t\tconst timeStart = new Date(`01/01/2007 ${userHour}`).getHours();\r\n\t\tconst hoursNow = date.getHours();\r\n\t\tconst startDate = new Date('01/01/2007');\r\n\t\tconst exampleDate = startDate.setHours(parseInt(userHour.substring(0, 2)), parseInt(userMinute), 0);\r\n\t\tconst exampleDateTimeNow = startDate.setHours(date.getHours(), date.getMinutes(), 0);\r\n\t\tconst diffMs = exampleDate - exampleDateTimeNow;\r\n\t\tconst diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000);\r\n\r\n\t\tif (timeStart > hoursNow) {\r\n\t\t\thourDiff = hoursNow - timeStart + 24;\r\n\t\t} else if (timeStart == hoursNow) {\r\n\t\t\thourDiff = 0;\r\n\t\t} else {\r\n\t\t\thourDiff = hoursNow - timeStart;\r\n\t\t}\r\n\r\n\t\tif (hourDiff === 1) {\r\n\t\t\t// 1 hour before current time\r\n\t\t\tif (userMinute > date.getMinutes()) {\r\n\t\t\t\tstring = `${diffMins * -1} minutes ago`;\r\n\t\t\t} else if (userMinute === date.getMinutes()) {\r\n\t\t\t\tstring = 'an hour ago';\r\n\t\t\t} else {\r\n\t\t\t\tif (diffMins === 1 || diffMins === -1) {\r\n\t\t\t\t\tstring = `1 hour and ${diffMins * -1} minute ago`;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstring = `1 hour and ${diffMins * -1} minutes ago`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (hourDiff === 0) {\r\n\t\t\t// same hour as current time\r\n\t\t\tif (userMinute > date.getMinutes()) {\r\n\t\t\t\tstring = `23 hours and ${60 - diffMins} minutes ago`;\r\n\t\t\t} else if (userMinute === date.getMinutes()) {\r\n\t\t\t\tstring = 'just now';\r\n\t\t\t} else {\r\n\t\t\t\tif (diffMins === 1 || diffMins === -1) {\r\n\t\t\t\t\tstring = `${diffMins * -1} minute ago`;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstring = `${diffMins * -1} minutes ago`;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (parseInt(userHour) > date.getHours()) {\r\n\t\t\t\tif (userMinute > date.getMinutes()) {\r\n\t\t\t\t\tif (diffMins == 0) {\r\n\t\t\t\t\t\tstring = `${hourDiff - 1} hours ago`;\r\n\t\t\t\t\t} else if (diffMins === 1 || diffMins === -1) {\r\n\t\t\t\t\t\tstring = `${hourDiff - 1} hours and ${diffMins * -1} minute ago`;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstring = `${hourDiff - 1} hours and ${60 - diffMins} minutes ago`;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (diffMins == 0) {\r\n\t\t\t\t\t\tstring = `${hourDiff} hours ago`;\r\n\t\t\t\t\t} else if (diffMins === 1) {\r\n\t\t\t\t\t\tstring = `${hourDiff} hours and ${60 - diffMins} minutes ago`;\r\n\t\t\t\t\t} else if (diffMins === -1) {\r\n\t\t\t\t\t\tstring = `${hourDiff} hours and ${diffMins * -1} minute ago`;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstring = `${hourDiff} hours and ${60 - diffMins} minutes ago`;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (userMinute > date.getMinutes()) {\r\n\t\t\t\t\tif (diffMins == 0) {\r\n\t\t\t\t\t\tstring = `${hourDiff - 1} hours ago`;\r\n\t\t\t\t\t} else if (diffMins === 1 || diffMins === -1) {\r\n\t\t\t\t\t\tstring = `${hourDiff - 1} hours and ${diffMins * -1} minute ago`;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstring = `${hourDiff - 1} hours and ${diffMins * -1} minutes ago`;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (diffMins == 0) {\r\n\t\t\t\t\t\tstring = `${hourDiff} hours ago`;\r\n\t\t\t\t\t} else if (diffMins === 1 || diffMins === -1) {\r\n\t\t\t\t\t\tstring = `${hourDiff} hours and ${diffMins * -1} minute ago`;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstring = `${hourDiff} hours and ${diffMins * -1} minutes ago`;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn string;\r\n\t},\r\n\r\n\tweightToGrams: (weight, isKilos) => {\r\n\t\tlet weightInGrams;\r\n\r\n\t\tif (isKilos) {\r\n\t\t\tweightInGrams = weight.kilos * 1000;\r\n\t\t} else {\r\n\t\t\tweightInGrams = ((+weight.stone + weight.pounds / 14) * 6.35).toFixed(2);\r\n\t\t\tweightInGrams *= 1000;\r\n\t\t}\r\n\r\n\t\treturn weightInGrams;\r\n\t},\r\n\r\n\tsetUpWeightRadios: radios => {\r\n\t\tconst _loop = function _loop(i) {\r\n\t\t\tradios[i].addEventListener('change', function () {\r\n\t\t\t\t_drinkDrivingCalc.removeErrorStates(radios[i].closest('.field-group'));\r\n\r\n\t\t\t\tdocument.querySelector('.field-group--indented-below').classList.add('active');\r\n\t\t\t\tdocument.querySelector('.field-group--indented').classList.remove('display-none');\r\n\t\t\t\tconst stoneWrapper = document.getElementById('weight-option-wrapper--stone');\r\n\t\t\t\tconst kiloWrapper = document.getElementById('weight-option-wrapper--kilograms');\r\n\r\n\t\t\t\tif (this.getAttribute('id') === 'stone') {\r\n\t\t\t\t\tkiloWrapper.classList.add('display-none');\r\n\t\t\t\t\tstoneWrapper.classList.remove('display-none');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstoneWrapper.classList.add('display-none');\r\n\t\t\t\t\tkiloWrapper.classList.remove('display-none');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tfor (let i = 0; i < radios.length; i++) {\r\n\t\t\t_loop(i);\r\n\t\t}\r\n\t},\r\n\r\n\tnumberInputStep: e => {\r\n\t\te.preventDefault();\r\n\r\n\t\t_drinkDrivingCalc.removeErrorStates(document.querySelector('.drink').parentNode);\r\n\r\n\t\tconst _this = e.target;\r\n\r\n\t\tconst input = _this.parentNode.querySelector('input[type=number]');\r\n\r\n\t\tconst currentVal = +input.value;\r\n\t\tlet incVal;\r\n\r\n\t\tif (input.id == 'pints') {\r\n\t\t\tincVal = 0.5;\r\n\t\t} else {\r\n\t\t\tincVal = 1;\r\n\t\t}\r\n\r\n\t\tif (_this.classList.contains('plus')) {\r\n\t\t\tinput.value = currentVal + incVal;\r\n\t\t} else {\r\n\t\t\tif (currentVal === 0) return;\r\n\t\t\tinput.value = currentVal - incVal;\r\n\t\t}\r\n\t},\r\n\r\n\tvalidateForm: () => {\r\n\t\tlet valid = true;\r\n\r\n\t\tif (!_drinkDrivingCalc.validateRadioInputs()) {\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\tif (!_drinkDrivingCalc.validateNumberInputs()) {\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\tif (!_drinkDrivingCalc.validateSelects()) {\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t},\r\n\r\n\tvalidateRadioInputs: () => {\r\n\t\tconst maleChecked = document.getElementById('male').checked;\r\n\t\tconst femaleChecked = document.getElementById('female').checked;\r\n\t\tconst stoneChecked = document.getElementById('stone').checked;\r\n\t\tconst kilosChecked = document.getElementById('kilograms').checked;\r\n\t\tconst radiosValid =\r\n\t\t\t((maleChecked && !femaleChecked) || (!maleChecked && femaleChecked)) &&\r\n\t\t\t((stoneChecked && !kilosChecked) || (!stoneChecked && kilosChecked));\r\n\r\n\t\tif (!maleChecked && !femaleChecked) {\r\n\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.gender'));\r\n\t\t}\r\n\r\n\t\tif (!stoneChecked && !kilosChecked) {\r\n\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.weight'));\r\n\t\t}\r\n\r\n\t\tif (stoneChecked) {\r\n\t\t\tif (_drinkDrivingCalc.stoneText.value == '' || _drinkDrivingCalc.poundsText.value == '') {\r\n\t\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.weight'));\r\n\r\n\t\t\t\t[_drinkDrivingCalc.stoneText, _drinkDrivingCalc.poundsText].forEach(function (input) {\r\n\t\t\t\t\tif (input.value == '') {\r\n\t\t\t\t\t\tinput.classList.add('validation--error');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tradiosValid = false;\r\n\t\t\t}\r\n\t\t} else if (kilosChecked) {\r\n\t\t\tif (_drinkDrivingCalc.kilosText.value == '') {\r\n\t\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.weight'));\r\n\t\t\t\t_drinkDrivingCalc.kilosText.classList.add('validation--error');\r\n\t\t\t\tradiosValid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (radiosValid) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n\r\n\tvalidateNumberInputs: () => {\r\n\t\tlet count = 0;\r\n\t\tconst numberInputs = document.querySelectorAll('.field-group__stepper-container input[type=number]');\r\n\r\n\t\tfor (let i = 0; i < numberInputs.length; i++) {\r\n\t\t\tif (numberInputs[i].value == 0) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (count == 3) {\r\n\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.drink'));\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\r\n\tvalidateSelects: () => {\r\n\t\tconst hour = document.getElementById('hour');\r\n\t\tconst minute = document.getElementById('minute');\r\n\t\tconst hourValue = document.getElementById('hour').value;\r\n\t\tconst minuteValue = document.getElementById('minute').value;\r\n\r\n\t\tif (hourValue == '' && minuteValue != '') {\r\n\t\t\thour.classList.add('select--error');\r\n\r\n\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.time'));\r\n\r\n\t\t\treturn false;\r\n\t\t} else if (hourValue != '' && minuteValue == '') {\r\n\t\t\tminute.classList.add('select--error');\r\n\r\n\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.time'));\r\n\r\n\t\t\treturn false;\r\n\t\t} else if (hourValue == '' && minuteValue == '') {\r\n\t\t\thour.classList.add('select--error');\r\n\t\t\tminute.classList.add('select--error');\r\n\r\n\t\t\t_drinkDrivingCalc.insertError(document.querySelector('.time'));\r\n\r\n\t\t\treturn false;\r\n\t\t} else {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\r\n\thasErrored: el => {\r\n\t\tconst parent = el.parentNode;\r\n\r\n\t\tif (parent.querySelectorAll('.field-validation-error').length) {\r\n\t\t\treturn true;\r\n\t\t} else {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n\r\n\tinsertError: el => {\r\n\t\tif (_drinkDrivingCalc.hasErrored(el)) return;\r\n\t\tconst fieldValidationDiv = document.createElement('div');\r\n\t\tfieldValidationDiv.setAttribute('class', 'field-validation-error');\r\n\t\tconst errorText = document.createElement('span');\r\n\t\terrorText.textContent = 'Please answer this question';\r\n\t\tconst srErrorText = document.createElement('span');\r\n\t\tsrErrorText.setAttribute('class', 'visually-hidden');\r\n\t\tsrErrorText.textContent = 'Error';\r\n\t\tfieldValidationDiv.appendChild(srErrorText);\r\n\t\tfieldValidationDiv.appendChild(errorText);\r\n\t\tel.parentNode.insertBefore(fieldValidationDiv, el.nextSibling);\r\n\t},\r\n\r\n\tremoveErrorStatesSelects: (e, el) => {\r\n\t\tconst select = e.target;\r\n\t\tconst hour = document.getElementById('hour');\r\n\t\tconst minute = document.getElementById('minute');\r\n\r\n\t\tif (select.value != '') {\r\n\t\t\tselect.classList.remove('select--error');\r\n\t\t}\r\n\r\n\t\tif ((hour.value != '') & (minute.value != '')) {\r\n\t\t\t_drinkDrivingCalc.removeErrorStates(el);\r\n\t\t}\r\n\t},\r\n\r\n\tremoveErrorStates: el => {\r\n\t\tconst errorMsg = el.querySelector('.field-validation-error');\r\n\t\terrorMsg && el.querySelector('.field-validation-error').remove();\r\n\t},\r\n\r\n\tstopNegNums: e => {\r\n\t\tif (e.keyCode == 189 || e.keyCode == 109) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t},\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', function () {\r\n\tfor (let i = 0; i < _drinkDrivingCalc.steppers.length; i++) {\r\n\t\t_drinkDrivingCalc.steppers[i].addEventListener('click', _drinkDrivingCalc.numberInputStep);\r\n\t}\r\n\r\n\tfor (let i = 0; i < _drinkDrivingCalc.selects.length; i++) {\r\n\t\t_drinkDrivingCalc.selects[i].addEventListener('change', function (e) {\r\n\t\t\t_drinkDrivingCalc.removeErrorStatesSelects(e, document.querySelector('.time').parentNode);\r\n\t\t});\r\n\t}\r\n\r\n\t[_drinkDrivingCalc.stoneText, _drinkDrivingCalc.poundsText].forEach(function (input) {\r\n\t\tinput.addEventListener('change', function () {\r\n\t\t\tinput.classList.remove('validation--error');\r\n\r\n\t\t\tif (_drinkDrivingCalc.stoneText.value != '' && _drinkDrivingCalc.poundsText.value != '') {\r\n\t\t\t\t_drinkDrivingCalc.removeErrorStates(document.querySelector('.field-group--indented-below'));\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\r\n\t_drinkDrivingCalc.kilosText.addEventListener('change', function () {\r\n\t\t_drinkDrivingCalc.kilosText.classList.remove('validation--error');\r\n\r\n\t\t_drinkDrivingCalc.removeErrorStates(document.querySelector('.field-group--indented-below'));\r\n\t});\r\n\r\n\tfor (let i = 0; i < _drinkDrivingCalc.numInputs.length; i++) {\r\n\t\t_drinkDrivingCalc.numInputs[i].addEventListener('keydown', function (e) {\r\n\t\t\t_drinkDrivingCalc.stopNegNums(e);\r\n\t\t});\r\n\t}\r\n\r\n\t_drinkDrivingCalc.calcForm.addEventListener('submit', function (e) {\r\n\t\t_drinkDrivingCalc.toggleForm(e, true);\r\n\t});\r\n\r\n\t_drinkDrivingCalc.calcBtn.addEventListener('click', function (e) {\r\n\t\t_drinkDrivingCalc.toggleForm(e, false);\r\n\t});\r\n\r\n\t_drinkDrivingCalc.genderRadios.addEventListener('change', function (e) {\r\n\t\t_drinkDrivingCalc.removeErrorStates(e.target.closest('.field-group'));\r\n\t});\r\n\r\n\t_drinkDrivingCalc.setUpWeightRadios(_drinkDrivingCalc.radios);\r\n});\r\n"]}