/*! Auxin WordPress Framework - v5.8.0 (2022-08-30)
 *  Scripts for initializing plugins 
 *  http://averta.net
 *  (c) 2014-2022 averta;
 */



/* ================== js/src/functions.js =================== */


/*--------------------------------------------
 *  Functions
 *--------------------------------------------*/

function auxin_is_rtl(){
    return ((typeof auxin !== 'undefined') && (auxin.is_rtl == "1" || auxin.wpml_lang == "fa") )?true:false;
}

// Detect color contrast
function auxin_get_contrast( color ){
    var r,b,g,hsp
      , a = color;

    if (a.match(/^rgb/)) {
      a = a.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+(?:\.\d+)?))?\)$/);
      r = a[1];
      g = a[2];
      b = a[3];
    } else {
      a = +("0x" + a.slice(1).replace(
          a.length < 5 && /./g, '$&$&'
        )
      );
      r = a >> 16;
      b = a >> 8 & 255;
      g = a & 255;
    }
    hsp = Math.sqrt(
      0.299 * (r * r) +
      0.587 * (g * g) +
      0.114 * (b * b)
    );
    
    // Best value is 127.5, but we use 200 for some reasons
	return ( hsp > 200 ) ? 'black' : 'white';
};


/* ================== js/src/generals.js =================== */


/* ------------------------------------------------------------------------------ */
// General javascripts
/* ------------------------------------------------------------------------------ */

;(function ( $, window, document, undefined ) {
    "use strict";

    var $window = $(window),
        $siteHeader = $('#site-header'),
        headerStickyHeight = $('#site-header').data('sticky-height') || 0;

    /* ------------------------------------------------------------------------------ */
    // goto top
    var gotoTopBtn = $('.aux-goto-top-btn'), distToFooter, footerHeight;

    $( function() {
        if ( gotoTopBtn.length && jQuery.fn.scrollTo ) {
            footerHeight = $('#sitefooter').outerHeight();

            gotoTopBtn.on( 'click touchstart', function() {
                $window.scrollTo( 0, {duration: gotoTopBtn.data('animate-scroll') ? 1500 : 0,  easing:'easeInOutQuart'});
            } );

            gotoTopBtn.css('display', 'block');
            scrollToTopOnScrollCheck();
            $window.on('scroll', scrollToTopOnScrollCheck);
        }


        function scrollToTopOnScrollCheck() {
            if ( $window.scrollTop() > 200 ) {
                gotoTopBtn[0].style[window._jcsspfx + 'Transform'] = 'translateY(0)';
                distToFooter = document.body.scrollHeight - $window.scrollTop() - window.innerHeight - footerHeight;

                if ( distToFooter < 0 ) {
                    gotoTopBtn[0].style[window._jcsspfx + 'Transform'] = 'translateY('+distToFooter+'px)';
                }
            } else {
                gotoTopBtn[0].style[window._jcsspfx + 'Transform'] = 'translateY(150px)';
            }
        }

        /* ------------------------------------------------------------------------------ */
        // add dom ready helper class
        $('body').addClass( 'aux-dom-ready' )
                 .removeClass( 'aux-dom-unready' );

        /* ------------------------------------------------------------------------------ */
        // animated goto
        if ( $.fn.scrollTo ) {
            var allLinks = document.querySelectorAll('a:not([href^="\#elementor-"])');

            Array.prototype.slice.call(allLinks).forEach( function(link) {
                if ( (link.href && link.href.indexOf('#') != -1) && ( (link.pathname == location.pathname) || ('/'+link.pathname == location.pathname) ) && (link.search == location.search) ) {

                    link.addEventListener('click', function(e) {
                        var isWCTabs     = this.closest('.woocommerce-tabs');

                        if ( !this.hash || isWCTabs ) {
                            return;
                        }

                        e.preventDefault();
                        e.stopPropagation();

                        if ( this.classList.contains('woocommerce-review-link') ) {
                            var reviewTab = document.querySelector('#tab-title-reviews');

                            if ( !reviewTab.classList.contains('active') ) {
                                $(reviewTab).find('a').trigger('click');
                            }
                        }

                        var isFullScreen = this.closest('.aux-fs-popup .aux-fs-menu'),
                            target       = document.querySelector( this.hash );

                        if ( target ) {
                            $window.scrollTo( $(target).offset().top - headerStickyHeight, this.classList.contains( 'aux-jump' )  ? 0 : 1500,  {easing:'easeInOutQuart'});
                        }

                        if  ( isFullScreen ) {
                            $(isFullScreen).siblings('.aux-panel-close').trigger('click')
                        }
                    });

                }
            } );

        }

        /* ------------------------------------------------------------------------------ */
        // add space above sticky header if we have the wp admin bar in the page

        var $adminBar            = $('#wpadminbar'),
            marginFrameThickness = $('.aux-side-frames').data('thickness') || 0,
            siteHeaderTopPosition;

        $('#site-header').on( 'sticky', function(){
            if ( $adminBar.hasClass('mobile') || window.innerWidth <= 600 ) {
                return;
            }
            // calculate the top position
            siteHeaderTopPosition = 0;
            if( $adminBar.length ){
                siteHeaderTopPosition += $adminBar.height();
            }
            if( marginFrameThickness && window.innerWidth >= 700 ){
                siteHeaderTopPosition += marginFrameThickness;
            }
            $(this).css( 'top', siteHeaderTopPosition + 'px' );

        }).on( 'unsticky', function(){
            $(this).css( 'top', '' );
        });

        /* ------------------------------------------------------------------------------ */
        // disable search submit if the field is empty

        $('.aux-search-field, #searchform #s').each(function(){
            var $this = $(this);
            $this.parent('form').on( 'submit', function( e ){
                if ( $this.val() === '' ) {
                    e.preventDefault();
                }
            });
        });

        /* ------------------------------------------------------------------------------ */
        // fix megamenu width for middle aligned menu in header
        // var $headerContainer = $siteHeader.find('.aux-header-elements'),
        //     $headerMenu = $('#master-menu-main-header');
        // var calculateMegamenuWidth = function(){
        //     var $mm = $siteHeader.find( '.aux-middle .aux-megamenu' );
        //     if ( $mm.length ) {
        //         $mm.width( $headerContainer.innerWidth() );
        //         $mm.css( 'left', -( $headerMenu.offset().left - $headerContainer.offset().left ) + 'px' );
        //     } else {
        //         $headerMenu.find( '.aux-megamenu' ).css('width', '').css( 'left', '' );
        //     }
        // };

        // $(window).load(function() {
        //     calculateMegamenuWidth();
        // });

        // $window.on( 'resize', calculateMegamenuWidth );

        /* ------------------------------------------------------------------------------ */
        // Get The height of Top bar When Overlay Header Option is enable
        if ( $siteHeader.hasClass('aux-overlay-with-tb') || $siteHeader.hasClass('aux-overlay-header') ){

            if( $siteHeader.hasClass('aux-overlay-with-tb') ){
                var $topBarHeight = $('#top-header').outerHeight();
                $('.aux-overlay-with-tb').css( 'top' , $topBarHeight+'px') ;
            }

        }

    });


    /* ------------------------------------------------------------ */
    // Switch the color of header buttons on sticky
    /* ------------------------------------------------------------ */

    window.auxinSetupLogoSwitcher = function(){

        if( ! $('body').hasClass('aux-top-sticky') ){
            return;
        }

        var $btns = $('#site-header .aux-btns-box .aux-button'), $btn,
            $default_logo   = $('.aux-logo-header .aux-logo-anchor:not(.aux-logo-sticky), .aux-widget-logo .aux-logo-anchor:not(.aux-logo-sticky)'),
            $sticky_logo    = $('.aux-logo-header .aux-logo-anchor.aux-logo-sticky, .aux-widget-logo .aux-logo-anchor.aux-logo-sticky'),
            has_sticky_logo = $sticky_logo.length;

        $('#site-header, #site-elementor-header').on( 'sticky', function(){
            for ( var i = 0, l = $btns.length; i < l; i++ ) {
                $btn = $btns.eq(i);
                $btn.removeClass( "aux-" + $btn.data("colorname-default") ).addClass( "aux-" + $btn.data("colorname-sticky") );
            }
            if( has_sticky_logo ){
                $default_logo.addClass('aux-logo-hidden');
                $sticky_logo.removeClass('aux-logo-hidden');
            }
        }).on( 'unsticky', function(){
            for ( var i = 0, l = $btns.length; i < l; i++ ) {
                $btn = $btns.eq(i);
                $btn.removeClass( "aux-" + $btn.data("colorname-sticky") ).addClass( "aux-" + $btn.data("colorname-default") );
            }
            if( has_sticky_logo ){
                $default_logo.removeClass('aux-logo-hidden');
                $sticky_logo.addClass('aux-logo-hidden');
            }
        });

    };
    window.auxinSetupLogoSwitcher();


    // this snippet prevents auto scrolling after updating cart items in the cart or checkout page
    $(document).ready(function($) {
        $(document).ajaxComplete(function() {
        if ($('body').hasClass('woocommerce-checkout') || $('body').hasClass('woocommerce-cart')) {
            jQuery( 'html, body' ).stop();
        }
      });
    });


})(jQuery, window, document);


/** ------------------------------------------------------------
 * WP Ulike HearBeat Animation
 */
 var UlikeHeart  = document.querySelectorAll('.wp_ulike_btn');

function auxinUlikeHeartBeat(e){
    e.target.classList.add('aux-icon-heart');
}
function removeAuxinUlikeHeartBeat(e){
    e.target.classList.remove('aux-icon-heart');
}

for ( var i = 0 ; UlikeHeart.length > i; i++){
    UlikeHeart[i].addEventListener('click', auxinUlikeHeartBeat );
    UlikeHeart[i].addEventListener('animationend', removeAuxinUlikeHeartBeat );
}

/** ------------------------------------------------------------
 * A fix for elements with fixed-position animated panels.
 */
(function () {
    // add more fixed elements here...
    var target = ".aux-search-popup, .aux-fs-popup";
    document.querySelectorAll(target).forEach(function (element) {
      var closestAnimElement = element.closest(".aux-appear-watch-animation > .elementor-widget-container,.aux-appear-watch-animation > .elementor-column-wrap");

      if (closestAnimElement) {
        [closestAnimElement, closestAnimElement.parentElement].forEach(function (animElement) {
          return animElement.addEventListener("animationstart", animElement.addEventListener("animationend", function () {
            animElement.style.animationName = "none";
            animElement.style.opacity = 1;
          }));
        });
      }
    });
  })();


/* ================== js/src/jquery-numerator.js =================== */


/*
 *   jQuery Numerator Plugin 0.2.1
 *   https://github.com/garethdn/jquery-numerator
 *
 *   Copyright 2015, Gareth Nolan
 *   http://ie.linkedin.com/in/garethnolan/

 *   Based on jQuery Boilerplate by Zeno Rocha with the help of Addy Osmani
 *   http://jqueryboilerplate.com
 *
 *   Licensed under the MIT license:
 *   http://www.opensource.org/licenses/MIT
 */

