PageSourceSearch

https://foxaria.com/wp-content/plugins/happy-elementor-addons-pro/assets/js/happy-addons-pro.js?ver=2.16.3

js foxaria.com collected 2026-10-09 03:01:48 UTC 166,491 bytes, 4,139 lines download raw bytes

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