Current File : /home/digitaw/www/wp-content/plugins/royal-elementor-addons/assets/js/admin/library-frontend.min.js
( function( $ ) {

	"use strict";

	// Modal Popups
	var WprLibraryTmpls = {

		sectionIndex: null,
		contentID: 0,
		logoURL: white_label.logo_url,

		init: function() {
			window.elementor.on( 'preview:loaded', WprLibraryTmpls.previewLoaded );
		},

		previewLoaded: function() {
			var previewIframe = window.elementor.$previewContents,
				addNewSection = previewIframe.find( '.elementor-add-new-section' ),
				libraryButton = '<div id="wpr-library-btn" class="elementor-add-section-area-button" style="background:url('+ WprLibraryTmpls.logoURL +') no-repeat center center / contain;"></div>';

			// Add Library Button
            var elementorAddSection = $("#tmpl-elementor-add-section"),
            	elementorAddSectionText = elementorAddSection.text();
            elementorAddSectionText = elementorAddSectionText.replace('<div class="elementor-add-section-drag-title', libraryButton +'<div class="elementor-add-section-drag-title');
            elementorAddSection.text(elementorAddSectionText);

			$( previewIframe ).on( 'click', '.elementor-editor-section-settings .elementor-editor-element-add', function() {
				var addNewSectionWrap = $(this).closest( '.elementor-top-section' ).prev( '.elementor-add-section' ),
					modelID = $(this).closest( '.elementor-top-section' ).data( 'model-cid' );

				// Add Library Button
				if ( 0 == addNewSectionWrap.find( '#wpr-library-btn' ).length ) {
					setTimeout( function() {
						addNewSectionWrap.find( '.elementor-add-new-section' ).prepend( libraryButton );
					}, 110 );
				}

				// Set Section Index
				if ( window.elementor.elements.models.length ) {
					$.each( window.elementor.elements.models, function( index, model ) {
						if ( modelID === model.cid ) {
							WprLibraryTmpls.sectionIndex = index;
						}
					});
				}

				WprLibraryTmpls.contentID++;
			});


			// Open Popup Predefined Styles
			// TODO: Experiment Disable Library opening for Pupups
			// if ( 'wpr-popups' === window.elementor.config.document.type ) {
			// 	setTimeout(function() {
			// 		if ( 0 === previewIframe.find('.elementor-section-wrap.ui-sortable').children().length ) {
			// 			previewIframe.find('#wpr-library-btn').trigger('click');
			// 		}
			// 	}, 2000);
			// }

			// Popup
			previewIframe.on( 'click', '#wpr-library-btn', function() {

				// Render Popup
				WprLibraryTmpls.renderPopup( previewIframe );

				// Render Content
				if ( 'wpr-popups' === window.elementor.config.document.type && undefined === previewIframe.find('#wpr-library-btn').attr('data-filter') ) {
					WprLibraryTmpls.renderPopupContent( previewIframe, 'popups' );
				} else if ( 'wp-post' === window.elementor.config.document.type && undefined === previewIframe.find('#wpr-library-btn').attr('data-filter') ) {
					WprLibraryTmpls.renderPopupContent( previewIframe, 'sections' );
				} else if ( undefined !== previewIframe.find('#wpr-library-btn').attr('data-filter') ) {
					previewIframe.find('.wpr-tplib-header').find('li').removeClass( 'wpr-tplib-active-tab' );
					previewIframe.find('.wpr-tplib-header').find('li[data-tab="blocks"]').addClass( 'wpr-tplib-active-tab' );
					WprLibraryTmpls.renderPopupContent( previewIframe, 'blocks' );
				} else {
					WprLibraryTmpls.renderPopupContent( previewIframe, 'pages' );
				}

				// Filter Content
				$(document).on( 'wpr-filter-popup-content', function() {
					var filter = previewIframe.find('#wpr-library-btn').attr('data-filter');
					previewIframe.find( '.wpr-tplib-sidebar ul li[data-filter="'+ filter +'"]' ).trigger('click');
				});

			});

			// Booking tutorial link
			previewIframe.on( 'click', '#wpr-info-box a', function(event) {
				event.preventDefault();
				
				var url = $(this).attr('href');
				
				if (url) {
					window.open(url, '_blank');
				}
			});
		},

		renderPopup: function( previewIframe ) {
			// Render
			if ( previewIframe.find( '.wpr-tplib-popup' ).length == 0 ) {
				var headerNavigation  = '';

				if ( 'wp-post' === window.elementor.config.document.type ) {
					headerNavigation += '<li data-tab="pages">Pages</li>';
					headerNavigation += '<li data-tab="sections" class="wpr-tplib-active-tab">Sections</li>';
				} else {
					headerNavigation += '<li data-tab="pages" class="wpr-tplib-active-tab">Pages</li>';
					headerNavigation += '<li data-tab="sections">Sections</li>';
				}

				headerNavigation += '<li data-tab="blocks">Blocks</li>';

				if ( 'wpr-popups' === window.elementor.config.document.type ) {
					if ( undefined === previewIframe.find('#wpr-library-btn').attr('data-filter') ) {
						var headerNavigation = '\
						<li data-tab="popups" class="wpr-tplib-active-tab">Popups</li>\
						<li data-tab="sections">Sections</li>\
						<li data-tab="blocks">Blocks</li>';
					} else {
						var headerNavigation = '\
						<li data-tab="popups">Popups</li>\
						<li data-tab="sections">Sections</li>\
						<li data-tab="blocks" class="wpr-tplib-active-tab">Blocks</li>';
					}
				}

				previewIframe.find( 'body' ).append( '\
					<div class="wpr-tplib-popup-overlay">\
						<div class="wpr-tplib-popup">\
							<div class="wpr-tplib-header elementor-clearfix">\
								<div class="wpr-tplib-logo"><span class="wpr-library-icon" style="background:url('+ WprLibraryTmpls.logoURL +') no-repeat center center / contain;">RE</span>Library</div>\
								<div class="wpr-tplib-back" data-tab="">\
									<i class="eicon-chevron-left"></i> <span>Back to Library</span>\
								</div>\
								<ul>'+ headerNavigation +'</ul>\
								<span class="wpr-tplib-insert-template"><i class="eicon-file-download"></i> <span>Insert</span></span>\
								<div class="wpr-tplib-close"><i class="eicon-close"></i></div>\
							</div>\
							<div class="wpr-tplib-content-wrap elementor-clearfix">\
							</div>\
							<div class="wpr-tplib-preview-wrap"></div>\
						</div>\
					</div>\
				' );
			}
			
			// Show Overlay
			$e.run( 'panel/close' );
			$('#wpr-template-settings-notification').hide();
			previewIframe.find('html').css('overflow','hidden');
			previewIframe.find('.wpr-tplib-preview-wrap iframe').remove();
			previewIframe.find( '.wpr-tplib-popup-overlay' ).show();

			// Close
			previewIframe.find( '.wpr-tplib-close' ).on( 'click', function() {
				$e.run( 'panel/open' );
				$('#wpr-template-settings-notification').show();
				previewIframe.find('html').css('overflow','auto');
				
				previewIframe.find( '.wpr-tplib-popup-overlay' ).fadeOut( 'fast', function() {
					previewIframe.find('.wpr-tplib-popup-overlay').remove();
					previewIframe.find('#wpr-library-btn').removeAttr('data-filter');
				});
			});

			// Render Content
			previewIframe.find('.wpr-tplib-header').find('li').on( 'click', function() {
				previewIframe.find( '.wpr-tplib-header' ).find('li').removeClass( 'wpr-tplib-active-tab' );
				$(this).addClass( 'wpr-tplib-active-tab' );

				// Render Tab Content
				previewIframe.find('.wpr-tplib-content-wrap').html('');
				WprLibraryTmpls.renderPopupContent( previewIframe, $(this).data('tab') );
			});

			// Close Preview
			previewIframe.find( '.wpr-tplib-back' ).on( 'click', function() {
				$(this).hide();
				previewIframe.find('.wpr-tplib-close i').css('border-left', '0');
				previewIframe.find('.wpr-tplib-header').find('.wpr-tplib-insert-template').hide();
				previewIframe.find('.wpr-tplib-header').find('.wpr-tplib-insert-template').removeClass('wpr-tplib-insert-pro').removeClass('wpr-tplib-insert-woo');
				previewIframe.find( '.wpr-tplib-preview-wrap' ).hide();
				previewIframe.find( '.wpr-tplib-preview-wrap' ).html('');
				previewIframe.find('.wpr-tplib-popup').css('overflow','hidden');

				previewIframe.find( '.wpr-tplib-logo' ).show();
				previewIframe.find( '.wpr-tplib-header ul li' ).show();
				previewIframe.find( '.wpr-tplib-content-wrap' ).show();
			});
		},

		renderPopupContent: function( previewIframe, tab, scrolling = false ) {
			WprLibraryTmpls.renderPopupLoader( previewIframe );
			
			// AJAX Data
			var data = {
				action: 'render_library_templates_'+ tab
			};

			// Update via AJAX
			$.post(ajaxurl, data, function( response ) {
				previewIframe.find('.wpr-tplib-content-wrap').html('');
				previewIframe.find('.wpr-tplib-content-wrap').html( response );

			// Render Preview
			}).always(function() {
				// Template Preview
				WprLibraryTmpls.templateGridPreview(previewIframe);

				// Filters
				previewIframe.find( '.wpr-tplib-filters-list ul li' ).on( 'click', function() {
					var current = $(this).attr( 'data-filter' );

					// Show/Hide
					if ( 'all' === current ) {
						previewIframe.find( '.wpr-tplib-template' ).parent().show();
					} else {
						previewIframe.find( '.wpr-tplib-template' ).parent().hide();
						previewIframe.find( '.wpr-tplib-template[data-filter="'+ current +'"]' ).parent().show();
					}

					previewIframe.find('.wpr-tplib-filters h3 span').attr('data-filter', current).text($(this).text());

					// Sub Filters - TODO: Enable When Pro is Integrated
					// if ( -1 !== current.indexOf('grid') ) {
					// 	previewIframe.find( '.wpr-tplib-sub-filters' ).show();
					// } else {
					// 	previewIframe.find( '.wpr-tplib-sub-filters' ).hide();
					// }

					WprLibraryTmpls.renderPopupGrid( previewIframe );
				});

				// Sub Filters
				previewIframe.find( '.wpr-tplib-sub-filters ul li' ).on( 'click', function() {
					var current = $(this).attr( 'data-sub-filter' ),
						parentFilter = previewIframe.find('.wpr-tplib-filters h3 span').attr('data-filter');

					// Active Class
					previewIframe.find( '.wpr-tplib-sub-filters ul li' ).removeClass( 'wpr-tplib-activ-filter' );
					$(this).addClass( 'wpr-tplib-activ-filter' );

					// Show/Hide
					if ( 'all' === current ) {
						previewIframe.find( '.wpr-tplib-template[data-filter="'+ parentFilter +'"]' ).parent().show();
					} else {
						previewIframe.find( '.wpr-tplib-template' ).parent().hide();
						previewIframe.find( '.wpr-tplib-template[data-filter="'+ parentFilter +'"][data-sub-filter="'+ current +'"]' ).parent().show();
					}

					WprLibraryTmpls.renderPopupGrid( previewIframe );
				});

				// Price Filter
				previewIframe.find( '.wpr-tplib-price-list ul li' ).on( 'click', function() {
					// Get Search Query
					var search = previewIframe.find('.wpr-tplib-search input').val(),
						searchAttr = '' === search ? '' : '[data-title*="'+ search +'"]';

					// Reset
					

					// Set Active
					previewIframe.find('.wpr-tplib-price').attr('data-filter', $(this).data('filter'));
					previewIframe.find('.wpr-tplib-price').find('h3 span').text( $(this).text() );

					if ( 'free' === $(this).data('filter') ) {
						previewIframe.find('.wpr-tplib-template-wrap'+ searchAttr).show();
						previewIframe.find('.wpr-tplib-pro-wrap').hide();
					} else if ( 'pro' === $(this).data('filter') ) {
						previewIframe.find('.wpr-tplib-template-wrap').hide();
						previewIframe.find('.wpr-tplib-pro-wrap'+ searchAttr).show();
					} else {
						previewIframe.find('.wpr-tplib-template-wrap'+ searchAttr).show();
					}

					// previewIframe.find('.wpr-tplib-template-wrap'+ searchAttr).show();

					WprLibraryTmpls.renderPopupGrid( previewIframe );
				});

				// Search
				var searchTimeout = null;

				previewIframe.find( '.wpr-tplib-sidebar input' ).on( 'keyup', function() { // .wpr-tplib-search
					var val = $(this).val().toLowerCase();
					var price = previewIframe.find('.wpr-tplib-price').attr('data-filter');

					if (searchTimeout != null) {
						clearTimeout(searchTimeout);
					}

					searchTimeout = setTimeout(function() {
						searchTimeout = null;

						let keywords = ["appointment", "book"]; // Keywords to look for
			
						// Check if any keyword matches the input
						let keywordFound = keywords.some(function(keyword) {
							return keyword.includes(val) || val.includes(keyword);
						});
				
						// If a keyword is found and the div doesn't already exist
						if (keywordFound && !(previewIframe.find('#wpr-info-box').length > 0)) {
							// Append the new div
							let infoBox = `
								<div id="wpr-info-box">
									Looking for Booking Solution? Check out the <a href="https://www.youtube.com/watch?v=asdMBXpd2Nw">Video Tutorial</a>.
								</div>
							`;
							previewIframe.find('.wpr-tplib-search').before(infoBox);
						}
			
						// If no keyword is found and the div exists, remove it
						else if ( (!keywordFound || val === '') && previewIframe.find('#wpr-info-box').length > 0 ) {
							previewIframe.find('#wpr-info-box').remove();
						}

						if ( 'pages' === tab ) {
							// Modify search to respect price filter
							if ('free' === price) {
								previewIframe.find('.wpr-tplib-pro-wrap').hide();
								previewIframe.find('.wpr-tplib-template-wrap:not(.wpr-tplib-pro-wrap)[data-title*="'+ val +'"]').show();
							} else if ('pro' === price) {
								previewIframe.find('.wpr-tplib-template-wrap:not(.wpr-tplib-pro-wrap)').hide();
								previewIframe.find('.wpr-tplib-pro-wrap[data-title*="'+ val +'"]').show();
							} else {
								WprLibraryTmpls.templateGridSearch(previewIframe, val);
							}

							WprLibraryTmpls.renderPopupGrid( previewIframe );

							elementorCommon.ajax.addRequest( 'wpr_templates_library_search_data', {
								data: {
									search_query: val,
								},
								success: function() {
									// console.log(val);
								}
							});
						} else if ( 'blocks' === tab ) {
							if ( '' !== val ) {
								previewIframe.find('.wpr-tplib-template-wrap').hide();
								previewIframe.find('.wpr-tplib-template-wrap[data-title*="'+ val +'"]').show();
							} else {
								previewIframe.find('.wpr-tplib-template-wrap').show();
							}

							WprLibraryTmpls.renderPopupGrid( previewIframe );

							elementorCommon.ajax.addRequest( 'wpr_templates_library_blocks_search_data', {
								data: {
									search_query: val,
								},
								success: function() {
									// console.log(val);
								}
							});
						} else if ( 'sections' === tab ) {
							if ( '' !== val ) {
								previewIframe.find('.wpr-tplib-template-wrap').hide();
								previewIframe.find('.wpr-tplib-template-wrap[data-title*="'+ val +'"]').show();
							} else {
								previewIframe.find('.wpr-tplib-template-wrap').show();
							}

							WprLibraryTmpls.renderPopupGrid( previewIframe );

							elementorCommon.ajax.addRequest( 'wpr_templates_library_sections_search_data', {
								data: {
									search_query: val,
								},
								success: function() {
									// console.log(val);
								}
							});
						}
					}, 1000);
				});

				// Import Template
				WprLibraryTmpls.templateGridImport(previewIframe);

				$(document).trigger('wpr-filter-popup-content');

				function showHideLibraryFilters( selector ) {
					previewIframe.find('.wpr-tplib-'+ selector).on('click', function(){
						if ( '0' == previewIframe.find('.wpr-tplib-'+ selector +'-list').css('opacity') ) {
							previewIframe.find('.wpr-tplib-'+ selector +'-list').css({
								'opacity' : '1',
								'visibility' : 'visible'
							});
						} else {
							previewIframe.find('.wpr-tplib-'+ selector +'-list').css({
								'opacity' : '0',
								'visibility' : 'hidden'
							});
						}
					});
	
					previewIframe.on('click', function(){
						if ( '1' == previewIframe.find('.wpr-tplib-'+ selector +'-list').css('opacity') ) {
							previewIframe.find('.wpr-tplib-'+ selector +'-list').css({
								'opacity' : '0',
								'visibility' : 'hidden'
							});
						}
					});
				}

				showHideLibraryFilters('filters');
				showHideLibraryFilters('price');

				WprLibraryTmpls.renderPopupGrid( previewIframe );

			}); // end always

			setTimeout(function(){
				WprLibraryTmpls.renderTemplatesGridContent(previewIframe, tab);
			}, 2000);
			
		},

		renderTemplatesGridContent: function(previewIframe, tab, page = 1,) {
			var data = {
				action: 'render_library_templates_pages_grid_items',
				page: page
			};

			let isPagesActive = previewIframe.find('.wpr-tplib-header ul li[data-tab="pages"]').hasClass('wpr-tplib-active-tab');

			$.post(ajaxurl, data, function(response) {
				if ( !isPagesActive ) return;
				
				previewIframe.find('.wpr-tplib-template-gird-inner').append(response);

				var loading = ('' === response) ? false : true;

				if (loading) {
					var searchVal = previewIframe.find('.wpr-tplib-sidebar input').val().toLowerCase();
					WprLibraryTmpls.templateGridSearch(previewIframe, searchVal);
					WprLibraryTmpls.renderPopupGrid(previewIframe);
					WprLibraryTmpls.templateGridPreview(previewIframe);
					WprLibraryTmpls.templateGridImport(previewIframe);

					// Proceed to the next iteration
					setTimeout(function() {
						WprLibraryTmpls.renderTemplatesGridContent(previewIframe, tab, page + 1);
					}, 1000);
				} else {
					previewIframe.find('.wpr-tplib-template-gird-loading').fadeOut();
				}
			});

			// Optimize lazy loading with IntersectionObserver
			var lazyImages = previewIframe.find('.wpr-tplib-template-gird img.lazy');
			if ("IntersectionObserver" in window) {
				var lazyImageObserver = new IntersectionObserver(function(entries, observer) {
					entries.forEach(function(entry) {
						if (entry.isIntersecting) {
							var lazyImage = $(entry.target);
							lazyImage.attr('src', lazyImage.data('src'));
							lazyImage.removeClass('lazy');
							lazyImageObserver.unobserve(entry.target);

							$(window).trigger('resize');
						}
					});
				}, {
					rootMargin: '0px 0px 100px 0px', // Adjust the root margin to load images slightly later as they enter the viewport
					threshold: 0.1 // This sets the threshold for the IntersectionObserver. A value of 0.1 means the observer will trigger when 10% of the target element is visible in the viewport.
				});

				lazyImages.each(function() {
					lazyImageObserver.observe(this);
				});
			} else {
				// Fallback for browsers that do not support IntersectionObserver
				var lazyLoadThrottleTimeout;
				function lazyLoad() {
					if (lazyLoadThrottleTimeout) {
						clearTimeout(lazyLoadThrottleTimeout);
					}
	
					lazyLoadThrottleTimeout = setTimeout(function() {
						var scrollTop = $(window).scrollTop();
						lazyImages.each(function() {
							var img = $(this);
							if (img.offset().top < (window.innerHeight + scrollTop)) {
								img.attr('src', img.data('src'));
								img.removeClass('lazy');

								$(window).trigger('resize');
							}
						});
						if (lazyImages.length == 0) {
							$(document).off("scroll", lazyLoad);
							$(window).off("resize", lazyLoad);
							$(window).off("orientationChange", lazyLoad);
						}
					}, 20);
				}
	
				$(document).on("scroll", lazyLoad);
				$(window).on("resize", lazyLoad);
				$(window).on("orientationChange", lazyLoad);
			}
		},

		templateGridSearch: function( previewIframe, value ) {
			var price = previewIframe.find('.wpr-tplib-price').attr('data-filter');
			
			if ( '' !== value ) {
				previewIframe.find('.wpr-tplib-template-wrap').hide();
				
				if ('free' === price) {
					previewIframe.find('.wpr-tplib-template-wrap:not(.wpr-tplib-pro-wrap)[data-title*="'+ value +'"]').show();
				} else if ('pro' === price) {
					previewIframe.find('.wpr-tplib-pro-wrap[data-title*="'+ value +'"]').show();
				} else {
					previewIframe.find('.wpr-tplib-template-wrap[data-title*="'+ value +'"]').show();
				}
			} else {
				if ('free' === price) {
					previewIframe.find('.wpr-tplib-pro-wrap').hide();
					previewIframe.find('.wpr-tplib-template-wrap:not(.wpr-tplib-pro-wrap)').show();
				} else if ('pro' === price) {
					previewIframe.find('.wpr-tplib-template-wrap:not(.wpr-tplib-pro-wrap)').hide();
					previewIframe.find('.wpr-tplib-pro-wrap').show();
				} else {
					previewIframe.find('.wpr-tplib-template-wrap').show();
				}
			}
		},

		templateGridPreview: function( previewIframe ) {
			previewIframe.find( '.wpr-tplib-template-media' ).on( 'click', function() {
				let activeTab = previewIframe.find('.wpr-tplib-active-tab').attr('data-tab');

				var module = $(this).parent().data('filter'),
					template = $(this).parent().data('slug'),
					kitID = $(this).parent().data('kit'),
					previewUrl = 'sections' !== activeTab ? 'https://royal-elementor-addons.com/premade-styles/'+ $(this).parent().data('preview-url') : $(this).parent().find('img').attr('src'),
					previewType = $(this).parent().data('preview-type'),
					proRefferal = '';

				if ( $(this).closest('.wpr-tplib-pro-wrap').length ) {
					proRefferal = '-pro';
					previewIframe.find('.wpr-tplib-header').find('.wpr-tplib-insert-template').addClass('wpr-tplib-insert-pro');
				}

				if ( $(this).closest('.wpr-tplib-woo-wrap').length ) {
					proRefferal = '-pro';
					previewIframe.find('.wpr-tplib-header').find('.wpr-tplib-insert-template').addClass('wpr-tplib-insert-woo');
				}

				previewIframe.find('.wpr-tplib-header').find('.wpr-tplib-insert-template').attr('data-filter', module).attr('data-slug', template).attr('data-kit', kitID);

				previewIframe.find('.wpr-tplib-header').find('.wpr-tplib-insert-template').html($(this).parent().find('.wpr-tplib-insert-template').html());

				previewIframe.find('.wpr-tplib-close i').css('border-left', '1px solid #e8e8e8');

				// Hide Extra
				previewIframe.find('.wpr-tplib-logo').hide();
				previewIframe.find('.wpr-tplib-header ul li').hide();
				previewIframe.find('.wpr-tplib-back').show();
				previewIframe.find('.wpr-tplib-header').find('.wpr-tplib-insert-template').show();
				
				// Load Iframe
				previewIframe.find('.wpr-tplib-content-wrap').hide();
				previewIframe.find('.wpr-tplib-preview-wrap').show();

				if ( 'iframe' == previewType ) {
					if ( undefined !== kitID ) {
						previewUrl = previewUrl.replace('https://', 'https://demosites.').replace('premade-styles', kitID);
					}
					
					previewIframe.find('.wpr-tplib-preview-wrap').html( '<div class="wpr-tplib-iframe"><iframe src="'+ previewUrl +'?ref=rea-plugin-library-preview'+ proRefferal +'"></iframe></div>' );
					previewIframe.find('.wpr-tplib-popup').css('overflow','hidden');
				} else {
					previewUrl = previewUrl.replace('premade-styles', 'library/premade-styles');
					previewIframe.find('.wpr-tplib-preview-wrap').html( '<div class="wpr-tplib-image"><img src="'+ previewUrl +'"></div>' );

					// Enable Scroll for Image Previews
					previewIframe.find('.wpr-tplib-popup').css('overflow','scroll');
				}
			});
		},

		templateGridImport: function( previewIframe ) {
			previewIframe.find( '.wpr-tplib-insert-template' ).off('click');
			previewIframe.find( '.wpr-tplib-insert-template' ).on( 'click', function() {
				var module = ( $(this).parent().hasClass('wpr-tplib-header') ) ? $(this).attr( 'data-filter' ) : $(this).closest( '.wpr-tplib-template' ).attr( 'data-filter' ),
					template = ( $(this).parent().hasClass('wpr-tplib-header') ) ? $(this).attr( 'data-slug' ) : $(this).closest( '.wpr-tplib-template' ).attr( 'data-slug' ),
					kitID = ( $(this).parent().hasClass('wpr-tplib-header') ) ? $(this).attr( 'data-kit' ) : $(this).closest( '.wpr-tplib-template' ).attr( 'data-kit' ),
					sectionSlug = ( $(this).parent().hasClass('wpr-tplib-header') ) ? $(this).attr( 'data-filter' ) : $(this).closest( '.wpr-tplib-template' ).attr( 'data-filter' ),
					activeTab = previewIframe.find('.wpr-tplib-active-tab').attr('data-tab');

				// Is Woo Template and Woo is not Active
				if ( $(this).closest('.wpr-tplib-template-wrap').hasClass('wpr-tplib-woo-wrap') || $(this).hasClass('wpr-tplib-insert-woo') ) {
					alert('In order to import this Template, Please activate WooCommerce plugin.');
					return;
				}

				// Popup Templates
				if ( 'wpr-popups' === window.elementor.config.document.type && 'popups' === activeTab ) {
					module = 'popups/'+ module;
				}

				// Purchase Page
				if ( $(this).hasClass('wpr-tplib-insert-pro') ) {
					var href = window.location.href,
						adminUrl = href.substring(0, href.indexOf('/wp-admin')+9);

					// window.open(adminUrl +'/admin.php?page=wpr-addons-pricing', '_blank');
					window.open('https://royal-elementor-addons.com/?ref=rea-plugin-library-'+ module +'-upgrade-pro#purchasepro', '_blank');
					return;
				}

				previewIframe.find('.wpr-tplib-content-wrap').show();
				previewIframe.find('.wpr-tplib-preview-wrap').hide();
				WprLibraryTmpls.renderPopupLoader( previewIframe );
				
				// Template Slug
				template = template.includes('-zzz') ? template.replace('-zzz', '') : template;
				template = 'pages' === activeTab ? template : module +'/'+ template;
				sectionSlug = 'sections' === activeTab ? sectionSlug : '';

				// AJAX Data
				var data = {
					action: 'wpr_import_library_template',
					nonce: WprLibFrontLoc.nonce,
					slug: template,
					kit: kitID,
					section: sectionSlug
				};

				// Update via AJAX
				$.post(ajaxurl, data, function(response) {
					if ( 0 == response ) {
						location.reload();
						return;
					}

					var importFile = response.substring( 0, response.length-1 ),
						importFile = JSON.parse( importFile );

						console.log(importFile);

					importFile.content[0].id += WprLibraryTmpls.contentID;

					// Insert Template
					window.elementor.getPreviewView().addChildModel( importFile.content, { at: WprLibraryTmpls.sectionIndex } );

					// Import Page Settings
					if ( 'undefined' !== typeof importFile.page_settings && undefined !== kitID ) {
						elementor.settings.page.model.set( importFile.page_settings );
					}

					// Popups
					if ( 'wpr-popups' === window.elementor.config.document.type && 'popups' === activeTab ) {
						var defaults = {
							popup_trigger: 'load',
							popup_show_again_delay: '0',
							popup_load_delay: '1',
							popup_display_as: 'modal',
							popup_width: {
								unit: 'px',
								size: '650'
							},
							popup_height: 'auto',
							popup_align_hr: 'center',
							popup_align_vr: 'center',
							popup_content_align: 'flex-start',
							popup_animation: 'fadeIn',
							popup_animation_duration: '1',
							popup_overlay_display: 'yes',
							popup_close_button_display: 'yes',
							popup_container_bg_background: 'classic',
							popup_container_bg_position: 'center center',
							popup_container_bg_repeat: 'no-repeat',
							popup_container_bg_size: 'cover',
							popup_overlay_bg_background: 'classic',
							popup_container_padding: {
								isLinked: true,
								unit: 'px',
								top: 20,
								right: 20,
								bottom: 20,
								left: 20,
							},
							popup_container_radius: {
								isLinked: true,
								unit: 'px',
								top: 0,
								right: 0,
								bottom: 0,
								left: 0,
							}
						};
						// Reset Defaults
						elementor.settings.page.model.set(defaults);

						// Import Page Settings
						elementor.settings.page.model.set( importFile.page_settings );
					}

					// Fix Update Button
					window.elementor.panel.$el.find('#elementor-panel-footer-saver-publish button').removeClass('elementor-disabled');
					window.elementor.panel.$el.find('#elementor-panel-footer-saver-options button').removeClass('elementor-disabled');

					// Reset Section Index
					WprLibraryTmpls.sectionIndex = null;

					// Close Library
					$e.run( 'panel/open' );
					$('#wpr-template-settings-notification').show();
					previewIframe.find('html').css('overflow','auto');
					previewIframe.find( '.wpr-tplib-popup-overlay' ).fadeOut( 'fast', function() {
						previewIframe.find('.wpr-tplib-popup-overlay').remove();
						previewIframe.find('#wpr-library-btn').removeAttr('data-filter');
					});
				}).success(function() {
					let block = 'blocks' === activeTab ? template : '',
						section = 'sections' === activeTab ? template : '';

						console.log(section);
					// Run Import Finished 
					elementorCommon.ajax.addRequest( 'wpr_library_template_import_finished', {
						data: {
							template: template,
							kit: kitID,
							block: block,
							section: section//tzz
						},
						success: function() {
							// console.log(block);
						}
					});
				});
			});
		},

		renderPopupLoader: function( previewIframe ) {
			previewIframe.find( '.wpr-tplib-content-wrap' ).prepend('<div class="wpr-tplib-loader"><div class="elementor-loader-wrapper"><div class="elementor-loader"><div class="elementor-loader-boxes"><div class="elementor-loader-box"></div><div class="elementor-loader-box"></div><div class="elementor-loader-box"></div><div class="elementor-loader-box"></div></div></div><div class="elementor-loading-title">Loading</div></div></div>');
		},

		renderPopupGrid: function( previewIframe ) {
			let activeTab = previewIframe.find('.wpr-tplib-active-tab').attr('data-tab'),
				gColumns = 'sections' === activeTab ? 4 : 5;

			// Run Macy
			var macy = Macy({
				container: previewIframe.find('.wpr-tplib-template-gird-inner')[0],
				waitForImages: true,
				margin: 30,
				columns: gColumns,
				breakAt: {
					1450: 4,
					940: 3,
					520: 2,
					400: 1
				}
			});

			setTimeout(function(){
				macy.recalculate(true);
			}, 300 );

			setTimeout(function(){
				macy.recalculate(true);
			}, 600 );
			
			// Debounce function to limit the rate of recalculation
			function debounce(func, wait) {
				let timeout;
				return function(...args) {
					const context = this;
					clearTimeout(timeout);
					timeout = setTimeout(() => func.apply(context, args), wait);
				};
			}

			const debouncedRecalculate = debounce(() => {
				macy.recalculate(true);
			}, 300);

			// Use debounced function on resize
			$(window).on('resize', debouncedRecalculate);

		}

	};

	$( window ).on( 'elementor:init', WprLibraryTmpls.init );

}( jQuery ) );