;(function (factory) {
    'use strict';
    if (typeof define === 'function' && define.amd) {
        // AMD is used - Register as an anonymous module.
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        factory(require('jquery'));
    } else {
        // Neither AMD nor CommonJS used. Use global variables.
        if (typeof jQuery === 'undefined') {
            throw 'jquery-numerator requires jQuery to be loaded first';
        }
        factory(jQuery);
    }
}(function ($) {

    var pluginName = "numerator",
    defaults = {
        easing: 'swing',
        duration: 500,
        delimiter: undefined,
        rounding: 0,
        toValue: undefined,
        fromValue: undefined,
        queue: false,
        onStart: function(){},
        onStep: function(){},
        onProgress: function(){},
        onComplete: function(){}
    };

    function Plugin ( element, options ) {
        this.element = element;
        this.settings = $.extend( {}, defaults, options );
        this._defaults = defaults;
        this._name = pluginName;
        this.init();
    }

    Plugin.prototype = {

        init: function () {
            this.parseElement();
            this.setValue();
        },

        parseElement: function () {
            var elText = $(this.element).text().trim();

            this.settings.fromValue = this.settings.fromValue || this.format(elText);
        },

        setValue: function() {
            var self = this;

            $({value: self.settings.fromValue}).animate({value: self.settings.toValue}, {

                duration: parseInt(self.settings.duration, 10),

                easing: self.settings.easing,

                start: self.settings.onStart,

                step: function(now, fx) {
                    $(self.element).text(self.format(now));
                    // accepts two params - (now, fx)
                    self.settings.onStep(now, fx);
                },

                // accepts three params - (animation object, progress ratio, time remaining(ms))
                progress: self.settings.onProgress,

                complete: self.settings.onComplete
            });
        },

        format: function(value){
            var self = this;

            if ( parseInt(this.settings.rounding ) < 1) {
                value = parseInt(value, 10);
            } else {
                value = parseFloat(value).toFixed( parseInt(this.settings.rounding) );
            }

            if (self.settings.delimiter) {
                return this.delimit(value)
            } else {
                return value;
            }
        },

        // TODO: Add comments to this function
        delimit: function(value){
            var self = this;

            value = value.toString();

            if (self.settings.rounding && parseInt(self.settings.rounding, 10) > 0) {
                var decimals = value.substring( (value.length - (self.settings.rounding + 1)), value.length ),
                    wholeValue = value.substring( 0, (value.length - (self.settings.rounding + 1)));

                return self.addDelimiter(wholeValue) + decimals;
            } else {
                return self.addDelimiter(value);
            }
        },

        addDelimiter: function(value){
            return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, this.settings.delimiter);
        }
    };

    $.fn[ pluginName ] = function ( options ) {
        return this.each(function() {
            if ( $.data( this, "plugin_" + pluginName ) ) {
                $.data(this, 'plugin_' + pluginName, null);
            }
            $.data( this, "plugin_" + pluginName, new Plugin( this, options ) );
        });
    };

}));


/* ================== js/src/jquery.twbsPagination.js =================== */


/*!
 * jQuery pagination plugin v1.2.6
 * http://esimakin.github.io/twbs-pagination/
 *
 * Copyright 2014, Eugene Simakin
 * Released under Apache 2.0 license
 * http://apache.org/licenses/LICENSE-2.0.html
 */
(function ($, window, document, undefined) {

    'use strict';

    var old = $.fn.twbsPagination;

    // PROTOTYPE AND CONSTRUCTOR

    var TwbsPagination = function (element, options) {
        this.$element = $(element);
        this.options = $.extend({}, $.fn.twbsPagination.defaults, options);

        if (this.options.startPage < 1 || this.options.startPage > this.options.totalPages) {
            throw new Error('Start page option is incorrect');
        }

        this.options.totalPages = parseInt(this.options.totalPages);
        if (isNaN(this.options.totalPages)) {
            throw new Error('Total pages option is not correct!');
        }

        this.options.visiblePages = parseInt(this.options.visiblePages);
        if (isNaN(this.options.visiblePages)) {
            throw new Error('Visible pages option is not correct!');
        }

        if (this.options.totalPages < this.options.visiblePages) {
            this.options.visiblePages = this.options.totalPages;
        }

        if (this.options.onPageClick instanceof Function) {
            this.$element.first().on('page', this.options.onPageClick);
        }

        if (this.options.href) {
            var match, regexp = this.options.href.replace(/[-\/\\^$*+?.|[\]]/g, '\\$&');
            regexp = regexp.replace(this.options.hrefVariable, '(\\d+)');
            if ((match = new RegExp(regexp, 'i').exec(window.location.href)) != null) {
                this.options.startPage = parseInt(match[1], 10);
            }
        }

        var tagName = (typeof this.$element.prop === 'function') ?
            this.$element.prop('tagName') : this.$element.attr('tagName');

        if (tagName === 'UL') {
            this.$listContainer = this.$element;
        } else {
            this.$listContainer = $('<ul></ul>');
        }

        this.$listContainer.addClass(this.options.paginationClass);

        if (tagName !== 'UL') {
            this.$element.append(this.$listContainer);
        }

        this.render(this.getPages(this.options.startPage));
        this.setupEvents();

        if (this.options.initiateStartPageClick) {
            this.$element.trigger('page', this.options.startPage);
        }

        return this;
    };

    TwbsPagination.prototype = {

        constructor: TwbsPagination,

        destroy: function () {
            this.$element.empty();
            this.$element.removeData('twbs-pagination');
            this.$element.off('page');

            return this;
        },

        show: function (page) {
            if (page < 1 || page > this.options.totalPages) {
                throw new Error('Page is incorrect.');
            }

            this.render(this.getPages(page));
            this.setupEvents();

            this.$element.trigger('page', page);

            return this;
        },

        buildListItems: function (pages) {
            var listItems = [];

            if (this.options.first) {
                listItems.push(this.buildItem('first', 1));
            }

            if (this.options.prev) {
                var prev = pages.currentPage > 1 ? pages.currentPage - 1 : this.options.loop ? this.options.totalPages  : 1;
                listItems.push(this.buildItem('prev', prev));
            }

            for (var i = 0; i < pages.numeric.length; i++) {
                listItems.push(this.buildItem('page', pages.numeric[i]));
            }

            if (this.options.next) {
                var next = pages.currentPage < this.options.totalPages ? pages.currentPage + 1 : this.options.loop ? 1 : this.options.totalPages;
                listItems.push(this.buildItem('next', next));
            }

            if (this.options.last) {
                listItems.push(this.buildItem('last', this.options.totalPages));
            }

            return listItems;
        },

        buildItem: function (type, page) {
            var $itemContainer = $('<li></li>'),
                $itemContent = $('<a></a>'),
                itemText = null;

            switch (type) {
                case 'page':
                    itemText = page;
                    $itemContainer.addClass(this.options.pageClass);
                    break;
                case 'first':
                    itemText = this.options.first;
                    $itemContainer.addClass(this.options.firstClass);
                    break;
                case 'prev':
                    itemText = this.options.prev;
                    $itemContainer.addClass(this.options.prevClass);
                    break;
                case 'next':
                    itemText = this.options.next;
                    $itemContainer.addClass(this.options.nextClass);
                    break;
                case 'last':
                    itemText = this.options.last;
                    $itemContainer.addClass(this.options.lastClass);
                    break;
                default:
                    break;
            }

            $itemContainer.data('page', page);
            $itemContainer.data('page-type', type);
            $itemContainer.append($itemContent.attr('href', this.makeHref(page)).html(itemText));

            return $itemContainer;
        },

        getPages: function (currentPage) {
            var pages = [];

            var half = Math.floor(this.options.visiblePages / 2);
            var start = currentPage - half + 1 - this.options.visiblePages % 2;
            var end = currentPage + half;

            // handle boundary case
            if (start <= 0) {
                start = 1;
                end = this.options.visiblePages;
            }
            if (end > this.options.totalPages) {
                start = this.options.totalPages - this.options.visiblePages + 1;
                end = this.options.totalPages;
            }

            var itPage = start;
            while (itPage <= end) {
                pages.push(itPage);
                itPage++;
            }

            return {"currentPage": currentPage, "numeric": pages};
        },

        render: function (pages) {
            var _this = this;
            this.$listContainer.children().remove();
            this.$listContainer.append(this.buildListItems(pages));

            this.$listContainer.children().each(function () {
                var $this = $(this),
                    pageType = $this.data('page-type');

                switch (pageType) {
                    case 'page':
                        if ($this.data('page') === pages.currentPage) {
                            $this.addClass(_this.options.activeClass);
                        }
                        break;
                    case 'first':
                            $this.toggleClass(_this.options.disabledClass, pages.currentPage === 1);
                        break;
                    case 'last':
                            $this.toggleClass(_this.options.disabledClass, pages.currentPage === _this.options.totalPages);
                        break;
                    case 'prev':
                            $this.toggleClass(_this.options.disabledClass, !_this.options.loop && pages.currentPage === 1);
                        break;
                    case 'next':
                            $this.toggleClass(_this.options.disabledClass,
                                !_this.options.loop && pages.currentPage === _this.options.totalPages);
                        break;
                    default:
                        break;
                }

            });
        },

        setupEvents: function () {
            var _this = this;
            this.$listContainer.find('li').each(function () {
                var $this = $(this);
                $this.off();
                if ($this.hasClass(_this.options.disabledClass) || $this.hasClass(_this.options.activeClass)) {
                    $this.on('click', false);
                    return;
                }
                $this.on('click', function (evt) {
                    // Prevent click event if href is not set.
                    !_this.options.href && evt.preventDefault();
                    _this.show(parseInt($this.data('page')));
                });
            });
        },

        makeHref: function (c) {
            return this.options.href ? this.options.href.replace(this.options.hrefVariable, c) : "#";
        }

    };

    // PLUGIN DEFINITION

    $.fn.twbsPagination = function (option) {
        var args = Array.prototype.slice.call(arguments, 1);
        var methodReturn;

        var $this = $(this);
        var data = $this.data('twbs-pagination');
        var options = typeof option === 'object' && option;

        if (!data) $this.data('twbs-pagination', (data = new TwbsPagination(this, options) ));
        if (typeof option === 'string') methodReturn = data[ option ].apply(data, args);

        return ( methodReturn === undefined ) ? $this : methodReturn;
    };

    $.fn.twbsPagination.defaults = {
        totalPages: 0,
        startPage: 1,
        visiblePages: 5,
        initiateStartPageClick: true,
        href: false,
        hrefVariable: '{{number}}',
        first: 'First',
        prev: 'Previous',
        next: 'Next',
        last: 'Last',
        loop: false,
        onPageClick: null,
        paginationClass: 'pagination',
        nextClass: 'next',
        prevClass: 'prev',
        lastClass: 'last',
        firstClass: 'first',
        pageClass: 'page',
        activeClass: 'active',
        disabledClass: 'disabled'
    };

    $.fn.twbsPagination.Constructor = TwbsPagination;

    $.fn.twbsPagination.noConflict = function () {
        $.fn.twbsPagination = old;
        return this;
    };

})(window.jQuery, window, document);


/* ================== js/src/module.carousel-lightbox.js =================== */


/**
 * Init Carousel and Lightbox
 *
 */
(function($, window, document, undefined){
    "use strict";

    $.fn.AuxinCarouselInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-lightbox-frame').photoSwipe({
                target: '.aux-lightbox-btn',
                bgOpacity: 0.8,
                shareEl: true
            }
        );

        $scope.find('.aux-lightbox-gallery').photoSwipe({
                target: '.aux-lightbox-btn',
                bgOpacity: 0.97,
                shareEl: true
            }
        );

        $scope.find('.aux-lightbox-video').photoSwipe({
                target: '.aux-open-video',
                bgOpacity: 0.97,
                shareEl: true
            }
        );

        $scope.find('.master-carousel-slider').AuxinCarousel({
            autoplay: false,
            columns: 1,
            speed: 15,
            inView: 15,
            autohight: false,
            rtl: $('body').hasClass('rtl')
        }).on( 'auxinCarouselInit', function(){
            // init lightbox on slider after carousel init
            $scope.find('.aux-lightbox-in-slider').photoSwipe({
                    target: '.aux-lightbox-btn',
                    bgOpacity: 0.8,
                    shareEl: true
                }
            );
        } );

        // all other master carousel instances
        $scope.find('.master-carousel').AuxinCarousel({
            speed: 30,
            rtl: $('body').hasClass('rtl')
        });
    };

})(jQuery, window, document);


