jQuery(function () { initFooterAccordion(); initAnimate(); initTabAnimation(); initCustomSelect(); initSwiper(); initCustomCheckboxSelect(); initSharer(); initAccordion(); }); function initAccordion() { const accSettings = { speed: 300, // Animation speed oneOpen: true, // Close all other accordion items if true offsetAnchor: true, // Activate scroll to top for active item offsetFromTop: 180, // In pixels – Scroll to top at what distance scrollTopDelay: 400, // In Milliseconds – Delay before scroll to top classes: { accordion: 'js-accordion', header: 'js-accordion-header', item: 'js-accordion-item', body: 'js-accordion-body', icon: 'js-accordion-icon', active: 'active', }, }; const prefix = accSettings.classes; const accordion = (function () { const accordionElem = $(`.${prefix.accordion}`); const accordionHeader = accordionElem.find(`.${prefix.header}`); const accordionItem = $(`.${prefix.item}`); const accordionBody = $(`.${prefix.body}`); const accordionIcon = $(`.${prefix.icon}`); const activeClass = prefix.active; return { init: function (settings) { accordionHeader.on('click', function () { accordion.toggle($(this)); if (accSettings.offsetAnchor) { setTimeout(() => { $('html').animate( { scrollTop: $(this).offset().top - accSettings.offsetFromTop, }, accSettings.speed ); }, accSettings.scrollTopDelay); } }); $.extend(accSettings, settings); // ensure only one accordion is active if oneOpen is true if ( settings.oneOpen && $(`.${prefix.item}.${activeClass}`).length > 1 ) { $(`.${prefix.item}.${activeClass}:not(:first)`) .removeClass(activeClass) .find(`.${prefix.header} > .${prefix.icon}`) .removeClass(activeClass); } // reveal the active accordion bodies $(`.${prefix.item}.${activeClass}`) .find(`> .${prefix.body}`) .show(); }, toggle: function ($this) { if ( accSettings.oneOpen && $this[0] != $this .closest(accordionElem) .find( `> .${prefix.item}.${activeClass} > .${prefix.header}` )[0] ) { $this .closest(accordionElem) .find(`> .${prefix.item}`) .removeClass(activeClass) .find(accordionBody) .slideUp(accSettings.speed); $this .closest(accordionElem) .find(`> .${prefix.item}`) .find(`> .${prefix.header} > .${prefix.icon}`) .removeClass(activeClass); } $this .closest(accordionItem) .toggleClass(`${activeClass}`) .find(`> .${prefix.header} > .${prefix.icon}`) .toggleClass(activeClass); $this.next().stop().slideToggle(accSettings.speed); }, }; })(); $(document).ready(function () { accordion.init(accSettings); }); } function initSharer() { jQuery('.social-media-list [data-sharer]').each(function () { var link = jQuery(this); link.attr('data-url', window.location.href); link.on('click', function (e) { e.preventDefault(); window.Sharer.init(); }); }); } function initCustomCheckboxSelect() { jQuery('.filter').each(function () { const holder = jQuery(this); const opener = holder.find('.filter-opener'); const drop = holder.find('.filter-drop'); const close = holder.find('.button-primary'); const checkbox = holder.find('input[type="checkbox"]'); const openerText = opener.find('.filter-opener-txt'); const defaultText = openerText.text(); var array = []; close.on('click', function (e) { e.preventDefault(); holder.removeClass('active'); jQuery('.wrapper').removeClass('overlay'); }); checkbox.on('change', function (e) { array = []; const checked = holder.find('input[type="checkbox"]:checked'); checked.each(function () { console.log(jQuery(this).siblings('.checkbox-label')); array.push(jQuery(this).siblings('.checkbox-label').text()); }); if (checked.length) { openerText.text(array.join(', ')); } else { openerText.text(defaultText); } }); opener.on('click', function (e) { e.preventDefault(); holder.toggleClass('active'); console.log(jQuery('.wrapper')); jQuery('.wrapper').addClass('overlay'); }); jQuery(document).on('click', function (e) { if (!holder.is(e.target) && holder.has(e.target).length === 0) { holder.removeClass('active'); jQuery('.wrapper').removeClass('overlay'); } }); }); } function initSwiper() { jQuery('.animate-slider').each(function () { var holder = jQuery(this); var breakpoint = window.matchMedia('(max-width: 767px)'); var slider = holder.find('.swiper--content'); var links = holder.find('.link-block'); var slides = slider.find('.swiper-slide'); var sliderNav = holder.find('.swiper--link'); let swiperNav; const swiper = new Swiper(slider.get(0), { loop: false, slidesPerView: 1, spaceBetween: 35, on: { init: function () { slideChange(0, this); }, }, }); function resizeHandler() { if (breakpoint.matches) { swiperNav = new Swiper(sliderNav.get(0), { loop: false, slidesPerView: 'auto', spaceBetween: sliderNav.data('spacing') || 35, }); } else { if (swiperNav !== undefined) swiperNav.destroy(true, true); } } resizeHandler(); breakpoint.addListener(resizeHandler); swiper.on('slideChange', function (swiper) { slideChange(swiper.activeIndex, swiper); }); links.on('click', function (e) { e.preventDefault(); var curIndex = jQuery(this).closest('li').index(); swiper.slideTo(curIndex, 300, true); }); function slideChange(curIndex, swiper) { if (swiperNav != undefined) { swiperNav.slideTo(curIndex, 300, true); } links.removeClass('active'); links.find('.link-line').stop().removeAttr('style'); links.eq(curIndex).addClass('active'); links .eq(curIndex) .find('.link-line') .animate( { width: '100%', }, 10000, 'linear', function () { if (swiper.slides.length - 1 == curIndex) { console.log('last'); swiper.slideTo(0, 300, true); } else { swiper.slideNext(); } } ); ProgressBar(slides[swiper.activeIndex]); } }); jQuery('.swiper--post').each(function () { var holder = jQuery(this); var breakpoint = window.matchMedia('(max-width: 767px)'); let swiper; function resizeHandler() { if (breakpoint.matches) { if (!holder.hasClass('grid')) { swiper = new Swiper(holder.get(0), { loop: false, slidesPerView: 1.7, spaceBetween: 20, }); } else { swiper = new Swiper(holder.get(0), { loop: false, slidesPerView: 'auto', slidesPerColumn: 3, grid: { rows: 3, }, spaceBetween: 20, }); } } else { if (swiper !== undefined) swiper.destroy(true, true); } } resizeHandler(); breakpoint.addListener(resizeHandler); }); jQuery('.reviews-section .review-bar').each(function () { var holder = jQuery(this); var slides = jQuery(this).find('.review'); var cloneSlide = slides.clone(); jQuery(this).append(cloneSlide); var tl = gsap.timeline(); let i = 0; const speed = 60; function resizeHandler() { let time = holder[0].scrollWidth / 2 / speed; tl.progress(0).kill(); clearTimeout(window.resizedFinished); window.resizedFinished = setTimeout(function () { tl = gsap.timeline(); tl.to(holder, time, { x: `-${holder[0].scrollWidth / 2}`, repeat: -1, ease: Linear.easeNone, }); }, 250); } resizeHandler(); jQuery(window).on('resize', resizeHandler); }); jQuery('.feature-slider').each(function () { const holder = jQuery(this); const slider = holder.find('.swiper--feature'); const swiper = new Swiper(slider.get(0), { loop: true, slidesPerView: 1, speed: 500, spaceBetween: 40, navigation: { nextEl: holder.find('.swiper-button-next').get(0), prevEl: holder.find('.swiper-button-prev').get(0), }, pagination: { el: holder.find('.swiper-pagination').get(0), clickable: true, }, }); }); jQuery('.swiper--slider').each(function () { var holder = jQuery(this); const swiper = new Swiper(holder.get(0), { loop: true, slidesPerView: 1, speed: 500, spaceBetween: 40, navigation: { nextEl: holder.find('.swiper-button-next').get(0), prevEl: holder.find('.swiper-button-prev').get(0), }, }); }); jQuery('.comparison-slider').each(function () { const holder = jQuery(this); const slider = holder.find('.swiper--comparison'); const slides = holder.find('.swiper-slide'); const swiper = new Swiper(slider.get(0), { loop: true, slidesPerView: 1, speed: 500, spaceBetween: 40, navigation: { nextEl: holder.find('.swiper-comparison-button-next').get(0), prevEl: holder.find('.swiper-comparison-button-prev').get(0), }, pagination: { el: holder.find('.swiper-pagination').get(0), clickable: true, }, on: { init: function (swiper) { ProgressBar(slides[swiper.activeIndex]); }, }, }); swiper.on('slideChange', function (swiper) { ProgressBar(slides[swiper.activeIndex]); }); }); jQuery('.swiper--platform').each(function () { var holder = jQuery(this); var breakpoint = window.matchMedia('(max-width: 767px)'); let swiper; function resizeHandler() { if (breakpoint.matches) { swiper = new Swiper(holder.get(0), { loop: false, slidesPerView: 1.7, spaceBetween: 20, }); } else { if (swiper !== undefined) swiper.destroy(true, true); } } resizeHandler(); breakpoint.addListener(resizeHandler); }); jQuery('.swiper--news').each(function () { var holder = jQuery(this); const swiper = new Swiper(holder.get(0), { loop: false, slidesPerView: 1, spaceBetween: 15, breakpoints: { 768: { slidesPerView: 3, spaceBetween: 20, }, 1024: { slidesPerView: 4, spaceBetween: 20, }, }, }); }); jQuery('.swiper--integration').each(function () { const holder = jQuery(this); let swiper; const breakpoint = window.matchMedia('(max-width: 767px'); function resizeHandler() { if (breakpoint.matches) { swiper = new Swiper(holder.get(0), { loop: false, slidesPerView: 'auto', slidesPerColumn: 3, grid: { rows: 3, }, spaceBetween: 10, }); } else { if (swiper !== undefined) swiper.destroy(true, true); } } resizeHandler(); breakpoint.addEventListener('change', resizeHandler); }); } function ProgressBar(holder) { if (holder.querySelector('.progress-bar__content-4')) { var progressBars = jQuery(holder).find('.progress-bar__content-4'); progressBars.each(function () { var progressBar = jQuery(this); var timer = setTimeout(function () { progressBar.animate( { width: progressBar.data('progress') + '%', }, 500 ); clearTimeout(timer); }, 300); }); } } function initTabAnimation() { jQuery('.tab-animate-progress a').on('click', function (e) { const link = jQuery(this); const tab = document.querySelector(link.attr('href')); ProgressBar(tab); }); } function initFooterAccordion() { jQuery('.footer').each(function () { var breakpoint = window.matchMedia('(max-width: 767px)'); var holder = jQuery(this); const items = holder.find('.wrap'); items.each(function () { var item = jQuery(this); var opener = item.find('.accordion-title'); var drop = item.find('.accordion-content'); function resizeHandler() { if (breakpoint.matches) { drop.css('display', 'none'); } else { drop.removeAttr('style'); } } resizeHandler(); breakpoint.addListener(resizeHandler); if (!drop.length) return; opener.on('click', function (e) { e.preventDefault(); if (item.hasClass('active')) { item.removeClass('active'); drop.stop().slideUp(300); } else { items.not(item).removeClass('active'); items.not(item).find('.accordion-content').stop().slideUp(300); item.addClass('active'); drop.stop().slideDown(300); } }); }); }); } function initAnimate() { let observer = new IntersectionObserver( (entries, observer) => { entries.forEach((entry, trigger) => { if (entry.isIntersecting) { entry.target.classList.add('animate'); const event = new CustomEvent('animate', { bubbles: true, detail: { text: () => entry.target }, }); entry.target.dispatchEvent(event); ProgressBar(entry.target); } }); }, { root: null, rootMargin: '0px', threshold: 0.5, } ); document.querySelectorAll('[data-aos]').forEach((aosElem) => { let trigger = false; observer.observe(aosElem, trigger); }); } function initCustomSelect() { var x, i, j, l, ll, selElmnt, a, b, c; x = document.getElementsByClassName('select-js'); l = x.length; for (i = 0; i < l; i++) { selElmnt = x[i].getElementsByTagName('select')[0]; ll = selElmnt.length; /*for each element, create a new DIV that will act as the selected item:*/ a = document.createElement('button'); a.setAttribute('class', 'select__opener'); a.innerHTML = selElmnt.options[selElmnt.selectedIndex].innerHTML; x[i].appendChild(a); /*for each element, create a new DIV that will contain the option list:*/ b = document.createElement('DIV'); b.setAttribute('class', 'select__list select__list--hide'); for (j = 0; j < ll; j++) { /*for each option in the original select element, create a new DIV that will act as an option item:*/ if(selElmnt.dataset.selectTitle == undefined) { if (j == 0 ) { c = document.createElement('div'); c.classList.add('filter-title'); c.innerHTML = selElmnt.options[j].innerHTML; b.appendChild(c); } else { c = document.createElement('button'); c.innerHTML = selElmnt.options[j].innerHTML; c.addEventListener('click', function (e) { /*when an item is clicked, update the original select box, and the selected item:*/ e.preventDefault(); var y, i, k, s, h, sl, yl; s = this.parentNode.parentNode.getElementsByTagName('select')[0]; sl = s.length; h = this.parentNode.previousSibling; for (i = 0; i < sl; i++) { if (s.options[i].innerHTML == this.innerHTML) { s.selectedIndex = i; s.dispatchEvent(new Event('change', { bubbles: true })); h.innerHTML = this.innerHTML; y = this.parentNode.getElementsByClassName( 'select__button-active' ); yl = y.length; for (k = 0; k < yl; k++) { y[k].removeAttribute('class'); } this.setAttribute('class', 'select__opener-active'); document .querySelector('.wrapper') .classList.toggle('overlay-select'); break; } } h.click(); }); b.appendChild(c); } } else { c = document.createElement('button'); c.innerHTML = selElmnt.options[j].innerHTML; c.addEventListener('click', function (e) { /*when an item is clicked, update the original select box, and the selected item:*/ e.preventDefault(); var y, i, k, s, h, sl, yl; s = this.parentNode.parentNode.getElementsByTagName('select')[0]; sl = s.length; h = this.parentNode.previousSibling; for (i = 0; i < sl; i++) { if (s.options[i].innerHTML == this.innerHTML) { s.selectedIndex = i; s.dispatchEvent(new Event('change', { bubbles: true })); h.innerHTML = this.innerHTML; y = this.parentNode.getElementsByClassName( 'select__button-active' ); yl = y.length; for (k = 0; k < yl; k++) { y[k].removeAttribute('class'); } this.setAttribute('class', 'select__opener-active'); document .querySelector('.wrapper') .classList.toggle('overlay-select'); break; } } h.click(); }); b.appendChild(c); } if (j == ll - 1) { c = document.createElement('div'); c.classList.add('filter-footer'); const closeButton = document.createElement('button'); closeButton.classList.add('btn-primary'); closeButton.innerHTML = 'Apply'; closeButton.addEventListener('click', (e) => { e.preventDefault(); closeAllSelect(this); a.nextSibling.classList.toggle('select__list--hide'); a.classList.toggle('select__opener--active'); a.closest('.select-js').classList.toggle('select-js--active'); document .querySelector('.wrapper') .classList.remove('overlay-select'); }); c.appendChild(closeButton); b.appendChild(c); } } x[i].appendChild(b); a.addEventListener('click', function (e) { /*when the select box is clicked, close any other select boxes, and open/close the current select box:*/ e.preventDefault(); e.stopPropagation(); closeAllSelect(this); this.nextSibling.classList.toggle('select__list--hide'); this.classList.toggle('select__opener--active'); this.closest('.select-js').classList.toggle('select-js--active'); document.querySelector('.wrapper').classList.toggle('overlay-select'); }); } function closeAllSelect(elmnt) { var x, y, i, xl, yl, arrNo = []; x = document.getElementsByClassName('select__list'); y = document.getElementsByClassName('select__opener'); xl = x.length; yl = y.length; for (i = 0; i < yl; i++) { if (elmnt == y[i]) { arrNo.push(i); } else { y[i].classList.remove('select__opener--active'); y[i].closest('.select-js').classList.remove('select-js--active'); document .querySelector('.wrapper') .classList.remove('overlay-select'); } } for (i = 0; i < xl; i++) { if (arrNo.indexOf(i)) { x[i].classList.add('select__list--hide'); } } } /*if the user clicks anywhere outside the select box, then close all select boxes:*/ document.addEventListener('click', closeAllSelect); }