HOME


Mini Shell 1.0
DIR: /home/otwalrll/karismamodernkitchen.com/wp-content/plugins/martfury-addons/assets/js/
Upload File :
Current File : /home/otwalrll/karismamodernkitchen.com/wp-content/plugins/martfury-addons/assets/js/elementor.js
(function ($) {
	'use strict';

	/**
	 * Product Deals Carousel
	 */
	var productDealsCarouselHandler = function ($scope, $) {
		$scope.find('.mf-elementor-product-deals-carousel').each(function () {
			var $selector = $(this),
				elementSettings = $selector.data('settings'),
				slidesToShow = parseInt(elementSettings.slidesToShow),
				slidesToScroll = parseInt(elementSettings.slidesToScroll),
				slidesToShow_tablet = parseInt(elementSettings.slidesToShow_tablet),
				slidesToScroll_tablet = parseInt(elementSettings.slidesToScroll_tablet),
				slidesToShow_mobile = parseInt(elementSettings.slidesToShow_mobile),
				slidesToScroll_mobile = parseInt(elementSettings.slidesToScroll_mobile);

			$selector.find('ul.products').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: slidesToShow,
				slidesToScroll: slidesToScroll,
				arrows: true,
				dots: true,
				infinite: 'yes' === elementSettings.infinite,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				responsive: [
					{
						breakpoint: 1366,
						settings: {
							slidesToShow: slidesToShow > 5 ? 5 : slidesToShow,
							slidesToScroll: slidesToScroll > 5 ? 5 : slidesToScroll
						}
					},
					{
						breakpoint: 1200,
						settings: {
							slidesToShow: slidesToShow > 4 ? 4 : slidesToShow,
							slidesToScroll: slidesToScroll > 4 ? 4 : slidesToScroll
						},
					},
					{
						breakpoint: 992,
						settings: {
							slidesToShow: slidesToShow_tablet,
							slidesToScroll: slidesToScroll_tablet,
						}
					},
					{
						breakpoint: 767,
						settings: {
							slidesToShow: 2,
							slidesToScroll: slidesToScroll > 2 ? 2 : slidesToScroll
						},
					},
					{
						breakpoint: 480,
						settings: {
							slidesToShow:  slidesToShow_mobile,
							slidesToScroll: slidesToScroll_mobile,
						},
					}
				]
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});
	};

	/**
	 * Product Deals Carousel 2
	 */
	var productDealsCarousel2Handler = function ($scope, $) {
		$scope.find('.mf-product-deals-carousel-2').each(function () {
			var $selector = $(this),
				elementSettings = $selector.data('settings'),
				$gallery = $selector.find('.woocommerce-product-gallery');

			$selector.find('ul.products').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: 1,
				slidesToScroll: 1,
				arrows: true,
				dots: false,
				infinite: 'yes' === elementSettings.infinite,
				prevArrow: $selector.find('.slick-prev-arrow'),
				nextArrow: $selector.find('.slick-next-arrow'),
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed)
			});

			var options = {
				selector: '.woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image',
				allowOneSlide: false,
				animation: "slide",
				animationLoop: false,
				animationSpeed: 500,
				controlNav: "thumbnails",
				directionNav: false,
				rtl: false,
				slideshow: false,
				smoothHeight: true,
				start: function () {
					$gallery.css('opacity', 1);
				},
			};

			$gallery.flexslider(options);

			$selector.find('.deal-expire-countdown').each(function () {
				$(document).trigger('deal_expire_countdown', $(this));
			});

			$gallery.each(function () {
				var $el = $(this);
				$el.imagesLoaded(function () {

					var $thumbnail = $el.find('.flex-control-thumbs');

					setTimeout(function () {
						if ($thumbnail.length < 1) {
							return;
						}
						var columns = $el.data('columns');
						var count = $thumbnail.find('li').length;
						if (count > columns) {
							$thumbnail.not('.slick-initialized').slick({
								slidesToShow: columns,
								slidesToScroll: 1,
								focusOnSelect: true,
								vertical: true,
								infinite: false,
								prevArrow: '<span class="icon-chevron-up slick-prev-arrow"></span>',
								nextArrow: '<span class="icon-chevron-down slick-next-arrow"></span>',
								responsive: [
									{
										breakpoint: 768,
										settings: {
											slidesToShow: 4
										}
									},
									{
										breakpoint: 480,
										settings: {
											slidesToShow: 3
										}
									}
								]
							});
						} else {
							$thumbnail.addClass('no-slick');
						}
					}, 100);

				});
			});

			$selector.find('.woocommerce-product-gallery__image').on('click', function () {
				var href = $(this).closest('div.product').find('.product-title > a').attr('href');

				location.href = href;
				return false;
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});

	};

	/**
	 * LazyLoad
	 */
	var lazyLoadHandler = function ($els) {
		if ($els.length === 0) {
			$els = $('body');
		}
		$els.find('img.lazy').lazyload({
			load: function () {
				$(this).removeClass('lazy');
			}
		});
	};

	var getProductsCarouselHandler = function ($els) {
		var $selector = $els,
			elementSettings = $selector.data('settings'),
			slidesToShow = parseInt(elementSettings.slidesToShow),
			slidesToScroll = parseInt(elementSettings.slidesToScroll),
			slidesToShow_tablet = parseInt(elementSettings.slidesToShow_tablet),
			slidesToScroll_tablet = parseInt(elementSettings.slidesToScroll_tablet),
			slidesToShow_mobile = parseInt(elementSettings.slidesToShow_mobile),
			slidesToScroll_mobile = parseInt(elementSettings.slidesToScroll_mobile);
		$selector.find('ul.products').not('.slick-initialized').slick({
			rtl: $('body').hasClass('rtl'),
			slidesToShow: slidesToShow,
			slidesToScroll: slidesToScroll,
			arrows: true,
			dots: true,
			infinite: 'yes' === elementSettings.infinite,
			prevArrow: elementSettings.arrows_background == 'yes' ? '<span class="icon-chevron-left slick-prev-arrow"><span class="mf-arrow-bg"><svg xmlns="http://www.w3.org/2000/svg" width="28" height="123" viewBox="0 0 28 123"><path fill="currentColor" fill-rule="evenodd" d="M135,1763s1.945-18.7,11.511-28.64c14.019-14.57,16.641-21.14,16.481-33.19-0.3-22.74-27.992-30.59-27.992-57.81V1763Z" transform="translate(-135 -1640)"/> </svg></span></span>' : '<span class="icon-chevron-left slick-prev-arrow"></span>',
			nextArrow:  elementSettings.arrows_background == 'yes' ? '<span class="icon-chevron-right slick-next-arrow"><span class="mf-arrow-bg"><svg xmlns="http://www.w3.org/2000/svg" width="28" height="123" viewBox="0 0 28 123"><path fill="currentColor" fill-rule="evenodd" d="M1785,1763s-1.94-18.7-11.51-28.64c-14.02-14.57-16.64-21.14-16.48-33.19,0.3-22.74,27.99-30.59,27.99-57.81V1763Z" transform="translate(-1757 -1640)"/></svg></span></span>' : '<span class="icon-chevron-right slick-next-arrow"></span>',
			autoplay: 'yes' === elementSettings.autoplay,
			autoplaySpeed: parseInt(elementSettings.autoplay_speed),
			speed: parseInt(elementSettings.speed),
			responsive: [
				{
					breakpoint: 1366,
					settings: {
						slidesToShow: slidesToShow > 5 ? 5 : slidesToShow,
						slidesToScroll: slidesToScroll > 5 ? 5 : slidesToScroll
					}
				},
				{
					breakpoint: 1200,
					settings: {
						slidesToShow: slidesToShow > 4 ? 4 : slidesToShow,
						slidesToScroll: slidesToScroll > 4 ? 4 : slidesToScroll
					}
				},
				{
					breakpoint: 992,
					settings: {
						slidesToShow: slidesToShow_tablet > 3 ? 3 : slidesToShow_tablet,
						slidesToScroll: slidesToScroll_tablet > 3 ? 3 : slidesToScroll_tablet
					}
				},
				{
					breakpoint: 767,
					settings: {
						slidesToShow: slidesToShow_mobile > 2 ? 2 : slidesToShow_mobile,
						slidesToScroll: slidesToScroll_mobile > 2 ? 2 : slidesToScroll_mobile
					}
				}
			]
		});

		$selector.on('afterChange', function () {
			lazyLoadHandler($selector);
		});
	};

	/**
	 * CountDown
	 */
	var countDownHandler = function ($scope, $) {
		$scope.find('.martfury-countdown').mf_countdown();
	};


	/**
	 * Catagory Tabs Carousel
	 */
	var categoryTabsCarouselHandler = function ($scope, $) {
		$scope.find('.mf-category-tabs').each(function () {
			var $selector = $(this);

			$selector.find('ul.tabs-nav').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: 8,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				infinite: false,
				responsive: [
					{
						breakpoint: 1200,
						settings: {
							slidesToShow: 6,
							slidesToScroll: 6
						}
					},
					{
						breakpoint: 992,
						settings: {
							slidesToShow: 4,
							slidesToScroll: 4
						}
					},
					{
						breakpoint: 480,
						settings: {
							slidesToShow: 2,
							slidesToScroll: 2
						}
					}
				]
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});
		});
	};

	/**
	 * category Tabs
	 */
	var categoryTabsHandler = function ($scope, $) {
		$scope.find('.martfury-tabs').mrtabs();
	};

	/**
	 * Product Carousel
	 */
	var productsListCarouselHandler = function ($scope, $) {
		var $selector = $scope.find('.mf-products-list-carousel');
		getProductsCarouselHandler($selector);
	};

	/**
	 * Product Carousel
	 */
	var productsCarouselHandler = function ($scope, $) {
		var $selector = $scope.find('.mf-products-carousel');

		if (!$selector.hasClass('no-infinite')) {
			productCarouselInfinite($selector);
		} else {
			getProductsCarouselHandler($selector);
		}

		function productCarouselInfinite($selector) {

			$(window).on('scroll', function () {

				if ($selector.hasClass('no-infinite')) {
					return;
				}

				var offSet = 0;

				if ($selector.is(':in-viewport(' + offSet + ')')) {
					getProductCarouselAjax($selector);
					$selector.addClass('no-infinite');
				}

			}).trigger('scroll');
		}

		function getProductCarouselAjax($selector) {

			if (typeof mf_elementor_data === 'undefined') {
				return;
			}

			var dataSettings = $selector.find('.mf-products-carousel-loading').data('settings'),
				ajax_url = mf_elementor_data.ajax_url.toString().replace('%%endpoint%%', 'mf_elementor_get_elements');


			$.ajax({
				url: ajax_url,
				dataType: 'json',
				method: 'post',
				data: {
					params: JSON.stringify(dataSettings),
					element: 'productsCarousel'
				},
				success: function (response) {
					$selector.html(response.data);
					getProductsCarouselHandler($selector);
					lazyLoadHandler($selector);
					$(document.body).trigger('martfury_get_products_ajax_success');
				}
			});
		}

	};

	var recentlyViewedProductsCarouselHandler = function ($scope, $) {
		$scope.find('.mf-product-recently-viewed-carousel').each(function () {
			var $selector = $(this),
				elementSettings = $selector.data('settings'),
				slidesToShow = parseInt(elementSettings.slidesToShow),
				slidesToScroll = parseInt(elementSettings.slidesToScroll);

			$selector.find( 'ul.products' ).not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: slidesToShow,
				slidesToScroll: slidesToScroll,
				arrows: true,
				dots: true,
				infinite: 'yes' === elementSettings.infinite,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				speed: parseInt(elementSettings.speed),
				responsive: [
					{
						breakpoint: 1600,
						settings: {
							slidesToShow: slidesToShow > 5 ? 5 : slidesToShow,
							slidesToScroll: slidesToScroll > 5 ? 5 : slidesToScroll
						}
					},
					{
						breakpoint: 1366,
						settings: {
							slidesToShow: slidesToShow > 4 ? 4 : slidesToShow,
							slidesToScroll: slidesToScroll > 4 ? 4 : slidesToScroll
						}
					},
					{
						breakpoint: 1200,
						settings: {
							slidesToShow: slidesToShow > 3 ? 3 : slidesToShow,
							slidesToScroll: slidesToScroll > 3 ? 3 : slidesToScroll
						}
					},
					{
						breakpoint: 992,
						settings: {
							slidesToShow: slidesToShow > 2 ? 2 : slidesToShow,
							slidesToScroll: slidesToScroll > 2 ? 2 : slidesToScroll
						}
					},
					{
						breakpoint: 767,
						settings: {
							slidesToShow: slidesToShow > 2 ? 2 : slidesToShow,
							slidesToScroll: slidesToScroll > 2 ? 2 : slidesToScroll
						}
					},
					{
						breakpoint: 480,
						settings: {
							slidesToShow: 1,
							slidesToScroll: 1
						}
					}
				]
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});
	};

	/**
	 * Products Grid
	 */

	var productsGridHandler = function ($scope, $) {
		var $selector = $scope.find('.mf-products-grid');

		if (!$selector.hasClass('no-infinite')) {
			productGridInfinite($selector);
		}

		function productGridInfinite($selector) {

			$(window).on('scroll', function () {

				if ($selector.hasClass('no-infinite')) {
					return;
				}

				var offSet = 0;

				if ($selector.is(':in-viewport(' + offSet + ')')) {
					getProductGridAjax($selector);
					$selector.addClass('no-infinite');
				}

			}).trigger('scroll');
		}

		function getProductGridAjax($selector) {

			if (typeof mf_elementor_data === 'undefined') {
				return;
			}

			var dataSettings = $selector.find('.mf-products-grid-loading').data('settings'),
				ajax_url = mf_elementor_data.ajax_url.toString().replace('%%endpoint%%', 'mf_elementor_get_elements');


			$.ajax({
				url: ajax_url,
				dataType: 'json',
				method: 'post',
				data: {
					params: JSON.stringify(dataSettings),
					element: 'productsGrid'
				},
				success: function (response) {
					$selector.html(response.data);
					lazyLoadHandler($selector);
					$(document.body).trigger('martfury_get_products_ajax_success');
				}
			});
		}
	};

	/**
	 *    Load Brands
	 */
	var productBrandsHandler = function ($scope, $) {

		// Product Brands Carousel
		var $selector = $scope.find('.mf-elementor-brands-grid');
		getProductBrandCarousel($selector);

		// Brands Load More
		productBrandsInfinite($selector);

		function productBrandsInfinite($selector) {

			$(window).on('scroll', function () {

				var offSet = 0;

				if ($selector.is(':in-viewport(' + offSet + ')')) {
					$selector.find('.navigation-number a').trigger('click');
				}

			}).trigger('scroll');

			$selector.on('click', '.navigation-number a', function (e) {
				e.preventDefault();

				var $el = $(this);

				if ($el.data('requestRunning')) {
					return;
				}

				$el.data('requestRunning', true);

				var $pagination = $el.closest('.navigation-number'),
					$products = $pagination.prev('.product-brands');

				$el.addClass('loading');

				$.get(
					$el.attr('href'),
					function (response) {
						var $wrapper = $(response).find('.mf-elementor-brands-grid'),
							content = $wrapper.find('.product-brands').children('.brand-item-wrapper'),
							$pagination_html = $wrapper.find('.navigation-number').html();

						$pagination.html($pagination_html);

						$products.append(content);

						lazyLoadHandler(content);

						getProductBrandCarousel(content.closest('.mf-elementor-brands-grid'));

						$pagination.find('a')
							.data('requestRunning', false);

						$el.removeClass('loading');

					}
				);
			});
		}

		function getProductBrandCarousel($selector) {
			var elementSettings = $selector.data('settings'),
				slidesToShow = parseInt(elementSettings.slidesToShow),
				slidesToScroll = parseInt(elementSettings.slidesToScroll);

			$selector.find('ul.products').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: slidesToShow,
				slidesToScroll: slidesToScroll,
				arrows: true,
				dots: false,
				infinite: 'yes' === elementSettings.infinite,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				speed: parseInt(elementSettings.speed),
				responsive: [
					{
						breakpoint: 992,
						settings: {
							slidesToShow: slidesToShow > 2 ? 2 : slidesToShow,
							slidesToScroll: slidesToScroll > 2 ? 2 : slidesToScroll
						}
					},
					{
						breakpoint: 480,
						settings: {
							slidesToShow: slidesToShow > 1 ? 1 : slidesToShow,
							slidesToScroll: slidesToScroll > 1 ? 1 : slidesToScroll
						}
					}
				]
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});
		}
	};

	var brandsImagesCarouselHandler = function ($scope, $) {
		var $selector = $scope.find('.elementor-brand-images-carousel');

		var elementSettings = $selector.data('settings'),
			slidesToShow = parseInt(elementSettings.slidesToShow),
			slidesToScroll = parseInt(elementSettings.slidesToScroll);

		$selector.find('.images-list').not('.slick-initialized').slick({
			rtl: $('body').hasClass('rtl'),
			slidesToShow: slidesToShow,
			slidesToScroll: slidesToScroll,
			arrows: true,
			dots: false,
			infinite: 'yes' === elementSettings.infinite,
			prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
			nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
			autoplay: 'yes' === elementSettings.autoplay,
			autoplaySpeed: parseInt(elementSettings.autoplay_speed),
			speed: parseInt(elementSettings.speed),
			responsive: [
				{
					breakpoint: 992,
					settings: {
						slidesToShow: slidesToShow > 4 ? 4 : slidesToShow,
						slidesToScroll: slidesToScroll > 4 ? 4 : slidesToScroll
					}
				},
				{
					breakpoint: 800,
					settings: {
						slidesToShow: slidesToShow > 3 ? 3 : slidesToShow,
						slidesToScroll: slidesToScroll > 3 ? 3 : slidesToScroll
					}
				},
				{
					breakpoint: 600,
					settings: {
						slidesToShow: slidesToShow > 2 ? 2 : slidesToShow,
						slidesToScroll: slidesToScroll > 2 ? 2 : slidesToScroll
					}
				},
				{
					breakpoint: 400,
					settings: {
						slidesToShow: slidesToShow > 1 ? 1 : slidesToShow,
						slidesToScroll: slidesToScroll > 1 ? 1 : slidesToScroll
					}
				}
			]
		});

		$selector.on('afterChange', function () {
			lazyLoadHandler($selector);
		});
	}

	/**
	 * Product Tabs Carousel
	 */
	var productTabsCarouselHandler = function ($scope, $) {

		var $selector = $scope.find('.mf-products-tabs-carousel');

		if (!$selector.hasClass('no-infinite')) {
			productTabsCarouselInfinite($selector);
		} else {
			getProductsCarouselHandler($selector);
			productTabsActive($selector);

			$selector.find('.tabs-nav').on('click', 'a', function (e) {
				e.preventDefault();
				getProductsTabsAJAXHandler($(this), $selector, true);
			});
		}

		function productTabsCarouselInfinite($selector) {

			$(window).on('scroll', function () {

				if ($selector.hasClass('no-infinite')) {
					return;
				}

				var offSet = 0;

				if ($selector.is(':in-viewport(' + offSet + ')')) {
					getProductTabsCarouselAjax($selector);
					$selector.addClass('no-infinite');
				}

			}).trigger('scroll');
		}

		function getProductTabsCarouselAjax($selector) {

			if (typeof mf_elementor_data === 'undefined') {
				return;
			}

			var dataSettings = $selector.find('.mf-products-tabs-loading').data('settings'),
				ajax_url = mf_elementor_data.ajax_url.toString().replace('%%endpoint%%', 'mf_elementor_get_elements');


			$.ajax({
				url: ajax_url,
				dataType: 'json',
				method: 'post',
				data: {
					params: JSON.stringify(dataSettings),
					element: 'productsTabsCarousel'
				},
				success: function (response) {
					$selector.html(response.data);
					getProductsCarouselHandler($selector);
					lazyLoadHandler($selector);
					productTabsActive($selector);
					$(document.body).trigger('martfury_get_products_ajax_success');
				}
			});

			$(document.body).on('martfury_get_products_ajax_success', function () {
				$selector.find('.slick-slider').slick('setPosition');
			});
		}
	};

	var productTabsActive = function ($selector) {
		$selector.find('.tabs-nav').on('click', 'a', function (e) {
			e.preventDefault();
			var $this = $(this),
				currentTab = $this.data('href');

			if ($this.hasClass('active')) {
				return;
			}

			$selector.find('.tabs-nav a').removeClass('active');
			$this.addClass('active');
			$selector.find('.tabs-panel').removeClass('active');
			$selector.find('.tabs-' + currentTab).addClass('active');
			$selector.find('.slick-slider').slick('setPosition');
			lazyLoadHandler($selector.find('.tabs-' + currentTab));
		});
	};


	/**
	 * Product Tabs Grid
	 */
	var productTabsGridHandler = function ($scope, $) {
		var $selector = $scope.find('.mf-products-tabs-grid');

		if (!$selector.hasClass('no-infinite')) {
			productTabsGridInfinite($selector);
		} else {
			productTabsActive($selector);
			$selector.find('.tabs-nav').on('click', 'a', function (e) {
				e.preventDefault();
				getProductsTabsAJAXHandler($(this), $selector, false);
			});
		}

		function productTabsGridInfinite($selector) {

			$(window).on('scroll', function () {

				if ($selector.hasClass('no-infinite')) {
					return;
				}

				var offSet = 0;

				if ($selector.is(':in-viewport(' + offSet + ')')) {
					getProductTabsGridAjax($selector);
					$selector.addClass('no-infinite');
				}

			}).trigger('scroll');
		}

		function getProductTabsGridAjax($selector) {

			if (typeof mf_elementor_data === 'undefined') {
				return;
			}

			var dataSettings = $selector.find('.mf-products-tabs-loading').data('settings'),
				ajax_url = mf_elementor_data.ajax_url.toString().replace('%%endpoint%%', 'mf_elementor_get_elements');


			$.ajax({
				url: ajax_url,
				dataType: 'json',
				method: 'post',
				data: {
					params: JSON.stringify(dataSettings),
					element: 'productsTabsGrid'
				},
				success: function (response) {
					$selector.html(response.data);
					lazyLoadHandler($selector);
					productTabsActive($selector);
					$(document.body).trigger('martfury_get_products_ajax_success');
				}
			});
		}


	};


	/**
	 * Get Product AJAX
	 */
	var getProductsTabsAJAXHandler = function ($el, $tabs, carousel) {

		if (typeof mf_elementor_data === 'undefined') {
			return;
		}

		var tab = $el.data('href'),
			$content = $tabs.find('.tabs-' + tab);

		if ($content.hasClass('tab-loaded')) {
			return;
		}

		var data = {},
			elementSettings = $content.data('settings'),
			ajax_url = mf_elementor_data.ajax_url.toString().replace('%%endpoint%%', 'mf_elementor_load_products');


		$.each(elementSettings, function (key, value) {
			data[key] = value;
		});

		$.post(
			ajax_url,
			data,
			function (response) {
				if (!response) {
					return;
				}
				$content.html(response.data);
				if (carousel === true) {
					getProductsCarouselHandler($content.closest('.mf-products-tabs'));
				}
				lazyLoadHandler($content);
				$content.addClass('tab-loaded');
				$(document.body).trigger('martfury_get_products_ajax_success');
			}
		);
	};

	/**
	 * Testimonials Sliders
	 */
	var testimonialSlidesHandler = function ($scope, $) {
		$scope.find('.mf-elementor-testimonial-slides').each(function () {
			var $selector = $(this),
				$arrow_wrapper = $(this).find('.arrow-wrapper'),
				elementSettings = $selector.data('settings');

			var options = {
				rtl: $('body').hasClass('rtl'),
				slidesToShow: 2,
				arrows: true,
				dots: true,
				infinite: 'yes' === elementSettings.infinite,
				prevArrow: '<div class="mf-left-arrow"><i class="icon-chevron-left"></i></div>',
				nextArrow: '<div class="mf-right-arrow"><i class="icon-chevron-right"></i></div>',
				appendArrows: $arrow_wrapper,
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				speed: parseInt(elementSettings.speed),
				responsive: [
					{
						breakpoint: 480,
						settings: {
							slidesToShow: 1,
						}
					}
				]
			};

			$selector.find('.testimonial-list').not('.slick-initialized').slick(options);

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});
	};

	/**
	 * Testimonials Sliders
	 */
	var testimonialSlides2Handler = function ($scope, $) {
		$scope.find('.mf-elementor-testimonial-slides-2').each(function () {
			var $selector = $(this),
				elementSettings = $selector.data('settings');

			var options = {
				rtl: $('body').hasClass('rtl'),
				slidesToShow: 1,
				arrows: false,
				dots: true,
				infinite: 'yes' === elementSettings.infinite,
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				speed: parseInt(elementSettings.speed),
			};

			$selector.find('.testimonial-list').not('.slick-initialized').slick(options);

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});
	};

	/**
	 * Partner Sliders
	 */
	var partnerSlidesHandler = function ($scope, $) {
		$scope.find('.martfury-partner-carousel').each(function () {
			var $selector = $(this),
				elementSettings = $selector.data('settings');

			$selector.find('.list-item').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: elementSettings.columns,
				infinite: false,
				arrows: false,
				dots: false,
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				responsive: [
					{
						breakpoint: 1200,
						settings: {
							slidesToShow: parseInt(elementSettings.autoplay_speed) > 4 ? 4 : elementSettings.autoplay_speed
						}
					},
					{
						breakpoint: 768,
						settings: {
							slidesToShow: 3
						}
					},
					{
						breakpoint: 480,
						settings: {
							slidesToShow: 2
						}
					}
				]
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});
	};

	var imagesCarouselHandler = function ($scope, $) {
		$scope.find('.mf-images-gallery--slide').each(function () {
			var $selector = $(this),
				elementSettings = $selector.data('settings'),
				slidesToShow = parseInt(elementSettings.slidesToShow),
				slidesToScroll = parseInt(elementSettings.slidesToScroll);

			$selector.find('.images-list').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: slidesToShow,
				slidesToScroll: slidesToScroll,
				arrows: false,
				dots: 'yes' === elementSettings.dots,
				infinite: 'yes' === elementSettings.infinite,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				speed: parseInt(elementSettings.speed),
				responsive: [
					{
						breakpoint: 1200,
						settings: {
							slidesToShow: slidesToShow > 4 ? 4 : slidesToShow,
							slidesToScroll: slidesToScroll > 4 ? 4 : slidesToScroll
						}
					},
					{
						breakpoint: 992,
						settings: {
							slidesToShow: slidesToShow > 3 ? 3 : slidesToShow,
							slidesToScroll: slidesToScroll > 3 ? 3 : slidesToScroll
						}
					},
					{
						breakpoint: 767,
						settings: {
							slidesToShow: slidesToShow > 2 ? 2 : slidesToShow,
							slidesToScroll: slidesToScroll > 2 ? 2 : slidesToScroll
						}
					}
				]
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});
	};

	var imageBoxCarouselHandler = function ($scope, $) {
		$scope.find('.martfury-image-box-carousel__wrapper').each(function () {
			var $selector = $(this),
				elementSettings = $selector.data('settings'),
				slidesToShow = parseInt(elementSettings.slidesToShow),
				slidesToScroll = parseInt(elementSettings.slidesToScroll);

			$selector.not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: slidesToShow,
				slidesToScroll: slidesToScroll,
				arrows: true,
				dots: true,
				infinite: 'yes' === elementSettings.infinite,
				prevArrow: $scope.find('.slick-prev-arrow'),
				nextArrow: $scope.find('.slick-next-arrow'),
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				speed: parseInt(elementSettings.speed),
				responsive: [
					{
						breakpoint: 1600,
						settings: {
							slidesToShow: slidesToShow > 6 ? 6 : slidesToShow,
							slidesToScroll: slidesToScroll > 6 ? 6 : slidesToScroll
						}
					},
					{
						breakpoint: 1366,
						settings: {
							slidesToShow: slidesToShow > 5 ? 5 : slidesToShow,
							slidesToScroll: slidesToScroll > 5 ? 5 : slidesToScroll
						}
					},
					{
						breakpoint: 1200,
						settings: {
							slidesToShow: slidesToShow > 4 ? 4 : slidesToShow,
							slidesToScroll: slidesToScroll > 4 ? 4 : slidesToScroll
						}
					},
					{
						breakpoint: 992,
						settings: {
							slidesToShow: slidesToShow > 3 ? 3 : slidesToShow,
							slidesToScroll: slidesToScroll > 3 ? 3 : slidesToScroll
						}
					},
					{
						breakpoint: 767,
						settings: {
							slidesToShow: slidesToShow > 2 ? 2 : slidesToShow,
							slidesToScroll: slidesToScroll > 2 ? 2 : slidesToScroll
						}
					}
				]
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});

		});
	};

	/**
	 * Testimonials Sliders
	 */
	var journeyHandler = function ($scope, $) {
		$scope.find('.martfury-journey-els').each(function () {
			var $el = $(this),
				$tabs = $el.find('ul li a'),
				$first = $tabs.filter(':first'),
				$content = $el.find('.journey-wrapper'),
				width = $el.find('ul').width(),
				elementSettings = $el.data('settings'),
				num = parseInt(elementSettings.number),
				space, pos, val;

			if (num == 1) {
				space = 0;
			} else {
				space = (width - 40) / (num - 1);
			}

			for (var i = 1; i <= num; i++) {
				var $this = $('.journey-tab-' + i);
				if ($('body').hasClass('rtl')) {
					if ($this.hasClass('reverse')) {
						pos = 'left';
						val = (i - num) * space * -1;
					} else {
						pos = 'right';
						val = (i - 1) * space;
					}
				} else {
					if ($this.hasClass('reverse')) {
						pos = 'right';
						val = (i - num) * space * -1;
					} else {
						pos = 'left';
						val = (i - 1) * space;
					}
				}

				$this.css(pos, val);
			}

			$first.addClass('active');
			$content.filter(':first').addClass('active');

			$tabs.on('click', function (e) {
				e.preventDefault();

				var $this = $(this),
					tab_id = $this.attr('data-tab');

				if ($this.hasClass('active')) {
					return;
				}

				$tabs.removeClass('active');
				$content.removeClass('active');

				$this.addClass('active');
				$('#' + tab_id).addClass('active');
			});
		});
	};

	var counterHandler = function ($scope, $) {
		$scope.find('.martfury-counter-els').each(function () {
			var $selector = $(this);
			$selector.find('.counter-value').counterUp();

		});
	};

	/**
	 * Product Of Category
	 */

	var productsOfCategoryHandler = function ($scope, $) {
		var $selector = $scope.find('.mf-products-of-category'),
			elementSettings = $selector.data('settings');
		if (!$selector.hasClass('no-infinite')) {
			productsOfCategoryAJAX($selector, elementSettings);
		} else {
			bannersCarousel($selector, elementSettings);

		}

		function productsOfCategoryAJAX($selector, elementSettings) {

			$(window).on('scroll', function () {

				if ($selector.hasClass('no-infinite')) {
					return;
				}

				var offSet = 0;

				if ($selector.is(':in-viewport(' + offSet + ')')) {
					productsOfCatAjax($selector, elementSettings);
					$selector.addClass('no-infinite');
				}

			}).trigger('scroll');
		}

		function productsOfCatAjax($selector, elementSettings) {

			if (typeof mf_elementor_data === 'undefined') {
				return;
			}

			var dataSettings = $selector.find('.mf-products-of-category-loading').data('settings'),
				ajax_url = mf_elementor_data.ajax_url.toString().replace('%%endpoint%%', 'mf_elementor_get_elements');


			$.ajax({
				url: ajax_url,
				dataType: 'json',
				method: 'post',
				data: {
					params: JSON.stringify(dataSettings),
					element: 'productsOfCat'
				},
				success: function (response) {
					$selector.html(response.data);
					bannersCarousel($selector, elementSettings);
					lazyLoadHandler($selector);
					$(document.body).trigger('martfury_get_products_ajax_success');
				}
			});
		}

		/**
		 * Catagory Banners Carousel
		 */
		function bannersCarousel($selector, elementSettings) {
			$selector.find('.images-list').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: 1,
				arrows: 'yes' === elementSettings.arrows,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				infinite: 'yes' === elementSettings.infinite,
				autoplay: 'yes' === elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplay_speed),
				dots: 'yes' === elementSettings.dots,
				speed: parseInt(elementSettings.speed),
			});

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});
		}

	};

	/**
	 * Product Of Category 2
	 */
	var productOfCategory2Handler = function ($scope, $) {
		var $selector = $scope.find('.mf-products-of-category-2');

		if (!$selector.hasClass('no-infinite')) {
			productsOfCategory2Infinite($selector);
		} else {
			bannerCarousel($selector);
			productCarousel($selector);
			productTabsActive($selector);
		}

		function productsOfCategory2Infinite($selector) {

			$(window).on('scroll', function () {

				if ($selector.hasClass('no-infinite')) {
					return;
				}

				var offSet = 0;

				if ($selector.is(':in-viewport(' + offSet + ')')) {
					productsOfCat2Ajax($selector);
					$selector.addClass('no-infinite');
				}

			}).trigger('scroll');
		}

		function productsOfCat2Ajax($selector) {

			if (typeof mf_elementor_data === 'undefined') {
				return;
			}

			var dataSettings = $selector.find('.mf-products-of-category-loading').data('settings'),
				ajax_url = mf_elementor_data.ajax_url.toString().replace('%%endpoint%%', 'mf_elementor_get_elements');


			$.ajax({
				url: ajax_url,
				dataType: 'json',
				method: 'post',
				data: {
					params: JSON.stringify(dataSettings),
					element: 'productsOfCat2'
				},
				success: function (response) {
					$selector.html(response.data);
					bannerCarousel($selector);
					productCarousel($selector);
					lazyLoadHandler($selector);
					productTabsActive($selector);
					$(document.body).trigger('martfury_get_products_ajax_success');
				}
			});
		}

		function bannerCarousel($selector) {
			var $banners = $selector.find('.images-slider'),
				bannerSettings = $banners.data('settings');

			$banners.find('.images-list').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: 1,
				arrows: 'yes' === bannerSettings.arrows,
				dots: false,
				infinite: 'yes' === bannerSettings.infinite,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				autoplay: 'yes' === bannerSettings.autoplay,
				autoplaySpeed: parseInt(bannerSettings.autoplay_speed),
				speed: parseInt(bannerSettings.speed),
			});

			$banners.on('afterChange', function () {
				lazyLoadHandler($banners);
			});
		}

		function productCarousel($selector) {
			var $products = $selector.find('.mf-products-tabs'),
				productSettings = $products.data('settings'),
				slidesToShow = parseInt(productSettings.slidesToShow),
				slidesToScroll = parseInt(productSettings.slidesToScroll);

			$products.find('ul.products').not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: slidesToShow,
				slidesToScroll: slidesToScroll,
				arrows: true,
				dots: true,
				infinite: 'yes' === productSettings.infinite,
				prevArrow: '<span class="icon-chevron-left slick-prev-arrow"></span>',
				nextArrow: '<span class="icon-chevron-right slick-next-arrow"></span>',
				autoplay: 'yes' === productSettings.autoplay,
				autoplaySpeed: parseInt(productSettings.autoplay_speed),
				speed: parseInt(productSettings.speed),
				responsive: [
					{
						breakpoint: 1200,
						settings: {
							slidesToShow: slidesToShow > 4 ? 4 : slidesToShow,
							slidesToScroll: slidesToScroll > 4 ? 4 : slidesToScroll
						}
					},
					{
						breakpoint: 992,
						settings: {
							slidesToShow: slidesToShow > 3 ? 3 : slidesToShow,
							slidesToScroll: slidesToScroll > 3 ? 3 : slidesToScroll
						}
					},
					{
						breakpoint: 767,
						settings: {
							slidesToShow: 2,
							slidesToScroll: 2
						}
					}
				]
			});

			$products.on('afterChange', function () {
				lazyLoadHandler($products);
			});

			$products.find('.tabs-nav').on('click', 'a', function (e) {
				e.preventDefault();
				getProductsTabsAJAXHandler($(this), $products, true);
			});
		}

	};

	/**
	 * Slides Widget
	 * @param $scope
	 * @param $
	 */
	var slideCarouselHandler = function ($scope, $) {
		$scope.find('.mf-slides-wrapper').each(function () {
			var $selector = $(this).find('.mf-slides'),
				elementSettings = $selector.data('slider_options'),
				$arrow_wrapper = $(this).find('.arrows-inner'),
				slidesToShow = parseInt(elementSettings.slidesToShow);

			$selector.not('.slick-initialized').slick({
				rtl: $('body').hasClass('rtl'),
				slidesToShow: slidesToShow,
				arrows: elementSettings.arrows,
				appendArrows: $arrow_wrapper,
				dots: elementSettings.dots,
				infinite: elementSettings.infinite,
				prevArrow: '<span class="slick-prev-arrow"><i class="icon-chevron-left"></i></span>',
				nextArrow: '<span class="slick-next-arrow"><i class="icon-chevron-right"></i></span>',
				autoplay: elementSettings.autoplay,
				autoplaySpeed: parseInt(elementSettings.autoplaySpeed),
				speed: parseInt(elementSettings.speed),
				pauseOnHover: elementSettings.pauseOnHover,
				fade: elementSettings.fade,
				cssEase: elementSettings.fade ? 'linear' : '',
				responsive: []
			});

			$selector.imagesLoaded(function () {
				$selector.closest('.mf-slides-wrapper').removeClass('loading');
			});

			var animation = $selector.data('animation');

			if (animation) {
				$selector
					.on('beforeChange', function () {
						var $sliderContent = $selector.find('.mf-slide-content'),
							$sliderPriceBox = $selector.find('.mf-slide-price-box');

						$sliderContent.removeClass('animated' + ' ' + animation).hide();

						$sliderPriceBox.removeClass('animated zoomIn').hide();
					})
					.on('afterChange', function (event, slick, currentSlide) {
						var $currentSlide = $(slick.$slides.get(currentSlide)).find('.mf-slide-content'),
							$currentPriceBox = $(slick.$slides.get(currentSlide)).find('.mf-slide-price-box');

						$currentSlide.show().addClass('animated' + ' ' + animation);

						$currentPriceBox.show().addClass('animated zoomIn');
					});
			}

			$selector.on('afterChange', function () {
				lazyLoadHandler($selector);
			});
		});
	};

	/**
	 * Elementor JS Hooks
	 */
	$(window).on("elementor/frontend/init", function () {

		// Product Deals Carousel
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-product-deals-carousel.default",
			productDealsCarouselHandler
		);

		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-product-deals-carousel.default",
			countDownHandler
		);

		//Product Deals Grid

		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-product-deals-grid.default",
			countDownHandler
		);

		// Product Deals Carousel 2
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-product-deals-carousel-2.default",
			productDealsCarousel2Handler
		);

		// Products of Category
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-products-of-category.default",
			productsOfCategoryHandler
		);


		// Category Tabs
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-category-tabs.default",
			categoryTabsCarouselHandler
		);

		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-category-tabs.default",
			categoryTabsHandler
		);

		// Products Tabs Carousel

		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-product-tabs-carousel.default",
			productTabsCarouselHandler
		);

		// Products Tabs Grid
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-product-tabs-grid.default",
			productTabsGridHandler
		);

		// Products List Carousel
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-products-list-carousel.default",
			productsListCarouselHandler
		);

		// Products Carousel
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-products-carousel.default",
			productsCarouselHandler
		);

		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-recently-viewed-products-carousel.default",
			recentlyViewedProductsCarouselHandler
		);

		// Testimonial
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-testimonial-slides.default",
			testimonialSlidesHandler
		);

		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-testimonial-slides-2.default",
			testimonialSlides2Handler
		);

		// Counter
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-counter.default",
			counterHandler
		);

		// Journey
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-journey.default",
			journeyHandler
		);

		// Product Grid
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-products-grid.default",
			productsGridHandler
		);

		// Product Brand
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-products-brands.default",
			productBrandsHandler
		);

		// Product Brand Images Carousel
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/mf-brand-images-carousel.default",
			brandsImagesCarouselHandler
		);

		// All widgets ready
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/widget",
			lazyLoadHandler
		);

		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-countdown.default",
			countDownHandler
		);

		// Product Of Category 2
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-products-of-category-2.default",
			productOfCategory2Handler
		);

		// Partner
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-partner.default",
			partnerSlidesHandler
		);

		// Image Gallery - Slide
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-images-carousel.default",
			imagesCarouselHandler
		);

		// Image Box Carousel
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-image-box-carousel.default",
			imageBoxCarouselHandler
		);

		// Slides
		elementorFrontend.hooks.addAction(
			"frontend/element_ready/martfury-slides.default",
			slideCarouselHandler
		);
	});
})
(jQuery);