/* ================== js/src/module.elements.js =================== */


/**
 * General Modules
 */
;(function($, window, document, undefined){

    // Init Tilt
    $.fn.AuxinTiltElementInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-tilt-box').tilt({
            maxTilt : $(this).data('max-tilt'),
            easing: 'cubic-bezier(0.23, 1, 0.32, 1)',
            speed: $(this).data('time'),
            perspective: 2000
        });
    }

    // Init FitVids
    $.fn.AuxinFitVideosInit = function( $scope ){
        $scope = $scope || $(this);
        $scope.find('main').fitVids();
        $scope.find('main').fitVids({ customSelector: 'iframe[src^="http://w.soundcloud.com"], iframe[src^="https://w.soundcloud.com"]'});
    }

    // Init Image box
    $.fn.AuxinImageBoxInit = function( $scope ){
        $scope = $scope || $(this);
        $scope.find('.aux-image-box').AuxinImagebox();
    }

    // Init Before after
    $.fn.AuxinBeforeAfterInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-before-after').imagesLoaded( function(){
            // init before after slider
            $scope.find('.aux-before-after').each( function() {
                var $slider = $(this);
                $slider.twentytwenty({
                    default_offset_pct: $slider.data( 'offset' ) || 0.5,
                    orientation: 'horizontal'
                });
            });
        });
    }

    // Parallax Box
    $.fn.AuxinParallaxBoxInit = function( $scope ){
        $scope = $scope || $(this);

        // General parallax box
        $scope.find('.aux-parallax-box').AvertaParallaxBox();
    };

    // Parallax Section
    $.fn.AuxinParallaxSectionInit = function( $scope ){
        $scope = $scope || $(this);

        var $target = $scope.hasClass('aux-parallax-section') ? $scope : $scope.find('.aux-parallax-section');
        if( ! $target.length ){
            return;
        }

        // Only init the parallax on deepest section
        $target.each( function(key, item){
            var $parallax_box = $(this);

            if( ! $parallax_box.find('.aux-parallax-section').length ){
                $parallax_box.AvertaParallaxBox({
                    targets: 'aux-parallax-piece'
                });
            }
        });
    };


    // Parallax Section
    $.fn.AuxinScrollableAnimsInit = function( $scope ){
        $scope = $scope || $(this);

        var $target = $scope.hasClass('aux-scroll-anim') ? $scope : $scope.find('.aux-scroll-anim');
        if( ! $target.length ){
            return;
        }

        // Only init the parallax on deepest section
        $target.each( function(key, item){
            var $parallax_box = $(this);
            $parallax_box.AvertaScrollAnims();
        });
    };

    // Ajax Search
    $.fn.AuxinAjaxSearch = function( $scope ){
        $scope = $scope || $(this);

        var $target = $scope.hasClass('is-ajax') ? $scope : $scope.find('.is-ajax');
        if( ! $target.length ){
            return;
        }
        // initialize ajax search
        var xhr = null;
        function init($scope) {
            var input = $scope.find('input.aux-search-field');
            var catDropDown = $scope.find('select#cat');
            input.on('keyup', function() {
                search($scope,$(this),catDropDown)
            });
            if (catDropDown.length) {
                catDropDown.select2({
                    minimumResultsForSearch: -1,
                    dropdownCssClass: "aux-search-dropdown"
                });
                catDropDown.on('change', function() {
                    search($scope,input,catDropDown);
                });
            }
            $scope.find('input[type="submit"]').on('click',function(){
                $(this).parents('form').submit();
            });
        }
        function search($scope,input,catDropDown) {
            if (xhr)
                xhr.abort();
            var value = input.val();

            // check if search phrase length have lass than 3 characters return
            if (value.length < 3 || value == '') {
                $scope.find( '.aux-spinner' ).removeClass( 'show' );
                if ($('.aux-search-overlay > .aux-search-field').hasClass('has-result')) {
                    $('.aux-search-overlay .aux-search-result').html('');
                    $('.aux-search-overlay > .aux-search-field').removeClass('has-result');
                }
                return;
            }
            $scope.find('.aux-spinner').addClass( 'show' );
            $scope.find( '.aux-search-result' ).addClass( 'hide' );
            var selectedCat;
            if (catDropDown.length) {
                selectedCat = catDropDown.val();
            } else {
                selectedCat = 0;
            }

            var data = {
                action: 'auxin_ajax_search',
                s: value,
                cat: selectedCat,
            }
            xhr = $.ajax({
                type        :'get',
                dataType    : 'html',
                url         : auxin.ajax_url,
                data : data,
            })
            .done(function(response) {
                $scope.find( '.aux-spinner' ).removeClass( 'show' );
                $scope.find( '.aux-search-result' ).removeClass( 'hide' );
                if (!$('.aux-search-overlay > .aux-search-field').hasClass('has-result')) {
                    $('.aux-search-overlay > .aux-search-field').addClass('has-result');
                    setTimeout(function(){
                        $scope.find('.aux-search-result').html(response)
                    },1000);
                } else {
                    $scope.find('.aux-search-result').html(response)
                }

            });
        }
        // Only init the parallax on deepest section
        $target.each( function(key, item){
            init($(this));
        });
    };

    $.fn.AuxinModernSearchAjax = function( $scope ) {
        $scope = $scope || $( this ) ;

        var $targets = $scope.find( '.aux-search-ajax' );

        function ajaxSearchRequest( searchKey, cat, postTypes, outputWrapper, spinner ) {

            spinner.removeClass( 'aux-spinner-hide' );
            outputWrapper.empty();

            var data = {
                action      : 'aux_modern_search_handler',
                s           : searchKey,
                cat         : cat.id,
                taxonomy    : cat.taxonomy,
                'post_type' : cat.postType,
                'post_types': postTypes
            }

            $.ajax({
                type        :'get',
                dataType    : 'html',
                url         : auxin.ajax_url,
                data : data,
            })
            .done( function( res ) {
                var response = JSON.parse( res );
                var output = generateMarkup( response.data );

                setTimeout( function() {
                    outputWrapper.html(output);
                    spinner.addClass( 'aux-spinner-hide' );
                }, 1500 )

            });


        }

        function generateMarkup( postTypes, wrapper ) {
            var output = '';

            postTypes.forEach( function(postType) {
                var item = postType.results;
                var itemOutput = '';
                var title = '';

                if (item.length) {
                    title = '<a class="aux-other-search-result-label" href="' + postType.searchLink + '">' + postType.fromTitle + '</a>'

                    item.forEach( function(post) {
                        itemOutput += post;
                    })


                } else {
                    title = '<a class="aux-other-search-result-label" href="' + postType.searchLink + '">' + postType.noResultMessage + '</a>'
                }

                output += '<div class="aux-other-search-result">' + title + itemOutput + '</div>';

            } );

            return output;

        }

        function initAjaxSearch( element ) {
            var $el             = $( element ),
                $popupContainer = $el.parent('.aux-search-popup-content'),
                $field          = $el.find('.aux-search-field'),
                $spinner        = $popupContainer.find('.aux-loading-spinner'),
                $ajaxOutput     = $popupContainer.find('.aux-search-ajax-output'),
                $cats           = $popupContainer.find('.aux-modern-search-cats'),
                catID           = 0,
                taxonomy        = $cats.length ? $cats.find('option:selected').data('taxonomy') : ['category'],
                postType        = $cats.length ? $cats.find('option:selected').data('post-type') : ['post'],
                postTypes       = $field.data('post-types'),
                delay           = 0,
                fieldValue      = $field.val();


            $field.on( 'keyup' , function( event ) {
                var searchKey = event.target.value;

                if ( searchKey.length <= 3 || searchKey.length >= 35 || fieldValue === event.target.value ) {
                    return;
                }

                if ( delay ) {
                    clearTimeout( delay );
                }

                delay = setTimeout( function(){
                    fieldValue = event.target.value;
                    ajaxSearchRequest( searchKey, { id: catID, taxonomy: taxonomy, postType: postType }, postTypes , $ajaxOutput, $spinner );
                }, 700);

            });

            if ( $cats.length ) {
                $cats.on( 'change', function(event) {
                    var selectedOption= $(event.target).find('option:selected'),
                        selectedTax = selectedOption.data('taxonomy'),
                        selectedPostType = selectedOption.data('post-type');

                    catID    = event.target.value;
                    taxonomy = selectedTax;
                    postType = selectedPostType;

                    ajaxSearchRequest( $field.val(), { id: catID, taxonomy: taxonomy, postType: postType }, postTypes, $ajaxOutput, $spinner );
                });
            }

        }


        $targets.each( function() {
            initAjaxSearch( this );
        } )

    };

    // Elementor Search Element
    $.fn.AuxinElementorSearchElement = function($scope){
        $scope = $scope || $(this);

        var $target = $scope.hasClass('aux-search-elementor-element') ? $scope : $scope.find('.aux-search-elementor-element');
        if( ! $target.length ){
            return;
        }
        $target.each(function(key, item) {
            if ( $(this).parents('.elementor-element').length && $(this).parents('.elementor-element').width() <= 634 ) {
                $(this).addClass('responsive');
            } else if ($(this).hasClass('responsive')) {
                $(this).removeClass('responsive');
            }
        });
    };

    // Media Element init
    $.fn.AuxinMediaElementInit = function(){
        if ( typeof MediaElementPlayer === 'function' ) {
            var settings        = window._wpmejsSettings || {};
            settings.features   = settings.features || mejs.MepDefaults.features;
            settings.features.push( 'AuxinPlayList' );
            /* ------------------------------------------------------------------------------ */
            MediaElementPlayer.prototype.buildAuxinPlayList = function( player, controls, layers, media ) {
                if ( player.container.closest('.wp-video-playlist').length ) {
                    // Add special elements for once.
                    if ( !player.container.closest('.aux-mejs-container').length ){
                        // Add new custom wrap
                        player.container.wrap( "<div class='aux-mejs-container aux-4-6 aux-tb-1 aux-mb-1'></div>" );
                        // Add auxin classes
                        player.container.closest( '.wp-playlist' ).addClass('aux-row').find('.wp-playlist-tracks').addClass('aux-2-6 aux-tb-1 aux-mb-1');
                        // Run perfect scrollbar
                        new PerfectScrollbar('.wp-playlist-tracks');
                    }
                    player.container.addClass( 'aux-player-light' );
                    player.options.stretching = 'none';
                    player.width              = '100%';
                    var $playlistContainer    = player.container.closest( '.wp-playlist' ).find( '.wp-playlist-tracks' );
                    if( !$playlistContainer.find('.aux-playlist-background').length ) {
                        $playlistContainer.prepend( "<div class='aux-playlist-background'></div>" );
                    }
                    var $postFormatHeight     = $('.aux-primary .content').width();
                    // Set playlist Height
                    if( $postFormatHeight >= 1600 ) {
                        player.height = 720;
                    } else if( $postFormatHeight >= 768 && $postFormatHeight < 1600 ) {
                        player.height = 480;
                    } else if( $postFormatHeight >= 480 && $postFormatHeight < 768 ) {
                        player.height = 360;
                    } else {
                        player.height = 240;
                    }
                    // Set playlist height by player's height
                    $playlistContainer.css('height', player.height);
                }
            };
        }
    }

    // Dynamic image drop shadow
    $.fn.AuxinDynamicDropshadow = function(){

        var imgFrame, clonedImg, img;

        if( this instanceof jQuery ){
            if( this && this[0] ){
                img = this[0];
            } else {
                return;
            }
        } else {
            img = this;
        }

        if ( ! img.classList.contains('aux-img-has-shadow')){
            imgFrame  = document.createElement('div');
            clonedImg = img.cloneNode();

            clonedImg.classList.add('aux-img-dynamic-dropshadow-cloned');
            clonedImg.classList.remove('aux-img-dynamic-dropshadow');
            img.classList.add('aux-img-has-shadow');
            imgFrame.classList.add('aux-img-dynamic-dropshadow-frame');

            img.parentNode.appendChild(imgFrame);
            imgFrame.appendChild(img);
            imgFrame.appendChild(clonedImg);
        }
    };

    // Dynamic image drop shadow init
    $.fn.AuxinDynamicDropshadowInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-img-dynamic-dropshadow').each(function() {
            $(this).AuxinDynamicDropshadow();
        });
    };

    // Blur images with scroll
    $.fn.AuxinScrollBlurImage = function( blurValue, startFrom, opacitySpeed ){
        var $this =  $(this),
            prefix = window._jcsspfx || '',
            clonedImage = getImage($this),
            bluredImage = createBluredImage(clonedImage),
            yVisible = startFrom * $this.outerHeight(),
            remainHeight = $this.outerHeight() - yVisible,
            scrollValue,
            opacityValue;

        function getImage($target) {
            var backgroundImage = $target.css('background-image');
            $target.addClass('aux-orginal-blured-img');
            return backgroundImage;
        }

        function createBluredImage (imgUrl){
            var bgImgElement = document.createElement('div');

            $(bgImgElement).appendTo($this);
            $(bgImgElement).addClass('aux-blured-img');

            bgImgElement.style[prefix + 'backgroundImage'] = imgUrl;

            if ( 'auto' != $this.css('background-size') ) {
                bgImgElement.style[prefix + 'backgroundSize'] = $this.css('background-size');
            }

            if ( '0% 0%' != $this.css('background-position') ) {
                bgImgElement.style[prefix + 'backgroundPosition'] = $this.css('background-position');
            }

            if ( 'repeat' != $this.css('background-repeat') ) {
                bgImgElement.style[prefix + 'backgroundRepeat'] = $this.css('background-repeat');
            }

            bgImgElement.style[prefix + 'filter'] = 'blur(' + blurValue + 'px)';

            return $(bgImgElement);
        }

        $(window).on('scroll', function(){
            var winBot = $(window).scrollTop();
            scrollValue = ( winBot - $this.offset().top ) - yVisible;

            if ( scrollValue > 0 ){
                opacityValue = scrollValue / remainHeight;
                opacityValue = Math.min(1, opacityValue * opacitySpeed );

                if( opacityValue < 1 ){
                    bluredImage[0].style[prefix + 'opacity'] = opacityValue;
                } else {
                    bluredImage[0].style[prefix + 'opacity'] = 1;
                }

            } else if ( scrollValue < 0 ){
                bluredImage[0].style[prefix + 'opacity'] = 0;
            }

        });
    }

    // Blur images with scroll - Init
    $.fn.AuxinScrollBlurImageInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-blur-fade').each(function() {
            $(this).AuxinScrollBlurImage( 15, 0.3, 4 );
        });
    }

    // Miscellaneous Elements
    $.fn.AuxinOtherElementsInit = function( $scope ){
        $scope = $scope || $(this);
    }

    // Document ready modules ===============================================

    // Tabs
    $.fn.AuxinLiveTabsInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.widget-tabs .widget-inner').avertaLiveTabs({
            tabs:            'ul.tabs > li',            // Tabs selector
            tabsActiveClass: 'active',                  // A Class that indicates active tab
            contents:        'ul.tabs-content > li',    // Tabs content selector
            contentsActiveClass: 'active',              // A Class that indicates active tab-content
            transition:      'fade',                    // Animation type white switching tabs
            duration :       '500'                      // Animation duration in milliseconds
        });
    }

    // Accordion Element
    $.fn.AuxinAccordionInit = function( $scope ){
        $scope = $scope || $(this);

        var _collapseOnInit = $(this).find('.aux-toggle-widget.aux-open').length ? false : true;

        $scope.find('.aux-sidebar .aux-widget-area').each( function( index, el ) {
            $(this).avertaAccordion({
                items           : '.aux-toggle-widget',
                itemHeader      : '.widget-title',
                itemContent     : '.widget-title + *',
                itemActiveClass : 'aux-open',
                contentWrapClass: 'aux-toggle-widget-wrapper',
                oneVisible      : false,
                collapseOnInit  : _collapseOnInit,
                onExpand: function( $item ){
                    var height = 0;

                    $item.find('.aux-toggle-widget-wrapper > * ').each( function( index, el ) {
                        height += $(el).outerHeight(true);
                    })

                    $item.find('.aux-toggle-widget-wrapper').css( 'height', height );
                },
                onCollapse: function( $item ) {
                    var wrapper = $item.find('.aux-toggle-widget-wrapper'),
                        height = wrapper.outerHeight();

                    wrapper.css('height', height);
                }
            });
        });

        $scope.find('.widget-toggle .widget-inner').each( function( index, el ) {
            $(this).avertaAccordion({
                itemHeader : '.toggle-header',
                itemContent: '.toggle-content',
                oneVisible : $(this).data("toggle") ,
            });
        });

        $scope.find('.aux-widget-faq').each( function( index, el ){
            $(this).avertaAccordion({
                items : '.aux-faq-item',
                itemHeader : '.toggle-header',
                itemContent: '.toggle-content',
                oneVisible : $(this).data("toggle") ,
                expandHashItem : false,
            });
        });
    }

    // Timeline
    $.fn.AuxinTimelineInit = function( $scope ){
        $scope = $scope || $(this);

        // init timeline
        $scope.find('.aux-timeline').each( function(){
            if ( $(this).hasClass('aux-right') ){
                $(this).AuxinTimeline( { responsive : { 760: 'right' } } );
            }else{
                $(this).AuxinTimeline();
            }
        });
    }

    // Code highlighter
    $.fn.AuxinCodeHighlightInit = function( $scope ){
        $scope = $scope || $(this);

        // init highlight js
        if(typeof hljs !== 'undefined') {
            $scope.find('pre code').each(function(i, block) {
                hljs.highlightBlock(block);
            });
        }
    }

    // Load More functionality
    $.fn.AuxinLoadMoreInit = function( $scope ){
        $scope = $scope || $(this);

        // init auxin load more functionality
        $scope.find('.widget-container[class*="aux-ajax-type"]').AuxLoadMore();
    }

    // Video Box
    $.fn.AuxinVideoBoxInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-video-box').AuxinVideobox();
    }

    // Image interaction
    $.fn.AuxinImageInteractionInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-frame-cube').AuxinCubeHover();
        $scope.find('.aux-hover-twoway').AuxTwoWayHover();
    }

    // Toggle-able List
    $.fn.AuxinToggleListInit = function( $scope ){
        $scope = $scope || $(this);

        if ( ! $scope.find('.aux-togglable').length ) { return; }
        // togglable lists
        $scope.find('.aux-togglable').AuxinToggleSelected();
    }

    // Masonry Animate
    $.fn.AuxinMasonryAnimateInit = function( $scope ){
        $scope = $scope || $(this);
        // init masonry Animation
        $scope.find('.aux-product-parallax-wrapper').AuxinMasonryAnimate();
    }

    // Select2 Dropdown
    $.fn.AuxinSelect2Init = function( $scope ){
        $scope = $scope || $(this);

        // init select2 dropdown
        $('.aux-custom-dropdown select').select2({
            minimumResultsForSearch: Infinity,
        })

        $('.aux-modern-search-cats').select2({
            minimumResultsForSearch: Infinity,
            dropdownCssClass: 'aux-search-cats-dropdown',
            dropdownAutoWidth: 'true'
        })

    }

    // Carousel Navigation
    $.fn.AuxinCarouselNavigation = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-carousel-navigation').each( function() {
            var $this   = $(this),
                $target = $( $this.data('target') ).find('.master-carousel');

            if ( !$target || typeof AuxinCarousel == 'undefined' ) {
                return ;
            }
            $( $this.data('target') ).each( function(index){
                $target = $( this ).find('.master-carousel')[0];
                if ( $target ) {
                    var instance = AuxinCarousel[$target.getAttribute('data-element-id')];

                    $this.find('.aux-prev').on('click', { action: 'prev' }, instance._controlCarousel.bind( instance ) );

                    $this.find('.aux-next').on('click', { action: 'next' }, instance._controlCarousel.bind( instance ) );
                }
            });

        } );


    }

})(jQuery, window, document);


