Current File : /home/quantums/bodyguardslosangeles.net/wp-content/themes/seosight/js/main.js
//Global var
var CRUMINA = {};

(function ($) {

    // USE STRICT
    "use strict";

    //----------------------------------------------------/
    // Predefined Variables
    //----------------------------------------------------/
    var $window = $(window),
        $document = $(document),
        $body = $('body'),
        //Elements
        $header = $('#site-header'),
        $header_height = $header.outerHeight(),
        $preloader = $('#hellopreloader'),
        $topbar = $header.siblings('.top-bar'),
        $counter = $('.counter'),
        $progress_bar = $('.skills-item'),
        $pie_chart = $('.pie-chart'),
        $animatedIcons = $('.js-animate-icon'),
        $asidePanel = $('.right-menu'),
        $subscribe_section = $('#subscribe-section'),
        back_to_top = document.querySelector('.back-to-top'),
        $footer = $('#site-footer'),
        $mainContent = $('.content-wrapper'),
        $adminBar = $('#wpadminbar');


    var $popupSearch = $(".popup-search");

    /* -----------------------
    * Show/Hide scroll to top button
    * --------------------- */
    CRUMINA.backToTop = function () {
        window.onscroll = function () {
            if (back_to_top.classList.contains('back-to-top-fixed')) {
                let pageOffset = document.documentElement.scrollTop || document.body.scrollTop;
                if (pageOffset > 500) {
                    back_to_top.style.opacity = "1";
                    back_to_top.style.visibility = "visible";
                } else {
                    back_to_top.style.opacity = "0";
                    back_to_top.style.opacity = "hidden";
                }
            }
        };

        back_to_top.addEventListener("click", function (e) {
            e.preventDefault();
            window.scroll({top: 0, behavior: 'smooth'});
        });
    };

    /* -----------------------
     * Preloader
     * --------------------- */

    CRUMINA.preloader = function () {
        setTimeout(function () {
            $preloader.fadeOut(800);
        }, 500);
        return false;
    };

    /* -----------------------
     * Parallax footer
     * --------------------- */

    CRUMINA.parallaxFooter = function () {
        if ($footer.length && $footer.hasClass('js-fixed-footer')) {
            $footer.before('<div class="block-footer-height"></div>');
            $('.block-footer-height').matchHeight({
                target: $footer
            });
        }
    };

    /* -----------------------
     * COUNTER NUMBERS
     * --------------------- */

    CRUMINA.counters = function () {
        if ($counter.length) {
            $counter.each(function () {
                var $this = $(this);
                $this.waypoint(function () {
                    var $current = $this.find('span'),
                        $count = $current.data('to');
                    if (!$current.hasClass('animated')) {
                        $current.countup($count);
                        $current.addClass('animated');
                    }
                }, {offset: '95%', triggerOnce: true});
            });
        }
    };

    /* -----------------------
     * Progress bars Animation
     * --------------------- */

    CRUMINA.progresBars = function () {
        $progress_bar.each(function () {
            var $this = $(this);
            $this.find('.skills-item-meter-active').addClass('item-fully-transparent');
            $this.waypoint(function () {
                var $current = $this.find('.count-animate'),
                    $count = $current.data('to');
                if (!$current.hasClass('animated')) {
                    $current.countup($count);
                    $current.addClass('animated');
                }
                $this.find('.skills-item-meter-active').fadeTo(300, 1).addClass('skills-animate').removeClass('item-fully-transparent');
            }, {offset: '85%', triggerOnce: true});
        });
    };

    /* -----------------------
     * Pie chart Animation
     * --------------------- */
    CRUMINA.pieCharts = function () {
        if ($pie_chart.length) {
            $pie_chart.each(function () {
                $(this).waypoint(function () {
                    var current_cart = $(this);
                    var startColor = current_cart.data('startcolor');
                    var endColor = current_cart.data('endcolor');
                    var emptyfill = current_cart.data('emptyfill');
                    var chartsize = parseInt(current_cart.data('chartsize'));
                    var counter = current_cart.data('value') * 100;

                    current_cart.circleProgress({
                        thickness: chartsize / 20,
                        size: chartsize,
                        startAngle: -Math.PI / 4 * 2,
                        emptyFill: emptyfill,
                        lineCap: 'round',
                        fill: {
                            gradient: [endColor, startColor],
                            gradientAngle: Math.PI / 4
                        }
                    }).on('circle-animation-progress', function (event, progress) {
                        current_cart.find('.content').html(parseInt(counter * progress, 10) + '<span>%</span>'
                        )
                    });

                }, {offset: '90%', triggerOnce: true});
            });
        }
    };
    /* -----------------------
     * Animate SVG Icons
     * --------------------- */
    CRUMINA.animateSvg = function () {
        if ($animatedIcons.length) {
            $animatedIcons.each(function () {
                var $this = $(this);
                $(this).waypoint(function () {
                    var mySVG = $this.find('> svg').drawsvg();
                    mySVG.drawsvg('animate');
                }, {offset: '95%', triggerOnce: true});
            });
        }
    };
    /* -----------------------
     * Run Chart js module
     * --------------------- */
    CRUMINA.chartJs = function () {
        $('.chart-js-run').each(function () {
            var $wrapper = $(this);
            $(this).waypoint(function () {
                var el_id = $wrapper.data('id');
                var dataholder = $wrapper.find('.chart-data');
                var $fill = true;
                var $scales = true;
                var $borderColor = 'rgba(255, 255, 255, 0.1)';
                var ctx = document.getElementById(el_id);
                if ($wrapper.data('type') === 'line') {
                    $fill = false;
                    $borderColor = dataholder.data('bordercolor');
                }
                if ($wrapper.data('type') === 'doughnut' || $wrapper.data('type') === 'pie' || $wrapper.data('type') === 'polarArea') {
                    $scales = false;
                }

                var myChart = new Chart(ctx, {
                    type: $wrapper.data('type'),
                    data: {
                        labels: dataholder.data('labels'),
                        datasets: [
                            {
                                data: dataholder.data('numbers'),
                                backgroundColor: dataholder.data('colors'),
                                borderColor: $borderColor,
                                pointBackgroundColor: dataholder.data('colors'),
                                pointBorderColor: dataholder.data('colors'),
                                fill: $fill
                            }]
                    },
                    options: {
                        legend: {
                            display: false
                        },
                        scales: {
                            yAxes: [{
                                display: $scales,
                                ticks: {
                                    beginAtZero: true,
                                    min: 0

                                },
                            }],
                            xAxes: [{
                                display: false,
                            }]
                        }
                    },
                    animation: {
                        animateScale: true
                    }
                });

            }, {offset: '75%', triggerOnce: true});
        });
    };

    CRUMINA.runchartJS = function ($wrapper) {
        var el_id = $wrapper.data('id');
        var dataholder = $wrapper.find('.chart-data');
        var $fill = true;
        var $scales = true;
        var $borderColor = 'rgba(255, 255, 255, 0.1)';
        var ctx = document.getElementById(el_id);
        if ($wrapper.data('type') === 'line') {
            $fill = false;
            $borderColor = dataholder.data('bordercolor');
        }
        if ($wrapper.data('type') === 'doughnut' || $wrapper.data('type') === 'pie' || $wrapper.data('type') === 'polarArea') {
            $scales = false;
        }

        var myChart = new Chart(ctx, {
            type: $wrapper.data('type'),
            data: {
                labels: dataholder.data('labels'),
                datasets: [
                    {
                        data: dataholder.data('numbers'),
                        backgroundColor: dataholder.data('colors'),
                        borderColor: $borderColor,
                        pointBackgroundColor: dataholder.data('colors'),
                        pointBorderColor: dataholder.data('colors'),
                        fill: $fill
                    }]
            },
            options: {
                legend: {
                    display: false
                },
                scales: {
                    yAxes: [{
                        display: $scales,
                        ticks: {
                            beginAtZero: true,
                            min: 0

                        },
                    }],
                    xAxes: [{
                        display: false,
                    }]
                }
            },
            animation: {
                animateScale: true
            }
        });
    };


    $("#top-bar-language").on('change', function () {
        var lang_href = jQuery(jQuery(this).children('[value=' + $(this).val() + ']')).data('url');
        if (lang_href) {
            document.location.href = lang_href;
        }
    });

    /* -----------------------------
     * Toggle aside panel on click
     * ---------------------------*/
    CRUMINA.togglePanel = function () {
        if ($asidePanel.length) {
            $asidePanel.toggleClass('opened');
            $body.toggleClass('overlay-enable');
        }
    };
    /* -----------------------------
     * Toggle Top bar on click
     * ---------------------------*/
    CRUMINA.toggleBar = function () {
        $topbar.toggleClass('open');
        $body.toggleClass('overlay-enable');
        return false;
    };
    /* -----------------------------
     * Toggle search overlay
     * ---------------------------*/
    CRUMINA.toggleSearch = function () {
        $body.toggleClass('open');
        $('.overlay_search-input').focus();
    };
    /* -----------------------------
     * Embedded Video in pop up
     * ---------------------------*/
    CRUMINA.mediaPopups = function () {
        $('.js-popup-iframe').magnificPopup({
            disableOn: 700,
            type: 'iframe',
            mainClass: 'mfp-fade',
            removalDelay: 160,
            preloader: false,

            fixedContentPos: false
        });
        $('.js-zoom-image, .link-image').magnificPopup({
            type: 'image',
            removalDelay: 500, //delay removal by X to allow out-animation
            callbacks: {
                beforeOpen: function () {
                    // just a hack that adds mfp-anim class to markup
                    this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
                    this.st.mainClass = 'mfp-zoom-in';
                }
            },
            closeOnContentClick: true,
            midClick: true
        });
        $('.js-zoom-gallery').each(function () {
            $(this).magnificPopup({
                delegate: 'a[data-lightbox="gallery-item"]',
                type: 'image',
                gallery: {
                    enabled: true
                },
                removalDelay: 500, //delay removal by X to allow out-animation
                callbacks: {
                    beforeOpen: function () {
                        // just a hack that adds mfp-anim class to markup
                        this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
                        this.st.mainClass = 'mfp-zoom-in';
                    }
                },
                closeOnContentClick: true,
                midClick: true
            });
        });

        $('.js-open-video').magnificPopup({
            type: 'inline',
            mainClass: 'inline--media-content overlay active animation-wrapper', // this class is for CSS animation below
            zoom: {
                enabled: true, // By default it's false, so don't forget to enable it
                duration: 300, // duration of the effect, in milliseconds
                easing: 'ease-in-out' // CSS transition easing function
            },
            callbacks: {
                open: function () {
                    var player = plyr.setup('.plyr-module');
                },
                close: function () {
                    var player = plyr.get('.plyr-module');
                    player[0].destroy();
                }
            }
        });
    };
    /* -----------------------------
     * Equal height
     * ---------------------------*/
    CRUMINA.equalHeight = function () {
        $('.js-equal-child').find('.theme-module, .crumina-module').matchHeight({
            property: 'min-height'
        });
    };

    /* -----------------------------
     * Scrollmagic scenes animation
     * ---------------------------*/
    CRUMINA.SubscribeScrollAnnimation = function () {
        var controller = new ScrollMagic.Controller();
        new ScrollMagic.Scene({triggerElement: "#subscribe-section"})
            .setVelocity(".gear", {opacity: 1, rotateZ: "360deg"}, 1200)
            .triggerHook(0.8)
            .addTo(controller);

        new ScrollMagic.Scene({triggerElement: "#subscribe-section"})
            .setVelocity(".mail", {opacity: 1, bottom: "0"}, 600)
            .triggerHook(0.8)
            .addTo(controller);

        new ScrollMagic.Scene({triggerElement: "#subscribe-section"})
            .setVelocity(".mail-2", {opacity: 1, right: "0"}, 800)
            .triggerHook(0.9)
            .addTo(controller);
    };

    CRUMINA.SeoScoreScrollAnnimation = function () {
        var controller = new ScrollMagic.Controller();

        new ScrollMagic.Scene({triggerElement: ".crumina-your-score"})
            .setVelocity(".crumina-your-score .seoscore1", {opacity: 1, top: "-10"}, 400)
            .triggerHook("onEnter")
            .addTo(controller);

        new ScrollMagic.Scene({triggerElement: ".crumina-your-score"})
            .setVelocity(".crumina-your-score .seoscore2", {opacity: 1, bottom: "0"}, 800)
            .triggerHook(0.7)
            .addTo(controller);

        new ScrollMagic.Scene({triggerElement: ".crumina-your-score"})
            .setVelocity(".crumina-your-score .seoscore3", {opacity: 1, bottom: "0"}, 1000)
            .triggerHook(0.8)
            .addTo(controller);
    };

    CRUMINA.TestimonialScrollAnnimation = function () {
        var controller = new ScrollMagic.Controller();

        new ScrollMagic.Scene({triggerElement: ".crumina-testimonial-slider"})
            .setVelocity(".crumina-testimonial-slider .testimonial2", {opacity: 1, bottom: "-50"}, 400)
            .triggerHook(0.6)
            .addTo(controller);

        new ScrollMagic.Scene({triggerElement: ".crumina-testimonial-slider"})
            .setVelocity(".crumina-testimonial-slider .testimonial1", {opacity: 1, top: "20"}, 600)
            .triggerHook(1)
            .addTo(controller);
    };

    CRUMINA.OurVisionScrollAnnimation = function () {
        var controller = new ScrollMagic.Controller();

        new ScrollMagic.Scene({triggerElement: ".crumina-our-vision"})
            .setVelocity(".crumina-our-vision .elements", {opacity: 1}, 600)
            .triggerHook(0.6)
            .addTo(controller);

        new ScrollMagic.Scene({triggerElement: ".crumina-our-vision"})
            .setVelocity(".crumina-our-vision .eye", {opacity: 1, bottom: "-90"}, 1000)
            .triggerHook(1)
            .addTo(controller);
    };

    CRUMINA.MountainsScrollAnnimation = function () {
        var controller = new ScrollMagic.Controller();

        new ScrollMagic.Scene({triggerElement: ".crumina-background-mountains"})
            .setVelocity(".crumina-background-mountains .mountain1", {
                opacity: 1,
                bottom: "0",
                paddingBottom: "10%"
            }, 800)
            .triggerHook(0.4)
            .addTo(controller);

        new ScrollMagic.Scene({triggerElement: ".crumina-background-mountains"})
            .setVelocity(".crumina-background-mountains .mountain2", {opacity: 1, bottom: "0"}, 800)
            .triggerHook(0.3)
            .addTo(controller);
    };

    CRUMINA.SeoCustomScrollAnnimation = function () {
        var controller = new ScrollMagic.Controller();

        new ScrollMagic.Scene({triggerElement: ".crumina-custom-image-bg.b_c"})
            .setVelocity(".crumina-custom-image-bg.b_c img", {opacity: 1, bottom: "0"}, 800)
            .triggerHook(0.5)
            .addTo(controller);
        new ScrollMagic.Scene({triggerElement: ".crumina-custom-image-bg.t_c"})
            .setVelocity(".crumina-custom-image-bg.t_c img", {opacity: 1, top: "0"}, 800)
            .triggerHook(0.5)
            .addTo(controller);
        new ScrollMagic.Scene({triggerElement: ".crumina-custom-image-bg.c_c"})
            .setVelocity(".crumina-custom-image-bg.c_c img", {opacity: 1, bottom: "50%"}, 800)
            .triggerHook(0.5)
            .addTo(controller);
    };
    /* -----------------------------
     * Isotope sorting
     * ---------------------------*/
    CRUMINA.blogMasonry = function () {
        $('.post--grid-masonry-container').each(function () {
            var $grid = $(this);

            $grid.imagesLoaded().done(function () {
                $grid.isotope({
                    itemSelector: '.post--grid-masonry-col',
                    layoutMode: 'masonry',
                    percentPosition: true
                });

            });
        });
    };

    CRUMINA.IsotopeSort = function () {
        var $container = $('.sorting-container');
        $container.each(function () {
            var $current = $(this);
            var layout = ($current.data('layout').length) ? $current.data('layout') : 'masonry';
            $current.isotope({
                itemSelector: '.sorting-item',
                layoutMode: layout,
                percentPosition: true
            });

            $current.imagesLoaded().progress(function () {
                $current.isotope('layout');
            });

            var $sorting_buttons = $current.siblings('.sorting-menu').find('li');

            $sorting_buttons.each(function () {
                var selector = $(this).data('filter');
                var count = $container.find(selector).length;
                if (count === 0) {
                    $(this).css('display', 'none');
                }
            });
            if ($sorting_buttons.filter(':visible').length < 2) {
                $container.siblings('.sorting-menu').hide();
            }

            $sorting_buttons.on('click', function () {
                if ($(this).hasClass('active'))
                    return false;
                $(this).parent().find('.active').removeClass('active');
                $(this).addClass('active');
                var filterValue = $(this).data('filter');
                if (typeof filterValue != "undefined") {
                    $current.isotope({filter: filterValue});
                    return false;
                }
            });
        });
    };

    /* -----------------------------
    * Sliders and Carousels
    * ---------------------------*/

    CRUMINA.Swiper = {
        $swipers: {},
        init: function () {
            var _this = this;
            $('.swiper-container').each(function (idx) {
                var $self = $(this);
                var id = 'swiper-unique-id-' + idx;
                $self.addClass(id + ' initialized').attr('id', id);
                $self.parent().find('.swiper-pagination').addClass('pagination-' + id);

                _this.$swipers[id] = new Swiper('#' + id, _this.getParams($self, id));
                _this.addEventListeners(_this.$swipers[id]);
            });
        },
        getParams: function ($swiper, id) {
            var params = {
                parallax: true,
                breakpoints: false,
                keyboardControl: true,
                setWrapperSize: true,
                preloadImages: false,
                lazy: true,
                initialSlide: ($swiper.data('initial')) ? $swiper.data('initial') : 0,
                updateOnImagesReady: true,
                prevNext: ($swiper.data('prev-next')) ? $swiper.data('prev-next') : false,
                changeHandler: ($swiper.data('change-handler')) ? $swiper.data('change-handler') : '',
                direction: ($swiper.data('direction')) ? $swiper.data('direction') : 'horizontal',
                mousewheel: ($swiper.data('mouse-scroll')) ? {
                    releaseOnEdges: true
                } : false,
                slidesPerView: ($swiper.data('show-items')) ? $swiper.data('show-items') : 1,
                slidesPerGroup: ($swiper.data('scroll-items')) ? $swiper.data('scroll-items') : 1,
                spaceBetween: ($swiper.data('space-between') || $swiper.data('space-between') == 0) ? $swiper.data('space-between') : 20,
                centeredSlides: ($swiper.data('centered-slider')) ? $swiper.data('centered-slider') : false,
                autoplay: ($swiper.data('autoplay')) ? {
                    delay: parseInt($swiper.data('autoplay'))
                } : false,
                autoHeight: ($swiper.hasClass('auto-height')) ? true : false,
                loop: ($swiper.data('loop') == false) ? $swiper.data('loop') : true,
                effect: ($swiper.data('effect')) ? $swiper.data('effect') : 'slide',
                pagination: {
                    type: ($swiper.data('pagination')) ? $swiper.data('pagination') : 'bullets',
                    el: '.pagination-' + id,
                    clickable: true
                },
                coverflow: {
                    stretch: ($swiper.data('stretch')) ? $swiper.data('stretch') : 0,
                    depth: ($swiper.data('depth')) ? $swiper.data('depth') : 0,
                    slideShadows: false,
                    rotate: 0,
                    modifier: 2
                },
                fade: {
                    crossFade: ($swiper.data('crossfade')) ? $swiper.data('crossfade') : true
                },
            };

            if (params['slidesPerView'] > 1) {
                params['breakpoints'] = {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 1,
                        slidesPerGroup: 1
                    },
                    580: {
                        slidesPerView: 2,
                        slidesPerGroup: 2
                    },
                    769: {
                        slidesPerView: params['slidesPerView'],
                        slidesPerGroup: params['slidesPerGroup']
                    }
                };
            }

            return params;
        },
        addEventListeners: function ($swiper) {
            var _this = this;
            var $wrapper = $swiper.$el.closest('.crumina-module-slider');

            //Prev Next clicks
            if ($swiper.params.prevNext) {
                $wrapper.on('click', '.btn-next, .btn-prev', function (event) {
                    event.preventDefault();
                    var $self = $(this);

                    if ($self.hasClass('btn-next')) {
                        $swiper.slideNext();
                    } else {
                        $swiper.slidePrev();
                    }
                });
            }

            //Thumb/times clicks
            $wrapper.on('click', '.slider-slides .slides-item', function (event) {
                event.preventDefault();
                var $self = $(this);
                if ($swiper.params.loop) {
                    $swiper.slideToLoop($self.index());
                } else {
                    $swiper.slideTo($self.index());
                }
            });

            //Run handler after change slide
            $swiper.on('slideChange', function () {
                var handler = _this.changes[$swiper.params.changeHandler];
                if (typeof handler === 'function') {
                    handler($swiper, $wrapper, _this, this.realIndex);
                }
            });
        },
        changes: {
            'thumbsParent': function ($swiper, $wrapper) {
                var $thumbs = $wrapper.find('.slider-slides .slides-item');
                $thumbs.removeClass('swiper-slide-active');
                $thumbs.eq($swiper.realIndex).addClass('swiper-slide-active');
            }
        }
    };

    CRUMINA.resizeSwiper = function (swiper) {
        swiper = (swiper) ? swiper : $(this)[0].swiper;

        var activeSlideHeight = swiper.slides.eq(swiper.activeIndex).find('> *').outerHeight();

        var $pagination = $(swiper.container).find('.slider-slides'),
            $pagination_height = ($pagination.length) ? $pagination.height() : 0;

        if ($(swiper.container).hasClass('pagination-vertical')) {
            var headlineHeights = swiper.slides.map(function () {
                return $(this).find('> *').height();
            }).get();

            var maxHeadLineHeight = Math.max.apply(Math, headlineHeights);
            swiper.container.css({height: maxHeadLineHeight + 'px'});
            swiper.update(true)
        }

        if ($pagination_height > 0) {
            swiper.container.css('paddingBottom', $pagination_height + 'px')
            swiper.onResize();
        }

        if ($(swiper.container).hasClass('auto-height')) {
            swiper = (swiper) ? swiper : $(this)[0].swiper;
            swiper.container.css({height: activeSlideHeight + 'px'});
            swiper.onResize();
        }

        CRUMINA.mainSliderHeight();
    };

    CRUMINA.mainSliderHeight = function () {
        setTimeout(function () {
            $('.swiper-container.js-full-window').each(function () {

                var $slider = $(this),
                    $pagination = $slider.find('.slider-slides'),
                    $pagination_height = ($pagination.length) ? $pagination.height() : 0,
                    winHei = $(window).height(),
                    $sliderSpaceOffsetTop = $mainContent.offset().top,
                    $sliderSlide = ('.main-slider .container.d-flex'),
                    mobileWidthBase = 580;

                if ($(window).innerWidth() > mobileWidthBase) {
                    $($sliderSlide).imagesLoaded().done(function () {

                        var $sliderSlideHeight = $($sliderSlide).outerHeight();

                        if ($sliderSlideHeight > winHei - $pagination_height - $sliderSpaceOffsetTop) {
                            $slider.css('min-height', 'auto').css('height', 'auto');
                            $slider.find('> .swiper-wrapper').css('min-height', 'auto').css('height', 'auto');
                        } else {
                            $slider.css('min-height', winHei - $sliderSpaceOffsetTop + 'px').css('height', winHei - $sliderSpaceOffsetTop + 'px');
                            $slider.find('> .swiper-wrapper').css('min-height', winHei - $pagination_height - $sliderSpaceOffsetTop + 'px').css('height', winHei - $pagination_height - $sliderSpaceOffsetTop + 'px');
                        }

                    });
                } else {
                    return
                }

            });
        }, 300);
    };

    CRUMINA.initSmoothScroll = function () {

        let $adminBarHeight = 0;

        if( $adminBar.length){
            $adminBarHeight = $adminBar.outerHeight();
        }

        let $scrollOffset = ($header_height - 1 + $adminBarHeight);

        //Auto scroll if hash
        const hashLink = window.location.hash;
        if (hashLink.length) {
            const $anchor = document.querySelector(hashLink);
            let elmTop = $anchor.getBoundingClientRect().top + window.scrollY;
            elmTop -= $scrollOffset;
            window.scroll({top: elmTop, behavior: 'smooth'});
        }

        //Menu scroll
        const menuLinks = document.querySelectorAll('a[href*="#"]:not(.accordion-heading)');
        for (const link of menuLinks) {
            link.addEventListener("click", function (e) {
                const target = this.getAttribute("href");
                const hash = target.split("#")[1];
                const targetEl = document.getElementById(hash);
                if (typeof (targetEl) != 'undefined' && targetEl != null) {
                    e.preventDefault();
                    let targetTop = targetEl.getBoundingClientRect().top + window.scrollY;
                    targetTop -= $scrollOffset;
                    window.scroll({top: targetTop, behavior: 'smooth'});
                }
            });
        }

    };

    CRUMINA.initVideo = function () {
        plyr.setup('.plyr');
    };

    CRUMINA.burgerAnimation = function () {
        /* In animations (to close icon) */

        var beginAC = 80,
            endAC = 320,
            beginB = 80,
            endB = 320;

        function inAC(s) {
            s.draw('80% - 240', '80%', 0.3, {
                delay: 0.1,
                callback: function () {
                    inAC2(s)
                }
            });
        }

        function inAC2(s) {
            s.draw('100% - 545', '100% - 305', 0.6, {
                easing: ease.ease('elastic-out', 1, 0.3)
            });
        }

        function inB(s) {
            s.draw(beginB - 60, endB + 60, 0.1, {
                callback: function () {
                    inB2(s)
                }
            });
        }

        function inB2(s) {
            s.draw(beginB + 120, endB - 120, 0.3, {
                easing: ease.ease('bounce-out', 1, 0.3)
            });
        }

        /* Out animations (to burger icon) */

        function outAC(s) {
            s.draw('90% - 240', '90%', 0.1, {
                easing: ease.ease('elastic-in', 1, 0.3),
                callback: function () {
                    outAC2(s)
                }
            });
        }

        function outAC2(s) {
            s.draw('20% - 240', '20%', 0.3, {
                callback: function () {
                    outAC3(s)
                }
            });
        }

        function outAC3(s) {
            s.draw(beginAC, endAC, 0.7, {
                easing: ease.ease('elastic-out', 1, 0.3)
            });
        }

        function outB(s) {
            s.draw(beginB, endB, 0.7, {
                delay: 0.1,
                easing: ease.ease('elastic-out', 2, 0.4)
            });
        }

        /* Scale functions */

        function addScale(m) {
            m.className = 'menu-icon-wrapper scaled';
        }

        function removeScale(m) {
            m.className = 'menu-icon-wrapper';
        }

        /* Awesome burger scaled */

        var pathD = document.getElementById('pathD'),
            pathE = document.getElementById('pathE'),
            pathF = document.getElementById('pathF'),
            segmentD = new Segment(pathD, beginAC, endAC),
            segmentE = new Segment(pathE, beginB, endB),
            segmentF = new Segment(pathF, beginAC, endAC),
            wrapper2 = document.getElementById('menu-icon-wrapper'),
            trigger2 = document.getElementById('menu-icon-trigger'),
            toCloseIcon2 = true;

        wrapper2.style.visibility = 'visible';

        trigger2.onclick = function () {
            addScale(wrapper2);
            if (toCloseIcon2) {
                inAC(segmentD);
                inB(segmentE);
                inAC(segmentF);
            } else {
                outAC(segmentD);
                outB(segmentE);
                outAC(segmentF);

            }
            toCloseIcon2 = !toCloseIcon2;
            setTimeout(function () {
                removeScale(wrapper2)
            }, 450);
        };
    };


    CRUMINA.indicatorMegaMenu = function () {
        var megaMenuParrent = $('.menu-item-has-mega-menu > a');
        megaMenuParrent.append('<span class="megamenu-indicator"></span>')
    };

    /* -----------------------------
     * On Click Functions
     * ---------------------------*/
    $window.keydown(function (eventObject) {
        if (eventObject.which == 27) {
            if ($asidePanel.hasClass('opened')) {
                CRUMINA.togglePanel();
            }
            if ($popupSearch.hasClass('open')) {
                $popupSearch.toggleClass('open');
            }
            if ($body.hasClass('open')) {
                CRUMINA.toggleSearch();
            }
            if ($topbar.hasClass('open')) {
                CRUMINA.toggleBar();
            }
        }
    });

    $document.on('click', function (event) {
        if (!$(event.target).closest('.search_main').length && !$(event.target).closest($popupSearch).length && $popupSearch.hasClass('open')) {
            $popupSearch.toggleClass('open');
        }
    });

    jQuery(".js-close-aside").on('click', function () {
        if ($asidePanel.hasClass('opened')) {
            CRUMINA.togglePanel();
        }
        return false;
    });

    jQuery(".js-open-aside").on('click', function () {
        if (!$asidePanel.hasClass('opened')) {
            CRUMINA.togglePanel();
        }
        return false;
    });

    //top bar
    jQuery(".top-bar-link").on('click', function () {
        CRUMINA.toggleBar();
    });
    jQuery('.top-bar-close').on('click', function () {
        CRUMINA.toggleBar();
    });


    jQuery(".js-open-search").on('click', function () {
        CRUMINA.toggleSearch();
        return false;
    });

    jQuery(".overlay_search-close").on('click', function () {
        $body.removeClass('open');
        return false;
    });

    jQuery(".js-open-p-search").on('click', function () {
        var $input = $popupSearch.find('input');

        $popupSearch.toggleClass('open');
        $popupSearch.animate({
            'width': $popupSearch.closest('.container').width()
        }, 600);
        setTimeout(function () {
            $input.focus();
        }, 800);
    });

    //Remove play button on play in video player
    $('.plyr').on('click', function () {
        $(this).removeClass('hide-controls');
    });

    CRUMINA.quantity_selector_button_mod = function () {
        jQuery(".quantity input[type=number]").each(function () {
            var number = jQuery(this),
                max = parseFloat(number.attr('max')),
                min = parseFloat(number.attr('min')),
                step = parseInt(number.attr('step'), 10),
                newNum = jQuery(jQuery('<div />').append(number.clone(true)).html().replace('number', 'text')).insertAfter(number);
            number.remove();

            setTimeout(function () {
                if (newNum.next('.quantity-plus').length == 0) {
                    var minus = jQuery('<input type="button" value="-" class="quantity-minus">').insertBefore(newNum),
                        plus = jQuery('<input type="button" value="+" class="quantity-plus">').insertAfter(newNum);

                    minus.on('click', function () {
                        var the_val = parseInt(newNum.val(), 10) - step;
                        the_val = the_val < 0 ? 0 : the_val;
                        the_val = the_val < min ? min : the_val;
                        newNum.val(the_val);
                        enable_update_cart_button();
                    });
                    plus.on('click', function () {
                        var the_val = parseInt(newNum.val(), 10) + step;
                        the_val = the_val > max ? max : the_val;
                        newNum.val(the_val);
                        enable_update_cart_button();
                    });

                }
            }, 10);

        });
    };

    // since woocommerce 2.6 the update_cart button is disabeld by default and needs to be enabled if quantities change
    function enable_update_cart_button() {
        var $update_cart_button = jQuery('table.shop_table.cart').closest('form').find('input[name="update_cart"]');
        if ($update_cart_button.length) {
            $update_cart_button.prop('disabled', false);
        }
    }

    // listen to updated_wc_div event since woocommerce 2.6 to redraw quantity selector and update the cart icon value
    jQuery(document).bind("updated_wc_div", function () {
        //setTimeout( update_cart_sub-menu, 1000 ); // high timeout needed because the minicard is drawn after the updated_wc_div event
        CRUMINA.quantity_selector_button_mod();
    });

    /*---------------------------------
     ACCORDION
     -----------------------------------*/
    $('.accordion-heading').on('click', function () {
        $(this).parents('.panel-heading').toggleClass('active');
        $(this).parents('.accordion-panel').toggleClass('active');
    });
    CRUMINA.initAccordion = function (wrp) {
        $(wrp).find('.accordion-heading')
            .off('click')
            .on('click', function () {
                $(this).parents('.panel-heading').toggleClass('active');
                $(this).parents('.accordion-panel').toggleClass('active');
            });
    };

    $(".input-dark").find('input').focus(function () {
        $(this).closest('form').addClass('input-drop-shadow');
    }).blur(function () {
        $(this).closest('form').removeClass('input-drop-shadow');
    });

    /* -----------------------
    * Main Navigation INIT
    * --------------------- */

    CRUMINA.navigation = function () {
        var navigation = new Navigation(document.getElementById("site-header"), {
            autoSubmenuIndicator: false
        });

        if ($header.hasClass('sticky-top')) {
            // Listen for resize events

            window.addEventListener('scroll', function (event) {

                var timeout;
                // If there's a timer, cancel it
                if (timeout) {
                    window.cancelAnimationFrame(timeout);
                }

                // Setup the new requestAnimationFrame()
                timeout = window.requestAnimationFrame(function () {

                    let scrollPosition = Math.round(window.scrollY);

                    let headerHeight = $header.outerHeight();
                    if (scrollPosition > headerHeight) {

                        $header.addClass('header--fixed');
                    }
                    // If not, remove "sticky" class from header
                    else {
                        $header.removeClass('header--fixed');
                    }
                });

            }, false);

            let scrollPosition = Math.round(window.scrollY);

            let headerHeight = $header.outerHeight();
            // If we've scrolled 60px, add "sticky" class to the header
            if (scrollPosition > headerHeight) {
                $header.addClass('header--fixed');
            }
            // If not, remove "sticky" class from header
            else {
                $header.removeClass('header--fixed');
            }

        }
    };

    // Fix the submenu on the right side
    CRUMINA.fixMainMenu = function () {
        const mobileWidthBase = 992;
        var submenus = $('.navigation-menu').children("li").find(".navigation-dropdown");

        if ($(window).innerWidth() > mobileWidthBase) {
            var menu_width = $("body").outerWidth(true);

            for (var i = 0; i < submenus.length; i++) {
                var submenusPosition = $(submenus[i]).css("display", "block").offset().left;

                if ($(submenus[i]).outerWidth() + submenusPosition > menu_width) {
                    $(submenus[i]).addClass("navigation-dropdown-left");
                } else {
                    if (menu_width == $(submenus[i]).outerWidth() || (menu_width - $(submenus[i]).outerWidth()) < 20) {
                        $(submenus[i]).addClass("navigation-dropdown-left");
                    }
                    if (submenusPosition + $(submenus[i]).outerWidth() < menu_width) {
                        $(submenus[i]).addClass("navigation-dropdown-right");
                    }
                }

                /*$(submenus[i]).css("display", "none");*/
            }
        }
    };

    /* -----------------------------
     * On DOM ready functions
     * ---------------------------*/
    CRUMINA.init = function () {

        CRUMINA.navigation();
        CRUMINA.fixMainMenu();
        if ($('#menu-icon-wrapper').length) {
            CRUMINA.burgerAnimation();
        }
        if (typeof (back_to_top) != 'undefined' && back_to_top != null) {
            CRUMINA.backToTop();
        }
        CRUMINA.Swiper.init();
        CRUMINA.mainSliderHeight();
        CRUMINA.equalHeight();
        CRUMINA.mediaPopups();
        CRUMINA.IsotopeSort();
        CRUMINA.blogMasonry();
        CRUMINA.parallaxFooter();
        CRUMINA.indicatorMegaMenu();

        CRUMINA.quantity_selector_button_mod();

        CRUMINA.videoBgInit();
        CRUMINA.niceSelectInit();
        CRUMINA.notGruppedInit();
        CRUMINA.cartPopup.init();
        CRUMINA.backgroundAnimationInit();
        CRUMINA.addEventListeners();

        if ($preloader.length) {
            CRUMINA.preloader();
        }

        // On Scroll animations.
        CRUMINA.animateSvg();
        CRUMINA.counters();
        CRUMINA.progresBars();
        CRUMINA.pieCharts();
        CRUMINA.chartJs();

    };

    CRUMINA.addEventListeners = function () {
        $(window).on('resize', function () {
            setTimeout(function () {
                CRUMINA.mainSliderHeight();
            }, 300);
        });

        // Hide open popups
        $document.on('click touch', function (event) {

            var $cartPopup = $('.cart-popup-wrap');

            if (!$(event.target).closest($asidePanel).length) {
                if ($asidePanel.hasClass('opened')) {
                    CRUMINA.togglePanel();
                }
            }
        });
    };

    CRUMINA.videoBgInit = function () {
        $('.js-section-background').background();
    };

    CRUMINA.niceSelectInit = function () {
        $('#archives-dropdown--1, select.nice-select, select.orderby, .variations select, .card-expiration select, .widget select').niceSelect();
    };

    CRUMINA.backgroundAnimationInit = function () {
        if ($subscribe_section.length && $subscribe_section.hasClass('js-animated')) {
            CRUMINA.SubscribeScrollAnnimation();
        }
        if ($('.crumina-your-score').length) {
            CRUMINA.SeoScoreScrollAnnimation();
        }
        if ($('.crumina-testimonial-slider').length) {
            CRUMINA.TestimonialScrollAnnimation();
        }
        if ($('.crumina-our-vision').length) {
            CRUMINA.OurVisionScrollAnnimation();
        }
        if ($('.crumina-background-mountains').length) {
            CRUMINA.MountainsScrollAnnimation();
        }
        if ($('.crumina-custom-image-bg').length) {
            CRUMINA.SeoCustomScrollAnnimation();
        }
    };

    CRUMINA.notGruppedInit = function () { // Must be optimized letter
        $(".input-text").each(function () {
            $(this).addClass('input-standard-grey');
        });


        $(".crumina-module.list").each(function () {
            var $this = $(this);
            var $icon = $(this).data('icon');
            if ($icon.length && !$this.hasClass('already-with-icon')) {
                $this.find('li').wrapInner('<div class="ovh"></div>');
                if( !$this.hasClass('icon-url') ){
                    $this.find('li').prepend('<i class="' + $icon + '"></i>');
                }else{
                    $this.find('li').prepend('<img class="list-icn" src="' + $icon + '"/>');
                }
                $this.addClass('already-with-icon');
            }
        });
    };

    CRUMINA.cartPopup = {
        $wrap: null,
        $cart: null,
        init: function () {
            this.$wrap = $('ul.nav-add .cart');
            this.$link = $('.js-cart-animate', this.$wrap);

            this.addEventListeners();
        },
        addEventListeners: function () {
            var _this = this;
            this.$wrap.on('click touch', '.js-cart-animate', function () {
                _this.$wrap.toggleClass('visible');
            });

            $document.on('click touch', function (event) {
                if (!$(event.target).closest(_this.$wrap).length) {
                    if (_this.$wrap.hasClass('visible')) {
                        _this.$wrap.toggleClass('visible')
                    }
                }
            });
        }
    };

    $document.ready(function () {
        CRUMINA.init();
    });

    $window.on('load', function () {
        CRUMINA.initSmoothScroll();
    });


    $(window).resize(function () {
        CRUMINA.fixMainMenu();
    });

})(jQuery);;