{"version":3,"sources":["core/@hoverToTouch.js","core/@http.js","core/@objectFit.js","core/@outlineAccessibility.js","core/@scrollToElement.js","core/@testChrome.js","core/@urlExternalSafe.js","helpers/@filterPagination.js","helpers/@formHelper.js","helpers/@formValidation.js","helpers/@pagination.js","helpers/@searchFilter.js","site/aosAnimate.js","site/areas.js","site/aside.js","site/filter.js","site/formContact.js","site/header.js","site/hero.js","site/loadMore.js","site/masonry.js","site/modal.js","site/nav.js","site/news.js","site/range.js","site/search.js","site/slider.js","site/sliderBox.js","site/social.js","site/tableFilter.js","site/toggle.js","site/urlSource.js","site/video.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;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;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;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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":["const hoverToTouch = {\n\tel: {\n\t\tbody: document.body\n\t},\n\tinit() {\n\t\tthis.el.body.addEventListener('touchstart', () => {})\n\t}\n}\n\nhoverToTouch.init()","/* global axios*/\nconst http = {\n\tel: {\n\t\tsearch: document.querySelector('.search'),\n\t\tnewsContainer: document.querySelector('.js-get-news')\n\t},\n\n\tfxPreloaderFilterAddHelper(spinnerElement, el) {\n\t\tspinnerElement.innerHTML = ''\n\t\tspinnerElement.classList.add('is-loading')\n\t\tspinnerElement.innerHTML += '
'\n\t\tel.closest('.js-search').querySelector('.pagination').style.display = 'none'\n\t\tel.querySelector('.filter-search__text').style.display = 'none'\n\t\tthis.el.search.querySelector('.search-results__article') && this.el.search.querySelectorAll('.search-results__article').forEach(el => el.style.display = 'none')\n\t},\n\n\tfxPreloaderFilterRemoveHelper(spinnerElement, el) {\n\t\tspinnerElement.classList.remove('is-loading')\n\t\tspinnerElement.removeAttribute('style')\n\t\tspinnerElement.innerHTML = ''\n\t\tel.closest('.js-search').querySelector('.pagination').removeAttribute('style')\n\t\tel.querySelector('.filter-search__text').removeAttribute('style')\n\t\tthis.el.search.querySelector('.search-results__article') && this.el.search.querySelectorAll('.search-results__article').forEach(el => el.removeAttribute('style'))\n\t},\n\n\tfxpreloaderAddHelper(spinnerElement) {\n\t\tspinnerElement.classList.add('is-loading')\n\t\tspinnerElement.innerHTML += '
'\n\t},\n\n\tfxpreloaderRemoveHelper(spinnerElement) {\n\t\tspinnerElement.classList.remove('is-loading')\n\t\tspinnerElement.querySelector('.is-loading-spinner').outerHTML = ''\n\t},\n\n\tfxPreloader() {\n\t\t// Add a request interceptor\n\t\taxios.interceptors.request.use(config => {\n\n\t\t\tif (this.el.search.classList.contains('is-search-open')) {\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling\n\t\t\t\t\tthis.fxPreloaderFilterAddHelper(spinnerElement, el)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\telse if (document.querySelectorAll('.filter-search').length > 1 && !this.el.search.classList.contains('is-search-open')) {\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling.classList.contains('search-results') ? el.nextElementSibling : el.nextElementSibling.children[0]\n\t\t\t\t\tthis.fxPreloaderFilterAddHelper(spinnerElement, el)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tthis.el.newsContainer && this.fxpreloaderAddHelper(document.querySelector('.js-get-news .media__list'))\n\t\t\t\tdocument.querySelectorAll('.js-form-contact .js-submit').forEach(el => this.fxpreloaderAddHelper(el))\n\t\t\t}\n\n\t\t\treturn config\n\n\t\t}, error => Promise.reject(error))\n\n\t\t// Add a response interceptor\n\t\taxios.interceptors.response.use(response => {\n\t\t\t// Any status code that lie within the range of 2xx cause this function to trigger\n\t\t\t// Do something with response data\n\t\t\tif (this.el.search.classList.contains('is-search-open')) {\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling\n\t\t\t\t\tthis.fxPreloaderFilterRemoveHelper(spinnerElement, el)\n\t\t\t\t})\n\n\t\t\t}\n\n\t\t\telse if (document.querySelectorAll('.filter-search').length > 1 && !this.el.search.classList.contains('is-search-open')) {\n\t\t\t\tdocument.querySelectorAll('.filter-search').forEach(el => {\n\t\t\t\t\tconst spinnerElement = el.nextElementSibling.classList.contains('search-results') ? el.nextElementSibling : el.nextElementSibling.children[0]\n\t\t\t\t\tthis.fxPreloaderFilterRemoveHelper(spinnerElement, el)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tthis.el.newsContainer && this.fxpreloaderRemoveHelper(document.querySelector('.js-get-news .media__list'))\n\t\t\t\tdocument.querySelectorAll('.js-form-contact .js-submit').forEach(el => this.fxpreloaderRemoveHelper(el))\n\t\t\t}\n\n\t\t\treturn response\n\t\t}, error => Promise.reject(error))\n\t},\n\n\tfxPost(endpoint, formData, callback) {\n\t\treturn axios.post(endpoint, formData)\n\t\t\t.then(result => {\n\t\t\t\tcallback(result)\n\t\t\t\treturn result\n\t\t\t})\n\t\t\t.catch(error => callback({ ...error }))\n\t},\n\n\tfxGet(endpoint, callback) {\n\t\treturn axios.get(endpoint)\n\t\t\t.then(result => {\n\t\t\t\tcallback(result)\n\t\t\t\treturn result\n\t\t\t})\n\t\t\t.catch(error => callback({ ...error }))\n\t}\n}\n\nhttp.fxPreloader()","const objectFit = {\n\n\tevents() {\n\t\tif ('objectFit' in document.documentElement.style === false) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', () => {\n\t\t\t\tdocument.querySelectorAll('img[data-object-fit]').forEach(image => {\n\t\t\t\t\t(image.runtimeStyle || image.style).background = `url(\"${image.src}\") no-repeat 50%/${image.currentStyle ? image.currentStyle['object-fit'] : image.getAttribute('data-object-fit')}`\n\t\t\t\t\timage.src = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${image.width}' height='${image.height}'%3E%3C/svg%3E`\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nobjectFit.init()","const accessibility = {\n\tel: {\n\t\tdoc: document,\n\t\thtml: document.documentElement\n\t},\n\n\tevents() {\n\t\tthis.el.doc.addEventListener('keydown', e => e.key === 'Tab' ? this.el.html.classList.add('a11y') : '')\n\t\tthis.el.doc.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.events()\n\t}\n}\n\naccessibility.init()","const scrollToElement = {\n\tel: {\n\t\tbtnScroll: document.querySelectorAll('.js-scrollto'),\n\t\theader: document.querySelector('.header'),\n\t\tsticky: document.querySelector('.sticky'),\n\t\taside: document.querySelector('.aside'),\n\t\tasideToggleMobile: document.querySelector('.js-toggle-aside'),\n\t\taccordion: document.querySelector('.accordion'),\n\t\tmap: document.querySelector('.map')\n\t},\n\n\tvars: {\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\n\t},\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 = Number(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 = Number(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\tfxScrollTarget(target) {\n\t\tconst headerHeight = this.el.header.offsetHeight,\n\t\t\tasideStickyHeight = this.el.asideToggleMobile ? this.el.asideToggleMobile.offsetHeight : 0,\n\t\t\tsupportsNativeSmoothScroll = 'scrollBehavior' in document.documentElement.style,\n\t\t\toffsetTopElement = target.closest('.accordion') && this.el.map ? this.el.accordion.offsetParent.offsetTop + target.offsetTop : target.offsetTop\n\n\t\tif (supportsNativeSmoothScroll) {\n\t\t\twindow.scrollTo({\n\t\t\t\tbehavior: 'smooth',\n\t\t\t\ttop: offsetTopElement - (this.el.header ? headerHeight : 0) - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? asideStickyHeight : 0) + 1\n\t\t\t})\n\t\t}\n\t\telse\n\t\t\tthis.fxSmoothScrollToPolyfill(target.offsetTop - (this.el.header ? headerHeight : 0) - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? asideStickyHeight : 0) + 1, 500)\n\t},\n\n\tfxScrollTo(btnScrollTo, target) {\n\t\tbtnScrollTo.forEach(button => button.addEventListener('click', e => {\n\t\t\te.preventDefault()\n\t\t\tconst searchContainer = button.closest('.js-search') ? button.closest('.js-search') : button.closest('.modal') ? button.closest('.modal').previousElementSibling : button.closest('.pagination') ? button.closest('.pagination').previousElementSibling : ''\n\n\t\t\tconst isMapContainer = button.closest('.map') ? button.closest('.map') : ''\n\n\t\t\ttarget = btnScrollTo === this.el.btnScroll ? document.getElementById(button.dataset.scroll) : (searchContainer.querySelector('.js-autocomplete') ? searchContainer.querySelector('.js-autocomplete') : searchContainer)\n\n\t\t\tif (target) {\n\t\t\t\tif (isMapContainer) {\n\t\t\t\t\tdocument.querySelectorAll('.js-toggle-accordion').forEach(el => el.classList.remove('is-toggled'))\n\t\t\t\t\tdocument.querySelectorAll('.accordion__panel').forEach(el => el.classList.remove('is-toggle-open'))\n\t\t\t\t\ttarget.children[0].click()\n\t\t\t\t}\n\t\t\t\tthis.vars.extraLargeAndUp.matches ? this.fxScrollTarget(target) : setTimeout(() => this.fxScrollTarget(target), 500)\n\t\t\t\tbtnScrollTo.forEach(el => el.classList.remove('is-active'))\n\t\t\t\te.currentTarget.classList.add('is-active')\n\t\t\t\tif ((this.el.aside || this.el.sticky) && !this.vars.extraLargeAndUp.matches) {\n\t\t\t\t\tthis.el.sticky ? this.el.sticky.classList.remove('is-aside-open') : ''\n\t\t\t\t\tthis.el.aside ? this.el.aside.classList.remove('is-aside-open') : ''\n\t\t\t\t}\n\t\t\t}\n\t\t}))\n\t},\n\n\tevents() {\n\t\tthis.fxScrollTo(this.el.btnScroll, this)\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nscrollToElement.init()","const addressBarChromeMobileVH = {\n\tel: {\n\t\tbody: document.body,\n\t\thero: document.querySelector('.js-hero'),\n\t\theader: document.querySelector('.header')\n\t},\n\n\tvars: {\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\n\t},\n\n\tfxDetectHeight() {\n\t\tif (!this.el.hero) return\n\n\t\tconst heightHeader = this.el.header.offsetHeight,\n\t\t\theightFinal = window.innerHeight - heightHeader\n\n\t\tthis.el.hero.style.height = `${heightFinal}px`\n\n\t\twindow.addEventListener('resize', () => {\n\t\t\t// Update window Height size\n\t\t\tconst heightFinal = window.innerHeight - heightHeader\n\t\t\t// Update sizes\n\t\t\tthis.el.hero.style.height = `${heightFinal}px`\n\t\t})\n\t},\n\n\tevents() {\n\t\tthis.vars.extraLargeAndUp.addEventListener('change', () => this.fxDetectHeight())\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t\tthis.fxDetectHeight()\n\t}\n}\n\naddressBarChromeMobileVH.init()","const url = {\n\tel: {\n\t\tlinkToNewTab: document.querySelectorAll('a[target=\"_blank\"]')\n\t},\n\n\tevents() {\n\t\tthis.el.linkToNewTab.forEach(el => el.setAttribute('rel', 'noopener noreferrer'))\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nurl.init()","/* global pagination http searchFilter formHelper */\n/*eslint-disable no-unused-vars*/\nconst filterPagination = {\n\tvars: {\n\t\tcurrentPage: 1\n\t},\n\n\tfxFilterPaginationItemHelper(selector, element, endpoint) {\n\t\tdocument.addEventListener('click', e => {\n\t\t\tif (e.target && e.target.classList.contains('pagination__item') && e.target.closest('.js-search').querySelector(selector)) {\n\t\t\t\tconst paginationList = e.target.parentElement,\n\t\t\t\t\tpage = Number(e.target.querySelector('button').textContent),\n\t\t\t\t\tsearchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\n\t\t\t\t\tform = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-filter-modal') ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : element,\n\t\t\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\n\t\t\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\n\t\t\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\n\t\t\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\n\t\t\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\n\n\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\n\n\t\t\t\tconst callback = response => {\n\t\t\t\t\tsearchFilter.fxFilterCallback(response, element, page)\n\t\t\t\t\te.target.closest('.pagination__list').querySelectorAll('.pagination__item').forEach(el => el.classList.remove('is-active'))\n\t\t\t\t\te.target.classList.add('is-active')\n\t\t\t\t}\n\n\t\t\t\thttp.fxPost(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, formHelper.fxFormToJson(form), callback).then(response => {\n\t\t\t\t\tthis.vars.currentPage = response.data.pagination.filter(el => {\n\t\t\t\t\t\tif (el.currentPage) return el\n\t\t\t\t\t})[0].page\n\t\t\t\t\tsetTimeout(() => pagination.fxPaginationItemHelper(response, paginationList, this.vars.currentPage), 0)\n\t\t\t\t\tpagination.fxPaginationHelper(response, paginationList)\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t},\n\n\tfxFilterNavigationHelper(selector, endpoint, filter) {\n\t\tconst searchContainer = filter.closest('.js-search'),\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\n\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\n\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\n\n\t\tpagination.el.paginationButtonPrev.forEach(el => el.addEventListener('click', e => {\n\t\t\tif (e.target.closest('.js-search').querySelector(selector)) {\n\t\t\t\tthis.vars.currentPage--\n\n\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\n\n\t\t\t\tpagination.fxNavigationHelper(endpoint, '', e.target.nextElementSibling, this.vars.currentPage, filter)\n\t\t\t}\n\t\t}))\n\n\t\tpagination.el.paginationButtonNext.forEach(el => el.addEventListener('click', e => {\n\t\t\tif (e.target.closest('.js-search').querySelector(selector)) {\n\t\t\t\tthis.vars.currentPage++\n\n\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\n\t\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\n\n\t\t\t\tpagination.fxNavigationHelper(endpoint, '', e.target.previousElementSibling, this.vars.currentPage, filter)\n\t\t\t}\n\t\t}))\n\t}\n}","const formHelper = {\n\tel: {\n\t\tcheckbox: document.querySelectorAll('.js-checkbox'),\n\t\tmodalContact: document.querySelector('.modal-contacts'),\n\t\tbody: document.body,\n\t\theader: document.querySelector('.header')\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\telse {\n\t\t\t\tindexedArray[el[i].name] = el[i].name === 'term' || el[i].name === 'teacher' ? '' : null\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.el.querySelector('.js-submit')\n\n\t\tbuttonSubmit.style.display = 'none'\n\t\tform.el.nextElementSibling.textContent = msg\n\t\tform.el.nextElementSibling.style.display = 'inherit'\n\n\t\tsetTimeout(() => {\n\t\t\tform.el.nextElementSibling.textContent = ''\n\t\t\tform.el.nextElementSibling.style.display = 'none'\n\t\t\tbuttonSubmit.removeAttribute('disabled')\n\t\t\tbuttonSubmit.style.display = 'inherit'\n\t\t\tstatus === 200 ? form.el.reset() : ''\n\t\t\tif (document.querySelector('[type=\"file\"]')) {\n\t\t\t\tform.el.value = ''\n\t\t\t\tform.el.querySelector('[name=\"fileName\"]').value = ''\n\t\t\t\tform.el.querySelector('.upload-file__name').textContent = ''\n\t\t\t\tsetTimeout(() => form.el.querySelector('.js-clear-file').style.display = 'none', 0)\n\t\t\t}\n\t\t}, 5000)\n\t},\n\n\tfxShowModalSubmitMessage () {\n\t\tconst sucessMessage = this.el.modalContact.querySelector('.umbraco-forms-submitmessage')\n\t\tconst storedURL = sessionStorage.getItem('formURL')\n\t\tconst url = window.location.href\n\t\tif (!sucessMessage) return\n\t\tif (storedURL === url) return\n\t\tthis.fxModalContactsOpen()\n\t},\n\n\tfxValidateModal () {\n\t\tconst form = this.el.modalContact.querySelector('form')\n\t\tif(!form) return\n\t\tconst error = form.querySelectorAll('.field-validation-error')\n\n\t\tif([...error].length) {\n\t\t\tthis.fxModalContactsOpen()\n\t\t}\n\n\t},\n\n\tfxModalContactsOpen () {\n\t\tthis.el.modalContact.classList.add('is-modal-open')\n\t\tthis.el.body.classList.add('no-scroll-hidden')\n\t\tsetTimeout(() => {\n\t\t\tthis.el.header.classList.add('header--modal')\n\t\t\tthis.el.header.classList.contains('header--fixed') && this.el.header.classList.remove('header--fixed')\n\t\t}, 500)\n\t},\n\t// Used in form with redirect to thank you page that has option to return to form page\n\tfxStorePageURLbasedOnContactFormId() {\n\t\tconst contactForm = this.el.modalContact.querySelector('.modal__content > div')\n\t\tif (!this.el.modalContact) return\n\t\tif (this.el.modalContact) {\n\t\t\tif(contactForm.getAttribute('id') !== 'umbraco_form_85bb846e365f4ea9b2441df60891ca47') return\n\t\t\tconst url = window.location.href\n\t\t\tsessionStorage.setItem('formURL', url)\n\t\t}\n\t},\n\t// Used in form with redirect to thank you page that has option to return to form page\n\tfxCheckPageUrlInLocalStorage() {\n\t\tconst storedURL = sessionStorage.getItem('formURL')\n\t\tconst modalForm = this.el.modalContact.querySelector('.modal__content form')\n\t\tconst url = window.location.href\n\t\tif (modalForm) return\n\t\tif (storedURL === url) window.location.reload(true)\n\t},\n\n\tinit() {\n\t\tthis.fxInputEvents()\n\n\t\tif(!this.el.modalContact) return\n\t\tthis.fxStorePageURLbasedOnContactFormId()\n\t\tthis.fxCheckPageUrlInLocalStorage()\n\t\tthis.fxShowModalSubmitMessage()\n\t\tthis.fxValidateModal()\n\t}\n}\n\nformHelper.init()","/* global Bouncer */\nconst formValidation = {\n\tel: {\n\t\thtml: document.documentElement,\n\t\tbody: document.body\n\t},\n\n\tinitBouncer(form) {\n\t\tnew Bouncer(form.dataset.selector, {\n\t\t\tdisableSubmit: true,\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\turl: /^(http(s?):\\/\\/)(?!www | www\\.)[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\t\t\t\tnif: field => {\n\t\t\t\t\tif (field.classList.contains('js-nif')) {\n\t\t\t\t\t\tlet v = field.value\n\n\t\t\t\t\t\tif (v.length > 0)\n\t\t\t\t\t\t\tif (v += '', !['1', '2', '3', '5', '6', '8'].includes(v.substr(0, 1)) && !['45', '70', '71', '72', '77', '79', '90', '91', '98', '99'].includes(v.substr(0, 2))) return !1\n\n\t\t\t\t\t\tlet d, b = 9 * v[0] + 8 * v[1] + 7 * v[2] + 6 * v[3] + 5 * v[4] + 4 * v[5] + 3 * v[6] + 2 * v[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, v[8] == d)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tpastDate: field => {\n\t\t\t\t\tif (field.classList.contains('js-past-date'))\n\t\t\t\t\t\treturn field.value > field.getAttribute('max')\n\t\t\t\t},\n\t\t\t\tfutureDate: field => {\n\t\t\t\t\tif (field.classList.contains('js-future-date'))\n\t\t\t\t\t\treturn field.value < field.getAttribute('min')\n\t\t\t\t}\n\t\t\t},\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: () => {\n\t\t\t\t\treturn form.dataset.msgCompare\n\t\t\t\t},\n\t\t\t\tnif: () => {\n\t\t\t\t\treturn form.dataset.msgInvalidFormat\n\t\t\t\t},\n\t\t\t\tpastDate: () => {\n\t\t\t\t\treturn `${form.dataset.msgMaxFormat} ` + new Date().toJSON().split('T')[0]\n\t\t\t\t},\n\t\t\t\tfutureDate: () => {\n\t\t\t\t\treturn `${form.dataset.msgMinFormat} ` + new Date().toJSON().split('T')[0]\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t},\n\n\tfxValidate(form) {\n\t\tthis.initBouncer(form)\n\t\treturn form.checkValidity()\n\t},\n\n\tfxSetValidationAttributes() {\n\t\tdocument.querySelector('.js-past-date') ? document.querySelector('.js-past-date').setAttribute('max', new Date().toJSON().split('T')[0]) : ''\n\t\tdocument.querySelector('.js-future-date') ? document.querySelector('.js-future-date').setAttribute('min', new Date().toJSON().split('T')[0]) : ''\n\t\tdocument.querySelector('[type=number]') ? document.querySelectorAll('[type=number]:not(.js-range-date)').forEach(el => el.setAttribute('min', 0)) : ''\n\t\tif (document.querySelector('.js-range-date')) {\n\t\t\tdocument.querySelector('.js-range-date').setAttribute('min', '1900')\n\t\t\tdocument.querySelector('.js-range-date').setAttribute('max', new Date().getFullYear())\n\t\t}\n\t},\n\n\tinit() {\n\t\tthis.fxSetValidationAttributes()\n\t}\n}\n\nformValidation.init()","/*global http formHelper searchFilter news search*/\n/*eslint-disable no-unused-vars*/\nconst pagination = {\n\tel: {\n\t\tpaginationButtonPrev: document.querySelectorAll('.pagination__button--prev'),\n\t\tpaginationButtonNext: document.querySelectorAll('.pagination__button--next')\n\t},\n\n\tvars: {\n\t\tmaxPaginationItem: 5\n\t},\n\n\tfxPaginationItemHelper(response, element, currentPage) {\n\t\tif(Object.keys(response).length) {\n\t\t\tconst data = response.data,\n\t\t\t\tpagination = data.pagination\n\n\t\t\tpagination.forEach(el => {\n\t\t\t\tif (el.currentPage) {\n\t\t\t\t\tif (el.page === 1)\n\t\t\t\t\t\telement.previousElementSibling.setAttribute('disabled', true)\n\n\t\t\t\t\telse if (el.page > 1 && pagination.length > 1)\n\t\t\t\t\t\telement.previousElementSibling.removeAttribute('disabled')\n\n\t\t\t\t\tif (el.page >= 1 && el.page < pagination.length)\n\t\t\t\t\t\telement.nextElementSibling.removeAttribute('disabled')\n\n\t\t\t\t\telse if (el.page === pagination.length)\n\t\t\t\t\t\telement.nextElementSibling.setAttribute('disabled', true)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tlet start, end\n\t\t\tconst ceiling = Math.ceil(this.vars.maxPaginationItem / 2),\n\t\t\t\tfloor = Math.floor(this.vars.maxPaginationItem / 2)\n\n\t\t\tif (pagination.length < this.vars.maxPaginationItem) {\n\t\t\t\tstart = 0\n\t\t\t\tend = pagination.length\n\t\t\t}\n\t\t\telse if (currentPage >= 1 && currentPage <= ceiling) {\n\t\t\t\tstart = 0\n\t\t\t\tend = this.vars.maxPaginationItem\n\t\t\t}\n\t\t\telse if ((currentPage + floor) >= pagination.length) {\n\t\t\t\tstart = pagination.length - this.vars.maxPaginationItem\n\t\t\t\tend = pagination.length\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstart = currentPage - ceiling\n\t\t\t\tend = currentPage + floor\n\t\t\t}\n\n\t\t\tfor (let index = start; index < end + 1; index++) {\n\t\t\t\telement.querySelectorAll('.pagination__item')[index === 0 ? index : index - 1].classList.remove('is-hidden')\n\t\t\t\telement.querySelectorAll(`.pagination__item:nth-of-type(n+${end + 1})`).forEach(el => el.classList.add('is-hidden'))\n\n\t\t\t\tif (currentPage >= this.vars.maxPaginationItem - 1) {\n\t\t\t\t\telement.querySelectorAll(`.pagination__item:nth-of-type(-n+${start})`).forEach(el => el.classList.add('is-hidden'))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tfxPaginationHelper(response, element) {\n\t\tif(Object.keys(response).length) {\n\t\t\tconst data = response.data,\n\t\t\t\tpagination = data.pagination\n\n\t\t\telement.innerHTML = ''\n\n\t\t\telement.style.pointerEvents = pagination.length === 1 ? 'none' : 'auto'\n\n\t\t\tpagination.forEach(el => {\n\t\t\t\tconst isCurrentPage = el.currentPage ? 'is-active' : ''\n\t\t\t\tif (el.currentPage && el.page === 1)\n\t\t\t\t\telement.previousElementSibling.setAttribute('disabled', true)\n\t\t\t\tif (data.pagination.length === 1)\n\t\t\t\t\telement.nextElementSibling.setAttribute('disabled', true)\n\n\t\t\t\telement.innerHTML +=\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
  • \n\t\t\t\t\t`\n\t\t\t})\n\t\t}\n\t},\n\n\tfxNavigationHelper(endpoint, selector, element, page, formElement) {\n\t\tconst searchGeneral = element.closest('.search'),\n\t\t\tsearchContainer = !element.offsetParent.querySelector('.js-get-news') ? (element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling.classList.contains('js-search')) : '',\n\t\t\tinput = searchContainer ? searchContainer.querySelector('.js-autocomplete') : '',\n\t\t\tform = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-filter-modal') ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : formElement,\n\t\t\tvalue = input.value\n\n\t\tconst callback = response => {\n\t\t\tthis.fxPaginationHelper(response, element)\n\n\t\t\tif (element.offsetParent.querySelector('.js-get-news'))\n\t\t\t\tnews.fxNewsCallback(response, selector)\n\n\t\t\telse if (searchGeneral)\n\t\t\t\tsearch.fxSearchCallback(response, page)\n\n\t\t\telse\n\t\t\t\tsearchFilter.fxFilterCallback(response, formElement, page)\n\t\t}\n\n\t\tif (element.offsetParent.querySelector('.js-get-news'))\n\t\t\thttp.fxGet(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, callback).then(response => this.fxPaginationItemHelper(response, element, page))\n\n\t\telse if (searchGeneral)\n\t\t\thttp.fxGet(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${value}/${page}`, callback).then(response => this.fxPaginationItemHelper(response, element, page))\n\n\t\telse\n\t\t\thttp.fxPost(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, formHelper.fxFormToJson(form), callback).then(response => this.fxPaginationItemHelper(response, element, page))\n\t}\n}","/*global http filterPagination formHelper pagination scrollToElement*/\nconst searchFilter = {\n\tel: {\n\t\tbody: document.body,\n\t\tmodal: document.querySelector('.modal'),\n\t\tfilterForm: document.querySelectorAll('.js-filter'),\n\t\tfilterModal: document.querySelector('.js-filter-modal'),\n\t\tfilterFormContacts: document.querySelector('.js-filter.contacts'),\n\t\tfilterFormEvents: document.querySelector('.js-filter.events'),\n\t\tfilterFormNews: document.querySelector('.js-filter.news'),\n\t\tfilterFormPublications: document.querySelector('.js-filter.publications'),\n\t\tfilterFormProjects: document.querySelector('.js-filter.projects'),\n\t\tfilterFormTeachers: document.querySelector('.js-filter.teachers')\n\t},\n\n\tvars: {\n\t\ttimer: '',\n\t\tcurrentPage: 1,\n\t\thasCleared: false\n\t},\n\n\tfxFilterResults(element) {\n\t\tconst searchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\n\t\t\tform = element.classList.contains('js-filter-modal') ? element : searchContainer.nextElementSibling ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : '',\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\n\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\n\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\n\n\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\n\n\t\tconst callback = response => this.fxFilterCallback(response, element),\n\t\t\tformData = !element.classList.contains('teachers') || !element.classList.contains('contacts') ? formHelper.fxFormToJson(form) : null\n\n\t\thttp.fxPost(searchContainer.querySelector('.js-filter').getAttribute('action'), formData, callback)\n\t},\n\n\tfxFilterCallback(response, element, page) {\n\t\tconst data = response.data,\n\t\t\tsearchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\n\t\t\tfilterType = searchContainer.querySelector('.js-filter'),\n\t\t\tnoResults = filterType.dataset.msgNoResults,\n\t\t\tpaginationList = searchContainer.querySelector('.pagination__list'),\n\t\t\tselectorContainer = filterType.classList.contains('teachers') || filterType.classList.contains('contacts') ? '.card-avatar' : filterType.classList.contains('publications') ? '.search-results' : '.media__list'\n\n\t\t//close modal\n\t\tthis.el.modal ? this.el.modal.classList.remove('is-modal-open') : ''\n\t\tthis.el.body.classList.remove('no-scroll-hidden')\n\n\t\t//pagination load\n\t\tif (page === undefined) {\n\t\t\tpagination.fxPaginationHelper(response, paginationList)\n\t\t\tif (data.pagination.length > pagination.vars.maxPaginationItem)\n\t\t\t\tpaginationList.querySelectorAll(`.pagination__item:nth-of-type(n+${pagination.vars.maxPaginationItem+1}`).forEach(el => el.classList.add('is-hidden'))\n\t\t}\n\n\t\tsearchContainer.querySelector(selectorContainer).innerHTML = ''\n\n\t\t//numberOfResults\n\t\tsearchContainer.querySelector('.js-total-results').textContent = data.numberOfResults\n\n\t\tif (data.results.length === 0) {\n\t\t\tsearchContainer.querySelector('.pagination').style.display = 'none'\n\t\t\tsearchContainer.querySelector(selectorContainer).innerHTML = noResults\n\t\t}\n\n\t\telse {\n\t\t\tdata.results.forEach((el, i) => {\n\n\t\t\t\t//parsing date\n\t\t\t\tconst date = new Date(el.date),\n\t\t\t\t\tformattedDate = new Date(date).toLocaleDateString(),\n\t\t\t\t\tgetShortMonth = date.toLocaleDateString(filterType.dataset.language, { month: 'short' }).slice(0, 3),\n\t\t\t\t\tgetMonth = date.toLocaleDateString(filterType.dataset.language, { month: 'long' }),\n\t\t\t\t\tgetShortYear = date.getFullYear() % 100,\n\t\t\t\t\tgetHours = `${(date.getHours()<10?'0':'')}${date.getHours()}`,\n\t\t\t\t\tgetMinutes = `${(date.getMinutes()<10?'0':'')}${date.getMinutes()}`,\n\t\t\t\t\t//AM/PM - start\n\t\t\t\t\tampm = getHours >= 12 ? 'p.m.' : 'a.m.',\n\t\t\t\t\tgetampmHours = (getHours % 12) || 12,\n\t\t\t\t\tampmTime = `${getampmHours}:${getMinutes} ${ampm}`,\n\t\t\t\t\t//AM/PM - end\n\t\t\t\t\tshortHour = document.documentElement.lang === 'pt' ? `${getHours}h${getMinutes}` : `${ampmTime}`,\n\t\t\t\t\tgetTime = getHours === '00' && getMinutes === '00' ? '' : `

    ${el.fullDate?el.fullDate:shortHour}

    `\n\n\t\t\t\t//API values check\n\t\t\t\tconst target = el.link && el.link.url ? (el.link.target === '_blank' ? el.link.target : '_self') : '',\n\t\t\t\t\ttime = filterType.classList.contains('events') ? `` : '',\n\t\t\t\t\tcategory = el.category && el.category.length ? `
    ${el.category}
    ` : '',\n\t\t\t\t\tlocation = el.location && el.location.length ? `

    ${el.location}

    ` : '',\n\t\t\t\t\tcontent = filterType.classList.contains('events') ? `${getTime}${location}` : el.description && el.description.length ? `

    ${el.description}

    ` : '',\n\t\t\t\t\tlink = el.link && el.link.url ? `${el.link.name}` : '',\n\t\t\t\t\tlinkCard = el.link && el.link.url ? `${el.link.name}` : '',\n\t\t\t\t\temailCard = el.email ? `${el.email}` : ''\n\n\t\t\t\t//show Elements\n\t\t\t\tif (filterType.classList.contains('events') || filterType.classList.contains('projects')) {\n\t\t\t\t\tsearchContainer.querySelector('.media__list').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${el.title}\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t${time}\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t${category}\n\t\t\t\t\t\t\t\t\t\t

    ${el.title}

    \n\t\t\t\t\t\t\t\t\t\t${content}\n\t\t\t\t\t\t\t\t\t\t${link}\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\telse if (filterType.classList.contains('news')) {\n\t\t\t\t\tsearchContainer.querySelector('.media__list').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${el.title}\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\n\t\t\t\t\t\t\t\t\t\t

    ${el.title}

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

    ${el.description}

    \n\t\t\t\t\t\t\t\t\t\t${link}\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\telse if (filterType.classList.contains('publications')) {\n\t\t\t\t\tsearchContainer.querySelector('.search-results').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

    ${el.title}

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

    ${el.description}.

    \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\telse {\n\t\t\t\t\tsearchContainer.querySelector('.card-avatar').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${el.name}\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
    ${el.name}
    \n\t\t\t\t\t\t\t\t\t\t
    ${el.role}
    \n\t\t\t\t\t\t\t\t\t\t${emailCard}\n\t\t\t\t\t\t\t\t\t\t${linkCard}\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})\n\t\t\tscrollToElement.fxScrollTo(document.querySelectorAll('.pagination__item, .pagination__button'), this)\n\t\t}\n\t},\n\n\tfxClearSearch(el) {\n\t\tconst searchContainer = el.closest('.js-search') ? el.closest('.js-search') : el.closest('.modal').previousElementSibling,\n\t\t\tclearButton = searchContainer.querySelector('.js-search-clean'),\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : ''\n\n\t\tclearButton.addEventListener('click', e => {\n\t\t\tthis.vars.hasCleared = true\n\t\t\te.currentTarget.removeAttribute('style')\n\t\t\tel.reset()\n\t\t\tthis.el.filterModal ? this.el.filterModal.reset() : ''\n\t\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? range.noUiSlider.reset() : ''\n\t\t\tthis.el.filterForm.forEach(el => this.fxFilterResults(el))\n\t\t})\n\t},\n\n\tfxGetResultsOnEvents(el, endpoint) {\n\t\tconst searchContainer = el.closest('.js-search') ? el.closest('.js-search') : el.closest('.modal').previousElementSibling,\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete')\n\n\t\tinput.addEventListener('keydown', e => {\n\t\t\tif (e.key === 'Enter') {\n\t\t\t\te.preventDefault()\n\t\t\t\tif (input.value.length > 3)\n\t\t\t\t\tthis.fxSearch(el, endpoint)\n\t\t\t}\n\t\t})\n\n\t\tif (!searchContainer.querySelector('.js-search-filter')) return\n\n\t\tsearchContainer.querySelector('.js-search-filter').addEventListener('click', e => {\n\t\t\te.preventDefault()\n\t\t\tthis.fxSearch(el, endpoint)\n\t\t})\n\t},\n\n\tfxAutocomplete(el, endpoint) {\n\t\tconst searchContainer = el.closest('.js-search') ? el.closest('.js-search') : el.closest('.modal').previousElementSibling,\n\t\t\tclearButton = searchContainer.querySelector('.js-search-clean'),\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : ''\n\n\t\tinput.addEventListener('input', () => {\n\t\t\tif (input.value.length >= 3) {\n\t\t\t\tinput.nextElementSibling.style.display = 'block'\n\t\t\t\tclearTimeout(this.vars.timer)\n\t\t\t\tthis.vars.timer = setTimeout(() => this.fxSearch(el, endpoint), 1000)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclearButton.removeAttribute('style')\n\n\t\t\t\tif (input.value.length === 0) {\n\t\t\t\t\tsearchContainer.nextElementSibling && term ? term.value = '' : ''\n\t\t\t\t\tthis.el.filterForm.forEach(el => this.fxFilterResults(el))\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t},\n\n\tfxSearch(element, endpoint) {\n\t\tconst searchContainer = element.closest('.js-search') ? element.closest('.js-search') : element.closest('.modal').previousElementSibling,\n\t\t\tform = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-filter-modal') ? searchContainer.nextElementSibling.querySelector('.js-filter-modal') : element,\n\t\t\tinput = searchContainer.querySelector('.js-autocomplete'),\n\t\t\tterm = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-search-term') ? searchContainer.nextElementSibling.querySelector('.js-search-term') : '',\n\t\t\trange = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range') : '',\n\t\t\trangeStart = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-start') : '',\n\t\t\trangeEnd = searchContainer.nextElementSibling && searchContainer.nextElementSibling.querySelector('.js-range') ? searchContainer.nextElementSibling.querySelector('.js-range-value-end') : ''\n\n\t\tsearchContainer.nextElementSibling && term ? term.value = input.value : ''\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeStart.value = range.noUiSlider.get()[0] : ''\n\t\tsearchContainer.nextElementSibling && range && range.noUiSlider ? rangeEnd.value = range.noUiSlider.get()[1] : ''\n\n\t\tconst callback = response => this.fxFilterCallback(response, element)\n\t\thttp.fxPost(endpoint, formHelper.fxFormToJson(form), callback)\n\t},\n\n\tinit() {\n\t\tif (this.el.filterFormEvents) {\n\t\t\tthis.fxClearSearch(this.el.filterFormEvents)\n\t\t\tthis.fxAutocomplete(this.el.filterFormEvents, this.el.filterFormEvents.getAttribute('action'))\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormEvents, this.el.filterFormEvents.getAttribute('action'))\n\t\t\tthis.fxFilterResults(this.el.filterFormEvents)\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.events', this.el.filterFormEvents, this.el.filterFormEvents.getAttribute('action'))\n\t\t\tfilterPagination.fxFilterNavigationHelper('.events', this.el.filterFormEvents.getAttribute('action'), this.el.filterFormEvents)\n\t\t}\n\n\t\telse if (this.el.filterFormNews) {\n\t\t\tthis.fxClearSearch(this.el.filterFormNews)\n\t\t\tthis.fxAutocomplete(this.el.filterFormNews, this.el.filterFormNews.getAttribute('action'))\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormNews, this.el.filterFormNews.getAttribute('action'))\n\t\t\tthis.fxFilterResults(this.el.filterFormNews)\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.news', this.el.filterFormNews, this.el.filterFormNews.getAttribute('action'))\n\t\t\tfilterPagination.fxFilterNavigationHelper('.news', this.el.filterFormNews.getAttribute('action'), this.el.filterFormNews)\n\t\t}\n\n\t\telse if (this.el.filterFormProjects) {\n\t\t\tthis.fxClearSearch(this.el.filterFormProjects)\n\t\t\tthis.fxAutocomplete(this.el.filterFormProjects, this.el.filterFormProjects.getAttribute('action'))\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormProjects, this.el.filterFormProjects.getAttribute('action'))\n\t\t\tthis.fxFilterResults(this.el.filterFormProjects)\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.projects', this.el.filterFormProjects, this.el.filterFormProjects.getAttribute('action'))\n\t\t\tfilterPagination.fxFilterNavigationHelper('.projects', this.el.filterFormProjects.getAttribute('action'), this.el.filterFormProjects)\n\t\t}\n\n\t\telse if (this.el.filterFormTeachers) {\n\t\t\tthis.fxClearSearch(this.el.filterFormTeachers)\n\t\t\tthis.fxAutocomplete(this.el.filterFormTeachers, this.el.filterFormTeachers.getAttribute('action'))\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormTeachers, this.el.filterFormTeachers.getAttribute('action'))\n\t\t\tthis.fxFilterResults(this.el.filterFormTeachers)\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.teachers', this.el.filterFormTeachers, this.el.filterFormTeachers.getAttribute('action'))\n\t\t\tfilterPagination.fxFilterNavigationHelper('.teachers', this.el.filterFormTeachers.getAttribute('action'), this.el.filterFormTeachers)\n\t\t}\n\t\telse if (this.el.filterFormContacts) {\n\t\t\tthis.fxClearSearch(this.el.filterFormContacts)\n\t\t\tthis.fxAutocomplete(this.el.filterFormContacts, this.el.filterFormContacts.getAttribute('action'))\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormContacts, this.el.filterFormContacts.getAttribute('action'))\n\t\t\tthis.fxFilterResults(this.el.filterFormContacts)\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.contacts', this.el.filterFormContacts, this.el.filterFormContacts.getAttribute('action'))\n\t\t\tfilterPagination.fxFilterNavigationHelper('.contacts', this.el.filterFormContacts.getAttribute('action'), this.el.filterFormContacts)\n\t\t}\n\t\telse if (this.el.filterFormPublications) {\n\t\t\tthis.fxClearSearch(this.el.filterFormPublications)\n\t\t\tthis.fxAutocomplete(this.el.filterFormPublications, this.el.filterFormPublications.getAttribute('action'))\n\t\t\tthis.fxGetResultsOnEvents(this.el.filterFormPublications, this.el.filterFormPublications.getAttribute('action'))\n\t\t\tthis.fxFilterResults(this.el.filterFormPublications)\n\t\t\tfilterPagination.fxFilterPaginationItemHelper('.publications', this.el.filterFormPublications, this.el.filterFormPublications.getAttribute('action'))\n\t\t\tfilterPagination.fxFilterNavigationHelper('.publications', this.el.filterFormPublications.getAttribute('action'), this.el.filterFormPublications)\n\t\t}\n\t}\n}\n\nsearchFilter.init()","/* global AOS*/\nconst aosAnimation = {\n\n\tinit() {\n\t\tconst aosSettings = {\n\t\t\t// Settings that can be overridden on per-element basis, by `data-aos-*` attributes:\n\t\t\tdelay: 200 // values from 0 to 3000, with step 50ms\n\t\t}\n\n\t\tAOS.init(aosSettings)\n\t}\n}\n\naosAnimation.init()","const areas = {\n\tel: {\n\t\theader: document.querySelector('header'),\n\t\tasideToggleMobile: document.querySelector('.js-toggle-aside'),\n\t\tsticky: document.querySelector('.sticky'),\n\t\tareasArticles: document.querySelectorAll('.areas'),\n\t\tareasScrollItem: document.querySelectorAll('.sticky [data-scroll]'),\n\t\tareasStickyItem: document.querySelectorAll('.sticky__item'),\n\t\tareasStickyItemCopy: document.querySelector('.sticky__item-sticky-copy'),\n\t\tareasFilter: document.querySelectorAll('.js-filter-courses'),\n\t\tarticlesContainer: document.querySelectorAll('.content__article'),\n\t\tcourses: document.querySelectorAll('[data-filter-courses]'),\n\t\tcardsBlock: document.querySelectorAll('.card-border__block')\n\t},\n\n\tvars: {\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\n\t},\n\n\tfxaAreasFilter() {\n\t\tthis.el.areasFilter.forEach(el => el.addEventListener('change', e => {\n\t\t\tsetTimeout(() => window.dispatchEvent(new Event('scroll')), 100)\n\n\t\t\tthis.el.sticky.classList.contains('is-aside-open') ? this.el.sticky.classList.remove('is-aside-open') : ''\n\n\t\t\tconst value = e.currentTarget.value\n\n\t\t\tif (value === '-1') {\n\t\t\t\t[...this.el.courses, ...this.el.cardsBlock, ...this.el.articlesContainer].forEach(el => el.removeAttribute('style'))\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tthis.el.articlesContainer.forEach(el => el.removeAttribute('style'))\n\t\t\t\tconst spacingBetweenArticles = 2 //20px\n\n\t\t\t\tsetTimeout(() => this.el.articlesContainer.forEach(el => el.style.height = `${el.offsetHeight/10 + spacingBetweenArticles}rem`), 100)\n\n\t\t\t\tconst filtered = [...this.el.courses].filter(el => el.dataset.filterCourses === value)\n\n\t\t\t\tthis.el.courses.forEach(el => {\n\t\t\t\t\tel.style.display = 'none'\n\t\t\t\t\tthis.el.cardsBlock.forEach(el => el.style.display = 'none')\n\n\t\t\t\t})\n\n\t\t\t\tfiltered.forEach(el => {\n\t\t\t\t\tel.style.display = 'block'\n\t\t\t\t\tel.closest('.card-border__block').style.display = 'block'\n\t\t\t\t})\n\t\t\t}\n\t\t}))\n\t},\n\n\tfxAreasSetActive(element, index) {\n\t\tif (window.pageYOffset >= element.offsetTop - this.el.header.offsetHeight - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? this.el.asideToggleMobile.offsetHeight : 0)) {\n\t\t\t[...this.el.areasScrollItem, ...this.el.areasStickyItem].forEach(el => el.classList.remove('is-active'))\n\t\t\tif (this.el.areasScrollItem[index])\n\t\t\t\tthis.el.areasScrollItem[index].classList.add('is-active')\n\n\t\t\tif (this.el.areasStickyItem[index])\n\t\t\t\tthis.el.areasStickyItem[index].classList.add('is-active')\n\n\t\t\tif (!this.vars.extraLargeAndUp.matches)\n\t\t\t\tthis.el.areasStickyItemCopy.textContent = document.querySelector('.sticky__item.is-active').textContent\n\t\t}\n\t},\n\n\tevents() {\n\t\t//set mobile item\n\t\tthis.el.areasStickyItemCopy.textContent = this.el.areasStickyItem[0].textContent\n\n\t\tthis.el.asideToggleMobile.addEventListener('click', e => {\n\t\t\te.currentTarget.parentElement.classList.toggle('is-aside-open')\n\t\t\tthis.el.areasStickyItemCopy.textContent = document.querySelector('.sticky__item.is-active') ? document.querySelector('.sticky__item.is-active').textContent : ''\n\t\t})\n\t\tthis.el.areasArticles.forEach((el, i) => window.addEventListener('load', e => {\n\t\t\t//highlight items while scroll\n\t\t\te.currentTarget.addEventListener('scroll', () => this.fxAreasSetActive(el, i))\n\t\t\t//on load\n\t\t\tthis.fxAreasSetActive(el, i)\n\t\t}))\n\t},\n\n\tinit() {\n\t\tif (!this.el.sticky) return\n\t\tthis.events()\n\t\tthis.fxaAreasFilter()\n\t}\n\n}\n\nareas.init()","const aside = {\n\tel: {\n\t\theader: document.querySelector('header'),\n\t\taside: document.querySelector('.aside'),\n\t\tasideStickyItemCopy: document.querySelector('.aside__item-sticky-copy'),\n\t\tasideScrollItem: document.querySelectorAll('.aside__item[data-scroll]'),\n\t\tasideToggleMobile: document.querySelector('.js-toggle-aside'),\n\t\tarticles: document.querySelectorAll('.js-article')\n\t},\n\n\tvars: {\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\n\t},\n\n\tfxAsideSetActive(element, index) {\n\t\tconst asideHalfHeight = this.el.aside.offsetHeight / 2\n\n\t\tif (window.pageYOffset >= element.offsetTop - this.el.header.offsetHeight - (this.el.asideToggleMobile && !this.vars.extraLargeAndUp.matches ? this.el.asideToggleMobile.offsetHeight : asideHalfHeight)) {\n\t\t\tthis.el.asideScrollItem.forEach(el => el.classList.remove('is-active'))\n\t\t\tif (this.el.asideScrollItem[index])\n\t\t\t\tthis.el.asideScrollItem[index].classList.add('is-active')\n\n\t\t\tif (!this.vars.extraLargeAndUp.matches)\n\t\t\t\tthis.el.asideStickyItemCopy.textContent = document.querySelector('.aside__item.is-active').textContent\n\t\t}\n\t},\n\n\tfxSetMobileText() {\n\t\tthis.el.asideStickyItemCopy.textContent = this.el.asideScrollItem[0].textContent\n\t},\n\n\tevents() {\n\t\tif (this.el.asideScrollItem.length > 1) {\n\t\t\tthis.el.asideToggleMobile.parentElement.classList.add('is-list')\n\t\t\tthis.el.asideToggleMobile.addEventListener('click', e => {\n\t\t\t\te.currentTarget.parentElement.classList.toggle('is-aside-open')\n\t\t\t\tthis.el.asideStickyItemCopy.textContent = document.querySelector('.aside__item.is-active') ? document.querySelector('.aside__item.is-active').textContent : ''\n\t\t\t})\n\t\t}\n\t\telse {\n\t\t\tthis.el.asideToggleMobile.classList.add('d-none')\n\t\t}\n\n\t\tthis.el.articles.forEach((el, i) => window.addEventListener('load', e => e.currentTarget.addEventListener('scroll', () => this.fxAsideSetActive(el, i))))\n\t},\n\n\tinit() {\n\t\tif (!this.el.aside) return\n\t\tthis.fxSetMobileText()\n\t\tthis.events()\n\t}\n}\n\naside.init()","/*global searchFilter */\nconst filter = {\n\tel: {\n\t\tbody: document.body,\n\t\tmodal: document.querySelector('.modal'),\n\t\tfilterFormModal: document.querySelectorAll('.js-filter-modal')\n\t},\n\n\tevents() {\n\t\tthis.el.filterFormModal.forEach(el => el.addEventListener('submit', e => {\n\t\t\te.preventDefault()\n\t\t\tsearchFilter.fxFilterResults(e.currentTarget)\n\t\t}))\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nfilter.init()","/* global http formValidation formHelper modal*/\nconst formContact = {\n\tel: {\n\t\thtml: document.documentElement,\n\t\tbody: document.body,\n\t\tcontact: document.querySelector('.js-form-contact')\n\t},\n\tfxFormEvents(selector) {\n\t\tif (!this.el.contact) return\n\n\t\tconst form = {\n\t\t\tel: document.querySelector(selector),\n\t\t\tbutton: document.querySelector(selector).querySelector('.js-submit')\n\t\t}\n\n\t\tform.el.addEventListener('submit', e => {\n\t\t\te.preventDefault()\n\n\t\t\tconst callback = info => {\n\n\t\t\t\tconsole.log('status')\n\t\t\t\tif (info.status === 200) {\n\t\t\t\t\tformHelper.fxShowMessage(form, form.el.dataset.msgSuccess)\n\n\t\t\t\t\tif (form.el.classList.contains('form-cookieless')) {\n\t\t\t\t\t\tmodal.fxCreateCookie('flyer-downloaded', true, 365)\n\t\t\t\t\t\tconst link = document.createElement('a'),\n\t\t\t\t\t\t\tfilename = form.button.dataset.url.split('/').pop()\n\n\t\t\t\t\t\tlink.href = form.button.dataset.url\n\t\t\t\t\t\tlink.download = filename\n\t\t\t\t\t\tlink.click()\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//handle error\n\t\t\t\tif (info.response) {\n\t\t\t\t\tif (info.response.status === 409)\n\t\t\t\t\t\tformHelper.fxShowMessage(form, form.el.dataset.msgConflict, 409)\n\n\t\t\t\t\tif (info.response.status === 500)\n\t\t\t\t\t\tformHelper.fxShowMessage(form, form.el.dataset.msgServer, 500)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (formValidation.fxValidate(e.currentTarget)) {\n\t\t\t\thttp.fxPost(e.currentTarget.getAttribute('action'), formHelper.fxFormToJson(e.currentTarget), callback)\n\t\t\t}\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.fxFormEvents('.js-form-contact')\n\t}\n}\n\nformContact.init()\n","const header = {\n\tel: {\n\t\thtml: document.documentElement,\n\t\theader: document.querySelector('.header'),\n\t\tmainContent: document.querySelector('.wrapper'),\n\t\tlogoStart: document.querySelector('.header__animated--start'),\n\t\tlogoMiddle: document.querySelector('.header__animated--middle'),\n\t\tlogoEndRect: document.querySelector('rect.header__animated--end'),\n\t\tlogoEndText: document.querySelector('path.header__animated--end')\n\n\t},\n\n\tevents() {\n\t\twindow.addEventListener('scroll', () => {\n\t\t\tif (this.el.html.scrollTop > 1) {\n\t\t\t\tthis.el.header.classList.add('header--fixed')\n\t\t\t\tthis.el.mainContent.style.paddingTop = `${this.el.header.offsetHeight/10}rem`\n\t\t\t\tthis.el.logoStart.classList.remove('header__animated--1')\n\t\t\t\tthis.el.logoMiddle.classList.remove('header__animated--2')\n\t\t\t\tthis.el.logoEndRect && this.el.logoEndRect.classList.remove('header__animated--3-1')\n\t\t\t\tthis.el.logoEndText && this.el.logoEndText.classList.remove('header__animated--3-2')\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.el.header.classList.remove('header--fixed')\n\t\t\t\tthis.el.mainContent.removeAttribute('style')\n\t\t\t\tthis.el.logoStart.classList.add('header__animated--1')\n\t\t\t\tthis.el.logoMiddle.classList.add('header__animated--2')\n\t\t\t\tthis.el.logoEndRect && this.el.logoEndRect.classList.add('header__animated--3-1')\n\t\t\t\tthis.el.logoEndText && this.el.logoEndText.classList.add('header__animated--3-2')\n\t\t\t}\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nheader.init()","const hero = {\n\tel: {\n\t\theroArticle: document.querySelector('.hero-article'),\n\t\theroArticleHeading: document.querySelector('.hero-article__heading'),\n\t\theroArticlePreHeading: document.querySelector('.hero-article__preheading'),\n\t\theroArticleInfo: document.querySelector('.hero-article__info'),\n\t\theroArticleContainer: document.querySelector('.hero-article__container')\n\t},\n\n\tvars: {\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\n\t},\n\n\tfxHeroInfoSpacing() {\n\t\tif (!this.el.heroArticle) return\n\n\t\t!this.el.heroArticleContainer ? this.el.heroArticle.style.paddingBottom = 0 : ''\n\n\t\tif (!this.el.heroArticleHeading) return\n\n\t\tconst preaheadingOuterHeight = this.el.heroArticlePreHeading ? this.el.heroArticlePreHeading.offsetHeight + parseInt(window.getComputedStyle(this.el.heroArticlePreHeading).getPropertyValue('margin-bottom')) : 0,\n\t\t\theadingOuterHeight = this.el.heroArticleHeading.offsetHeight + parseInt(window.getComputedStyle(this.el.heroArticleHeading).getPropertyValue('margin-bottom')),\n\t\t\ttotalHeadingHeight = headingOuterHeight + preaheadingOuterHeight\n\n\t\tthis.vars.extraLargeAndUp.matches ? this.el.heroArticleInfo.style.paddingTop = `${totalHeadingHeight/10}rem` : ''\n\t},\n\n\tinit() {\n\t\tthis.fxHeroInfoSpacing()\n\t}\n}\n\nhero.init()","const loadMore = {\n\tel: {\n\t\tbuttonLoadMore: document.querySelector('.js-loadmore')\n\t},\n\n\tloadContent(el) {\n\t\tlet numberOfItems = Number(el.dataset.results)\n\t\tconst articles = el.parentElement.querySelectorAll('.search-results__article'),\n\t\t\tarrayArticles = [...articles]\n\n\t\tarrayArticles.forEach(el => el.style.display = 'none')\n\n\t\tarrayArticles.slice(0, numberOfItems).forEach(el => el.style.display = 'block')\n\n\t},\n\n\tevents(el) {\n\t\tlet numberOfItems = Number(el.dataset.results)\n\t\tconst articles = el.parentElement.querySelectorAll('.search-results__article'),\n\t\t\tarrayArticles = [...articles]\n\n\t\tthis.el.buttonLoadMore.addEventListener('click', e => {\n\t\t\tnumberOfItems = numberOfItems + Number(el.dataset.results)\n\t\t\tarrayArticles.slice(0, numberOfItems).forEach(el => el.style.display = 'block')\n\t\t\tif (numberOfItems >= arrayArticles.length)\n\t\t\t\te.currentTarget.style.display = 'none'\n\t\t})\n\t},\n\n\tinit() {\n\t\tif (!this.el.buttonLoadMore) return\n\t\tthis.events(this.el.buttonLoadMore)\n\t\tthis.loadContent(this.el.buttonLoadMore)\n\t}\n}\n\nloadMore.init()","/* global Macy */\nconst masonryLayout = {\n\tel: {\n\t\tmasonryContainer: document.querySelector('.areas-grid')\n\t},\n\n\tfxMasonry() {\n\t\tif (!this.el.masonryContainer) return\n\n\t\tconst macy = new Macy({\n\t\t\tcontainer: '.areas-grid',\n\t\t\ttrueOrder: true,\n\t\t\tcolumns: 1,\n\t\t\tmobileFirst: true,\n\t\t\tmargin: {\n\t\t\t\tx: 30,\n\t\t\t\ty: 50\n\t\t\t},\n\t\t\tbreakAt: {\n\t\t\t\t1024: 2\n\t\t\t}\n\t\t})\n\n\t\twindow.addEventListener('resize', () => macy.recalculate(true))\n\t},\n\n\tinit() {\n\t\tthis.fxMasonry()\n\t}\n}\n\nmasonryLayout.init()","/* global http */\nconst modal = {\n\tel: {\n\t\tbody: document.body,\n\t\theader: document.querySelector('.header'),\n\t\tmodals: document.querySelectorAll('.modal'),\n\t\tmodalHeader: document.querySelector('.modal__header-copy'),\n\t\tmodalTitle: document.querySelector('.modal__heading'),\n\t\tmodalFlyerCourse: document.querySelector('.modal__grid-heading'),\n\t\tmodalFlyerInfo: document.querySelector('.modal__grid-posheading'),\n\t\tmodalFlyerImage: document.querySelector('.modal__grid-image'),\n\t\tmodalList: document.querySelector('.modal__list'),\n\t\tmodalCards: document.querySelector('.modal__cards'),\n\t\tmodalContent: document.querySelector('.modal__content'),\n\t\tmodalPrizesType: document.querySelector('.js-prizes-type'),\n\t\tmodalPrizesPartner: document.querySelector('.js-prizes-partner'),\n\t\tmodalPrizesContent: document.querySelector('.js-prizes-content'),\n\t\tmodalPrizesCaption: document.querySelector('.js-prizes-caption'),\n\t\tmodalOpen: document.querySelectorAll('.js-open-modal'),\n\t\tmodalClose: document.querySelectorAll('.js-close-modal')\n\t},\n\n\tfxGetTableStudies(element) {\n\t\tconst endpoint = `${element.closest('.js-modal-endpoint').dataset.endpoint}${element.dataset.tableId}`\n\n\t\tconst callback = response => {\n\t\t\tconst data = response.data\n\t\t\tdocument.querySelector('.modal-studyplans .modal__preloader').classList.add('d-none')\n\n\t\t\tif (response.status === 200) {\n\t\t\t\tthis.el.modalTitle.textContent = data.title\n\t\t\t\tthis.el.modalCards.querySelector('.modal__item-heading').textContent = data.teachers.title\n\n\t\t\t\tdata.list.forEach(el => {\n\t\t\t\t\tthis.el.modalList.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

    ${el.title}

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

    ${el.copy}

    \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\tdata.teachers.cards.forEach(el => {\n\t\t\t\t\tthis.el.modalCards.querySelector('.card-avatar').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\"${el.name}\"\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
    ${el.name}
    \n\t\t\t\t\t\t\t\t\t\t
    ${el.job}
    \n\t\t\t\t\t\t\t\t\t\t${el.email}\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}\n\t\t}\n\n\t\tdocument.querySelector('.modal-studyplans .modal__preloader').classList.remove('d-none')\n\t\thttp.fxGet(endpoint, callback)\n\t},\n\n\tfxGetTablePrizes(element) {\n\t\tconst endpoint = element.parentElement.dataset.endpoint\n\n\t\tconst callback = response => {\n\t\t\tconst data = response.data\n\t\t\tdocument.querySelector('.modal-prizes .modal__preloader').classList.add('d-none')\n\n\t\t\t//prevent Duplicates\n\t\t\tthis.el.modalPrizesContent.innerHTML = ''\n\t\t\tthis.el.modalPrizesCaption.innerHTML = ''\n\n\t\t\tdata.results.forEach(el => {\n\t\t\t\tif (response.status === 200 && Number(element.dataset.prizeId) === el.id) {\n\t\t\t\t\tthis.el.modalHeader.textContent = el.title\n\t\t\t\t\tthis.el.modalPrizesType.textContent = el.prizeType\n\t\t\t\t\tthis.el.modalPrizesPartner.textContent = el.partner ? `(${el.partner})` : ''\n\n\t\t\t\t\tel.info.forEach(el => {\n\t\t\t\t\t\tthis.el.modalPrizesContent.innerHTML +=\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${el.class}\n\t\t\t\t\t\t\t\t\t${el.course}\n\t\t\t\t\t\t\t\t\t${el.prize}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t`\n\t\t\t\t\t})\n\n\t\t\t\t\tel.caption.forEach(el => this.el.modalPrizesCaption.innerHTML += `
  • ${el.item}
  • `)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tdocument.querySelector('.modal-prizes .modal__preloader').classList.remove('d-none')\n\t\thttp.fxGet(endpoint, callback)\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\t\tdocument.cookie = `${name}=${value || ''}; ${expires}; path=/`\n\t},\n\n\tfxReadCookie(name) {\n\t\tlet cookie = {}\n\t\tdocument.cookie.split(';').forEach(el => {\n\t\t\tlet [key, value] = el.split('=')\n\t\t\tcookie[key.trim()] = value\n\t\t})\n\t\treturn cookie[name]\n\t},\n\n\tfxShowFlyer(element) {\n\t\tconst flyerDownloadedId = `flyer-downloaded-${element.dataset.flyerId}`\n\t\tthis.el.modalFlyerCourse.textContent = element.dataset.flyerText\n\t\tthis.el.modalFlyerImage.src = element.dataset.flyerImage\n\n\t\tif (this.fxReadCookie(flyerDownloadedId)) {\n\t\t\tthis.el.modalFlyerInfo.classList.add('d-none')\n\t\t\tdocument.querySelector('.form-cookieless') && document.querySelector('.form-cookieless').classList.add('d-none')\n\t\t\tdocument.querySelector('.js-button-download') && document.querySelector('.js-button-download').classList.remove('d-none')\n\t\t}\n\t},\n\n\tevents() {\n\t\tif (!this.el.modalOpen) return\n\n\t\tthis.el.modalOpen.forEach(el => el.addEventListener('click', e => {\n\n\t\t\tthis.el.body.classList.add('no-scroll-hidden')\n\t\t\tif (this.el.header.classList.contains('header--fixed')) {\n\t\t\t\tthis.el.header.classList.add('header--modal')\n\t\t\t\tthis.el.header.classList.remove('header--fixed')\n\t\t\t}\n\t\t\tthis.el.modalContent.classList.remove('d-none')\n\n\t\t\tswitch (true) {\n\t\t\t\tcase el.hasAttribute('data-table-id'):\n\t\t\t\t\te.currentTarget.hasAttribute('data-table-id') && document.querySelector('.modal-studyplans').classList.add('is-modal-open')\n\t\t\t\t\tthis.fxGetTableStudies(el)\n\t\t\t\t\tbreak\n\n\t\t\t\tcase el.hasAttribute('data-prize-id'):\n\t\t\t\t\te.currentTarget.hasAttribute('data-prize-id') && document.querySelector('.modal-prizes').classList.add('is-modal-open')\n\t\t\t\t\tthis.fxGetTablePrizes(el)\n\t\t\t\t\tbreak\n\n\t\t\t\tcase el.hasAttribute('data-flyer-id'):\n\t\t\t\t\te.currentTarget.hasAttribute('data-flyer-id') && document.querySelector('.modal-flyer').classList.add('is-modal-open')\n\t\t\t\t\tthis.fxShowFlyer(el)\n\t\t\t\t\tbreak\n\n\t\t\t\tcase el.hasAttribute('data-contacts-id'):\n\t\t\t\t\te.currentTarget.hasAttribute('data-contacts-id') && document.querySelector('.modal-contacts').classList.add('is-modal-open')\n\t\t\t\t\tbreak\n\n\t\t\t\tcase el.classList.contains('filter-search__button'):\n\t\t\t\t\te.currentTarget.classList.contains('filter-search__button') && document.querySelector('.modal-filter').classList.add('is-modal-open')\n\t\t\t\t\tbreak\n\n\t\t\t\tcase el.classList.contains('content__info-button'):\n\t\t\t\t\te.currentTarget.classList.contains('content__info-button') && document.querySelector('.modal-event').classList.add('is-modal-open')\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}))\n\n\t\tif (!this.el.modalClose) return\n\n\t\tthis.el.modalClose.forEach(el => el.addEventListener('click', () => {\n\t\t\tthis.el.modals.forEach(el => el.classList.remove('is-modal-open'))\n\t\t\tthis.el.body.classList.remove('no-scroll-hidden')\n\t\t\tif (this.el.header.classList.contains('header--modal')) {\n\t\t\t\tthis.el.header.classList.remove('header--modal')\n\t\t\t\tthis.el.header.classList.add('header--fixed')\n\t\t\t}\n\t\t\tthis.el.modalContent.classList.add('d-none')\n\n\t\t\tthis.el.modalList ? this.el.modalList.innerHTML = '' : ''\n\t\t\tthis.el.modalTitle ? this.el.modalTitle.innerHTML = '' : ''\n\t\t\tthis.el.modalPrizesContent ? this.el.modalPrizesContent.innerHTML = '' : ''\n\t\t\tif (this.el.modalCards) {\n\t\t\t\tthis.el.modalCards.querySelector('.modal__item-heading').innerHTML = ''\n\t\t\t\tthis.el.modalCards.querySelector('.card-avatar').innerHTML = ''\n\t\t\t}\n\t\t}))\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nmodal.init()","const nav = {\n\tel: {\n\t\tbody: document.body,\n\t\theader: document.querySelector('.header'),\n\t\tnav: document.querySelector('.nav'),\n\t\tnavLower: document.querySelector('.nav__lower'),\n\t\tnavItem: document.querySelectorAll('.nav__item'),\n\t\tnavBack: document.querySelectorAll('.js-back-first-level'),\n\t\tsubNav: document.querySelectorAll('.nav__wrap'),\n\t\tsubNavHeading: document.querySelectorAll('.nav__subheading'),\n\t\tsubNavItem: document.querySelectorAll('.nav__subitem'),\n\t\tsubNavBack: document.querySelectorAll('.js-back-second-level'),\n\t\tsubSubNav: document.querySelectorAll('.nav__menuwrap'),\n\t\taside: document.querySelector('.aside')\n\t},\n\n\tvars: {\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\n\t},\n\n\tfxNavToggle() {\n\t\tthis.el.nav.addEventListener('click', e => {\n\t\t\tif (e.target.classList.contains('nav') || e.target.classList.contains('nav__hamburger')) {\n\t\t\t\t!this.el.header.classList.contains('header--fixed') ? this.el.header.classList.add('header--fixed') : ''\n\t\t\t\tthis.el.body.classList.toggle('no-scroll-hidden')\n\t\t\t\tthis.el.nav.classList.toggle('is-nav-open')\n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-second-level', 'is-third-level'))\n\t\t\t\tthis.el.navItem.forEach(el => el.removeAttribute('style'))\n\t\t\t\tthis.el.subNavItem.forEach(el => el.removeAttribute('style'))\n\t\t\t\tthis.el.navLower.removeAttribute('style')\n\t\t\t\tif (this.el.aside) {\n\t\t\t\t\tthis.el.aside.classList.toggle('is-nav-open')\n\t\t\t\t\tthis.el.aside.classList.contains('is-nav-open') ? this.el.aside.classList.remove('is-nav-open') : ''\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t},\n\n\tfxNavBack(el, classRemove) {\n\t\tel.forEach(el => el.addEventListener('click', e => {\n\t\t\te.stopPropagation()\n\t\t\tthis.el.navLower.removeAttribute('style')\n\n\t\t\tif (classRemove === 'is-third-level') {\n\t\t\t\tthis.el.subSubNav.forEach(el => el.style.right = '-100%')\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove(classRemove))\n\t\t\t\t\tthis.el.subSubNav.forEach(el => el.removeAttribute('style'))\n\t\t\t\t\tthis.el.subNavItem.forEach(el => el.removeAttribute('style'))\n\t\t\t\t}, 500)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove(classRemove))\n\t\t\t\tthis.el.navItem.forEach(el => el.removeAttribute('style'))\n\t\t\t}\n\t\t}))\n\t},\n\n\tevents() {\n\t\tif (this.vars.extraLargeAndUp.matches) {\n\t\t\t//open submenu on hover\n\t\t\tthis.el.navItem.forEach(el => el.addEventListener('mouseenter', e => {\n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-hovered'))\n\t\t\t\te.currentTarget.querySelector('.nav__wrap') && e.currentTarget.querySelector('.nav__wrap').classList.add('is-hovered')\n\t\t\t}))\n\n\t\t\t//close menu on hover\n\t\t\tthis.el.header.addEventListener('mouseleave', () => this.el.subNav.forEach(el => el.classList.remove('is-hovered')))\n\t\t\tthis.el.navLower.addEventListener('mouseenter', () => this.el.subNav.forEach(el => el.classList.remove('is-hovered')))\n\t\t}\n\n\t\telse {\n\t\t\tthis.el.navItem.forEach(el => el.addEventListener('click', e => {\n\t\t\t\tif (e.currentTarget.querySelector('.nav__wrap')) {\n\t\t\t\t\tthis.el.navLower.style.display = 'none'\n\t\t\t\t\tthis.el.navItem.forEach(el => el.style.position = 'static')\n\t\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-second-level'))\n\t\t\t\t\te.currentTarget.querySelector('.nav__wrap').classList.add('is-second-level')\n\t\t\t\t}\n\t\t\t}))\n\n\t\t\tthis.el.subNavItem.forEach(el => el.addEventListener('click', e => {\n\t\t\t\tthis.el.subNavItem.forEach(el => el.style.display = 'none')\n\t\t\t\te.currentTarget.style.cssText = 'display: block; position: static;' \n\t\t\t\tthis.el.subNav.forEach(el => el.classList.remove('is-second-level', 'is-third-level'))\n\t\t\t\te.currentTarget.closest('.nav__wrap').classList.add('is-second-level', 'is-third-level')\n\t\t\t}))\n\t\t}\n\n\t},\n\tinit() {\n\t\tthis.fxNavBack(this.el.navBack, 'is-second-level')\n\t\tthis.fxNavBack(this.el.subNavBack, 'is-third-level')\n\t\tthis.fxNavToggle()\n\t\tthis.events()\n\t}\n}\n\nnav.init()","/* global http pagination scrollToElement*/\nconst news = {\n\tel: {\n\t\tnewsContainer: document.querySelector('.js-get-news')\n\t},\n\n\tvars: {\n\t\tcurrentPage: 1\n\t},\n\n\tfxGetNewsOnLoad() {\n\t\tconst endpoint = this.el.newsContainer.dataset.endpoint,\n\t\t\tpaginationList = this.el.newsContainer.nextElementSibling.querySelector('.pagination__list')\n\n\t\tconst callback = response => {\n\t\t\tthis.fxNewsCallback(response, '.media__list')\n\t\t\tpagination.fxPaginationHelper(response, paginationList)\n\t\t\tif (response.data.pagination.length > pagination.vars.maxPaginationItem)\n\t\t\t\tpaginationList.querySelectorAll(`.pagination__item:nth-of-type(n+${pagination.vars.maxPaginationItem+1}`).forEach(el => el.classList.add('is-hidden'))\n\t\t}\n\n\t\thttp.fxGet(endpoint, callback)\n\t},\n\n\tfxNewsCallback(response, selector) {\n\t\tconst data = response.data\n\t\tdocument.querySelector(selector).innerHTML = ''\n\n\t\tif (document.querySelector(selector).closest('.js-get-news')) {\n\t\t\tdata.results.forEach(el => {\n\t\t\t\tconst date = new Date(el.date),\n\t\t\t\t\tformattedDate = new Date(el.date).toLocaleDateString(),\n\t\t\t\t\tgetMonth = date.toLocaleDateString(this.el.newsContainer.dataset.language, { month: 'long' }),\n\t\t\t\t\ttarget = el.link.target === '_blank' ? el.link.target : '_self'\n\n\t\t\t\tdocument.querySelector(selector).innerHTML +=\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\t\t${el.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

    ${el.title}

    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t${el.link.name}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\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
    \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})\n\n\t\t\twindow.addEventListener('load', () => scrollToElement.fxScrollTo(document.querySelectorAll('.pagination__item, .pagination__button'), this))\n\t\t}\n\t},\n\n\tfxGetNewsPaginationItem() {\n\t\tdocument.addEventListener('click', e => {\n\t\t\tif (e.target && e.target.classList.contains('pagination__item') && e.target.offsetParent.querySelector('.js-get-news')) {\n\t\t\t\te.target.closest('.pagination__list').querySelectorAll('.pagination__item').forEach(el => el.classList.remove('is-active'))\n\t\t\t\te.target.classList.add('is-active')\n\n\t\t\t\tconst endpoint = this.el.newsContainer.dataset.endpoint,\n\t\t\t\t\tpaginationList = e.target.parentElement,\n\t\t\t\t\tpage = Number(e.target.querySelector('button').textContent)\n\n\t\t\t\tconst callback = response => this.fxNewsCallback(response, '.media__list--flex')\n\n\t\t\t\thttp.fxGet(`${endpoint.substring(0, endpoint.lastIndexOf('/') + 1)}${page}`, callback).then(response => {\n\t\t\t\t\tthis.vars.currentPage = response.data.pagination.filter(el => {\n\t\t\t\t\t\tif (el.currentPage) return el\n\t\t\t\t\t})[0].page\n\t\t\t\t\tpagination.fxPaginationItemHelper(response, paginationList, this.vars.currentPage)\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t},\n\n\tfxGetNewsNavigation() {\n\t\tpagination.el.paginationButtonPrev.forEach(el => el.addEventListener('click', e => {\n\t\t\tif (el.offsetParent.querySelector('.js-get-news')) {\n\t\t\t\tthis.vars.currentPage--\n\t\t\t\tpagination.fxNavigationHelper(this.el.newsContainer.dataset.endpoint, '.media__list--flex', e.target.nextElementSibling, this.vars.currentPage)\n\t\t\t}\n\t\t}))\n\n\t\tpagination.el.paginationButtonNext.forEach(el => el.addEventListener('click', e => {\n\t\t\tif (el.offsetParent.querySelector('.js-get-news')) {\n\t\t\t\tthis.vars.currentPage++\n\t\t\t\tpagination.fxNavigationHelper(this.el.newsContainer.dataset.endpoint, '.media__list--flex', e.target.previousElementSibling, this.vars.currentPage)\n\t\t\t}\n\t\t}))\n\t},\n\n\tinit() {\n\t\tif (!this.el.newsContainer) return\n\t\tthis.fxGetNewsOnLoad()\n\t\tthis.fxGetNewsPaginationItem()\n\t\tthis.fxGetNewsNavigation()\n\t}\n}\n\nnews.init()","/*global noUiSlider */\nconst range = {\n\tel: {\n\t\trangeSlider: document.querySelector('.js-range')\n\t},\n\n\tfxnoUiSlider() {\n\t\tif (!this.el.rangeSlider) return\n\t\t\n\t\tconst currentYear = new Date().getFullYear()\n\n\t\tnoUiSlider.create(this.el.rangeSlider, {\n\t\t\tstart: [2006, currentYear],\n\t\t\tconnect: true,\n\t\t\ttooltips: true,\n\t\t\tstep: 1,\n\t\t\tformat: {\n\t\t\t\tto: value => {\n\t\t\t\t\treturn Math.round(value)\n\t\t\t\t},\n\t\t\t\tfrom: value => {\n\t\t\t\t\treturn Math.round(value)\n\t\t\t\t}\n\t\t\t},\n\t\t\trange: {\n\t\t\t\t'min': 2006,\n\t\t\t\t'max': currentYear\n\t\t\t}\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.fxnoUiSlider()\n\t}\n}\n\nrange.init()","/*global http pagination searchFilter*/\nconst search = {\n\tel: {\n\t\tbody: document.body,\n\t\tsearch: document.querySelector('.search'),\n\t\tnav: document.querySelector('.nav'),\n\t\tform: document.querySelector('.general'),\n\t\tfilterFormModal: document.querySelectorAll('.js-filter'),\n\t\tsearchOpen: document.querySelectorAll('.js-open-search'),\n\t\tsearchClose: document.querySelector('.js-close-search'),\n\t\tsearchHighlights: document.querySelector('.search__highlights')\n\t},\n\n\tvars: {\n\t\ttimer: '',\n\t\tcurrentPage: 1,\n\t\tendpoint: `${document.querySelector('.general').getAttribute('action')}/`\n\t},\n\n\tfxHideHighlights() {\n\t\tconst search = this.el.search\n\n\t\tthis.el.searchHighlights && this.el.searchHighlights.removeAttribute('style')\n\n\t\tsearch.querySelector('.search-results').classList.remove('has-value')\n\t\tsearch.querySelector('.filter-search__text').classList.remove('has-value')\n\t\tsearch.querySelector('.pagination').classList.remove('has-value')\n\t},\n\n\tfxClearSearch() {\n\t\tconst search = this.el.search,\n\t\t\tclearButton = search.querySelector('.js-search-clean'),\n\t\t\tinput = search.querySelector('.js-autocomplete'),\n\t\t\tsearchResults = search.querySelector('.search-results'),\n\t\t\tsearchResultsContent = searchResults.innerHTML\n\n\t\tclearButton.addEventListener('click', e => {\n\t\t\te.currentTarget.removeAttribute('style')\n\t\t\tinput.value = ''\n\t\t\tthis.el.searchHighlights && this.fxHideHighlights()\n\t\t\tsearchResults.innerHTML = searchResultsContent\n\t\t\tthis.vars.currentPage = 1\n\t\t})\n\t},\n\n\t//pagination\n\tfxGetResultsPaginationButton() {\n\t\tif (!pagination.el.paginationButtonPrev || !pagination.el.paginationButtonNext) return\n\t\tpagination.el.paginationButtonPrev.forEach(el => el.addEventListener('click', e => {\n\t\t\tconst search = e.target.closest('.search')\n\n\t\t\tif (search) {\n\t\t\t\tthis.vars.currentPage--\n\t\t\t\tpagination.fxNavigationHelper(this.vars.endpoint, '.search-results', e.target.nextElementSibling, this.vars.currentPage)\n\t\t\t}\n\t\t}))\n\n\t\tpagination.el.paginationButtonNext.forEach(el => el.addEventListener('click', e => {\n\t\t\tconst search = e.target.closest('.search')\n\n\t\t\tif (search) {\n\t\t\t\tthis.vars.currentPage++\n\t\t\t\tpagination.fxNavigationHelper(this.vars.endpoint, '.search-results', e.target.previousElementSibling, this.vars.currentPage)\n\t\t\t}\n\t\t}))\n\t},\n\n\tfxGetResultsPaginationItem() {\n\t\tconst input = this.el.search.querySelector('.js-autocomplete')\n\n\t\tdocument.addEventListener('click', e => {\n\t\t\tif (e.target && e.target.classList.contains('pagination__item') && e.target.closest('.search')) {\n\t\t\t\tconst paginationItem = e.target,\n\t\t\t\t\tpaginationAllItems = paginationItem.closest('.pagination__list').querySelectorAll('.pagination__item'),\n\t\t\t\t\tpage = Number(paginationItem.querySelector('button').textContent),\n\t\t\t\t\tpaginationList = paginationItem.parentElement\n\n\t\t\t\tpaginationAllItems.forEach(el => el.classList.remove('is-active'))\n\t\t\t\tpaginationItem.classList.add('is-active')\n\n\t\t\t\tconst callback = response => {\n\t\t\t\t\tpagination.fxPaginationHelper(response, paginationList)\n\t\t\t\t\tthis.fxSearchCallback(response, page)\n\t\t\t\t}\n\n\t\t\t\thttp.fxGet(`${this.vars.endpoint.substring(0, this.vars.endpoint.lastIndexOf('/') + 1)}${input.value}/${page}`, callback).then(response => {\n\t\t\t\t\tthis.vars.currentPage = response.data.pagination.filter(el => {\n\t\t\t\t\t\tif (el.currentPage) return el\n\t\t\t\t\t})[0].page\n\t\t\t\t\tpagination.fxPaginationItemHelper(response, paginationList, this.vars.currentPage)\n\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t},\n\n\tfxGetResultsOnEvents() {\n\t\tconst input = this.el.search.querySelector('.js-autocomplete')\n\n\t\tinput.addEventListener('keydown', e => {\n\t\t\tif (e.key === 'Enter') {\n\t\t\t\te.preventDefault()\n\t\t\t\tif (input.value.length >= 3)\n\t\t\t\t\tthis.fxSearch(input.value)\n\t\t\t}\n\t\t})\n\n\t\tthis.el.search.querySelector('.js-search-filter').addEventListener('click', e => {\n\t\t\te.preventDefault()\n\t\t\tthis.fxSearch(input.value)\n\t\t})\n\t},\n\n\tfxAutocomplete() {\n\t\tconst search = this.el.search,\n\t\t\tclearButton = search.querySelector('.js-search-clean'),\n\t\t\tinput = search.querySelector('.js-autocomplete'),\n\t\t\tsearchResults = search.querySelector('.search-results'),\n\t\t\tsearchResultsContent = searchResults.innerHTML\n\n\t\tinput.addEventListener('input', () => {\n\t\t\tif (input.value.length >= 3) {\n\t\t\t\tthis.el.searchHighlights ? this.el.searchHighlights.style.display = 'none' : ''\n\t\t\t\tinput.nextElementSibling.style.display = 'block'\n\n\t\t\t\tclearTimeout(this.vars.timer)\n\n\t\t\t\tthis.vars.timer = setTimeout(() => {\n\t\t\t\t\tthis.fxSearch(input.value)\n\t\t\t\t\tsearch.querySelector('.search-results').classList.add('has-value')\n\t\t\t\t\tsearch.querySelector('.filter-search__text').classList.add('has-value')\n\t\t\t\t\tsearch.querySelector('.pagination').classList.add('has-value')\n\t\t\t\t}, 1000)\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclearButton.removeAttribute('style')\n\t\t\t\tthis.el.searchHighlights && this.fxHideHighlights()\n\t\t\t\tthis.vars.currentPage = 1\n\n\t\t\t\tif (input.value.length === 0) {\n\t\t\t\t\tsearchResults.innerHTML = searchResultsContent\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t},\n\n\tfxSearchCallback(response, page) {\n\t\tconst searchContainer = this.el.search,\n\t\t\tnoResults = this.el.form.dataset.msgNoResults,\n\t\t\tpaginationList = searchContainer.querySelector('.pagination__list'),\n\t\t\tdata = response.data\n\n\t\t//prevent duplicate push\n\t\tsearchContainer.querySelector('.search-results').innerHTML = ''\n\n\t\t//numberOfResults\n\t\tsearchContainer.querySelector('.js-total-results').textContent = data.numberOfResults\n\n\t\tif (data.results.length === 0) {\n\t\t\tsearchContainer.querySelector('.pagination').style.display = 'none'\n\t\t\tsearchContainer.querySelector('.search-results').innerHTML = noResults\n\t\t}\n\n\t\telse {\n\t\t\t//pagination load\n\t\t\tif (page === undefined) {\n\t\t\t\tpagination.fxPaginationHelper(response, paginationList)\n\t\t\t\tif (data.pagination.length > pagination.vars.maxPaginationItem)\n\t\t\t\t\tpaginationList.querySelectorAll(`.pagination__item:nth-of-type(n+${pagination.vars.maxPaginationItem+1}`).forEach(el => el.classList.add('is-hidden'))\n\t\t\t}\n\n\t\t\tdata.results.forEach(el => {\n\t\t\t\tsearchContainer.querySelector('.pagination').removeAttribute('style')\n\t\t\t\tsearchContainer.querySelector('.search-results').innerHTML +=\n\t\t\t\t\t`\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t

    ${el.title}

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

    ${el.description}

    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t${el.link.caption}\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\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})\n\t\t}\n\t\tsearchContainer.querySelector('.js-autocomplete').scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' })\n\t},\n\n\tfxSearch(term) {\n\t\tconst query = `${term}/1`\n\n\t\tconst callback = response => this.fxSearchCallback(response)\n\n\t\thttp.fxGet(`${this.vars.endpoint}${query}`, callback)\n\t},\n\n\tfxToggleModal() {\n\t\tconst search = this.el.search\n\n\t\tif (!this.el.searchOpen) return\n\n\t\tthis.el.searchOpen.forEach(el => el.addEventListener('click', () => {\n\t\t\tthis.el.searchHighlights && this.el.searchHighlights.removeAttribute('style')\n\t\t\tsearch.classList.add('is-search-open')\n\t\t\tthis.el.body.classList.add('no-scroll-hidden')\n\t\t\tthis.el.nav.classList.remove('is-nav-open')\n\t\t}))\n\n\t\tif (!this.el.searchClose) return\n\n\t\tthis.el.searchClose.addEventListener('click', e => {\n\t\t\te.preventDefault()\n\t\t\tsearch.classList.remove('is-search-open')\n\t\t\tthis.el.body.classList.remove('no-scroll-hidden')\n\t\t\tsearch.querySelector('.js-search-clean').removeAttribute('style')\n\t\t\tsearch.querySelector('.js-autocomplete').value = ''\n\t\t\tsearch.querySelector('.search-results').classList.remove('has-value')\n\t\t\tsearch.querySelector('.filter-search__text').classList.remove('has-value')\n\t\t\tsearch.querySelector('.pagination').classList.remove('has-value')\n\t\t\tthis.el.filterFormModal.forEach(el => searchFilter.fxFilterResults(el))\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.fxAutocomplete()\n\t\tthis.fxClearSearch()\n\t\tthis.fxGetResultsOnEvents()\n\t\tthis.fxGetResultsPaginationButton()\n\t\tthis.fxGetResultsPaginationItem()\n\t\tthis.fxToggleModal()\n\t}\n\n}\n\nsearch.init()","/* global Swiper */\nconst sliders = {\n\tel: {\n\t\tsliderContainer: document.querySelectorAll('.js-slider')\n\t},\n\n\tvars: {\n\t\tmediumAndUp: window.matchMedia('(min-width: 48em)'),\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\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 slider = new Swiper(el, {\n\t\t\tslidesPerView: sliderSizeSmall ? sliderSizeSmall : 1,\n\t\t\tcenteredSlides: sliderCentered ? sliderCentered : 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\tthreshold: el.closest('.slider-quote') ? 10000 : 0,\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.closest('.slider-quote') ? '.js-slider-next' : el.querySelector('.swiper-button-next'),\n\t\t\t\tprevEl: el.closest('.slider-quote') ? '.js-slider-prev' : 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\t1280: { //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(() => {\n\t\t\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t\t\t\tif (el.querySelector('.swiper-slide-active .js-video') && el.querySelector('.swiper-slide-active .js-video').classList.contains('js-autoplay')) {\n\t\t\t\t\t\tslider.autoplay.stop()\n\n\t\t\t\t\t\tconst quoteParent = slider.el.closest('.slider-quote')\n\n\t\t\t\t\t\tif (quoteParent) {\n\t\t\t\t\t\t\tconst siblingSwiper = quoteParent.querySelector('.slider-quote__wrap .swiper-container')\n\n\t\t\t\t\t\t\tif (siblingSwiper && siblingSwiper.swiper) {\n\t\t\t\t\t\t\t\tsiblingSwiper.swiper.autoplay.stop()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tel.querySelector('.js-autoplay video').load()\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tslider.autoplay.start()\n\n\t\t\t\t\t\tconst quoteParent = slider.el.closest('.slider-quote')\n\n\t\t\t\t\t\tif (quoteParent) {\n\t\t\t\t\t\t\tconst siblingSwiper = quoteParent.querySelector('.slider-quote__wrap .swiper-container')\n\n\t\t\t\t\t\t\tif (siblingSwiper && siblingSwiper.swiper) {\n\t\t\t\t\t\t\t\tsiblingSwiper.swiper.autoplay.start()\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}, 100),\n\n\t\t\t\tslideChange: () => {\n\t\t\t\t\tif (el.querySelector('.js-video')) {\n\t\t\t\t\t\tel.closest('.slider-hero') && el.closest('.slider-hero').classList.contains('hidden-progress-bar') && el.closest('.slider-hero').classList.remove('hidden-progress-bar')\n\t\t\t\t\t\tel.querySelectorAll('.js-video').forEach(el => {\n\t\t\t\t\t\t\tconst videoPlayer = el.querySelector('video')\n\t\t\t\t\t\t\tconst progressBar = el.querySelector('.js-video-seekbar')\n\t\t\t\t\t\t\tprogressBar.value = 0\n\t\t\t\t\t\t\tvideoPlayer.pause()\n\t\t\t\t\t\t\tvideoPlayer.currentTime = 0\n\t\t\t\t\t\t\tvideoPlayer.load()\n\t\t\t\t\t\t\tvideoPlayer.muted = true\n\t\t\t\t\t\t\tvideoPlayer.closest('.swiper-slide').classList.remove('video-is-playing')\n\t\t\t\t\t\t\tvideoPlayer.parentElement.querySelector('.js-video-play').classList.contains('is-playing') && videoPlayer.parentElement.querySelector('.js-video-play').classList.remove('is-playing')\n\t\t\t\t\t\t\tvideoPlayer.parentElement.querySelector('.js-video-sound').classList.contains('has-sound') && videoPlayer.parentElement.querySelector('.js-video-sound').classList.remove('has-sound')\n\t\t\t\t\t\t})\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tif (el.querySelector('.swiper-slide-active .js-video') && el.querySelector('.swiper-slide-active .js-video').classList.contains('js-autoplay')) {\n\t\t\t\t\t\t\t\tslider.autoplay.stop()\n\n\t\t\t\t\t\t\t\tconst quoteParent = slider.el.closest('.slider-quote')\n\n\t\t\t\t\t\t\t\tif (quoteParent) {\n\t\t\t\t\t\t\t\t\tconst siblingSwiper = quoteParent.querySelector('.slider-quote__wrap .swiper-container')\n\n\t\t\t\t\t\t\t\t\tif (siblingSwiper && siblingSwiper.swiper) {\n\t\t\t\t\t\t\t\t\t\tsiblingSwiper.swiper.autoplay.stop()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tel.querySelector('.js-autoplay video').load()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tslider.autoplay.start()\n\n\t\t\t\t\t\t\t\tconst quoteParent = slider.el.closest('.slider-quote')\n\n\t\t\t\t\t\t\t\tif (quoteParent) {\n\t\t\t\t\t\t\t\t\tconst siblingSwiper = quoteParent.querySelector('.slider-quote__wrap .swiper-container')\n\n\t\t\t\t\t\t\t\t\tif (siblingSwiper && siblingSwiper.swiper) {\n\t\t\t\t\t\t\t\t\t\tsiblingSwiper.swiper.autoplay.start()\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}, 100)\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\ttransitionStart: () => {\n\t\t\t\t\tif (this.vars.extraLargeAndUp.matches && el.parentElement.classList.contains('slider-media__grid'))\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb').style.display = 'none'\n\t\t\t\t},\n\n\t\t\t\ttransitionEnd: () => {\n\t\t\t\t\tif (this.vars.extraLargeAndUp.matches && el.parentElement.classList.contains('slider-media__grid') && !el.swiper.slides[el.swiper.slides.length - 1].classList.contains('swiper-slide-active')) {\n\n\t\t\t\t\t\tconst nextSlide = el.querySelector('.swiper-slide-next'),\n\t\t\t\t\t\t\tnextSlideTitle = nextSlide.querySelector('.beta').innerHTML,\n\t\t\t\t\t\t\tnextSlideImage = nextSlide.querySelector('.slider-media__image').src\n\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb').style.display = 'flex'\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb-heading').innerHTML = nextSlideTitle\n\t\t\t\t\t\tel.querySelector('.slider-media__thumb-image').src = nextSlideImage\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\treachEnd: () => {\n\t\t\t\t\tif (this.vars.extraLargeAndUp.matches && el.parentElement.classList.contains('slider-media__grid')) {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst nextSlide = el.querySelector('[data-swiper-slide-index=\"1\"]'),\n\t\t\t\t\t\t\t\tnextSlideTitle = nextSlide.querySelector('.beta').innerHTML,\n\t\t\t\t\t\t\t\tnextSlideImage = nextSlide.querySelector('.slider-media__image').src\n\n\t\t\t\t\t\t\tel.querySelector('.slider-media__thumb').style.display = 'flex'\n\t\t\t\t\t\t\tel.querySelector('.slider-media__thumb-heading').innerHTML = nextSlideTitle\n\t\t\t\t\t\t\tel.querySelector('.slider-media__thumb-image').src = nextSlideImage\n\t\t\t\t\t\t}, 300)\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tresize: () => !this.vars.extraLargeAndUp.matches && document.querySelector('.slider-media__thumb') ? document.querySelector('.slider-media__thumb').style.display = 'none' : ''\n\n\t\t\t}\n\t\t})\n\n\t\tif (!document.querySelector('.js-next-slide')) return\n\t\tdocument.querySelector('.js-next-slide').addEventListener('click', () => slider.slideNext())\n\t},\n\n\tinit() {\n\t\tthis.el.sliderContainer.forEach(el => {\n\t\t\tif (el.querySelectorAll('.swiper-slide').length === 1) {\n\t\t\t\tif (el.closest('.slider-hero')) {\n\t\t\t\t\tel.querySelector('.slider-hero__nav-pagination').classList.add('d-none')\n\t\t\t\t\tel.closest('.slider-hero').classList.add('hidden-progress-bar')\n\t\t\t\t}\n\t\t\t\tif (el.closest('.slider-media')) {\n\t\t\t\t\tel.querySelector('.slider-media__thumb').classList.add('d-none')\n\t\t\t\t\tel.querySelector('.slider-media__nav-pagination').classList.add('d-none')\n\t\t\t\t\tel.querySelector('.slider-media__container').classList.add('hidden-progress-bar')\n\t\t\t\t}\n\t\t\t\tel.closest('.slider-quote') && el.querySelector('.slider-quote__navigation') && el.querySelector('.slider-quote__navigation').classList.add('d-none')\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis.fxInitSlider(el)\n\t\t})\n\n\t}\n}\nsliders.init()\n","/* global Swiper */\nconst sliderBox = {\n\tel: {\n\t\tsliderContainerCommand: document.querySelectorAll('.js-slider-box-command'),\n\t\tsliderContainerController: document.querySelectorAll('.js-slider-box-controller')\n\t},\n\n\tfxInitSlider(el, elementControll) {\n\t\tconst sliderPaginationType = el.dataset.sliderPaginationType ? el.dataset.sliderPaginationType : ''\n\n\t\tconst swiperOptions = {\n\t\t\twatchOverflow: true,\n\t\t\tnavigation: {\n\t\t\t\tnextEl: el.parentElement.querySelector('.swiper-button-next'),\n\t\t\t\tprevEl: el.parentElement.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: true,\n\t\t\t\ttype: sliderPaginationType ? sliderPaginationType : 'bullets' //\"bullets\", \"fraction\", \"progressbar\" or \"custom\" (default:\"bullets\")\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\t// this way we can define which swiper instace controls the other\n\t\tnew Swiper(el, swiperOptions).controller.control = new Swiper(elementControll)\n\t},\n\n\tinit() {\n\t\tthis.el.sliderContainerController.forEach(el => {\n\t\t\tconst previousElement = el.parentElement.previousElementSibling.querySelector('.js-slider-box-command')\n\t\t\tthis.fxInitSlider(el, previousElement)\n\t\t})\n\n\t\t// this is the slider that controlls the other\n\t\tthis.el.sliderContainerCommand.forEach(el => {\n\t\t\tconst nextElement = el.parentElement.nextElementSibling.querySelector('.js-slider-box-controller')\n\t\t\tthis.fxInitSlider(el, nextElement)\n\t\t})\n\t}\n}\nsliderBox.init()","const social = {\n\tel: {\n\t\tsocialItem: document.querySelectorAll('.js-social')\n\t},\n\n\tfxPopupCenter(url, w = 600, h = 400) {\n\t\tconst dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left,\n\t\t\tdualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top,\n\t\t\twidth = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width,\n\t\t\theight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height,\n\t\t\tleft = ((width / 2) - (w / 2)) + dualScreenLeft,\n\t\t\ttop = ((height / 2) - (h / 2)) + dualScreenTop,\n\t\t\tnewWindow = window.open(url, 'Share', `scrollbars=yes, width=${w}, height=${h}, top=${top}, left=${left}`)\n\t\t// Puts focus on the newWindow \n\t\twindow.focus ? newWindow.focus() : ''\n\t},\n\n\tevents() {\n\t\tthis.el.socialItem.forEach(el => el.addEventListener('click', e => {\n\t\t\te.preventDefault()\n\t\t\tconst encodedShareUrl = decodeURIComponent(location.href),\n\t\t\t\tshareUrl = `${e.currentTarget.dataset.url}${encodedShareUrl}`\n\n\t\t\tthis.fxPopupCenter(shareUrl)\n\t\t}))\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n\n}\n\nsocial.init()","/*global http*/\nconst tableFilter = {\n\tel: {\n\t\tfilterSelect: document.querySelectorAll('.js-filter-table'),\n\t\tfilterSelectContainer: document.querySelector('.table__selects'),\n\t\ttableHeading: document.querySelector('.js-table-heading'),\n\t\ttableContainer: document.querySelector('.js-table-content'),\n\t\tselectYears: document.querySelector('.js-years'),\n\t\tselectCourses: document.querySelector('.js-courses')\n\t},\n\n\tfxFilter(students, type) {\n\t\tconst filteredResults = [...students].filter(el => el.type === type.value),\n\t\t\tmsgNoResults = this.el.filterSelectContainer.dataset.msgNoResults,\n\t\t\tcellHeading = document.createElement('th')\n\n\t\tcellHeading.classList.add('table__cell', 'text-right', 'js-table-header')\n\t\t\n\t\tif (filteredResults.length === 0) {\n\t\t\tthis.el.tableContainer.innerHTML +=\n\t\t\t\t`\n\t\t\t\t\t\n\t\t\t\t\t\t${msgNoResults}\n\t\t\t\t\t\n\t\t\t\t`\n\t\t}\n\n\t\telse if (type.options[type.selectedIndex].dataset.extrafieldenabled === 'True') {\n\t\t\tcellHeading.textContent = type.options[type.selectedIndex].dataset.extrafieldheader\n\t\t\tthis.el.tableHeading.appendChild(cellHeading)\n\n\t\t\tfilteredResults.forEach(el => {\n\t\t\t\tthis.el.tableContainer.innerHTML +=\n\t\t\t\t\t`\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t${el.name}\n\t\t\t\t\t\t\t${el.average}\n\t\t\t\t\t\t\t${el.field}\n\t\t\t\t\t\t\n\t\t\t\t\t`\n\t\t\t})\n\t\t}\n\t\t\n\t\telse {\n\t\t\tfilteredResults.forEach(el => {\n\t\t\t\tthis.el.tableContainer.innerHTML +=\n\t\t\t\t\t`\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t${el.name}\n\t\t\t\t\t\t\t${el.average}\n\t\t\t\t\t\t\n\t\t\t\t\t`\n\t\t\t})\n\t\t}\n\t},\n\n\tevents() {\n\t\tif (!this.el.filterSelectContainer) return\n\n\t\tconst endpoint = this.el.filterSelectContainer.dataset.endpoint\n\n\t\tthis.el.filterSelect.forEach(select => {\n\t\t\tselect.addEventListener('change', e => {\n\t\t\t\tconst callback = response => {\n\t\t\t\t\tconst data = response.data\n\n\t\t\t\t\tthis.el.tableContainer.innerHTML = ''\n\t\t\t\t\tdocument.querySelector('.js-table-header') ? this.el.tableHeading.removeChild(document.querySelector('.js-table-header')) : ''\n\n\t\t\t\t\tdata.forEach(item => {\n\t\t\t\t\t\tif (select.classList.contains('js-years') && select.value === item.year)\n\t\t\t\t\t\t\tthis.fxFilter(item.students, this.el.selectCourses)\n\t\t\t\t\t\telse if (item.year === this.el.selectYears.value)\n\t\t\t\t\t\t\tthis.fxFilter(item.students, e.target)\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\thttp.fxGet(endpoint, callback)\n\n\t\t\t})\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\ntableFilter.init()","const toggle = {\n\tel: {\n\t\taccordionToggle: document.querySelectorAll('.js-toggle-accordion'),\n\t\tfilterToggle: document.querySelectorAll('.js-toggle-filter'),\n\t\ttableCaptionToggle: document.querySelectorAll('.js-toggle-caption'),\n\t\tasideList: document.querySelectorAll('.js-toggle-aside-list')\n\t},\n\n\tvars: {\n\t\textraLargeAndUp: window.matchMedia('(min-width: 80em)')\n\t},\n\n\tfxToggleElement(el) {\n\t\tif (el) {\n\t\t\tel.forEach(el => el.addEventListener('click', e => {\n\t\t\t\te.currentTarget.classList.toggle('is-toggled')\n\t\t\t\te.currentTarget.nextElementSibling.classList.toggle(el.classList.contains('js-toggle-aside-list') || (el.classList.contains('js-toggle-filter') && this.vars.extraLargeAndUp.matches) ? 'is-toggle-close' : 'is-toggle-open')\n\t\t\t\tif (el.classList.contains('js-toggle-caption'))\n\t\t\t\t\tel.textContent = el.classList.contains('is-toggled') ? el.dataset.captionHide : el.dataset.captionShow\n\t\t\t}))\n\t\t}\n\t},\n\n\tevents() {\n\t\tthis.fxToggleElement(this.el.accordionToggle)\n\t\tthis.fxToggleElement(this.el.filterToggle)\n\t\tthis.fxToggleElement(this.el.tableCaptionToggle)\n\t\tif (this.vars.extraLargeAndUp.matches)\n\t\t\tthis.fxToggleElement(this.el.asideList)\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\ntoggle.init()","const urlSource = {\n\tevents() {\n\t\tif (!new URLSearchParams(window.location.search).has('utm_source')) return\n\n\t\tconst date = new Date()\n\t\tlet socialSourceCookie = ''\n\n\t\tconst getCookieValue = (cookieName) => {\n\t\t\tconst cookieString = document.cookie\n\t\t\t\t.split('; ')\n\t\t\t\t.find(row => row.startsWith(cookieName + '='))\n\t\t\treturn cookieString ? decodeURIComponent(cookieString.split('=')[1]) : null\n\t\t}\n\n\t\t// Get the Portugal time using Intl.DateTimeFormat\n\t\tconst options = { timeZone: 'Europe/Lisbon', hour12: false }\n\t\tconst formatter = new Intl.DateTimeFormat('en-CA', {\n\t\t\t...options,\n\t\t\tyear: 'numeric',\n\t\t\tmonth: '2-digit',\n\t\t\tday: '2-digit',\n\t\t\thour: '2-digit',\n\t\t\tminute: '2-digit',\n\t\t\tsecond: '2-digit'\n\t\t})\n\n\t\t// Format the date and extract parts\n\t\tconst [datePart, timePart] = formatter.format(date).split(', ')\n\t\tconst formattedDate = `${datePart}T${timePart}`\n\n\t\tlet socialSourceObj = {}\n\n\t\tconst splitUrl = window.location.href.split('?')\n\t\tconst queryStringBreak = splitUrl[1].split('&')\n\n\t\tqueryStringBreak.forEach( item => {\n\t\t\tconst keyPair = item.split('=')\n\t\t\tsocialSourceObj[keyPair[0]] = keyPair[1]\n\t\t})\n\n\t\tsocialSourceObj.date = formattedDate\n\t\tsocialSourceObj.url = String(window.location.href)\n\n\t\tconst storageConsent = localStorage.getItem('__unic_consent_mode')\n\t\tconst parsedStorageConsent = JSON.parse(storageConsent)\n\n\t\tif (storageConsent && parsedStorageConsent['ad_storage'] === 'granted') {\n\t\t\tif(document.cookie && document.cookie.includes('social_media_source=')) {\n\t\t\t\tsocialSourceCookie = JSON.parse(getCookieValue('social_media_source'))\n\t\t\t\tsocialSourceCookie.push(socialSourceObj)\n\t\t\t\tdocument.cookie = `social_media_source=${encodeURIComponent(JSON.stringify(socialSourceCookie))}`\n\t\t\t} else {\n\t\t\t\tsocialSourceCookie = []\n\t\t\t\tsocialSourceCookie.push(socialSourceObj)\n\n\t\t\t\tdocument.cookie = `social_media_source=${encodeURIComponent(JSON.stringify(socialSourceCookie))}`\n\t\t\t}\n\t\t} else {\n\t\t\tsocialSourceCookie = []\n\t\t\tsocialSourceCookie.push(socialSourceObj)\n \n\t\t\tsessionStorage.setItem('social_media_source', encodeURIComponent(JSON.stringify(socialSourceCookie)))\n\t\t}\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nurlSource.init()\n","const video = {\n\tel: {\n\t\tvideoContainer: document.querySelectorAll('.js-video')\n\t},\n\n\tfxTabSwitch(videoPlayer) {\n\t\tlet inTab = true\n\t\tdocument.addEventListener('visibilitychange', () => {\n\t\t\tinTab = !inTab\n\t\t\tinTab && videoPlayer.parentElement.querySelector('.js-video-play').classList.contains('is-playing') ? videoPlayer.play() : videoPlayer.pause()\n\t\t})\n\t},\n\n\tfxTimeUpdateVideos(videoPlayer) {\n\t\tif (videoPlayer.parentElement.querySelector('.js-video-play').classList.contains('is-playing')) {\n\t\t\tvideoPlayer.addEventListener('timeupdate', e => {\n\t\t\t\tif (e.currentTarget.currentTime || e.currentTarget.duration) {\n\t\t\t\t\tconst percentage = Math.round((e.currentTarget.currentTime / e.currentTarget.duration) * 100)\n\t\t\t\t\te.currentTarget.parentElement.querySelector('.js-video-seekbar').value = percentage\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t},\n\n\tfxActionsOnEndVideo(videoPlayer) {\n\t\tvideoPlayer.addEventListener('ended', () => {\n\t\t\tvideoPlayer.parentElement.querySelector('.js-video-play').classList.remove('is-playing')\n\t\t\tvideoPlayer.currentTime = 0\n\t\t\tvideoPlayer.load()\n\t\t})\n\t},\n\n\tfxTogglePlayVideo(videoPlayer, playButton) {\n\t\tplayButton.addEventListener('click', e => {\n\t\t\te.currentTarget.classList.toggle('is-playing')\n\t\t\tvideoPlayer.paused ? videoPlayer.play() : videoPlayer.pause()\n\t\t\tthis.fxTimeUpdateVideos(videoPlayer)\n\t\t})\n\t},\n\n\tfxToggleSoundVideo(videoPlayer, soundButton) {\n\t\tsoundButton.addEventListener('click', e => {\n\t\t\te.currentTarget.classList.toggle('has-sound')\n\t\t\tvideoPlayer.muted = !videoPlayer.muted\n\t\t})\n\t},\n\n\tfxSeekVideo(videoPlayer, seekBar) {\n\t\tseekBar.addEventListener('click', e => {\n\t\t\tconst percentage = (e.pageX - e.currentTarget.getBoundingClientRect().left) / e.currentTarget.clientWidth,\n\t\t\t\ttime = videoPlayer.duration * percentage\n\t\t\tvideoPlayer.currentTime = time\n\t\t})\n\t},\n\n\tfxPlaysInlineVideo(videoPlayer, playButtonInSlider, playButton) {\n\t\tplayButtonInSlider && playButtonInSlider.forEach(el => {\n\t\t\tel.addEventListener('click', e => {\n\t\t\t\tconst target = e.currentTarget,\n\t\t\t\t\tswiper = target.closest('.swiper-container').swiper\n\n\t\t\t\tswiper && swiper.autoplay.stop()\n\n\t\t\t\tconst quoteParent = swiper && swiper.el.closest('.slider-quote')\n\n\t\t\t\tif (quoteParent) {\n\t\t\t\t\tconst siblingSwiper = quoteParent.querySelector('.slider-quote__wrap .swiper-container')\n\n\t\t\t\t\tif (siblingSwiper && siblingSwiper.swiper) {\n\t\t\t\t\t\tsiblingSwiper.swiper.autoplay.stop()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttarget.closest('.swiper-slide').classList.add('video-is-playing')\n\t\t\t\tplayButton.classList.add('is-playing')\n\t\t\t\tvideoPlayer.paused ? videoPlayer.play() : videoPlayer.pause()\n\t\t\t\tthis.fxTimeUpdateVideos(target.closest('.video-is-playing').querySelector('video'))\n\t\t\t\ttarget.closest('.slider-hero') && target.closest('.slider-hero').classList.add('hidden-progress-bar')\n\t\t\t})\n\t\t})\n\t},\n\n\tfxAutoPlayVideo(videoPlayer, autoPlayElement, playButton) {\n\n\t\tvideoPlayer.addEventListener('playing', e => {\n\t\t\tif (autoPlayElement) {\n\t\t\t\tplayButton.classList.add('is-playing')\n\t\t\t\te.currentTarget.closest('.swiper-slide').classList.add('video-is-playing')\n\t\t\t\tautoPlayElement.closest('.slider-hero').classList.add('hidden-progress-bar')\n\t\t\t\tthis.fxTimeUpdateVideos(videoPlayer)\n\t\t\t}\n\t\t})\n\t},\n\n\tevents() {\n\t\tif (!this.el.videoContainer) return\n\n\t\tthis.el.videoContainer.forEach(el => {\n\t\t\tconst playButton = el.querySelector('.js-video-play'),\n\t\t\t\tsoundButton = el.querySelector('.js-video-sound'),\n\t\t\t\tseekBar = el.querySelector('.js-video-seekbar'),\n\t\t\t\tvideoPlayer = el.querySelector('video'),\n\t\t\t\tplayButtonInSlider = el.closest('.js-slider') && el.closest('.js-slider').querySelectorAll('.js-slider-video-play'),\n\t\t\t\tautoPlayElement = el.classList.contains('js-autoplay') && el.parentElement.querySelector('.js-autoplay')\n\n\t\t\tthis.fxTabSwitch(videoPlayer)\n\t\t\tthis.fxActionsOnEndVideo(videoPlayer)\n\t\t\tthis.fxTogglePlayVideo(videoPlayer, playButton)\n\t\t\tthis.fxToggleSoundVideo(videoPlayer, soundButton)\n\t\t\tthis.fxSeekVideo(videoPlayer, seekBar)\n\t\t\tthis.fxPlaysInlineVideo(videoPlayer, playButtonInSlider, playButton)\n\t\t\tthis.fxAutoPlayVideo(videoPlayer, autoPlayElement, playButton)\n\t\t})\n\t},\n\n\tinit() {\n\t\tthis.events()\n\t}\n}\n\nvideo.init()\n"]}