/* ================== js/src/module.isotope.js =================== */


//tile element

;(function($, window, document, undefined){
    "use strict";

    $.fn.AuxinIsotopeInit = function( $scope ){
        $scope = $scope || $(this);

        $.fn.AuxinIsotopeLayoutInit( $scope );
        $.fn.AuxinIsotopeImageLayoutsInit( $scope );;
        $.fn.AuxinIsotopeBigGridInit( $scope );
        $.fn.AuxinIsotopeFAQInit( $scope );;
    };

    $.fn.AuxinIsotopeImageLayoutsInit = function( $scope ){
        $scope = $scope || $(this);

        $.fn.AuxinIsotopeGalleryInit( $scope );
        $.fn.AuxinIsotopeMasonryInit( $scope );
        $.fn.AuxinIsotopeTilesInit( $scope );
    };

    $.fn.AuxinIsotopeLayoutInit = function( $scope ){
        $scope = $scope || $(this);

        // general isotope layout
        $scope.find('.aux-isotope-layout').AuxIsotope({
            itemSelector:'.aux-iso-item',
            revealTransitionDuration  : 600,
            revealBetweenDelay        : 50,
            revealTransitionDelay     : 0,
            hideTransitionDuration    : 300,
            hideBetweenDelay          : 0,
            hideTransitionDelay       : 0,
            updateUponResize          : true,
            transitionHelper          : true
        });
    }

    $.fn.AuxinIsotopeGalleryInit = function( $scope ){
        $scope = $scope || $(this);

        // init gallery
        $scope.find(".aux-gallery .aux-gallery-container").AuxIsotope({
            itemSelector:'.gallery-item',
            justifyRows: {maxHeight: 340, gutter:0},
            masonry: { gutter:0 },
            revealTransitionDuration  : 600,
            hideTransitionDuration    : 600,
            revealBetweenDelay        : 70,
            hideBetweenDelay          : 40,
            revealTransitionDelay     : 0,
            hideTransitionDelay       : 0,
            updateUponResize          : true,
            transitionHelper          : true,
            deeplink                  : false
        });
    }

    $.fn.AuxinIsotopeTilesInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find(".aux-tiles-layout").AuxIsotope({
            itemSelector        :'.aux-post-tile, .aux-iso-item',
            layoutMode          : 'packery',
            revealTransitionDuration  : 600,
            hideTransitionDuration    : 600,
            revealBetweenDelay        : 70,
            hideBetweenDelay          : 40,
            revealTransitionDelay     : 0,
            hideTransitionDelay       : 0,
            updateUponResize          : true,
            transitionHelper          : true,
            packery: {
                gutter      : 0
            },
            containerStyle : {
                position : '',
            },
        }).on( 'auxinIsotopeReveal', function( e, items ){
            items.forEach( function( item, index ) {
                // update image alignment inside the tiles upon pagination
                if ( item.$element.hasClass( 'aux-image-box' ) ) {
                    item.$element.AuxinImagebox('update');
                }
            } );
        });
    }

    $.fn.AuxinIsotopeBigGridInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find(".aux-big-grid-layout").AuxIsotope({
            itemSelector        :'.aux-news-big-grid, .aux-iso-item',
            layoutMode          : 'packery',
            revealTransitionDuration  : 600,
            hideTransitionDuration    : 600,
            revealBetweenDelay        : 70,
            hideBetweenDelay          : 40,
            revealTransitionDelay     : 0,
            hideTransitionDelay       : 0,
            updateUponResize          : true,
            transitionHelper          : true,
            packery: {
                gutter      : 0,
            }
        }).on( 'auxinIsotopeReveal', function( e, items ){
            items.forEach( function( item, index ) {
                // update image alignment inside the tiles upon pagination
                if ( item.$element.hasClass( 'aux-image-box' ) ) {
                    item.$element.AuxinImagebox('update');
                }
            } );
        });
    }

    $.fn.AuxinIsotopeMasonryInit = function( $scope ){
        $scope = $scope || $(this);

        // init masonry
        $scope.find(".aux-masonry-layout").AuxIsotope({
            itemSelector        :'.aux-post-masonry',
            layoutMode          : 'masonry',
            updateUponResize    : true,
            transitionHelper    : false,
            transitionDuration  : 0
        });
    }

    $.fn.AuxinIsotopeFAQInit = function( $scope ){
        $scope = $scope || $(this);

        // faq element isotope
        $scope.find('.aux-isotope-faq').AuxIsotope({
            itemSelector:'.aux-iso-item',
            revealTransitionDuration  : 600,
            hideTransitionDuration    : 600,
            revealBetweenDelay        : 70,
            hideBetweenDelay          : 40,
            revealTransitionDelay     : 0,
            hideTransitionDelay       : 0,
            updateUponResize          : false,
            transitionHelper          : true
        }).on('auxinIsotopeReveal',function(){
            $scope.find('.aux-iso-item').css({
                'position' : ''
            });
        });
    }

})(jQuery, window, document);


