{"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
  • \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t${item.date}\n\t\t\t\t\t\t\t

    ${item.headline}

    \n\t\t\t\t\t\t\t
    ${item.copy}
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
  • \n\t\t\t\t`\n\t\t}\n\n\t\tpagination.innerHTML = ''\n\n\t\tfor (let i = 0; i < data.pages.length; i++) {\n\t\t\tconst active = !element && i === 0 || element && Number(element.textContent) === i + 1 ? 'active' : ''\n\t\t\tpagination.innerHTML += ``\n\t\t}\n\n\t\tfor (const page of document.querySelectorAll('.js-pagination-item'))\n\t\t\tpage.addEventListener('click', e => {\n\t\t\t\tif (!isNaN(e.currentTarget.textContent)) {\n\t\t\t\t\tthis.fxFilterItems(e.currentTarget)\n\t\t\t\t\tscrollToElement.fxScrollTo(e)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tfxFilterItems(element) {\n\t\tconst container = this.el.container,\n\t\t\tisPageItemClicked = element && element.classList.contains('js-pagination-item'),\n\t\t\tcurrentPage = isPageItemClicked ? Number(element.textContent) : this.vars.currentPage\n\n\t\tconst formData = {\n\t\t\tpageId: Number(container.dataset.id),\n\t\t\tcurrentPage: currentPage,\n\t\t\tsiteId: Number(this.el.dropdowns.value),\n\t\t\tlanguage: this.el.body.dataset.language\n\t\t}\n\n\t\tconst callback = (response, data) => {\n\t\t\tpreloader.fxPreloaderRemove(container)\n\n\t\t\t//TODO error 500\n\t\t\tconst error = () => {}\n\n\t\t\tswitch (response.status) {\n\t\t\t\tcase 200:\n\t\t\t\t\tthis.fxRenderItems(data, element)\n\t\t\t\t\tbreak\n\t\t\t\tcase 500:\n\t\t\t\t\terror()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tpreloader.fxPreloaderAdd(container)\n\t\thttp.fxPost(container.dataset.endpoint, formData, callback)\n\t},\n\n\tevents() {\n\t\tthis.el.dropdowns.addEventListener('change', () => this.fxFilterItems())\n\t},\n\n\tinit() {\n\t\tif (this.el.container) {\n\t\t\tthis.events()\n\t\t\tthis.fxFilterItems()\n\t\t}\n\t}\n}\n\nfilterNews.init()","/* global http preloader scrollToElement */\n\nconst filterResearch = {\n\tel: {\n\t\tbody: document.body,\n\t\tcontainer: document.querySelector('.js-filter-research'),\n\t\tgrid: document.querySelector('.filter__grid'),\n\t\tsearchForm: document.querySelector('.js-form-research'),\n\t\tsearchInput: document.querySelector('.hero-search__input'),\n\t\tcheckboxes: document.querySelectorAll('.js-filter-checkbox'),\n\t\tcheckboxesLocation: document.querySelectorAll('.js-filter-checkbox-location'),\n\t\tcheckboxesArea: document.querySelectorAll('.js-filter-checkbox-area'),\n\t\tcheckboxesSort: document.querySelectorAll('.js-filter-checkbox-sort'),\n\t\ttotalResultsText: document.querySelector('.js-total-results'),\n\t\tfirstIndexText: document.querySelector('.js-first-index'),\n\t\tlastIndexText: document.querySelector('.js-last-index'),\n\t\tpaginationContainer: document.querySelector('.js-filter-pagination')\n\t},\n\n\tvars: {\n\t\tcurrentPage: 1\n\t},\n\n\tfxGetCheckedValues(elements) {\n\t\treturn [...elements].filter(checkbox => checkbox.checked).map(checked => checked.value)\n\t},\n\n\tfxRenderItems(element) {\n\t\tconst container = this.el.container,\n\t\t\tinput = this.el.searchInput,\n\t\t\tisPageItemClicked = element && element.classList.contains('js-pagination-item'),\n\t\t\tcurrentPage = isPageItemClicked ? Number(element.textContent) : this.vars.currentPage\n\n\t\tconst formData = {\n\t\t\tpageId: Number(container.dataset.id),\n\t\t\tcurrentPage: currentPage,\n\t\t\tlocation: this.fxGetCheckedValues(this.el.checkboxesLocation),\n\t\t\tarea: this.fxGetCheckedValues(this.el.checkboxesArea),\n\t\t\tsort: this.fxGetCheckedValues(this.el.checkboxesSort),\n\t\t\tterm: input.value,\n\t\t\tlanguage: this.el.body.dataset.language\n\t\t}\n\n\t\tconst callback = (response, data) => {\n\t\t\tpreloader.fxPreloaderRemove(container)\n\n\t\t\tconst success = () => {\n\t\t\t\tconst items = data.items,\n\t\t\t\t\tgrid = this.el.grid,\n\t\t\t\t\tpagination = this.el.paginationContainer,\n\t\t\t\t\ttotalResults = this.el.totalResultsText,\n\t\t\t\t\tfirstIndex = this.el.firstIndexText,\n\t\t\t\t\tlastIndex = this.el.lastIndexText\n\n\t\t\t\tgrid.innerHTML = ''\n\t\t\t\tfor (const item of items) {\n\n\t\t\t\t\tgrid.innerHTML +=\n\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t${item.place}\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    ${item.location}
    \n\t\t\t\t\t\t\t\t\t

    ${item.place}

    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t`\n\t\t\t\t}\n\n\t\t\t\tconst itemsPerPage = 10\n\t\t\t\ttotalResults.textContent = data.totalRecords\n\t\t\t\tfirstIndex.textContent = items.length ? currentPage * itemsPerPage - (itemsPerPage - 1) : 0\n\t\t\t\tlastIndex.textContent = items.length === itemsPerPage ? currentPage * itemsPerPage : (currentPage - 1) * itemsPerPage + items.length\n\n\t\t\t\tpagination.innerHTML = ''\n\n\t\t\t\tfor (let i = 0; i < data.pages.length; i++) {\n\t\t\t\t\tconst active = !element && i === 0 || element && Number(element.textContent) === i + 1 ? 'active' : ''\n\t\t\t\t\tpagination.innerHTML += ``\n\t\t\t\t}\n\n\t\t\t\tfor (const page of document.querySelectorAll('.js-pagination-item')) {\n\t\t\t\t\tpage.addEventListener('click', e => {\n\t\t\t\t\t\tconst target = e.currentTarget\n\t\t\t\t\t\tif (!isNaN(target.textContent)) {\n\t\t\t\t\t\t\tthis.fxRenderItems(target, Number(target.textContent))\n\t\t\t\t\t\t\tscrollToElement.fxScrollTo(e)\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\t//TODO error 500\n\t\t\tconst error = () => {}\n\n\t\t\tswitch (response.status) {\n\t\t\t\tcase 200:\n\t\t\t\t\tsuccess()\n\t\t\t\t\tbreak\n\t\t\t\tcase 500:\n\t\t\t\t\terror()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tpreloader.fxPreloaderAdd(container)\n\t\thttp.fxPost(container.dataset.endpoint, formData, callback)\n\t},\n\n\tfxToggleCheckboxes(checkbox) {\n\t\tif (checkbox.value === 'all') {\n\t\t\t[...this.el.checkboxes].filter(checkbox => checkbox.checked).map(checkbox => checkbox.checked = false)\n\t\t\tthis.el.checkboxes[0].checked = true\n\t\t}\n\t\telse\n\t\t\tthis.el.checkboxes[0].checked = false\n\t},\n\n\tevents() {\n\t\tfor (const checkbox of this.el.checkboxes)\n\t\t\tcheckbox.addEventListener('change', () => {\n\t\t\t\tthis.fxToggleCheckboxes(checkbox)\n\t\t\t\tthis.fxRenderItems()\n\t\t\t})\n\n\t\tthis.el.searchForm.addEventListener('submit', e => {\n\t\t\te.preventDefault()\n\t\t\tthis.fxRenderItems()\n\t\t})\n\t},\n\n\tinit() {\n\t\tif (this.el.container) {\n\t\t\tthis.events()\n\t\t\tthis.fxRenderItems()\n\t\t}\n\t}\n}\n\nfilterResearch.init()\n","/* global http preloader scrollToElement */\n\nconst filterTrials = {\n\tel: {\n\t\tbody: document.body,\n\t\tcontainer: document.querySelector('.js-filter-trials'),\n\t\tgrid: document.querySelector('.filter__grid'),\n\t\tsearchForm: document.querySelector('.js-form-trials'),\n\t\tsearchInput: document.querySelector('.hero-search__input'),\n\t\tcheckboxes: document.querySelectorAll('.js-filter-checkbox'),\n\t\tcheckboxesStatus: document.querySelectorAll('.js-filter-checkbox-status'),\n\t\tcheckboxesGender: document.querySelectorAll('.js-filter-checkbox-gender'),\n\t\tcheckboxesType: document.querySelectorAll('.js-filter-checkbox-type'),\n\t\tcheckboxesPhase: document.querySelectorAll('.js-filter-checkbox-phase'),\n\t\tcheckboxesAge: document.querySelectorAll('.js-filter-checkbox-age'),\n\t\tcheckboxesCondition: document.querySelectorAll('.js-filter-checkbox-condition'),\n\t\ttotalResultsText: document.querySelector('.js-total-results'),\n\t\tfirstIndexText: document.querySelector('.js-first-index'),\n\t\tlastIndexText: document.querySelector('.js-last-index'),\n\t\tpaginationContainer: document.querySelector('.js-filter-pagination'),\n\t\tsearchPressed: false\n\t},\n\n\tvars: {\n\t\tcurrentPage: 1\n\t},\n\n\tfxGetCheckedValues(elements) {\n\t\treturn [...elements].filter(checkbox => checkbox.checked).map(checked => checked.value)\n\t},\n\n\tfxRenderItems(element, page) {\n\t\tconst container = this.el.container,\n\t\t\tinput = this.el.searchInput,\n\t\t\tcurrentPage = page ? Number(page) : this.vars.currentPage\n\n\t\tconst formData = {\n\t\t\tpageId: Number(container.dataset.id),\n\t\t\tcurrentPage: currentPage,\n\t\t\tage: this.fxGetCheckedValues(this.el.checkboxesAge),\n\t\t\tgender: this.fxGetCheckedValues(this.el.checkboxesGender),\n\t\t\tstatus: this.fxGetCheckedValues(this.el.checkboxesStatus),\n\t\t\tphase: this.fxGetCheckedValues(this.el.checkboxesPhase),\n\t\t\ttype: this.fxGetCheckedValues(this.el.checkboxesType),\n\t\t\tcondition: this.fxGetCheckedValues(this.el.checkboxesCondition),\n\t\t\tterm: input.value,\n\t\t\tlanguage: this.el.body.dataset.language\n\t\t}\n\n\t\tconst callback = (response, data) => {\n\t\t\tpreloader.fxPreloaderRemove(container)\n\n\t\t\tconst success = () => {\n\t\t\t\tconst items = data.items,\n\t\t\t\t\tgrid = this.el.grid,\n\t\t\t\t\tpagination = this.el.paginationContainer,\n\t\t\t\t\ttotalResults = this.el.totalResultsText,\n\t\t\t\t\tfirstIndex = this.el.firstIndexText,\n\t\t\t\t\tlastIndex = this.el.lastIndexText\n\n\t\t\t\tgrid.innerHTML = ''\n\t\t\t\tfor (const item of items) {\n\n\t\t\t\t\tlet status = ''\n\n\t\t\t\t\tfor (const subitem of item.status) {\n\t\t\t\t\t\tstatus += `
    ${subitem.type}
    `\n\t\t\t\t\t}\n\n\t\t\t\t\tgrid.innerHTML +=\n\t\t\t\t\t\t`\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    ${status}
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t

    ${item.title}

    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    ${grid.dataset.copySex}
    \n\t\t\t\t\t\t\t\t\t\t
    ${item.sex}
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    ${grid.dataset.copyAge}
    \n\t\t\t\t\t\t\t\t\t\t
    ${item.age}
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    ${grid.dataset.copyLocation}
    \n\t\t\t\t\t\t\t\t\t\t
    ${item.location}
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t\tconst itemsPerPage = 10\n\t\t\t\ttotalResults.textContent = data.totalRecords\n\t\t\t\tfirstIndex.textContent = items.length ? currentPage * itemsPerPage - (itemsPerPage - 1) : 0\n\t\t\t\tlastIndex.textContent = items.length === itemsPerPage ? currentPage * itemsPerPage : (currentPage - 1) * itemsPerPage + items.length\n\n\t\t\t\tpagination.innerHTML = ''\n\n\t\t\t\tfor (let i = 0; i < data.pages.length; i++) {\n\t\t\t\t\tconst active = !element && i === 0 || element && Number(element.textContent) === i + 1 ? 'active' : ''\n\t\t\t\t\tpagination.innerHTML += ``\n\t\t\t\t}\n\n\t\t\t\tfor (const page of document.querySelectorAll('.js-pagination-item')) {\n\t\t\t\t\tpage.addEventListener('click', e => {\n\t\t\t\t\t\tconst target = e.currentTarget\n\t\t\t\t\t\tif (!isNaN(target.textContent)) {\n\t\t\t\t\t\t\tthis.fxRenderItems(target, Number(target.textContent))\n\t\t\t\t\t\t\tscrollToElement.fxScrollTo(e)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t//Scroll to results on search submit\n\t\t\t\tif (this.el.searchPressed === false) return\n\t\t\t\tcontainer.scrollIntoView({ behavior: 'smooth' })\n\t\t\t}\n\n\t\t\t//TODO error 500\n\t\t\tconst error = () => {}\n\n\t\t\tswitch (response.status) {\n\t\t\t\tcase 200:\n\t\t\t\t\tsuccess()\n\t\t\t\t\tbreak\n\t\t\t\tcase 500:\n\t\t\t\t\terror()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tpreloader.fxPreloaderAdd(container)\n\t\thttp.fxPost(container.dataset.endpoint, formData, callback)\n\t},\n\n\tfxToggleCheckboxes(checkbox) {\n\t\tif (checkbox.value === 'all') {\n\t\t\t[...this.el.checkboxes].filter(checkbox => checkbox.checked).map(checkbox => checkbox.checked = false)\n\t\t\tthis.el.checkboxes[0].checked = true\n\t\t}\n\t\telse\n\t\t\tthis.el.checkboxes[0].checked = false\n\t},\n\n\tevents() {\n\t\tfor (const checkbox of this.el.checkboxes)\n\t\t\tcheckbox.addEventListener('change', () => {\n\t\t\t\tthis.fxToggleCheckboxes(checkbox)\n\t\t\t\tthis.fxRenderItems()\n\t\t\t})\n\n\t\tthis.el.searchForm.addEventListener('submit', e => {\n\t\t\te.preventDefault()\n\t\t\tthis.el.searchPressed = true\n\t\t\tthis.fxRenderItems()\n\t\t})\n\t},\n\n\tinit() {\n\t\tif (this.el.container) {\n\t\t\tconst interventionalCheckbox = this.el.container.querySelector('.js-filter-checkbox[value=\"Interventional\"]')\n\t\t\tthis.events()\n\n\t\t\tif (this.el.searchPressed === false && interventionalCheckbox) {\n\t\t\t\tfor (const checkbox of this.el.checkboxes) {\n\t\t\t\t\tif(checkbox.value === 'Interventional') {\n\t\t\t\t\t\tcheckbox.checked = true\n\n\t\t\t\t\t\tif (!interventionalCheckbox.closest('.filter__field').hasAttribute('open')) interventionalCheckbox.closest('.filter__field').setAttribute('open', null)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcheckbox.checked = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.fxRenderItems()\n\t\t}\n\t}\n}\n\nfilterTrials.init()\n","/* global http formValidation formHelper preloader*/\nconst form = {\n\tel: {\n\t\thtml: document.documentElement,\n\t\tbody: document.body,\n\t\tformElement: document.querySelector('.js-form'),\n\t\tinputElements: document.querySelectorAll('.form__input, .form__textarea')\n\t},\n\n\tfxFormEvents(selector) {\n\n\t\tconst form = document.querySelector(selector)\n\n\t\tform.addEventListener('submit', e => {\n\t\t\tconst el = e.currentTarget\n\t\t\te.preventDefault()\n\n\t\t\tconst callback = response => {\n\t\t\t\tpreloader.fxPreloaderRemove(form)\n\n\t\t\t\tswitch (response.status) {\n\t\t\t\t\tcase 409:\n\t\t\t\t\t\tformHelper.fxShowMessage(form, form.dataset.msgConflict, 409)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 500:\n\t\t\t\t\t\tformHelper.fxShowMessage(form, form.dataset.msgServer, 500)\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tformHelper.fxShowMessage(form, form.dataset.msgSuccess)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (formValidation.fxValidate(el)) {\n\t\t\t\tpreloader.fxPreloaderAdd(form)\n\t\t\t\thttp.fxPost(el.getAttribute('action'), formHelper.fxFormToJson(el), callback)\n\t\t\t}\n\n\t\t})\n\n\t\tthis.el.inputElements.forEach(el => el.addEventListener('focusout', () => this.fxInputsHasValue(el)))\n\t},\n\n\tfxInputsHasValue(el) {\n\t\tel.value.length ? el.classList.add('has-value') : el.classList.remove('has-value')\n\t},\n\n\tinit() {\n\t\tif (!this.el.formElement) return\n\t\tthis.fxFormEvents('.js-form')\n\t\tthis.el.inputElements.forEach(el => this.fxInputsHasValue(el))\n\t}\n}\n\nform.init()\n","const headerAnimated = {\n\tel: {\n\t\theader: document.querySelector('.header'),\n\t\tmainContent: document.querySelector('.wrapper'),\n\t\tbtnToggleMenu: document.querySelector('.js-toggle-menu')\n\t},\n\n\tvars: {\n\t\tpreviousKnownScrollPosition: '',\n\t\tlastKnownScrollPosition: 0,\n\t\tticking: false\n\t},\n\n\tfxAnimateOnScroll(lastScrollPosition, previousScrollPosition) {\n\t\tif (previousScrollPosition > lastScrollPosition && previousScrollPosition > 10)\n\t\t\tthis.el.header.classList.add('header--fixed')\n\n\t\telse {\n\t\t\tthis.el.header.classList.remove('header--fixed')\n\t\t\tthis.el.header.classList.remove('open')\n\t\t}\n\t},\n\n\tfxToggleMenu() {\n\t\tthis.el.btnToggleMenu.addEventListener('click', () => {\n\t\t\tthis.el.header.classList.contains('open') ? this.el.header.classList.remove('open') : this.el.header.classList.add('open')\n\t\t})\n\t},\n\n\tfxThrottleScroll() {\n\t\tthis.vars.previousKnownScrollPosition = this.vars.lastKnownScrollPosition\n\t\tthis.vars.lastKnownScrollPosition = window.scrollY\n\n\t\tif (!this.vars.ticking) {\n\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\tthis.fxAnimateOnScroll(this.vars.lastKnownScrollPosition, this.vars.previousKnownScrollPosition)\n\t\t\t\tthis.vars.ticking = false\n\t\t\t})\n\n\t\t\tthis.vars.ticking = true\n\t\t}\n\t},\n\n\tevents() {\n\t\twindow.addEventListener('scroll', () => this.fxThrottleScroll())\n\t},\n\n\tinit() {\n\t\tif (this.el.header) {\n\t\t\tthis.events()\n\t\t\tthis.fxToggleMenu()\n\t\t}\n\t}\n}\n\nheaderAnimated.init()","const horizontalScroll = {\n\tel: {\n\t\tspaceHolder: document.querySelector('.horizontal-scroll-animated__holder'),\n\t\thorizontal: document.querySelector('.horizontal-scroll-animated__horizontal'),\n\t\tscrollContainer: document.querySelector('.js-horizontal-scroll'),\n\t\tcontentContainer: document.querySelector('.horizontal-scroll-animated__content'),\n\t\tcardsContainer: document.querySelector('.horizontal-scroll-animated__cards'),\n\t\tprogressBarContainer: document.querySelectorAll('.js-progress')\n\t},\n\n\tfxCalcDynamicHeight(element) {\n\t\tconst cardsContainerSpacing = parseInt(window.getComputedStyle(this.el.cardsContainer).marginLeft)\n\n\t\treturn element.scrollWidth - window.innerWidth + window.innerHeight + cardsContainerSpacing\n\t},\n\n\tfxCalcPercentage(element) {\n\t\tconst sticky = document.querySelector('.horizontal-scroll-animated__sticky'),\n\t\t\tinitialProgress = element.scrollWidth - (sticky.scrollWidth - sticky.offsetWidth) - sticky.offsetWidth,\n\t\t\tmaxProgressValue = element.scrollWidth - sticky.offsetWidth\n\n\t\treturn Math.floor(initialProgress / maxProgressValue * 100)\n\t},\n\n\tfxUpdateProgressBar(element) {\n\t\tconst progressBar = element.querySelector('.horizontal-scroll-animated__progress-bar'),\n\t\t\tprogressNumbers = element.querySelectorAll('.horizontal-scroll-animated__progress-number')\n\n\t\tprogressBar.value = this.fxCalcPercentage(this.el.horizontal)\n\n\t\tfor (let i = 0; i < progressNumbers.length; i++)\n\t\t\tthis.fxCalcPercentage(this.el.horizontal) >= (i === 0 ? 1 : i * (100 / 3)) ? progressNumbers[i].classList.add('active') : progressNumbers[i].classList.remove('active')\n\t},\n\n\tfxSetSpacingHolder() {\n\t\tthis.el.spaceHolder.style.height = `${this.fxCalcDynamicHeight(this.el.horizontal) / 10}rem`\n\t},\n\n\tfxAnimateOnScroll() {\n\t\tconst sticky = document.querySelector('.horizontal-scroll-animated__sticky')\n\t\tthis.el.horizontal.style.transform = `translateX(-${sticky.offsetTop / 10}rem)`\n\n\t\tfor (const bar of this.el.progressBarContainer)\n\t\t\tthis.fxUpdateProgressBar(bar)\n\t},\n\n\tevents() {\n\t\twindow.addEventListener('scroll', () => this.fxAnimateOnScroll())\n\t\twindow.addEventListener('resize', () => this.fxSetSpacingHolder())\n\t},\n\n\tinit() {\n\t\tif (this.el.scrollContainer) {\n\t\t\tthis.events()\n\t\t\tthis.fxSetSpacingHolder()\n\t\t}\n\t}\n}\n\nhorizontalScroll.init()","const loadMoreNews = {\n\tel: {\n\t\tcontainer: document.querySelector('.js-news'),\n\t\tloadmoreButton: document.querySelector('.js-loadmore-button')\n\t},\n\n\tvars: {\n\t\tnumberOfItemsLoaded: 3,\n\t\tnumberOfItemsToShow: 3\n\t},\n\n\tfxLoadCards(numberItemsShowing = 3) {\n\t\tconst cardItems = [...this.el.container.children]\n\n\t\tfor (const card of cardItems)\n\t\t\tcard.classList.add('d-none')\n\n\t\tfor (const card of cardItems.slice(0, numberItemsShowing))\n\t\t\tcard.classList.remove('d-none')\n\n\t\tif (numberItemsShowing >= cardItems.length || cardItems.length <= this.vars.numberOfItemsLoaded)\n\t\t\tthis.el.loadmoreButton.style.display = 'none'\n\n\t},\n\n\tevents() {\n\t\tthis.el.loadmoreButton.addEventListener('click', () => {\n\t\t\tthis.vars.numberOfItemsToShow = this.vars.numberOfItemsToShow + this.vars.numberOfItemsLoaded\n\t\t\tthis.fxLoadCards(this.vars.numberOfItemsToShow)\n\t\t})\n\t},\n\n\tinit() {\n\t\tif (this.el.container) {\n\t\t\tthis.events()\n\t\t\tthis.fxLoadCards()\n\t\t}\n\t}\n}\nloadMoreNews.init()","const modalForm = {\n\tel: {\n\t\tbody: document.body,\n\t\tbuttonOpenModal: document.querySelectorAll('.js-open-modal'),\n\t\tbuttonCloseModal: document.querySelector('.js-close-modal'),\n\t\tmodal: document.querySelector('.js-modal')\n\t},\n\n\tfxOpenModal() {\n\t\tthis.el.body.classList.add('no-scroll-hidden')\n\t\tthis.el.modal.style.display = 'flex'\n\t},\n\n\tfxCloseModal() {\n\t\tthis.el.body.classList.remove('no-scroll-hidden')\n\t\tthis.el.modal.removeAttribute('style')\n\t},\n\n\tevents() {\n\t\tfor (const button of this.el.buttonOpenModal)\n\t\t\tbutton.addEventListener('click', () => this.fxOpenModal())\n\n\t\tthis.el.buttonCloseModal.addEventListener('click', () => this.fxCloseModal())\n\n\t},\n\n\tinit() {\n\t\tthis.el.modal && this.events()\n\t}\n}\nmodalForm.init()","/* global http formValidation formHelper preloader*/\nconst newsletter = {\n\tel: {\n\t\thtml: document.documentElement,\n\t\tbody: document.body,\n\t\tformElement: document.querySelector('.js-newsletter'),\n\t\tinputElements: document.querySelectorAll('.form__input'),\n\t\tformInner: document.querySelector('.form__inner')\n\t},\n\n\tfxFormEvents(selector) {\n\n\t\tconst form = document.querySelector(selector)\n\n\t\tform.addEventListener('submit', e => {\n\t\t\tconst el = e.currentTarget\n\n\t\t\te.preventDefault()\n\n\t\t\tconst callback = response => {\n\t\t\t\tpreloader.fxPreloaderRemove(form)\n\n\t\t\t\tthis.el.formInner.classList.add('form__inner--hidden')\n\n\t\t\t\tswitch (response.status) {\n\t\t\t\t\tcase 409:\n\t\t\t\t\t\tdocument.querySelector('.form__response--error').classList.remove('form__response--hidden')\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 500:\n\t\t\t\t\t\tdocument.querySelector('.form__response--error').classList.remove('form__response--hidden')\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tdocument.querySelector('.form__response--success').classList.remove('form__response--hidden')\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (formValidation.fxValidate(el)) {\n\t\t\t\tpreloader.fxPreloaderAdd(form)\n\t\t\t\thttp.fxPost(el.getAttribute('action'), formHelper.fxFormToJson(el), callback)\n\t\t\t}\n\n\t\t})\n\n\t\tthis.el.inputElements.forEach(el => el.addEventListener('focusout', () => this.fxInputsHasValue(el)))\n\t},\n\n\tfxInputsHasValue(el) {\n\t\tel.value.length ? el.classList.add('has-value') : el.classList.remove('has-value')\n\t},\n\n\tinit() {\n\t\tif (!this.el.formElement) return\n\t\tthis.fxFormEvents('.js-newsletter')\n\t\tthis.el.inputElements.forEach(el => this.fxInputsHasValue(el))\n\t}\n}\n\nnewsletter.init()\n","const researchByYear = {\n\tel: {\n\t\tfilterSelect: document.querySelector('.js-filter-year'),\n\t\tarticles: document.querySelectorAll('.js-filtered-year')\n\t},\n\n\tfxFilter(element) {\n\t\tfor (const article of this.el.articles) \n\t\t\tarticle.style.display = element.value === article.dataset.id ? 'block' : 'none'\n\t},\n\n\tevents() {\n\t\tthis.el.filterSelect.addEventListener('change', e => this.fxFilter(e.currentTarget))\n\t},\n\n\tinit() {\n\t\tthis.el.filterSelect && this.events()\n\t}\n}\nresearchByYear.init()","/* global http preloader */\nconst search = {\n\tel: {\n\t\tbody: document.body,\n\t\tsearchContainer: document.querySelector('.search'),\n\t\tsearchContent: document.querySelector('.search__content'),\n\t\tsearchOpenButton: document.querySelectorAll('.js-open-search'),\n\t\tsearchCloseButton: document.querySelector('.js-close-search'),\n\t\tsearchInput: document.querySelector('.js-autocomplete'),\n\t\tsearchClear: document.querySelector('.js-clear-search'),\n\t\tsearchForm: document.querySelector('.search__form'),\n\t\tsearchTotalResultsContainer: document.querySelector('.search__total-results'),\n\t\tsearchTotalResults: document.querySelector('.js-search-total-results'),\n\t\tsearchFirstIndexResults: document.querySelector('.js-search-first-index'),\n\t\tsearchLastIndexResults: document.querySelector('.js-search-last-index'),\n\t\tsearchResults: document.querySelector('.search__results'),\n\t\tsearchPagination: document.querySelector('.js-pagination'),\n\t\tsearchFilter: document.querySelector('.js-search-filter')\n\t},\n\n\tvars: {\n\t\tcurrentPage: 1,\n\t\tticking: false\n\t},\n\n\tfxOpenModal() {\n\t\tthis.el.searchContainer.classList.add('search--open')\n\t\tthis.el.body.classList.add('no-scroll-hidden')\n\t},\n\n\tfxCloseModal() {\n\t\tthis.el.body.classList.remove('no-scroll-hidden')\n\t\tthis.el.searchContainer.classList.remove('search--open')\n\t\tthis.el.searchClear.style.display = 'none'\n\t\tthis.el.searchTotalResultsContainer.style.display = 'none'\n\t\tthis.el.searchInput.value = ''\n\t\tthis.el.searchResults.innerHTML = ''\n\t\tthis.el.searchPagination.innerHTML = ''\n\t},\n\n\tfxAutoComplete(element = this.el.searchInput) {\n\n\t\tif (!this.vars.ticking) {\n\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\tpreloader.fxPreloaderRemove(this.el.searchContainer)\n\t\t\t\tthis.fxSearch(element)\n\t\t\t\tthis.vars.ticking = false\n\t\t\t})\n\n\t\t\tthis.vars.ticking = true\n\t\t}\n\t},\n\n\tfxClearSearch(button = this.el.searchClear) {\n\t\tif (button.classList.contains('js-clear-search'))\n\t\t\tthis.el.searchInput.value = ''\n\n\t\tthis.el.searchClear.style.display = 'none'\n\t\tthis.el.searchTotalResultsContainer.style.display = 'none'\n\t\tthis.el.searchResults.innerHTML = ''\n\t\tthis.el.searchPagination.innerHTML = ''\n\t},\n\n\tfxSearch(element, page) {\n\t\tconst currentPage = page ? Number(page) : this.vars.currentPage,\n\t\t\tcallback = (response, data) => this.fxSearchCallback(response, data, currentPage)\n\n\t\tconst formData = {\n\t\t\tterm: element.value,\n\t\t\tpage: currentPage,\n\t\t\tlanguage: this.el.body.dataset.language\n\t\t}\n\n\t\tpreloader.fxPreloaderAdd(this.el.searchContainer)\n\t\thttp.fxPost(this.el.searchForm.action, formData, callback)\n\t},\n\n\tfxSearchCallback(_, data, page) {\n\t\tpreloader.fxPreloaderRemove(this.el.searchContainer)\n\n\t\tconst items = data.items,\n\t\t\ttotalItems = data.totalRecords,\n\t\t\titemsPerPage = 10\n\n\t\tthis.el.searchTotalResultsContainer.style.display = 'block'\n\t\tthis.el.searchClear.style.display = 'block'\n\t\tthis.el.searchTotalResults.textContent = totalItems\n\t\tthis.el.searchFirstIndexResults.textContent = items.length ? page * itemsPerPage - (itemsPerPage - 1) : 0\n\t\tthis.el.searchLastIndexResults.textContent = items.length === itemsPerPage ? page * itemsPerPage : (page - 1) * itemsPerPage + items.length\n\t\tthis.el.searchResults.innerHTML = ''\n\t\tthis.el.searchPagination.innerHTML = ''\n\n\t\tthis.el.searchPagination.removeAttribute('style')\n\n\t\tfor (const item of items) {\n\t\t\tthis.el.searchResults.innerHTML +=\n\t\t\t\t`\n\t\t\t\t\t
    \n\t\t\t\t\t\t

    ${item.title}

    \n\t\t\t\t\t\t

    ${item.description}

    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t${this.el.searchForm.dataset.caption}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\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}\n\t\tthis.fxRenderPagination(data.pages, page)\n\t},\n\n\tfxRenderPagination(pages, currentPage) {\n\t\tconst pagination = this.el.searchPagination\n\n\t\tpagination.innerHTML = ''\n\n\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\tconst active = i + 1 === currentPage ? 'is-active' : ''\n\t\t\tpagination.innerHTML += ``\n\t\t}\n\n\t\tfor (const page of document.querySelectorAll('.js-pagination-item')) {\n\t\t\tpage.addEventListener('click', e => {\n\t\t\t\tconst target = e.currentTarget\n\t\t\t\tif (!isNaN(target.textContent)) {\n\t\t\t\t\tthis.el.searchResults.innerHTML = ''\n\t\t\t\t\tthis.fxSearch(this.el.searchInput, Number(target.textContent))\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t},\n\n\tevents() {\n\t\tfor (const button of this.el.searchOpenButton)\n\t\t\tbutton.addEventListener('click', () => this.fxOpenModal())\n\n\t\tthis.el.searchCloseButton.addEventListener('click', () => this.fxCloseModal())\n\n\t\tthis.el.searchFilter.addEventListener('click', e => {\n\t\t\te.preventDefault()\n\t\t\tthis.fxSearch(this.el.searchInput.value)\n\t\t})\n\n\t\tthis.el.searchInput.addEventListener('input', e => e.currentTarget.value.length >= 3 ? this.fxAutoComplete() : this.fxClearSearch(e.currentTarget))\n\n\t\tthis.el.searchInput.addEventListener('keydown', e => {\n\t\t\tif (e.key === 'Enter') {\n\t\t\t\te.preventDefault()\n\t\t\t\te.currentTarget.value.length >= 3 && this.fxSearch(e.currentTarget.value)\n\t\t\t}\n\t\t})\n\n\t\tthis.el.searchClear.addEventListener('click', () => this.fxClearSearch())\n\t},\n\n\tinit() {\n\t\tthis.el.searchContainer && this.events()\n\t}\n}\n\nsearch.init()","const seeMore = {\n\tel: {\n\t\tseeMore: document.querySelector('.js-see-more'),\n\t\theroHP: document.querySelector('.hero-hp')\n\t},\n\n\tevents() {\n\t\tthis.fxHandleScroll()\n\n\t\tthis.el.seeMore.addEventListener('click', this.fxHeroScroll)\n\t\twindow.addEventListener('scroll', this.fxHandleScroll)\n\t},\n\n\tfxHandleScroll() {\n\t\tif(window.scrollY > 5) {\n\t\t\tseeMore.el.seeMore.classList.add('hero-hp__see-more--hidden')\n\t\t} else {\n\t\t\tseeMore.el.seeMore.classList.remove('hero-hp__see-more--hidden')\n\t\t}\n\t},\n\n\tfxHeroScroll() {\n\t\tconst heroNextSibling = seeMore.el.heroHP.nextElementSibling\n\n\t\theroNextSibling.scrollIntoView({ behavior: 'smooth' })\n\t},\n\n\tinit() {\n\t\tif (this.el.seeMore) {\n\t\t\tthis.events()\n\t\t}\n\t}\n}\n\nseeMore.init()\n","const showContent = {\n\tel: {\n\t\tbtnShowContent: document.querySelectorAll('.js-show-content')\n\t},\n\n\tfxShowContent(element) {\n\t\telement.parentElement.querySelectorAll('.d-none').forEach(el => el.classList.remove('d-none'))\n\t\telement.style.opacity = '0'\n\t},\n\n\tevents() {\n\t\tthis.el.btnShowContent.forEach(el => el.addEventListener('click', e => this.fxShowContent(e.currentTarget)))\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nshowContent.init()","/* global Swiper */\nconst sliders = {\n\tel: {\n\t\tsliderContainer: document.querySelectorAll('.js-slider')\n\t},\n\n\tfxInitSlider(el) {\n\t\tconst sliderCentered = el.dataset.sliderCentered && JSON.parse(el.dataset.sliderCentered),\n\t\t\tsliderDelay = el.dataset.sliderDelay && JSON.parse(el.dataset.sliderDelay),\n\t\t\tsliderLoop = el.dataset.sliderLoop && JSON.parse(el.dataset.sliderLoop),\n\t\t\tsliderAutoPlay = el.dataset.sliderAutoplay && JSON.parse(el.dataset.sliderAutoplay),\n\t\t\tsliderSizeWide = el.dataset.sliderWide && JSON.parse(el.dataset.sliderWide),\n\t\t\tsliderSizeLarge = el.dataset.sliderLarge && JSON.parse(el.dataset.sliderLarge),\n\t\t\tsliderSizeMedium = el.dataset.sliderMedium && JSON.parse(el.dataset.sliderMedium),\n\t\t\tsliderSizeSmall = el.dataset.sliderSmall && JSON.parse(el.dataset.sliderSmall),\n\t\t\tsliderPaginationType = el.dataset.sliderPaginationType && el.dataset.sliderPaginationType,\n\t\t\tsliderSpaceBetween = el.dataset.sliderSpaceBetween && JSON.parse(el.dataset.sliderSpaceBetween),\n\t\t\tsliderOnInteraction = el.dataset.sliderOnInteraction && JSON.parse(el.dataset.sliderOnInteraction),\n\t\t\tsliderNoSwipe = el.dataset.sliderNoSwipe && JSON.parse(el.dataset.sliderNoSwipe),\n\t\t\tsliderFreeMode = el.dataset.sliderFreemode && JSON.parse(el.dataset.sliderFreemode),\n\t\t\tsliderFreeModeSticky = el.dataset.sliderFreemodeSticky && JSON.parse(el.dataset.sliderFreemodeSticky),\n\t\t\tsliderKeyboard = el.dataset.sliderKeyboard && JSON.parse(el.dataset.sliderKeyboard),\n\t\t\tsliderMouseWheel = el.dataset.sliderMousewheel && JSON.parse(el.dataset.sliderMousewheel),\n\t\t\tsliderScroll = el.dataset.sliderScroll && JSON.parse(el.dataset.sliderScroll),\n\t\t\tsliderSpeed = el.dataset.sliderSpeed && JSON.parse(el.dataset.sliderSpeed),\n\t\t\tslidesPerGroup = el.dataset.sliderGroup && JSON.parse(el.dataset.sliderGroup),\n\t\t\tslidesPerColumn = el.dataset.sliderColumn && JSON.parse(el.dataset.sliderColumn)\n\n\t\tconst swiperOptions = {\n\t\t\tslidesPerView: sliderSizeSmall ? sliderSizeSmall : 1,\n\t\t\tcenteredSlides: sliderCentered ? sliderCentered : false,\n\t\t\tcenteredSlidesBounds: sliderCentered ? true : false,\n\t\t\tloop: sliderLoop ? sliderLoop : false,\n\t\t\tspaceBetween: sliderSpaceBetween ? sliderSpaceBetween : 0,\n\t\t\tnoSwiping: sliderNoSwipe ? sliderNoSwipe : false,\n\t\t\tspeed: sliderSpeed ? sliderSpeed : 300,\n\t\t\tfreeMode: sliderFreeMode ? sliderFreeMode : false,\n\t\t\tfreeModeSticky: sliderFreeMode && sliderFreeModeSticky ? sliderFreeModeSticky : false,\n\t\t\tslideToClickedSlide: sliderFreeMode ? true : false,\n\t\t\tslidesPerGroup: slidesPerGroup ? slidesPerGroup : 1,\n\t\t\tslidesPerColumn: slidesPerColumn ? slidesPerColumn : 1,\n\t\t\twatchOverflow: true,\n\t\t\tmousewheel: sliderFreeMode ? {\n\t\t\t\treleaseOnEdges: true\n\t\t\t} : sliderMouseWheel ? sliderMouseWheel : false,\n\n\t\t\tkeyboard: {\n\t\t\t\tenabled: sliderKeyboard ? sliderKeyboard : false\n\t\t\t},\n\n\t\t\tnavigation: {\n\t\t\t\tnextEl: el.querySelector('.swiper-button-next'),\n\t\t\t\tprevEl: el.querySelector('.swiper-button-prev')\n\t\t\t},\n\n\t\t\tpagination: {\n\t\t\t\tel: el.querySelector('.swiper-pagination'),\n\t\t\t\tclickable: sliderPaginationType ? false : true,\n\t\t\t\ttype: sliderPaginationType ? sliderPaginationType : 'bullets' //\"bullets\", \"fraction\", \"progressbar\" or \"custom\" (default:\"bullets\")\n\t\t\t},\n\n\t\t\tscrollbar: {\n\t\t\t\tel: sliderScroll ? sliderScroll : null,\n\t\t\t\thide: sliderScroll && true\n\t\t\t},\n\n\t\t\tautoplay: sliderAutoPlay === true ? {\n\t\t\t\tdelay: sliderDelay ? sliderDelay : 5000,\n\t\t\t\tdisableOnInteraction: sliderOnInteraction ? sliderOnInteraction : false\n\t\t\t} : false,\n\n\t\t\tbreakpoints: {\n\t\t\t\t768: { //tablet up\n\t\t\t\t\tslidesPerView: sliderSizeMedium ? sliderSizeMedium : sliderSizeSmall ? sliderSizeSmall : 1\n\t\t\t\t},\n\t\t\t\t1024: { //small desktop up\n\t\t\t\t\tslidesPerView: sliderSizeLarge ? sliderSizeLarge : sliderSizeMedium ? sliderSizeMedium : sliderSizeSmall ? sliderSizeSmall : 1\n\t\t\t\t},\n\t\t\t\t1440: { // desktop up\n\t\t\t\t\tslidesPerView: sliderSizeWide ? sliderSizeWide : sliderSizeLarge ? sliderSizeLarge : sliderSizeMedium ? sliderSizeMedium : sliderSizeSmall ? sliderSizeSmall : 1\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ton: {\n\t\t\t\tinit: () => setTimeout(() => window.dispatchEvent(new Event('resize')), 100)\n\t\t\t}\n\t\t}\n\n\t\tnew Swiper(el, swiperOptions)\n\t},\n\n\tinit() {\n\t\tthis.el.sliderContainer.forEach(el => this.fxInitSlider(el))\n\t}\n}\nsliders.init()","const video = {\n\tel: {\n\t\tbody: document.querySelector('body'),\n\t\tmodal: document.querySelector('.hero-video__modal'),\n\t\tvideoContainer: document.querySelector('.js-video'),\n\t\tvideoPlayerModal: document.querySelector('.hero-video__modal-video'),\n\t\tvideoInlineContainer: document.querySelector('.js-video-container')\n\t},\n\n\tfxOpenModal() {\n\t\tthis.el.modal.style.display = 'block'\n\t\tthis.el.body.classList.add('no-scroll-fixed')\n\t},\n\n\tfxCloseModal() {\n\t\tthis.el.modal.style.display = 'none'\n\t\tthis.el.body.classList.remove('no-scroll-fixed')\n\t},\n\n\tfxPlayVideoInline(video) {\n\t\tvideo.parentElement.querySelector('video').play()\n\t\tvideo.parentElement.querySelector('video').controls = true\n\t\tvideo.style.display = 'none'\n\t},\n\n\tfxPlayVideoModal(video) {\n\t\tvideo.play()\n\t},\n\n\tfxStopVideoModal(video) {\n\t\tvideo.pause()\n\t\tvideo.currentTime = 0\n\t},\n\n\tevents() {\n\t\tif (this.el.videoContainer) {\n\t\t\tconst btnPlayInModal = this.el.videoContainer.querySelector('.js-play-video'),\n\t\t\t\tbtnCloseModal = this.el.videoContainer.querySelector('.js-close-modal')\n\n\t\t\tbtnPlayInModal.addEventListener('click', () => {\n\t\t\t\tthis.fxOpenModal()\n\t\t\t\tthis.fxPlayVideoModal(this.el.videoPlayerModal)\n\t\t\t})\n\t\t\tbtnCloseModal.addEventListener('click', () => {\n\t\t\t\tthis.fxStopVideoModal(this.el.videoPlayerModal)\n\t\t\t\tthis.fxCloseModal()\n\n\t\t\t})\n\t\t}\n\n\t\tif (this.el.videoInlineContainer) {\n\t\t\tconst btnPlayInline = this.el.videoInlineContainer.querySelector('.js-video-button-play')\n\n\t\t\tbtnPlayInline.addEventListener('click', e => this.fxPlayVideoInline(e.currentTarget))\n\t\t}\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nvideo.init()"]}