File "functions.js"

Full Path: /home/siazco/grocery.siazco.se/wp-content/themes/kapee/assets/js/functions.js
File size: 142.09 KB
MIME-type: text/plain
Charset: utf-8

/*
 * Theme js functions file.
 */
 
var $ 				= jQuery.noConflict(),
	kapeeOwlParam 	= kapeeOwlParam || {},
	kapee_options 	= kapee_options || {}; 
(function($) { 
	
    "use strict";
	
	var kapee 		= kapee || {};
	
	kapee.kapeePreLoader = function() {
		// Preloader
		var loader = $( '.kapee-site-preloader' );
		if ( loader.length ) {
			$( window ).on( 'beforeunload', function() {
				loader.fadeIn( 500, function() {
					loader.fadeIn( 100 )
				});
			});
			
			$( window ).on('load', function () {
            loader.fadeOut( 800 );
			});
		}
	}
	
	kapee.init = function() {
		kapee.$doc          	= $(document);
		kapee.$html    			= $('html');
		kapee.$body 			= $(document.body);
		kapee.$window 			= $(window);
		kapee.$windowWidth 		= $(window).width();
		kapee.$windowHeight 	= $(window).height();
		kapee.ajaxXHR 			= null;
		kapee.isPostLoading 	= false;
		kapee.$tooltip 			= $('.product-buttons a,.whishlist-button a');
		kapee.$swatches 		= kapee.$doc.find( 'div.kapee-swatches-wrap' );
		kapee.$swatchForm 		= kapee.$doc.find( 'form.kapee-swatches-wrap.variations_form' );
				
		this.isCheckRTL();
		this.mobileDevice();
		this.BrowserDetection();
		this.skeletonEffect();
		this.backToTop();
		this.imagelazyload();
		this.reinitLazyload();
		this.initNanoScroller();
		this.initMagnaficPopup();
		this.newsLetterPopup();	
		this.kapeeMegamenu();
		this.mobileMenu();
		this.promoBar();		
		this.stickyHeader();		
		this.StickyHeaderScrollUP();		
		this.stickySidebar();
		this.canvasSidebar();
		this.openMiniSearch();
		this.widgetMenuToggle();
		this.widgetToggle();
		this.footerWidgetCollapse();
		this.widgetMaxLimitItem();
		this.kapeeOwlCarousel();
		this.MasonryGrid();
		this.postGalleryCarousel();
		this.loadmorePosts();
		this.socialShare();
		this.portfolioFilters();
		this.portfolioLoadMore();
		
		//Woocommerce
		this.productLiveSearch();
		this.swapLoginSignupFrom();
		this.userLoginSignupPopup();
		this.miniCartWidget();		
		this.addToWishlist();
		this.wishlistCount();		
		this.addToCompare();		
		this.compareCount();
		this.removeToCompare();
		//this.preventComparelink();
		this.ProductLoopQuantityField();
		this.addToCart();
		this.addToCartAjax();		
		this.stickyAddToCart();		
		this.productQuickView();
		this.productShowFilter();
		this.productShowHideFilters();
		this.productFilterAjax();	
		this.productHover();	
		this.productSwatch();
		this.variationsImageChange();
		this.initAjaxLoad();
		this.loadmoreProducts();
		this.tooltip();
		this.productGallerySummarySticky();
		this.productGallerySlider();
		this.productImageZoom();
		this.productPhotoSwipe();
		this.productSaleCountdown();
		this.productReviewLink();
		this.productPriceSummary();
		this.getProductSizeChart();
		this.getAjaxBlock();
		this.getProductTermsConditions();
		this.productQuantityPlusMinus();
		this.productQuickShop();
		this.productBoughtTogetherInit();
		this.wooProductTabsAccordian();
		this.wooProductTabsToggle();		
		this.wooCheckoutStep();
		this.resetVariations();
		this.variationChangeevent();
		this.wcfm_vendor();
		this.MiniCartUpdateQuantity();
		this.autoCartUpdate();
		this.checkoutUpdateQuantity();
		this.getVisitorCount();
		this.askQuestionsForm();
		
		//Elements
		this.kapeeEqualTabsHeight();
		this.kapeeTabEffect();
		this.kapeeAjaxTab();
		this.kapeeResponsiveTab();
		this.kapeeProgressbar();
		this.kapeeCounterUp();
		this.imageGaleryMasonry();
		this.BackgroundParallax();
		
	};
	
	kapee.isCheckRTL = function(){
		/*
		* If check is site RTL
		*/		
		$('html[dir="rtl"] body').addClass('rtl');
		var kapee_rtl = false;
		if($('body,html').hasClass('rtl')){ 
			kapee_rtl =  true;
		}	
		
		return kapee_rtl;
	};
	
	kapee.mobileDevice = function() {
		var window_size = jQuery('body').innerWidth();
		if(window_size < 991){
			jQuery('body').addClass('kapee-mobile-device');
		}else{
			jQuery('body').removeClass('kapee-mobile-device');
		}
		 kapee.$window.on('resize', function () {
			var window_size = jQuery('body').innerWidth();
			if(window_size < 991){
				jQuery('body').addClass('kapee-mobile-device');
			}else{
				jQuery('body').removeClass('kapee-mobile-device');
			}
		}); 
	};
	
	kapee.BrowserDetection = function () {
		//Check if browser is IE
		if (navigator.userAgent.search("MSIE") >= 0) {
			jQuery('body').addClass('browser-msie');
		}
		//Check if browser is Chrome
		else if (navigator.userAgent.search("Chrome") >= 0) {
			jQuery('body').addClass('browser-chrome');
		}
		//Check if browser is Firefox 
		else if (navigator.userAgent.search("Firefox") >= 0) {
			jQuery('body').addClass('browser-firefox');
		}
		//Check if browser is Safari
		else if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0) {
			jQuery('body').addClass('browser-safari');
		}
		//Check if browser is Opera
		else if (navigator.userAgent.search("Opera") >= 0) {
			jQuery('body').addClass('browser-opera');
		}
	};	
	
	kapee.skeletonEffect = function(){
		//*******************************************************************
		//* Skeleton Effect
		//********************************************************************/
		if( !kapee_options.skeleton_effect ){ return;}
		if( kapee.$body.hasClass( 'kapee-skeleton' ) ) {
			kapee.$body.removeClass( 'kapee-skeleton' );
		}		
	};
	
	kapee.backToTop = function(){
		//*******************************************************************
		//* Back to top button 
		//********************************************************************/
		var el = $('.kapee-back-to-top');
		kapee.$window.on('scroll',function(){				
			if(el.length > 0){
				if( kapee.$window.scrollTop() > 150 ){
					el.fadeIn(400);	
				}else{
					el.fadeOut(400);	
				}	
			}	
		});
		
		el.on('click', function (e) {
				$('html,body').animate({scrollTop:0}, 600);	
				return false;
		});				
	};
	
	kapee.imagelazyload = function(){
		if ( kapee.$body.find('.lazy').length > 0 && kapee_options.lazy_load ) {
			var lazy_args = [];
			lazy_args.afterLoad      = function (element) {
				element.removeClass('lazy');
				element.removeClass('loading');
				element.addClass('lazy-loaded');
			};
			lazy_args.effect         = "fadeIn";
			lazy_args.enableThrottle = true;
			lazy_args.throttle       = 250;
			lazy_args.effectTime     = 1000;
			lazy_args.threshold      = 0;
			kapee.$body.find('.lazy').lazy(lazy_args);		
			
			
		}
	};
	
	kapee.reinitLazyload = function(){
		if ( !kapee_options.lazy_load )  return;
		$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
			kapee.imagelazyload();			
		});
		$(document).on('removed_from_cart', function (e) {
			kapee.imagelazyload();			
		});
		$(window).bind('mousewheel DOMMouseScroll', function(event){
			if (event.originalEvent.wheelDelta > 0 || event.originalEvent.detail < 0) {
				//alert('up');
			}
			else {
				kapee.imagelazyload();		
			}
		});
	}
	
	kapee.initNanoScroller = function() {
		/*
		* Nano Scroller
		*/		
		if( $(window).width() < 1024 ) return;
		$(".kapee-scroll").nanoScroller({
			paneClass: 'kapee-scroll-pane',
			sliderClass: 'kapee-scroll-slider',
			contentClass: 'kapee-scroll-content',
			preventPageScrolling: false
		});

		$( 'body' ).on( 'wc_fragments_refreshed wc_fragments_loaded added_to_cart', function() {
			$(".widget_shopping_cart .kapee-scroll").nanoScroller({
				paneClass: 'kapee-scroll-pane',
				sliderClass: 'kapee-scroll-slider',
				contentClass: 'kapee-scroll-content',
				preventPageScrolling: false
			});
		} );
		
		$('.sidebar-inner .kapee-scroll').nanoScroller({ destroy: true });
	}
	
	kapee.initMagnaficPopup = function (){		
		
		var wordpress_galery = $(document).find('.gallery');
		wordpress_galery.each(function(index){
			var current_gallery = $(this);
			$(current_gallery).magnificPopup({
			delegate: 'img',
			type: 'image',
			removalDelay: 500,
			callbacks: {
				beforeOpen: function() {
					this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
					this.st.mainClass = 'mfp-with-zoom mfp-img-mobile';
				},
				elementParse: function(item) {  item.src = item.el.attr('src'); }
			},
			image: {
				verticalFit: true
			},
			gallery: {
				enabled: true,
				navigateByImgClick: true
			},
		});
			
		});
		
		$('.product-360-degree-btn a').magnificPopup({
		  type: 'inline',
		  midClick: true,
		  mainClass: 'mfp-fade'
		});
		
		init_magnificpopup('.portfolios-list','a.project-zoom');
		init_magnificpopup('.kapee-gallery-carousel','.owl-item:not(.cloned) a');
		init_magnificpopup('.kapee-portfolio-image:not(.kapee-gallery-carousel)','.kapee-post-gallery__image a');
		init_magnificpopup('.related.portfolios .kapee-carousel','.owl-item:not(.cloned) a.project-zoom');
		init_magnificpopup('.kapee-portfolios-carousel','.owl-item:not(.cloned) a.project-zoom');
		init_magnificpopup('.kapee-image-gallery.image-gallery-normal-grid','a');
		init_magnificpopup('.kapee-image-gallery.image-gallery-masonry-grid','a');
		init_magnificpopup('.kapee-image-gallery.image-gallery-carousel','.owl-item:not(.cloned) a');
		
		function init_magnificpopup(container,delegate){
			
			var container_wrap = $(document).find(container);
			
			if( typeof('container_wrap') !== 'undefined' && container_wrap != '' ) {
				container_wrap.each(function(index){
					var portfolio_item = $(this);
					$(portfolio_item).magnificPopup({
						delegate    : delegate,
						type: 'image',
						removalDelay: 500,
						callbacks: {
							beforeOpen: function() {
								this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
								this.st.mainClass = 'mfp-with-zoom mfp-img-mobile';
							}
						},
						image: {
							verticalFit: true
						},
						gallery: {
							enabled: true,
							navigateByImgClick: false
						},
					});
					
				});
			}
		}
		
		$('.link-popup').magnificPopup({
			type: 'image',
			removalDelay: 500,
			callbacks: {
				beforeOpen: function() {
					this.st.image.markup = this.st.image.markup.replace('mfp-figure', 'mfp-figure mfp-with-anim');
					this.st.mainClass = 'mfp-with-zoom mfp-img-mobile';
				}
			},
			image: {
				verticalFit: true
			},
		});
		
		var $ombed_vids = $(".kapee-video-popup");		
		if( $ombed_vids.length > 0 ) {			
			$ombed_vids.each(function () {
				var $mfp_popup_link_non_html5 = $(this);

				$($mfp_popup_link_non_html5).magnificPopup({
					disableOn: 320,
					type: 'iframe',
					mainClass: 'mfp-fade product-video-popup',
					removalDelay: 160,
					preloader: false,
					fixedContentPos: false,
					iframe: {
						patterns: {
							youtube: {
								index: 'youtube.com/',
								id: function(url) {
									var m = url.match(/[\\?\\&]v=([^\\?\\&]+)/);
									if ( !m || !m[1] ) return null;
									return m[1];
								},
								src: '//www.youtube.com/embed/%id%?autoplay=1&rel=0'
							},
							youtu: {
								index: 'youtu.be',
								id: '/',
								src: '//www.youtube.com/embed/%id%?autoplay=1&rel=0'
							},
							vimeo: {
								index: 'vimeo.com/',
								id: function(url) {
									var m = url.match(/(https?:\/\/)?(www.)?(player.)?vimeo.com\/([a-z]*\/)*([0-9]{6,11})[?]?.*/);
									if ( !m || !m[5] ) return null;
									return m[5];
								},
								src: '//player.vimeo.com/video/%id%?autoplay=1'
							},
						}
					}
				});
			});
		}		
    };
	
	kapee.newsLetterPopup = function(){		
		
		var popup_enable 		= kapee_options.newsletter_args.popup_enable,
			popup_display_on 	= kapee_options.newsletter_args.popup_display_on,
			popup_delay 		= kapee_options.newsletter_args.popup_delay,
			x_scroll 			= kapee_options.newsletter_args.popup_x_scroll,
			show_for_mobile 	= parseInt(kapee_options.newsletter_args.show_for_mobile),
			popup_exit 			= false,
			startinterval 		= false,
			newsletter_key 		= 'kapee_newsletter_closed_' + kapee_options.newsletter_args.version,
			popup_closed 		= Cookies.set( newsletter_key ),
			$news_letter_wrap 	= $('.kapee-newsletter-popup'),
			from_button         = false;
		
		if( ! $news_letter_wrap.length ) {
			return false;
		}
		
		//yith-woocompare
		if( jQuery(document).find('#yith-woocompare').length > 0 ){
			return false;
		}
		
		
		if( ! popup_enable || kapee_options.maintenance_mode || ( ! show_for_mobile && $(window).width() < 768 ) ){
			return false; 
		}
		
		//newsletter popup opened from button on click by user
		//it must be enabled even if with 'do-not-show' cookie saved
		var newsletter_btn = $('.header-newsletter');
		newsletter_btn.on('click',function(){
			from_button = true;
			show_popup();
		});
		
		
		if( popup_closed == 'do-not-show' ) {
			return false; 
		}
		
		if( popup_display_on == 'exit' ){
			jQuery(document).on('mouseleave', function (e) {
				show_popup();
			});
		}else if( popup_display_on == 'scroll' ){

            jQuery(window).scroll(function () {
                var h = jQuery(document).height() - jQuery(window).height();
                var sp = jQuery(window).scrollTop();
                var p = parseInt(sp / h * 100);

                if (p >= x_scroll) {
                   show_popup();                
                }
            });
        }else{
			if( popup_delay ){
				setTimeout(function(){show_popup(); }, popup_delay * 1000);	
			}else{
				show_popup();
			}			         
        }
		
		$news_letter_wrap.find('.mc4wp-form').submit(function () {
            Cookies.set( newsletter_key , 'do-not-show', { expires: parseInt(kapee_options.newsletter_args.show_in_next_days), path: '/' });
        });
		
		function show_popup() {			
			// popup must open everytime if the user clicked to open it
			if(popup_exit && !from_button){
				return;
			}
			popup_exit = true;
			
			$.magnificPopup.open({
				type: 'inline',
				removalDelay: 500,
				items: {
					src: '.kapee-newsletter-popup' ,					
				},
				callbacks: {
					open: function () {
						var popupWrap = $( '.kapee-newsletter-popup' );
						popupWrap.addClass('animate__animated animate__fadeInLeft');						
						
						// donotshow div element must be hidden if the user clicked to open popup
						if (from_button)
							$('#newsletter-donotshow').parent('div').hide();
					},							
					beforeClose: function() {
						var popupWrap = $( '.kapee-newsletter-popup' );
						popupWrap.removeClass('animate__fadeInLeft').addClass('animate__fadeOutRight');
					}, 
					close: function() {
						this.content.removeClass('animate__animated animate__fadeOutRight'); 
						// check box click
						if($('#newsletter-donotshow:checked') && $('#newsletter-donotshow:checked').val() == 'do-not-show'){
							Cookies.set( newsletter_key , 'do-not-show', { expires: parseInt(kapee_options.newsletter_args.show_in_next_days), path: '/' });
						}						
						
						// we restore the default visibility of donotshow div element if the user clicked to open popup
						if (from_button) {
							$('#newsletter-donotshow').parent('div').show();
							from_button = false;
						}
					}
				},				
			});
		}
	};
	
	kapee.wowAnimation = function() {
		// WOW ANIMATION
		if($('.wow').length > 0)
		{
			var wow = new WOW(
			{
			  boxClass:     'wow',      // animated element css class (default is wow)
			  animateClass: 'animated', // animation css class (default is animated)
			  offset:       50,          // distance to the element when triggering the animation (default is 0)
			  mobile:       false       // trigger animations on mobile devices (true is default)
			});
			wow.init();	
		}	
	}
	
	kapee.kapeeMegamenu = function(){
		
		var main_menu_wrap 				= $('.main-navigation').find('ul.menu');
		
		main_menu_wrap.on('mouseover', ' > li.kapee-megamenu-dropdown', function(e) {
			setOffset( $(this) );
		});
		jQuery(window).resize(function() {
			main_menu_wrap.on('mouseover', ' > li.kapee-megamenu-dropdown', function(e) {
				setOffset( $(this) );
			});
		});

		var setOffset = function( li ) {

			var megaMenuWrapper 		= li.find(' > .kapee-megamenu-wrapper'),
				megaMenuHolder 			= li.find(' .kapee-megamenu-holder');
			
			megaMenuWrapper.attr('style', '');

			var container	 			= $('.site-header .container'),
				containerWidth 			= container.outerWidth(),
				containerOffsetLeft 	= container.offset().left + 15,
				containerPaddingLeft 	= parseInt(container.css('padding-left')),
				containerPaddingRight 	= parseInt(container.css('padding-right')),
				viewportWidth 		  	= containerWidth - containerPaddingLeft - containerPaddingRight;
				
			if( li.hasClass( 'kapee-megamenu-item-full-width' ) ) { 
				megaMenuHolder.css({
					width: viewportWidth
				});
			}
			
			var	megaMenuWrapperWidth	= megaMenuWrapper.outerWidth(),
				megaMenuWrapperOffset	= megaMenuWrapper.offset();		
				
			if( ! megaMenuWrapperWidth || ! megaMenuWrapperOffset ) return;
			
			var mega_menu_wrapOffsetRight = viewportWidth - megaMenuWrapperOffset.left - megaMenuWrapperWidth;
			
			if( $('body').hasClass('rtl') && mega_menu_wrapOffsetRight + megaMenuWrapperWidth + containerOffsetLeft >= viewportWidth && ( li.hasClass( 'kapee-megamenu-dropdown' ) ) ) {
				
				var toLeft = mega_menu_wrapOffsetRight + megaMenuWrapperWidth - viewportWidth + containerOffsetLeft;
				megaMenuWrapper.css({
					right: - toLeft
				}); 

			}else if( megaMenuWrapperOffset.left + megaMenuWrapperWidth - containerOffsetLeft >= viewportWidth && ( li.hasClass( 'kapee-megamenu-dropdown' ) ) ) {
				
				var toRight = megaMenuWrapperOffset.left + megaMenuWrapperWidth - viewportWidth - containerOffsetLeft;
				megaMenuWrapper.css({
					left: - toRight
				}); 
			}				
		};	
	}
	
	kapee.mobileMenu = function(){
		/*
		* Mobile menu
		*/
		
		//Menu wrapper
		$(document).on('click', '.mobile-nav-tabs li', function(e) {
			if(!$(this).hasClass("active")){
				var cn=$(this).data("menu");
				$(this).parent().find(".active").removeClass("active");
				$(this).addClass("active");
				$(".mobile-nav-content").removeClass("active").fadeOut(300);
				$(".mobile-"+cn+"-menu").addClass("active").fadeIn(300);
			}
		});
		
		//Menu
		var $mobileMenu 	= $('.kapee-mobile-menu'),
			$closeSidebar 	= $('.kapee-mask-overaly');
		$( '.mobile-navbar .navbar-toggle,.mobile-element .navbar-toggle' ).on( 'click', function ( e ) {
			e.preventDefault();			
			if ( ! $mobileMenu.hasClass('opened') ) {
				$mobileMenu.addClass('opened');
				$closeSidebar.addClass('opened');
			}
		});
		
		kapee.$body.on('click', '.kapee-mask-overaly, .kapee-mobile-menu .close-sidebar', function (e) {
			if ( $mobileMenu.hasClass( 'opened' ) ) {
				$mobileMenu.removeClass('opened');
				$closeSidebar.removeClass('opened');
			}
		});
		
		$( '.mobile-main-menu li.menu-item-has-children' ).append( '<span class="menu-toggle"></span>' );
		
		$mobileMenu.on('click', '.menu-item-has-children > .menu-toggle', function (e) {
			e.preventDefault();

			$(this).closest('li').siblings().find('ul').slideUp();
			$(this).closest('li').siblings().removeClass('active');
			$(this).closest('li').siblings().find('li').removeClass('active');

			$(this).closest('li').children('ul').slideToggle();
			$(this).closest('li').toggleClass('active');

		});
		
		kapee.$body.on('click', '.kapee-mask-overaly', function (e) {
			if ( $mobileMenu.hasClass( 'opened' ) ) {
				$mobileMenu.removeClass('opened');
				$closeSidebar.removeClass('opened');
			}
		});
		
		kapee.$window.on('resize', function () {
			if ( kapee.$window.width() > 991 ) {
				if ( $mobileMenu.hasClass( 'opened' ) ) {
					$mobileMenu.removeClass('opened');
					$closeSidebar.removeClass('opened');
				}
			}
		});
	};
	
	kapee.promoBar = function(){
		/*
		 * Promo Bar
		 */
		var $promo_bar 			= $( '.kapee-promo-bar' ),
			$siteWrapper 		= $( '.site-wrapper' ),
			$siteHeader 		= $( '.site-header' ),
			$stickyElements 	= $( '.header-sticky' ),
			position_type 		= $promo_bar.attr('data-position_type'),
			position 			= $promo_bar.attr('data-position'),
			promo_barHeight 	= $promo_bar.outerHeight(),
			adminBarHeight 		= $('#wpadminbar').outerHeight();
			
		if( position == 'top' && position_type == 'fixed'){
			$siteWrapper.css({'margin-top' : promo_barHeight + 'px'});
		}
		// Set a cookie and hide Promo bar when the dismiss button is clicked
		var promo_bar_key = 'kapee_promo_bar_close';
		$( '.promo-bar-close' ).on( 'click', function( event ) {
			event.preventDefault();
			if( $(this).hasClass('promo-bar-dismiss') ) {
				Cookies.set( promo_bar_key, true, { path: '/' ,expires: parseInt(kapee_options.show_promobar_in_next_days)} );
			}
			if( position == 'top' && position_type == 'fixed'){
				$siteWrapper.css({'margin-top' : '0px'});
			}
			if( position == 'top' && position_type == 'fixed'){
				if(adminBarHeight){
					if( $siteHeader.hasClass('header-sticked')){
					$stickyElements.css({
					'top': adminBarHeight+'px'
				});
				}
				}else{
					if( $siteHeader.hasClass('header-sticked')){
							$stickyElements.css({
							'top': '0px'
						});
						}
				}
			}
			$promo_bar.slideUp('slow',function(){ $(this).remove();});
			
		});
	};
	
	kapee.stickyHeader = function(){
		//*******************************************************************
		//*  Sticky Header.
		//*******************************************************************/
		var $header 		= $( '.site-header' ),
			$stickyElements = $( '.header-sticky' ),
			$firstSticky 	= $stickyElements.first(),
			headerHeight 	= $header.outerHeight(),
			$window 		= $(window),
			isSticked 		= false,
			adminBarHeight 	= $('#wpadminbar').outerHeight(),
			stickShowAfter 	= headerHeight + 5;
			
			 $(window).on( 'scroll' , function () {
				var windowSize = $(window).width();
				kapee.promoBar();
				//Disable sticky in desktop
				if( windowSize > 992 && ( ! kapee_options.sticky_header ) ){
					return false; 
				}
				
				// Disable sticky in tablet
				if( windowSize <= 992 && windowSize > 480 && ( ! kapee_options.sticky_header_tablet ) ){
					return false;
				}
				
				//Disable sticky in mobile
				if( windowSize <= 480 && ( ! kapee_options.sticky_header_mobile ) ){
					return false;
				}
				var stickyOffset	= stickShowAfter;
				var currentScroll 	= $(this).scrollTop();
				if ( currentScroll > stickyOffset ) {					
					stickHeader();
					if( $( '.header-sticky .categories-menu-wrapper' ).hasClass( 'opened-categories' ) ){
						$( '.header-sticky .categories-menu-wrapper' ).removeClass( 'opened-categories' );
					}
				} else {
					unstickHeader();
				}
			});
			
			function stickHeader() {
				if ( isSticked ){ return; }
				isSticked = true;
				$header.addClass( 'header-sticked' );
				var $promo_bar 		= $( '.kapee-promo-bar' ),
				position_type = $promo_bar.attr('data-position_type'),
				position = $promo_bar.attr('data-position'),
				promo_barHeight 	= $promo_bar.outerHeight(),
				adminBarHeight 	= $('#wpadminbar').outerHeight();
				
				if( position == 'top' && position_type == 'fixed'){
					if(adminBarHeight){
						adminBarHeight = parseInt(adminBarHeight) + parseInt(promo_barHeight);
					}else{
						adminBarHeight =  parseInt(promo_barHeight);
					}
				}
				$stickyElements.css({
					'top': adminBarHeight+'px'
				});
			}

			function unstickHeader() {
				if ( !isSticked ) {  return; }

				isSticked = false
				$header.removeClass( 'header-sticked' );
				$stickyElements.css({
					'top': 0
				});
			}
	};
	
	kapee.StickyHeaderScrollUP = function(){
		/*
		* Sticky header on ScrollUp
		*/		
		if ( ! kapee_options.sticky_header ||  ! kapee_options.sticky_header_scroll_up) { return; }
				
		var origPosition = $(window).scrollTop();

		$(window).scroll(function(e) {
			var currentScroll = $(window).scrollTop();

			if( currentScroll > origPosition ) {
				$('.site-header').removeClass( 'scroll-up' ).addClass( 'scroll-down' );
			} else {
				$('.site-header').removeClass( 'scroll-down' ).addClass( 'scroll-up' );
			}

			origPosition = currentScroll;
		});
	};
	
	kapee.stickySidebar = function(){
		/*
		 *  Sticky Sidebar.
		 */
		if ( ! kapee_options.sticky_sidebar ) { return; }
		
		if ( typeof ( $.fn.stick_in_parent ) != 'undefined' ) {
			$(document).ready(function(){
				if( $( window ).width() <= 768  ) { return; }
				
				var sticky_sidebar = $( '#secondary .sidebar-inner' );	
				var offset = 15;
				
				if ( $( '#header .header-sticky' )[0] ) {
					offset = $( '#header .header-sticky' ).height() + 30;
				}
				
				sticky_sidebar.stick_in_parent({ offset_top: offset });
				
				$( window ).resize(function() {
					if ( $( window ).width() <= 768 ) {
						sticky_sidebar.trigger( 'sticky_kit:detach' );					
					}else{
						sticky_sidebar.stick_in_parent({
							offset_top: offset
						});
					}
				});
			});
		}
	};
	
	kapee.canvasSidebar = function(){
		//*******************************************************************
		//*  Canvas Sidebar.
		//*******************************************************************/
		
		var sidebar_canvas 		= $( '.kapee-canvas-sidebar .kp-canvas-sidebar, .kapee-mobile-navbar .kp-canvas-sidebar' );
		var secondary = $( '#secondary' );
        var closeSidebar 	= $( '.kapee-mask-overaly' );
		
		sidebar_canvas.on('click', function(e) {
			e.preventDefault();
			
			if ( ! secondary.hasClass('opened') ) {
				secondary.addClass('opened');
				setTimeout(function() {kapee.imagelazyload();}, 1000);
				closeSidebar.addClass('opened');
			}					
		});
		
		kapee.$body.on('click', '.kapee-mask-overaly, .close-sidebar', function (e) {
			e.preventDefault();
			secondary.removeClass('opened');
			closeSidebar.removeClass('opened');
		});	
		
		kapee.$window.on('resize', function () {
			if ( kapee.$window.width() > 767 ) {
				if ( secondary.hasClass( 'opened' ) ) {
					secondary.removeClass('opened');
					closeSidebar.removeClass('opened');
				}
			}
		});
		
	};
	
	kapee.openMiniSearch = function(){
		//*******************************************************************
		//* openMiniSearch
		//*******************************************************************/
		//if ( !kapee_options.sidebar_canvas_mobile ) return;
		var sidebar_canvas 		= $('.header-mini-search > a');
		var search_popup = $('.kapee-search-popup');
       var closeSidebar 	= $('.kapee-search-popup .close-sidebar');
		
		sidebar_canvas.on('click', function(e) {
			e.preventDefault();
			
			if ( ! search_popup.hasClass('opened') ) {
				search_popup.addClass('opened');
				//closeSidebar.addClass('opened');
			}					
		});
		
		closeSidebar.on('click', function(e) {
			e.preventDefault();
			
			if ( search_popup.hasClass('opened') ) {
				search_popup.removeClass('opened');
			}					
		});
		
		/* kapee.$body.on('click', '.kapee-mask-overaly, .close-sidebar', function (e) {
			e.preventDefault();
			
			//closeSidebar.removeClass('opened');
		});	 */
		
	};
	
	kapee.widgetMenuToggle = function(){
		//*******************************************************************
		//* Widget Menu Toggle
		//*******************************************************************/
		
		if( kapee_options.widget_menu_toggle) {
			/* Wordpress Menu widget */
			$('#secondary .widget .menu-item > a').each(function(){
				if( $(this).siblings('ul.sub-menu').length > 0 ) {
					var $childIndicator = $('<span class="child-indicator"></span>');

					$(this).siblings('.sub-menu').hide();
					$('.current-menu-item > .sub-menu').show();
					$('.current-menu-parent > .sub-menu').show();
					if($(this).siblings('.sub-menu').is(':visible')){
						$childIndicator.addClass( 'open-item' );
					}

					$childIndicator.on( 'click', function(){
						$(this).parent().siblings('.sub-menu').toggle( 'fast', function(){
							if($(this).is(':visible')){
								$childIndicator.addClass( 'open-item' );
							}else{
								$childIndicator.removeClass( 'open-item' );
							}
						});
						return false;
					});
					$(this).append($childIndicator);
				}
			});
			
			/* Product/Category widget */
			$('#secondary .widget .cat-item > a').each(function(){
				if( $(this).siblings('ul.children').length > 0 ) {
					var $childIndicator = $('<span class="child-indicator"></span>');

					$(this).siblings('.children').hide();
					$('.current-cat > .children').show();
					$('.current-cat-parent > .children').show();
					if($(this).siblings('.children').is(':visible')){
						$childIndicator.addClass( 'open-item' );
					}

					$childIndicator.on( 'click', function(){
						$(this).parent().siblings('.children').toggle( 'fast', function(){
							if($(this).is(':visible')){
								$childIndicator.addClass( 'open-item' );
							}else{
								$childIndicator.removeClass( 'open-item' );
							}
						});
						return false;
					});
					
					if( ! $(this).find('.child-indicator').length > 0 ){
						$(this).append($childIndicator);
					}
				}
			});
		}		
	};
	
	kapee.widgetToggle = function(){
		//*******************************************************************
		//* Widget Menu Toggle
		//*******************************************************************/		
		if( kapee_options.widget_toggle) {
			$( document ).find('.widget-area .widget').addClass('widget-toggle').removeClass('closed');
			$( document ).on( 'click', '.widget-area .widget .widget-title, .dokan-widget-area .widget .widget-title', function(e) {
				//$(this).unbind();
				e.stopImmediatePropagation();
				if ($(this).next().is(':visible')){
                    $(this).parent().addClass('closed');
                } else {
                    $(this).parent().removeClass('closed');
                }
                $(this).next().stop().slideToggle(200);
			});			
		}
	};
	
	kapee.footerWidgetCollapse = function(){
		//*******************************************************************
		//* Footer Widget Collapse
		//*******************************************************************/	
		if ($(window).width() > 576) {
			return;
		}
		$( document ).on( 'click', '.kapee-mobile-device .footer-widget-collapse .widget .widget-title', function(e) {
			var $title = $(this);
			var $widget = $title.parent();
			var $content = $widget.find('> *:not(.widget-title)');

			if ($widget.hasClass('footer-widget-opened')) {
				$widget.removeClass('footer-widget-opened');
				$content.stop().slideUp(200);
			} else {
				$widget.addClass('footer-widget-opened');
				$content.stop().slideDown(200);
			}
					
		});
				
	};
	
	kapee.widgetMaxLimitItem = function(){
		//*******************************************************************
		//* Widget Hide Max Limit Item
		//*******************************************************************/
		if( kapee_options.widget_hide_max_limit_item) {
			var js_translate_text = kapee_options.js_translate_text;
			$('.widget .widget-title + ul').hideMaxListItems({
				'max': kapee_options.number_of_show_widget_items,
				'speed': 500,
				'moreText': js_translate_text.show_more,
				'lessText': js_translate_text.show_less
			});
		}
	};
	
	kapee.kapeeOwlCarousel = function() { 
		/*
		 * Owl carousel slider
		 */

		if ( kapeeOwlParam.length === 0 || typeof kapeeOwlParam.owlCarouselArg === 'undefined' ) {
			return; 
		}
		
		function add_owl_overlayclass(){
			$('.owl-stage-outer .product-wrapper').mouseenter(function(){
			var slider_elemnt = $(this).closest('.products.kapee-carousel');
			slider_elemnt.find('.owl-stage-outer').addClass('overlay');
		}).mouseleave(function(){
			var slider_elemnt = $(this).closest('.products.kapee-carousel');
			slider_elemnt.find('.owl-stage-outer').removeClass('overlay');
		});
		}
		setTimeout(function() {add_owl_overlayclass()}, 1000);
		$.each( kapeeOwlParam.owlCarouselArg, function ( id, owlCarouselArg ) {
			
			var loop 				= ( owlCarouselArg.slider_loop ) ? true : false,
				autoplay 			= ( owlCarouselArg.slider_autoplay ) ? true : false,							
				autoplayHoverPause 	= ( autoplay && owlCarouselArg.slider_autoplayHoverPause ) ? true : false,
				autoplaytimeout 	= owlCarouselArg.slider_autoplaytimeout,
				smartspeed 			= parseInt(owlCarouselArg.slider_smartspeed),
				
				rewind 				= ( owlCarouselArg.slider_rewind ) ? true : false,
				nav 				= ( owlCarouselArg.slider_nav ) ? true : false,		
				nav_mobile			= ( owlCarouselArg.slider_nav_mobile ) ? true : false,			
				center 				= ( owlCarouselArg.slider_center ) ? true : false,				
				dots 				= ( owlCarouselArg.slider_dots ) ? true : false,
				autoHeight 			= ( owlCarouselArg.slider_autoHeight ) ? true : false,
				touchDrag			= ( owlCarouselArg.slider_touchDrag ) ? true : false,
				touchDrag_mobile	= ( owlCarouselArg.slider_touchDrag_mobile ) ? true : false,
				animateIn 			= owlCarouselArg.slider_animatein,
				animateOut 			= owlCarouselArg.slider_animateout,
				margin 				= owlCarouselArg.slider_margin,
				rs_extra_large 		= ( owlCarouselArg.rs_extra_large > 0 ) ? parseInt( owlCarouselArg.rs_extra_large ) : 5,
				rs_large 			= ( owlCarouselArg.rs_large > 0 ) ? parseInt( owlCarouselArg.rs_large ) : 4,
				rs_medium 			= ( owlCarouselArg.rs_medium > 0 ) ? parseInt( owlCarouselArg.rs_medium ) : 3,
				rs_small 			= ( owlCarouselArg.rs_small > 0 ) ? parseInt( owlCarouselArg.rs_small  ): 2,
				rs_extra_small 		= ( owlCarouselArg.rs_extra_small > 0 ) ? parseInt( owlCarouselArg.rs_extra_small ) : 2,
				numItems 			= null,
				slider_element 		= null;
				
			if($('#'+id).hasClass('kapee-carousel')){
				numItems 			= $( '#'+id ).children().length;
				slider_element 		= $( '#'+id );
			}else{
				numItems 			= $( '#'+id).find( '.kapee-carousel').children().length;
				slider_element 		= $( '#'+id ).find( '.kapee-carousel');
			}
				
			slider_element.owlCarousel({				
				autoplay			: autoplay,
				autoplayHoverPause	: autoplayHoverPause,
				autoplayTimeout		: autoplaytimeout,
				smartSpeed 			: smartspeed,
				rewind				: rewind,				
				nav					: nav,
				center				: center,
				navText				: ['',''],
				dots				: dots,
				autoHeight			: autoHeight,
				touchDrag			: touchDrag,				
				animateIn			: animateIn,
				animateOut			: animateOut,
				margin				: margin,
				rtl 				: ( kapee.isCheckRTL() ) ? true : false,
				responsive			: {
					0:{
						items	: rs_extra_small,
						loop	: ( numItems >= rs_extra_small && loop ) ? true : false,
						nav		: nav_mobile,
						mouseDrag: false,
						touchDrag: touchDrag_mobile						
					},
					576:{
						items	: rs_small,
						loop	: ( numItems >= rs_small && loop ) ? true : false,
						nav		: nav_mobile,
						mouseDrag: false,
						touchDrag: touchDrag_mobile	
					},
					768:{
						items	: rs_medium,
						loop	: ( numItems >= rs_medium && loop) ? true : false,
						nav		: nav_mobile,
					},
					992:{
						items	: rs_large,
						loop	: ( numItems >= rs_large && loop) ? true : false,
					},					
					1200:{
						items 	: rs_extra_large,
						loop	: ( numItems >= rs_extra_large && loop) ? true : false,
					}
				},
				onInitialized: function(){
					slider_element.addClass('owl-theme');
				}
			}).on('changed.owl.carousel', function(event) {
				kapee.imagelazyload();
			}).on('translated.owl.carousel', function(event) {
				kapee.imagelazyload();
			});
		} );	
	};
	
	kapee.MasonryGrid = function (){
		
		/*
		* Init Masonry grid
		*/
		
		if($( '.articles-list.masonry-grid' ).length){
			 kapee.$body.imagesLoaded(function () {
				kapee.$body.find('.articles-list.masonry-grid').isotope({
					itemSelector: '.post',
					layoutMode: 'masonry'
				});
			});			
		}
	};
	
	kapee.postGalleryCarousel = function (){
		/*
		*  Post Gallery Carousel
		*/
		$('.kapee-gallery-carousel').owlCarousel({
			loop			: true,
			autoplay 		: false,
			autoplayTimeout : 3000,
			rtl 			: ( kapee.isCheckRTL() ) ? true : false,
			//rewind		: true,
			smartSpeed		: 750,
			nav 			: true,
			navText			: ['',''],
			dots			: true,		
			items			: 1
		});
		$( '.kapee-gallery-carousel').addClass('owl-theme owl-center');
	};
	
	kapee.loadmorePosts = function(){
		
		$('.kapee-blog-load-more .kapee-load-more').on('click',function(){
			
			var load_more_btn = $(this);
			var page = parseInt(load_more_btn.attr('data-page'));
			var attr = load_more_btn.attr('data-attribute');
			var post_wrap = load_more_btn.closest('.kapee-element').find('.articles-list');
            var wrap_id = load_more_btn.closest('.kapee-element').attr('id');
			var data = {
				action: 'kapee_loadmore_posts',
				nonce: kapee_options.nonce,
				attr: attr,
				page: page,
			};
			if(load_more_btn.hasClass('process')){ return false;}
			kapee.loadAjaxPost(load_more_btn,data,post_wrap,wrap_id);
		});
		var animationFrame = function () {
			$('.kapee-blog-load-more a.infinity-scroll').each(function (i, val) {
				var load_more_btn = $(this);
				var page = parseInt(load_more_btn.attr('data-page'));
				var attr = load_more_btn.attr('data-attribute');
				var post_wrap = load_more_btn.closest('.kapee-element').find('.articles-list');
				var wrap_id = load_more_btn.closest('.kapee-element').attr('id');
				var bottomOffset = post_wrap.offset().top + post_wrap.height() - $(window).scrollTop();
				if (bottomOffset < window.innerHeight && bottomOffset > 0) {
					if(load_more_btn.hasClass('process')){ 
						kapee.isPostLoading = true;
					}else{
						kapee.isPostLoading = false;
					}
					var page = parseInt(load_more_btn.attr('data-page'));
					if(!load_more_btn.hasClass('kapee-loadmore-disabled')){ 
						load_more_btn.trigger('click');
					}
				}
			});
		}
		
		var scrollHandler = function () {
			requestAnimationFrame(animationFrame);
		};                    
		$(window).scroll(scrollHandler);
	}
	
	kapee.socialShare = function (){
		/*
		* Social Share
		*/
		kapee.$doc.on('click', '.social-print', function(){
			window.print();
			return false;
		});

		/*
		 * Open Share buttons in a popup
		 */
		kapee.$doc.on('click', '.social-share a', function(){
			var link = jQuery(this).attr('href');
			if( link != '#' ){
				window.open( link, 'TIEshare', 'height=450,width=760,resizable=0,toolbar=0,menubar=0,status=0,location=0,scrollbars=0' );
				return false;
			}
		});
	};
	
	kapee.portfolioFilters = function (){
		
		/*
		* Portfolio Filters
		*/
		
		if ( ! $('.portfolios-list').length > 0 ) return;
		var $layoutMode='masonry';
		
		if($( '.portfolios-list' ).length){
			$( '.portfolios-list' ).each(function(){
				if($( this ).hasClass('simple-grid') ){
					$layoutMode='fitRows';
				}
				var portfolio_container = $( this );
				// initialize Masonry after all images have loaded
                portfolio_container.imagesLoaded(function() {
					portfolio_container.isotope({
						itemSelector: '.portfolio-post-loop',
						isOriginLeft: ! $('body').hasClass('rtl'),
						layoutMode: $layoutMode
					});
				 });
			});
			
		}
		
		$('.filter-categories').on('click', 'a', function(e) {
			e.preventDefault();
			
			var $portfolio_container = $(this).closest('.portfolio-filter').next('.portfolios-list');
			if($portfolio_container.hasClass('simple-grid') ){
				$layoutMode='fitRows';
			}	
			$('.filter-categories').find('.active').removeClass('active');
			$(this).addClass('active');
			var filterValue = $(this).attr('data-filter');
			$portfolio_container.isotope({
				filter		: filterValue,
				layoutMode	: $layoutMode,
			});
			//return false;
		});
		
	};
	
	kapee.portfolioLoadMore = function () {
		
		$('.kapee-portfolio-load-more .kapee-load-more').on('click',function(){
						
			var $this = $(this),
				portfolio_wrap = $this.parent().parent().parent().find('.portfolios-list'),
				data_attr = $this.parent().data(),
				atts = data_attr.attribute,
				page = parseInt($this.parent().attr('data-page')),
				load_more_label = data_attr.load_more_label,
				loading_finished_msg = data_attr.loading_finished_msg;
				$this.addClass('request-running');
			if($this.hasClass('kapee-loadmore-disabled')){
				return;
			}
			$this.html('<span class="loading"> '+kapee_options.js_translate_text.loading_txt+'</span>');
			var data = {
					attr: atts,
					page: page,
					nonce: kapee_options.nonce,
					action: 'kapee_loadmore_portfolios',
				};
		
			$.ajax({
				url: kapee_options.ajax_url,
				data: data,
				dataType: 'json',
				method: 'POST',
				success: function (response) {

					var portfolio_items = $(response.html);
					if (portfolio_items) {
						if (portfolio_wrap.hasClass('masonry-grid')) {
							// initialize Masonry after all images have loaded
							portfolio_wrap.append(portfolio_items).isotope('appended', portfolio_items);
							portfolio_wrap.imagesLoaded().progress(function () {
								portfolio_wrap.isotope('layout');								
							});
						} else {
							portfolio_wrap.append(portfolio_items);
						}						
					}
					if ($.trim(response.show_bt) == '0') {
						$this.addClass('disabled kapee-loadmore-disabled').html(loading_finished_msg);
					} else {
						$this.parent().attr('data-page', page + 1);					
						$this.html(load_more_label);
					}

				},
				error: function (response) {
					console.log('ajax error');
				},
				complete: function () {
					kapee.isPostLoading = false;
					kapee.imagelazyload();
					kapee.initMagnaficPopup();			
					$this.removeClass('request-running');	
				},
			});
					
		});
		
		
		var animationFrame = function () {
			$('.kapee-portfolio-load-more a.infinity-scroll').each(function (i, val) {
				var $this = $(this),
				portfolio_wrap = $this.parent().parent().parent().find('.portfolios-list');
				var bottomOffset = portfolio_wrap.offset().top + portfolio_wrap.height() - $(window).scrollTop();
				if (bottomOffset < window.innerHeight && bottomOffset > 0) {
					if($this.hasClass('request-running')){ 
						kapee.isPostLoading = true;
					}else{
						kapee.isPostLoading = false;
					}
					
					if(!$this.hasClass('kapee-loadmore-disabled')){ 
						if(!kapee.isPostLoading){
							kapee.isPostLoading = true;
							$this.trigger('click');
						}
					}
				}
			});
		}
		
		var scrollHandler = function () {
			requestAnimationFrame(animationFrame);
		};                    
		$(window).scroll(scrollHandler);
		
	};
	
	// Kapee product live search
	kapee.productLiveSearch = function () {
		
		if ( ! kapee_options.product_ajax_search ) { return false; }
		
		$('.trending-search-results').hide();
		 var serviceUrl = kapee_options.ajax_url + '?action=kapee_ajax_search';
		$('.kapee-ajax-search').each(function(){
			
			var append 				= $(this).find('.search-results-wrapper'),
				container 			= $(this),
				search_categories 	= $(this).find('.categories-filter'),
				product_cat 		= '';

			if (search_categories.length && search_categories.val() !== '') {
				product_cat = search_categories.val();
			}
		
			$(this).find('.search-field').keyup(function(){
				 var search_text = $(this).val();
				 if(search_text.length < 3){
					$('.trending-search-results').show();
				 }else{
					 $('.trending-search-results').hide();
				 }
			});
			 $(this).find('.search-field').focus(function() {
				 var search_text = $(this).val();
				 if(search_text.length < 3){
					$('.trending-search-results').show();
				 }else{
					 $('.trending-search-results').hide();
				 }
			});
			$(this).find('.search-field').focusout(function() {
				//$('.trending-search-results').hide();
			});
			 $(this).find('.search-field').devbridgeAutocomplete({
				minChars        : 3,
				appendTo        : append,
				triggerSelectOnValidInput: false,
				serviceUrl      : serviceUrl,
				type            : 'POST',
				params 			: { 'product_cat' : product_cat,nonce: kapee_options.nonce },
				onSearchStart   : function () { 
					container.find('.search-submit').removeClass('kapee-spinner');
					container.find('.search-submit').addClass('kapee-spinner');
					$('.trending-search-results').hide();
				},
				/* onSelect        : function (suggestion) {
					if (suggestion.id != -1) {
						window.location.href = suggestion.url;
					} 						
				}, */
				onSearchComplete: function () { 
					container.find('.search-submit').removeClass('kapee-spinner');
				},
				beforeRender: function (container) {					
					$(container).removeAttr('style');
				},
				formatResult: function (suggestion, currentValue) {
					
						var pattern = '(' + $.Autocomplete.utils.escapeRegExChars(currentValue) + ')';
						var html = '';
						if (suggestion.id != -1) {
							html += '<a href="'+suggestion.url+'" title="'+ suggestion.value +'">';
						} 
						if(suggestion.img) html += '<img class="search-image" src="'+suggestion.img+'">';
						html += '<div class="search-name">'+suggestion.value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>')+'</div>';
						if(suggestion.price) html += '<span class="search-price">'+suggestion.price+'</span>';
						if(suggestion.rating) html += '<span class="search-rating">'+suggestion.rating+'</span>';
						if (suggestion.id != -1) {
							html += '</a>';
						} 
						return html;
					}
			});

			  if( search_categories.length ){
					var searchForm = $(this).find('.search-field').devbridgeAutocomplete();

					search_categories.on( 'change', function( e ){

						if( search_categories.val() != '' ) {
							product_cat = search_categories.val();
							searchForm.setOptions({
								params : { 'product_cat' : product_cat, nonce: kapee_options.nonce }
								
							});
						} else{
							searchForm.setOptions({
								params : { 'product_cat' : '', nonce: kapee_options.nonce }
							});
						}

						// update suggestions
						searchForm.hide();
						searchForm.onValueChange();
					});
				}
		 });
		 
		/* Hide .trending-search-results */
		$(document).mouseup(function (e){
			var container = $(".kapee-ajax-search");			
			if (!container.is(e.target) && container.has(e.target).length === 0){				
				$(".trending-search-results").hide();				
			}
		}); 
	};
	
	kapee.swapLoginSignupFrom = function () {
		/*
		* Swap Login Signup Form
		*/
		var userSignup 	= $('.new-signup');
		var userSignin	= $('.user-signin');
		
		userSignup.on('click', function(e) {
			e.preventDefault();	
			$('.customer-login').removeClass('active')
			$('.customer-signup').addClass('active');
			
		});
		userSignin.on('click', function(e) {
			e.preventDefault();
			$('.customer-signup').removeClass('active');
			$('.customer-login').addClass('active');
			
		});
	}
	
	kapee.userLoginSignupPopup = function () {
		/*
		* User Login Signup Popup
		*/

		if( !kapee_options.login_register_popup || $('body').hasClass('woocommerce-account') || $('body').hasClass('woocommerce-checkout') )  return false;
		
		$('.customer-signinup').magnificPopup({
			type: 'inline',
			preloader: false,			
			removalDelay: 500,
			items: {
				src: '#kapee-signin-up-popup' ,					
			},
			//mainClass: 'animated bounceIn',
			callbacks: {
				 beforeOpen: function() {
                //$('body').css('overflow', 'hidden');
            },
				open: function() {
					var closeSidebar 	= $('.kapee-mask-overaly');
					var mobileSidebar = $('.kapee-mobile-menu');
					closeSidebar.removeClass('opened');
					mobileSidebar.removeClass('opened');
					$('.kapee-signin-up-popup').addClass('animate__animated animate__fadeInLeft');
					//$('html').css('overflow', 'hidden').css('margin-right', '0');
				},
				beforeClose: function() {
						var popupWrap = $( '.kapee-signin-up-popup' );
						popupWrap.removeClass('animate__fadeInLeft').addClass('animate__fadeOutRight');
						 //$('body').css('overflow', 'auto');
					}, 
				close: function() {
					$('.kapee-signin-up-popup').removeClass('animate__animated animate__fadeOutRight');
					$('.kapee-signin-up-popup').find('.signin-up-error-message').remove();
					//$('html').css('overflow', 'auto').css('margin-right', '0');
				}
			} 
		});
		
		if( kapee_options.button_loader ){
			$(document).on('click', '#kapee-signin-up-popup .woocommerce-login-button .button', function(e) {			
				var $this = $(this);
				var $loginform = $this.closest('form');			
				$this.addClass('loading');
			});		
			$(document).on('click', '#kapee-signin-up-popup .woocommerce-form-register .woocommerce-Button.button', function(e) {			
				var $this = $(this),
				$regform = $this.closest('form');			
				$this.addClass('loading');		
			});	
		}		
	};
	
	kapee.miniCartWidget = function () {
		/*
		 * Mini Cart Widget Sidebar
		 */
		 
		if ( ! kapee_options.header_minicart_popup ) { return false; }

		var headerCart 		= $('.header-cart');
		var miniCartSidebar = $('.kapee-minicart-slide');
        var closeSidebar 	= $('.kapee-mask-overaly');
		var mobileSidebar 	= $('.kapee-mobile-menu');
		
		
		headerCart.on('click', function(e) {
			
			if( $('body').hasClass('woocommerce-cart') || $('body').hasClass('woocommerce-checkout') ) { return; };
			
			e.preventDefault();
			kapee.imagelazyload();
			if ( ! miniCartSidebar.hasClass('opened') ) {
				miniCartSidebar.addClass('opened');
				closeSidebar.addClass('opened');				
			}
			setTimeout(function(){
			 kapee.imagelazyload();
			}, 200);

			
		});
		
		kapee.$body.on('click', '.kapee-mask-overaly, .close-sidebar', function (e) {
			e.preventDefault();
			miniCartSidebar.removeClass('opened');
			closeSidebar.removeClass('opened');
			mobileSidebar.removeClass('opened');
		});	
		 
		kapee.$doc.keyup( function( e ) {
            if ( e.keyCode === 27 ) {
				miniCartSidebar.removeClass('opened');
				closeSidebar.removeClass('opened');
			}
        });
	};
	
	kapee.addToWishlist = function(){
		/*
		* Add wishlist loader
		*/
       kapee.$body.on("click", ".add_to_wishlist", function() {
			// Bootstrap tooltips hide
			var tooltip_hide = ('.yith-wcwl-add-to-wishlist a');			
			$(tooltip_hide).tooltip('hide');
			
            $(this).addClass("loading");
        });
	}
	
	kapee.wishlistCount = function(){
		/*
		* Ajax Count Wishlist Product
		*/
		
		var kapee_ajax_wishlist_count = function() {
			$.ajax({
				type: 'POST',
				url: yith_wcwl_l10n.ajax_url,
				data      : {
					action	: 'kapee_ajax_wishlist_count',
					nonce   : kapee_options.nonce,
				},
				beforeSend: function () {
				},
				complete  : function () {
				},			
				success   : function (data) {
					$('span.header-wishlist-count').html(data);
					kapee.tooltip();
				}
			});
		};
		$('body').on( 'added_to_wishlist removed_from_wishlist', kapee_ajax_wishlist_count );
	};
	
	kapee.addToCompare = function () {
		
		/*
		* Add to compare list
		*/
		var button = $("a.compare");

        kapee.$body.on("click", "a.compare", function() {
            $(this).addClass("loading");
        });

        kapee.$body.on("yith_woocompare_open_popup", function() {
            button.removeClass("loading");
            kapee.$body.addClass("compare-opened");
        });

        kapee.$body.on('click', '#cboxClose, #cboxOverlay', function() {
            kapee.$body.removeClass("compare-opened");
        });
	}
	
	kapee.removeToCompare = function () {
		/*
		* Remove to compare list
		*/
		kapee.$body.on("click", ".compare-list tr.remove a", function() {			
            $(this).addClass('loading');
        });
	}
	
	kapee.ProductLoopQuantityField = function () {
		/*
		* Product Quantity Field
		*/		
		
		$(".woocommerce .product-buttons").on("change input", ".quantity .qty", function () {
		  var add_to_cart_button = $(this).parents(".product").find(".add_to_cart_button");
		  add_to_cart_button.attr("data-quantity", $(this).val());
		});
		$(".woocommerce .product-buttons").on("keypress", ".quantity .qty", function (e) {
		  if ((e.which || e.keyCode) === 13) {
			$(this).parents(".product").find(".add_to_cart_button").trigger("click");
		  }
		});
	}
	
	kapee.compareCount = function(){
		/*
		 * Ajax Count Compare Product
		 */
		
		$('body').on( 'yith_woocompare_open_popup woocompare_open_popup_mod', function () {				
			$.ajax({
				type: 'POST',
				url: kapee_options.ajax_url,
				data      : {
					action: 'kapee_ajax_compare_count',
					nonce	: kapee_options.ajax_nonce,
				},
				beforeSend: function () { 
				},
				complete  : function () { 
				},	
				success: function (data) { 
					$('span.header-compare-count').html(data);
					kapee.tooltip();
				},
				error: function(errorThrown){
					//alert(errorThrown);
			   } 
			});
		});

		$(window).on('yith_woocompare_product_removed', function () {
			$('body').trigger('woocompare_open_popup_mod');
		});
		
		//Remove product in compare product widget
		$('.yith-woocompare-widget').on('click', 'li a.remove, a.clear-all', function (e) {

			e.preventDefault();
			var product_id = $(this).data('product_id');
			
			$.ajax({
				type: 'POST',
				url: kapee_options.ajax_url,
				data      : {
					action	: 'kapee_ajax_compare_count',
					nonce	: kapee_options.ajax_nonce,
					id		: product_id
				},
				beforeSend: function () { 
				},
				complete  : function () { 
				},	
				success: function (data) { 
					$('label.compare-count').html(data);
					kapee.tooltip();
				},
				error: function(errorThrown){
					//alert(errorThrown);
			   } 
			});

		});
	};
	
	kapee.addToCart = function () {
		/*
		 *  Adding to cart
		 */
		 $('body').on('added_to_cart', function(event, fragments, cart_hash) {
			if( $('.header-cart').length > 0 ) {
				if (kapee_options.product_open_cart_mini == '1') {
					$('.header-cart').trigger('click');
				}
			}
		 });
		 
		 $( document.body ).on( 'updated_cart_totals', function(){
			setTimeout(function(){
			 kapee.imagelazyload();
			}, 200);
		});
	};
	
	kapee.addToCartAjax = function () {
		/*
		 *  Adding to cart Ajax
		 */
		if ( ! kapee_options.product_add_to_cart_ajax ) { return; }
		
		$('.single_add_to_cart_button').addClass('single_add_to_cart_ajax_button');
		 kapee.$body.find('form.cart').on('click', '.single_add_to_cart_button', function (e) {
			 
			var $productWrapper = $(this).parents('.single-product-page');
            if ($productWrapper.hasClass('product-type-external')) return;          

            var $form = $(this).closest('form.cart'),
                $singleBtn =  $(this),
				product_id = $form.find('input[name=add-to-cart]').val() || $singleBtn.val();
			if ($singleBtn.hasClass('disabled')) {
				return;
			}
            if ($singleBtn.hasClass('quick-buy-proceed')) {
				return;
			}
			if ($form.length > 0) {
                e.preventDefault();
            } else {
                return;
            }
			var data = {
				action			: 'kapee_ajax_add_to_cart',
				'add-to-cart'	: product_id,
				nonce   		: kapee_options.nonce,
			};

			$form.serializeArray().forEach(function (element) {
				data[element.name] = element.value;
			});
			if ($singleBtn.hasClass('loading')) {
				return;
			}
			$singleBtn.addClass('loading');
			
			$(document.body).trigger('adding_to_cart', [$singleBtn, data]);
			$.ajax({
				type: 'post',
				url: kapee_options.ajax_url,
				data: data,
				beforeSend: function (response) {
					$singleBtn.removeClass('added').removeClass('not-added');
				},
				success: function (response) {
					if (response.error & response.product_url) {
					  window.location = response.product_url;
					  return;
					} else {
						if (typeof wc_add_to_cart_params !== 'undefined') {
							if (wc_add_to_cart_params.cart_redirect_after_add === 'yes') {
								window.location = wc_add_to_cart_params.cart_url;
								return;
							}
						}					
						
						// Show notices
                        if( response.notices.indexOf( 'error' ) > 0 ) {
                            $('.woocommerce-notices-wrapper').empty().append(response.notices);
							$singleBtn.addClass('not-added').removeClass('loading');
                        } else {
                            if (kapee_options.product_open_cart_mini == '1') {
								$('.header-cart').trigger('click');
							}
							$singleBtn.addClass('added').removeClass('loading');
                            $(document.body).trigger('added_to_cart', [response.fragments, response.cart_hash, $singleBtn]);
                        }
						
					}
				},
			});
			
		});
	};
	
	kapee.stickyAddToCart = function(){
		/*
		* Sticky Add To Cart Bottom Button
		*/	
		
		if ( ! $('body').hasClass( 'single-product' ) || $('.kapee-sticky-add-to-cart').length == 0 || $(window).width() < 992 || $('.entry-summary form .single_add_to_cart_button').length == 0 ) {
			return;
		}
		
		$('body').on( 'click', '.kapee-sticky-add-to-cart .button', function (event) {
			event.preventDefault();			
			if( $(this).hasClass('variable') || $(this).hasClass('grouped') ){				
				$('html, body').animate({
					scrollTop: $(".variations").offset().top - 70
				}, 1000);
			}else{
				$(this).addClass('loading');
				$( '.entry-summary .single_add_to_cart_button' ).click();
				event.stopPropagation();				
			}
		});
		
		$(document.body).on( 'added_to_cart', function () {			
			$('.kapee-sticky-add-to-cart .button').removeClass('loading');
		});
		
		var cartButtonOffset = $('.entry-summary form .single_add_to_cart_button').offset().top;
		
		$(window).scroll(function(e) {			
			var documentHeight = $(document).height();
			var windowHeight = $(this).height();
			var scrollTop = $(this).scrollTop();
			var bottomscroll = parseInt( windowHeight + scrollTop ) + 100;
			
			if ( scrollTop > cartButtonOffset ) {
				$('.kapee-sticky-add-to-cart').slideDown();
				$('.kapee-back-to-top').addClass('sticky-add-cart');
			} else if ( scrollTop < cartButtonOffset) {
				$('.kapee-sticky-add-to-cart').slideUp(); //Hide on bottom
				$('.kapee-back-to-top').removeClass('sticky-add-cart');
			}
		});
		/* $(window).scroll(function(e) {			
			var documentHeight = $(document).height();
			var windowHeight = $(this).height();
			var scrollTop = $(this).scrollTop();
			var bottomscroll = parseInt( windowHeight + scrollTop ) + 100;
			
			if ( scrollTop > cartButtonOffset && bottomscroll < documentHeight && bottomscroll !== documentHeight ) {
				$('.kapee-sticky-add-to-cart').slideDown();
				$('.kapee-back-to-top').addClass('sticky-add-cart');
			} else if ( scrollTop < cartButtonOffset || bottomscroll > documentHeight || bottomscroll === documentHeight ) {
				$('.kapee-sticky-add-to-cart').slideUp(); //Hide on bottom
				$('.kapee-back-to-top').removeClass('sticky-add-cart');
			}
		}); */
		
	};
	
	kapee.productQuickView = function () {
		/*
		* Product Quickview
		*/
		kapee.$doc.on("click", ".quickview-btn", function(e) {
            e.preventDefault();
			var $btn = $(this),pid;
			if($btn.hasClass('loading')) return;
			$btn.addClass('loading');
			var pid           = $btn.attr( 'data-id' );
			$.ajax( {
				url    : kapee_options.ajax_url,
				data   : {
					action	: 'kapee_product_quick_view',
					pid   	: pid,
					nonce   : kapee_options.nonce,
				},
				timeout: 10000,
				success: function( response ) {
					$.magnificPopup.open({
						alignTop: true,
						removalDelay: 500,
						overflowY: 'scroll',
						items: {
						  src: '<div class="animate__animated animate__fadeInLeft kapee-quick-view woocommerce">' + response + '</div>', 
						  type: 'inline'
						},
						callbacks: {
							open: function () {
														
							},
							close: function () {
								kapee.singlePageSwatch();
							},
							beforeClose: function() {
								var quickViewWrap = $( '.kapee-quick-view' );
								quickViewWrap.addClass('animate__fadeOutRight');
							},
						},
					});
					
					if( $('.woocommerce-product-gallery').find( '.single-product-gallery' ).length > 0 ) {
						$( '.single-product-gallery' ).not( '.slick-initialized' ).slick({
							slidesToShow	: 1,
							slidesToScroll	: 1,
							rtl				: ( kapee.isCheckRTL() ) ? true : false,
						});
					}
					$('.woocommerce-product-gallery__image a').on('click', function(e){
						e.preventDefault();
					});
					setTimeout(function() {
						var form_variation = $( '.product-quick-view' ).find( '.variations_form' );
						if ( form_variation.length > 0 ) {
							form_variation.trigger( 'check_variations' );
							form_variation.trigger( 'reset_image' );						
							form_variation.wc_variation_form();
							form_variation.find( 'select' ).change();
							kapee.singlePageSwatch();							
						}
					}, 1000);
					
					
					$btn.removeClass( 'loading' );
					
					kapee.addToCartAjax();
					kapee.productQuickShop();
					kapee.tooltip();
					kapee.imagelazyload();
					
				},
				error  : function( error ) {
					console.log( error );
					$btn.removeClass( 'loading' );
				},

			} );
        });
	}
	
	kapee.productShowFilter = function () {
		$('.product-show .show-number').on('change', function () {
			 if ( !kapee.$body.hasClass('kapee-catalog-ajax-filter') ) {
				$( this ).closest( 'form' ).submit();
			}
      });
	}
	
	// Get price js slider
	kapee.priceSlider = function () {
		// woocommerce_price_slider_params is required to continue, ensure the object exists
		if (typeof woocommerce_price_slider_params === 'undefined') {
			return false;
		}
		
		if (!$('#main-content').find('.widget_price_filter').length) {
			return false;
		}
		
		// Get markup ready for slider
		$('input#min_price, input#max_price').hide();
		$('.price_slider, .price_label').show();

		// Price slider uses jquery ui
		var min_price = $('.price_slider_amount #min_price').data('min'),
			max_price = $('.price_slider_amount #max_price').data('max'),
			current_min_price = parseInt(min_price, 10),
			current_max_price = parseInt(max_price, 10);

		if ($('.price_slider_amount #min_price').val() != '') {
			current_min_price = parseInt($('.price_slider_amount #min_price').val(), 10);
		}
		if ($('.price_slider_amount #max_price').val() != '') {
			current_max_price = parseInt($('.price_slider_amount #max_price').val(), 10);
		}

		$(document.body).on('price_slider_create price_slider_slide', function (event, min, max) {
			if (woocommerce_price_slider_params.currency_pos === 'left') {

				$('.price_slider_amount span.from').html(woocommerce_price_slider_params.currency_symbol + min);
				$('.price_slider_amount span.to').html(woocommerce_price_slider_params.currency_symbol + max);

			} else if (woocommerce_price_slider_params.currency_pos === 'left_space') {

				$('.price_slider_amount span.from').html(woocommerce_price_slider_params.currency_symbol + ' ' + min);
				$('.price_slider_amount span.to').html(woocommerce_price_slider_params.currency_symbol + ' ' + max);

			} else if (woocommerce_price_slider_params.currency_pos === 'right') {

				$('.price_slider_amount span.from').html(min + woocommerce_price_slider_params.currency_symbol);
				$('.price_slider_amount span.to').html(max + woocommerce_price_slider_params.currency_symbol);

			} else if (woocommerce_price_slider_params.currency_pos === 'right_space') {

				$('.price_slider_amount span.from').html(min + ' ' + woocommerce_price_slider_params.currency_symbol);
				$('.price_slider_amount span.to').html(max + ' ' + woocommerce_price_slider_params.currency_symbol);

			}

			$(document.body).trigger('price_slider_updated', [min, max]);
		});
		if ( typeof $.fn.slider !== 'undefined' ) {
			$('.price_slider').slider({
				range  : true,
				animate: true,
				min    : min_price,
				max    : max_price,
				values : [current_min_price, current_max_price],
				create : function () {

					$('.price_slider_amount #min_price').val(current_min_price);
					$('.price_slider_amount #max_price').val(current_max_price);

					$(document.body).trigger('price_slider_create', [current_min_price, current_max_price]);
				},
				slide  : function (event, ui) {

					$('input#min_price').val(ui.values[0]);
					$('input#max_price').val(ui.values[1]);

					$(document.body).trigger('price_slider_slide', [ui.values[0], ui.values[1]]);
				},
				change : function (event, ui) {

					$(document.body).trigger('price_slider_change', [ui.values[0], ui.values[1]]);
				}
			});
		}
	};
	
	kapee.productShowHideFilters = function () {
		$('.archive.woocommerce').on('click','.kapee-product-filter-btn',function(e) {
			var $this = $(this),
			filter_content = $('#kapee-filter-widgets');
			$this.toggleClass("active");
			filter_content.toggleClass('active');
			filter_content.slideToggle('slow');			
      });
	}
	
	kapee.productFilterAjax = function () {
		if (!kapee.$body.hasClass('kapee-catalog-ajax-filter')) {
			return;
		}
		/* Price range filter*/
		$(document.body).on('price_slider_change', function (event, ui) {
			var form = $('.price_slider').closest('form').get(0),
			$form = $(form),
			url = $form.attr('action') + '?' + $form.serialize();
			$(document.body).trigger('kapee_shop_filter_ajax', url, $(this));
		});
		kapee.$body.on('click', '.widget_product_categories ul a, .widget_rating_filter ul a, .widget_layered_nav_filters ul a, .widget_product_tag_cloud a', function (e) {
            e.preventDefault();
            var url = $(this).attr('href');
            $(document.body).trigger('kapee_shop_filter_ajax', url, $(this));
        });
		kapee.$body.on('click','.products-view a',function(e) {			
			e.preventDefault();
			var $this = $(this),
			url = $this.attr('href');			
			$this.siblings().removeClass("active");
			$this.addClass('active');
			$(document.body).trigger('kapee_shop_filter_ajax', url, $this);
		});
		
		/* Shop paginataion filter*/
		$('.archive.woocommerce').on('change','.product-show .show-number',function(e) {			
			e.stopPropagation();
			var $this = $(this);
			var url = window.location.href.replace(/&per_page(=[^&]*)?|^per_page(=[^&]*)?&?/g, '').replace(/\?per_page(=[^&]*)?|^per_page(=[^&]*)?&?/g, '?').replace(/\?$/g, '');

			if (url.indexOf('?') !== -1) {
				url = url + ('&per_page=' + $this.val());
			} else {
				url = url + ('?per_page=' + $this.val());
			}			
			$(document.body).trigger('kapee_shop_filter_ajax', url, $this);
		});
		
		/* Shop paginataion filter*/
		$( document ).on( 'click', '.kapee-pagination .page-numbers:not(.current)', function(e) {
			e.preventDefault();
			var $this = $(this);
			var url = $this.attr('href');
			
			$(document.body).trigger('kapee_shop_filter_ajax', url, $this);
		});
		
		$('.archive.woocommerce').find('.woocommerce-ordering').off('change');
		$('.archive.woocommerce').on('change','.woocommerce-ordering',function(e) {
			var $this = $(this);
			var $select = $(e.currentTarget).find('.orderby');
			var url = window.location.href.replace(/&orderby(=[^&]*)?|^orderby(=[^&]*)?&?/g, '').replace(/\?orderby(=[^&]*)?|^orderby(=[^&]*)?&?/g, '?').replace(/\?$/g, '');

			if (url.indexOf('?') !== -1) {
				url = url + ('&orderby=' + $select.val());
			} else {
				url = url + ('?orderby=' + $select.val());
			}
			$(document.body).trigger('kapee_shop_filter_ajax', url, $this);
		});
		
				
		/* Sorting filter*/
		$('.archive.woocommerce').on('click','.kapee_widget_product_sorting li',function(e) {
			e.preventDefault();
			var $this = $(this);
			var element = $this.find('a');
			var url = $this.find('a').attr('href');
			$this.siblings().removeClass("chosen");
			if($this.hasClass('chosen')){
                $this.removeClass('chosen');
            }else{
                $this.addClass('chosen');
            };
			
			$(document.body).trigger('kapee_shop_filter_ajax', url, element);
			
		});
		/* Clear filter*/
		$('.archive.woocommerce').on('click','.widget_layered_nav_filters a, .kapee-clear-filters-wrapp a',function(e) {
			e.preventDefault();
			var $this = $(this);
			
			var url = $this.attr('href');
			
			$(document.body).trigger('kapee_shop_filter_ajax', url, $this);
			
		});
		/* Attribute/Rating filter*/
		$('.archive.woocommerce').on('click','.widget_layered_nav li,.widget_rating_filter li,.widget_layered_nav_filters li',function(e) {
			e.preventDefault();
			var $this = $(this);
			var element = $this.find('a');
			var url = $this.find('a').attr('href');
			
			if($this.hasClass('chosen')){
                $this.removeClass('chosen');
            }else{
                $this.addClass('chosen');
            };
			
			$(document.body).trigger('kapee_shop_filter_ajax', url, element);
			
		});
		
		$(document.body).on('kapee_shop_filter_ajax', function (e, url, element) {

			var $page_title = $('#page-title'),
				$product_container = $('#main-content .products-wrap'),
			    $main_content = $('#main-content');
				
			$('#kapee-filter-widgets').slideUp(200);
			if ($product_container.length > 0) {
				var position = $('.products').offset().top - 200;
				$('html, body').stop().animate({
						scrollTop: position
					},
					1200
				);
			}
			
			if ('?' == url.slice(-1)) {
				url = url.slice(0, -1);
			}

			url = url.replace(/%2C/g, ',');

			history.pushState(null, null, url);

			$(document.body).trigger('kapee_ajax_filter_before_send_request', [url, element]);

			if (kapee.ajaxXHR) {
				kapee.ajaxXHR.abort();
			}
	
			kapee.ajaxXHR = $.get(url, function (res) {
				//$main_content.replaceWith($(res).find('#main-content'));
               $page_title.replaceWith($(res).find('#page-title').clone());
				var content_res = $(res).find('#main-content').html(),
				page_title_res = $(res).find('#page-title').html();
				$main_content.html('').append(content_res);
				//$page_title.html('').append(page_title_res);
				$(document.body).trigger('kapee_ajax_filter_request_end', [res, url]);
			}, 'html');
		});
		
		$(document.body).on('kapee_ajax_filter_before_send_request', function () {
			
			var $product_container = $('#main-content .products-wrap');
			if( kapee_options.skeleton_effect ){
				$product_container.parent().addClass('kapee-skeleton');
			}else{
					$product_container.addClass('products_overlay');
				$product_container.append('<div class="kapee_product_loading loading"></div>');
			}
			$('#secondary').removeClass('opened');
			$('.kapee-mask-overaly').removeClass('opened');
			
		});
		
		$(document.body).on('kapee_ajax_filter_request_end', function () {
			kapee.priceSlider();
			kapee.kapeeOwlCarousel();
			kapee.initAjaxLoad();
			kapee.tooltip();
			kapee.imagelazyload();
			kapee.widgetToggle();
			kapee.widgetMenuToggle();
			kapee.widgetMaxLimitItem();
			kapee.canvasSidebar();
			kapee.stickySidebar();
			kapee.swatchInLoop();
			kapee.productQuickView();
			kapee.ProductLoopQuantityField();
			kapee.addToCompare();
			$(document).trigger('yith_wcwl_reload_fragments'); /* Fixed wishlist icon afer ajax*/
			$('.kapee-mask-overaly').removeClass('opened');
		});
	}
	
	kapee.productHover = function (){
		/*
		* productHover
		*/
		$('.product-style-4.grid-view .product').mouseenter(function(){
			var product_elemnt = $(this);
			var  product_info_elemnt = product_elemnt.find('.product-info');
			var variations_elemnt = product_elemnt.find('.product-variations');
			var variations_height = variations_elemnt.height();			
			if(variations_height && variations_height > 0){				
				product_info_elemnt.css('transform', 'translate3d(0px, -'+variations_height+'px, 0px)');
			} 
		}).mouseleave(function(){
			var product_elemnt = $(this);
			var  product_info_elemnt = product_elemnt.find('.product-info');
			if(product_info_elemnt){
				product_info_elemnt.css('transform', 'translate3d(0px, 0px, 0px)');
			}
			
		});
	};
	
	kapee.productSwatch = function(){
		this.singlePageSwatch();
		this.swatchInLoop();
	}
	kapee.singlePageSwatch = function () {
		
		var variationForm;
		if( kapee.$doc.find( '.kapee-quick-view form.kapee-swatches-wrap.variations_form' ).length && !kapee.$doc.find( '.kapee-quick-view' ).hasClass( 'animate__fadeOutRight' ) ){
			variationForm 	= kapee.$doc.find( '.kapee-quick-view form.kapee-swatches-wrap.variations_form' );
		}else{
			variationForm 	= kapee.$doc.find( 'form.kapee-swatches-wrap.variations_form' );
		}
		var self 			= this,					
			$term 			= variationForm.find( '.swatch-term' ),
			$activeTerm 	= variationForm.find( '.swatch-term:not(.swatch-disabled)' );
		self.$swatchForm	= variationForm;
		
		$activeTerm.off( 'click' ).on( 'click', function () {

			var $this 		= $( this ),
				term 		= $this.attr( 'data-term' ),
				attr 		= $this.parent().attr( 'data-attribute' ),
				$selectbox 	= self.$swatchForm.find( 'select#' + attr );

			if ( $this.hasClass( 'swatch-disabled' ) ) {
				return false;
			}

			$selectbox.val( term ).trigger( 'change' );
			$this.closest('.kapee-swatches').find( '.swatch-selected' ).removeClass( 'swatch-selected' );
			$this.addClass( 'swatch-selected' );
		} );

		self.$swatchForm.on( 'woocommerce_update_variation_values',
			function () {
				
				self.$swatchForm.find( 'select' ).each( function () {
					var $this 		= $( this );
					var $swatch 	= $this.parent().parent().find( '.kapee-swatches' );
					
					$swatch.find( '.swatch-term' ).removeClass( 'swatch-enabled' ).addClass( 'swatch-disabled' );

					$this.find( 'option.enabled' ).each( function () {
						var val 	= $( this ).val();
						$swatch.find(
							'.swatch-term[data-term="' + val + '"]' ).removeClass( 'swatch-disabled' ).addClass( 'swatch-enabled' );
					} );
				} );
			} );

		self.$swatchForm.on( 'reset_data', function () {
			
		// load default value
		$term.each( function () {
			var $this = $( this ),
				term = $this.attr( 'data-term' ),
				attr = $this.parent().attr( 'data-attribute' ),
				$selectbox = self.$swatchForm.find( 'select#' + attr ),
				val = $selectbox.val();				
			if ( val != '' && term == val ) {				
				$( this ).addClass( 'swatch-selected' );
			}else{
				$( this ).removeClass( 'swatch-selected' );
			}
		} );
		
		} );

	}
	kapee.swatchInLoop = function(){
		var self 			= this,
		swatchesInLoop 		= kapee.$doc.find( 'div.kapee-swatches-wrap' );
		self.$swatches 		= swatchesInLoop;
		self.$swatches.each( function () {
			var $swatches 	= $( this ),
			$term 			= $swatches.find(
				'.swatch-term:not(.swatch-disabled)' ),
			$resetBtn 		= $swatches.find(
				'.reset_variations--loop' ),
			$product 		= $swatches.closest('.product'),
			variationData 	= $.parseJSON(
			$swatches.attr( 'data-product_variations' ) );
			
			if ( $swatches.find( '.kapee-swatches' ).length == 0 ) {
				$swatches.addClass( 'swatch-empty' );
			}
			
			$term.unbind( 'click' ).on( 'click', function () {

				var $this = $( this );

				if ( $this.hasClass( 'swatch-disabled' ) ) {
					return false;
				}

				var term = $this.attr( 'data-term' );				
				
				$product.find( '.swatch-term' ).removeClass( 'swatch-disabled swatch-enabled' );
				$this.parent().find( '.swatch-term.swatch-selected' ).removeClass( 'swatch-selected' );

				if ( $this.hasClass( 'swatch-selected' ) ) {
					$this.parent().removeClass( 'swatch-activated' );
					$product.removeClass( 'swatch-product-swatched' );

					if ( !$product.find( '.swatch-selected' ).length ) {
						$resetBtn.trigger( 'click' );
					}
				} else {
					$this.parent().addClass( 'swatch-activated' );
					$this.addClass( 'swatch-selected' );

					$product.addClass( 'swatch-product-swatched' );
					//$resetBtn.show();
				}
				
				var attributes 			= self.getChosenAttributes(
					$swatches ),
					currentAttributes 	= attributes.data;
				if ( attributes.count === attributes.chosenCount ) {
					self.updateAttributes( $swatches, variationData );

					var matching_variations = self.findMatchingVariations(
						variationData, currentAttributes ),
						variation = matching_variations.shift();

					if ( variation ) {
						// Found variation
						self.foundVariation( $swatches, variation );
					} else {
						
						$resetBtn.trigger( 'click' );
					}
				} else {
					
					self.updateAttributes( $swatches, variationData );
				} 

			} );
			
			$resetBtn.unbind( 'click' ).on( 'click', function () {

				$product.removeClass( 'swatch-product-swatched' );

				$swatches.removeAttr( 'data-variation_id' );
				$swatches.find( '.swatch-swatch' ).removeClass( 'swatch-activated' );
				$swatches.find( '.swatch-term' ).removeClass(
					'swatch-enabled swatch-disabled swatch-selected' );
				
				// reset image
				self.variationsImageUpdate( false, $product );

				$( this ).hide();

				return false;
			} );					
		});
	};
	
	kapee.getChosenAttributes = function ( $swatches ) {

		var data = {},
			count = 0,
			chosen = 0,
			$swatch = $swatches.find( '.kapee-swatches' );

		$swatch.each( function () {
				var attribute_name = 'attribute_' +
						$( this ).attr( 'data-attribute' ),
					value = $( this ).find( '.swatch-term.swatch-selected' ).attr( 'data-term' ) || '';

				if ( value.length > 0 ) {
					chosen++;
				}

				count++;
				data[ attribute_name ] = value;
			//}
		} );

		return {
			'count': count,
			'chosenCount': chosen,
			'data': data,
		};
	}
	
	kapee.updateAttributes = function ( $swatches, variationData ) {

		var self = this,
			attributes = self.getChosenAttributes( $swatches ),
			currentAttributes = attributes.data,
			available_options_count = 0,
			$swatch = $swatches.find( '.kapee-swatches' );

		$swatch.each( function ( idx, el ) {

			var current_attr_sw = $( el ),
				current_attr_name = 'attribute_' +
					current_attr_sw.attr(
						'data-attribute' ),
				selected_attr_val = current_attr_sw.find(
					'.swatch-term.swatch-selected' ).attr( 'data-term' ),
				selected_attr_val_valid = true,
				checkAttributes = $.extend( true, {},
					currentAttributes );
			
			checkAttributes[ current_attr_name ] = '';
			
			var variations = self.findMatchingVariations(
				variationData, checkAttributes );
			
			// Loop through variations.
			for (var num in variations) {
				if ( typeof variations[ num ] !== 'undefined' ) {
					var variationAttributes = variations[ num ].attributes;

					for (var attr_name in variationAttributes) {
						if ( variationAttributes.hasOwnProperty(
								attr_name ) ) {
							var attr_val = variationAttributes[ attr_name ],
								variation_active = '';
							
							if ( attr_name === current_attr_name ) {
								if ( variations[ num ].variation_is_active ) {
									variation_active = 'enabled';
								}
								
								if ( attr_val ) {
									// available
									current_attr_sw.find(
										'.swatch-term[data-term="' + attr_val + '"]' ).addClass( 'swatch-' + variation_active );
								}
								else {
									// apply for all swatches
									current_attr_sw.find( '.swatch-term' ).addClass( 'swatch-' + variation_active );
								}
							}
						}
					}
				}
			}

			available_options_count = current_attr_sw.find(
				'.swatch-term.swatch-enabled' ).length;

			if ( selected_attr_val && (
					available_options_count === 0 || current_attr_sw.find(
						'.swatch-term.swatch-enabled[data-term="' +
						self.addSlashes( selected_attr_val ) + '"]' ).length ===
					0
				) ) {
				selected_attr_val_valid = false;
			}

			// Disable terms not available
			current_attr_sw.find( '.swatch-term:not(.swatch-enabled)' ).addClass( 'swatch-disabled' );

			// Choose selected value.
			if ( selected_attr_val ) {
				// If the previously selected value is no longer available,
				// fall back to the placeholder (it's going to be there).
				if ( !selected_attr_val_valid ) {
					current_attr_sw.find( '.swatch-term.swatch-selected' ).removeClass( 'swatch-selected' );
				}
			}
			else {
				current_attr_sw.find( '.swatch-term.swatch-selected' ).removeClass( 'swatch-selected' );
			}
		} );
	}
	
	kapee.addSlashes = function ( string ) {
		string = string.replace( /'/g, '\\\'' );
		string = string.replace( /"/g, '\\\"' );
		return string;
	}

	kapee.findMatchingVariations = function ( variationData, settings ) {
		var matching = [];
		for (var i = 0; i < variationData.length; i++) {
			var variation = variationData[ i ];

			if ( this.isMatch( variation.attributes, settings ) ) {
				matching.push( variation );
			}
		}
		return matching;
	}

	kapee.isMatch = function ( variation_attributes, attributes ) {
		var match = true;
		for (var attr_name in variation_attributes) {
			if ( variation_attributes.hasOwnProperty( attr_name ) ) {
				var val1 = variation_attributes[ attr_name ];
				var val2 = attributes[ attr_name ];
				if ( val1 !== undefined && val2 !== undefined &&
					val1.length !== 0 && val2.length !== 0 &&
					val1 !== val2 ) {
					match = false;
				}
			}
		}
		return match;
	}

	kapee.foundVariation = function ( $swatches, variation ) {

		var self = this,
		$product = $swatches.closest( '.product' );
		// add variation id
		$swatches.attr( 'data-variation_id', variation.variation_id );

		// update image
		self.variationsImageUpdate( variation, $product );
		
	}

	/**
	 * Stores a default attribute for an element so it can be reset later
	 */
	kapee.setVariationAttr = function ( $el, attr, value ) {
		if ( undefined === $el.attr( 'data-o_' + attr ) ) {
			$el.attr( 'data-o_' + attr, (
				!$el.attr( attr )
			) ? '' : $el.attr( attr ) );
		}
		if ( false === value ) {
			$el.removeAttr( attr );
		}
		else {
			$el.attr( attr, value );
		}
	}

	/**
	 * Reset a default attribute for an element so it can be reset later
	 */
	kapee.resetVariationAttr = function ( $el, attr ) {
		if ( undefined !== $el.attr( 'data-o_' + attr ) ) {
			$el.attr( attr, $el.attr( 'data-o_' + attr ) );
		}
	}

	kapee.variationsImageUpdate = function ( variation, $product ) { 

		var self = this,
			$product_img = $product.find( 'img.front-image' );
		
		if ( variation && variation.image_src && variation.image.src && variation.image_src.length > 1 ) {			
			self.setVariationAttr( $product_img, 'src',
				variation.image_src[ 0 ] );
			self.setVariationAttr( $product_img, 'srcset',
				variation.image_srcset );
			self.setVariationAttr( $product_img, 'sizes',
				variation.image_sizes );
		} else {
			self.resetVariationAttr( $product_img, 'src' );
			self.resetVariationAttr( $product_img, 'srcset' );
			self.resetVariationAttr( $product_img, 'sizes' );
		}
	}
	
	kapee.variationsImageChange = function(){
		/**
		 * Sets product images for the chosen variation
		 */
		$.fn.wc_variations_image_update = function( variation ) {
			var $form             = this,
				$product          = $form.closest( '.product' ),
				$product_gallery  = $product.find( '.images' ),
				$gallery_img      = $product.find( '.single-product-thumbnails .slick-slide[data-slick-index="0"] img' ),
				$product_img_wrap = $product_gallery.find( '.woocommerce-product-gallery__image, .woocommerce-product-gallery__image--placeholder' ).eq( 0 ),
				$product_img      = $product_img_wrap.find( '.wp-post-image' ),
				$product_link     = $product_img_wrap.find( 'a' ).eq( 0 );

			if ( variation && variation.image && variation.image.src && variation.image.src.length > 1 ) {
				$product_img.wc_set_variation_attr( 'src', variation.image.src );
				$product_img.wc_set_variation_attr( 'height', variation.image.src_h );
				$product_img.wc_set_variation_attr( 'width', variation.image.src_w );
				$product_img.wc_set_variation_attr( 'srcset', variation.image.srcset );
				$product_img.wc_set_variation_attr( 'sizes', variation.image.sizes );
				$product_img.wc_set_variation_attr( 'title', variation.image.title );
				$product_img.wc_set_variation_attr( 'alt', variation.image.alt );
				$product_img.wc_set_variation_attr( 'data-src', variation.image.full_src );
				$product_img.wc_set_variation_attr( 'data-large_image', variation.image.full_src );
				$product_img.wc_set_variation_attr( 'data-large_image_width', variation.image.full_src_w );
				$product_img.wc_set_variation_attr( 'data-large_image_height', variation.image.full_src_h );
				$product_img_wrap.wc_set_variation_attr( 'data-thumb', variation.image.src );
				$gallery_img.wc_set_variation_attr( 'src', variation.image.gallery_thumbnail_src );
				$gallery_img.wc_set_variation_attr( 'srcset', variation.image.gallery_thumbnail_src );
				$product_link.wc_set_variation_attr( 'href', variation.image.full_src );
			} else {
				$product_img.wc_reset_variation_attr( 'src' );
				$product_img.wc_reset_variation_attr( 'width' );
				$product_img.wc_reset_variation_attr( 'height' );
				$product_img.wc_reset_variation_attr( 'srcset' );
				$product_img.wc_reset_variation_attr( 'sizes' );
				$product_img.wc_reset_variation_attr( 'title' );
				$product_img.wc_reset_variation_attr( 'alt' );
				$product_img.wc_reset_variation_attr( 'data-src' );
				$product_img.wc_reset_variation_attr( 'data-large_image' );
				$product_img.wc_reset_variation_attr( 'data-large_image_width' );
				$product_img.wc_reset_variation_attr( 'data-large_image_height' );
				$product_img_wrap.wc_reset_variation_attr( 'data-thumb' );
				$gallery_img.wc_reset_variation_attr( 'src' );
				$gallery_img.wc_reset_variation_attr( 'srcset' );
				$product_link.wc_reset_variation_attr( 'href' );
			}
			
			window.setTimeout( function() {
				//$product_gallery.trigger( 'woocommerce_gallery_init_zoom' );
				$form.wc_maybe_trigger_slide_position_reset( variation );
				kapee.productImageZoom();
				$( window ).trigger( 'resize' );
			}, 20 );
		};
	};
	
	kapee.initAjaxLoad = function(){ 
		var button = $( '.kapee-ajax-load' );

		button.each( function( i, val ) {
			var _option = $( this ).data();
			
			if ( _option !== undefined ) {
				var page      = _option.total_page,
					container = _option.container,
					container_element = _option.container_element,
					layout    = _option.layout,
					load_more_label    = _option.load_more_label,
					loading_finished_msg    = _option.loading_finished_msg,
					loading_msg    = kapee_options.js_translate_text.loading_txt,					
					isLoading = false,
					anchor    = $( val ).find( 'a' ),
					next      = $( anchor ).attr( 'href' ),
					i         = 2;

				if ( layout == 'load-more-button' ) {
					$( val ).on( 'click', 'a', function( e ) {
						e.preventDefault();
						anchor = $( val ).find( 'a' );
						next   = $( anchor ).attr( 'href' );

						$( anchor ).html( '<span class="loading"> '+loading_msg+'</span>' );
						
						getData();
					});
				}  else if( layout == 'infinity-scroll' ) {
					var waiting = false,
						endScrollHandle;
						kapee.$window.on('scroll', function () {
							
							if (kapee.$body.find('.infinity-scroll').is(':in-viewport')) {
								
								kapee.$body.find('.infinity-scroll a').trigger('click');
							}
						}).trigger('scroll');
						
						kapee.$body.on('click', '.kapee-pagination a.button', function (e) {
							if ( waiting ) {
								return;
							}
							waiting = true;
							e.preventDefault();
							
							var $el = $(this);
							$el.html( '<span class="loading"> '+loading_msg+'</span>' );
							if ($el.data('requestRunning')) {
								return;
							}

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

							var $pagination = $el.closest('.kapee-pagination'),								
								container = _option.container,
								container_element = _option.container_element,
								$products = $pagination.prev('.'+container),
								href = $el.attr('href');
							
							
							$.get(
								href,
								function (response) {
									
									var content = $(response).find('#primary .'+ container).children('.'+container_element),
										$pagination_html = $(response).find('.kapee-pagination').html();

									$pagination.html($pagination_html);

									if ($('.masonry-grid').length > 0) {
							
										$products.append(content).isotope( 'appended', content );
										$products.imagesLoaded().progress(function() {
											$products.isotope('layout');
										});
									
									}else{
										$products.append(content);
									}
						
									$pagination.find('a').data('requestRunning', false);
									waiting = false;
									kapee.initMagnaficPopup();
									//kapee.priceSlider();
									kapee.kapeeOwlCarousel();
									kapee.tooltip();
									kapee.imagelazyload();
									kapee.widgetToggle();
									kapee.widgetMenuToggle();
									kapee.widgetMaxLimitItem();
									kapee.canvasSidebar();
									kapee.stickySidebar();
									kapee.swatchInLoop();
									kapee.productQuickView();
									kapee.ProductLoopQuantityField();
									kapee.addToCompare();
									$(document.body).trigger('kapee_shop_ajax_loading_end');
								}
							);
						});
					/* var animationFrame = function() {
						anchor = $( val ).find( 'a' );
						next   = $( anchor ).attr( 'href' );

						var bottomOffset = $( '.' + container ).offset().top + $( '.' + container ).height() - $( window ).scrollTop();

						if ( bottomOffset < window.innerHeight && bottomOffset > 0 && ! isLoading ) {
							if ( ! next )
								return;
							isLoading = true;
							if ( page >= i ) {
								$( anchor ).html( '<span class="loading"> '+loading_msg+'</span>' );
								getData();
							}
						}
					}

					var scrollHandler = function() {
						requestAnimationFrame( animationFrame );
					};

					$( window ).scroll( scrollHandler ); */
				} 
				var getData = function() {
					$.get( next + '', function( data ) {
						var content    = $( '.' + container, data ).wrapInner( '' ).html(),
							newElement = $( '.' + container, data ).find( '.' + container_element );
						next = $( anchor, data ).attr( 'href' );
						if ($('.masonry-grid').length > 0) {
							
							$( '.'+ container ).append(newElement).isotope( 'appended', newElement );
						$( '.'+ container ).imagesLoaded().progress(function() {
							$( '.'+ container ).isotope('layout');
						});
						
						}else{
							$( '.' + container ).append(newElement);
						}
						$( anchor ).text( load_more_label );

						if ( page > i ) {
							if ( kapee_options.permalink == 'plain' ) {
								var link = next.replace( /paged=+[0-9]+/gi, 'paged=' + ( i + 1 ) );
							} else {
								var link = next.replace( /page\/+[0-9]+\//gi, 'page/' + ( i + 1 ) + '/' );
							}

							$( anchor ).attr( 'href', link );
						} else {
							$( anchor ).text( loading_finished_msg );
							$( anchor ).attr( 'href', 'javascript:void(0);' ).addClass( 'disabled' );
						}
						isLoading = false;
						i++;
						kapee.initMagnaficPopup();
						//kapee.priceSlider();
						kapee.kapeeOwlCarousel();
						kapee.tooltip();
						kapee.imagelazyload();
						kapee.widgetToggle();
						kapee.widgetMenuToggle();
						kapee.widgetMaxLimitItem();
						kapee.canvasSidebar();
						kapee.stickySidebar();
						kapee.swatchInLoop();
						kapee.ProductLoopQuantityField();
						kapee.productQuickView();
						kapee.addToCompare();
						$(document).trigger('yith_wcwl_reload_fragments'); /* Fixed wishlist icon afer ajax*/
					});
				}
			}
		});
	}
	
	kapee.loadmoreProducts = function(){
		var load_more_products_button = $('.kapee-products-load-more');
		$('.kapee-products-load-more .kapee-load-more').on('click',function(){
			
			var load_more_btn = $(this);
			var page = parseInt(load_more_btn.attr('data-page'));
			var attr = load_more_btn.attr('data-attribute');
			var post_wrap = load_more_btn.closest('.kapee-element').find('.products-wrap');
            var wrap_id = load_more_btn.closest('.kapee-element').attr('id');
			var data = {
				action: 'kapee_loadmore_product',
				nonce: kapee_options.nonce,
				attr: attr,
				page: page,
			};
			if(load_more_btn.hasClass('loading')){ return false;}
			kapee.loadAjaxPost(load_more_btn,data,post_wrap,wrap_id);
		});
		var animationFrame = function () {
			$('.kapee-products-load-more a.infinity-scroll').each(function (i, val) {
				var load_more_btn = $(this);
				var page = parseInt(load_more_btn.attr('data-page'));
				var attr = load_more_btn.attr('data-attribute');
				var post_wrap = load_more_btn.closest('.kapee-element').find('.products-wrap');
				var wrap_id = load_more_btn.closest('.kapee-element').attr('id');
				var bottomOffset = post_wrap.offset().top + post_wrap.height() - $(window).scrollTop();
				if (bottomOffset < window.innerHeight && bottomOffset > 0) {
					
					var page = parseInt(load_more_btn.attr('data-page'));
					if(!load_more_btn.hasClass('kapee-loadmore-disabled')){ 
						if(!kapee.isPostLoading){
							kapee.isPostLoading = true;
							load_more_btn.trigger('click');
						}
					}
				}
			});
		}
		
		var scrollHandler = function () {
			requestAnimationFrame(animationFrame);
		};                    
		$(window).scroll(scrollHandler);		
	}
	
	kapee.loadAjaxPost = function( btn, data, element_wrap, parantElement ){
		var load_more_label = btn.data('load_more_label');
		var loading_finished_msg = btn.data('loading_finished_msg');
		var label_txt = '';
		btn.addClass('process');
		if(btn.hasClass('kapee-loadmore-disabled')){
			return;
		}
		btn.html('<span class="loading"> '+kapee_options.js_translate_text.loading_txt+'</span>');
		$.ajax({
			url: kapee_options.ajax_url,
			data: data,
			dataType: 'json',
			method: 'POST',
			success: function(response) {
				var items = $('' + response['html'] + '');
				if ($.trim(response['success']) == 'ok') {
					//element_wrap.append(items);
					
					if ($('.masonry-grid').length > 0) {
												
						 setTimeout(function () {
						  element_wrap.imagesLoaded().masonry().append(items).masonry( 'appended', items).masonry('layout');
						 }, 500);
						 
						 
					}else{
						element_wrap.append(items);
					}
					
					if ($.trim(response['show_bt']) == '0') {
						$('#' +parantElement + ' .kapee-load-more').addClass('disabled kapee-loadmore-disabled').html(loading_finished_msg);
					} else {
						$('#' +parantElement + ' .kapee-load-more').attr('data-page', data['page'] + 1);
						btn.html(load_more_label);
					}
				}
			},
			error: function(data) {
				console.log('ajax error');
			},
			complete: function() {
				kapee.isPostLoading = false;
				kapee.imagelazyload();
				kapee.initMagnaficPopup();
				kapee.swatchInLoop();
				kapee.ProductLoopQuantityField();			
				kapee.tooltip();
				kapee.productQuickView();
				kapee.addToCompare();
				$(document).trigger('yith_wcwl_reload_fragments'); /* Fixed wishlist icon afer ajax*/
				btn.removeClass('process');				
			},
		});
	}
	
	kapee.tooltip = function () {
		
		if ( ! kapee_options.product_tooltip ) { return; }
		
		var tooltip_left = ('.whishlist-button a,.yith-wcwl-add-to-wishlist .yith-wcwl-wishlistaddedbrowse a,.product-style-2:not(.list-view) .product-buttons .cart-button,.product-style-2:not(.list-view) .product-buttons .compare-button a,.product-style-2:not(.list-view) .product-buttons .quickview-button a');
		// Bootstrap tooltips
		$(tooltip_left).tooltip({
			animation: false,
			container: 'body',
			trigger : 'hover',
			placement : !kapee.isCheckRTL() ? 'left':'right',
			title: function() {
				if( $(this).find('.added_to_cart').length > 0 ) {
					return $(this).find('.add_to_cart_button').text();
				}
				return $(this).text();
			}
		});
		
		$(document).on('yith_wcwl_fragments_loaded', function (e) {
			 $('.whishlist-button .yith-wcwl-add-to-wishlist .yith-wcwl-add-button a,.whishlist-button .yith-wcwl-add-to-wishlist .yith-wcwl-wishlistexistsbrowse a').tooltip({
			animation: false,
			container: 'body',
			trigger : 'hover',
			placement : !kapee.isCheckRTL() ? 'left':'right',
			title: function() {				
				return $(this).text();
			}
		});		
		});
		
		$('.products:not(.list-view):not(.product-style-1.grid-columns-4):not(.product-style-1.grid-columns-3):not(.product-style-1.grid-columns-6):not(.product-style-3.grid-columns-4):not(.product-style-3.grid-columns-3):not(.product-style-3.grid-columns-6):not(.product-style-4.grid-columns-4):not(.product-style-4.grid-columns-3):not(.product-style-4.grid-columns-6):not(.product-style-5.grid-columns-4):not(.product-style-5.grid-columns-3):not(.product-style-5.grid-columns-6) .product-buttons .cart-button,.has-sidebar .products:not(.list-view):not(.product-style-1.grid-columns-4):not(.product-style-1.grid-columns-6):not(.product-style-3.grid-columns-4):not(.product-style-3.grid-columns-6):not(.product-style-4.grid-columns-4):not(.product-style-4.grid-columns-6):not(.product-style-5.grid-columns-4):not(.product-style-5.grid-columns-6) .product-buttons .cart-button,.product-buttons .compare-button a,.product-buttons .quickview-button a,.kapee-tooltip').tooltip({
			animation: false,
			container: 'body',
			trigger : 'hover',
			title: function() {
				if( $(this).find('.added_to_cart').length > 0 ) return $(this).find('.add_to_cart_button').text();
				return $(this).text();
			}
		});	 				
	}
	
	kapee.productGallerySummarySticky = function () {
		/*
		* Single Product Gallary & Summary Sticky
		*/
		if ( $( window ).width() <= 767 || ( ! $('.kapee-product-sticky').length > 0 ) || 'undefined' === typeof ($.fn.stick_in_parent) ) {
			return;
		}
		
		var $wrapper = $( '.kapee-product-sticky' );
		var $gallery = $wrapper.find( '.woocommerce-product-gallery' );
		var $summary = $wrapper.find( '.entry-summary' );
		var offset = 50;
		
		if ( 0 === $wrapper.length ) {
			return;
		}
		
		setTimeout(function () {
			if( kapee_options.sticky_product_image || kapee_options.sticky_product_summary ){
				if ( $summary.outerHeight() < $gallery.outerHeight() ) {
					stickySummary();
				} else {
					stickyGallery();
				}
						
				$( window ).resize( function() {
					if ( $( window ).width() <= 767 ) {
						$gallery.trigger('sticky_kit:detach');
						$summary.trigger('sticky_kit:detach');
					}else{
						if ($summary.outerHeight() < $gallery.outerHeight()) {
							stickySummary();
						} else {
							stickyGallery();
						}
					}
				});
			}
		}, 100);
		
		function stickyGallery(){
			
			if( ! kapee_options.sticky_product_image ) { return; }
			
			$gallery.stick_in_parent({
				offset_top  : offset,
				sticky_class: 'kapee-is-stucked'
			});
		}
		
		function stickySummary(){
			
			if( ! kapee_options.sticky_product_summary ){ return; }
			
			$summary.stick_in_parent({
				offset_top  : offset,
				sticky_class: 'kapee-is-stucked'
			});
		}
	}
	
	kapee.productGallerySlider = function() {
		/*
		 * Product Gallery  & Thumnails slider
		 */
		if ( ! $.isFunction($.fn.slick) ) {
			return;
		}
		
		// Product Gallery Slider
		if( $('.woocommerce-product-gallery').find( '.single-product-gallery' ).length > 0 ) {
			$( '.single-product-gallery' ).not( '.slick-initialized' ).slick({
				slidesToShow	: ( 'product-gallery-horizontal' == kapee_options.product_gallery_layout ) ? 2 : 1,
				slidesToScroll	: 1,
				asNavFor		: ( 'product-gallery-left' == kapee_options.product_gallery_layout || 'product-gallery-bottom' == kapee_options.product_gallery_layout ) ? '.single-product-thumbnails' : '',
				fade			: ( 'product-gallery-left' == kapee_options.product_gallery_layout || 'product-gallery-bottom' == kapee_options.product_gallery_layout ) ? true : false,
				dots			: ( 'product-gallery-horizontal' == kapee_options.product_gallery_layout || 'product-gallery-center' == kapee_options.product_gallery_layout ) ? true : false,
				infinite 		: false,
				adaptiveHeight	: true,
				rtl				: ( kapee.isCheckRTL() ) ? true : false,
				responsive		:[
					{
						breakpoint	: 639,
						settings	: {
							dots 			: true
						}
					}
				]
			});
		}
		
		// Product Thumbnails Silder
		if( $('.woocommerce-product-gallery').find( '.single-product-thumbnails' ).length > 0 ) {
			$( '.single-product-thumbnails' ).not( '.slick-initialized' ).slick({
				slidesToShow	: 4,
				slidesToScroll	: 1,
				asNavFor		: '.single-product-gallery',
				infinite 		: false,
				arrows			: true,
				focusOnSelect	: true,
				vertical		: ( 'product-gallery-left' == kapee_options.product_gallery_layout ) ? true : false,			
				rtl				: ( 'product-gallery-bottom' == kapee_options.product_gallery_layout && kapee.isCheckRTL() ) ? true : false,
				responsive		:[
					{
						breakpoint	: 639,
						settings	: {
							slidesToShow 	: 4,
							infinite 		: false,
							vertical		: false,
							rtl				: ( kapee.isCheckRTL() ) ? true : false,
						}
					}
				]
			});
		}
		
		/* $( '.single-product-gallery' ).on('afterChange', function(event, slick, currentSlide, nextSlide){
			$('.slick-slide').removeClass('flex-active-slide');
			$('.slick-current').addClass('flex-active-slide');
		}); */
					
		// Reset the index of image on product variation
		$(document).on( 'found_variation', '.variations_form', function( es, variation ) {		
			if ( variation && variation.image && variation.image.src && variation.image.src.length > 1 ) {
				$( '.single-product-gallery, .single-product-thumbnails' ).slick( 'slickGoTo', 0 );
				setTimeout(function () {
					var $product_img = $(document).find( '.kapee-quick-view .woocommerce-product-gallery__wrapper  .slick-current.slick-active img' );
					kapee.setVariationAttr( $product_img, 'src',
					variation.image.src );
					kapee.setVariationAttr( $product_img, 'srcset',
					variation.image.srcset );
					kapee.setVariationAttr( $product_img, 'sizes',
					variation.image.sizes );
				}, 300);
			}
		}).on('reset_image', function () {
			$( '.single-product-gallery, .single-product-thumbnails').slick( 'slickGoTo', 0 );
			setTimeout(function () {
				var $product_img = $(document).find( '.kapee-quick-view .woocommerce-product-gallery__wrapper  .slick-current.slick-active img' );
				kapee.resetVariationAttr( $product_img, 'src' );
				kapee.resetVariationAttr( $product_img, 'srcset' );
				kapee.resetVariationAttr( $product_img, 'sizes' );
			}, 300);
		});
	};
	
	kapee.productImageZoom = function(){
		/*
		 * Single Product image zoom
		 */
		if ( kapee_options.product_image_zoom ) {
		
			var $wc_gallery = $( '.single-product-page .woocommerce-product-gallery' ),
			    zoomTarget = $wc_gallery.find( '.woocommerce-product-gallery__image > a' ),
				width 		= zoomTarget.children('img').attr( 'data-large_image_width' ),
				// zoom option
				zoom_options = $.extend( {
					touch: false
				});
				
			// On Click Zoom
			if ('ontouchstart' in document.documentElement) {
				zoom_options.on = 'click';
			}			
			
			setTimeout(function () {
				zoomTarget.parent().trigger('zoom.destroy').children('.zoomImg').remove();
			}, 500);			
			
			// Zoom
			if ( 'undefined' != typeof width && zoomTarget.width() < width ) {
				zoomTarget.trigger( 'zoom.destroy' );
				zoomTarget.zoom(zoom_options);
				
				// show zoom on hover
				zoomTarget.find(':hover').length && zoomTarget.trigger('mouseover');
			}
		}
	};
	
	kapee.productPhotoSwipe = function () {
		/*
		 * Single Product Photo Swipe
		 */
		if ( kapee_options.product_PhotoSwipe ) {
			if( $( '.woocommerce-product-gallery' ).length === 0 ){
				return;
			}
			//var self = this;
			var $wc_gallery = $( '.woocommerce-product-gallery' );	
			
			setTimeout( function () {
				// If woocommmerce product gallery is undefined, create it
				typeof $wc_gallery.data('product_gallery') == 'undefined' && $wc_gallery.wc_product_gallery();
				this.$wc_gallery = $wc_gallery;
				this.wc_gallery = $wc_gallery.data('product_gallery');
			
				// Remove woocommerce zoom triggers
				$wc_gallery.children('.woocommerce-product-gallery__trigger').remove();
				
				// Prevent going to image link
				$wc_gallery
					.off('click', '.woocommerce-product-gallery__image a')
					.on('click', kapee.preventDefault);
								
				$wc_gallery.on('click', '.woocommerce-product-gallery__image a, .woocommerce-product-gallery__image', kapee.openPhotoswipe.bind(this));
				$wc_gallery.on('click', '.kapee-product-image-full', kapee.openPhotoswipe.bind(this));
			}, 100 );
		}else{
			$('.woocommerce-product-gallery__image a').on('click', function(e){
				e.preventDefault();
			});			
		}		
	};
	
	kapee.openPhotoswipe = function (e) {
		if (wc_single_product_params.photoswipe_options) {	
			// Slick slider index
			var slider = this.$wc_gallery.find('.single-product-gallery').slick("getSlick");
			if (slider) {
				wc_single_product_params.photoswipe_options.index = slider.currentSlide;
			}		

			this.wc_gallery.openPhotoswipe(e);			
			e.stopPropagation();	
		}
	}
	
	kapee.productSaleCountdown = function() {
		/*
		 * Product Sale CountDown
		 */
		
		$('.product-countdown').each(function(){			
			var $this 	= $(this),
				template 	= '',
				end_date = $this.data('end-date');
			
			if( $this.data('countdown-style') == 'countdown-box' ) {
				template = '<span class="days">%-D<span>'+kapee_options.js_translate_text.days_text+'</span></span><span class="hour">%H<span>'+kapee_options.js_translate_text.hours_text+'</span></span><span class="minute">%M<span>'+kapee_options.js_translate_text.mins_text+'</span></span><span class="second">%S<span>'+kapee_options.js_translate_text.secs_text+'</span></span>';
			}else{
				template = '%-D'+kapee_options.js_translate_text.sdays_text+':%H'+kapee_options.js_translate_text.shours_text+':%M'+kapee_options.js_translate_text.smins_text+':%S'+kapee_options.js_translate_text.ssecs_text;
			}
			
			// initialize 
			$this.countdown( end_date, function(event) {
				 $(this).html(event.strftime(template));
			});
		});
	};
	
	kapee.productReviewLink = function() {
		/*
		 * Scroll Show Product Review Tab
		 */
		
		$( 'body' ).on( 'click', 'a.woocommerce-review-link', function() {
			$( '.reviews_tab a' ).click();
			return true;
		} );
	};
	kapee.productPriceSummary = function () {
		/*
		 * Product Price Summary Popup in Mobile
		 */				
		$( document ).on( 'click', '.kapee-mobile-device .exclamation-mark.open', function() {
			var _this = $(this);
			_this.removeClass('open');
			_this.find('.kapee-arrow').addClass('active');
			
		});
		$( document ).on( 'click', '.kapee-mobile-device .product-price-summary .kapee-close', function() {
			$('.product-price-summary .kapee-arrow').removeClass('active');
			$('.product-price-summary').addClass('open');			
		});		
	};
	
	kapee.getProductSizeChart = function () {
		/*
		 * Get Product Size Chart
		 */	
		$('.kapee-ajax-size-chart').on('click', function (e) {
			e.preventDefault();
			 var id = $(this).data('id'); // get post value
			 var data = {
				action			: 'kapee_ajax_get_size_chart',
				'id'			: id,
				nonce   		: kapee_options.nonce,
			};
			var chart_btn = $(this);
			if(chart_btn.hasClass('loading')){
				return false;
			}
			chart_btn.addClass('loading');
			$.ajax({
				type: 'post',
				url: kapee_options.ajax_url,
				data: data,
				beforeSend: function (response) {
					
				},
				complete: function (response) {
					chart_btn.removeClass('loading');
				},
				success: function (response) {
					$(this).magnificPopup({
						removalDelay: 500,
						items: {
							src: response,
							type: 'inline'
						},
						callbacks: {
							open: function () {
								var popupWrap = $( '.kapee-product-sizechart' );
								popupWrap.addClass('animate__animated animate__fadeInLeft');						
							},							
							beforeClose: function() {
								var popupWrap = $( '.kapee-product-sizechart' );
								popupWrap.removeClass('animate__fadeInLeft').addClass('animate__fadeOutRight');
							}, 
							close: function() {
								var popupWrap = $( '.kapee-product-sizechart' );
								popupWrap.removeClass('animate__animated animate__fadeOutRight');
								
							}
						},
					}).magnificPopup('open');
				},
			});			
      });
	}
	
	kapee.getAjaxBlock = function () {
		/*
		 * Get Block
		 */	
		$('.kapee-block-ajax').on('click', function (e) {
			e.preventDefault();
			 var id = $(this).data('id'); /* get block value */
			 var title = $(this).data('title'); /* title */
			 var data = {
				action			: 'kapee_ajax_get_block',
				'id'			: id,
				'title'			: title,
				nonce   		: kapee_options.nonce,
			};
			var chart_btn = $(this);
			if(chart_btn.hasClass('loading')){
				return false;
			}
			chart_btn.addClass('loading');
			$.ajax({
				type: 'post',
				url: kapee_options.ajax_url,
				data: data,
				beforeSend: function (response) {
					
				},
				complete: function (response) {
					chart_btn.removeClass('loading');
				},
				success: function (response) {
					$(this).magnificPopup({
						removalDelay: 500,
						items: {
							src: response,
							type: 'inline'
						},
						callbacks: {
							open: function () {
								var popupWrap = $( '.kapee-ajax-blok-content' );
								popupWrap.addClass('animate__animated animate__fadeInLeft');						
							},							
							beforeClose: function() {
								var popupWrap = $( '.kapee-ajax-blok-content' );
								popupWrap.removeClass('animate__fadeInLeft').addClass('animate__fadeOutRight');
							}, 
							close: function() {
								var popupWrap = $( '.kapee-ajax-blok-content' );
								popupWrap.removeClass('animate__animated animate__fadeOutRight');
								
							}
						},
					}).magnificPopup('open');
				},
			});
			
      });
	}
	
	kapee.getProductTermsConditions = function () {
		/*
		 * Get Product Terms & Conditions
		 */	
		var cache = [];
		$('.kapee-ajax-block').on('click', function (e) {
			e.preventDefault();
			$(document).find('.product-term-detail').removeClass('active');
			var html = "<div class='product-term-detail kapee-arrow active'> <span class='loading'></span></div>";
			var process = false;
			var $this = $(this);
			var content = $(this).closest('.product-term-wrap').find('.product-term-detail');
			var id = $(this).data('id'); // get post value
			if(id == ''){return false;}
			if( cache['term_condition_'+id] ) {
				$(".product-term-detail").not(content).removeClass('active');
				if(content.length){
					content.addClass('active');
				}else{
					$(this).after(html);
					$this.closest('.product-term-wrap').find('.product-term-detail').addClass('active').html(cache['term_condition_'+id]);
				}
                return;
            }
			 var data = {
				action			: 'kapee_ajax_get_product_terms_conditions',
				'id'			: id,
				nonce   		: kapee_options.nonce,
			};
			
			$(this).after(html);
			//return false;
			$.ajax({
				type: 'post',
				url: kapee_options.ajax_url,
				data: data,
				beforeSend: function (response) {
					
				},
				complete: function (response) {
					content.removeClass('loading');
				},
				success: function (response) {
					//content.html(response);
					$this.closest('.product-term-wrap').find('.product-term-detail').addClass('active').html(response);
					cache['term_condition_'+id] = response;
				},
			});			
      });
	  
	  /* Hide .terms */
		$(document).mouseup(function (e){
			var container = $(".product-term-wrap");			
			if (!container.is(e.target) && container.has(e.target).length === 0){				
				$(".product-term-detail").removeClass('active');				
			}
		}); 
		
		$( document ).on( 'click', '.product-term-wrap .kapee-close', function() {
			$(".product-term-detail").removeClass('active');
		});
		
	}
	
	kapee.productQuantityPlusMinus = function() {
		/*
		 * Product Quantity Plus/Minus
		 */
		$( document ).on( 'click', '.quantity .plus, .quantity .minus', function() {
            // Get values
            var $qty        = $( this ).closest( '.quantity' ).find( '.qty'),
                currentVal  = parseFloat( $qty.val() ),
                max         = parseFloat( $qty.attr( 'max' ) ),
                min         = parseFloat( $qty.attr( 'min' ) ),
                step        = $qty.attr( 'step' );

            // Format values
            if ( ! currentVal || currentVal === '' || currentVal === 'NaN' ) currentVal = 0;
            if ( max === '' || max === 'NaN' ) max = '';
            if ( min === '' || min === 'NaN' ) min = 0;
            if ( step === 'any' || step === '' || step === undefined || parseFloat( step ) === 'NaN' ) step = '1';

            // Change the value
            if ( $( this ).is( '.plus' ) ) {
                if ( max && ( max == currentVal || currentVal > max ) ) {
                    $qty.val( max );
                } else {
                    $qty.val( currentVal + parseFloat( step ) );
                }
            } else {
                if ( min && ( min == currentVal || currentVal < min ) ) {
                    $qty.val( min );
                } else if ( currentVal > 0 ) {
                    $qty.val( currentVal - parseFloat( step ) );
                }
            }

            // Trigger change event
            $qty.trigger( 'change' );
        });
	};
	
	kapee.productQuickShop = function () {
		/*
		 * Product Buy Now Button click
		 */
		$('body').on('click', '.kapee_quick_buy_button', function() {
			if (kapee_options.product_add_to_cart_ajax) {
				$('.single_add_to_cart_button').addClass('quick-buy-proceed');
			}
			var $this = $(this);
			var product_id = $(this).attr('data-kapee-product-id');
			var product_type = $(this).attr('data-product-type');
			var selected = $('form.cart input#kapee_quick_buy_product_' + product_id);
			var productform = selected.parent();
			
			var submit_btn = productform.find('[type="submit"]');
			var is_disabled = submit_btn.is(':disabled');
			if(!$(this).closest('.woocommerce-variation-add-to-cart').hasClass('woocommerce-variation-add-to-cart-disabled')){
				$this.addClass('loading');
			}
			if ( is_disabled ) {
				$('html, body').animate({
					scrollTop: submit_btn.offset().top - 200
				}, 900);
			} else {
				if(!$this.hasClass('disable')){
					productform.append('<input type="hidden" value="true" name="kapee_quick_buy" />');
				}
				productform.find('.single_add_to_cart_button').trigger('click');
			} 
		});
		
		$('form.cart').change(function () {
			var is_submit_disabled = $(this).find('[type="submit"]').is(':disabled');
			if ( is_submit_disabled ) {
				$('.kapee_quick_buy_button').attr('disabled', 'disable');
			} else {
				$('.kapee_quick_buy_button').removeAttr('disabled');
			}
		});
	}
	
	kapee.productBoughtTogetherInit = function(){ 
		/* Procut Bought Together */
		
		if ( kapee.$body.find('.kapee-bought-together-products').length === 0 ) {
			return;
		}
		
		var self = this;
		// check box click
		$('body').on('click', '.kapee-bought-together-products .product-checkbox input[type=checkbox]', function() {
			if ($(this).is(":checked")) {
				$(this).closest('.product-wrapper').removeClass('kapee-disable-product');				
			}else{
				$(this).closest('.product-wrapper').addClass('kapee-disable-product');
			}
			self.productBoughtTogetherChangeEvent();
		});
		// check all
		self.productBoughtTogetherCheckAllItems();
		// add to cart
		self.productBoughtTogetherAddToCart();
		
		$( 'body' ).on( 'found_variation', function( event, variation ) {
			$('.kapee-bought-together-products .current-item .item-price').each(function() {				
				if( $(this).data( 'type' ) == 'variable' ) {
					$(this).data( 'itemprice', variation.display_price );
					$(this).html(self.kapee_woo_formated_price(variation.display_price));
					self.productBoughtTogetherChangeEvent();
				}
			});
		});
	}
	kapee.productBoughtTogetherChangeEvent = function() {
		var self = this;
		$('.add-items-to-cart').addClass('loading');
		
		var total_price = self.product_bought_together_get_total_price();
		var addon_total_price = self.product_addons_get_total_price();
		var total_addon = self.product_bought_together_product_count();
		if(total_addon){
			$('.add-items-to-cart').removeAttr("disabled");
		}else{
			$('.add-items-to-cart').attr("disabled", true);
		}
		$( '.addons-item .addon-count' ).html( total_addon );
				$( '.addons-item span.items-price' ).html( self.kapee_woo_formated_price(addon_total_price) );
				$( '.items-total span.total-price' ).html( self.kapee_woo_formated_price(total_price) );
		$('.add-items-to-cart').removeClass('loading');
	}
	
	kapee.kapee_woo_formated_price = function(number){
		var self = this;
		return self.kapee_formated_price(number, kapee_options.price_thousand_separator,
		kapee_options.price_decimal_separator, kapee_options.price_decimals, 
		kapee_options.currency_symbol,kapee_options.price_format);
	}
	
	kapee.kapee_formated_price = function(number, thousand_sep, decimal_sep, tofixed, symbol, woo_price_format){
		  var before_text = '';
        var after_text = '';
        number = number || 0;
        tofixed = !isNaN(tofixed = Math.abs(tofixed)) ? tofixed : 2;
        symbol = symbol !== undefined ? symbol : "$";
        thousand_sep = thousand_sep || ",";
        decimal_sep = decimal_sep || ".";
        var negative = number < 0 ? "-" : "",
            i = parseInt(number = Math.abs(+number || 0).toFixed(tofixed), 10) + "",
            j = (j = i.length) > 3 ? j % 3 : 0;
        
        symbol = '<span class="woocommerce-Price-currencySymbol">' + symbol + '</span>';
        
        switch (woo_price_format) {
            case '%1$s%2$s':
                //left
                before_text += symbol;
                break;
            case '%1$s %2$s':
                //left with space
                before_text += symbol + ' ';
                break;
            case '%2$s%1$s':
                //right
                after_text += symbol;
                break;
            case '%2$s %1$s':
                //right with space
                after_text += ' ' + symbol;
                break;
            default:
                //default
                before_text += symbol;
        }       
        
        var woo_price_return = before_text +
            negative + (j ? i.substr(0, j) + thousand_sep : "" ) +
            i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand_sep) +
            (tofixed ? decimal_sep + Math.abs(number - i).toFixed(tofixed).slice(2) : "") +
            after_text;
        
        woo_price_return = '<span class="woocommerce-Price-amount amount">' + woo_price_return + '</span>';
        
        return woo_price_return;
	}
	
	kapee.productBoughtTogetherCheckAllItems = function(){
		var self = this;
		$('body').on('click', '.check-all-items', function(){
			$('.kapee-together-product:checkbox').not(this).prop('checked', this.checked);
			if ($(this).is(":checked")) {
				$('.kapee-together-product:checkbox').prop('checked', true);  
			} else {
				$('.kapee-together-product:checkbox').prop("checked", false);
			}

			self.productBoughtTogetherChangeEvent();
		});
	}
	
	kapee.BoughtTogetherIsVariationProduct = function(){
		
		var product_type = $('.kapee-bought-together-products .current-item .item-price').data('type');
		if( product_type == 'variable'){
			return true
		}
		return false;
	}
	
	kapee.BoughtTogetherCurrentProductid = function(){
				
		var product_id = $('.kapee-bought-together-products .current-item .item-price').data('id');
		
		return 	product_id;
	}
	
	kapee.BoughtTogetherVariationAvailable = function(){
		if( $(".single_add_to_cart_button").length === 0 || $(".single_add_to_cart_button").hasClass("disabled") || $(".single_add_to_cart_button").hasClass("wc-variation-is-unavailable") ) {
			return false;
		}
		return true;
	}
	
	kapee.productBoughtTogetherAddToCart = function(){
		var self = this;
		$('body').on('click', '.add-items-to-cart:not(.loading)', function(e){
			e.preventDefault();
			
			var is_variation_product = kapee.BoughtTogetherIsVariationProduct();
			var variation_product_id = kapee.BoughtTogetherCurrentProductid();
			
			if(is_variation_product && kapee.BoughtTogetherVariationAvailable() === false){
				alert(kapee_options.js_translate_text.variation_unavailable);
				return;
			}
			
			var self_this = $(this);
			self_this.addClass('loading');
			
			var all_product_ids = self.product_bought_together_get_checked_product_ids();
			var msg='';
			if( all_product_ids.length === 0 ) {
				msg = kapee_options.bought_together_error;
			} else {
				
				setTimeout(function () {
					for (var i = 0; i < all_product_ids.length; i++ ) {
						if( is_variation_product && all_product_ids[i] == variation_product_id ){							
							var variation_id  = $('.variations_form .variations_button').find('input[name^=variation_id]').val();
							var variation = {};
							if( $( '.variations_form' ).find('select[name^=attribute]').length ) {
								$( '.variations_form' ).find('select[name^=attribute]').each(function() {
									var attribute = $(this).attr("name");
									var attributevalue = $(this).val();
									variation[attribute] = attributevalue;
								});
							} else {

								$( '.variations_form' ).find('.select').each(function() {
									var attribute = $(this).attr("data-attribute-name");
									var attributevalue = $(this).find('.selected').attr('data-name');
									variation[attribute] = attributevalue;
								});

							}
							$.ajax({
								type: "POST",
								async: false,
								url: kapee_options.ajax_url,
								data: {
									'product_id': all_product_ids[i],
									'variation_id': variation_id, 
									'variation': variation,
									'action': 'kapee_all_add_to_cart'
								},
								success : function( response ) {
									self.product_bought_together_refresh_fragments( response );
								}
							}); 
						} else {
							$.ajax({
								type: "POST",
								async: false,
								url: kapee_options.ajax_url,
								data: {
									'product_id': all_product_ids[i],
									'action': 'kapee_all_add_to_cart'
								},
								success : function( response ) {
									self.product_bought_together_refresh_fragments( response );
								}
							}); 
						}
					}
					var miniCartSidebar = $('.kapee-minicart-slide');
					var closeSidebar 	= $('.kapee-mask-overaly');
					if ( ! miniCartSidebar.hasClass('opened') ) {
						miniCartSidebar.addClass('opened');
						closeSidebar.addClass('opened');
						self.initNanoScroller();
					}
					self_this.removeClass('loading');
				}, 300); 
				
			}
			if(msg != ''){
				$( '.kapee-wc-message' ).html(msg).show(100);
				self_this.removeClass('loading');
				setTimeout(function () {
					$( '.kapee-wc-message' ).slideUp(500);
					
				}, 3000);				
			}
			
		});
	}
	
	kapee.product_bought_together_get_total_price = function(){
		var tprice = 0,itemprice =0;
		itemprice = $('.items-total-price .item-price').data('itemprice');
		tprice = parseFloat(itemprice);
		$('.kapee-bought-together-products .product-checkbox input[type=checkbox]').each(function() {
			if( $(this).is(':checked') ) {
				tprice += parseFloat( $(this).data( 'price' ) );
			}
		});
		return tprice;
	}
	
	kapee.product_addons_get_total_price = function(){
		var tprice = 0;
		
		$('.kapee-bought-together-products .product-checkbox input[type=checkbox]').each(function() {
			if( $(this).is(':checked') ) {
				tprice += parseFloat( $(this).data( 'price' ) );
			}
		});
		return tprice;
	}
	
	kapee.product_bought_together_product_count = function(){
		var pcount = 0;
		$('.kapee-bought-together-products .product-checkbox input[type=checkbox]').each(function() {
			if ($(this).is(':checked')) {
				pcount++;
			}
		});
		return pcount;
	}
	
	// get checked product ids
	kapee.product_bought_together_get_checked_product_ids = function(){
		var pids = [],pidd;
		pidd = $('.items-total-price .item-price').data('id');
		
		pids.push( pidd);
		$('.kapee-bought-together-products .product-checkbox input[type=checkbox]').each(function() {
			if( $(this).is(':checked') ) {
				pids.push( $(this).data( 'id' ) );
			}
		});
		return pids;
	}
	
	// get checked product ids
	kapee.product_bought_together_refresh_fragments = function(response){
		var frags = response.fragments;

            // Block fragments class
            if ( frags ) {
                $.each( frags, function( key ) {
                    $( key ).addClass( 'updating' );
                });
            }
            if ( frags ) {
                $.each( frags, function( key, value ) {
                    $( key ).replaceWith( value );
                });
            }
	}
	
	kapee.wooProductTabsAccordian = function(){
		if( ( $('.woocommerce-tabs.accordion-layout').length > 0 ) || ( $('.woocommerce-tabs.tabs-layout').length > 0 ) ){
			
			var $accordion = $('.tab-content-wrap');
			var hash  = window.location.hash;
			var url   = window.location.href;
		
			if ( hash.toLowerCase().indexOf( 'comment-' ) >= 0 || hash === '#reviews' || hash === '#tab-reviews' ) {
				$accordion.find('.title-reviews').addClass('open');
			} else if ( url.indexOf( 'comment-page-' ) > 0 || url.indexOf( 'cpage=' ) > 0 ) {
				$accordion.find('.title-reviews').addClass('open');
			}else if ( hash === '#tab-additional_information' ) {
				$accordion.find('.title-additional_information').addClass('open');
			}  else {
				$accordion.find('.accordion-title').first().addClass('open');
			}
			$accordion.on('click', '.accordion-title', function( e ) {
				e.preventDefault();
				$(this).parent().siblings().find('.woocommerce-Tabs-panel').slideUp('fast');
				$(".accordion-title").not($(this)).removeClass("open");
				$(this).toggleClass("open").next().slideToggle('fast');
			});
			$(document).on('click', 'a.woocommerce-review-link', function(e) {
				$accordion.find('.accordion-title').removeClass("open");
				$accordion.find('.title-reviews').addClass("open");
			});
		}
	}
	
	kapee.wooProductTabsToggle = function(){
		if($('.woocommerce-tabs.toggle-layout').length > 0){
			var $accordion = $('.tab-content-wrap');
			
			$accordion.find('.accordion-title').addClass('open');
			$accordion.find('.woocommerce-Tabs-panel').css("display", "block");
			$accordion.on('click', '.accordion-title', function( e ) {
				e.preventDefault();				
				var accordion = $(this);
				var accordionContent = accordion.next('.woocommerce-Tabs-panel');				
				accordion.toggleClass("open");
				accordionContent.slideToggle(250);				
			});
			$(document).on('click', 'a.woocommerce-review-link', function(e) {
				e.stopPropagation();
			});
		}
	}
	
	kapee.wooCheckoutStep = function() {
		var btn_next = $('.checkout-next-step'),
		wooStepWrap = $('#checkout-wrapper .panel.panel-default'),
		mutistepCheckout = $('#multi-step-checkout');
		if(mutistepCheckout.length > 0 ){ var formscrollTo = mutistepCheckout.offset().top - 30;}
		
		btn_next.on('click',function(){
			
			$(window).unbind('beforeunload'); /* Fixed site loader in multi step checkout */
			
			var currentPanel 	= $(this).closest("div.panel.panel-default"),			
			this_btn 		= $(this),
			currentstep 		= currentPanel.data('step'),
			steptitle 		= currentPanel.data('steptitle'),
			nextPanel_id 		= this_btn.data("next"),
			nextPanel 			= $("#"+nextPanel_id),
			billing 			= $( '#customer_billing_details' ),
			shipping 			= $( '#customer_shipping_details' ),
			selector 			= null,
			valid           	= false,
			$offset         = 30,
			posted_data     	= {};
			this_btn.addClass('loading');
			$( 'form.woocommerce-checkout .woocommerce-NoticeGroup.woocommerce-NoticeGroup-checkout' ).remove();
			setTimeout(function () {
			if(steptitle == 'billing' || steptitle =='shipping'){
				
				if(steptitle == 'billing'){
					selector = billing;
				}
				if(steptitle == 'shipping'){
					selector = shipping;
				}
				$( selector ).find( '.validate-required input' ).each( function() {
					posted_data[ $( this ).attr( 'name' ) ] = $( this ).val();
				} );

				$( selector ).find( '.validate-required select' ).each( function() {
					posted_data[ $( this ).attr( 'name' ) ] = $( this ).val();
				} );

				$( selector ).find( '.input-checkbox' ).each( function() {
					if ( $( this ).is( ':checked' ) ) {
						posted_data[ $( this ).attr( 'name' ) ] = $( this ).val();
					}
				} );
				
				var data = {
					action		: 'kapee_validate_checkout',
					type		: steptitle,
					posted_data	: posted_data,
					nonce   	: kapee_options.nonce,
				};

				$.ajax( {
					type: 'POST',
					url: kapee_options.ajax_url,
					data: data,
					async: false,
					success: function( response ) {
						valid = response.valid;

						if ( ! response.valid ) {
							currentPanel.find('.panel-body').prepend( response.html );
							$( 'html, body' ).animate( {
								scrollTop: $( 'form.woocommerce-checkout' ).offset().top - $offset },
							'slow' );
						}
						this_btn.removeClass('loading');
					},
					complete: function() {}
				} );
				
			}else {
				valid = true;
			}
			if ( valid ) {
				
			}else{
				
				return false;
			}
		 
			if ($(nextPanel).hasClass('hidden')) {
				currentPanel.removeClass('active');
				currentPanel.addClass('completed');
				currentPanel.find('.panel-collapse').slideUp('slow').removeClass('show');
				this_btn.removeClass('loading');
				$(nextPanel).removeClass('hidden');
				$(nextPanel).addClass('active');
				$(nextPanel).find('.panel-collapse').slideDown('slow').addClass('show');
				 $( 'html, body' ).animate( {
					scrollTop : formscrollTo },
				'slow' );		
				
			}
			return false;
			}, 300); 
		});
		$('.edit-action').on('click',function(){
			var currentPanel 	= $(this).closest("div.panel.panel-default"),			
			this_btn 		= $(this),
			currentstep 		= currentPanel.data('step');
			currentPanel.removeClass('completed').addClass('active');
			currentPanel.find('.panel-collapse').slideDown('slow').addClass('show');
			kapee_deactivate_steps(currentstep);
		});
		function kapee_deactivate_steps(currentstep){
			var panels = mutistepCheckout.find('.panel');
			panels.each(function( index ) {
				var current_panel = $(this),
				step = current_panel.data('step');
				if(currentstep < step)
				{
					var stepwrap = $("#step-"+step);
					if(stepwrap.hasClass('active')){
						stepwrap.find('.panel-collapse').slideUp('slow').removeClass('show');
						stepwrap.removeClass('active');
						stepwrap.addClass('hidden');
					}
					if(stepwrap.hasClass('completed')){
						stepwrap.removeClass('completed');
						stepwrap.addClass('hidden');
					}
				}
				
				
			});
		}
	}
	
	kapee.resetVariations = function(){
		var price_html = '',
			discount_html = '',
			price_summary_html = '',
			$price_summer_inner_price = $(document).find(".woocommerce div.entry-summary > p.price"),
			$price_summer_inner_discount = $(document).find(".woocommerce div.entry-summary .product-price-discount"),
			$price_summer_inner_price_summary = $(document).find(".woocommerce div.entry-summary .product-price-summary");
		if($price_summer_inner_price.length){
			price_html = $price_summer_inner_price.html();
        }
		if($price_summer_inner_discount.length){
			discount_html = $price_summer_inner_discount.html();
        }
		if($price_summer_inner_price_summary.length){
			price_summary_html = $price_summer_inner_price_summary.html();
        }
		
		$(document).find( ".variations_form" ).on( "reset_data", function () {
				if (kapee_options.disable_variation_price_change) {
					return;
				}
				$(document).find(".woocommerce div.entry-summary > p.price").html(price_html);
				$(document).find(".woocommerce div.entry-summary .product-price-discount").html(discount_html);
				$(document).find(".woocommerce div.entry-summary .product-price-summary").html(price_summary_html);
				if($(document).find(".woocommerce .kapee-quick-buy").length){
					$(document).find(".kapee_quick_buy_button").addClass('disabled');
				}
		});
	}
	
	kapee.variationChangeevent = function(){
		$( ".single_variation_wrap" ).on( "show_variation", function ( event, variation ) {
			if($(document).find(".woocommerce .kapee-quick-buy").length){
				$(document).find(".kapee_quick_buy_button").removeClass('disabled');
			}
		} ); 
		$(document).find( ".variations_form" ).on( "woocommerce_variation_select_change", function () {
			
			if (kapee_options.disable_variation_price_change) {
				return;
			}
			$(document).find( ".single_variation_wrap" ).on( "show_variation", function ( event, variation ) {
				var sell_price = variation.display_price,
				regular_price = variation.display_regular_price,
				formate_sell_price,
				formate_regular_price,
				total = 0,
				discount_per = 0,
				discount = regular_price - sell_price,
				formate_discount,
				price_html = variation.price_html,
				test_var = 1;				
				
				formate_sell_price = kapee.kapee_formated_price(sell_price, kapee_options.price_thousand_separator,
				kapee_options.price_decimal_separator, kapee_options.price_decimals, 
				kapee_options.currency_symbol,kapee_options.price_format);
				
				formate_regular_price = kapee.kapee_formated_price(regular_price, kapee_options.price_thousand_separator,
				kapee_options.price_decimal_separator, kapee_options.price_decimals, 
				kapee_options.currency_symbol,kapee_options.price_format);
				
				formate_discount = kapee.kapee_formated_price(discount, kapee_options.price_thousand_separator,
				kapee_options.price_decimal_separator, kapee_options.price_decimals, 
				kapee_options.currency_symbol,kapee_options.price_format);
				
				if( sell_price != regular_price ){
					$(document).find('.woocommerce div.entry-summary .product-price-discount').show();
					$(document).find('.product-price-summary .discount').show();
					$(document).find('.product-price-summary .overall-discount').show();
					discount_per = Math.round( ((regular_price - sell_price)/regular_price) * 100 );
					$(document).find('.woocommerce div.entry-summary > p.price').html('<ins>' + formate_sell_price  + '</ins><del> ' + formate_regular_price + '</del>');
					$(document).find('.woocommerce div.entry-summary .product-price-discount .on-sale span').html( discount_per);
					$(document).find('.product-price-summary .regular-price > span').html( formate_regular_price);
					$(document).find('.product-price-summary .selling-price span').html( formate_sell_price);
					$(document).find('.product-price-summary .discount span').html( discount_per +'%');
					$(document).find('.product-price-summary .total-discount span').html( formate_sell_price);
					$(document).find('.product-price-summary .overall-discount .amount-discount').html( formate_discount);
					$(document).find('.product-price-summary .overall-discount .percentage-discount').html( '(' + discount_per + '%)');
				}else{
					$(document).find('.woocommerce div.entry-summary > p.price').html(formate_regular_price);
					$(document).find('.product-price-summary .regular-price > span').html( formate_regular_price);
					$(document).find('.product-price-summary .selling-price span').html( formate_regular_price);
					$(document).find('.product-price-summary .total-discount span').html( formate_regular_price);
					$(document).find('.woocommerce div.entry-summary .product-price-discount').hide();
					$(document).find('.product-price-summary .discount').hide();
					$(document).find('.product-price-summary .overall-discount').hide();
				}
				
			} );
		} );
	}
	
	kapee.wcfm_vendor = function(){
		//*******************************************************************
		//* WCFM Vendor
		//*******************************************************************/
		if ($('#_kp_product_ids').length <= 0) {
            return false;
        }
        if (typeof $wcfm_product_select_args === 'undefined') {
            return false;
        }

        $('#_kp_product_ids').select2($wcfm_product_select_args);
	};
	
	kapee.MiniCartUpdateQuantity = function(){
		/* Update Minicart item quantity */
		$(document).on('change', '.woocommerce-mini-cart .qty', function(){
			var quantity = parseFloat($(this).val());
			var max = parseFloat($(this).attr('max'));
			if( max !== 'NaN' && max < quantity ){
				quantity = max;
				$(this).val( max );
			}
			
			$(this).parents('.woocommerce-mini-cart-item').addClass('loading');
			var cart_item_key = $(this).parents('.woocommerce-mini-cart-item').attr('data-cart_item_key');
			
			var data = {
				quantity: quantity,
				cart_item_key: cart_item_key,
				nonce: kapee_options.nonce,
				action: 'kapee_update_cart_widget_quantity',
			};
			$.ajax({
				url: kapee_options.ajax_url,
				data: data,
				dataType: 'json',
				method: 'POST',
				success: function (response) {
					if( !response ){
						return;
					}
					$( document.body ).trigger( 'added_to_cart', [ response.fragments, response.cart_hash ] );
					//$(document).trigger('wc_cart_updated');
					
				}				
			});
		});
	};
	
	kapee.autoCartUpdate = function(){
		if( ! kapee_options.cart_auto_update || $('.woocommerce-cart-form').length <= 0){
			return;
		}
		$(document).on('change','.woocommerce-cart-form .product-quantity',function(e) {
			$("[name='update_cart']").removeAttr('disabled');
			$("[name='update_cart']").trigger("click"); 
        });
	};
	
	kapee.checkoutUpdateQuantity = function(){
		
		/* Update Minicart item quantity */
		
		if( ! kapee_options.checkout_product_quantity || $('.woocommerce-checkout-review-order-table').length <= 0){
			return;
		}
		
		$(document).on('change', '.woocommerce-checkout-review-order-table .qty', function(){
			var $form = $( 'form.checkout' );
			var form_data =  $( 'form.checkout' ).serialize();
			$(".woocommerce-checkout-payment, .woocommerce-checkout-review-order-table").block({
                message: null,
                overlayCSS: {
                    opacity: 0.6
                }
            })						
			var data = {
				action 		: 'kapee_update_checkout_quantity',
				form_data 	: form_data,
				nonce		: kapee_options.nonce,
			};
			$.ajax({
				url: kapee_options.ajax_url,
				data: data,
				dataType: 'json',
				method: 'POST',
				success: function (response) {
					if( !response ){
						location.reload();
					}
					$.each( response.fragments, function( key, value ) {
						$( key ).replaceWith( value );
					});			
					$( 'body' ).trigger( 'update_checkout' );
				},
				error: function (jqXHR, exception) {
					console.log("Error: Something went wrong.");
					$(".woocommerce-checkout-payment, .woocommerce-checkout-review-order-table").unblock();
				}
			});
		});
	};
	
	kapee.getVisitorCount = function(){
		
		var min,max,delay;
		var visitor_elm = $('.kapee-visitor-change');
		if(  visitor_elm.length <= 0){
			return;
		}
		min 	= parseInt( visitor_elm.data('min') );
		max 	= parseInt( visitor_elm.data('max') );
		delay 	= parseInt( visitor_elm.data('delay') );
		setInterval(function() {
		  var variation = kapeeGetRandomInt(min, max );
		  visitor_elm.find('.product-visitor-count').html(variation);
		}, delay * 1000 );
		function kapeeGetRandomInt(min, max) {			
			let difference = max - min;
			let rand = Math.random();
			rand = Math.floor( rand * difference);
			rand = rand + min;
			return rand;
		}
	}
	
	kapee.askQuestionsForm = function(){
		
		var ask_questions_form = $('.kapee-ask-questions-ajax');
		if(  ask_questions_form.length <= 0){
			return;
		}
		$('.kapee-ask-questions').magnificPopup({
			type: 'inline',
			preloader: false,			
			removalDelay: 500,
			items: {
				src: '#kapee-ask-questions-popup' ,					
			},
			/* mainClass: 'animated bounceIn', */
			callbacks: {
				open: function() {
					var closeSidebar 	= $('.kapee-mask-overaly');
					var mobileSidebar = $('.kapee-mobile-menu');
					closeSidebar.removeClass('opened');
					mobileSidebar.removeClass('opened');
					$('.kapee-ask-questions-popup').addClass('animate__animated animate__fadeInLeft');
				},
				beforeClose: function() {
						var popupWrap = $( '.kapee-ask-questions-popup' );
						popupWrap.removeClass('animate__fadeInLeft').addClass('animate__fadeOutRight');
					}, 
				close: function() {
					$('.kapee-ask-questions-popup').removeClass('animate__animated animate__fadeOutRight');
				}
			} 
		});
		
	}
	
	kapee.kapeeEqualTabsHeight = function(){
		//*******************************************************************
		//* Equal tabs height
		//*******************************************************************/
		setTimeout(function () {
			$('.products-tab-content').each(function () {
				var $this = $(this);
				if ($this.find('.tab-content').length) {
					$this.find('.tab-content').css({
						'height': 'auto'
					});
					var elem_height = 0;
					$this.find('.tab-content').each(function () {
						var this_elem_h = $(this).height();
						if (elem_height < this_elem_h) {
							elem_height = this_elem_h;
						}
					});
					$this.find('.tab-content').height(elem_height);
				}
			});
		}, 4000);
	};
	
	kapee.kapeeTabEffect = function() {
		// effect click
		$(document).on('click', '.products-tabs .nav-tabs a', function (event) {
			
			var tab_id = $(this).attr('href');
			var tab_animated = 'animate__fadeInUp';
			tab_animated = ( tab_animated == undefined || tab_animated == "" ) ? '' : tab_animated;
			if (tab_animated == "") {
				return false;
			}
			$(tab_id).find('.owl-item.active').each(function (i) {
				
				var t = $(this);
				var style = $(this).attr("style");
				var defaultcss = $(this).attr('default-style');
				style = ( style == undefined ) ? '' : style;
				if(defaultcss == undefined ){
					$(this).attr('default-style',style);
				}else{
					style = $(this).attr('default-style');
				}
				var delay = i * 100;
				t.attr("style", style +
					";-webkit-animation-delay:" + delay + "ms;"
					+ "-moz-animation-delay:" + delay + "ms;"
					+ "-o-animation-delay:" + delay + "ms;"
					+ "animation-delay:" + delay + "ms;"
				).addClass(tab_animated + ' animate__animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () {
					t.removeClass(tab_animated + ' animate__animated');
					t.attr("style", style);
				});
			});
			$(tab_id).addClass('active').siblings().removeClass('active');
		});
	}
	
	kapee.kapeeAjaxTab = function() {
		// Ajax tabs
		$(document).on('click', '.products-tab-container [data-ajax="1"]', function (event) {
			
			var datasource = $(this).data('datasource');
			var limit = $(this).data('limit');
			var slider_data = $(this).data('slider_data');
			var tab_id = $(this).attr('href');
			var current_tab = $(this);
			var data = {
				action      :  'kapee_get_products_tab_data',
				nonce    	:   kapee_options.nonce,
				datasource  :   datasource,
				limit  		:   limit,
				slider_data	:   slider_data,
			};
			
			var container = $(this).closest('.products-tab-container').find('.tab-content');
			
			$.post(kapee_options.ajax_url, data, function(response){
				var items = $( '' + response['html'] + '' );
				
				container.html(items);
				kapee.kapeeOwlCarousel();
			});
		});
	}
	
	kapee.kapeeResponsiveTab = function() {
		// Responsive tabs
		$(document).on('click', '[data-trigger="tab"]', function (event) {
			var href = $( this ).attr( 'href' );
			event.preventDefault();
			$( '[data-toggle="tab"][href="' + href + '"]' ).trigger( 'click' );
		} );

	}
	
	kapee.kapeeProgressbar = function() {
		/*
		* Progress Bar
		*/		
		$('.progress .progress-bar').each(function(){
			if (typeof ($.fn.waypoint) != 'undefined') {
				$(this).waypoint(function(){
					var width = $(this).attr('data-value');
					$(this).animate({
							width: width+'%'
						},
						{
							duration: 1000,
							easing: 'swing'
						}
					);
				}, { offset: '100%', triggerOnce: true });
			}
		});	
	}
	
	kapee.kapeeCounterUp = function() {
		/*
		* Counter Up
		*/	
		if ( ! $.isFunction($.fn.counterUp) ) {
			return;
		}
		jQuery('.counter').counterUp({
            delay: 20,
            time: 2000
        });
	}
	
	kapee.imageGaleryMasonry = function (){
		
		/*
		* Image Gallery Masonry
		*/
		
		if ( ! $('.kapee-image-gallery.image-gallery-masonry-grid').length > 0 ) return;
		var $layoutMode='masonry';
		
		if($( '.kapee-image-gallery.image-gallery-masonry-grid' ).length){
			$( '.kapee-image-gallery.image-gallery-masonry-grid' ).each(function(){
				
				var image_gallery_container = $( this );
				// initialize Masonry after all images have loaded
                image_gallery_container.imagesLoaded(function() {
					image_gallery_container.isotope({
						itemSelector: '.kapee-gallery',
						isOriginLeft: ! $('body').hasClass('rtl'),
						layoutMode: $layoutMode
					});
				 });
			});			
		}		
	};
	
	kapee.BackgroundParallax = function(){
		/*
		* Parallax Background
		*/		
		if ($(window).width() <= 1024) {
			return;
		}
		$('.kapee-parallax-background').each(function() {
			var $this = $(this);
			if ($this.hasClass('wpb_column')) {
				$this.find('> .vc_column-inner').parallax("50%", 0.3);
			} else {
				$this.parallax("50%", 0.3);
			}
		});
	};
	
	/*
	 * Document ready
	 */ 
	$(document).ready(function(){ 
		kapee.init();		
    });
	
	$(document).ready(function(){ 
		$(window).on('vc_reload', function () {
           kapee.init();            
        });	
    });
	
	$( window ).on('load', function () {
		var kapee_pre_loader = $( '.kapee-site-preloader' );
		if ( kapee_pre_loader.length ) {
            kapee_pre_loader.fadeOut( 800 );
		}
	});
	
	//After screen resize
   /*  $(window).on('load resize', function () {
		if (typeof ($.fn.stick_in_parent) != 'undefined') {

			var product_summery_sticky = $(".single-product-page .entry-summary");
			var product_images_sticky = $(".single-product-page .product-images .images-inner");
			var product_summery_sticky_height = product_summery_sticky.height();
			var product_images_sticky_height = product_images_sticky.height();
				
			if ($(window).width() > 769) {
				var offset = 15;
				if ($('#header .header-sticky')[0]) {
					offset = $('#header .header-sticky').height() + 30;
				}
				if ( kapee_options.sticky_image_wrapper ){ 
					if(product_summery_sticky_height > product_images_sticky_height){
						product_images_sticky.stick_in_parent({
							offset_top: offset
					  });
					}
					
				}
				if ( kapee_options.sticky_summary_wrapper ){
					if(product_summery_sticky_height < product_images_sticky_height){
						product_summery_sticky.stick_in_parent({
							offset_top: offset
					  });
					}
				} 
			} else{
				if ( kapee_options.sticky_image_wrapper ){ 
					product_images_sticky.trigger('sticky_kit:detach');
				}
				if ( kapee_options.sticky_summary_wrapper ){	
					product_summery_sticky.trigger('sticky_kit:detach');
				}
			}
		}
    }); */
	
})(jQuery);