/* ================== js/src/module.page-animation.js =================== */


;(function ( $, window, document, undefined ) {
    "use strict";

    // Page preload animation init
    $.fn.AuxinPagePreloadAnimationInit = function( $scope ){
        $scope = $scope || $(this);

        // preload and init page animation
        var $innerBody       = $scope.find('#inner-body'),
            $body            = $scope.find('body'),
            transitionTarget,
            animationConfig;

        if( ! $body.length ){
            return;
        }

        /* ------------------------------------------------------------------------------ */
        // page animation timing config
        var pageAnimationConfig = {
            fade: {
                eventTarget: '.aux-page-animation-overlay',
                propertyWatch: 'opacity',
                hideDelay: 800,
                loadingHideDuration: 810
            },

            circle: {
                eventTarget: '#inner-body',
                propertyWatch: 'transform',
                hideDelay: 1000,
                loadingHideDuration: 810
            },

            cover: {
                eventTarget: '.aux-page-animation-overlay',
                propertyWatch: 'transform',
                hideDelay: 500,
                loadingHideDuration: 810
            },

            slideup: {
                eventTarget: '.aux-page-animation-overlay',
                propertyWatch: 'transform',
                hideDelay: 500,
                loadingHideDuration: 810
            }
        },
        progressbarHideDuration = 700;

        /* ------------------------------------------------------------------------------ */

        if ( $body.hasClass( 'aux-page-preload' ) ) {
            var $pageProgressbar = $scope.find('#pagePreloadProgressbar'),
                pageLoading = document.getElementById( 'pagePreloadLoading' );

            $(window).on( 'load.preload', function( instance ) {

                if ( $body.data( 'page-animation' ) && Modernizr && Modernizr.csstransitions ) {
                    setupPageAnimate();
                } else {
                    if ( pageLoading ) {
                        setTimeout( function() {
                            pageLoading.style.display = 'none';
                        }, 810 );
                    }
                }

                $body.addClass( 'aux-page-preload-done' );

                if ( $pageProgressbar.length ) {
                    var pageProgressbar = $pageProgressbar[0];
                    pageProgressbar.style.width = pageProgressbar.offsetWidth + 'px';
                    $pageProgressbar.removeClass('aux-no-js');
                    pageProgressbar.style[ window._jcsspfx + 'AnimationPlayState' ] = 'paused';

                    setTimeout( function(){
                        pageProgressbar.style.width = '100%';
                        $pageProgressbar.addClass( 'aux-hide' );
                        $body.addClass( 'aux-progressbar-done' );
                    }, 10 );

                    setTimeout( function(){
                        pageProgressbar.style.display = 'none';
                    }, progressbarHideDuration );
                }
            });

            window.onerror = function( e ) {
                $pageProgressbar.addClass( 'aux-hide' );
                $body.addClass( 'aux-page-preload-done' );
                $(window).off( 'load.preload' );
            }

        } else {

            // Using this event handler in your page prevents Firefox
            // from caching the page in the in-memory bfcache.

            // Firefox Fix
            $(window).on( "unload", function () { $(window).off('unload'); });

            // IOS Safari Fix
            $(window).on('pageshow', function(event) {
                if (event.originalEvent.persisted) {
                    window.location.reload()
                }
            });

            if ( document.visibilityState === 'hidden' ) {
                document.addEventListener("visibilitychange", function () {
                    if (!document.hidden) {
                        setupPageAnimate()
                    }
                  }, false);
            } else {
                setupPageAnimate()
            }

        }

        function setupPageAnimate() {
            // disable page animation in old browsers
            if ( Modernizr && !Modernizr.csstransitions ) {
                return;
            }

            if ( !$body.hasClass( 'aux-page-animation' ) ) {
                return;
            }

            var animType         = $body.data('page-animation-type');

            animationConfig  = pageAnimationConfig[animType];
            transitionTarget = $(pageAnimationConfig[animType].eventTarget)[0];

            transitionTarget.addEventListener( 'transitionend', pageShowAnimationDone );

            $( 'a:not([href^="\#"]):not([href=""]), .elementor-template-canvas' ).AuxinAnimateAndRedirect( {
                scrollFixTarget      : '#inner-body',
                delay       : animationConfig.hideDelay,
                //  disableOn   : '.aux-lightbox-frame, ul.tabs, .aux-gallery .aux-pagination',
                animateIn   : 'aux-page-show-' + animType,
                animateOut  : 'aux-page-hide-' + animType,
                beforeAnimateOut  : 'aux-page-before-hide-' + animType
            });
        }

        function pageShowAnimationDone( e ) {
            if ( e.target === transitionTarget && e.propertyName.indexOf( animationConfig.propertyWatch ) !== -1 ) {
                $body.addClass( 'aux-page-animation-done' );

                // this line using for elementor stretch container option
                if ( 'circle' === $body.data('page-animation-type') ) $body.trigger('resize');

                transitionTarget.removeEventListener( 'transitionend', pageShowAnimationDone );

                var pageAnimationDoneEvent = new CustomEvent( 'AuxPageAnimationDone' );
                document.body.dispatchEvent(pageAnimationDoneEvent);

                $.fn.AuxinAppearAnimationsInit( $body );
            }
        }
    }

    // Page cover animation
    $.fn.AuxinPageCoverAnimation = function(){
        var $this      = $(this),
            $window    = $(window),
            fired      = false,
            scrollLock = true,
            posTop;

        $this.closest('body').addClass('aux-page-cover');

        $window.on('scroll', function(){
            if( scrollLock && ! fired ){
                $window.scrollTo(0);
                $('body').addClass('aux-page-cover-off');
            } else if ( window.elementorFrontendConfig && 0 === $window.scrollTop() ){

                if ( window.elementorFrontendConfig.isEditMode ) {
                    $('body').removeClass('aux-page-cover-off');
                }
            }
        });

        $this.on('transitionend webkitTransitionEnd oTransitionEnd', function (e) {
            if (e.originalEvent.propertyName !== 'transform') return;

            posTop = $this.offset().top ;

            if ( posTop !== 0 ){
                fired = true;
                scrollLock = false;
            } else {
                fired = false;
                scrollLock = true;
            }
        });

        $this.find('.aux-page-cover-footer-text a').on('click', function(){
            $('body').addClass('aux-page-cover-off');
        });

    };

    // Page cover animation init
    $.fn.AuxinPageCoverAnimationInit = function( $scope ){
        $scope = $scope || $(this);

        if ( $scope.hasClass('aux-page-cover-wrapper') ){
            $scope.AuxinPageCoverAnimation();
        } else {
            $scope.find('.aux-page-cover-wrapper').each( function() {
                $(this).AuxinPageCoverAnimation();
            });
        }
    };

    // Set on appear
    $.fn.AuxinSetOnApearInit = function(){

        if ( $.fn.appearl ) {
            var appearBuffer = 0,
                appearTo;

            $.fn.setOnAppear = function( once, delay ) {
                return $(this).each( function( index, element ) {
                    var $element = $(element);
                    $element.appearl();
                    $element[ once ? 'one' : 'on']( 'appear', function(){
                        if ( delay && !$element.hasClass( 'aux-appeared-once' ) ) {
                            element.style.transitionDelay = (appearBuffer++) * delay + 'ms';
                            appearTo = setTimeout( function() {
                                appearBuffer = 0;
                            }, 10);
                        }

                        $element.addClass( 'aux-appeared-once' );
                        $element.addClass( 'aux-appeared' ).removeClass( 'aux-disappeared' );
                    });

                    if ( !once ){
                        $element.on( 'disappear', function(){
                            $element.removeClass( 'aux-appeared' ).addClass( 'aux-disappeared' );
                        });
                    }

                });
            }
        }
    };

    // InView Transitions
    $.fn.AuxinAppearTransitionsInit = function( $scope ){
        $scope = $scope || $(this);

        // InView Transitions
        $scope.find('.aux-check-appear, .aux-appear-watch:not(.aux-appear-repeat)').appearl({
            offset: '150px',
            insetOffset:'0px'
        }).one( 'appear', function(event, data) {
            this.classList.add('aux-appeared');
            this.classList.add('aux-appeared-once');
        });

        $scope.find('.aux-check-appear, .aux-appear-watch.aux-appear-repeat').appearl({
            offset: '150px',
            insetOffset:'0px'
        }).on( 'appear disappear', function(event, data) {
            if( event.type === 'disappear' ){
                this.classList.remove('aux-appeared');
                this.classList.add('aux-disappeared');
            } else {
                this.classList.remove('aux-disappeared');
                this.classList.add('aux-appeared');
            }
        });

    };

    // InView Animation
    $.fn.AuxinAppearAnimationsInit = function( $scope ){
        $scope = $scope || $(this);

        var $target      = $scope.hasClass('aux-appear-watch-animation') ? $scope: $scope.find('.aux-appear-watch-animation');

        if( ! $target.length ){
            return;
        }

        function appear() {
            $target.appearl({
                offset: '200px',
                insetOffset:'0px'
            }).one( 'appear', function(event, data) {
                this.classList.add('aux-animated');
                this.classList.add('aux-animated-once');
            });
        }

        if ( document.visibilityState === 'hidden' ) {
            document.addEventListener("visibilitychange", function () {
                if (!document.hidden) {
                    appear();
                }
              }, false);
        } else {
            appear();
        }


    };

})(jQuery, window, document);


/* ================== js/src/module.page.js =================== */


/**
 * Page Modules
 */
