PageSourceSearch

https://helpdigitalti.com.br/wp-content/plugins/happy-elementor-ad…/assets/js/happy-addons-pro.js?ver=2.8.3

js helpdigitalti.com.br collected 2026-10-09 22:02:25 UTC 152,394 bytes, 4,139 lines download raw bytes

1"use strict";
2
3function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
5window.Happy = window.Happy || {};
6
7(function ($, Happy, w) {
8  var $window = $(w);
9  $(function () {
10    var $container = $('.ha-fsb-container');
11
12    if ($container.length > 0) {
13      if (window.history && window.history.pushState) {
14        ha_manage_fsb();
15      }
16
17      ;
18      $(document.body).on("added_to_cart", function (event, fragments, cart_hash, $button) {
19        ha_manage_fsb();
20      });
21      $(document.body).on("removed_from_cart", function (event, fragments, cart_hash, $button) {
22        ha_manage_fsb();
23      });
24    }
25
26    function ha_manage_fsb() {
27      $.ajax({
28        url: HappyProLocalize.ajax_url,
29        type: "POST",
30        data: {
31          action: "ha_get_cart_subtotal_action",
32          security: HappyProLocalize.nonce
33        },
34        success: function success(response) {
35          var $data = JSON.parse(response);
36          var $subTotalAmount = $data.subTotalAmount;
37
38          if ($data.status == 'true' && $subTotalAmount >= 0) {
39            var $container = $('.ha-fsb-container');
40            var $elem = $container.find('.ha-fsb-size');
41            var $settings = $container.data('fsb_settings');
42
43            if ($settings != undefined) {
44              var $aimationSpeed = $settings.hasOwnProperty('ha_fsb_animation_speed') ? $settings.ha_fsb_animation_speed : 15;
45              var $progressType = $settings.hasOwnProperty('progress_type') ? $settings.progress_type : 'percent';
46              var $currencySymbol = $settings.hasOwnProperty('currencySymbol') && $progressType == 'percent' ? '%' : $settings.currencySymbol;
47              var $targetAmount = $settings.hasOwnProperty('target_amount') ? $settings.target_amount : 0;
48              var $totalPercent = 0;
49
50              if (parseFloat($subTotalAmount) >= parseFloat($targetAmount)) {
51                $totalPercent = 100;
52              } else {
53                if (parseFloat($targetAmount) == 0) {
54                  $totalPercent = 0;
55                } else {
56                  $totalPercent = parseFloat($subTotalAmount) * 100 / parseFloat($targetAmount);
57                }
58              }
59
60              $totalPercent = parseFloat(Math.round($totalPercent)) >= 100 ? 100 : parseFloat(Math.round($totalPercent));
61              var $progressText = $progressType == 'percent' ? $totalPercent : $subTotalAmount;
62              var defaultWidth = $(window).width() <= 768 ? 12 : 5;
63
64              if ($totalPercent > 0) {
65                $elem.text($progressText + $currencySymbol);
66                $elem.css({
67                  'width': $totalPercent + "%",
68                  'transition': 'width ' + $aimationSpeed + 'ms ease-in-out'
69                });
70              }
71
72              fsbMessageControl($totalPercent);
73
74              if ($progressText <= 0) {
75                $elem.css('width', +defaultWidth + "%");
76                $elem.text('0' + $currencySymbol);
77              }
78            }
79          }
80        },
81        error: function error(_error) {}
82      });
83    }
84
85    ;
86
87    function fsbMessageControl() {
88      var totalPercent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
89      var fsbContainer = $('.ha-fsb-container');
90      var settings = fsbContainer.data('fsb_settings');
91
92      if (fsbContainer && settings) {
93        if (totalPercent >= 100) {
94          $('.ha-fsb-inner-content').html(settings.fsb_success_message);
95        } else {
96          $('.ha-fsb-inner-content').html(settings.announcement);
97        }
98      }
99    }
100
101    ;
102
103    function log(event, item, level) {
104      $(document).on(event, item, level);
105    }
106
107    var e;
108    e = $(".ha-menu-container");
109    $(e).each(function () {
110      var button = $(this);
111
112      if ("yes" != button.attr("ha-dom-added")) {
113        if (0 === button.parents(".elementor-widget-ha-nav-menu").length) {
114          button.parents(".ha-wid-con").addClass("ha_menu_responsive_tablet");
115        }
116
117        button.attr("ha-dom-added", "yes");
118      }
119    });
120    $(".ha-dropdown-has > a").on("click", function (event) {
121      if (!$(this).parents(".ha-navbar-nav, .ha-vertical-navbar-nav").hasClass("submenu-click-on-icon") || $(event.target).hasClass("ha-submenu-indicator-wrap")) {
122        event.preventDefault();
123        var $oElemDragged = $(this).parent().find(">.ha-dropdown, >.ha-megamenu-panel");
124        $oElemDragged.find(".ha-dropdown-open").removeClass("ha-dropdown-open");
125
126        if ($oElemDragged.hasClass("ha-dropdown-open")) {
127          $oElemDragged.removeClass("ha-dropdown-open");
128        } else {
129          $oElemDragged.addClass("ha-dropdown-open");
130        }
131      }
132    }); // $(".ha-menu-toggler").on("click", function(event) {
133    //     event.preventDefault();
134    //     var el_form_group = $(this).parents(".ha-menu-container").parent();
135    //     if (el_form_group.length < 1) {
136    //         el_form_group = $(this).parent();
137    //     }
138    //     var $wrapElement = el_form_group.find(".ha-menu-offcanvas-elements");
139    //     if ($wrapElement.hasClass("active")) {
140    //         $wrapElement.removeClass("active");
141    //     } else {
142    //         $wrapElement.addClass("active");
143    //     }
144    // });
145
146    $(".ha-navbar-nav li a").on("click", function (event) {
147      if (!$(this).attr("href") && "ha-submenu-indicator-wrap" == event.target.className) {
148        var thirdItem = $(this);
149        var lnk = thirdItem.get(0);
150        var oldUrl = lnk.href;
151        var sepor = oldUrl.indexOf("#");
152        var s = thirdItem.parents(".ha-menu-container").hasClass("ha-nav-menu-one-page-yes");
153
154        if (-1 !== sepor && oldUrl.length > 1 && s && lnk.pathname == window.location.pathname) {
155          event.preventDefault();
156          thirdItem.parents(".ha-wid-con").find(".ha-menu-close").trigger("click");
157        }
158      }
159    });
160  });
161
162  function debounce(func, wait, immediate) {
163    var timeout;
164    return function () {
165      var context = this,
166          args = arguments;
167
168      var later = function later() {
169        timeout = null;
170        if (!immediate) func.apply(context, args);
171      };
172
173      var callNow = immediate && !timeout;
174      clearTimeout(timeout);
175      timeout = setTimeout(later, wait);
176      if (callNow) func.apply(context, args);
177    };
178  }
179
180  $window.on("elementor/frontend/init", function () {
181    if (typeof haDisplayCondition != "undefined" && haDisplayCondition.status == "true") {
182      // Set user time in cookie
183      var HappyLocalTimeZone = new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1];
184      var ha_secure = document.location.protocol === "https:" ? "secure" : "";
185      document.cookie = "HappyLocalTimeZone=" + HappyLocalTimeZone + ";SameSite=Strict;" + ha_secure;
186    } else {
187      var now = new Date();
188      now.setTime(now.getTime() - 1000 * 3600);
189      document.cookie = "HappyLocalTimeZone=;expires=" + now.toUTCString() + ";";
190    }
191
192    var CountDown = function CountDown($scope) {
193      var $item = $scope.find(".ha-countdown");
194      var $countdown_item = $item.find(".ha-countdown-item");
195      var $end_action = $item.data("end-action");
196      var $redirect_link = $item.data("redirect-link");
197      var $end_action_div = $item.find(".ha-countdown-end-action");
198      var $editor_mode_on = $scope.hasClass("elementor-element-edit-mode");
199      $item.countdown({
200        end: function end() {
201          if (("message" === $end_action || "img" === $end_action) && $end_action_div !== undefined) {
202            $countdown_item.css("display", "none");
203            $end_action_div.css("display", "block");
204          } else if ("url" === $end_action && $redirect_link !== undefined && $editor_mode_on !== true) {
205            window.location.replace($redirect_link);
206          }
207        }
208      });
209    };
210
211    var SliderBase = elementorModules.frontend.handlers.Base.extend({
212      onInit: function onInit() {
213        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
214        this.run();
215      },
216      getDefaultSettings: function getDefaultSettings() {
217        return {
218          selectors: {
219            container: ".ha-slider-container"
220          }
221        };
222      },
223      getDefaultElements: function getDefaultElements() {
224        var selectors = this.getSettings("selectors");
225        return {
226          $container: this.$element.find(selectors.container)
227        };
228      },
229      getReadySettings: function getReadySettings() {
230        var $this = this;
231        var slidesPerView = parseInt(this.getElementSettings("slides_per_view")) || 1;
232
233        if (this.getElementSettings("thumbs_navigation") == "yes") {
234          var selectorThumbs = this.elements.$container.find(".ha-slider-gallery-thumbs");
235          var haGallaryThumbs = new HaSwiper(selectorThumbs[0], {
236            spaceBetween: this.getElementSettings("space_between_thumbs"),
237            freeMode: true,
238            watchSlidesVisibility: true,
239            watchSlidesProgress: true
240          });
241        } // TODO: Need to fix that in future. Currently, Disabled
242
243
244        var tempEffect = this.getElementSettings("effect");
245
246        if (tempEffect == 'cube') {
247          tempEffect = false;
248        }
249
250        var settings = {
251          direction: this.getElementSettings("slider_direction"),
252          slidesPerView: slidesPerView || 1,
253          spaceBetween: parseInt(this.getElementSettings("space_between_slides")) || 0,
254          loop: !!(this.getElementSettings("infinity_loop") || false),
255          speed: parseInt(this.getElementSettings("effect_speed")),
256          effect: this.getElementSettings("slider_type") == "multiple" ? this.getElementSettings("effect_multiple") : tempEffect,
257          ha_animation: this.getElementSettings("slider_content_animation"),
258          sliderType: this.getElementSettings("slider_type")
259        };
260
261        if (this.getElementSettings("effect") == "flip") {
262          settings.flipEffect = {
263            limitRotation: true,
264            slideShadows: true
265          };
266        } // TODO: Need to fix that in future. Currently, Disabled
267        // if (this.getElementSettings("effect") == "cube") {
268        //     settings.cubeEffect = {
269        //         shadow: true,
270        //         slideShadows: true,
271        //         shadowOffset: 20,
272        //         shadowScale: 0.94,
273        //     };
274        // }
275
276
277        if (this.getElementSettings("effect_multiple") == "coverflow") {
278          settings.coverflowEffect = {
279            rotate: 50,
280            stretch: 0,
281            depth: 100,
282            modifier: 1,
283            slideShadows: true
284          };
285        }
286
287        if (this.getElementSettings("slider_type") == "multiple") {
288          var bpObj = {
289            desktop: {
290              slidesPerView: slidesPerView || 1,
291              spaceBetween: parseInt(this.getElementSettings("space_between_slides")) || 0
292            }
293          };
294          var breakpoints = elementorFrontend.config.responsive.breakpoints;
295          $.each(breakpoints, function (idx, val) {
296            if (val.is_enabled) {
297              bpObj[idx] = {
298                screenSize: val.value,
299                slidesPerView: parseInt($this.getElementSettings("slides_per_view_" + idx)) || slidesPerView,
300                spaceBetween: parseInt($this.getElementSettings("space_between_slides_" + idx)) || 0
301              };
302            }
303          });
304          settings.customBreakpoints = bpObj;
305          settings.customMultiple = true;
306        }
307
308        if (this.getElementSettings("autoplay") == "yes") {
309          settings.autoplay = {
310            delay: this.getElementSettings("autoplay_speed"),
311            disableOnInteraction: false,
312            stopOnLastSlide: !(this.getElementSettings("infinity_loop") || false)
313          };
314        }
315
316        if (this.getElementSettings("arrow_navigation") == "yes") {
317          var selectorNext = this.elements.$container.find(".ha-slider-next");
318          var selectorPrev = this.elements.$container.find(".ha-slider-prev");
319          settings.navigation = {
320            nextEl: selectorNext[0],
321            prevEl: selectorPrev[0]
322          };
323        }
324
325        if (this.getElementSettings("pagination_type") == "dots") {
326          var selectorPagi = this.elements.$container.find(".ha-slider-pagination");
327          settings.pagination = {
328            el: selectorPagi[0],
329            clickable: true
330          };
331        }
332
333        if (this.getElementSettings("pagination_type") == "progressbar") {
334          var selectorPagi = this.elements.$container.find(".ha-slider-pagination");
335          settings.pagination = {
336            el: selectorPagi[0],
337            clickable: true,
338            type: "progressbar"
339          };
340        }
341
342        if (this.getElementSettings("pagination_type") == "numbers") {
343          var selectorPagi = this.elements.$container.find(".ha-slider-pagination");
344          settings.pagination = {
345            el: selectorPagi[0],
346            clickable: true,
347            type: this.getElementSettings("number_pagination_type"),
348            renderBullet: function renderBullet(index, className) {
349              return '<span class="' + className + '">' + (index + 1) + "</span>";
350            },
351            renderFraction: function renderFraction(currentClass, totalClass) {
352              return '<span class="' + currentClass + '"></span>' + "<span>/</span>" + '<span class="' + totalClass + '"></span>';
353            }
354          };
355        }
356
357        if (this.getElementSettings("scroll_bar") == "yes") {
358          var selectorScroll = this.elements.$container.find(".ha-slider-scrollbar");
359          settings.scrollbar = {
360            el: selectorScroll[0],
361            hide: this.getElementSettings("scroll_bar_visibility") == "true",
362            draggable: true
363          };
364        }
365
366        if (this.getElementSettings("thumbs_navigation") == "yes") {
367          settings.thumbs = {
368            swiper: haGallaryThumbs
369          };
370        }
371
372        return $.extend({}, settings);
373      },
374      run: function run() {
375        var elContainer = this.elements.$container;
376        var slider = elContainer.find(".ha-slider-container");
377        var readySettings = this.getReadySettings();
378        var sliderObj = new HaSwiper(slider[0], readySettings);
379
380        if (readySettings.customMultiple) {
381          $(window).on('resize', function () {
382            var mode = $('body').attr('data-elementor-device-mode');
383            sliderObj.params.slidesPerView = readySettings.customBreakpoints[mode].slidesPerView;
384            sliderObj.params.spaceBetween = readySettings.customBreakpoints[mode].spaceBetween;
385            sliderObj.update();
386          }).resize();
387        }
388
389        sliderObj.on("slideChange", function () {
390          if (readySettings.sliderType == "multiple") {
391            return;
392          }
393
394          var aI = sliderObj.activeIndex;
395          var elSlide = elContainer.find(".ha-slider-slide");
396          var elSlideContent = elContainer.find(".ha-slider-content");
397          var currentSlide = elSlideContent.eq(aI);
398          currentSlide.hide();
399
400          if (currentSlide.length <= 0) {}
401
402          setTimeout(function () {
403            currentSlide.show();
404          }, readySettings.speed);
405          elSlide.eq(aI).find(".elementor-invisible, .animated").each(function (e, t) {
406            var i = $(this).data("settings");
407
408            if (i && (i._animation || i.animation)) {
409              var n = i._animation_delay ? i._animation_delay : 0,
410                  a = i._animation || i.animation;
411              $(this).removeClass("elementor-invisible");
412              $(this).addClass(a + " animated");
413            }
414          });
415        });
416        sliderObj.on("transitionEnd", function () {
417          var aI = sliderObj.activeIndex;
418          var elSlide = elContainer.find(".ha-slider-slide");
419          var elSlideContent = elContainer.find(".ha-slider-content");
420          var currentSlide = elSlideContent.eq(aI);
421          setTimeout(function () {
422            elSlide.eq(aI).find(".animated").each(function (e, t) {
423              var i = $(this).data("settings");
424
425              if (i && (i._animation || i.animation)) {
426                var n = i._animation_delay ? i._animation_delay : 0,
427                    a = i._animation || i.animation;
428                $(this).removeClass(a);
429              }
430            });
431          }, readySettings.speed);
432        });
433      }
434    });
435    var CarouselBase = elementorModules.frontend.handlers.Base.extend({
436      onInit: function onInit() {
437        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
438        this.run();
439      },
440      getDefaultSettings: function getDefaultSettings() {
441        return {
442          selectors: {
443            container: ".ha-carousel-container"
444          },
445          arrows: false,
446          dots: false,
447          checkVisible: false,
448          infinite: true,
449          slidesToShow: 3,
450          rows: 0,
451          prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-chevron-left"></i></button>',
452          nextArrow: '<button type="button" class="slick-next"><i class="fa fa-chevron-right"></i></button>'
453        };
454      },
455      getDefaultElements: function getDefaultElements() {
456        var selectors = this.getSettings("selectors");
457        return {
458          $container: this.findElement(selectors.container)
459        };
460      },
461      onElementChange: function onElementChange() {
462        this.elements.$container.slick("unslick");
463        this.run();
464      },
465      getReadySettings: function getReadySettings() {
466        var settings = {
467          infinite: !!this.getElementSettings("loop"),
468          autoplay: !!this.getElementSettings("autoplay"),
469          autoplaySpeed: this.getElementSettings("autoplay_speed"),
470          speed: this.getElementSettings("animation_speed"),
471          centerMode: !!this.getElementSettings("center"),
472          vertical: !!this.getElementSettings("vertical"),
473          slidesToScroll: 1
474        };
475
476        switch (this.getElementSettings("navigation")) {
477          case "arrow":
478            settings.arrows = true;
479            break;
480
481          case "dots":
482            settings.dots = true;
483            break;
484
485          case "both":
486            settings.arrows = true;
487            settings.dots = true;
488            break;
489        }
490
491        settings.slidesToShow = parseInt(this.getElementSettings("slides_to_show")) || 1;
492        settings.responsive = [{
493          breakpoint: elementorFrontend.config.breakpoints.lg,
494          settings: {
495            slidesToShow: parseInt(this.getElementSettings("slides_to_show_tablet")) || settings.slidesToShow
496          }
497        }, {
498          breakpoint: elementorFrontend.config.breakpoints.md,
499          settings: {
500            slidesToShow: parseInt(this.getElementSettings("slides_to_show_mobile")) || parseInt(this.getElementSettings("slides_to_show_tablet")) || settings.slidesToShow
501          }
502        }];
503        return $.extend({}, this.getSettings(), settings);
504      },
505      run: function run() {
506        this.elements.$container.slick(this.getReadySettings());
507      }
508    }); // Source Code
509
510    var SourceCode = function SourceCode($scope) {
511      var $item = $scope.find('.ha-source-code');
512      var $lng_type = $item.data('lng-type');
513      var $after_copy_text = $item.data('after-copy');
514      var $code = $item.find('code.language-' + $lng_type);
515      var $copy_btn = $scope.find('.ha-copy-code-button');
516      $copy_btn.on('click', function () {
517        var $temp = $("<textarea>");
518        $(this).append($temp);
519        $temp.val($code.text()).select();
520        document.execCommand("copy");
521        $temp.remove();
522
523        if ($after_copy_text.length) {
524          $(this).text($after_copy_text);
525        }
526      });
527
528      if ($lng_type !== undefined && $code !== undefined) {
529        Prism.highlightElement($code.get(0));
530      }
531    }; // Animated text
532
533
534    var AnimatedText = function AnimatedText($scope) {
535      var $item = $scope.find(".cd-headline"),
536          $animationDelay = $item.data("animation-delay");
537      happyAnimatedText({
538        selector: $item,
539        animationDelay: $animationDelay
540      });
541    }; //Instagram Feed
542
543
544    var InstagramFeed = function InstagramFeed($scope) {
545      var button = $scope.find(".ha-insta-load-more");
546      var instagram_wrap = $scope.find(".ha-insta-default");
547      button.on("click", function (e) {
548        e.preventDefault();
549        var $self = $(this),
550            query_settings = $self.data("settings"),
551            total = $self.data("total"),
552            items = $scope.find(".ha-insta-item").length;
553        $.ajax({
554          url: HappyProLocalize.ajax_url,
555          type: "POST",
556          data: {
557            action: "ha_instagram_feed_action",
558            security: HappyProLocalize.nonce,
559            query_settings: query_settings,
560            loaded_item: items
561          },
562          success: function success(response) {
563            if (total > items) {
564              $(response).appendTo(instagram_wrap);
565            } else {
566              $self.text("All Loaded").addClass("loaded");
567              setTimeout(function () {
568                $self.css({
569                  display: "none"
570                });
571              }, 800);
572            }
573          },
574          error: function error(_error2) {}
575        });
576      });
577    }; //Scrolling Image
578
579
580    var ScrollingImage = elementorModules.frontend.handlers.Base.extend({
581      onInit: function onInit() {
582        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
583        this.wrapper = this.$element.find(".ha-scrolling-image-wrapper");
584        this.run();
585      },
586      onElementChange: function onElementChange() {
587        this.run();
588      },
589      run: function run() {
590        var container_height = this.wrapper.innerHeight(),
591            container_width = this.wrapper.innerWidth(),
592            image_align = this.wrapper.data("align"),
593            scroll_direction = this.wrapper.data("scroll-direction"),
594            items = this.wrapper.find(".ha-scrolling-image-container"),
595            single_image_box = items.find(".ha-scrolling-image-item"),
596            scroll = "scroll" + image_align + scroll_direction + parseInt(container_height) + parseInt(container_width),
597            duration = this.wrapper.data("duration"),
598            direction = "normal",
599            horizontal_align_width = 10,
600            vertical_align_height = 10;
601        var start = {
602          transform: "translateY(" + container_height + "px)"
603        },
604            end = {
605          transform: "translateY(-101%)"
606        };
607
608        if ("bottom" === scroll_direction || "right" === scroll_direction) {
609          direction = "reverse";
610        }
611
612        if ("ha-horizontal" === image_align) {
613          start = {
614            transform: "translateX(" + container_width + "px)"
615          };
616          end = {
617            transform: "translateX(-101%)"
618          };
619          single_image_box.each(function () {
620            horizontal_align_width += $(this).outerWidth(true);
621          });
622          items.css({
623            width: horizontal_align_width,
624            display: "flex"
625          });
626          items.find("img").css({
627            "max-width": "100%"
628          });
629          single_image_box.css({
630            display: "inline-flex"
631          });
632        }
633
634        if ("ha-vertical" === image_align) {
635          single_image_box.each(function () {
636            vertical_align_height += $(this).outerHeight(true);
637          });
638        }
639
640        $.keyframe.define([{
641          name: scroll,
642          "0%": start,
643          "100%": end
644        }]);
645        items.playKeyframe({
646          name: scroll,
647          duration: duration.toString() + "ms",
648          timingFunction: "linear",
649          delay: "0s",
650          iterationCount: "infinite",
651          direction: direction,
652          fillMode: "none",
653          complete: function complete() {}
654        });
655      }
656    }); //Pricing Table ToolTip
657
658    var PricingTableToolTip = function PricingTableToolTip($scope) {
659      var tooltip_area = $scope.find(".ha-pricing-table-feature-tooltip");
660      tooltip_area.on({
661        mouseenter: function mouseenter(e) {
662          var $this = $(this),
663              direction = $this[0].getBoundingClientRect(),
664              tooltip = $this.find(".ha-pricing-table-feature-tooltip-text"),
665              tooltipW = tooltip.outerWidth(true),
666              tooltipH = tooltip.outerHeight(true),
667              W_width = $(window).width(),
668              W_height = $(window).height();
669          tooltip.css({
670            left: "0",
671            right: "auto",
672            top: "calc(100% + 1px)",
673            bottom: "auto"
674          });
675
676          if (W_width - direction.left < tooltipW && direction.right < tooltipW) {
677            tooltip.css({
678              left: "calc(50% - (" + tooltipW + "px/2))"
679            });
680          } else if (W_width - direction.left < tooltipW) {
681            tooltip.css({
682              left: "auto",
683              right: "0"
684            });
685          }
686
687          if (W_height - direction.bottom < tooltipH) {
688            tooltip.css({
689              top: "auto",
690              bottom: "calc(100% + 1px)"
691            });
692          }
693        }
694      });
695    };
696
697    var TabHandlerBase = elementorModules.frontend.handlers.Base.extend({
698      $activeContent: null,
699      getDefaultSettings: function getDefaultSettings() {
700        return {
701          selectors: {
702            tabTitle: ".ha-tab__title",
703            tabContent: ".ha-tab__content"
704          },
705          classes: {
706            active: "ha-tab--active"
707          },
708          showTabFn: "show",
709          hideTabFn: "hide",
710          toggleSelf: false,
711          hidePrevious: true,
712          autoExpand: true
713        };
714      },
715      getDefaultElements: function getDefaultElements() {
716        var selectors = this.getSettings("selectors");
717        return {
718          $tabTitles: this.findElement(selectors.tabTitle),
719          $tabContents: this.findElement(selectors.tabContent)
720        };
721      },
722      activateDefaultTab: function activateDefaultTab() {
723        var settings = this.getSettings();
724
725        if (!settings.autoExpand || "editor" === settings.autoExpand && !this.isEdit) {
726          return;
727        }
728
729        var defaultActiveTab = this.getEditSettings("activeItemIndex") || 1,
730            originalToggleMethods = {
731          showTabFn: settings.showTabFn,
732          hideTabFn: settings.hideTabFn
733        }; // Toggle tabs without animation to avoid jumping
734
735        this.setSettings({
736          showTabFn: "show",
737          hideTabFn: "hide"
738        });
739        this.changeActiveTab(defaultActiveTab); // Return back original toggle effects
740
741        this.setSettings(originalToggleMethods);
742      },
743      deactivateActiveTab: function deactivateActiveTab(tabIndex) {
744        var settings = this.getSettings(),
745            activeClass = settings.classes.active,
746            activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : "." + activeClass,
747            $activeTitle = this.elements.$tabTitles.filter(activeFilter),
748            $activeContent = this.elements.$tabContents.filter(activeFilter);
749        $activeTitle.add($activeContent).removeClass(activeClass);
750        $activeContent[settings.hideTabFn]();
751      },
752      activateTab: function activateTab(tabIndex) {
753        var settings = this.getSettings(),
754            activeClass = settings.classes.active,
755            $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'),
756            $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]');
757        $requestedTitle.add($requestedContent).addClass(activeClass);
758        $requestedContent[settings.showTabFn]();
759      },
760      isActiveTab: function isActiveTab(tabIndex) {
761        return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings("classes.active"));
762      },
763      bindEvents: function bindEvents() {
764        var _this = this;
765
766        this.elements.$tabTitles.on({
767          keydown: function keydown(event) {
768            if ("Enter" === event.key) {
769              if ('A' == event.currentTarget.tagName && event.currentTarget.classList.contains('ha-tab__title')) {
770                //this conditional scope in only for advance tab widget
771                return;
772              }
773
774              event.preventDefault();
775
776              _this.changeActiveTab(event.currentTarget.getAttribute("data-tab"));
777            }
778          },
779          click: function click(event) {
780            if ('A' == event.currentTarget.tagName && event.currentTarget.classList.contains('ha-tab__title')) {
781              //this conditional scope in only for advance tab widget
782              return;
783            }
784
785            event.preventDefault();
786
787            _this.changeActiveTab(event.currentTarget.getAttribute("data-tab"));
788          }
789        });
790      },
791      onInit: function onInit() {
792        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
793        this.activateDefaultTab();
794      },
795      onEditSettingsChange: function onEditSettingsChange(propertyName) {
796        if ("activeItemIndex" === propertyName) {
797          this.activateDefaultTab();
798        }
799      },
800      changeActiveTab: function changeActiveTab(tabIndex) {
801        var isActiveTab = this.isActiveTab(tabIndex),
802            settings = this.getSettings();
803
804        if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) {
805          this.deactivateActiveTab();
806        }
807
808        if (!settings.hidePrevious && isActiveTab) {
809          this.deactivateActiveTab(tabIndex);
810        }
811
812        if (!isActiveTab) {
813          this.activateTab(tabIndex);
814        }
815
816        $(window).trigger("resize");
817      }
818    });
819
820    var TimeLine = function TimeLine($scope) {
821      var T_ID = $scope.data("id");
822      var timeline = $scope.find(".ha-timeline-wrap");
823      var dataScroll = timeline.data("scroll");
824      var timeline_block = timeline.find(".ha-timeline-block");
825      var event = "scroll.timelineScroll" + T_ID + " resize.timelineScroll" + T_ID;
826
827      function scroll_tree() {
828        timeline_block.each(function () {
829          var block_height = $(this).outerHeight(true);
830          var $offsetTop = $(this).offset().top;
831          var window_middle_p = $window.scrollTop() + $window.height() / 2;
832
833          if ($offsetTop < window_middle_p) {
834            $(this).addClass("ha-timeline-scroll-tree");
835          } else {
836            $(this).removeClass("ha-timeline-scroll-tree");
837          }
838
839          var scroll_tree_wrap = $(this).find(".ha-timeline-tree-inner");
840          var scroll_height = $window.scrollTop() - scroll_tree_wrap.offset().top + $window.outerHeight() / 2;
841
842          if ($offsetTop < window_middle_p && timeline_block.hasClass("ha-timeline-scroll-tree")) {
843            if (block_height > scroll_height) {
844              scroll_tree_wrap.css({
845                height: scroll_height * 1.5 + "px"
846              });
847            } else {
848              scroll_tree_wrap.css({
849                height: block_height * 1.2 + "px"
850              });
851            }
852          } else {
853            scroll_tree_wrap.css("height", "0px");
854          }
855        });
856      }
857
858      if ("yes" === dataScroll) {
859        scroll_tree();
860        $window.on(event, scroll_tree);
861      } else {
862        $window.off(event);
863      }
864    };
865
866    var HotSpots = elementorModules.frontend.handlers.Base.extend({
867      onInit: function onInit() {
868        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
869        this.init();
870      },
871      bindEvents: function bindEvents() {
872        if (!this.isEdit) {
873          this.elements.$items.on("click.spotClick", function (e) {
874            e.preventDefault();
875          });
876        }
877      },
878      getDefaultSettings: function getDefaultSettings() {
879        return {
880          selectors: {
881            item: ".ha-hotspots__item"
882          }
883        };
884      },
885      getDefaultElements: function getDefaultElements() {
886        return {
887          $items: this.findElement(this.getSettings("selectors.item"))
888        };
889      },
890      onElementChange: function onElementChange(changedProp) {
891        if (!this.hasTipso()) {
892          return;
893        }
894
895        if (changedProp.indexOf("tooltip_") === 0) {
896          this.elements.$items.tipso("destroy");
897          this.init();
898        }
899      },
900      hasTipso: function hasTipso() {
901        return $.fn["tipso"];
902      },
903      init: function init() {
904        var position = this.getElementSettings("tooltip_position"),
905            width = this.getElementSettings("tooltip_width"),
906            background = this.getElementSettings("tooltip_bg_color"),
907            color = this.getElementSettings("tooltip_color"),
908            speed = this.getElementSettings("tooltip_speed"),
909            delay = this.getElementSettings("tooltip_delay"),
910            hideDelay = this.getElementSettings("tooltip_hide_delay"),
911            hideArrow = this.getElementSettings("tooltip_hide_arrow"),
912            hover = this.getElementSettings("tooltip_hover"),
913            elementId = this.getID();
914
915        if (!this.hasTipso()) {
916          return;
917        }
918
919        this.elements.$items.each(function (index, item) {
920          var $item = $(item),
921              target = $item.data("target"),
922              settings = $item.data("settings"),
923              classes = ["ha-hotspots--" + elementId, "elementor-repeater-item-" + target];
924          $item.tipso({
925            color: color,
926            width: width.size || 200,
927            position: settings.position || position,
928            speed: speed,
929            delay: delay,
930            showArrow: !hideArrow,
931            tooltipHover: !!hover,
932            hideDelay: hideDelay,
933            background: background,
934            useTitle: false,
935            content: $("#ha-" + target).html(),
936            onBeforeShow: function onBeforeShow($e, e, tooltip) {
937              $(document).find('.elementor-repeater-item-' + target).remove();
938              tooltip.tipso_bubble.addClass(classes.join(" "));
939            }
940          });
941        });
942      }
943    });
944
945    var LineChart = function LineChart($scope) {
946      elementorFrontend.waypoint($scope, function () {
947        var $chart = $(this),
948            $container = $chart.find(".ha-line-chart-container"),
949            $chart_canvas = $chart.find("#ha-line-chart"),
950            settings = $container.data("settings");
951
952        if ($container.length) {
953          var chart = new Chart($chart_canvas, settings);
954        }
955      });
956    };
957
958    var RadarChart = function RadarChart($scope) {
959      elementorFrontend.waypoint($scope, function () {
960        var $chart = $(this),
961            $container = $chart.find(".ha-radar-chart-container"),
962            $chart_canvas = $chart.find("#ha-radar-chart"),
963            settings = $container.data("settings");
964
965        if ($container.length) {
966          var chart = new Chart($chart_canvas, settings);
967        }
968      });
969    };
970
971    var PolarChart = function PolarChart($scope) {
972      elementorFrontend.waypoint($scope, function () {
973        var $chart = $(this),
974            $container = $chart.find(".ha-polar-chart-container"),
975            $chart_canvas = $chart.find("#ha-polar-chart"),
976            settings = $container.data("settings");
977
978        if ($container.length) {
979          var chart = new Chart($chart_canvas, settings);
980        }
981      });
982    };
983
984    var PieChart = function PieChart($scope) {
985      elementorFrontend.waypoint($scope, function () {
986        var $chart = $(this),
987            $container = $chart.find(".ha-pie-chart-container"),
988            $chart_canvas = $chart.find("#ha-pie-chart"),
989            settings = $container.data("settings");
990
991        if ($container.length) {
992          var chart = new Chart($chart_canvas, settings);
993        }
994      });
995    };
996
997    var StickyVideoArray = [];
998
999    var StickyVideo = function StickyVideo($scope) {
1000      var $id = "#ha-sticky-video-player-" + $scope.data("id"),
1001          $wrap = $scope.find(".ha-sticky-video-wrap"),
1002          $settting = $wrap.data("ha-player"),
1003          $box = $wrap.find(".ha-sticky-video-box"),
1004          $overlay_box = $wrap.find(".ha-sticky-video-overlay"),
1005          $overlay_play = $overlay_box.find(".ha-sticky-video-overlay-icon"),
1006          $sticky_close = $wrap.find(".ha-sticky-video-close i"),
1007          $all_box = $(".ha-sticky-video-box"),
1008          event = "scroll.haStickyVideo" + $scope.data("id"),
1009          set;
1010      var playerAbc = new Plyr($id);
1011      var StickyVideoObject = {
1012        player: playerAbc,
1013        event: event,
1014        player_box: $box
1015      };
1016      StickyVideoArray.push(StickyVideoObject); //on ready
1017
1018      playerAbc.on("ready", function (e) {
1019        var $box_plyr = $box.find('.plyr.plyr--video');
1020
1021        if (true == $settting.autoplay) {
1022          $box_plyr.trigger("click");
1023        }
1024      }); //on overlay click
1025
1026      if (0 !== $overlay_box.length) {
1027        var $el = 0 !== $overlay_play.length ? $overlay_play : $overlay_box;
1028        $el.on("click", function () {
1029          playerAbc.play();
1030        });
1031      } //on close sticky
1032
1033
1034      $sticky_close.on("click", function () {
1035        $box.removeClass("sticky");
1036        $box.addClass("sticky-close");
1037        playerAbc.pause();
1038      }); //on Play
1039
1040      playerAbc.on("play", function (e) {
1041        $overlay_box.css("display", "none");
1042
1043        if ($box.hasClass("sticky-close")) {
1044          $box.removeClass("sticky-close");
1045        }
1046
1047        StickyVideoArray.forEach(function (item, index) {
1048          if (item.player !== playerAbc) {
1049            item.player.pause();
1050          }
1051
1052          if (item.event !== event) {
1053            $window.off(item.event);
1054          }
1055
1056          if (item.player_box !== $box) {
1057            item.player_box.removeClass("sticky");
1058          }
1059        });
1060
1061        if (true === $settting.sticky) {
1062          $window.on(event, function () {
1063            var height = $box.outerHeight(true);
1064            var $offsetTop = $wrap.offset().top;
1065            var videoBoxTopPoint = $window.scrollTop();
1066            var videoBoxMiddlePoint = $offsetTop + height / 2;
1067
1068            if (!$box.hasClass("sticky-close")) {
1069              if (videoBoxMiddlePoint < videoBoxTopPoint) {
1070                $box.addClass("sticky");
1071              } else {
1072                $box.removeClass("sticky");
1073              }
1074            }
1075          });
1076        } else {
1077          $window.off(event);
1078        }
1079      }); // on pause
1080
1081      playerAbc.on("pause", function (e) {
1082        $window.off(event);
1083      });
1084      $window.on("load resize", debounce(function () {
1085        var height = $box.find(".plyr").height();
1086        $wrap.css("min-height", height + "px");
1087      }, 100));
1088    }; //facebook feed
1089
1090
1091    var FacebookFeed = function FacebookFeed($scope) {
1092      var button = $scope.find(".ha-facebook-load-more");
1093      var facebook_wrap = $scope.find(".ha-facebook-items");
1094      button.on("click", function (e) {
1095        e.preventDefault();
1096        var $self = $(this),
1097            query_settings = $self.data("settings"),
1098            total = $self.data("total"),
1099            items = $scope.find(".ha-facebook-item").length;
1100        $.ajax({
1101          url: HappyProLocalize.ajax_url,
1102          type: "POST",
1103          data: {
1104            action: "ha_facebook_feed_action",
1105            security: HappyProLocalize.nonce,
1106            query_settings: query_settings,
1107            loaded_item: items
1108          },
1109          success: function success(response) {
1110            if (total > items) {
1111              $(response).appendTo(facebook_wrap);
1112            } else {
1113              $self.text("All Loaded").addClass("loaded");
1114              setTimeout(function () {
1115                $self.css({
1116                  display: "none"
1117                });
1118              }, 800);
1119            }
1120          },
1121          error: function error(_error3) {}
1122        });
1123      });
1124    }; //SmartPostList
1125
1126
1127    var SmartPostList = function SmartPostList($scope) {
1128      var filterWrap = $scope.find(".ha-spl-filter"),
1129          customSelect = $scope.find(".ha-spl-custom-select"),
1130          gridWrap = $scope.find(".ha-spl-grid-area"),
1131          mainWrapper = $scope.find(".ha-spl-wrapper"),
1132          querySettings = mainWrapper.data("settings"),
1133          dataOffset = mainWrapper.attr("data-offset"),
1134          nav = $scope.find(".ha-spl-pagination button"),
1135          navPrev = $scope.find(".ha-spl-pagination button.prev"),
1136          navNext = $scope.find(".ha-spl-pagination button.next"),
1137          filter = $scope.find("ul.ha-spl-filter-list li span"),
1138          event;
1139      customSelect.niceSelect();
1140      var select = $scope.find(".ha-spl-custom-select li");
1141
1142      function afterClick(e) {
1143        e.preventDefault();
1144        var $self = $(this),
1145            dataFilter = filterWrap.attr("data-active"),
1146            dataTotalOffset = mainWrapper.attr("data-total-offset"),
1147            offset = "",
1148            termId = "";
1149
1150        if (e.target.classList.contains("prev") || e.target.classList.contains("fa-angle-left")) {
1151          if (0 == parseInt(dataTotalOffset)) {
1152            navPrev.attr("disabled", true);
1153            return;
1154          }
1155
1156          offset = 0 !== parseInt(dataTotalOffset) ? parseInt(dataTotalOffset) - parseInt(dataOffset) : "0";
1157
1158          if (undefined !== dataFilter) {
1159            termId = dataFilter;
1160          }
1161        } else if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) {
1162          offset = parseInt(dataTotalOffset) + parseInt(dataOffset);
1163
1164          if (undefined !== dataFilter) {
1165            termId = dataFilter;
1166          }
1167        }
1168
1169        if (e.target.hasAttribute("data-value")) {
1170          termId = e.target.dataset["value"];
1171          filterWrap[0].setAttribute("data-active", termId);
1172
1173          if ("SPAN" === e.target.tagName) {
1174            filter.removeClass("ha-active");
1175            e.target.classList.toggle("ha-active");
1176          }
1177
1178          offset = 0;
1179          navPrev.attr("disabled", true);
1180          navNext.removeAttr("disabled");
1181        }
1182
1183        $.ajax({
1184          url: HappyProLocalize.ajax_url,
1185          type: "POST",
1186          data: {
1187            action: "ha_smart_post_list_action",
1188            security: HappyProLocalize.nonce,
1189            querySettings: querySettings,
1190            offset: offset,
1191            termId: termId
1192          },
1193          success: function success(response) {
1194            if ($(response).length > 0) {
1195              gridWrap.css("height", gridWrap.outerHeight(true) + "px");
1196              gridWrap.html("");
1197              $(response).appendTo(gridWrap);
1198              gridWrap.css("height", "");
1199              mainWrapper[0].attributes["data-total-offset"].value = offset;
1200
1201              if (e.target.classList.contains("prev") || e.target.classList.contains("fa-angle-left")) {
1202                navNext.removeAttr("disabled");
1203              }
1204
1205              if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) {
1206                navPrev.removeAttr("disabled");
1207              }
1208            } else {
1209              if (e.target.classList.contains("next") || e.target.classList.contains("fa-angle-right")) {
1210                navNext.attr("disabled", true);
1211              }
1212            }
1213          },
1214          error: function error(_error4) {}
1215        });
1216      }
1217
1218      nav.on("click", afterClick);
1219      filter.on("click", afterClick);
1220      select.on("click", afterClick);
1221    }; //PostGrid
1222
1223
1224    var postGridSkins = ["classic", "hawai", "standard", "monastic", "stylica", "outbox", "crossroad"];
1225
1226    var PostGrid = function PostGrid($scope) {
1227      var wrapper = $scope.find(".ha-pg-wrapper"),
1228          gridWrap = wrapper.find(".ha-pg-grid-wrap"),
1229          button = wrapper.find("button.ha-pg-loadmore");
1230      button.on("click", function (e) {
1231        e.preventDefault();
1232        var $self = $(this),
1233            querySettings = $self.data("settings"),
1234            items = wrapper.find(".ha-pg-item").length;
1235        $self.attr("disabled", true);
1236        $.ajax({
1237          url: HappyProLocalize.ajax_url,
1238          type: "POST",
1239          data: {
1240            action: "hapro_post_grid_action",
1241            security: HappyProLocalize.nonce,
1242            querySettings: querySettings,
1243            loadedItem: items
1244          },
1245          beforeSend: function beforeSend() {
1246            $self.find(".eicon-loading").css({
1247              display: "inline-block"
1248            });
1249          },
1250          success: function success(response) {
1251            if (response) {
1252              $(response).each(function () {
1253                var $self = $(this);
1254
1255                if ($self.hasClass("ha-pg-item")) {
1256                  $self.addClass("ha-pg-item-loaded").appendTo(gridWrap);
1257                } else {
1258                  $self.appendTo(gridWrap);
1259                }
1260              });
1261            } else {
1262              $self.text("All Loaded").addClass("loaded");
1263              setTimeout(function () {
1264                $self.css({
1265                  display: "none"
1266                });
1267              }, 800);
1268            }
1269
1270            $self.find(".eicon-loading").css({
1271              display: "none"
1272            });
1273            $self.removeAttr("disabled");
1274          },
1275          error: function error(_error5) {}
1276        });
1277      });
1278    }; // Advanced Data Table
1279
1280
1281    var DataTable = function DataTable($scope) {
1282      var dataTable = $scope.find(".ha-advanced-table");
1283      var widgetWrapper = $scope.find(".elementor-widget-container");
1284      var row_td = $scope.find(".ha-advanced-table__body-row-cell");
1285      var search = dataTable.data("search") == true ? true : false;
1286      var paging = dataTable.data("paging") == true ? true : false;
1287      var scrollX = dataTable.data("scroll-x") == undefined ? false : true;
1288
1289      if (window.innerWidth <= 767) {
1290        var scrollX = true;
1291      } // DataTables.js settings
1292
1293
1294      $(dataTable).DataTable({
1295        searching: search,
1296        paging: paging,
1297        orderCellsTop: true,
1298        scrollX: scrollX,
1299        aaSorting: []
1300      });
1301      var column_th = $scope.find(".ha-advanced-table__head-column-cell");
1302      column_th.each(function (index, v) {
1303        $(column_th[index]).css("width", "");
1304      }); // export table button
1305
1306      if (dataTable.data("export-table") == true) {
1307        widgetWrapper.prepend('<div class="ha-advanced-table-btn-wrap"><button class="ha-advanced-table-btn">' + dataTable.data("export-table-text") + "</button></div>");
1308        var dataTableBtn = $scope.find(".ha-advanced-table-btn");
1309        dataTableBtn.on("click", function () {
1310          var oldDownloadNode = document.querySelector(".ha-advanced-data-table-export");
1311
1312          if (oldDownloadNode) {
1313            oldDownloadNode.parentNode.removeChild(oldDownloadNode);
1314          }
1315
1316          var csv = [];
1317          dataTable.find("tr").each(function (index, tr) {
1318            var data = [];
1319            $(tr).find("th").each(function (index, th) {
1320              data.push(th.textContent);
1321            });
1322            $(tr).find("td").each(function (index, td) {
1323              data.push(td.textContent);
1324            });
1325            csv.push(data.join(","));
1326          });
1327          var csvFile = new Blob([csv.join("\n")], {
1328            type: "text/csv"
1329          });
1330          var downloadNode = document.createElement("a");
1331          var url = URL.createObjectURL(csvFile);
1332          var date = new Date();
1333          var options = {
1334            day: "2-digit",
1335            month: "short",
1336            year: "numeric",
1337            hour: "numeric",
1338            minute: "numeric",
1339            second: "numeric"
1340          };
1341          var formatedDate = date.toLocaleDateString("en-BD", options);
1342          var dateString = JSON.stringify(formatedDate.replace(/[ , :]/g, "-"));
1343          downloadNode.download = "advanced-data-table-" + dateString + "~" + dataTable.data("widget-id") + ".csv";
1344          downloadNode.setAttribute("href", url);
1345          downloadNode.classList.add("ha-advanced-data-table-export");
1346          downloadNode.style.visibility = "hidden";
1347          document.body.appendChild(downloadNode);
1348          downloadNode.click();
1349        });
1350      } //for fit table th&td
1351
1352
1353      $(window).trigger('resize');
1354    }; // ModalPopup
1355
1356
1357    var ModalPopup = function ModalPopup($scope) {
1358      var boxWrapper = $scope.find(".ha-modal-popup-box-wrapper");
1359      var triggerType = boxWrapper.data("trigger-type");
1360      var trigger = $scope.find(".ha-modal-popup-trigger");
1361      var overlayClose = $scope.find(".ha-modal-popup-overlay");
1362      var iconClose = $scope.find(".ha-modal-popup-content-close");
1363      var modal = $scope.find(".ha-modal-popup-content-wrapper");
1364      var modalAnimation = modal.data("animation");
1365      var modalDelay = modal.data("display-delay");
1366
1367      if ("pageload" == triggerType) {
1368        if (!modal.hasClass("ha-modal-show")) {
1369          setTimeout(function () {
1370            modal.addClass("ha-modal-show");
1371            modal.find(".ha-modal-animation").addClass(modalAnimation);
1372          }, parseInt(modalDelay));
1373        }
1374      } else {
1375        trigger.on("click", function (e) {
1376          e.preventDefault();
1377          var wrapper = $(this).closest(".ha-modal-popup-box-wrapper"),
1378              modal = wrapper.find(".ha-modal-popup-content-wrapper"),
1379              modalAnimation = modal.data("animation"),
1380              modalContent = modal.find(".ha-modal-animation");
1381
1382          if (!modal.hasClass("ha-modal-show")) {
1383            modal.addClass("ha-modal-show");
1384            modalContent.addClass(modalAnimation);
1385          }
1386        });
1387      }
1388
1389      overlayClose.on("click", close_modal);
1390      iconClose.on("click", close_modal);
1391
1392      function close_modal(el) {
1393        var wrap = $(this).closest(".ha-modal-popup-content-wrapper"),
1394            modalAnimation = wrap.data("animation");
1395
1396        if (wrap != null && wrap.hasClass("ha-modal-show")) {
1397          var doSetTimeout = function doSetTimeout(target, source) {
1398            setTimeout(function () {
1399              target.attr("src", source);
1400            }, 500);
1401          };
1402
1403          var nVideo = wrap.find("iframe, video");
1404          $.each(nVideo, function (idx, val) {
1405            var videoSrc = $(this).attr("src");
1406            $(this).attr("src", "https://happyaddons.com/marvin/index.html");
1407            doSetTimeout($(this), videoSrc);
1408          });
1409          wrap.removeClass("ha-modal-show");
1410          wrap.find("." + modalAnimation).removeClass(modalAnimation);
1411        }
1412      }
1413    }; //Mini Cart
1414
1415
1416    var miniCart = function miniCart($scope) {
1417      $scope.find(".ha-mini-cart-inner").on("click mouseenter mouseleave", function (e) {
1418        var cart_btn = $(this),
1419            on_click = cart_btn.hasClass("ha-mini-cart-on-click"),
1420            on_hover = cart_btn.hasClass("ha-mini-cart-on-hover"),
1421            popup = cart_btn.find(".ha-mini-cart-popup");
1422
1423        if (popup.length == 0) {
1424          return;
1425        }
1426
1427        if ("click" === e.type && on_click) {
1428          popup.fadeToggle();
1429        }
1430
1431        if ("mouseenter" === e.type && on_hover) {
1432          popup.fadeIn();
1433        }
1434
1435        if ("mouseleave" === e.type && on_hover) {
1436          popup.fadeOut();
1437        }
1438      });
1439
1440      if ($scope.find(".ha-mini-cart-popup").length > 0 && $scope.find(".ha-mini-cart-on-click").length > 0) {
1441        $("body").on("click", function (e) {
1442          if ($(e.target).hasClass("ha-mini-cart-popup") || $(e.target).parents().hasClass("ha-mini-cart-popup") || $(e.target).hasClass("ha-mini-cart-button") || $(e.target).parents().hasClass("ha-mini-cart-button")) {
1443            return;
1444          } else {
1445            $scope.find(".ha-mini-cart-popup").removeAttr("style");
1446          }
1447        });
1448      }
1449    }; //Image Scroller
1450
1451
1452    var ImageScroller = elementorModules.frontend.handlers.Base.extend({
1453      onInit: function onInit() {
1454        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1455        this.wrapper = this.$element.find(".ha-image-scroller-wrapper");
1456        this.run();
1457      },
1458      onElementChange: function onElementChange() {
1459        this.run();
1460      },
1461      run: function run() {
1462        var triggerType = this.wrapper.data("trigger-type");
1463
1464        if ("hover" !== triggerType) {
1465          return;
1466        }
1467
1468        var figure = this.wrapper.find(".ha-image-scroller-container");
1469        var scrollType = this.wrapper.data("scroll-type");
1470        var scrollDirection = this.wrapper.data("scroll-direction");
1471        var imageScroll = figure.find("img");
1472        var transformY = imageScroll.height() - figure.height();
1473        var transformX = imageScroll.width() - figure.width();
1474
1475        if (scrollType === "vertical" && transformY > 0) {
1476          if ("top" === scrollDirection) {
1477            mouseEvent("translateY", transformY);
1478          } else {
1479            imageScroll.css("transform", "translateY" + "( -" + transformY + "px)");
1480            mouseEventRevers("translateY", transformY);
1481          }
1482        }
1483
1484        if (scrollType === "horizontal" && transformX > 0) {
1485          if ("left" === scrollDirection) {
1486            mouseEvent("translateX", transformX);
1487          } else {
1488            imageScroll.css("transform", "translateX" + "( -" + transformX + "px)");
1489            mouseEventRevers("translateX", transformX);
1490          }
1491        }
1492
1493        function mouseEvent(cssProperty, value) {
1494          figure.on("mouseenter", function () {
1495            imageScroll.css("transform", cssProperty + "( -" + value + "px)");
1496          });
1497          figure.on("mouseleave", function () {
1498            imageScroll.css("transform", cssProperty + "( 0px)");
1499          });
1500        }
1501
1502        function mouseEventRevers(cssProperty, value) {
1503          figure.on("mouseenter", function () {
1504            imageScroll.css("transform", cssProperty + "( 0px)");
1505          });
1506          figure.on("mouseleave", function () {
1507            imageScroll.css("transform", cssProperty + "( -" + value + "px)");
1508          });
1509        }
1510      }
1511    }); // Mega Menu
1512
1513    var NavMenu = function _init($scope) {
1514      $scope.find(".ha-menu-toggler").on("click", function (event) {
1515        event.preventDefault();
1516        var el_form_group = $(this).parents(".ha-menu-container").parent();
1517
1518        if (el_form_group.length < 1) {
1519          el_form_group = $(this).parent();
1520        }
1521
1522        var $wrapElement = el_form_group.find(".ha-menu-offcanvas-elements");
1523
1524        if ($wrapElement.hasClass("active")) {
1525          $wrapElement.removeClass("active");
1526        } else {
1527          $wrapElement.addClass("active");
1528        }
1529      });
1530
1531      if ($scope.find(".ha-menu-container").length > 0) {
1532        var additionalDigits = $scope.find(".ha-wid-con").data("responsive-breakpoint");
1533        var sidebar_mousemove = $scope.find(".ha-megamenu-has");
1534        var tabPadding = $scope.find(".ha-menu-container").outerHeight();
1535        $(window).on("resize", function () {
1536          $scope.find(".ha-megamenu-panel").css({
1537            top: tabPadding
1538          });
1539        }).trigger("resize");
1540        sidebar_mousemove.on("mouseenter", function () {
1541          var q = $(this).data("vertical-menu");
1542          var jqel = $(this).children(".ha-megamenu-panel");
1543
1544          if ($(this).hasClass("ha-dropdown-menu-full_width") && $(this).hasClass("top_position")) {
1545            /** @type {number} */
1546            var ffleft = Math.floor($(this).position().left - $(this).offset().left);
1547            var $sharepreview = $(this);
1548            $sharepreview.find(".ha-megamenu-panel").css("width", $(window).width());
1549            $(window).on("resize", function () {
1550              $sharepreview.find(".ha-megamenu-panel").css({
1551                left: ffleft + "px"
1552              });
1553            }).trigger("resize");
1554          }
1555
1556          if (!$(this).hasClass("ha-dropdown-menu-full_width") && $(this).hasClass("top_position")) {
1557            $(this).on({
1558              mouseenter: function setup() {
1559                if (0 === $(".default_menu_position").length) {
1560                  $(this).parents(".elementor-section-wrap").addClass("default_menu_position");
1561                }
1562              },
1563              mouseleave: function setup() {
1564                if (0 !== $(".default_menu_position").length) {
1565                  $(this).parents(".elementor-section-wrap").removeClass("default_menu_position");
1566                }
1567              }
1568            });
1569          }
1570
1571          if (q && q !== undefined) {
1572            if ("string" == typeof q) {
1573              if (/^[0-9]/.test(q)) {
1574                $(window).on("resize", function () {
1575                  jqel.css({
1576                    width: q
1577                  });
1578
1579                  if (!($(document).width() > Number(additionalDigits))) {
1580                    jqel.removeAttr("style");
1581                  }
1582                }).trigger("resize");
1583              } else {
1584                $(window).on("resize", function () {
1585                  jqel.css({
1586                    width: q + "px"
1587                  });
1588
1589                  if (!($(document).width() > Number(additionalDigits))) {
1590                    jqel.removeAttr("style");
1591                  }
1592                }).trigger("resize");
1593              }
1594            } else {
1595              jqel.css({
1596                width: q + "px"
1597              });
1598            }
1599          } else {
1600            $(window).on("resize", function () {
1601              jqel.css({
1602                width: q + "px"
1603              });
1604
1605              if (!($(document).width() > Number(additionalDigits))) {
1606                jqel.removeAttr("style");
1607              }
1608            }).trigger("resize");
1609          }
1610        });
1611        sidebar_mousemove.trigger("mouseenter");
1612      }
1613    };
1614
1615    elementorFrontend.hooks.addAction("frontend/element_ready/ha-countdown.default", CountDown);
1616    elementorFrontend.hooks.addAction("frontend/element_ready/ha-team-carousel.default", function ($scope) {
1617      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1618        $element: $scope,
1619        selectors: {
1620          container: ".ha-team-carousel-wrap"
1621        },
1622        prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>',
1623        nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>'
1624      });
1625    });
1626    elementorFrontend.hooks.addAction("frontend/element_ready/ha-source-code.default", SourceCode);
1627    elementorFrontend.hooks.addAction("frontend/element_ready/ha-animated-text.default", AnimatedText);
1628    elementorFrontend.hooks.addAction("frontend/element_ready/ha-logo-carousel.default", function ($scope) {
1629      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1630        $element: $scope,
1631        selectors: {
1632          container: ".ha-logo-carousel-wrap"
1633        }
1634      });
1635    });
1636    elementorFrontend.hooks.addAction("frontend/element_ready/ha-testimonial-carousel.default", function ($scope) {
1637      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1638        $element: $scope,
1639        selectors: {
1640          container: ".ha-testimonial-carousel__wrap"
1641        }
1642      });
1643    });
1644    elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-tabs.default", function ($scope) {
1645      elementorFrontend.elementsHandler.addHandler(TabHandlerBase, {
1646        $element: $scope
1647      });
1648    });
1649    elementorFrontend.hooks.addAction("frontend/element_ready/ha-instagram-feed.default", InstagramFeed);
1650    elementorFrontend.hooks.addAction("frontend/element_ready/ha-scrolling-image.default", function ($scope) {
1651      elementorFrontend.elementsHandler.addHandler(ScrollingImage, {
1652        $element: $scope
1653      });
1654    });
1655    elementorFrontend.hooks.addAction("frontend/element_ready/ha-pricing-table.default", PricingTableToolTip);
1656    elementorFrontend.hooks.addAction("frontend/element_ready/ha-accordion.default", function ($scope) {
1657      elementorFrontend.elementsHandler.addHandler(TabHandlerBase, {
1658        $element: $scope,
1659        selectors: {
1660          tabTitle: ".ha-accordion__item-title",
1661          tabContent: ".ha-accordion__item-content"
1662        },
1663        classes: {
1664          active: "ha-accordion__item--active"
1665        },
1666        showTabFn: "slideDown",
1667        hideTabFn: "slideUp"
1668      });
1669    });
1670    elementorFrontend.hooks.addAction("frontend/element_ready/ha-toggle.default", function ($scope) {
1671      elementorFrontend.elementsHandler.addHandler(TabHandlerBase, {
1672        $element: $scope,
1673        selectors: {
1674          tabTitle: ".ha-toggle__item-title",
1675          tabContent: ".ha-toggle__item-content"
1676        },
1677        classes: {
1678          active: "ha-toggle__item--active"
1679        },
1680        hidePrevious: false,
1681        autoExpand: "editor",
1682        showTabFn: "slideDown",
1683        hideTabFn: "slideUp"
1684      });
1685    });
1686    elementorFrontend.hooks.addAction("frontend/element_ready/ha-timeline.default", TimeLine);
1687    elementorFrontend.hooks.addAction("frontend/element_ready/ha-hotspots.default", function ($scope) {
1688      elementorFrontend.elementsHandler.addHandler(HotSpots, {
1689        $element: $scope
1690      });
1691    });
1692    elementorFrontend.hooks.addAction("frontend/element_ready/ha-line-chart.default", LineChart);
1693    elementorFrontend.hooks.addAction("frontend/element_ready/ha-pie-chart.default", PieChart);
1694    elementorFrontend.hooks.addAction("frontend/element_ready/ha-polar-chart.default", PolarChart);
1695    elementorFrontend.hooks.addAction("frontend/element_ready/ha-radar-chart.default", RadarChart);
1696    elementorFrontend.hooks.addAction("frontend/element_ready/ha-facebook-feed.default", FacebookFeed);
1697    elementorFrontend.hooks.addAction("frontend/element_ready/ha-smart-post-list.default", SmartPostList);
1698    elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-data-table.default", DataTable);
1699    elementorFrontend.hooks.addAction("frontend/element_ready/ha-twitter-carousel.default", function ($scope) {
1700      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1701        $element: $scope,
1702        selectors: {
1703          container: ".ha-tweet-carousel-items"
1704        }
1705      });
1706    }); // Post Carousel
1707
1708    elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-carousel.default", function ($scope) {
1709      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1710        $element: $scope,
1711        selectors: {
1712          container: ".ha-posts-carousel-wrapper"
1713        },
1714        prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>',
1715        nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>'
1716      });
1717    }); // EDD Download product carousel
1718
1719    function initEddCarousel($scope) {
1720      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1721        $element: $scope,
1722        selectors: {
1723          container: ".ha-edd-product-carousel-wrapper"
1724        },
1725        prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>',
1726        nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>'
1727      });
1728    }
1729
1730    function eddCarouselHandlerCallback($scope) {
1731      initEddCarousel($scope);
1732      initProductQuickView($scope); // if (
1733      // 	$scope
1734      // 		.find(".ha-edd-product-carousel-wrapper")
1735      // 		.hasClass("ha-layout-classic")
1736      // ) {
1737      // 	$scope
1738      // 		.find(".ha-product-carousel-add-to-cart a")
1739      // 		.html('<i class="fas fa-shopping-cart"></i>');
1740      // }
1741    } //  Carousel
1742
1743
1744    elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-product-carousel.default", eddCarouselHandlerCallback); // product carousel
1745
1746    function initProductCarousel($scope) {
1747      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1748        $element: $scope,
1749        selectors: {
1750          container: ".ha-product-carousel-wrapper"
1751        },
1752        prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>',
1753        nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>'
1754      });
1755    }
1756
1757    function productCarouselHandlerCallback($scope) {
1758      initProductCarousel($scope);
1759      initProductQuickView($scope);
1760
1761      if ($scope.find(".ha-product-carousel-wrapper").hasClass("ha-layout-modern")) {
1762        $scope.find(".ha-product-carousel-add-to-cart a").html('<i class="fas fa-shopping-cart"></i>');
1763      }
1764    }
1765
1766    elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel.classic", productCarouselHandlerCallback);
1767    elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel.modern", productCarouselHandlerCallback);
1768    elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-carousel-new.default", productCarouselHandlerCallback); // product category carousel
1769
1770    var productCategoryCarouselSkins = ["classic", "minimal"];
1771
1772    function initProductCategoryCarousel($scope) {
1773      elementorFrontend.elementsHandler.addHandler(CarouselBase, {
1774        $element: $scope,
1775        selectors: {
1776          container: ".ha-product-cat-carousel"
1777        },
1778        prevArrow: '<button type="button" class="slick-prev"><i class="hm hm-arrow-left"></i></button>',
1779        nextArrow: '<button type="button" class="slick-next"><i class="hm hm-arrow-right"></i></button>'
1780      });
1781    }
1782
1783    productCategoryCarouselSkins.forEach(function (index) {
1784      elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-category-carousel." + index, initProductCategoryCarousel);
1785    });
1786    elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-category-carousel-new.default", initProductCategoryCarousel); // EDD category carousel
1787
1788    elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-category-carousel.default", initProductCategoryCarousel);
1789    postGridSkins.forEach(function (index) {
1790      elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-grid." + index, PostGrid);
1791    });
1792    elementorFrontend.hooks.addAction("frontend/element_ready/ha-post-grid-new.default", PostGrid);
1793    elementorFrontend.hooks.addAction("frontend/element_ready/ha-sticky-video.default", StickyVideo);
1794    elementorFrontend.hooks.addAction("frontend/element_ready/ha-modal-popup.default", ModalPopup);
1795
1796    function initProductQuickView($scope) {
1797      var $button = $scope.find(".ha-pqv-btn");
1798
1799      if (!$.fn["magnificPopup"]) {
1800        return;
1801      }
1802
1803      $button.magnificPopup({
1804        type: "ajax",
1805        ajax: {
1806          settings: {
1807            cache: true,
1808            dataType: "html"
1809          },
1810          cursor: "mfp-ajax-cur",
1811          tError: "The product could not be loaded."
1812        },
1813        callbacks: {
1814          ajaxContentAdded: function ajaxContentAdded() {
1815            $(this.content).addClass(this.currItem.el.data("modal-class"));
1816          }
1817        }
1818      });
1819    }
1820
1821    var initOnePageNav = elementorModules.frontend.handlers.Base.extend({
1822      onInit: function onInit() {
1823        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
1824        this.run();
1825      },
1826      onElementChange: function onElementChange(e) {
1827        if (e == 'scroll_wheel' || e == 'touch_swipe' || e == 'scroll_keys') {
1828          this.run();
1829        }
1830      },
1831      getReadySettings: function getReadySettings() {
1832        var settings = {
1833          design: this.getElementSettings('select_design'),
1834          speed: this.getElementSettings('scrolling_speed') || 700,
1835          offset: this.getElementSettings('row_to_offset') || 0,
1836          threshold: this.getEditSettings('section_threshold') || 0.50,
1837          scrollWheel: this.getElementSettings('scroll_wheel') == 'yes',
1838          touchSwipe: this.getElementSettings('touch_swipe') == 'yes',
1839          scrollKeys: this.getElementSettings('scroll_keys') == 'yes'
1840        };
1841        return $.extend({}
1841, this.getSettings(), settings);
1842      },
1843      scroll: function scroll(id, speed, offset) {
1844        $('html, body').animate({
1845          scrollTop: $('#' + id).offset().top - offset
1846        }, speed);
1847      },
1848      run: function run() {
1849        var $this = this;
1850        var settings = this.getReadySettings();
1851        var track = false;
1852        var $navWrapper = settings.design == 'ha-opn-design-default' ? this.$element.find(".ha-opn-dotted-item") : this.$element.find(".ha_opn__item");
1853        $navWrapper.on('click', function (e) {
1854          e.preventDefault();
1855          var targetId = $(this).find('a').data("section-id");
1856
1857          if ($('#' + targetId).length > 0) {
1858            track = false;
1859            $this.scroll(targetId, settings.speed, settings.offset);
1860            $navWrapper.removeClass('ha_opn__item--current');
1861            $(this).addClass('ha_opn__item--current');
1862          }
1863        });
1864        var sections = [];
1865        var navItems = {};
1866
1867        if ($navWrapper.length > 0) {
1868          $.each($navWrapper, function (index, nav) {
1869            var targetId = $(this).find('a').data('section-id');
1870            var targetSection = $('#' + targetId);
1871            sections.push(targetSection[0]);
1872            navItems[targetId] = $(this)[0];
1873          });
1874        }
1875
1876        var observerOptions = {
1877          root: null,
1878          rootMargin: "0px 0px -100px 0px",
1879          threshold: settings.threshold
1880        };
1881        var currentEvent;
1882        var observer = new IntersectionObserver(function (entries) {
1883          entries.forEach(function (entry) {
1884            if (entry.isIntersecting) {
1885              var navItem = navItems[entry.target.id];
1886              navItem.classList.add('ha_opn__item--current');
1887              Object.values(navItems).forEach(function (item) {
1888                if (item != navItem) {
1889                  item.classList.remove('ha_opn__item--current');
1890                }
1891              });
1892
1893              if (typeof elementor === 'undefined') {
1894                if (currentEvent == 'load' && track) {
1895                  track = false;
1896                  $this.scroll(entry.target.id, settings.speed, settings.offset);
1897                }
1898
1899                if (settings.scrollWheel && currentEvent == 'scroll' && track) {
1900                  track = false;
1901                  $this.scroll(entry.target.id, settings.speed, settings.offset);
1902                }
1903
1904                if (settings.scrollKeys && currentEvent == 'keys' && track) {
1905                  track = false;
1906                  $this.scroll(entry.target.id, settings.speed, settings.offset);
1907                }
1908
1909                if (settings.touchSwipe && currentEvent == 'touch' && track) {
1910                  track = false;
1911                  $this.scroll(entry.target.id, settings.speed, settings.offset);
1912                }
1913              }
1914            }
1915          });
1916        }, observerOptions);
1917        $(window).on('load', function () {
1918          track = true;
1919
1920          if (sections.length > 0) {
1921            sections.forEach(function (sec) {
1922              if (!(sec == undefined)) {
1923                currentEvent = 'load';
1924                observer.observe(sec);
1925              }
1926            });
1927          }
1928        });
1929        $(window).on('mousewheel DOMMouseScroll', debounce(function (e) {
1930          track = true;
1931
1932          if (sections.length > 0) {
1933            sections.forEach(function (sec) {
1934              if (!(sec == undefined)) {
1935                currentEvent = 'scroll';
1936                observer.observe(sec);
1937              }
1938            });
1939          }
1940        }, 200));
1941
1942        if (typeof elementor === 'undefined') {
1943          if (settings.scrollKeys) {
1944            $(window).on('keydown', debounce(function (evt) {
1945              track = true;
1946              var code = parseInt(evt.keyCode); // code == 38 for arrow up key
1947              // code == 40 for arrow up key
1948
1949              if (sections.length > 0) {
1950                sections.forEach(function (sec) {
1951                  if (!(sec == undefined)) {
1952                    currentEvent = 'keys';
1953                    observer.observe(sec);
1954                  }
1955                });
1956              }
1957            }, 200));
1958          }
1959
1960          if (settings.touchSwipe) {
1961            $(window).on('touchmove', debounce(function (evt) {
1962              track = true;
1963
1964              if (sections.length > 0) {
1965                sections.forEach(function (sec) {
1966                  if (!(sec == undefined)) {
1967                    currentEvent = 'touch';
1968                    observer.observe(sec);
1969                  }
1970                });
1971              }
1972            }, 200));
1973          }
1974        }
1975      }
1976    });
1977    elementorFrontend.hooks.addAction("frontend/element_ready/ha-one-page-nav.default", function ($scope) {
1978      elementorFrontend.elementsHandler.addHandler(initOnePageNav, {
1979        $element: $scope
1980      });
1981    }); // advancedSliderHandler
1982
1983    elementorFrontend.hooks.addAction("frontend/element_ready/ha-advanced-slider.default", function ($scope) {
1984      elementorFrontend.elementsHandler.addHandler(SliderBase, {
1985        $element: $scope,
1986        selectors: {
1987          container: ".ha-slider-widget-wrapper"
1988        }
1989      });
1990    });
1991    elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid.classic", initProductQuickView);
1992    elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid.hover", initProductQuickView);
1993    elementorFrontend.hooks.addAction("frontend/element_ready/ha-product-grid-new.default", initProductQuickView);
1994    elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.classic", initProductQuickView);
1995    elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.
1995standard", initProductQuickView);
1996    elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product.landscape", initProductQuickView);
1997    elementorFrontend.hooks.addAction("frontend/element_ready/ha-single-product-new.default", initProductQuickView);
1998    elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-single-product.default", initProductQuickView);
1999    elementorFrontend.hooks.addAction("frontend/element_ready/ha-edd-product-grid.default", initProductQuickView);
2000    $(document.body).on("added_to_cart", function (event, fragment, hash, $addToCart) {
2001      if ($addToCart != undefined && $addToCart.length > 0) {
2002        $addToCart.parent(".ha-product-grid__btns").removeClass("ha-is--adding").addClass("ha-is--added");
2003      }
2004    });
2005    elementorFrontend.hooks.addAction("frontend/element_ready/ha-mini-cart.default", miniCart);
2006    elementorFrontend.hooks.addAction("frontend/element_ready/ha-image-scroller.default", function ($scope) {
2007      elementorFrontend.elementsHandler.addHandler(ImageScroller, {
2008        $element: $scope
2009      });
2010    });
2011    elementorFrontend.hooks.addAction("frontend/element_ready/ha-nav-menu.default", NavMenu); // Off Canvas
2012
2013    var $trigger;
2014
2015    var OffCanvas = function OffCanvas($scope) {
2016      this.node = $scope;
2017      this.wrap = $scope.find(".ha-offcanvas-content-wrap");
2018      this.cart_wrap = $scope.find(".ha-offcanvas-cart-container");
2019      this.content = $scope.find(".ha-offcanvas-content");
2020      this.button = $scope.find(".ha-offcanvas-toggle");
2021      this.settings = this.wrap.data("settings");
2022      this.toggle_source = this.settings.toggle_source;
2023      this.id = this.settings.content_id;
2024      this.toggle_id = this.settings.toggle_id;
2025      this.toggle_class = this.settings.toggle_class;
2026      this.transition = this.settings.transition;
2027      this.esc_close = this.settings.esc_close;
2028      this.body_click_close = this.settings.body_click_close;
2029      this.links_click_close = this.settings.links_click_close;
2030      this.direction = this.settings.direction;
2031      this.buttons_position = this.settings.buttons_position;
2032      this.duration = 500;
2033      this.destroy();
2034      this.init();
2035    };
2036
2037    OffCanvas.prototype = {
2038      id: "",
2039      node: "",
2040      wrap: "",
2041      content: "",
2042      button: "",
2043      settings: {},
2044      transition: "",
2045      duration: 400,
2046      initialized: false,
2047      animations: ["slide", "slide-along", "reveal", "push"],
2048      init: function init() {
2049        if (!this.wrap.length) {
2050          return;
2051        }
2052
2053        $("html").addClass("ha-offcanvas-content-widget");
2054
2055        if ($(".ha-offcanvas-container").length === 0) {
2056          var faProJs = $("#font-awesome-pro-js").length > 0 ? $("#font-awesome-pro-js").attr("src") : false;
2057
2058          if (faProJs) {
2059            $("#font-awesome-pro-js").remove();
2060          }
2061
2062          $("body").wrapInner('<div class="ha-offcanvas-container" />');
2063          this.content.insertBefore(".ha-offcanvas-container");
2064
2065          if (faProJs) {
2066            $("body").append('<script type="text/javascript" id="font-awesome-pro-js" src="' + faProJs + '"></script>');
2067          }
2068        }
2069
2070        if (this.wrap.find(".ha-offcanvas-content").length > 0) {
2071          if ($(".ha-offcanvas-container > .ha-offcanvas-content-" + this.id).length > 0) {
2072            $(".ha-offcanvas-container > .ha-offcanvas-content-" + this.id).remove();
2073          }
2074
2075          if ($("body > .ha-offcanvas-content-" + this.id).length > 0) {
2076            $("body > .ha-offcanvas-content-" + this.id).remove();
2077          }
2078
2079          $("body").prepend(this.wrap.find(".ha-offcanvas-content"));
2080        }
2081
2082        this.bindEvents();
2083      },
2084      destroy: function destroy() {
2085        this.close();
2086        this.animations.forEach(function (animation) {
2087          if ($("html").hasClass("ha-offcanvas-content-" + animation)) {
2088            $("html").removeClass("ha-offcanvas-content-" + animation);
2089          }
2090        });
2091
2092        if ($("body > .ha-offcanvas-content-" + this.id).length > 0) {//$('body > .ha-offcanvas-content-' + this.id ).remove();
2093        }
2094      },
2095      setTrigger: function setTrigger() {
2096        var $trigger = false;
2097
2098        if (this.toggle_source == "element-id" && this.toggle_id != "") {
2099          $trigger = $("#" + this.toggle_id);
2100        } else if (this.toggle_source == "element-class" && this.toggle_class != "") {
2101          $trigger = $("." + this.toggle_class);
2102        } else {
2103          $trigger = this.node.find(".ha-offcanvas-toggle");
2104        }
2105
2106        return $trigger;
2107      },
2108      bindEvents: function bindEvents() {
2109        $trigger = this.setTrigger();
2110
2111        if ($trigger) {
2112          $trigger.on("click", $.proxy(this.toggleContent, this));
2113        }
2114
2115        $("body").delegate(".ha-offcanvas-content .ha-offcanvas-close", "click", $.proxy(this.close, this));
2116
2117        if (this.links_click_close === "yes") {
2118          $("body").delegate(".ha-offcanvas-content .ha-offcanvas-body a", "click", $.proxy(this.close, this));
2119        }
2120
2121        if (this.esc_close === "yes") {
2122          this.closeESC();
2123        }
2124
2125        if (this.body_click_close === "yes") {
2126          this.closeClick();
2127        }
2128
2129        $(window).resize($.proxy(this._resize, this));
2130      },
2131      toggleContent: function toggleContent(e) {
2132        e.preventDefault();
2133
2134        if (!$("html").hasClass("ha-offcanvas-content-open")) {
2135          this.show();
2136        } else {
2137          this.close();
2138        }
2139
2140        this._resize();
2141      },
2142      show: function show() {
2143        $(".ha-offcanvas-content-" + this.id).addClass("ha-offcanvas-content-visible"); // init animation class.
2144
2145        $("html").addClass("ha-offcanvas-content-" + this.transition);
2146        $("html").addClass("ha-offcanvas-content-" + this.direction);
2147        $("html").addClass("ha-offcanvas-content-open");
2148        $("html").addClass("ha-offcanvas-content-" + this.id + "-open");
2149        $("html").addClass("ha-offcanvas-content-reset");
2150        this.button.addClass("ha-is-active");
2151
2152        this._resize();
2153      },
2154      close: function close() {
2155        $("html").removeClass("ha-offcanvas-content-open");
2156        $("html").removeClass("ha-offcanvas-content-" + this.id + "-open");
2157        setTimeout($.proxy(function () {
2158          $("html").removeClass("ha-offcanvas-content-reset");
2159          $("html").removeClass("ha-offcanvas-content-" + this.transition);
2160          $("html").removeClass("ha-offcanvas-content-" + this.direction);
2161          $(".ha-offcanvas-content-" + this.id).removeClass("ha-offcanvas-content-visible");
2162        }, this), 500);
2163        this.button.removeClass("ha-is-active");
2164      },
2165      closeESC: function closeESC() {
2166        var self = this;
2167
2168        if ("" === self.settings.esc_close) {
2169          return;
2170        } // menu close on ESC key
2171
2172
2173        $(document).on("keydown", function (e) {
2174          if (e.keyCode === 27) {
2175            self.close();
2176          }
2177        });
2178      },
2179      closeClick: function closeClick() {
2180        var self = this;
2181
2182        if (this.toggle_source == "element-id" && this.toggle_id != "") {
2183          $trigger = "#" + this.toggle_id;
2184        } else if (this.toggle_source == "element-class" && this.toggle_class != "") {
2185          $trigger = "." + this.toggle_class;
2186        } else {
2187          $trigger = ".ha-offcanvas-toggle";
2188        }
2189
2190        $(document).on("click", function (e) {
2191          if ($(e.target).is(".ha-offcanvas-content") || $(e.target).parents(".ha-offcanvas-content").length > 0 || $(e.target).is(".ha-offcanvas-toggle") || $(e.target).parents(".ha-offcanvas-toggle").length > 0 || $(e.target).is($trigger) || $(e.target).parents($trigger).length > 0 || !$(e.target).is(".ha-offcanvas-container")) {
2192            return;
2193          } else {
2194            self.close();
2195          }
2196        });
2197      },
2198      _resize: function _resize() {
2199        if (!this.cart_wrap.length) {
2200          return;
2201        }
2202
2203        var off_canvas = $(".ha-offcanvas-content-" + this.id);
2204
2205        if (off_canvas && off_canvas.length > 0) {
2206          if (this.buttons_position === "bottom") {
2207            var winHeight = window.innerHeight;
2208            var offset = 0;
2209
2210            if ($("body").hasClass("admin-bar")) {
2211              offset = 32;
2212            }
2213
2214            winHeight = winHeight - offset;
2215            off_canvas.find(".ha-offcanvas-inner").css({
2216              height: winHeight + "px",
2217              top: offset
2218            });
2219            headerHeight = off_canvas.find(".ha-offcanvas-cart-header").outerHeight(true);
2220            wrapHeight = off_canvas.find(".ha-offcanvas-wrap").outerHeight();
2221            cartTotalHeight = off_canvas.find(".woocommerce-mini-cart__total").outerHeight();
2222            cartButtonsHeight = off_canvas.find(".woocommerce-mini-cart__buttons").outerHeight();
2223            cartMessageHeight = off_canvas.find(".ha-woo-menu-cart-message").outerHeight();
2224            itemsHeight = winHeight - (headerHeight + cartTotalHeight + cartButtonsHeight + cartMessageHeight);
2225            finalItemsHeight = itemsHeight - (winHeight - wrapHeight);
2226            finalItemsHeight += "px";
2227          } else {
2228            finalItemsHeight = "auto";
2229          }
2230
2231          var style = '<style id="ha-woo-style-' + this.id + '">';
2232          style += "#" + off_canvas.attr("id") + " .woocommerce-mini-cart.cart_list {";
2233          style += "height: " + finalItemsHeight;
2234          style += "}";
2235          style += "</style>";
2236
2237          if ($("#ha-woopack-style-" + this.id).length > 0) {
2238            $("#ha-woopack-style-" + this.id).remove();
2239          }
2240
2241          $("head").append(style);
2242        }
2243      }
2244    };
2245
2246    var initOffCanvas = function initOffCanvas($scope, $) {
2247      var content_wrap = $scope.find(".ha-offcanvas-content-wrap");
2248
2249      if ($(content_wrap).length > 0) {
2250        new OffCanvas($scope);
2251      }
2252    };
2253
2254    elementorFrontend.hooks.addAction("frontend/element_ready/ha-off-canvas.default", initOffCanvas);
2255    var Unfold = elementorModules.frontend.handlers.Base.extend({
2256      onInit: function onInit() {
2257        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
2258        this.run();
2259      },
2260      onElementChange: function onElementChange(e) {
2261        if (e == "unfold_text" || e == "unfold_icon" || e == "fold_text" || e == "fold_icon" || e == "fold_height" || e == "transition_duration" || e == "trigger") {
2262          this.run();
2263
2264          if (e == "fold_height") {
2265            this.$element.find(".ha-unfold-data").css("height", this.getCollapseHeight() + "px");
2266          }
2267        }
2268      },
2269      getReadySettings: function getReadySettings() {
2270        var settings = {
2271          collapse_height: this.getElementSettings("fold_height") || 50,
2272          collapse_height_tablet: this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50,
2273          collapse_height_mobile: this.getElementSettings("fold_height_mobile") || this.getElementSettings("fold_height_tablet") || this.getElementSettings("fold_height") || 50,
2274          trigger: this.getElementSettings("trigger"),
2275          transition_duration: this.getElementSettings("transition_duration") || 500,
2276          collapse_text: this.getElementSettings("unfold_text"),
2277          collapse_icon: this.getElementSettings("unfold_icon"),
2278          expand_text: this.getElementSettings("fold_text"),
2279          expand_icon: this.getElementSettings("fold_icon")
2280        };
2281        return $.extend({}, settings);
2282      },
2283      getCollapseHeight: function getCollapseHeight() {
2284        var body = this.$element.parents("body");
2285        var unfoldSettings = this.getReadySettings();
2286        var collapse_height = 50;
2287
2288        if (body.attr("data-elementor-device-mode") == "desktop") {
2289          collapse_height = unfoldSettings.collapse_height;
2290        }
2291
2292        if (body.attr("data-elementor-device-mode") == "tablet") {
2293          collapse_height = unfoldSettings.collapse_height_tablet;
2294        }
2295
2296        if (body.attr("data-elementor-device-mode") == "mobile") {
2297          collapse_height = unfoldSettings.collapse_height_mobile;
2298        }
2299
2300        return collapse_height;
2301      },
2302      fold: function fold(unfoldData, button, collapse_height, unfoldRender) {
2303        var unfoldSettings = this.getReadySettings();
2304        var html = unfoldSettings.collapse_icon ? unfoldSettings.collapse_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.collapse_icon.value + '"></i>' : "" : "";
2305        html += unfoldSettings.collapse_text ? "<span>" + unfoldSettings.collapse_text + "</span>" : "";
2306        unfoldData.css({
2307          "transition-duration": unfoldSettings.transition_duration + "ms",
2308          "height": unfoldRender.outerHeight(true) + 'px'
2309        });
2310        unfoldData.animate({
2311          height: collapse_height
2312        }, 0);
2313        var timeOut = setTimeout(function () {
2314          button.html(html);
2315          clearTimeout(timeOut);
2316        }, unfoldSettings.transition_duration);
2317        unfoldData.removeClass("folded");
2318      },
2319      unfold: function unfold(unfoldData, unfoldRender, button) {
2320        var unfoldSettings = this.getReadySettings();
2321        var html = unfoldSettings.expand_icon ? unfoldSettings.expand_icon.value ? '<i aria-hidden="true" class="' + unfoldSettings.expand_icon.value + '"></i>' : "" : "";
2322        html += unfoldSettings.expand_text ? "<span>" + unfoldSettings.expand_text + "</span>" : "";
2323        unfoldData.css("transition-duration", unfoldSettings.transition_duration + "ms");
2324        unfoldData.animate({
2325          height: unfoldRender.outerHeight(true)
2326        }, 0);
2327        var timeOut = setTimeout(function () {
2328          unfoldData.css("height", 'auto');
2329          button.html(html);
2330          clearTimeout(timeOut);
2331        }, unfoldSettings.transition_duration);
2332        unfoldData.addClass("folded");
2333      },
2334      run: function run() {
2335        var $this = this;
2336        var button = this.$element.find(".ha-unfold-btn"),
2337            unfoldData = this.$element.find(".ha-unfold-data"),
2338            unfoldRender = this.$element.find(".ha-unfold-data-render");
2339        var unfoldSettings = this.getReadySettings();
2340        var collapse_height = $this.getCollapseHeight();
2341        unfoldData.css("height", collapse_height + "px");
2342
2343        if (unfoldSettings.trigger == "click") {
2344          button.on("click", function () {
2345            collapse_height = $this.getCollapseHeight();
2346
2347            if (unfoldData.hasClass("folded")) {
2348              $this.fold(unfoldData, button, collapse_height, unfoldRender);
2349            } else {
2350              $this.unfold(unfoldData, unfoldRender, button);
2351            }
2352          });
2353        } else if (unfoldSettings.trigger == "hover") {
2354          unfoldData.on("mouseenter", function () {
2355            $this.unfold(unfoldData, unfoldRender, button);
2356          });
2357          unfoldData.on("mouseleave", function () {
2358            collapse_height = $this.getCollapseHeight();
2359            $this.fold(unfoldData, button, collapse_height, unfoldRender);
2360          });
2361        }
2362      }
2363    });
2364    var Maps = elementorModules.frontend.handlers.Base.extend({
2365      onInit: function onInit() {
2366        elementorModules.frontend.handlers.Base.prototype.onInit.apply(this, arguments);
2367        this.runMap();
2368      },
2369      defaultStyle: function defaultStyle() {
2370        var defaultStyles = {
2371          standard: "",
2372          silver: [{
2373            elementType: "geometry",
2374            stylers: [{
2375              color: "#f5f5f5"
2376            }]
2377          }, {
2378            elementType: "labels.icon",
2379            stylers: [{
2380              visibility: "off"
2381            }]
2382          }, {
2383            elementType: "labels.text.fill",
2384            stylers: [{
2385              color: "#616161"
2386            }]
2387          }, {
2388            elementType: "labels.text.stroke",
2389            stylers: [{
2390              color: "#f5f5f5"
2391            }]
2392          }, {
2393            featureType: "administrative.land_parcel",
2394            elementType: "labels.text.fill",
2395            stylers: [{
2396              color: "#bdbdbd"
2397            }]
2398          }, {
2399            featureType: "poi",
2400            elementType: "geometry",
2401            stylers: [{
2402              color: "#eeeeee"
2403            }]
2404          }, {
2405            featureType: "poi",
2406            elementType: "labels.text.fill",
2407            stylers: [{
2408              color: "#757575"
2409            }]
2410          }, {
2411            featureType: "poi.park",
2412            elementType: "geometry",
2413            stylers: [{
2414              color: "#e5e5e5"
2415            }]
2416          }, {
2417            featureType: "poi.park",
2418            elementType: "labels.text.fill",
2419            stylers: [{
2420              color: "#9e9e9e"
2421            }]
2422          }, {
2423            featureType: "road",
2424            elementType: "geometry",
2425            stylers: [{
2426              color: "#ffffff"
2427            }]
2428          }, {
2429            featureType: "road.arterial",
2430            elementType: "labels.text.fill",
2431            stylers: [{
2432              color: "#757575"
2433            }]
2434          }, {
2435            featureType: "road.highway",
2436            elementType: "geometry",
2437            stylers: [{
2438              color: "#dadada"
2439            }]
2440          }, {
2441            featureType: "road.highway",
2442            elementType: "labels.text.fill",
2443            stylers: [{
2444              color: "#616161"
2445            }]
2446          }, {
2447            featureType: "road.local",
2448            elementType: "labels.text.fill",
2449            stylers: [{
2450              color: "#9e9e9e"
2451            }]
2452          }, {
2453            featureType: "transit.line",
2454            elementType: "geometry",
2455            stylers: [{
2456              color: "#e5e5e5"
2457            }]
2458          }, {
2459            featureType: "transit.station",
2460            elementType: "geometry",
2461            stylers: [{
2462              color: "#eeeeee"
2463            }]
2464          }, {
2465            featureType: "water",
2466            elementType: "geometry",
2467            stylers: [{
2468              color: "#c9c9c9"
2469            }]
2470          }, {
2471            featureType: "water",
2472            elementType: "labels.text.fill",
2473            stylers: [{
2474              color: "#9e9e9e"
2475            }]
2476          }],
2477          retro: [{
2478            elementType: "geometry",
2479            stylers: [{
2480              color: "#ebe3cd"
2481            }]
2482          }, {
2483            elementType: "labels.text.fill",
2484            stylers: [{
2485              color: "#523735"
2486            }]
2487          }, {
2488            elementType: "labels.text.stroke",
2489            stylers: [{
2490              color: "#f5f1e6"
2491            }]
2492          }, {
2493            featureType: "administrative",
2494            elementType: "geometry.stroke",
2495            stylers: [{
2496              color: "#c9b2a6"
2497            }]
2498          }, {
2499            featureType: "administrative.land_parcel",
2500            elementType: "geometry.stroke",
2501            stylers: [{
2502              color: "#dcd2be"
2503            }]
2504          }, {
2505            featureType: "administrative.land_parcel",
2506            elementType: "labels.text.fill",
2507            stylers: [{
2508              color: "#ae9e90"
2509            }]
2510          }, {
2511            featureType: "landscape.natural",
2512            elementType: "geometry",
2513            stylers: [{
2514              color: "#dfd2ae"
2515            }]
2516          }, {
2517            featureType: "poi",
2518            elementType: "geometry",
2519            stylers: [{
2520              color: "#dfd2ae"
2521            }]
2522          }, {
2523            featureType: "poi",
2524            elementType: "labels.text.fill",
2525            stylers: [{
2526              color: "#93817c"
2527            }]
2528          }, {
2529            featureType: "poi.park",
2530            elementType: "geometry.fill",
2531            stylers: [{
2532              color: "#a5b076"
2533            }]
2534          }, {
2535            featureType: "poi.park",
2536            elementType: "labels.text.fill",
2537            stylers: [{
2538              color: "#447530"
2539            }]
2540          }, {
2541            featureType: "road",
2542            elementType: "geometry",
2543            stylers: [{
2544              color: "#f5f1e6"
2545            }]
2546          }, {
2547            featureType: "road.arterial",
2548            elementType: "geometry",
2549            stylers: [{
2550              color: "#fdfcf8"
2551            }]
2552          }, {
2553            featureType: "road.highway",
2554            elementType: "geometry",
2555            stylers: [{
2556              color: "#f8c967"
2557            }]
2558          }, {
2559            featureType: "road.highway",
2560            elementType: "geometry.stroke",
2561            stylers: [{
2562              color: "#e9bc62"
2563            }]
2564          }, {
2565            featureType: "road.highway.controlled_access",
2566            elementType: "geometry",
2567            stylers: [{
2568              color: "#e98d58"
2569            }]
2570          }, {
2571            featureType: "road.highway.controlled_access",
2572            elementType: "geometry.stroke",
2573            stylers: [{
2574              color: "#db8555"
2575            }]
2576          }, {
2577            featureType: "road.local",
2578            elementType: "labels.text.fill",
2579            stylers: [{
2580              color: "#806b63"
2581            }]
2582          }, {
2583            featureType: "transit.line",
2584            elementType: "geometry",
2585            stylers: [{
2586              color: "#dfd2ae"
2587            }]
2588          }, {
2589            featureType: "transit.line",
2590            elementType: "labels.text.fill",
2591            stylers: [{
2592              color: "#8f7d77"
2593            }]
2594          }, {
2595            featureType: "transit.line",
2596            elementType: "labels.text.stroke",
2597            stylers: [{
2598              color: "#ebe3cd"
2599            }]
2600          }, {
2601            featureType: "transit.station",
2602            elementType: "geometry",
2603            stylers: [{
2604              color: "#dfd2ae"
2605            }]
2606          }, {
2607            featureType: "water",
2608            elementType: "geometry.fill",
2609            stylers: [{
2610              color: "#b9d3c2"
2611            }]
2612          }, {
2613            featureType: "water",
2614            elementType: "labels.text.fill",
2615            stylers: [{
2616              color: "#92998d"
2617            }]
2618          }],
2619          dark: [{
2620            elementType: "geometry",
2621            stylers: [{
2622              color: "#212121"
2623            }]
2624          }, {
2625            elementType: "labels.icon",
2626            stylers: [{
2627              visibility: "off"
2628            }]
2629          }, {
2630            elementType: "labels.text.fill",
2631            stylers: [{
2632              color: "#757575"
2633            }]
2634          }, {
2635            elementType: "labels.text.stroke",
2636            stylers: [{
2637              color: "#212121"
2638            }]
2639          }, {
2640            featureType: "administrative",
2641            elementType: "geometry",
2642            stylers: [{
2643              color: "#757575"
2644            }]
2645          }, {
2646            featureType: "administrative.country",
2647            elementType: "labels.text.fill",
2648            stylers: [{
2649              color: "#9e9e9e"
2650            }]
2651          }, {
2652            featureType: "administrative.land_parcel",
2653            stylers: [{
2654              visibility: "off"
2655            }]
2656          }, {
2657            featureType: "administrative.locality",
2658            elementType: "labels.text.fill",
2659            stylers: [{
2660              color: "#bdbdbd"
2661            }]
2662          }, {
2663            featureType: "poi",
2664            elementType: "labels.text.fill",
2665            stylers: [{
2666              color: "#757575"
2667            }]
2668          }, {
2669            featureType: "poi.park",
2670            elementType: "geometry",
2671            stylers: [{
2672              color: "#181818"
2673            }]
2674          }, {
2675            featureType: "poi.park",
2676            elementType: "labels.text.fill",
2677            stylers: [{
2678              color: "#616161"
2679            }]
2680          }, {
2681            featureType: "poi.park",
2682            elementType: "labels.text.stroke",
2683            stylers: [{
2684              color: "#1b1b1b"
2685            }]
2686          }, {
2687            featureType: "road",
2688            elementType: "geometry.fill",
2689            stylers: [{
2690              color: "#2c2c2c"
2691            }]
2692          }, {
2693            featureType: "road",
2694            elementType: "labels.text.fill",
2695            stylers: [{
2696              color: "#8a8a8a"
2697            }]
2698          }, {
2699            featureType: "road.arterial",
2700            elementType: "geometry",
2701            stylers: [{
2702              color: "#373737"
2703            }]
2704          }, {
2705            featureType: "road.highway",
2706            elementType: "geometry",
2707            stylers: [{
2708              color: "#3c3c3c"
2709            }]
2710          }, {
2711            featureType: "road.highway.controlled_access",
2712            elementType: "geometry",
2713            stylers: [{
2714              color: "#4e4e4e"
2715            }]
2716          }, {
2717            featureType: "road.local",
2718            elementType: "labels.text.fill",
2719            stylers: [{
2720              color: "#616161"
2721            }]
2722          }, {
2723            featureType: "transit",
2724            elementType: "labels.text.fill",
2725            stylers: [{
2726              color: "#757575"
2727            }]
2728          }, {
2729            featureType: "water",
2730            elementType: "geometry",
2731            stylers: [{
2732              color: "#000000"
2733            }]
2734          }, {
2735            featureType: "water",
2736            elementType: "labels.text.fill",
2737            stylers: [{
2738              color: "#3d3d3d"
2739            }]
2740          }],
2741          night: [{
2742            elementType: "geometry",
2743            stylers: [{
2744              color: "#242f3e"
2745            }]
2746          }, {
2747            elementType: "labels.text.fill",
2748            stylers: [{
2749              color: "#746855"
2750            }]
2751          }, {
2752            elementType: "labels.text.stroke",
2753            stylers: [{
2754              color: "#242f3e"
2755            }]
2756          }, {
2757            featureType: "administrative.locality",
2758            elementType: "labels.text.fill",
2759            stylers: [{
2760              color: "#d59563"
2761            }]
2762          }, {
2763            featureType: "poi",
2764            elementType: "labels.text.fill",
2765            stylers: [{
2766              color: "#d59563"
2767            }]
2768          }, {
2769            featureType: "poi.park",
2770            elementType: "geometry",
2771            stylers: [{
2772              color: "#263c3f"
2773            }]
2774          }, {
2775            featureType: "poi.park",
2776            elementType: "labels.text.fill",
2777            stylers: [{
2778              color: "#6b9a76"
2779            }]
2780          }, {
2781            featureType: "road",
2782            elementType: "geometry",
2783            stylers: [{
2784              color: "#38414e"
2785            }]
2786          }, {
2787            featureType: "road",
2788            elementType: "geometry.stroke",
2789            stylers: [{
2790              color: "#212a37"
2791            }]
2792          }, {
2793            featureType: "road",
2794            elementType: "labels.text.fill",
2795            stylers: [{
2796              color: "#9ca5b3"
2797            }]
2798          }, {
2799            featureType: "road.highway",
2800            e
2800lementType: "geometry",
2801            stylers: [{
2802              color: "#746855"
2803            }]
2804          }, {
2805            featureType: "road.highway",
2806            elementType: "geometry.stroke",
2807            stylers: [{
2808              color: "#1f2835"
2809            }]
2810          }, {
2811            featureType: "road.highway",
2812            elementType: "labels.text.fill",
2813            stylers: [{
2814              color: "#f3d19c"
2815            }]
2816          }, {
2817            featureType: "transit",
2818            elementType: "geometry",
2819            stylers: [{
2820              color: "#2f3948"
2821            }]
2822          }, {
2823            featureType: "transit.station",
2824            elementType: "labels.text.fill",
2825            stylers: [{
2826              color: "#d59563"
2827            }]
2828          }, {
2829            featureType: "water",
2830            elementType: "geometry",
2831            stylers: [{
2832              color: "#17263c"
2833            }]
2834          }, {
2835            featureType: "water",
2836            elementType: "labels.text.fill",
2837            stylers: [{
2838              color: "#515c6d"
2839            }]
2840          }, {
2841            featureType: "water",
2842            elementType: "labels.text.stroke",
2843            stylers: [{
2844              color: "#17263c"
2845            }]
2846          }],
2847          aubergine: [{
2848            elementType: "geometry",
2849            stylers: [{
2850              color: "#1d2c4d"
2851            }]
2852          }, {
2853            elementType: "labels.text.fill",
2854            stylers: [{
2855              color: "#8ec3b9"
2856            }]
2857          }, {
2858            elementType: "labels.text.stroke",
2859            stylers: [{
2860              color: "#1a3646"
2861            }]
2862          }, {
2863            featureType: "administrative.country",
2864            elementType: "geometry.stroke",
2865            stylers: [{
2866              color: "#4b6878"
2867            }]
2868          }, {
2869            featureType: "administrative.land_parcel",
2870            elementType: "labels.text.fill",
2871            stylers: [{
2872              color: "#64779e"
2873            }]
2874          }, {
2875            featureType: "administrative.province",
2876            elementType: "geometry.stroke",
2877            stylers: [{
2878              color: "#4b6878"
2879            }]
2880          }, {
2881            featureType: "landscape.man_made",
2882            elementType: "geometry.stroke",
2883            stylers: [{
2884              color: "#334e87"
2885            }]
2886          }, {
2887            featureType: "landscape.natural",
2888            elementType: "geometry",
2889            stylers: [{
2890              color: "#023e58"
2891            }]
2892          }, {
2893            featureType: "poi",
2894            elementType: "geometry",
2895            stylers: [{
2896              color: "#283d6a"
2897            }]
2898          }, {
2899            featureType: "poi",
2900            elementType: "labels.text.fill",
2901            stylers: [{
2902              color: "#6f9ba5"
2903            }]
2904          }, {
2905            featureType: "poi",
2906            elementType: "labels.text.stroke",
2907            stylers: [{
2908              color: "#1d2c4d"
2909            }]
2910          }, {
2911            featureType: "poi.park",
2912            elementType: "geometry.fill",
2913            stylers: [{
2914              color: "#023e58"
2915            }]
2916          }, {
2917            featureType: "poi.park",
2918            elementType: "labels.text.fill",
2919            stylers: [{
2920              color: "#3C7680"
2921            }]
2922          }, {
2923            featureType: "road",
2924            elementType: "geometry",
2925            stylers: [{
2926              color: "#304a7d"
2927            }]
2928          }, {
2929            featureType: "road",
2930            elementType: "labels.text.fill",
2931            stylers: [{
2932              color: "#98a5be"
2933            }]
2934          }, {
2935            featureType: "road",
2936            elementType: "labels.text.stroke",
2937            stylers: [{
2938              color: "#1d2c4d"
2939            }]
2940          }, {
2941            featureType: "road.highway",
2942            elementType: "geometry",
2943            stylers: [{
2944              color: "#2c6675"
2945            }]
2946          }, {
2947            featureType: "road.highway",
2948            elementType: "geometry.stroke",
2949            stylers: [{
2950              color: "#255763"
2951            }]
2952          }, {
2953            featureType: "road.highway",
2954            elementType: "labels.text.fill",
2955            stylers: [{
2956              color: "#b0d5ce"
2957            }]
2958          }, {
2959            featureType: "road.highway",
2960            elementType: "labels.text.stroke",
2961            stylers: [{
2962              color: "#023e58"
2963            }]
2964          }, {
2965            featureType: "transit",
2966            elementType: "labels.text.fill",
2967            stylers: [{
2968              color: "#98a5be"
2969            }]
2970          }, {
2971            featureType: "transit",
2972            elementType: "labels.text.stroke",
2973            stylers: [{
2974              color: "#1d2c4d"
2975            }]
2976          }, {
2977            featureType: "transit.line",
2978            elementType: "geometry.fill",
2979            stylers: [{
2980              color: "#283d6a"
2981            }]
2982          }, {
2983            featureType: "transit.station",
2984            elementType: "geometry",
2985            stylers: [{
2986              color: "#3a4762"
2987            }]
2988          }, {
2989            featureType: "water",
2990            elementType: "geometry",
2991            stylers: [{
2992              color: "#0e1626"
2993            }]
2994          }, {
2995            featureType: "water",
2996            elementType: "labels.text.fill",
2997            stylers: [{
2998              color: "#4e6d70"
2999            }]
3000          }]
3001        };
3002        return defaultStyles;
3003      },
3004      settings: function settings(wrapper) {
3005        var item = document.querySelector(wrapper);
3006        var settings = {
3007          latitude: parseFloat(item.dataset.latitude),
3008          longitude: parseFloat(item.dataset.longitude),
3009          mapType: item.dataset.mapType,
3010          markers: item.dataset.markers,
3011          polylines: item.dataset.polylines,
3012          mapZoom: parseInt(item.dataset.mapZoom),
3013          mapZoomMobile: parseInt(item.dataset.mapZoomMobile),
3014          mapZoomTablet: parseInt(item.dataset.mapZoomTablet),
3015          scrollWheelZoom: item.dataset.scrollWheelZoom,
3016          zoomControl: item.dataset.zoomControl,
3017          fullscreenControl: item.dataset.fullScreen,
3018          mapDraggable: item.dataset.disableMapDrag,
3019          showLegend: item.dataset.showLegend,
3020          showRoute: item.dataset.showRoute,
3021          googleMapType: item.dataset.googleMapType,
3022          mapTypeControl: item.dataset.mapTypeControl,
3023          streetViewControl: item.dataset.streetView,
3024          infoOpen: item.dataset.infoOpen,
3025          infoOpenHover: item.dataset.infoOpenHover,
3026          mapStyle: item.dataset.mapStyle,
3027          customMapStyles: item.dataset.customMapStyle,
3028          defaultStyle: this.defaultStyle(),
3029          strokeColor: item.dataset.strokeColor,
3030          strokeOpacity: item.dataset.strokeOpacity,
3031          strokeWeight: item.dataset.strokeWeight,
3032          strokeFill: item.dataset.strokeFill,
3033          strokeFillOpacity: item.dataset.strokeFillOpacity,
3034          originLat: item.dataset.originLat,
3035          originLng: item.dataset.originLng,
3036          destLat: item.dataset.destLat,
3037          destLng: item.dataset.destLng,
3038          travelMode: item.dataset.travelMode
3039        };
3040        return settings;
3041      },
3042      isValidJsonString: function isValidJsonString(jsonString) {
3043        try {
3044          JSON.parse(jsonString);
3045        } catch (e) {
3046          return false;
3047        }
3048
3049        return true;
3050      },
3051      mapInit: function mapInit(wrapper) {
3052        var settings = this.settings(wrapper);
3053        var markersOptionsArray = JSON.parse(settings.markers);
3054        var map;
3055        var directionsService = new google.maps.DirectionsService();
3056        var directionsRenderer = new google.maps.DirectionsRenderer();
3057        var finalZoomLevel = settings.mapZoom;
3058        window.addEventListener("resize", function () {
3059          if (elementorFrontend.getCurrentDeviceMode() == "mobile") {
3060            finalZoomLevel = settings.mapZoomMobile;
3061          } else if (elementorFrontend.getCurrentDeviceMode() == "tablet") {
3062            finalZoomLevel = settings.mapZoomTablet;
3063          } else {
3064            finalZoomLevel = settings.mapZoom;
3065          }
3066        });
3067        map = new google.maps.Map(document.querySelector(".ha-adv-google-map__wrapper" + wrapper), {
3068          center: {
3069            lat: settings.latitude === "" ? -34.391 : settings.latitude,
3070            lng: settings.longitude === "" ? 150.644 : settings.longitude
3071          },
3072          zoom: finalZoomLevel,
3073          mapTypeId: settings.mapType,
3074          zoomControl: settings.zoomControl === "yes",
3075          mapTypeControl: settings.mapTypeControl === "yes",
3076          fullscreenControl: settings.fullscreenControl === "yes",
3077          streetViewControl: settings.streetViewControl === "yes",
3078          gestureHandling: settings.scrollWheelZoom === "yes" ? "greedy" : "cooperative",
3079          draggable: settings.mapDraggable !== "yes",
3080          styles: settings.mapStyle !== "custom" ? settings.defaultStyle[settings.mapStyle] : !this.isValidJsonString(settings.customMapStyles) ? "" : JSON.parse(settings.customMapStyles)
3081        });
3082
3083        if (settings.mapDraggable === "yes") {
3084          map.setOptions({
3085            draggableCursor: "default"
3086          });
3087        } // adding markers and info window on map
3088
3089
3090        markersOptionsArray.forEach(function (option) {
3091          var marker = new google.maps.Marker({
3092            icon: option.pin_icon.url === "" ? "" : {
3093              url: option.pin_icon.url,
3094              scaledSize: new google.maps.Size(option.rectangular_image === "yes" ? +option.rectangular_pin_size_width.size : +option.square_pin_size.size, option.rectangular_image === "yes" ? +option.rectangular_pin_size_height.size : +option.square_pin_size.size)
3095            },
3096            map: map,
3097            position: {
3098              lat: +option.pin_latitude,
3099              lng: +option.pin_longitude
3100            }
3101          });
3102          var infoWindow = new google.maps.InfoWindow({
3103            content: '<div class="ha-adv-google-map__marker-wrapper">' + '<div class="ha-adv-google-map__marker-title-wrapper">' + '<div class="ha-adv-google-map__marker-title" style="display: inline-block">' + option.pin_item_title + "</div>" + "</div>" + '<div class="ha-adv-google-map__marker-description-wrapper">' + '<div class="ha-adv-google-map__marker-description">' + option.pin_item_description + "</div>" + "</div>" + "</div>"
3104          });
3105
3106          if (settings.infoOpen === "yes") {
3107            infoWindow.open(map, marker);
3108          }
3109
3110          if (settings.infoOpenHover === "yes") {
3111            marker.addListener("mouseover", function (e) {
3112              infoWindow.open(map, marker);
3113            });
3114            marker.addListener("mouseout", function (e) {
3115              var timeOut = setTimeout(function () {
3116                infoWindow.close();
3117                clearTimeout(timeOut);
3118              }, 1000);
3119            });
3120          } else {
3121            marker.addListener("click", function () {
3122              infoWindow.open(map, marker);
3123            });
3124          }
3125        }); // adding map legend
3126
3127        if (settings.showLegend === "yes") {
3128          var legend = document.querySelector(wrapper).nextElementSibling;
3129          map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(legend);
3130        }
3131
3132        if (settings.googleMapType == "polyline") {
3133          var polylines_data = JSON.parse(settings.polylines);
3134          var polylines_arr = [];
3135          polylines_data.forEach(function (polyline) {
3136            polylines_arr.push({
3137              lat: parseFloat(polyline.ha_gmap_polyline_lat),
3138              lng: parseFloat(polyline.ha_gmap_polyline_lng)
3139            });
3140          });
3141          var polyLinePath = JSON.parse(JSON.stringify(polylines_arr));
3142          var polyPath = new google.maps.Polyline({
3143            path: polyLinePath,
3144            strokeColor: settings.strokeColor,
3145            strokeOpacity: settings.strokeOpacity,
3146            strokeWeight: settings.strokeWeight
3147          });
3148          polyPath.setMap(map);
3149        }
3150
3151        if (settings.googleMapType == "polygon") {
3152          var polylines_data = JSON.parse(settings.polylines);
3153          var polylines_arr = [];
3154          polylines_data.forEach(function (polyline) {
3155            polylines_arr.push({
3156              lat: parseFloat(polyline.ha_gmap_polyline_lat),
3157              lng: parseFloat(polyline.ha_gmap_polyline_lng)
3158            });
3159          });
3160          var polyLinePath = JSON.parse(JSON.stringify(polylines_arr));
3161          var polygon = new google.maps.Polygon({
3162            path: polyLinePath,
3163            strokeColor: settings.strokeColor,
3164            strokeOpacity: settings.strokeOpacity,
3165            strokeWeight: settings.strokeWeight,
3166            fillColor: settings.strokeFill,
3167            fillOpacity: settings.strokeFillOpacity
3168          });
3169          polygon.setMap(map);
3170        }
3171
3172        if (settings.googleMapType == "routes") {
3173          this.routeDraw(directionsService, directionsRenderer, settings);
3174          directionsRenderer.setMap(map);
3175        }
3176
3177        google.maps.event.addDomListener(window, "resize", function () {
3178          var center = map.getCenter();
3179          google.maps.event.trigger(map, "resize");
3180          map.setCenter(center);
3181          map.setZoom(finalZoomLevel);
3182        });
3183      },
3184      routeDraw: function routeDraw(directionsService, directionsRenderer, settings) {
3185        var start = settings.originLat + "," + settings.originLng;
3186        var end = settings.destLat + "," + settings.destLng;
3187        directionsService.route({
3188          origin: {
3189            query: start
3190          },
3191          destination: {
3192            query: end
3193          },
3194          travelMode: settings.travelMode.toUpperCase()
3195        }, function (response, status) {
3196          if (status === "OK") {
3197            directionsRenderer.setDirections(response);
3198          } else {}
3199        });
3200      },
3201      runMap: function runMap() {
3202        var gmaper = document.querySelectorAll(".ha-adv-google-map__wrapper");
3203
3204        for (var i = 0; i < gmaper.length; i++) {
3205          gmaper[i].classList.add("ha-adv-google-map__wrapper--item" + i);
3206          this.mapInit(".ha-adv-google-map__wrapper--item" + i);
3207        }
3208      }
3209    });
3210    elementorFrontend.hooks.addAction("frontend/element_ready/ha-google-map.default", function ($scope) {
3211      elementorFrontend.elementsHandler.addHandler(Maps, {
3212        $element: $scope,
3213        selectors: {
3214          container: ".ha-adv-google-map__wrapper"
3215        }
3216      });
3217    });
3218    elementorFrontend.hooks.addAction("frontend/element_ready/ha-unfold.default", function ($scope) {
3219      elementorFrontend.elementsHandler.addHandler(Unfold, {
3220        $element: $scope
3221      });
3222    });
3223
3224    var EddCart = function EddCart($scope) {
3225      var optionEL = $scope.find('.ha-edd-table-wrap');
3226      var settings = optionEL.data('options');
3227      var removeEl = $scope.find('.edd-remove-from-cart');
3228
3229      if (settings.cart_btn_type == 'icon') {
3230        removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>"));
3231      } else {
3232        removeEl.text(settings.btn_text);
3233      }
3234    };
3235
3236    elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-cart.default', EddCart);
3237
3238    var EddCheckout = function EddCheckout($scope) {
3239      var optionEL = $scope.find('.ha-edd-table-wrap');
3240      var settings = optionEL.data('options');
3241      var removeEl = $scope.find('.edd_cart_remove_item_btn');
3242
3243      if (settings.cart_btn_type == 'icon') {
3244        removeEl.html("<i class=\"".concat(settings.icon.value, "\"></i>"));
3245      } else {
3246        removeEl.text(settings.btn_text);
3247      }
3248    };
3249
3250    elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-checkout.default', EddCheckout);
3251
3252    var EddAjaxBtn = function EddAjaxBtn($scope) {
3253      var btn = $scope.find(".ha_edd_ajax_btn");
3254      btn.on('click', function (event) {
3255        event.preventDefault();
3256        var $self = $(this),
3257            download_id = $self.data('download-id'),
3258            nonce = $self.data('nonce');
3259        $.ajax({
3260          url: HappyProLocalize.ajax_url,
3261          type: "POST",
3262          data: {
3263            action: "ha_edd_ajax_add_to_cart_link",
3264            security: HappyProLocalize.nonce,
3265            download_id: download_id
3266          },
3267          success: function success(response) {
3268            if (response.success == true) {
3269              $self.html("<i class=\"fas fa-cart-plus\"></i>");
3270            }
3271          }
3272        });
3273      });
3274    };
3275
3276    elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-product-grid.default', EddAjaxBtn);
3277    elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-product-carou
3277sel.default', EddAjaxBtn);
3278    elementorFrontend.hooks.addAction('frontend/element_ready/ha-edd-single-product.default', EddAjaxBtn);
3279
3280    var Image_Swap = function Image_Swap($scope) {
3281      var element = $scope.find('.ha-image-swap-wrapper');
3282      var trigger_type = element.data('trigger');
3283      var status;
3284
3285      if (trigger_type === 'click') {
3286        element.on('click', element, function () {
3287          var self = $(this);
3288          var click = self.attr('data-click');
3289
3290          if ('inactive' == click) {
3291            status = 'active';
3292          } else {
3293            status = 'inactive';
3294          }
3295
3296          self.attr('data-click', status);
3297          var first_img = self.find('.img_swap_first');
3298          var second_img = self.find('.img_swap_second');
3299        });
3300      }
3301
3302      var elm = $scope.find('.ha-image-swap-ctn');
3303      var elm_img = $scope.find('.ha-image-swap-item');
3304      var trigger = elm.data('trigger');
3305
3306      if (elm.length > 0) {
3307        $('.ha-image-swap-ctn').on('click', '.ha-image-swap-item', function (e) {
3308          var elem = $(this);
3309          var parent = elem.parent('.ha-image-swap-insider');
3310          var firstChild = parent.children('.ha-image-swap-item:first-of-type');
3311          var secondChild = parent.children('.ha-image-swap-item:nth-of-type(2)');
3312
3313          if (!elem.is(':first-child')) {
3314            parent.addClass('changed');
3315            setTimeout(function () {
3316              firstChild.remove();
3317              parent.append(firstChild);
3318              parent.removeClass('changed');
3319            }, 400);
3320          }
3321        });
3322      } // if( trigger == 'hover'){
3323      //     elm.hover(function (e){
3324      //         var target = e.target;
3325      //         if(!$(target).hasClass('active')){
3326      //             var $self = $(this);
3327      //             var parent = $self.find('.ha-image-swap-insider');
3328      //             var firstChild = parent.children('.ha-image-swap-item:first-of-type');
3329      //             var secondChild = parent.children('.ha-image-swap-item:nth-of-type(2)');
3330      //             firstChild.toggleClass('active');
3331      //             secondChild.toggleClass('active');
3332      //         }
3333      //     });
3334      // }
3335
3336    };
3337
3338    var FlipBox = function FlipBox($scope) {
3339      var element = $scope.find('.ha-flip-box-inner'); // touchstart
3340
3341      element.on('mouseenter mouseleave touchstart', function (e) {
3342        if (('mouseenter' == e.type || 'touchstart' == e.type) && !$(this).hasClass('flip')) {
3343          $(this).addClass('flip');
3344        } else if (('mouseleave' == e.type || 'touchstart' == e.type) && $(this).hasClass('flip')) {
3345          $(this).removeClass('flip');
3346        } else if ('touchstart' == e.type && $(this).hasClass('flip')) {
3347          $(this).removeClass('flip');
3348        }
3349      });
3350    };
3351
3352    elementorFrontend.hooks.addAction('frontend/element_ready/ha-image-swap.default', Image_Swap);
3353
3354    var FreeShippingBar = function FreeShippingBar($scope) {
3355      var $fsbContainer = $scope.find('.ha-fsb-container');
3356
3357      if ($fsbContainer) {
3358        var $settings = $fsbContainer.data('fsb_settings');
3359
3360        if ($settings != undefined) {
3361          var $aimationSpeed = $settings.hasOwnProperty('ha_fsb_animation_speed') ? $settings.ha_fsb_animation_speed : 15;
3362          var $achivePercent = $settings.hasOwnProperty('achive_percent') ? $settings.achive_percent : 0;
3363          var $progressType = $settings.hasOwnProperty('progress_type') ? $settings.progress_type : 'percent';
3364          var $currencySymbol = $settings.hasOwnProperty('currencySymbol') && $progressType == 'percent' ? '%' : $settings.currencySymbol;
3365          var $cartTotal = $settings.hasOwnProperty('cart_total') ? $settings.cart_total : 0;
3366          var $totalPercent = parseFloat(Math.round($achivePercent)) >= 100 ? 100 : parseFloat(Math.round($achivePercent));
3367          var $progressText = $progressType == 'percent' ? $totalPercent : $cartTotal;
3368          var $elem = $fsbContainer.find('.ha-fsb-size');
3369          $elem.text($progressText + $currencySymbol);
3370          var defaultWidth = $(window).width() <= 768 ? 12 : 5;
3371          $totalPercent > 0 ? $elem.css({
3372            'width': $totalPercent + "%",
3373            'transition': 'width ' + $aimationSpeed + 'ms ease-in-out'
3374          }) : $elem.css('width', +defaultWidth + "%");
3375        }
3376      }
3377    };
3378
3379    elementorFrontend.hooks.addAction('frontend/element_ready/ha-shipping-bar.default', FreeShippingBar);
3380    $('.fsb-close-icon').on('click', function () {
3381      document.cookie = "ha_close_fsb = yes;path=/";
3382      $('.ha-fsb-container').hide();
3383    });
3384    elementorFrontend.hooks.addAction('frontend/element_ready/ha-flip-box.default', FlipBox
3384);
3385
3386    var HaRemoteCarousel = function HaRemoteCarousel($scope) {
3387      var $rcContainer = $scope.find('.ha-remote-carousel-container');
3388
3389      if ($rcContainer) {
3390        var $rcBtn = $($rcContainer).find('.ha-custom-nav-remote-carousel');
3391
3392        if ($rcBtn) {
3393          var $prevSliderIndex = 0;
3394          var $slides_to_show = 0;
3395          var $ha_show_thumbnail = $($rcBtn).parent().data('show_thumbnail');
3396          var $ha_rc_unique_id = $($rcBtn).parent().data('ha_rc_id');
3397          var $haRcSelector = $ha_rc_unique_id ? $('[data-ha_rcc_uid="' + $ha_rc_unique_id + '"]') : '';
3398
3399          if ($ha_show_thumbnail && $ha_show_thumbnail == 'yes') {
3400            $haRcSelector.on('init', function (event, slick, currentSlide) {
3401              var $dataSettingsSelector = $haRcSelector.parent().parent();
3402              var $dataSettings = $dataSettingsSelector.data('settings');
3403              $slides_to_show = typeof $dataSettings === "undefined" ? $slides_to_show : $dataSettings.slides_to_show;
3404              $prevSliderIndex = (currentSlide ? currentSlide : 0) - 1;
3405              var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1;
3406              var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
3407              var $nextImg = $nextItem.find('img').attr('src');
3408              var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]');
3409              var $prevImg = $prevItem.find('img').attr('src');
3410              var $nextBtn = $rcContainer.find('.ha-remote-carousel-btn-next');
3411              var $prevBtn = $rcContainer.find('.ha-remote-carousel-btn-prev');
3412              $nextBtn.css({
3413                'background-image': 'url(' + $nextImg + ')',
3414                'background-position': 'center'
3415              });
3416              $prevBtn.css({
3417                'background-image': 'url(' + $prevImg + ')',
3418                'background-position': 'center'
3419              });
3420            });
3421            $haRcSelector.trigger('init');
3422            $($rcBtn).on("click", function (e) {
3423              e.preventDefault();
3424              $haRcSelector.on('afterChange', function (event, slick, currentSlideIndex) {
3425                var $dataSettingsSelector = $haRcSelector.parent().parent();
3426                var $dataSettings = $dataSettingsSelector.data('settings');
3427                var $slides_to_show = $dataSettings ? $dataSettings.slides_to_show : currentSlideIndex;
3428                $prevSliderIndex = parseInt(currentSlideIndex - 1);
3429                var $nextIndex = parseInt($slides_to_show) + parseInt($prevSliderIndex) + 1;
3430                var $nextItem = $haRcSelector.find('[data-slick-index="' + $nextIndex + '"]');
3431                var $nextImg = $nextItem.find('img').attr('src');
3432                var $prevItem = $haRcSelector.find('[data-slick-index="' + $prevSliderIndex + '"]');
3433                var $prevImg = $prevItem.find('img').attr('src');
3434                var $nextBtn = $rcContainer.find('.ha-remote-carousel-btn-next');
3435                var $prevBtn = $rcContainer.find('.ha-remote-carousel-btn-prev');
3436
3437                if ($nextBtn) {
3438                  $nextBtn.css({
3439                    'background-image': 'url(' + $nextImg + ')',
3440                    'background-position': 'center'
3441                  });
3442                }
3443
3444                if ($prevBtn) {
3445                  $prevBtn.css({
3446                    'background-image': 'url(' + $prevImg + ')',
3447                    'background-position': 'center'
3448                  });
3449                }
3450              });
3451
3452              if ($(this).data("ha_rc_nav") == 'ha_rc_next_btn') {
3453                $haRcSelector.slick("slickNext");
3454              } else if ($(this).data("ha_rc_nav") == 'ha_rc_prev_btn') {
3455                $haRcSelector.slick("slickPrev");
3456              }
3457            });
3458          } else {
3459            $($rcBtn).on("click", function (e) {
3460              e.preventDefault();
3461
3462              if ($(this).data("ha_rc_nav") == 'ha_rc_next_btn') {
3463                $haRcSelector.slick("slickNext");
3464              } else if ($(this).data("ha_rc_nav") == 'ha_rc_prev_btn') {
3465                $haRcSelector.slick("slickPrev");
3466              }
3467            });
3468          }
3469        }
3470      }
3471    };
3472
3473    elementorFrontend.hooks.addAction('frontend/element_ready/ha-remote-carousel.default', HaRemoteCarousel);
3474    var HaTOC = elementorModules.frontend.handlers.Base.extend({
3475      getDefaultSettings: function getDefaultSettings() {
3476        var elementSettings = this.getElementSettings(),
3477            listWrapperTag = "numbers" === elementSettings.marker_view ? "ol" : "ul";
3478        return {
3479          selectors: {
3480            widgetContainer: ".ha-toc-wrapper",
3481            container: '.elementor:not([data-elementor-type="header"]):not([data-elementor-type="footer"])',
3482            expandButton: ".ha-toc__header",
3483            collapseButton: ".ha-toc__header",
3484            body: ".ha-toc__body",
3485            headerTitle: ".ha-toc__header-title",
3486            scrollTop: ".ha-toc__scroll-to-top--container"
3487          },
3488          classes: {
3489            anchor: "ha-toc-menu-anchor",
3490            listWrapper: "ha-toc__list-wrapper",
3491            listItem: "ha-toc__list-item",
3492            listTextWrapper: "ha-toc__list-item-text-wrapper",
3493            firstLevelListItem: "ha-toc__top-level",
3494            listItemText: "ha-toc__list-item-text",
3495            activeItem: "ha-toc-item-active",
3496            headingAnchor: "ha-toc__heading-anchor",
3497            collapsed: "ha-toc--collapsed"
3498          },
3499          listWrapperTag: listWrapperTag
3500        };
3501      },
3502      getDefaultElements: function getDefaultElements() {
3503        var settings = this.getSettings(),
3504            elementSettings = this.getElementSettings();
3505        return {
3506          $pageContainer: jQuery(elementSettings.container || settings.selectors.container),
3507          $widgetContainer: this.$element.find(settings.selectors.widgetContainer),
3508          $expandButton: this.$element.find(settings.selectors.expandButton),
3509          $collapseButton: this.$element.find(settings.selectors.collapseButton),
3510          $tocBody: this.$element.find(settings.selectors.body),
3511          $listItems: this.$element.find("." + settings.classes.listItem),
3512          $scrollTop: this.$element.find(settings.selectors.scrollTop)
3513        };
3514      },
3515      bindEvents: function bindEvents() {
3516        var $self = this;
3517        var elementSettings = this.getElementSettings();
3518
3519        if (elementSettings.minimize_box) {
3520          this.elements.$expandButton.on("click", function () {
3521            if (!$($self.$element).hasClass($self.getSettings("classes.collapsed"))) {
3522              return $self.collapseBox();
3523            } else {
3524              return $self.expandBox();
3525            }
3526          });
3527        }
3528
3529        if (elementSettings.collapse_subitems) {
3530          this.elements.$listItems.hover(function (event) {
3531            return jQuery(event.target).slideToggle();
3532          });
3533        }
3534
3535        if (elementSettings.sticky_toc_toggle) {
3536          elementorFrontend.elements.$window.on("resize", this.handleStickyToc);
3537        }
3538
3539        if (elementSettings.scroll_to_top_toggle) {
3540          this.elements.$scrollTop.on("click", function () {
3541            $self.scrollToTop();
3542          });
3543        }
3544      },
3545      getHeadings: function getHeadings() {
3546        // Get all headings from document by user-selected tags
3547        var elementSettings = this.getElementSettings(),
3548            tags = elementSettings.headings_by_tags.join(","),
3549            selectors = this.getSettings("selectors"),
3550            excludedSelectors = elementSettings.exclude_headings_by_selector;
3551        return this.elements.$pageContainer.find(tags).not(selectors.headerTitle).filter(function (index, heading) {
3552          return !jQuery(heading).closest(excludedSelectors).length; // Handle excluded selectors if there are any
3553        });
3554      },
3555      addAnchorsBeforeHeadings: function addAnchorsBeforeHeadings() {
3556        var $this = this; // Add an anchor element right before each TOC heading to create anchors for TOC links
3557
3558        var classes = this.getSettings("classes");
3559        this.elements.$headings.before(function (index) {
3560          var anchorLink = $this.getHeadingAnchorLink(index, classes);
3561          return '<span id="' + anchorLink + '" class="' + classes.anchor + ' "></span>';
3562        });
3563      },
3564      activateItem: function activateItem($listItem) {
3565        var classes = this.getSettings("classes");
3566        this.deactivateActiveItem($listItem);
3567        $listItem.addClass(classe
3567s.activeItem);
3568        this.$activeItem = $listItem;
3569
3570        if (!this.getElementSettings("sticky_toc_toggle")) {
3571          //Note:- The "Collapse" option will not work unless you make the Table of Contents sticky.
3572          return;
3573        }
3574
3575        if (!this.getElementSettings("collapse_subitems")) {
3576          return;
3577        }
3578
3579        var $activeList = void 0;
3580
3581        if ($listItem.hasClass(classes.firstLevelListItem)) {
3582          $activeList = $listItem.parent().next();
3583        } else {
3584          $activeList = $listItem.parents("." + classes.listWrapper).eq(-2);
3585        }
3586
3587        if (!$activeList.length) {
3588          delete this.$activeList;
3589          return;
3590        }
3591
3592        this.$activeList = $activeList;
3593        this.$activeList.stop().slideDown();
3594      },
3595      deactivateActiveItem: function deactivateActiveItem($activeToBe) {
3596        if (!this.$activeItem || this.$activeItem.is($activeToBe)) {
3597          return;
3598        }
3599
3600        var _getSettings = this.getSettings(),
3601            classes = _getSettings.classes;
3602
3603        this.$activeItem.removeClass(classes.activeItem);
3604
3605        if (this.$activeList && (!$activeToBe || !this.$activeList[0].contains($activeToBe[0]))) {
3606          this.$activeList.slideUp();
3607        }
3608      },
3609      followAnchor: function followAnchor($element, index) {
3610        var $self = this;
3611        var anchorSelector = $element[0].hash;
3612        var $anchor = void 0;
3613
3614        try {
3615          // `decodeURIComponent` for UTF8 characters in the hash.
3616          $anchor = jQuery(decodeURIComponent(anchorSelector));
3617        } catch (e) {
3618          return;
3619        }
3620
3621        if (0 === index) {
3622          elementorFrontend.waypoint($anchor, function (direction) {
3623            if ($self.itemClicked) {
3624              return;
3625            }
3626
3627            if ("down" === direction) {
3628              $self.activateItem($element);
3629            } else {
3630              $self.deactivateActiveItem();
3631            }
3632          }, {
3633            offset: "bottom-in-view",
3634            triggerOnce: false
3635          });
3636        }
3637
3638        elementorFrontend.waypoint($anchor, function (direction) {
3639          if ($self.itemClicked) {
3640            return;
3641          }
3642
3643          if ("down" === direction) {
3644            $self.activateItem($self.$listItemTexts.eq(index + 1));
3645          } else {
3646            $self.activateItem($element);
3647          }
3648        }, {
3649          offset: 0,
3650          triggerOnce: false
3651        });
3652      },
3653      followAnchors: function followAnchors() {
3654        var $self = this;
3655        this.$listItemTexts.each(function (index, element) {
3656          return $self.followAnchor(jQuery(element), index);
3657        });
3658      },
3659      setOffset: function setOffset($listItem) {
3660        var $this = this;
3661        var settings = this.getSettings();
3662        var list = this.$element.find("." + settings.classes.listItem);
3663        var offset = this.getCurrentDeviceSetting("scroll_offset");
3664        list.each(function () {
3665          $('a', this).on('click', function (e) {
3666            e.preventDefault();
3667            var hash = this.hash;
3668            $('html, body').animate({
3669              scrollTop: $(hash).offset().top - parseInt(offset.size)
3670            }, 800);
3671          });
3672        });
3673      },
3674      populateTOC: function populateTOC() {
3675        var $self = this;
3676        this.listItemPointer = 0;
3677        var elementSettings = this.getElementSettings();
3678
3679        if (elementSettings.custom_style == 'yes') {
3680          this.elements.$widgetContainer.html(this.createSideDot());
3681        } else {
3682          if (elementSettings.hierarchical_view) {
3683            this.createNestedList();
3684          } else {
3685            this.createFlatList();
3686          }
3687        }
3688
3689        this.$listItemTexts = this.$element.find(".ha-toc__list-item-text");
3690        this.$listItemTexts.on("click", this.onListItemClick.bind(this));
3691
3692        if (!elementorFrontend.isEditMode()) {
3693          this.followAnchors();
3694        }
3695
3696        $(window).on('scroll', function () {
3697          if ("window_top" === elementSettings.scroll_to_top_option) {
3698            if ($(window).scrollTop() > 0) {
3699              $self.elements.$scrollTop.show();
3700            } else {
3701              $self.elements.$scrollTop.hide();
3702            }
3703          } else {
3704            var $id = $self.getID().parents('.elementor-widget-wrap');
3705
3706            if ($id.offset().top >= $(window).scrollTop()) {
3707              $self.elements.$scrollTop.hide();
3708            } else {
3709              $self.elements.$scrollTop.show();
3710            }
3711          }
3712        });
3713      },
3714      createNestedList: function createNestedList() {
3715        var $self = this;
3716        this.headingsData.forEach(function (heading, index) {
3717          heading.level = 0;
3718
3719          for (var i = index - 1; i >= 0; i--) {
3720            var currentOrderedItem = $self.headingsData[i];
3721
3722            if (currentOrderedItem.tag <= heading.tag) {
3723              heading.level = currentOrderedItem.level;
3724
3725              if (currentOrderedItem.tag < heading.tag) {
3726                heading.level++;
3727              }
3728
3729              break;
3730            }
3731          }
3732        });
3733        this.elements.$tocBody.html(this.getNestedLevel(0));
3734      },
3735      createFlatList: function createFlatList() {
3736        this.elements.$tocBody.html(this.getNestedLevel());
3737      },
3738      createSideDot: function createSideDot(level) {
3739        var settings = this.getSettings(),
3740            elementSettings = this.getElementSettings(),
3741            icon = this.getElementSettings("icon"),
3742            htmlul = '';
3743
3744        if (elementSettings.custom_style == 'yes') {
3745          htmlul += "<div class=\"".concat(elementSettings.custom_style_list, "\">\n                    <div class=\"hm-toc \">\n                    <ul class=\"hm-toc-items\" style=\"list-style: none;\">\n                        <li>");
3746
3747          if (elementSettings.custom_style_list == 'hm-toc-slide-style') {
3748            htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\"><span>").concat(elementSettings.widget_title, "<span></").concat(elementSettings.html_tag, ">");
3749          } else {
3750            htmlul += "<".concat(elementSettings.html_tag, " class=\"hm-toc-title\">").concat(elementSettings.widget_title, "</").concat(elementSettings.html_tag, ">");
3751          }
3752
3753          htmlul += "<".concat(settings.listWrapperTag, " class=\"hm-toc-items-inner\">");
3754
3755          for (var i = 0; i < this.headingsData.length; i++) {
3756            var list = '';
3757            var currentItemDot = this.headingsData[i];
3758
3759            if (level > currentItemDot.level) {
3760              break;
3761            }
3762
3763            var listItemTextClasses = settings.classes.listItemText;
3764
3765            if (0 === currentItemDot.level) {
3766              // If the current list item is a top level item, give it the first level class
3767              listItemTextClasses += " " + settings.classes.firstLevelListItem;
3768            }
3769
3770            if (level === currentItemDot.level) {
3771              list += "<li class=\"hm-toc-entry ".concat(settings.classes.listItem, "\">");
3772
3773              if ('bullets' === elementSettings.marker_view && icon && elementSettings.custom_style_list == 'hm-toc-slide-style') {
3774                list += "<i class=\"".concat(icon.value, "\"></i>");
3775              }
3776
3777              list += "<a href=\"#".concat(currentItemDot.anchorLink, "\" class=\"").concat(listItemTextClasses, "\"><span>").concat(currentItemDot.text, "</span></a>");
3778              list += "</li>";
3779            }
3780
3781            htmlul += list;
3782          }
3783
3784          htmlul += "</".concat(settings.listWrapperTag, ">");
3785          htmlul += "</li>\n                    </ul>";
3786        }
3787
3788        return htmlul;
3789      },
3790      getNestedLevel: function getNestedLevel(level) {
3791        var settings = this.getSettings(),
3792            elementSettings = this.getElementSettings(),
3793            icon = this.getElementSettings("icon");
3794        var html = ''; // Open new list/nested list
3795
3796        html += "<" + settings.listWrapperTag + ' class="' + settings.classes.listWrapper + '">'; // for each list item, build its markup.
3797
3798        while (this.listItemPointer < this.headingsData.length) {
3799          var currentItem = this.headingsData[this.listItemPointer];
3800          var listItemTextClasses = settings.classes.listItemText;
3801
3802          if (0 === currentItem.level) {
3803            // If the current list item is a top level item, give it the first level class
3804            listItemTextClasses += " " + settings.classes.firstLevelListItem;
3805          }
3806
3807          if (level > currentItem.level) {
3808            break;
3809          }
3810
3811          if (level === currentItem.level) {
3812            html += '<li class="' + settings.classes.listItem + " " + "level-" + level + '">';
3813            html += '<div class="' + settings.classes.listTextWrapper + '">';
3814            var liContent = '<a href="#' + currentItem.anchorLink + '" class="' + listItemTextClasses + '">' + currentItem.text + "</a>"; // If list type is bullets, add the bullet icon as an <i> tag
3815
3816            if ("bullets" === elementSettings.marker_view && icon) {
3817              liContent = '<i class="' + icon.value + '"></i>' + liContent;
3818            }
3819
3820            html += liContent;
3821            html += "</div>";
3822            this.listItemPointer++;
3823            var nextItem = this.headingsData[this.listItemPointer];
3824
3825            if (nextItem && level < nextItem.level) {
3826              // If a new nested list has to be created under the current item,
3827              // this entire method is called recursively (outside the while loop, a list wrapper is created)
3828              html += this.getNestedLevel(nextItem.level);
3829            }
3830
3831            html += "</li>";
3832          }
3833        }
3834
3835        html += "</" + settings.listWrapperTag + ">";
3836        return html;
3837      },
3838      handleNoHeadingsFound: function handleNoHeadingsFound() {
3839        var _messages = 'No headings were found on this page.';
3840
3841        if (elementorFrontend.isEditMode()) {
3842          return this.elements.$tocBody.html(_messages);
3843        }
3844      },
3845      collapseOnInit: function collapseOnInit() {
3846        var $self = this;
3847        var minimizedOn = this.getElementSettings("minimized_on"),
3848            currentDeviceMode = elementorFrontend.getCurrentDeviceMode();
3849
3850        if ("" !== minimizedOn && "array" !== typeof minimizedOn) {
3851          minimizedOn = [minimizedOn];
3852        }
3853
3854        if (0 !== minimizedOn.length && "object" === _typeof(minimizedOn)) {
3855          minimizedOn.forEach(function (value) {
3856            if ("desktop" === value[0] && "desktop" == currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.xxl || "tablet" === value[0] && "tablet" === currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.lg || "mobile" === value[0] && "mobile" === currentDeviceMode && $(window).width() < elementorFrontend.config.breakpoints.md) {
3857              $self.collapseBox();
3858            }
3859          });
3860        }
3861      },
3862      getHeadingAnchorLink: function getHeadingAnchorLink(index, classes) {
3863        var headingID = this.elements.$headings[index].id,
3864            wrapperID = this.elements.$headings[index].closest('.elementor-widget').id;
3865        var anchorLink = '';
3866
3867        if (headingID) {
3868          anchorLink = headingID;
3869        } else if (wrapperID) {
3870          // If the heading itself has an ID, we don't want to overwrite it
3871          anchorLink = wrapperID;
3872        } // If there is no existing ID, use the heading text to create a semantic ID
3873
3874
3875        if (headingID || wrapperID) {
3876          jQuery(this.elements.$headings[index]).data('hasOwnID', true);
3877        } else {
3878          anchorLink = "".concat(classes.headingAnchor, "-").concat(index);
3879        }
3880
3881        return anchorLink;
3882      },
3883      setHeadingsData: function setHeadingsData() {
3884        var $this = this;
3885        this.headingsData = [];
3886        var classes = this.getSettings("classes"); // Create an array for simplifying TOC list creation
3887
3888        this.elements.$headings.each(function (index, element) {
3889          var anchorLink = $this.getHeadingAnchorLink(index, classes);
3890          $this.headingsData.push({
3891            tag: +element.nodeName.slice(1),
3892            text: element.textContent,
3893            anchorLink: anchorLink
3894          });
3895        });
3896      },
3897      run: function run() {
3898        var elementSettings = this.getElementSettings();
3899        this.elements.$headings = this.getHeadings();
3900
3901        if (!this.elements.$headings.length) {
3902          return this.handleNoHeadingsFound();
3903        }
3904
3905        this.setHeadingsData();
3906
3907        if (!elementorFrontend.isEditMode()) {
3908          this.addAnchorsBeforeHeadings();
3909        }
3910
3911        this.populateTOC();
3912
3913        if (elementSettings.minimize_box) {
3914          this.collapseOnInit();
3915        }
3916
3917        if (elementSettings.sticky_toc_toggle) {
3918          this.handleStickyToc();
3919        }
3920
3921        if ("" !== elementSettings.scroll_offset.size) {
3922          this.setOffset();
3923        }
3924      },
3925      expandBox: function expandBox() {
3926        var boxHeight = this.getCurrentDeviceSetting("min_height");
3927        this.$element.removeClass(this.getSettings("classes.collapsed"));
3928        this.elements.$tocBody.slideDown(); // return container to the full height in case a min-height is defined by the user
3929
3930        this.elements.$widgetContainer.css("min-height", boxHeight.size + boxHeight.unit);
3931      },
3932      collapseBox: function collapseBox() {
3933        this.$element.addClass(this.getSettings("classes.collapsed"));
3934        this.elements.$tocBody.slideUp(); // close container in case a min-height is defined by the user
3935
3936        this.elements.$widgetContainer.css("min-height", "0px");
3937      },
3938      onInit: function onInit() {
3939        var $self = this;
3940        this.initElements();
3941        this.bindEvents();
3942        jQuery(document).ready(function () {
3943          $self.run();
3944        });
3945      },
3946      onListItemClick: function onListItemClick(event) {
3947        var $self = this;
3948        this.itemClicked = true;
3949        setTimeout(function () {
3950          return $self.itemClicked = false;
3951        }, 2000);
3952        var $clickedItem = jQuery(event.target),
3953            $list = $clickedItem.parent().next(),
3954            collapseNestedList = this.getElementSettings("collapse_subitems");
3955
3956        if ("SPAN" == $clickedItem[0].tagName && 'yes' == this.getElementSettings("custom_style")) {
3957          $clickedItem = jQuery(event.currentTarget);
3958        }
3959
3960        var listIsActive = void 0;
3961
3962        if (collapseNestedList && $clickedItem.hasClass(this.getSettings("classes.firstLevelListItem"))) {
3963          if ($list.is(":visible")) {
3964            listIsActive = true;
3965          }
3966        }
3967
3968        this.activateItem($clickedItem);
3969
3970        if (collapseNestedList && listIsActive) {
3971          $list.slideUp();
3972        }
3973      },
3974      handleStickyToc: function handleStickyToc() {
3975        var elementSettings = this.getElementSettings();
3976        var currentDeviceMode = elementorFrontend.getCurrentDeviceMode();
3977        var $devices = elementSettings.sticky_toc_disable_on;
3978        var target = this.getID();
3979        var type = elementSettings.sticky_toc_type;
3980
3981        if ("in-place" === type) {
3982          var parentWidth = target.parent().parent().outerWidth();
3983          target.css("width", parentWidth);
3984        } else if ("custom-position" === type) {
3985          var parentWidth = target.parent().parent().outerWidth();
3986          target.css("width", parentWidth);
3987        }
3988
3989        if (-1 == $.inArray(currentDeviceMode, $devices)) {
3990          target.removeClass('floating-toc');
3991          $(window).off('scroll', this.stickyScroll);
3992          return;
3993        }
3994
3995        $(window).on('scroll', $.proxy(this.stickyScroll, this));
3996      },
3997      stickyScroll: function stickyScroll() {
3998        var target = this.getID();
3999        var elementSettings = this.getElementSettings();
4000        var item = document.querySelector(".ha-table-of-contents");
4001        var bound, tocHeight;
4002        bound = item.getBoundingClientRect();
4003        tocHeight = target.outerHeight();
4004
4005        if (target.hasClass("floating-toc")) {
4006          target.parent().parent().css("height", tocHeight);
4007        } else {
4008          target.parent().parent().css("height", '');
4009        }
4010
4011        if (bound.y + bound.height / 2 < 0) {
4012          if (target.hasClass('floating-toc')) {
4013            return;
4014          }
4015
4016          target.addClass("floating-toc");
4017        } else {
4018          if (!target.hasClass('floating-toc')) {
4019            return;
4020          }
4021
4022          target.removeClass("floating-toc");
4023        }
4024      },
4025      scrollToTop: function scrollToTop() {
4026        var $self = this;
4027        var scrollTo = this.getElementSettings("scroll_to_top_option");
4028
4029        if ("window_top" === scrollTo) {
4030          $("html, body").animate({
4031            scrollTop: 0
4032          }, 250);
4033        } else {
4034          var $id = this.getID().parents('.ha-table-of-contents');
4035          $("html, body").animate({
4036            scrollTop: $($id).offset().top - 60
4037          }, 1000);
4038        }
4039      },
4040      getID: function getID() {
4041        return $("#ha-toc-" + this.$element[0].attributes["data-id"].nodeValue);
4042      }
4043    });
4044    elementorFrontend.hooks.addAction("frontend/element_ready/ha-table-of-contents.default", function ($scope) {
4045      elementorFrontend.elementsHandler.addHandler(HaTOC, {
4046        $element: $scope
4047      });
4048    }); //creativeSlider
4049
4050    var HaCreativeSlider = function HaCreativeSlider($scope) {
4051      var $rcContainer = $scope.find('.ha-creative-slider-container');
4052
4053      if ($rcContainer) {
4054        var $haCsWidth = window.innerWidth;
4055        var $haCsNextSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.ha_cs_mobile_next') : $rcContainer.find('.ha_cc_next_wrapper');
4056        var $haCsPrevSelector = parseInt($haCsWidth) <= 767 ? $rcContainer.find('.ha_cs_mobile_prev') : $rcContainer.find('.ha_cc_prev_wrapper');
4057        var csTextItemDelay = parseInt($haCsWidth) <= 767 ? 40 : 30;
4058        var csImageItemDelay = 40;
4059        var csPrevItemsOwl = $rcContainer.find('.ha_cc_prev_items');
4060        var csTextItemsOwl = $rcContainer.find('.ha_cc_text_items');
4061        var csImageItemsOwl = $rcContainer.find('.ha_cc_inner_image_items');
4062        var csNextItemsOwl = $rcContainer.find('.ha_cc_next_items');
4063        var csPrevNavOptions = {
4064          loop: true,
4065          dots: false,
4066          nav: false,
4067          items: 1,
4068          autoplay: false,
4069          smartSpeed: 500,
4070          touchDrag: false,
4071          mouseDrag: false,
4072          rewind: true,
4073          startPosition: -1
4074        };
4075        var csNextNavOptions = {
4076          loop: true,
4077          dots: false,
4078          nav: false,
4079          items: 1,
4080          autoplay: false,
4081          smartSpeed: 500,
4082          touchDrag: false,
4083          mouseDrag: false,
4084          rewind: true,
4085          startPosition: 1
4086        };
4087        var csGeneralOptions = {
4088          loop: true,
4089          dots: false,
4090          nav: false,
4091          items: 1,
4092          autoplay: false,
4093          smartSpeed: 1000,
4094          touchDrag: false,
4095          mouseDrag: false,
4096          singleItem: true,
4097          animateOut: 'fadeOutRight',
4098          animateIn: 'fadeInLeft',
4099          rewind: true
4100        };
4101      }
4102
4103      csPrevItemsOwl.owlCarousel(csPrevNavOptions);
4104      csNextItemsOwl.owlCarousel(csNextNavOptions);
4105      csTextItemsOwl.owlCarousel(csGeneralOptions);
4106      csImageItemsOwl.owlCarousel(csGeneralOptions);
4107      window.parent.addEventListener('message', function (e) {
4108        if ('ha_cs_reinit' == e.data) {
4109          csTextItemsOwl.owlCarousel('refresh');
4110          csImageItemsOwl.owlCarousel('refresh');
4111        }
4112      });
4113      $($haCsPrevSelector).click(function (e) {
4114        e.preventDefault();
4115        csPrevItemsOwl.trigger('prev.owl.carousel');
4116        csNextItemsOwl.trigger('prev.owl.carousel');
4117        setTimeout(function () {
4118          csTextItemsOwl.trigger('prev.owl.carousel');
4119        }, csTextItemDelay);
4120        setTimeout(function () {
4121          csImageItemsOwl.trigger('prev.owl.carousel');
4122        }, csTextItemDelay + csImageItemDelay);
4123      });
4124      $($haCsNextSelector).click(function (e) {
4125        e.preventDefault();
4126        csPrevItemsOwl.trigger('next.owl.carousel');
4127        csNextItemsOwl.trigger('next.owl.carousel');
4128        setTimeout(function () {
4129          csTextItemsOwl.trigger('next.owl.carousel');
4130        }, csTextItemDelay);
4131        setTimeout(function () {
4132          csImageItemsOwl.trigger('next.owl.carousel');
4133        }, csTextItemDelay + csImageItemDelay);
4134      });
4135    };
4136
4137    elementorFrontend.hooks.addAction('frontend/element_ready/ha-creative-slider.default', HaCreativeSlider);
4138  });
4139})(jQuery, Happy, window);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.