{"version":3,"sources":["core/@http.js","core/@outlineAccessibility.js","core/@preloader.js","core/@scrollToElement.js","core/@urlExternalSafe.js","helpers/@formHelper.js","helpers/@formValidation.js","site/charts.js","site/compareSites.js","site/countdown.js","site/fileUpload.js","site/filterNews.js","site/filterResearch.js","site/filterTrials.js","site/form.js","site/header.js","site/horizontalScroll.js","site/loadMoreNews.js","site/modalForm.js","site/newsletter.js","site/researchByYear.js","site/search.js","site/seeMore.js","site/showContent.js","site/slider.js","site/video.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"app.js","sourcesContent":["/*eslint-disable no-unused-vars*/\nconst http = {\n\tasync fxGet(endpoint, callback) {\n\t\ttry {\n\t\t\tconst response = await fetch(endpoint),\n\t\t\t\tdata = await response.json()\n\n\t\t\tcallback(data)\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(error)\n\t\t}\n\t},\n\n\tasync fxPost(endpoint, formData, callback) {\n\t\ttry {\n\t\t\tconst response = await fetch(endpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify(formData),\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-type': 'application/json'\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst data = await response.json()\n\t\t\tcallback(response, data)\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(error)\n\t\t}\n\t},\n\n\tasync fxUploadFile(endpoint, formData, callback) {\n\t\ttry {\n\t\t\tconst response = await fetch(endpoint, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: formData\n\t\t\t})\n\n\t\t\tconst data = await response.json()\n\t\t\tcallback(response, data)\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(error)\n\t\t}\n\t}\n}","const a11y = {\n\tel: {\n\t\thtml: document.documentElement\n\t},\n\n\tfxAddA11yClass() {\n\t\tdocument.addEventListener('keydown', e => e.key === 'Tab' && this.el.html.classList.add('a11y'))\n\t\tdocument.addEventListener('click', () => {\n\t\t\tif (this.el.html.classList.contains('a11y'))\n\t\t\t\tthis.el.html.classList.remove('a11y')\n\t\t\telse\n\t\t\t\treturn false\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.fxAddA11yClass()\n\t}\n}\n\na11y.init()","/*eslint-disable no-unused-vars*/\nconst preloader = {\n\n\tfxEnableButton(el) {\n\t\tel.classList.contains('js-preloader-file') ? el.style.pointerEvents = 'auto' : el.removeAttribute('disabled')\n\t},\n\n\tfxDisableButton(el) {\n\t\tel.classList.contains('js-preloader-file') ? el.style.pointerEvents = 'none' : el.setAttribute('disabled', true)\n\t},\n\n\tfxCreateSpinner(el) {\n\t\tconst spinner = document.createElement('div')\n\t\tspinner.classList.add('btn--loading-spinner')\n\t\tel.appendChild(spinner)\n\t},\n\n\tfxRemoveSpinner(el) {\n\t\tel.querySelector('.btn--loading-spinner') && el.querySelector('.btn--loading-spinner').remove()\n\t},\n\n\tfxPreloaderAdd(el) {\n\t\tconst button = el.classList.contains('js-preloader-file') ? el : el.querySelector('.js-preloader')\n\t\tbutton.classList.add('btn--loading')\n\t\tthis.fxDisableButton(button)\n\t\tthis.fxCreateSpinner(button)\n\t},\n\n\tfxPreloaderRemove(el) {\n\t\tconst button = el.classList.contains('js-preloader-file') ? el : el.querySelector('.js-preloader')\n\t\tbutton.classList.remove('btn--loading')\n\t\tthis.fxEnableButton(button)\n\t\tthis.fxRemoveSpinner(button)\n\t}\n}","const scrollToElement = {\n\tel: {\n\t\tbtnScroll: document.querySelectorAll('.js-scrollto'),\n\t\theader: document.querySelector('.header')\n\t},\n\n\t// polyfilled smooth scrolling for Edge & Safari\n\tfxSmoothScrollToPolyfill(to, duration) {\n\t\tconst element = document.scrollingElement || document.documentElement,\n\t\t\tstart = element.scrollTop,\n\t\t\tchange = to - start,\n\t\t\tstartDate = +new Date()\n\n\t\t// t = current time b = start value c = change in value d = duration\n\t\tconst easeInOutQuad = (t, b, c, d) => {\n\t\t\tt /= d / 2\n\t\t\tif (t < 1) return c / 2 * t * t + b\n\t\t\tt--\n\t\t\treturn -c / 2 * (t * (t - 2) - 1) + b\n\t\t}\n\n\t\tconst animateScroll = () => {\n\t\t\tconst currentDate = +new Date(),\n\t\t\t\tcurrentTime = currentDate - startDate\n\n\t\t\telement.scrollTop = parseInt(easeInOutQuad(currentTime, start, change, duration))\n\t\t\tcurrentTime < duration ? requestAnimationFrame(animateScroll) : element.scrollTop = to\n\n\t\t}\n\t\tanimateScroll()\n\t},\n\n\tfxScrollTo(e) {\n\t\te.preventDefault()\n\t\tconst buttonScrollTo = e.currentTarget,\n\t\t\ttarget = document.getElementById(buttonScrollTo.dataset.scroll),\n\t\t\tsupportsNativeSmoothScroll = 'scrollBehavior' in document.documentElement.style\n\n\t\tif (target) {\n\t\t\tif (supportsNativeSmoothScroll)\n\t\t\t\twindow.scroll({\n\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\ttop: target.offsetTop,\n\t\t\t\t\tleft: 0\n\t\t\t\t})\n\n\t\t\telse\n\t\t\t\tthis.fxSmoothScrollToPolyfill(target.offsetTop, 1000)\n\t\t}\n\t},\n\n\tevents() {\n\t\tthis.el.btnScroll.forEach(button => button.addEventListener('click', e => this.fxScrollTo(e)))\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nscrollToElement.init()","const url = {\n\tel: {\n\t\tdoc: document,\n\t\tlinkToNewTab: document.querySelectorAll('a[target=\"_blank\"]')\n\t},\n\n\tfxFixUrlExternal() {\n\t\tthis.el.linkToNewTab.forEach(el => el.setAttribute('rel', 'noopener noreferrer'))\n\t},\n\n\tinit() {\n\t\tthis.fxFixUrlExternal()\n\t}\n}\n\nurl.init()","const formHelper = {\n\tel: {\n\t\tcheckbox: document.querySelectorAll('.js-checkbox')\n\t},\n\n\tfxFormToJson(el) {\n\t\tconst indexedArray = {}\n\t\tfor (let i = 0; i < el.length; i++) {\n\t\t\tif (el[i].value) {\n\t\t\t\tif (['checkbox', 'radio'].indexOf(el[i].type) > -1 && el[i].checked || ['checkbox', 'radio', 'file', 'button'].indexOf(el[i].type) === -1)\n\t\t\t\t\tindexedArray[el[i].name] = el[i].value\n\t\t\t}\n\t\t}\n\t\treturn indexedArray\n\t},\n\n\tfxInputEvents() {\n\t\tthis.el.checkbox.forEach(el => el.addEventListener('change', e => e.currentTarget.value = e.currentTarget.checked ? 'true' : 'false'))\n\t},\n\n\tfxShowMessage(form, msg, status = 200) {\n\t\tconst buttonSubmit = form.querySelector('.js-submit'),\n\t\t\tbuttonClear = form.querySelector('.js-clear-file'),\n\t\t\tinputHiddenValue = form.querySelector('.upload-file__value'),\n\t\t\tinputFile = form.querySelector('[type=\"file\"]'),\n\t\t\tfileName = form.querySelector('.upload-file__name'),\n\t\t\tmessageContainer = form.nextElementSibling\n\n\t\tif (msg) {\n\t\t\tbuttonSubmit.style.display = 'none'\n\t\t\tmessageContainer.textContent = msg\n\t\t\tmessageContainer.style.display = 'inherit'\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tif (messageContainer) {\n\t\t\t\tmessageContainer.textContent = ''\n\t\t\t\tmessageContainer.style.display = 'none'\n\t\t\t}\n\t\t\tbuttonSubmit.removeAttribute('disabled')\n\t\t\tbuttonSubmit.style.display = 'inherit'\n\t\t\tstatus === 200 && form.reset()\n\n\t\t\tif (inputFile) {\n\t\t\t\tform.value = ''\n\t\t\t\tinputHiddenValue.value = ''\n\t\t\t\tfileName.textContent = ''\n\t\t\t\tbuttonClear && setTimeout(() => buttonClear.style.display = 'none', 0)\n\t\t\t}\n\t\t}, 5000)\n\t},\n\n\tinit() {\n\t\tthis.fxInputEvents()\n\t}\n}\n\nformHelper.init()","/* global Bouncer */\nconst formValidation = {\n\tel: {\n\t\thtml: document.documentElement,\n\t\tbody: document.body,\n\t\tinputNumber: document.querySelectorAll('[type=number]:not(.js-range-date)'),\n\t\tpastDate: document.querySelectorAll('.js-past-date'),\n\t\tfutureDate: document.querySelectorAll('.js-future-date'),\n\t\trangeDate: document.querySelectorAll('.js-range-date')\n\t},\n\n\tfxInitBouncer(form) {\n\t\tnew Bouncer(form.dataset.selector, {\n\t\t\tdisableSubmit: true,\n\t\t\tmessageAfterField: false,\n\t\t\tfieldClass: 'form__error', // Applied to fields with errors\n\t\t\terrorClass: 'form__error-message', // Applied to the error message for invalid fields\n\t\t\tfieldPrefix: 'form__field--', // If a field doesn't have a name or ID, one is generated with this prefix\n\t\t\terrorPrefix: 'form__error--', // Prefix used for error message IDs,\n\t\t\t// Override default Patterns\n\t\t\tpatterns: {\n\t\t\t\temail: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+/i\n\t\t\t},\n\t\t\tcustomValidations: {\n\t\t\t\tcompareFields: field => {\n\t\t\t\t\tconst selector = field.dataset.equalto,\n\t\t\t\t\t\totherField = field.form.querySelector(selector)\n\n\t\t\t\t\tif (!selector || !otherField) return false\n\n\t\t\t\t\treturn otherField.value !== field.value\n\t\t\t\t},\n\n\t\t\t\tnif: field => {\n\t\t\t\t\tif (field.classList.contains('js-nif')) {\n\t\t\t\t\t\tlet char = field.value\n\n\t\t\t\t\t\tif (char.length > 0)\n\t\t\t\t\t\t\tif (char += '', !['1', '2', '3', '5', '6', '8'].includes(char.substr(0, 1)) && !['45', '70', '71', '72', '77', '79', '90', '91', '98', '99'].includes(char.substr(0, 2))) return !1\n\n\t\t\t\t\t\tlet d, b = 9 * char[0] + 8 * char[1] + 7 * char[2] + 6 * char[3] + 5 * char[4] + 4 * char[5] + 3 * char[6] + 2 * char[7],\n\t\t\t\t\t\t\tc = b - 11 * parseInt(b / 11)\n\n\t\t\t\t\t\treturn !(d = 1 == c || 0 == c ? 0 : 11 - c, char[8] == d)\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tpastDate: field => field.classList.contains('js-past-date') && field.value > field.getAttribute('max'),\n\t\t\t\tfutureDate: field => field.classList.contains('js-future-date') && field.value < field.getAttribute('min')\n\t\t\t},\n\n\t\t\tmessages: {\n\t\t\t\tmissingValue: {\n\t\t\t\t\tcheckbox: form.dataset.msgRequired,\n\t\t\t\t\tradio: form.dataset.msgRequired,\n\t\t\t\t\tselect: form.dataset.msgRequired,\n\t\t\t\t\tdefault: form.dataset.msgRequired\n\t\t\t\t},\n\t\t\t\tpatternMismatch: {\n\t\t\t\t\temail: form.dataset.msgInvalidFormat,\n\t\t\t\t\turl: form.dataset.msgInvalidFormat,\n\t\t\t\t\tnumber: form.dataset.msgInvalidFormat,\n\t\t\t\t\tcolor: form.dataset.msgInvalidFormat,\n\t\t\t\t\tdate: form.dataset.msgInvalidFormat,\n\t\t\t\t\ttime: form.dataset.msgInvalidFormat,\n\t\t\t\t\tmonth: form.dataset.msgInvalidFormat,\n\t\t\t\t\tdefault: form.dataset.msgInvalidFormat\n\t\t\t\t},\n\t\t\t\toutOfRange: {\n\t\t\t\t\tover: `${form.dataset.msgMaxFormat} {max}`,\n\t\t\t\t\tunder: `${form.dataset.msgMinFormat} {min}`\n\t\t\t\t},\n\t\t\t\twrongLength: {\n\t\t\t\t\tover: `${form.dataset.msgMaxlengthFormat} {maxLength}`,\n\t\t\t\t\tunder: `${form.dataset.msgMinlengthFormat} {minLength}`\n\t\t\t\t},\n\t\t\t\tcompareFields: () => form.dataset.msgCompare,\n\t\t\t\tnif: () => form.dataset.msgInvalidFormat,\n\t\t\t\tpastDate: () => `${form.dataset.msgMaxFormat} ` + new Date().toJSON().split('T')[0],\n\t\t\t\tfutureDate: () => `${form.dataset.msgMinFormat} ` + new Date().toJSON().split('T')[0]\n\t\t\t}\n\t\t})\n\t},\n\n\tfxValidate(form) {\n\t\tthis.fxInitBouncer(form)\n\t\treturn form.checkValidity()\n\t},\n\n\tfxSetValidationAttributes() {\n\t\tthis.el.pastDate.length && this.el.pastDate.forEach(el => el.setAttribute('max', new Date().toJSON().split('T')[0]))\n\t\tthis.el.futureDate.length && this.el.futureDate.forEach(el => el.setAttribute('min', new Date().toJSON().split('T')[0]))\n\t\tthis.el.inputNumber.length && this.el.inputNumber.forEach(el => el.setAttribute('min', 0))\n\t\tif (this.el.rangeDate.length) {\n\t\t\tthis.el.rangeDate.forEach(el => {\n\t\t\t\tel.setAttribute('min', '1900')\n\t\t\t\tel.setAttribute('max', new Date().getFullYear())\n\t\t\t})\n\t\t}\n\t},\n\n\tinit() {\n\t\tthis.fxSetValidationAttributes()\n\t}\n}\n\nformValidation.init()","/*global Highcharts */\nconst charts = {\n\tel: {\n\t\tpie: document.querySelectorAll('.js-chart-pie'),\n\t\tbar: document.querySelectorAll('.js-chart-bar'),\n\t\tcolumn: document.querySelectorAll('.js-chart-column'),\n\t\tspline: document.querySelectorAll('.js-chart-spline')\n\t},\n\n\tfxRenderChartsPie() {\n\t\tfor (const pie of this.el.pie) {\n\n\t\t\tconst options = {\n\t\t\t\tcredits: false,\n\t\t\t\tchart: {\n\t\t\t\t\ttype: 'pie',\n\t\t\t\t\theight: 200\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\ttext: ''\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\talign: 'right',\n\t\t\t\t\tverticalAlign: 'middle',\n\t\t\t\t\tlayout: 'vertical',\n\t\t\t\t\titemWidth: 200,\n\t\t\t\t\titemStyle: {\n\t\t\t\t\t\ttextOverflow: 'clip'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\tpointFormat: '{series.name}: {point.y} ({point.percentage:.1f}%)'\n\t\t\t\t},\n\t\t\t\tplotOptions: {\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tcolors: JSON.parse(pie.dataset.chartColors),\n\t\t\t\t\t\tinnerSize: 130,\n\t\t\t\t\t\tsize: 175,\n\t\t\t\t\t\tdataLabels: {\n\t\t\t\t\t\t\tenabled: false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowInLegend: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tseries: JSON.parse(pie.dataset.chartData),\n\t\t\t\tresponsive: {\n\t\t\t\t\trules: [{\n\t\t\t\t\t\tcondition: {\n\t\t\t\t\t\t\tmaxWidth: 400\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchartOptions: {\n\t\t\t\t\t\t\tplotOptions: {\n\t\t\t\t\t\t\t\tpie: {\n\t\t\t\t\t\t\t\t\tinnerSize: 75,\n\t\t\t\t\t\t\t\t\tsize: 120\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tlegend: {\n\t\t\t\t\t\t\t\titemWidth: null,\n\t\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\t\tverticalAlign: 'bottom',\n\t\t\t\t\t\t\t\tlayout: 'horizontal'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tHighcharts.chart(pie, options)\n\t\t}\n\t},\n\n\tfxRenderChartsBar() {\n\t\tfor (const bar of this.el.bar) {\n\n\t\t\tconst options = {\n\t\t\t\tcredits: false,\n\t\t\t\tchart: {\n\t\t\t\t\ttype: 'bar'\n\t\t\t\t},\n\t\t\t\ttitle: {\n\t\t\t\t\ttext: ''\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\tformatter: function() {\n\t\t\t\t\t\tconst percentage = this.y / this.series.data.map(point => point.y).reduce((a, b) => a + b, 0) * 100,\n\t\t\t\t\t\t\thasPercentage = !bar.classList.contains('js-chart-bar-no-percentage') ? `(${Highcharts.numberFormat(percentage, 1)}%)` : ''\n\n\t\t\t\t\t\treturn ` ${this.x}
${this.series.name}: ${this.y} ${hasPercentage}`\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tplotOptions: {\n\t\t\t\t\tbar: {\n\t\t\t\t\t\tcolors: JSON.parse(bar.dataset.chartColors),\n\t\t\t\t\t\tcolorByPoint: true,\n\t\t\t\t\t\tpointWidth: 20,\n\t\t\t\t\t\tdataLabels: {\n\t\t\t\t\t\t\tenabled: false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowInLegend: false\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\txAxis: {\n\t\t\t\t\tcategories: JSON.parse(bar.dataset.chartCategories)\n\t\t\t\t},\n\t\t\t\tyAxis: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tallowDecimals: false,\n\t\t\t\t\tlineColor: '#ccd6eb',\n\t\t\t\t\tlineWidth: 1,\n\t\t\t\t\tendOnTick: false,\n\t\t\t\t\ttitle: ''\n\t\t\t\t},\n\t\t\t\tseries: [{\n\t\t\t\t\tname: bar.dataset.chartName,\n\t\t\t\t\tdata: JSON.parse(bar.dataset.chartData).map(el => Number(el))\n\t\t\t\t}]\n\t\t\t}\n\n\t\t\tHighcharts.chart(bar, options)\n\t\t}\n\t},\n\n\tfxRenderChartsColumn() {\n\t\tfor (const column of this.el.column) {\n\n\t\t\tconst options = {\n\t\t\t\tcredits: false,\n\t\t\t\tchart: {\n\t\t\t\t\ttype: column.classList.contains('js-chart-column-stacked-horizontal') ? 'bar' : 'column'\n\t\t\t\t},\n\t\t\t\tcolors: JSON.parse(column.dataset.chartColors),\n\t\t\t\ttitle: {\n\t\t\t\t\ttext: ''\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\talign: 'left',\n\t\t\t\t\titemStyle: {\n\t\t\t\t\t\ttextOverflow: 'clip'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\theaderFormat: column.classList.contains('js-chart-column-stacked') ? '{point.x}
' : `{series.name}: {point.y}${column.classList.contains('js-chart-column-percentage') ? '%' : '' } `,\n\t\t\t\t\tpointFormat: column.classList.contains('js-chart-column-stacked') ? '{series.name}: {point.y}
Total: {point.stackTotal}' : undefined\n\t\t\t\t},\n\t\t\t\tplotOptions: {\n\t\t\t\t\tbar: {\n\t\t\t\t\t\tstacking: column.classList.contains('js-chart-column-stacked-horizontal') ? 'normal' : undefined\n\t\t\t\t\t},\n\t\t\t\t\tcolumn: {\n\t\t\t\t\t\tstacking: column.classList.contains('js-chart-column-stacked') ? 'normal' : undefined,\n\t\t\t\t\t\tdataLabels: {\n\t\t\t\t\t\t\tenabled: false\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowInLegend: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\txAxis: {\n\t\t\t\t\tcategories: JSON.parse(column.dataset.chartCategories)\n\t\t\t\t},\n\t\t\t\tyAxis: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tallowDecimals: false,\n\t\t\t\t\tlineColor: '#ccd6eb',\n\t\t\t\t\tlineWidth: 1,\n\t\t\t\t\tendOnTick: false,\n\t\t\t\t\treversedStacks: false,\n\t\t\t\t\ttitle: ''\n\t\t\t\t},\n\t\t\t\tseries: JSON.parse(column.dataset.chartData)\n\t\t\t}\n\n\t\t\tHighcharts.chart(column, options)\n\t\t}\n\t},\n\n\tfxRenderChartsSpline() {\n\t\tfor (const spline of this.el.spline) {\n\n\t\t\tconst options = {\n\t\t\t\tcredits: false,\n\t\t\t\tchart: {\n\t\t\t\t\ttype:'areaspline'\n\t\t\t\t},\n\t\t\t\tcolors: JSON.parse(spline.dataset.chartColors),\n\t\t\t\ttitle: {\n\t\t\t\t\ttext: ''\n\t\t\t\t},\n\t\t\t\tlegend: {\n\t\t\t\t\talign: 'left',\n\t\t\t\t\titemStyle: {\n\t\t\t\t\t\ttextOverflow: 'clip'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\tshared: true\n\t\t\t\t},\n\t\t\t\tplotOptions: {\n\t\t\t\t\tareaspline: {\n\t\t\t\t\t\tfillOpacity: 0.15\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\txAxis: {\n\t\t\t\t\tcategories: JSON.parse(spline.dataset.chartCategories)\n\t\t\t\t},\n\t\t\t\tyAxis: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tallowDecimals: false,\n\t\t\t\t\tlineColor: '#ccd6eb',\n\t\t\t\t\tlineWidth: 1,\n\t\t\t\t\tendOnTick: false,\n\t\t\t\t\ttitle: ''\n\t\t\t\t},\n\t\t\t\tseries: JSON.parse(spline.dataset.chartData)\n\t\t\t}\n\n\t\t\tHighcharts.chart(spline, options)\n\t\t}\n\t},\n\n\tevents() {\n\t\twindow.addEventListener('load', () => {\n\t\t\tthis.fxRenderChartsBar()\n\t\t\tthis.fxRenderChartsPie()\n\t\t\tthis.fxRenderChartsColumn()\n\t\t\tthis.fxRenderChartsSpline()\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\ncharts.init()","const compareSites = {\n\tel: {\n\t\tbuttonCompare: document.querySelector('.js-add-compare'),\n\t\tselects: document.querySelectorAll('.js-skeleton-select')\n\t},\n\n\tfxSetActiveComparedSite(element) {\n\t\telement.closest('.hero-small__inner-column').classList.add('skeleton-active')\n\t},\n\n\tfxCreateCookie(name, value, days) {\n\t\tlet expires\n\n\t\tif (days) {\n\t\t\tconst date = new Date()\n\t\t\tdate.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n\t\t\texpires = `expires=${date.toUTCString()}`\n\t\t}\n\n\t\tdocument.cookie = `${name}=${value || ''}; ${expires}; path=/`\n\t},\n\n\tfxReadCookie(name) {\n\t\tlet cookie = {}\n\n\t\tfor (const cookies of document.cookie.split(';')) {\n\t\t\tlet [key, value] = cookies.split('=')\n\t\t\tcookie[key.trim()] = value\n\t\t}\n\n\t\treturn cookie[name]\n\t},\n\n\tfxSetCookies(element) {\n\t\tconst id = element === this.el.buttonCompare ? element.dataset.id : element.value,\n\t\t\tidByUnitLeft = element.name === 'firstUnit' ? id : this.fxReadCookie('compareLeft'),\n\t\t\tidByUnitRight = element.name === 'firstUnit' ? this.fxReadCookie('compareRight') : id\n\n\t\t// O items\n\t\tif (!this.fxReadCookie('compareLeft') && !this.fxReadCookie('compareRight'))\n\t\t\tthis.fxCreateCookie('compareLeft', id, 0)\n\n\t\t// 1 item \n\t\telse if (this.fxReadCookie('compareLeft') && !this.fxReadCookie('compareRight'))\n\t\t\tthis.fxCreateCookie('compareRight', id, 0)\n\n\t\t// 2 items\n\t\telse if (this.fxReadCookie('compareLeft') && this.fxReadCookie('compareRight')) {\n\n\t\t\tif (element === this.el.buttonCompare) {\n\t\t\t\tthis.fxCreateCookie('compareLeft', this.fxReadCookie('compareRight'), 0)\n\t\t\t\tthis.fxCreateCookie('compareRight', id, 0)\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tthis.fxCreateCookie('compareLeft', idByUnitLeft, 0)\n\t\t\t\tthis.fxCreateCookie('compareRight', idByUnitRight, 0)\n\t\t\t}\n\t\t}\n\n\t\telement === this.el.buttonCompare ? location.href = element.dataset.url : location.reload()\n\t},\n\n\tevents() {\n\n\t\tfor (const select of this.el.selects) {\n\t\t\tselect.addEventListener('change', e => {\n\t\t\t\tthis.fxSetActiveComparedSite(e.currentTarget)\n\t\t\t\tthis.fxSetCookies(e.currentTarget)\n\t\t\t})\n\t\t}\n\n\t\tthis.el.buttonCompare && this.el.buttonCompare.addEventListener('click', e => this.fxSetCookies(e.currentTarget))\n\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n\n}\n\ncompareSites.init()","const countDown = {\n\tel: {\n\t\ttimerDays: document.querySelector('.js-countdown-days'),\n\t\ttimerHours: document.querySelector('.js-countdown-hours'),\n\t\ttimerMinutes: document.querySelector('.js-countdown-minutes'),\n\t\ttimerSeconds: document.querySelector('.js-countdown-seconds'),\n\t\tdateToStart: document.querySelector('[data-start]')\n\t},\n\n\tconstants: {\n\t\tdays: 86400, //24 * 60 * 60\n\t\thours: 3600, //60 * 60\n\t\tminutes: 60, //60 * 1\n\t\tseconds: 1, // 1\n\t\tmiliseconds: 1000 //1 * 1000\n\t},\n\n\ttime: {},\n\n\tfxCalculateTime() {\n\t\tconst dateStart = new Date(this.el.dateToStart.dataset.start),\n\t\t\tdateToday = new Date()\n\n\t\tlet delta = Math.abs(dateStart - dateToday) / this.constants.miliseconds\n\n\t\tObject.keys(this.constants).forEach(key => {\n\t\t\tthis.time[key] = Math.floor(delta / this.constants[key])\n\t\t\tdelta -= this.time[key] * this.constants[key]\n\t\t})\n\n\t\tconst { days, hours, minutes, seconds } = this.time\n\n\t\tthis.el.timerDays.innerText = String(days).padStart(2, 0)\n\t\tthis.el.timerHours.innerText = String(hours).padStart(2, 0)\n\t\tthis.el.timerMinutes.innerText = String(minutes).padStart(2, 0)\n\t\tthis.el.timerSeconds.innerText = String(seconds).padStart(2, 0)\n\n\t},\n\n\tinit() {\n\t\tif (this.el.dateToStart) {\n\t\t\tthis.fxCalculateTime()\n\t\t\tsetInterval(() => this.fxCalculateTime(), this.constants.miliseconds)\n\t\t}\n\t}\n}\n\ncountDown.init()","/* global http preloader */\nconst fileuploader = {\n\tel: {\n\t\tinputFile: document.querySelectorAll('input[type=file]')\n\t},\n\n\tvars: {\n\t\tinvalidMessage: document.querySelectorAll('.js-form')[0] && document.querySelectorAll('.js-form')[0].dataset.msgInvalidFormat,\n\t\tlimitMessage: document.querySelectorAll('.js-form')[0] && document.querySelectorAll('.js-form')[0].dataset.msgLimit\n\t},\n\n\tfxFileUploader(e) {\n\t\tdocument.querySelectorAll('.js-clear-file').forEach(el => el.style.display = 'none')\n\t\te.stopPropagation()\n\n\t\tconst el = e.currentTarget,\n\t\t\tformData = new FormData(),\n\t\t\tlimitUploadSize = el.dataset.limit, //bytes\n\t\t\tfileValue = el.previousElementSibling.previousElementSibling,\n\t\t\tfileName = el.nextElementSibling,\n\t\t\tfilePlaceholder = el.previousElementSibling.querySelector('.upload-file__placeholder'),\n\t\t\tfileClearBtn = el.nextElementSibling.nextElementSibling\n\n\t\tformData.append('file', el.files[0])\n\n\t\tif (el.files[0].size > 0 && el.files[0].size < limitUploadSize) {\n\t\t\tconst extension = `.${el.value.toLowerCase().split('.').pop()}`\n\t\t\tlet validExtension = false\n\n\t\t\tel.getAttribute('accept').split(',').forEach(ext => ext === extension ? validExtension = true : '')\n\n\t\t\tif (validExtension) {\n\t\t\t\tpreloader.fxPreloaderAdd(el.previousElementSibling)\n\n\t\t\t\tconst callback = (response, data) => {\n\t\t\t\t\tpreloader.fxPreloaderRemove(el.previousElementSibling)\n\n\t\t\t\t\tif (response.status === 200) {\n\t\t\t\t\t\tel.nextElementSibling.classList.contains('field-error') && el.nextElementSibling.remove()\n\t\t\t\t\t\tfileClearBtn.style.display = 'inherit'\n\t\t\t\t\t\tfileValue.value = data\n\t\t\t\t\t\tfileName.textContent = ''\n\t\t\t\t\t\tfileName.textContent = el.files[0].name\n\t\t\t\t\t\tfileName.classList.remove('field-error')\n\n\t\t\t\t\t\tfileClearBtn.addEventListener('click', () => {\n\t\t\t\t\t\t\tel.value = ''\n\t\t\t\t\t\t\tfileValue.value = ''\n\t\t\t\t\t\t\tfileName.textContent = ''\n\t\t\t\t\t\t\tfilePlaceholder.style.display = 'inherit'\n\t\t\t\t\t\t\tsetTimeout(() => el.style.display = 'none', 0)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thttp.fxUploadFile(el.dataset.endpoint, formData, callback)\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tfileClearBtn.style.display = 'none'\n\t\t\t\tfileName.textContent = `${this.vars.invalidMessage}`\n\t\t\t\tfileName.classList.add('field-error')\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfileClearBtn.style.display = 'none'\n\t\t\tconst bytesToMegaBytes = bytes => bytes / (1024 * 1024)\n\t\t\tfileName.textContent = `${this.vars.limitMessage} ${Math.round(bytesToMegaBytes(limitUploadSize))} MB`\n\t\t\tfileName.classList.add('field-error')\n\t\t}\n\t},\n\n\tevents() {\n\t\tthis.el.inputFile.forEach(el => el.addEventListener('change', e => this.fxFileUploader(e)))\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nfileuploader.init()","/* global http preloader scrollToElement */\nconst filterNews = {\n\tel: {\n\t\tbody: document.body,\n\t\tcontainer: document.querySelector('.js-filter-list-cards'),\n\t\tdropdowns: document.querySelector('.js-filter-sites'),\n\t\tgrid: document.querySelector('.list-cards__list'),\n\t\tpaginationContainer: document.querySelector('.js-filter-pagination')\n\t},\n\n\tvars: {\n\t\tcurrentPage: 1\n\t},\n\n\tfxRenderItems(data, element) {\n\n\t\tconst items = data.items,\n\t\t\tgrid = this.el.grid,\n\t\t\tpagination = this.el.paginationContainer\n\n\t\tgrid.innerHTML = ''\n\n\t\tfor (const item of items) {\n\t\t\tgrid.innerHTML +=\n\t\t\t\t`\n\t\t\t\t\t