;(function($, window, document, undefined){

    // Page Layout
    $.fn.AuxinPageLayoutInit = function( $scope ){
        $scope = $scope || $(this);

        $(function(){
            // general sticky init
            $scope.find('.aux-sticky-side > .entry-side, .aux-sticky-piece').AuxinStickyPosition();
        });

        // float layout init
        var isResp = $scope.find('body').hasClass( 'aux-resp' );
        $scope.find('.aux-float-layout').AuxinFloatLayout({ autoLocate: isResp });
    };

    // Match heights
    $.fn.AuxinMatchHeightInit = function( $scope ){
        $scope = $scope || $(this);
        // init matchHeight
        $scope.find('.aux-match-height > .aux-col').matchHeight();
    };

    // Page Header Layout
    $.fn.AuxinPageHeaderLayoutInit = function( $scope ){
        $scope = $scope || $(this);

        var $window = $(window),
            $siteHeader = $scope.find('#site-header, #site-elementor-header'),
            headerStickyHeight = $siteHeader.data('sticky-height') || 0;

        if ( $siteHeader.find( '.secondary-bar' ).length ) {
            headerStickyHeight += 35; // TODO: it should changed to a dynamic way in future
        }

        // header sticky position
        if ( $scope.find('body').hasClass( 'aux-top-sticky' ) ) {
            $siteHeader.AuxinStickyPosition();
        }

        // fullscreen header
        $scope.find('.page-header.aux-full-height').AuxinFullscreenHero();

        // scroll to bottom in title bar
        if ( jQuery.fn.scrollTo ) {
            var $scrollToTarget = $scope.find('#site-title');
            $scope.find('.aux-title-scroll-down .aux-arrow-nav').on( 'click', function(){
                var target = $scrollToTarget.offset().top + $scrollToTarget.height() - headerStickyHeight;
                $window.scrollTo( target , {duration: 1500, easing:'easeInOutQuart'}  );
            });
        }
    };

    // Modern form
    $.fn.AuxinModernForm = function( $scope ){
        $scope = $scope || $(this);

        var groupClass = '.aux-input-group',
            focusClass = 'aux-focused',
            $allFields = $scope.find( groupClass + ' input ,' + groupClass + ' textarea' );

        if ( $allFields.val()){
            $allFields.each( function(){
                if( $scope.val() ) {
                    $scope.parents( groupClass ).addClass( focusClass );
                }
            });
        };


        $allFields.on('focus', function(){
            $(this).parents( groupClass ).addClass( focusClass );
        })
        .on('blur', function(){
            if ( $(this).val() === '' ) {
                $(this).parents( groupClass ).removeClass( focusClass);
            }
        });

    };

    // Modern form init
    $.fn.AuxinModernFormInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-modern-form').each( function(){
            $(this).AuxinModernForm();
        });
    };

    // Dropdown Click/Hover
    $.fn.AuxinDropdownEffect = function( $scope ){
        $basketWrapper = $scope || $(this);

        var isHover       = $basketWrapper.find( '.aux-action-on-hover' ).length,
            dropdownClass       = 'aux-cart-display-dropdown',
            $dropdownWrapper = $basketWrapper.find('.aux-card-dropdown');

        $(window).on('load resize', function() {
            if( $dropdownWrapper.length ){
                var offsetRight = $dropdownWrapper.offset().left  + $dropdownWrapper.outerWidth();

                if ( offsetRight > $(window).width() && ! $dropdownWrapper.hasClass('aux-card-dropdown-resp') ) {
                    $dropdownWrapper.addClass('aux-card-dropdown-resp');
                } else {
                    $dropdownWrapper.removeClass('aux-card-dropdown-resp');
                }
            }
        });

        if (  isHover  ) {
            $basketWrapper.each(function(){
                var $basket = $(this);
                $basket.on('mouseover', function () {
                    $basket.addClass( dropdownClass )
                });

                $(document).on('mouseover', function(e){
                    if ( ! $( e.target ).closest( $basket ).length ) {
                        $basket.removeClass( dropdownClass );
                    }
                });
            });

        } else {
            $basketWrapper.each(function(){
                var $basket = $(this);
                $basket.on( 'click', function () {
                    $basket.addClass( dropdownClass )
                });
                $(document).on( 'click', function(e){
                    if ( ! $( e.target ).closest( $basket ).length ) {
                        $basket.removeClass( dropdownClass );
                    }
                });
            });
        }
    };

    // Dropdown Click/Hover init
    $.fn.AuxinDropdownEffectInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-top-header .aux-cart-wrapper, .site-header-section .aux-cart-wrapper, .aux-cart-element').each(function() {
            $(this).AuxinDropdownEffect();
        });
    };

    // Shopping Cart Canvas Menu
    $.fn.AuxinCartCanvasInit = function( $scope ){
        $scope = $scope || $(this);

        // Cart elements
        var $headerElement = $scope.find('.site-header-section');
        if ( !$headerElement.length )
            $headerElement = $scope.find('.aux-cart-element-container');

        if ( !$headerElement.length )
            return;

        $cartWrapper       = $headerElement.find('.aux-cart-wrapper'),
        $cartDropdown      = $headerElement.find('.aux-card-dropdown'),
        $burgerBasket      = $headerElement.find('.aux-shopping-basket'),
        $basketContainer   = $scope.find('#offcart'),
        isClosed           = true;

        // Append cart content to the offcanvas menu
        $cartDropdown.clone().appendTo( $basketContainer.find('.aux-offcart-content') );

        // check responsive state of cart - offcanvas or dropdown state
        if ( $cartWrapper.hasClass('aux-cart-type-offcanvas') ) {
            $basketContainer.find('.aux-offcart-content .aux-card-dropdown').removeClass('aux-desktop-off aux-tablet-off');
        } else {
            if ( $cartDropdown.hasClass('aux-tablet-off') ) {
                $basketContainer.find('.aux-offcart-content .aux-card-dropdown').removeClass('aux-tablet-off');
            }
        }

        // Add canvas dark class
        if( $cartDropdown.hasClass('aux-card-dropdown-dark') ) {
            $basketContainer.addClass('aux-offcanvas-dark');
        }

        // Remove dropdown hidden class from canvas container
        $basketContainer.find('.aux-card-dropdown').removeClass('aux-phone-off');

        // Toggle canvas open/close classes
        function toggleOffcanvasBasket() {
            if ( $('body').hasClass('woocommerce-cart') || $('body').hasClass('woocommerce-checkout') ) {
                return;
            }
            $basketContainer.toggleClass( 'aux-open' );
            $scope.toggleClass( 'aux-offcanvas-overlay' );
            isClosed = !isClosed;
        }

        // Display offcanvas on click icon button
        $burgerBasket.on( 'click', toggleOffcanvasBasket );

        // Hide offcanvas on click close button
        $basketContainer.find('.aux-close').on( 'click', toggleOffcanvasBasket );

        $(window).on( 'load resize', function() {
            var $dropDownCheck = false; // check if cart style is dropdown or offcanvas

            if ( window.innerWidth > 767 && $cartWrapper.hasClass('aux-cart-type-dropdown') ) {
                if ( window.innerWidth < 1025 ) {
                    if ( !$cartDropdown.hasClass('aux-tablet-off') ) {
                        $dropDownCheck = true;
                    }
                } else {
                    $dropDownCheck = true;
                }
            }

            if ($dropDownCheck) {
                $basketContainer.hide();
                if( !isClosed ){
                    $scope.removeClass( 'aux-offcanvas-overlay' );
                }
            } else {
                $basketContainer.show();
                if( !isClosed ){
                    $scope.addClass( 'aux-offcanvas-overlay' );
                }
            }
        });

        // close offcanvas cart when clicking outside of cart
        $(document).on('click', function(e) {
            if ( !$(e.target).parents('.aux-cart-wrapper').length && !$(e.target).is('.aux-cart-wrapper') && !$(e.target).parents('#offcart').length && !$(e.target).is('#offcart') ) {
                if ( !isClosed ) {
                    toggleOffcanvasBasket();
                }
            }
        });
    }

    // DropDown For Filters
    $.fn.AuxinDropDownSelect = function( $scope ){
        $scope = $scope || $(this);
        $this = $scope.hasClass('aux-dropdown-filter') ? $scope : $scope.find('.aux-dropdown-filter');

        var $DropDown   = $this.find('ul'),
            $FilterBy   = $this.find('.aux-filter-by'),
            $AllOptions = Array.from($DropDown.children('li'));

        function ClassCheck(){
            if ( ! $DropDown.hasClass('aux-active') ) {
                $DropDown.addClass('aux-active');
            } else{
                $DropDown.removeClass('aux-active');
            }
        }

        $FilterBy.on( 'click', function() {
            ClassCheck();
        });

        function InsertText(){
            var $ItemLabel = $(this).text();

            $FilterBy.find('.aux-filter-name').html($ItemLabel);
            ClassCheck();

        }

        if( ! $this.attr('data-insert-text') ){

            for ( var i = 0 ; $AllOptions.length > i ; i++){
                $AllOptions[i].addEventListener('click', InsertText );
            }

        }

        window.addEventListener('click', function(e){

            if ( e.target.className != $FilterBy.attr('class') && e.target.className != $FilterBy.find('.aux-filter-name').attr('class') && e.target.className != $FilterBy.find('.aux-filter-name-current').attr('class') ) {
                if ( $DropDown.hasClass('aux-active') ){
                    $DropDown.removeClass('aux-active');
                }
            }

        });
    }

    // DropDown For Filters init
    $.fn.AuxinDropDownSelectInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-filters.aux-dropdown-filter').each(function() {
            $(this).AuxinDropDownSelect();
        });
    };

    $.fn.AuxinTriggerResize = function( $scope ){
        $scope = $scope || $(window);
        $scope.trigger( 'resize' );
    };

    $.fn.AuxinFeaturedColor = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-featured-color').each(function() {
            var featuredColor = $(this).data('featured-color');
            if( featuredColor != '' ) {
                $(this).css({
                    "background-color": featuredColor ,
                    "color"           : auxin_get_contrast( featuredColor )
                });
            }
        });
    };

    // Scale Element By Scroll
    $.fn.AuxinScrollScale = function( start, target, startScale, endScale ){
        var $this        = $(this),
            $el          = $(start),
            $target      = $(target),
            $window      = $(window),
            endScale     = endScale || 1 ,
            targetHeight = $target.outerHeight(),
            scrollValue,
            elBot,
            scaleValue;

        $window.on('scroll', function(){
            scrollValue = $window.height() + $window.scrollTop();
            elBot        = $el.offset().top + $el.outerHeight();

            if( scrollValue > elBot ) {
                scrollValue = ( scrollValue - elBot ) / targetHeight ;
                scaleValue  = ( startScale - ( scrollValue   * ( startScale - endScale ) ) );

                if ( scaleValue < endScale ){
                    $target[0].style[window._jcsspfx + 'Transform'] = 'scale(' + scaleValue + ')';
                }
            }

        });
    }

    // Scale Element By Scroll Init
    $.fn.AuxinScrollScaleInit = function( $scope ){
        $scope = $scope || $(this);

        $scope.find('.aux-bs-get-started').each(function() {
            $(this).AuxinScrollScale( '.aux-bs-footer-scale', '.aux-subfooter .aux-wrapper', 0.94, 1 );
        });
    };

    /**
     * Opens or closes the overlay container in page
     *
     * @param  {jQuery Element} $overlay
     * @param  {Boolean}        close              Is it closed right now?
     * @param  {Number}         animDuration
     */
    window.auxinToggleOverlayContainer = function( $overlay, close, animDuration ) {
        var anim = $overlay.data( 'anim' ),
            overlay = $overlay[0],
            animDuration = animDuration || 800;

        if ( anim ) {
            anim.stop( true );
        }

        if ( close ) {
            $overlay.css( {
                opacity: 0,
                display: 'block'
            } );

            overlay.style[ window._jcsspfx + 'Transform' ] = 'perspective(200px) translateZ(30px)';
            anim = CTween.animate($overlay, animDuration, {
                transform: 'none', opacity: 1
            }, {
                ease: 'easeOutQuart'
            });

        } else {
            anim = CTween.animate($overlay, animDuration / 2, {
                transform: 'perspective(200px) translateZ(30px)',
                opacity: 0
            }, {
                ease: 'easeInQuad',
                complete: function() {
                    $overlay.css( 'display', 'none' );
                }
            });
        }

        $overlay.data( 'anim', anim );

    };

    // Offcanvas and overlay menu
    $.fn.AuxinMobileMenuInit = function( $scope ){
        $scope = $scope || $(this);

        var $burgerBtns = $scope.find('.aux-burger-box');
            $window     = $(window);

        $burgerBtns.each(  function( button ) {

            var args = {
                menu         : $( $(this).data( 'target-content') ),
                icon         : $(this).find('>.aux-burger'),
                isClosed     : true,
                animDuration : 600,
                type         : $(this).data( 'target-panel' ),
                anim         : null,
            }

            var isInit = $(this).data('init');

            if ( isInit ) {
                 return
            }

            $(this).data('init', true);

            args.scrollToLinks = args.menu.find( '.aux-menu-item > a[href^="#"]' );
            args.targetWrapper = $( args.menu.data( 'switch-parent' ) );
            args.activeWidth   = args.menu.data( 'switch-width' )

            /* Functions */
            /* ------------------------------------------------------------------------------ */

            args.toggleExpnadableMenu = function() {
                args.icon.toggleClass( 'aux-close' );

                if ( args.anim ) {
                    args.anim.stop( true );
                }

                if ( args.isClosed ) {
                    args.anim = CTween.animate(args.targetWrapper, args.animDuration, { height: args.menu.outerHeight() + 'px' }, {
                        ease: 'easeInOutQuart',
                        complete: function() {
                            args.targetWrapper.css( 'height', 'auto' );
                        }
                    } );
                } else {
                    args.targetWrapper.css( 'height', args.menu.outerHeight() + 'px' );
                    args.anim = CTween.animate(args.targetWrapper, args.animDuration, { height: 0 }, { ease: 'easeInOutQuart' } );
                }

                args.isClosed = !args.isClosed;

            }

            /* ------------------------------------------------------------------------------ */

            args.toggleOffcanvasMenu = function () {
                args.icon.toggleClass( 'aux-close' );
                args.targetWrapper.toggleClass( 'aux-open' );
                args.isClosed = !args.isClosed;
            }

            /* ------------------------------------------------------------------------------ */

            args.toggleOverlayMenu = function () {
                args.icon.toggleClass( 'aux-close' );
                if ( args.isClosed ) {
                    args.targetWrapper.show();
                }
                auxinToggleOverlayContainer( args.targetWrapper, args.isClosed );
                args.isClosed = !args.isClosed;
            }

            /* ------------------------------------------------------------------------------ */

            args.closeOnEsc = function ( toggleFunction ) {
                $(document).on('keydown', function(e) {
                    if ( e.keyCode == 27 && !args.isClosed ) {
                        toggleFunction();
                    }
                });
            }

            /* ------------------------------------------------------------------------------ */

            switch ( args.type ) {
                case 'toggle-bar':
                    $(this).on( 'click', args.toggleExpnadableMenu );
                    // args.scrollToLinks.on( 'click', args.toggleExpnadableMenu );
                    break;

                case 'offcanvas':
                    args.targetWrapper = args.targetWrapper.closest('.aux-offcanvas-menu ');
                    $(this).on( 'click', args.toggleOffcanvasMenu );
                    args.targetWrapper.find('.aux-close').on( 'click', args.toggleOffcanvasMenu );
                    // args.scrollToLinks.on( 'click', args.toggleOffcanvasMenu );

                    args.dir         = ( args.targetWrapper.hasClass( 'aux-pin-right' ) ? 'right' : 'left' );

                    if ( args.activeWidth !== undefined ) {
                        $window.on( 'resize', function() {
                            if ( window.innerWidth > args.activeWidth ) {

                                args.targetWrapper.hide();
                            } else {
                                if ( !args.isClosed ) {

                                }
                                args.targetWrapper.show();
                            }
                        });
                    }

                    args.closeOnEsc( args.toggleOffcanvasMenu );
                    break;

                case 'overlay':
                var isBurger = !!args.menu,
                    oldSkinClassName;

                args.targetWrapper = args.targetWrapper.closest('.aux-fs-popup');

                if ( !isBurger ) {
                    oldSkinClassName = args.menu.attr( 'class' ).match( /aux-skin-\w+/ )[0];
                }

                $(this).on( 'click', args.toggleOverlayMenu );
                args.targetWrapper.find( '.aux-panel-close' ).on( 'click', args.toggleOverlayMenu );

                var checkForHide = function() {
                    if ( window.innerWidth > args.activeWidth ) {
                        args.targetWrapper.hide();

                        if ( !isBurger ) {
                            args.menu.addClass( oldSkinClassName );
                        }

                    } else {
                        if ( !args.isClosed ) {
                            args.targetWrapper.show();
                        }

                        if ( !isBurger ) {
                            args.menu.removeClass( oldSkinClassName );
                        }

                    }
                }

                if ( args.activeWidth !== undefined ) {
                    checkForHide();
                    $window.on( 'resize', checkForHide );
                }

                args.closeOnEsc( args.toggleOverlayMenu );

            }

        })

    };

    // Overlat Search
    $.fn.AuxinOverlaySearchInit = function( $scope ){
        $scope = $scope || $(this);

        // fullscreen/overlay search
        var overlaySearchIsClosed = true,
            overlaySearchContainer = $scope.find('#fs-search'),
            searchField = overlaySearchContainer.find( 'input[type="text"]' );

        $scope.find('.aux-overlay-search').on( 'click', toggleOverlaySearch );
        overlaySearchContainer.find( '.aux-panel-close' ).on( 'click', toggleOverlaySearch );

        $(document).on('keydown', function(e) {
            if ( e.keyCode == 27 && !overlaySearchIsClosed ) {
                toggleOverlaySearch();
            }
        });

        function toggleOverlaySearch() {
            auxinToggleOverlayContainer( overlaySearchContainer, overlaySearchIsClosed );
            overlaySearchIsClosed = !overlaySearchIsClosed;
            if ( !overlaySearchIsClosed ) {
                searchField.focus();
            }
        };
    }
    // Overlay Modern Search
    $.fn.AuxinOverlayModernSearchInit = function( $scope ){
        $scope = $scope || $(this);

        var $searchBoxes = $scope.find( '.aux-search-fullscreen' );

        $searchBoxes.each( function() {
            var $this = $(this),
                target = $this.data('target');

            if ( !target ) {
                return;
            }

            var $target = $scope.find( target );

            if ( !target ) {
                return;
            }

            var $closeBtn       = $target.find( '.aux-panel-close' ),
                $searchField    = $target.find( '.aux-search-field' ),
                overlayIsClosed = true;

            if ( document.getElementById('wpadminbar')) {
                $target.css({top: '32px'})
            }

            // Listeners
            $this.on( 'click' , function() {
                auxinToggleOverlayContainer( $target, overlayIsClosed );
                overlayIsClosed = !overlayIsClosed;

                if ( !overlayIsClosed ) {
                    $searchField.focus();
                }

            } );

            $closeBtn.on( 'click' , function() {
                auxinToggleOverlayContainer( $target, overlayIsClosed );
                overlayIsClosed = !overlayIsClosed;
            } );

            $(document).on('keydown', function(e) {
                if ( e.keyCode == 27 && !overlayIsClosed ) {
                    auxinToggleOverlayContainer( $target, overlayIsClosed );
                    overlayIsClosed = !overlayIsClosed;
                }
            });

        } );


    }

    // Menu Auto Switch
    $.fn.AuxinMenuAutoSwitchInit = function( $scope ){
        $scope = $scope || $(this);

        var isResp = $('body').hasClass( 'aux-resp' );

        // init Master Menu
        if ( !isResp && $scope.find('.aux-master-menu').data( 'switch-width' ) < 7000 ) {
            // disable switch if layout is not responsive
            $scope.find('.aux-master-menu').data( 'switch-width', 0 );
        }

        if ( $scope.find('.aux-fs-popup').hasClass('aux-no-indicator') ){
            $scope.find('.aux-master-menu').mastermenu( { useSubIndicator: false , addSubIndicator: false} );
        } else if ( $('body').hasClass( 'aux-vertical-menu' ) ) {  // Disable CheckSubmenuPosition in Vertical Menu
            $scope.find('.aux-master-menu').mastermenu( { keepSubmenuInView: false } );
        } else{
            $scope.find('.aux-master-menu').mastermenu( /*{openOn:'press'}*/ );
        }
    };

    $.fn.AuxinCurrentAnchorDetect = function( $scope ) {
        $scope = $scope || $(this) ;

        var $anchors = $('a[href*="#"]'),
            currentClass = 'current-menu-item',
            currentClassTarget = '.aux-menu-item';

        $anchors.each( function( index, element ) {

            // abort on invalid hash IDs
            if( !! element.hash.match(/[^A-Za-z0-9-#]/g) ){
                return;
            }

            var $target = $(element.hash);

            if ( !$target.length ) {
                return
            }

            function toggleClass() {
                var boundaries    = $target[0].getBoundingClientRect();
                    delta         = Math.floor( Math.min( Math.max( (boundaries.y + boundaries.height) / window.innerHeight , -1 ), 1 ) ),
                    currentTarget = element.closest( currentClassTarget );

                if ( !currentTarget ) {
                    return
                }


                if ( delta === 0 ) {
                    if ( !currentTarget.classList.contains(currentClass) ) {
                        currentTarget.classList.add(currentClass);
                    }
                } else {
                    if ( currentTarget.classList.contains(currentClass) ) {
                        currentTarget.classList.remove(currentClass);
                    }
                }
            }

            toggleClass();
            $(window).on('scroll', toggleClass)

        })

    }


})(jQuery, window, document);


/* ================== js/src/module.resize.js =================== */


/**
 * Page resize scripts
 */
;(function($){

    var $_window                = $(window),
        $body                   = $('body'),
        screenWidth             = $_window.width(),
        $main_content           = $('#main'),
        breakpoint_tablet       = 768,
        breakpoint_desktop      = 1024,
        breakpoint_desktop_plus = 1140,
        original_page_layout    = '',
        layout_class_names      = {
            'right-left-sidebar' : 'right-sidebar',
            'left-right-sidebar' : 'left-sidebar',
            'left2-sidebar'      : 'left-sidebar',
            'right2-sidebar'     : 'right-sidebar'
        };


    function updateSidebarsHeight() {

        screenWidth = window.innerWidth;

        var $content   = $('.aux-primary');
        var $sidebars  = $('.aux-sidebar');

        var max_height = $('.aux-sidebar .sidebar-inner').map(function(){
            return $(this).outerHeight();
        }).get();

        max_height = Math.max.apply(null, max_height);
        max_height = Math.max( $content.outerHeight(), max_height );
        $sidebars.height( screenWidth >= breakpoint_tablet ? max_height : 'auto' );

        // Switching 2 sidebar layouts on mobile and tablet size
        // ------------------------------------------------------------

        // if it was not on desktop size
        if( screenWidth <= breakpoint_desktop_plus ){

            for ( original in layout_class_names) {
                if( $main_content.hasClass( original ) ){
                    original_page_layout =  original;
                    $main_content.removeClass( original ).addClass( layout_class_names[ original ] );
                    return;
                }
            }

        // if it was on desktop size
        } else if( '' !== original_page_layout ) {
            $main_content.removeClass('left-sidebar')
                         .removeClass('right-sidebar')
                         .addClass( original_page_layout );

            original_page_layout = '';
        }
    };


    // overrides instagram feed class and updates sidebar height on instagram images load
    if ( window.instagramfeed ) {
        var _run = instagramfeed.prototype.run;
        instagramfeed.prototype.run = function() {
            var $target = $(this.options.target);
            if ( $target.parents( '.aux-sidebar' ).length > 0 ) {
                var _after = this.options.after;
                this.options.after = function() {
                    _after.apply( this, arguments );
                    $target.find('img').one( 'load', updateSidebarsHeight );
                };
            }
            _run.apply( this, arguments );
        };
    }


    // if site frame is enabled
    if( $body.data('framed') ){

        // disable frame on small screens
        $_window.on( "debouncedresize", function(){
            $body.toggleClass('aux-framed', $_window.width() > 700 );
        });

    }

    if( $body.hasClass("aux-sticky-footer") ){

        // update the
        $_window.on( "debouncedresize", function(){

            var marginFrameThickness = $body.hasClass('aux-framed') ? $('.aux-side-frames').data('thickness') : 0,

                $footer            = $(".aux-site-footer, .aux-elementor-footer"),
                $subfooter         = $(".aux-subfooter"),
                $subfooterBar      = $(".aux-subfooter-bar"),
                footerHeight       = $footer.is(":visible") ? $footer.outerHeight() : 0;
                subfooterHeight    = $subfooter.is(":visible") ? $subfooter.outerHeight() : 0;
                subfooterBarHeight = $subfooterBar.is(":visible") ? $subfooterBar.outerHeight() : 0;
            
            if( screenWidth <= breakpoint_tablet ){
                $('body').removeClass('aux-sticky-footer');
                $("#main").css( "margin-bottom", "" );
                $footer.css( "bottom");
                $subfooter.css( "bottom", "" );
                $subfooterBar.css( "bottom", "" );
            } else{

                if ( ! $body.hasClass("aux-sticky-footer") ) {
                    $('body').addClass('aux-sticky-footer');
                }

                $("#main").css( "margin-bottom", footerHeight + subfooterHeight + subfooterBarHeight );
                $footer.css( "bottom", marginFrameThickness );
                $subfooter.css( "bottom", footerHeight + marginFrameThickness );
                $subfooterBar.css( "bottom", footerHeight + subfooterHeight + marginFrameThickness );
            } 
            
        });

    }

    $_window.on( "debouncedresize", updateSidebarsHeight ).trigger('debouncedresize');


    $(document).on( 'lazyloaded', function(){
        $_window.trigger('resize');
    });

})(jQuery);

/*--------------------------------------------*/


;


/* ================== js/src/module.socials.js =================== */


/**
 * Socials Modules
 */
;(function($, window, document, undefined){
    "use strict";

    $.fn.AuxinJsSocialsInit = function( $scope ){
        $scope = $scope || $(this);

        var $shareButtons       = $scope.find(".aux-tooltip-socials"),        // share buttons
            mainWrapperClass    = 'aux-tooltip-socials-container',  // class for main container for button and tooltip
            tooltipWrapperClass = 'aux-tooltip-socials-wrapper';    // class for wrapper of tooltip

        if( ! $shareButtons.length ){
            return;
        }

        for ( var i = 0, l = $shareButtons.length; i < l; i++ ) {

            $shareButtons.eq(i).on( "click", function( e ){
                var $this = $(this);
                e.preventDefault();
                e.stopPropagation();

                if( ! $this.parent( '.' + mainWrapperClass ).length ){
                    // wrap the button within a container
                    $this.wrap( "<div class='"+mainWrapperClass+"'></div>" );

                    // append a wrapper for tooltip in main container
                    var $container = $this.parent( '.' + mainWrapperClass );
                        $container.append( "<div class='"+tooltipWrapperClass+"'></div>" );

                    // ini the social links after clicking the main share button
                    $container.children( "." + tooltipWrapperClass ).jsSocials({
                        shares: [
                            {
                                share: "facebook",
                                label: "Facebook",
                                logo : "auxicon-facebook"
                            },
                            {
                                share: "twitter",
                                label: "Tweet",
                                logo : "auxicon-twitter"
                            },
                            {
                                share: "googleplus",
                                label: "Google Plus",
                                logo : "auxicon-googleplus"
                            },
                            {
                                share: "pinterest",
                                label: "Pinterest",
                                logo : "auxicon-pinterest"
                            },
                            {
                                share: "linkedin",
                                label: "LinkedIn",
                                logo : "auxicon-linkedin"
                            },
                            {
                                share: "stumbleupon",
                                label: "Stumbleupon",
                                logo : "auxicon-stumbleupon"
                            },
                            {
                                share: "whatsapp",
                                label: "WhatsApp",
                                logo : "auxicon-whatsapp"
                            },
                            {
                                share: "pocket",
                                label: "Pocket",
                                logo : "auxicon-pocket"
                            },
                            {
                                share: "email",
                                label: "Email",
                                logo : "auxicon-email"
                            },
                            {
                                share: "telegram",
                                label: "Telegram",
                                logo : "auxicon-paperplane"
                            },
                        ],
                        shareIn: 'blank',
                        showLabel: false
                    });
                }

                // toggle the open class by clicking on share button
                $this.parent( "." + mainWrapperClass ).addClass('aux-tip-open').removeClass('aux-tip-close');
            });

        }

        // hide tooltip if outside the element was click
        $(window).on( "click", function() {
            $scope.find( "." + mainWrapperClass ).removeClass('aux-tip-open').addClass('aux-tip-close');
        });

    }

})(jQuery, window, document);


/* ================== js/src/modules.init.js =================== */


/**
 * Initialize All Modules
 */
;(function($, window, document, undefined){

    /**
     * Initializes static modules in page
     */
    window.AuxinInitPageModules = function( $scope ){
        $scope = $scope || $(document);

        // Init set on appear
        $.fn.AuxinSetOnApearInit( $scope );

        // Init Share Btns
        $.fn.AuxinJsSocialsInit( $scope );

        // Page Header Layout
        $.fn.AuxinPageHeaderLayoutInit( $scope );

        // Page preload animation init
        $.fn.AuxinPagePreloadAnimationInit( $scope );

        // Page cover animation init
        $.fn.AuxinPageCoverAnimationInit( $scope );

        // Dropdown Click/Hover init
        $.fn.AuxinDropdownEffectInit( $scope );

        // Shopping Cart Canvas Menu init
        $.fn.AuxinCartCanvasInit( $scope );

        // DropDown For Filters init
        $.fn.AuxinDropDownSelectInit( $scope );

       // Auxin Featured Color
        $.fn.AuxinFeaturedColor( $scope );

        // Scale Element By Scroll Init
        $.fn.AuxinScrollScaleInit( $scope );

        // Match heights Init
        $.fn.AuxinMatchHeightInit( $scope );

        // Page Layout
        $.fn.AuxinPageLayoutInit( $scope );

        // Offcanvas and overlay menu init
        $.fn.AuxinMobileMenuInit( $scope );

        // Menu Auto Switch Init
        $.fn.AuxinMenuAutoSwitchInit( $scope );

        // Overlay Search Init
        $.fn.AuxinOverlaySearchInit( $scope );

        // Overlay Modern Search Init
        $.fn.AuxinOverlayModernSearchInit( $scope );

        // Anchor Add Current Class
        $.fn.AuxinCurrentAnchorDetect( $scope );

        // InView Animations init
        $.fn.AuxinAppearAnimationsInit( $scope );

    }

    /**
     * Initializes general modules
     */
    window.AuxinInitElements = function( $scope ){
        $scope = $scope || $(document);

        // Init Tilt
        $.fn.AuxinTiltElementInit( $scope );

        // Init FitVids
        $.fn.AuxinFitVideosInit( $scope );

        // Init Image box
        $.fn.AuxinImageBoxInit( $scope );

        // Init Before After
        $.fn.AuxinBeforeAfterInit( $scope );

        // Init Carousel and Lightbox
        $.fn.AuxinCarouselInit( $scope );

        // Modern form init
        $.fn.AuxinModernFormInit( $scope );

        // Miscellaneous scripts
        $.fn.AuxinOtherElementsInit( $scope );

        // InView Transitions init
        $.fn.AuxinAppearTransitionsInit( $scope );

        // Dynamic image drop shadow init
        $.fn.AuxinDynamicDropshadowInit( $scope );

        // Blur images with scroll - Init
        $.fn.AuxinScrollBlurImageInit( $scope );

    }

    /**
     * Initializes the general modules on doc ready
     */
    window.AuxinInitElementsOnReady = function( $scope ){
        $scope = $scope || $(document);

        // Init Isotope
        $.fn.AuxinIsotopeInit( $scope );

        // Tabs
        $.fn.AuxinLiveTabsInit( $scope );

        // Accordion Element
        $.fn.AuxinAccordionInit( $scope );

        // Timeline
        $.fn.AuxinTimelineInit( $scope );

        // Code highlighter
        $.fn.AuxinCodeHighlightInit( $scope );

        // Load More functionality
        $.fn.AuxinLoadMoreInit( $scope );

        // Video Box
        $.fn.AuxinVideoBoxInit( $scope );

        // Image interaction
        $.fn.AuxinImageInteractionInit( $scope );

        // Toggle-able List
        $.fn.AuxinToggleListInit( $scope );

        // Masonry Animate
        $.fn.AuxinMasonryAnimateInit( $scope );

        // Media Element init
        $.fn.AuxinMediaElementInit( $scope );

        // Parallax Box init
        $.fn.AuxinParallaxBoxInit( $scope );

        // Parallax Section init
        $.fn.AuxinParallaxSectionInit( $scope );

        // Select2 init
        $.fn.AuxinSelect2Init( $scope );

        // Scrollable Anims init
        $.fn.AuxinScrollableAnimsInit( $scope );

        // Ajax Search Init
        $.fn.AuxinAjaxSearch( $scope );

        // Ajax Modern Search Init
        $.fn.AuxinModernSearchAjax( $scope );

        // Carousel Navigation init
        $.fn.AuxinCarouselNavigation( $scope );

    }

    /**
     * Initializes all Auxin modules
     */
    window.AuxinInitAllModules = function( $scope ){
        $scope = $scope || $(document);

        AuxinInitPageModules( $scope );
        AuxinInitElements( $scope );
        AuxinInitElementsOnReady( $scope );
    }

    // Init static modules in page
    AuxinInitPageModules();

    // Init general modules
    AuxinInitElements();

    // Init some modules on doc ready
    $(function(){
        AuxinInitElementsOnReady();
    });

})(jQuery, window, document);


/* ================== js/src/modules.init.visual-builders.js =================== */


/**
 * Initialize Modules on Vidual Editors
 */
;(function($, window, document, undefined){

    var $vcWindow, $__window = $(window);

    // Add js callback for customizer partials trigger
    if( typeof wp !== 'undefined' && typeof wp.customize !== 'undefined' ) {
        if( typeof wp.customize.selectiveRefresh !== 'undefined' ){
            wp.customize.selectiveRefresh.bind( 'partial-content-rendered', function() {
                // Init auxin modules
                AuxinInitAllModules( $('body') );
            });
        }
    }

    // Init Visual Composer
    $__window.on('vc_reload', function(){
        // Main selector
        $vcWindow = $('#vc_inline-frame', window.parent.document).contents().find('.vc_element');

        // Init auxin modules
        AuxinInitAllModules( $vcWindow );

        // Init mejs player
        if(typeof MediaElement !== 'undefined') {
            $vcWindow.find('video,audio').mediaelementplayer();
        }

        // Init instagram feed
        if(typeof sbi_js_exists !== 'undefined') {
            sbi_init();
        }

        // Init Flickr Justified Gallery
        if (typeof fjgwpp_galleriesInit_functions !== "undefined") {
            for (var i in fjgwpp_galleriesInit_functions) {
                fjgwpp_galleriesInit_functions[i]();
            }
        }

        $__window.trigger('resize');
    });

    // Init Elementor
    // $__window.on('elementor/frontend/init', function (){

    // });

})(jQuery, window, document);