PageSourceSearch

https://www.fouchemotorssa.co.za/wp-content/themes/upstore/js/main.js?ver=1.6.0

js fouchemotorssa.co.za collected 2026-09-24 15:15:36 UTC 48,687 bytes, 1,500 lines download raw bytes

1jQuery(function($){
2	"use strict";
3	var on_touch = !$('body').hasClass('ts_desktop');
4	
5	/** Remove loading from fullwidth row **/
6	$(document).on('vc-full-width-row-single', function(e, data){
7		data.el.removeClass('loading');
8	});
9	
10	/** Mega menu **/
11	ts_mega_menu_change_state($('body').innerWidth());
12	$('.widget_nav_menu .menu-item-has-children .sub-menu').before('<span class="ts-menu-drop-icon"></span>');
13	
14	/** Menu on IPAD **/
15	if( on_touch || $(window).width() < 768 ){
16		ts_menu_action_on_ipad();
17	}
18	
19	/** Sticky Menu **/
20	if( typeof upstore_params != 'undefined' && upstore_params.sticky_header == 1 ){
21		ts_sticky_menu();
22	}
23	
24	/** Device - Resize action **/
25	$(window).on('resize orientationchange', $.throttle(250, function(){
26		ts_mega_menu_change_state($('body').innerWidth());
27		ts_set_cloud_zoom();
28	}));
29	
30	/** Shopping cart on ipad **/
31	if( on_touch ){
32		$(document).on('click', '.ts-tiny-cart-wrapper span.drop-icon', function(){
33			$(this).parent().parent().toggleClass('active');
34		});
35	}
36	
37	/** Header Currency - Language selector on mobile **/
38	if( on_touch ){
39		$('.header-currency a.wcml_selected_currency').on('click', function(){
40			$('.header-currency').toggleClass('active');
41		});
42		$('.header-language a.lang_sel_sel').on('click', function(){
43			$('.header-language').toggleClass('active');
44			return false;
45		});
46	}
47	
48	/** To Top button **/
49	if( $('html').offset().top < 100 ){
50		$("#to-top").hide().addClass("off");
51	}
52	$(window).on('scroll', function(){
53		if( $(this).scrollTop() > 100 ){
54			$("#to-top").removeClass("off").addClass("on");
55		} else {
56			$("#to-top").removeClass("on").addClass("off");
57		}
58	});
59	$('#to-top .scroll-button').on('click', function(){
60		$('body,html').animate({
61			scrollTop: '0px'
62		}, 1000);
63		return false;
64	});
65	
66	/** Quickshop **/
67	$(document).on('click', 'a.quickshop', function( e ){
68		e.preventDefault();
69		
70		var product_id = $(this).data('product_id');
71		if( product_id === undefined ){
72			return;
73		}
74		
75		var container = $('#ts-quickshop-modal');
76		container.addClass('loading');
77		container.find('.quickshop-content').html('');
78		$.ajax({
79			type : 'POST'
80			,url : upstore_params.ajax_url
81			,data : {action : 'upstore_load_quickshop_content', product_id: product_id}
82			,success : function(response){
83				container.find('.quickshop-content').html( response );
84				container.find('img:first').on('load', function(){
85					var height_content = Math.floor(container.find('.popup-container').height()/2)*2;
86					container.find('.popup-container').css({'height': height_content});
87					container.find('.summary').css({'max-height': height_content});
88					container.find('.image-items').removeClass('loading');
89				});
90				container.removeClass('loading').addClass('show');
91				
92				container.find('form.variations_form').wc_variation_form();
93				container.find('form.variations_form .variations select').change();
94				$('body').trigger('wc_fragments_loaded');
95				
96				container.find('form.variations_form').on('click', '.reset_variations', function(){
97					$(this).parents('.variations').find('.ts-product-attribute .option').removeClass('selected');
98				});
99			
100				if( container.find('.image-item').length <= 1 ){
101					return;
102				}
103				
104				container.find('.image-items').owlCarousel({
105						items: 1
106						,loop: true
107						,nav: true
108						,navText: [,]
109						,dots: false
110						,navSpeed: 1000
111						,rtl: $('body').hasClass('rtl')
112						,navRewind: false
113					});
114			}
115		});
116	});
117	
118	$(document).on('click', '.ts-popup-modal .close, .ts-popup-modal .overlay', function(){
119		$('.ts-popup-modal').removeClass('show');
120	});
121	
122	/** Login/Registration popup **/
123	if( $('#ts-account-modal').length > 0 ){
124		$('.ts-tiny-account-wrapper .account-control a').on('click', function(e){
125			e.preventDefault();
126			$('#ts-account-modal').addClass('show');
127		});
128		
129		if( $('#ts-account-modal .woocommerce-error').length || $('#ts-account-modal .woocommerce-notices-wrapper .is-error').length ){
130			$('#ts-account-modal').addClass('show');
131		}
132	}
133	
134	/** Wishlist **/
135	$(document).on('click', '.add_to_wishlist, .product a.compare:not(.added)', function(){
136		$(this).addClass('loading');
137	});
138	
139	$('body').on('added_to_wishlist', function(){
140		ts_update_tini_wishlist();
141		$('.add_to_wishlist').removeClass('loading');
142		$('.yith-wcwl-wishlistaddedbrowse.show, .yith-wcwl-wishlistexistsbrowse.show').parent('.button-in.wishlist').addClass('added');
143	});
144	
145	$('body').on('removed_from_wishlist added_to_cart', function(){
146		if( $('.wishlist_table').length ){
147			ts_update_tini_wishlist();
148		}
149	});
150	
151	/** Compare **/
152	$('body').on('yith_woocompare_open_popup', function(){
153		$('.product a.compare').removeClass('loading');
154	});
155	
156	/*** Color Swatch ***/
157	$(document).on('click', '.products .product .color-swatch > div', function(){
158		$(this).siblings().removeClass('active');
159		$(this).addClass('active');
160		/* Change thumbnail */
161		var image_src = $(this).data('thumb');
162		$(this).closest('.product').find('figure img:first').attr('src', image_src);
163		/* Change price */
164		var term_id = $(this).data('term_id');
165		var variable_prices = $(this).parent().siblings('.variable-prices');
166		var price_html = variable_prices.find('[data-term_id="'+term_id+'"]').html();
167		$(this).parent().siblings('.price').html( price_html ).addClass('variation-price');
168	});
169	
170	/*** Set Cloud Zoom ***/
171	ts_set_cloud_zoom();
172	
173	if( $('.cloud-zoom, .cloud-zoom-gallery').length > 0 ){
174		$(document).on('found_variation reset_image', 'form.variations_form', function(){
175			$('.cloud-zoom, .cloud-zoom-gallery').CloudZoom({});
176		});
177	}
178	
179	/*** Product Image Lightbox ***/
180	if( $('body').hasClass('single-product') && typeof PhotoSwipe !== 'undefined' ){
181		
182		$('.images-thumbnails').on('click', '.woocommerce-product-gallery__image a', function( e ){
183			e.preventDefault();
184			var items = ts_get_single_product_gallery_items();
185			var index = $(this).find('img').attr('data-index');
186			var pswpElement = $( '.pswp' )[0];
187			var options = {
188				index:                 	parseInt(index)
189				,shareEl:               false
190				,closeOnScroll:         false
191				,history:               false
192				,hideAnimationDuration: 0
193				,showAnimationDuration: 0
194			};
195			var photoswipe = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options );
196			photoswipe.init();
197		});
198		
199	}
200	
201	function ts_get_single_product_gallery_items(){
202		var items = [];
203		$('.images-thumbnails .woocommerce-product-gallery__image a').each(function(index, ele){
204			if( $(ele).parents('.owl-item.cloned').length == 0 ){
205				var img = $(ele).find('img');
206				var large_image_src = img.attr( 'data-large_image' );
207				var large_image_w   = img.attr( 'data-large_image_width' );
208				var large_image_h   = img.attr( 'data-large_image_height' );
209				var item            = {
210					src: large_image_src,
211					w:   large_image_w,
212					h:   large_image_h,
213					title: img.attr( 'title' )
214				};
215				items.push( item );
216			}
217		});
218		
219		if( $('.vertical-thumbnail').length > 0 && items.length > 1 ){
220			var main_thumbnail = items.pop();
221			items.unshift( main_thumbnail );
222			
223			$('.images-thumbnails > .thumbnails img').each(function(index, ele){
224				$(ele).attr('data-index', index + 1);
225			});
226		}
227		
228		return items;
229	}
230	
231	/*** Product Stock - Variable Product ***/
232	function single_variable_product_reset_stock( wrapper ){
233		var stock_html = wrapper.find('p.availability').data('original');
234		var classes = wrapper.find('p.availability').data('class');
235		if( classes == '' ){
236			classes = 'in-stock';
237		}
238		wrapper.find('p.availability span').html(stock_html);
239		wrapper.find('p.availability').removeClass('in-stock out-of-stock').addClass(classe
239s);
240	}
241	
242	$(document).on('found_variation', 'form.variations_form', function(){
243		var wrapper = $(this).parents('.summary');
244		if( wrapper.find('.single_variation .stock').length > 0 ){
245			var stock_html = wrapper.find('.single_variation .stock').html();
246			var classes = wrapper.find('.single_variation .stock').hasClass('out-of-stock')?'out-of-stock':'in-stock';
247			wrapper.find('p.availability span').html(stock_html);
248			wrapper.find('p.availability').removeClass('in-stock out-of-stock').addClass(classes);
249		}
250		else{
251			single_variable_product_reset_stock( wrapper );
252		}
253	});
254	
255	$(document).on('reset_image', 'form.variations_form', function(){
256		var wrapper = $(this).parents('.summary');
257		single_variable_product_reset_stock( wrapper );
258	});
259	
260	/*** Hide product attribute if not available ***/
261	$(document).on('update_variation_values', 'form.variations_form', function(){
262		if( $(this).find('.ts-product-attribute').length > 0 ){
263			$(this).find('.ts-product-attribute').each(function(){
264				var attr = $(this);
265				var values = [];
266				attr.siblings('select').find('option').each(function(){
267					if( $(this).attr('value') ){
268						values.push( $(this).attr('value') );
269					}
270				});
271				attr.find('.option').removeClass('hidden');
272				attr.find('.option').each(function(){
273					if( $.inArray($(this).attr('data-value'), values) == -1 ){
274						$(this).addClass('hidden');
275					}
276				});
277			});
278		}
279	});
280	
281	/*** Custom Orderby on Product Page ***/
282	$('form.woocommerce-ordering ul.orderby ul a').on('click', function(e){
283		e.preventDefault();
284		if( $(this).hasClass('current') ){
285			return;
286		}
287		var form = $('form.woocommerce-ordering');
288		var data = $(this).attr('data-orderby');
289		form.find('select.orderby').val(data).trigger('change');
290	});
291	
292	/*** Per page on Product page ***/
293	$('form.product-per-page-form ul.perpage ul a').on('click', function(e){
294		e.preventDefault();
295		if( $(this).hasClass('current') ){
296			return;
297		}
298		var form = $('form.product-per-page-form');
299		var data = $(this).attr('data-perpage');
300		form.find('select.perpage').val(data);
301		form.submit();
302	});
303	
304	/*** Select2 - Search by Category ***/
305	if( typeof $.fn.select2 == 'function' ){
306		$('.ts-search-by-category select.select-category').select2();
307		
308		var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
309
310		$.fn.attrchange = function(callback) {
311			if (MutationObserver) {
312				var options = {
313					subtree: false,
314					attributes: true
315				};
316
317				var observer = new MutationObserver(function(mutations) {
318					mutations.forEach(function(e) {
319						callback.call(e.target, e.attributeName);
320					});
321				});
322
323				return this.each(function() {
324					observer.observe(this, options);
325				});
326			}
327		}
328		
329		$('.ts-header .ts-search-by-category .select2-container').attrchange(function(attrName){
330			if( attrName == 'class' ){
331				if( $(this).hasClass('select2-container--open') ){
332					$('body > .select2-container--open').addClass('category-dropdown');
333					$('body > .select2-container--open').removeClass('sticky');
334				}
335				else{
336					$('body > .select2-container--open').removeClass('category-dropdown');
337				}
338			}
339		});
340	}
341	
342	/*** Widget toggle ***/
343	$('.widget-title-wrapper a.block-control').on('click', function(e){
344		e.preventDefault();
345		$(this).parent().siblings(':not(script)').slideToggle(400);
346        $(this).toggleClass('active');
347	});
348	
349	ts_widget_toggle();
350	if( !on_touch ){
351		$(window).on('resize', $.throttle(250, function(){
352			ts_widget_toggle();
353		}));
354	}
355	
356	/* Image Lazy Load */
357	if( $('img.ts-lazy-load').length ){
358		$(window).on('scroll ts_lazy_load', function(){
359			var scroll_top = $(this).scrollTop();
360			var window_height = $(this).height();
361			$('img.ts-lazy-load:not(.loaded)').each(function(){
362				if( $(this).data('src') && $(this).offset().top < scroll_top + window_height + 900 ){
363					$(this).attr('src', $(this).data('src')).addClass('loaded');
364				}
365			});
366		});
367		
368		if( $('img.ts-lazy-load:first').offset().top < $(window).scrollTop() + $(window).height() + 200 ){
369			$(window).trigger('ts_lazy_load');
370		}
371	}
372	
373	/* WooCommerce Quantity Increment */
374	$( document ).on( 'click', '.plus, .minus', function() {
375		var $qty		= $( this ).closest( '.quantity' ).find( '.qty' ),
376			currentVal	= parseFloat( $qty.val() ),
377			max			= parseFloat( $qty.attr( 'max' ) ),
378			min			= parseFloat( $qty.attr( 'min' ) ),
379			step		= $qty.attr( 'step' );
380
381		if ( ! currentVal || currentVal === '' || currentVal === 'NaN' ) currentVal = 0;
382		if ( max === '' || max === 'NaN' ) max = '';
383		if ( min === '' || min === 'NaN' ) min = 0;
384		if ( step === 'any' || step === '' || step === undefined || parseFloat( step ) 
384=== 'NaN' ) step = 1;
385
386		if ( $( this ).is( '.plus' ) ) {
387			if ( max && ( max == currentVal || currentVal > max ) ) {
388				$qty.val( max );
389			} else {
390				$qty.val( currentVal + parseFloat( step ) );
391			}
392		} else {
393			if ( min && ( min == currentVal || currentVal < min ) ) {
394				$qty.val( min );
395			} else if ( currentVal > 0 ) {
396				$qty.val( currentVal - parseFloat( step ) );
397			}
398		}
399
400		$qty.trigger( 'change' );
401	});
402	
403	/* Ajax Search */
404	if( typeof upstore_params != 'undefined' && upstore_params.ajax_search == 1 ){
405		ts_ajax_search();
406	}
407	/* Search - Shopping Cart Sidebar */
408	$(document).on('click', '.search-sidebar-icon .icon, .shopping-cart-wrapper .cart-control', function(e){
409		$('.ts-floating-sidebar .close').trigger('click');
410		var is_cart = $(this).is('.cart-control');
411		if( is_cart ){
412			if( $('#ts-shopping-cart-sidebar').length > 0 ){
413				e.preventDefault();
414				$('#ts-shopping-cart-sidebar').addClass('active');
415				$('#page').addClass('floating-sidebar-active');
416			}
417		}
418		else{
419			$('#ts-search-sidebar').addClass('active');
420			$('#page').addClass('floating-sidebar-active');
421			setTimeout(function(){
422				$('#ts-search-sidebar input[name="s"]').focus();
423			}, 600);
424		}
425	});
426	$('.ts-floating-sidebar .overlay, .ts-floating-sidebar .close').on('click', function(){
427		$('.ts-floating-sidebar').removeClass('active');
428		$('#page').removeClass('floating-sidebar-active');
429		$('.top-filter-widget-area-button.show-sidebar a').removeClass('active');
430	});
431	if( $('body').hasClass('ts_desktop') && $('.ts-floating-sidebar').length > 0 ){
432		var is_rtl = $('body').hasClass('rtl');
433		var scrollbar_width = ts_get_scrollbar_width();
434		if( !is_rtl ){
435			$('.ts-floating-sidebar .ts-sidebar-content').css({'right': -scrollbar_width + 'px'});
436		}
437		else{
438			$('.ts-floating-sidebar .ts-sidebar-content').css({'left': -scrollbar_width + 'px'});
439		}
440	}
441	
442	/* Add To Cart Effect */
443	if( !$('body').hasClass('woocommerce-cart') ){
444		$(document.body).on('adding_to_cart', function( e, $button, data ){
445			if( wc_add_to_cart_params.cart_redirect_after_add == 'no' ){
446				if( typeof upstore_params != 'undefined' && upstore_params.add_to_cart_effect == 'show_popup' && typeof $button != 'undefined' ){
447					var product_id = $button.attr('data-product_id');
448					var container = $('#ts-add-to-cart-popup-modal');
449					container.addClass('adding');
450					$.ajax({
451						type : 'POST'
452						,url : upstore_params.ajax_url	
453						,data : {action : 'upstore_load_product_added_to_cart', product_id: product_id}
454						,success : function(response){
455							container.find('.add-to-cart-popup-content').html( response );
456							if( container.hasClass('loading') ){
457								container.removeClass('loading').addClass('show');
458							}
459							container.removeClass('adding');
460						}
461					});
462				}
463			}
464		});
465		
466		$(document.body).on('added_to_cart', function( e, fragments, cart_hash, $button ){
467			/* Show Cart Sidebar */
468			if( typeof upstore_params != 'undefined' && upstore_params.show_cart_after_adding == 1 ){
469				$('.shopping-cart-wrapper .cart-control').trigger('click');
470				return;
471			}
472			/* Cart Fly Effect */
473			if( typeof upstore_params != 'undefined' && typeof $button != 'undefined' ){
474				if( upstore_params.add_to_cart_effect == 'fly_to_cart' ){
475					var cart = $('.shopping-cart-wrapper');
476					if( cart.length == 2 ){
477						if( $(window).width() > 767 ){
478							cart = $('.hidden-phone .shopping-cart-wrapper');
479						}
480						else{
481							cart = $('.visible-phone.shopping-cart-wrapper');
482						}
483					}
484					if( typeof cart != 'undefined' ){
485						var product_img = $button.closest('section.product').find('figure img').eq(0);
486						if( product_img.length == 1 ){
487							var effect_time = 800;
488							var cart_in_sticky = $('.is-sticky .shopping-cart-wrapper').length;
489							if( cart_in_sticky ){
490								effect_time = 500;
491							}
492							
493							var imgclone_height = product_img.width()?150 * product_img.height() / product_img.width():150;
494							var imgclone_small_height = product_img.width()?75 * product_img.height() / product_img.width():75;
495							
496							var imgclone = product_img.clone().offset({top: product_img.offset().top, left: product_img.offset().left})
497								.css({'opacity': '0.6', 'position': 'absolute', 'height': imgclone_height + 'px', 'width': '150px', 'z-index': '99999999'})
498								.appendTo($('body'))
499								.animate({'top': cart.offset().top + cart.height()/2, 'left': cart.offset().left + cart.width()/2, 'width': 75, 'height': imgclone_small_height}, effect_time, 'linear');
500							
501							if( !cart_in_sticky ){
502								$('body,html').animate({
503									scrollTop: '0px'
504								}, effect_time);
505							}
506							
507							imgclone.animate({
508								'width': 0
509								,'height': 0
510							}, function(){
511								$(this).detach()
512							});
513						}
514					}
515				}
516				if( upstore_params.add_to_cart_effect == 'show_popup' ){
517					var container = $('#ts-add-to-cart-popup-modal');
518					if( container.hasClass('adding') ){
519						container.addClass('loading');
520					}
521					else{
522						container.addClass('show');
523					}
524				}
525			}
526		});
527	}
528	
529	/* Disable Ajax Remove Cart Item on Cart and Checkout page */
530	if( $('body').hasClass('woocommerce-cart') || $('body').hasClass('woocommerce-checkout') ){
531		$(document.body).off('click', '.remove_from_cart_button');
532	}
533	
534	/* Top Filter Widget Area */
535	$('.top-filter-widget-area-button a').on('click', function(){
536		$(this).toggleClass('active');
537		if( !$(this).parent().hasClass('show-sidebar') ){
538			$('.top-filter-widget-area').slideToggle();
539		}
540		else{
541			$('#ts-top-filter-widget-area-sidebar').toggleClass('active');
542			$('#page').toggleClass('floating-sidebar-active');
543		}
544		return false;
545	});
546	
547	/* Single post - Related posts - Gallery slider */
548	ts_single_related_post_gallery_slider();
549	
550	/* Single Product - Variable Product options */
551	$(document).on('click', '.variations_form .ts-product-attribute .option a', function(){
552		var _this = $(this);
553		var val = _this.closest('.option').data('value');
554		var selector = _this.closest('.ts-product-attribute').siblings('select');
555		if( selector.length > 0 ){
556			if( selector.find('option[value="' + val + '"]').length > 0 ){
557				selector.val(val).change();
558				_this.closest('.ts-product-attribute').find('.option').removeClass('selected');
559				_this.closest('.option').addClass('selected');
560			}
561		}
562		return false;
563	});
564	
565	$('.variations_form').on('click', '.reset_variations', function(){
566		$(this).closest('.variations').find('.ts-product-attribute .option').removeClass('selected');
567	});
568	
569	/* Product thumbnails slider */
570	if( $('.single-product').length > 0 ){
571		/* Horizontal slider */
572		var wrapper = $('.single-product .product:not(.vertical-thumbnail) .images-thumbnails .thumbnails-container.loading');
573		wrapper.find('.product-thumbnails').owlCarousel({
574				loop: true
575				,nav: true
576				,navText: [,]
577				,dots: false
578				,navSpeed: 1000
579				,rtl: $('body').hasClass('rtl')
580				,margin: 20
581				,navRewind: false
582				,autoplay: true
583				,autoplayHoverPause: true
584				,autoplaySpeed: 1000
585				,responsiveBaseElement: wrapper
586				,responsiveRefreshRate: 1000
587				,responsive:{0:{items:2},280:{items:3},400:{items:4},520:{items:5},650:{items:6}}
588				,onInitialized: function(){
589					wrapper.addClass('loaded').removeClass('loading');
590				}
591			});
592			
593		/* Vertical slider */
594		var wrapper = $('.single-product .product.vertical-thumbnail .images-thumbnails .thumbnails-container.loading');
595		
596		if( wrapper.length > 0 && typeof $.fn.carouFredSel == 'function' ){
597			var items = 3;
598			
599			var _slider_data = {
600					items: items
601					,direction: 'up'
602					,width: 'auto'
603					,height: '150px'
604					,infinite: true
605					,prev: wrapper.find('.owl-prev')
606					,next: wrapper.find('.owl-next')
607					,auto: {
608						play: true
609						,timeoutDuration: 5000
610						,duration: 800
611						,delay: 3000
612						,items: 1
613						,pauseOnHover: true
614					}
615					,scroll: {
616						items: 1
617					}
618					,swipe: {
619						onTouch: true
620						,onMouse: true
621					}
622					,onCreate: function(){
623						wrapper.addClass('loaded').removeClass('loading');
624					}
625				};
626				
627			wrapper.find('.product-thumbnails').carouFredSel(_slider_data);
628			
629			$(window).on('resize orientationchange', $.debounce( 250, function(){
630				if( $(window).width() < 500 ){
631					_slider_data.items = 2;
632				}
633				else{
634					_slider_data.items = items;
635				}
636				wrapper.find('.product-thumbnails').trigger('configuration', _slider_data);
637			} ));
638			
639			$(window).trigger('resize');
640		}
641	}
642	
643	/* Single Product Video */
644	$('a.ts-product-video-button').on('click', function(e){
645		e.preventDefault();
646		var product_id = $(this).data('product_id');
647		var container = $('#ts-product-video-modal');
648		if( container.find('.product-video-content').html() ){
649			container.addClass('show');
650		}
651		else{
652			container.addClass('loading');
653			$.ajax({
654				type : 'POST'
655				,url : upstore_params.ajax_url	
656				,data : {action : 'upstore_load_product_video', product_id: product_id}
657				,success : function(response){
658					container.find('.product-video-content').html( response );
659					container.removeClass('loading').addClass('show');
660				}
661			});
662		}
663	});
664	
665	/* Single product 360 */
666	if( typeof $.fn.ThreeSixty == 'function' ){
667		if( $('.ts-product-360-button').length == 0 ){
668			setTimeout(function(){
669				generate_product_360();
670			}, 200);
671		}
672		
673		$('.ts-product-360-button').on('click', function(){
674			$('#ts-product-360-modal').addClass('loading');
675			generate_product_360();
676			return false;
677		});
678	}
679	
680	function generate_product_360(){
681		if( !$('.ts-product-360').hasClass('loaded') ){
682			$('.ts-product-360').ThreeSixty({
683				currentFrame: 1
684				,imgList: '.threesixty_images'
685				,imgArray: _ts_product_360_image_array
686				,totalFrames: _ts_product_360_image_array.length
687				,endFrame: _ts_product_360_image_array.length
688				,progress: '.spinner'
689				,navigation: true
690				,responsive: true
691				,onReady: function(){
692					$('#ts-product-360-modal').removeClass('loading').addClass('show');
693					$('.ts-product-360').addClass('loaded');
694				}
695			});
696		}
697		else{
698			$('#ts-product-360-modal').removeClass('loading').addClass('show');
699		}
700	}
701	
702	/* Related - Upsell - Crosssell products slider */
703	$('.single-product .related .products, .single-product .upsells .products, .woocommerce .cross-sells .products').each(function(){
704		var _this = $(this);
705		if( _this.find('.product').length > 1 ){
706			_this.owlCarousel({
707				loop: true
708				,nav: true
709				,navText: [,]
710				,dots: false
711				,navSpeed: 1000
712				,rtl: $('body').hasClass('rtl')
713				,margin: 30
714				,navRewind: false
715				,responsiveBaseElement: _this
716				,responsiveRefreshRate: 1000
717				,responsive:{0:{items:1},345:{items:2},570:{items:3},871:{items:4},1400:{items:5}}
718			});
719		}
720	});
721	
722	/* Single product scrolling */
723	ts_scrolling_fixed($('.product.thumbnail-summary-scrolling > .images-thumbnails'), $('.product > .summary'));
724	
725	/* Single product top thumbnail slider */
726	if( $('.single-product-top-thumbnail-slider').length > 0 ){
727		setTimeout(function(){
728			var slider_data = {
729				loop: true
730				,nav: true
731				,navText: [,]
732				,dots: false
733				,navSpeed: 1000
734				,center: true
735				,rtl: $('body').hasClass('rtl')
736				,margin: 30
737				,navRewind: false
738				,autoplay: true
739				,autoplayHoverPause: true
740				,responsive:{0:{items:1},768:{items:2}}
741				,onInitialized: function(){
742					$('.single-product-top-thumbnail-slider').removeClass('loading');
743				}
744			};
745			$(document).trigger('single_product_top_thumbnail_slider_data', slider_data);
746			$('.single-product-top-thumbnail-slider').owlCarousel(slider_data);
747		}, 200);
748		
749		if( typeof wc_single_product_params.photoswipe_options != 'undefined' ){
750			$('.woocommerce-product-gallery__image a img').on('mouseenter', function(){
751				wc_single_product_params.photoswipe_options.index = parseInt($(this).attr('data-index'));
752			});
753		}
754	}
755	
756	/* Background Video - Youtube Video */
757	if( typeof $.fn.YTPlayer == 'function' ){
758		$('.ts-youtube-video-bg').each(function(index, element){
759			var selector = $(this);
760			var poster = selector.data('poster');
761			var property = selector.data('property') && typeof selector.data('property') == 'string' ? eval('(' + selector.data('property') + ')') : selector.data('property');
762			
763			if( ! on_touch ) {
764				var player = selector.YTPlayer();
765				
766				player.on('YTPPlay', function(){
767					selector.removeClass('pausing').addClass('playing');
768					selector.closest('.vc_row').addClass('playing');
769					if( poster ){
770						selector.css({'background-image':''});
771						selector.find('.mbYTP_wrapper').css({'opacity':1});
772					}
773				});
774				
775				player.on('YTPPause YTPEnd', function(){
776					selector.removeClass('playing').addClass('pausing');
777					selector.closest('.vc_row').removeClass('playing');
778					if( poster ){
779						selector.css({'background-image':'url(' + poster + ')'});
780						selector.find('.mbYTP_wrapper').css({'opacity':0});
781					}
782				});
783				
784				player.on('YTPChanged', function(){
785					if( !property.autoPlay && poster ){
786						selector.css({'background-image':'url(' + poster + ')'});
787					}
788				});
789			}
790			else if( poster ) {
791				selector.css({'background-image':'url(' + poster + ')'});
792			}
793		});
794	}
795	
796	/* Background Video - Hosted Video */
797	$('.ts-hosted-video-bg').each(function(){
798		var selector = $(this);
799		var video = selector.find('video');
800		var video_dom = selector.find('video').get(0);
801		if( video.hasClass('loop') ){
802			video_dom.loop = true;
803		}
804		if( video.hasClass('muted') ){
805			video_dom.muted = true;
806		}
807		
808		var poster = selector.data('poster');
809		if( poster ){
810			selector.css({'background-image':'url(' + poster + ')'});
811		}
812		
813		var control = selector.find('.video-control');
814		control.on('click', function(){
815			if( ! selector.hasClass('playing') ){
816				video_dom.play();
817				selector.css({'background-image':''});
818				selector.removeClass('pausing').addClass('playing');
819				selector.closest('.vc_row').addClass('playing');
820			}
821			else{
822				video_dom.pause();
823				if( poster ){
824					selector.css({'background-image':'url(' + poster + ')'});
825				}
826				selector.removeClass('playing').addClass('pausing');
827				selector.closest('.vc_row').removeClass('playing');
828			}
829		});
830		if( ! on_touch ){
831			selector.addClass('pausing');
832			if( video.hasClass('autoplay') ){
833				control.trigger('click');
834			}
835		}
836	});
837	
838	/* Accordion - scroll to activated tab */
839	$('.single-product .vc_tta-accordion .vc_tta-panel-heading').on('click', function(){
840		if( $(this).parents('.vc_tta-panel').hasClass('vc_active') ){
841			return;
842		}
843		var acc_header = $(this);
844		var header_sticky = 0;
845		if( !on_touch ){
846			if( $('.is-sticky .header-sticky').length > 0 ){
847				header_sticky = $('.is-sticky .header-sticky').height();
848			}
849			else if( typeof upstore_params != 'undefined' && upstore_params.sticky_header == 1 && $('.header-sticky').length > 0 ){
850				header_sticky = $('.header-sticky').height();
851			}
852		}
853		setTimeout(function(){
854			$('body,html').animate({
855				scrollTop: acc_header.offset().top - acc_header.height() - header_sticky
856			}, 600);
857		}, 600);
858	});
859	
860	if( $('.woocommerce-tabs.accordion-tabs').length > 0 ){
861		$('a.woocommerce-review-link').on('click', function(){
862			var acc_header = $('#reviews').parents('.vc_tta-panel-body').siblings('.vc_tta-panel-heading');
863			if( !acc_header.parents('.vc_tta-panel').hasClass('vc_active') ){
864				setTimeout(function(){
865					acc_header.trigger('click');
866					acc_header.find('.vc_tta-panel-title a').trigger('click');
867				}, 100);
868			}
869		});
870	}
871	
872	/* Single Portfolio Scrolling */
873	ts_scrolling_fixed($('.single-portfolio.left-thumbnail.gallery .thumbnails'), $('.single-portfolio .entry-content'));
874	
875	/* Single Portfolio Lightbox */
876	if( typeof $.fn.prettyPhoto == 'function' ){
877		$('.single-portfolio .thumbnails a[rel^="prettyPhoto"]').prettyPhoto({
878			show_title: false
879			,deeplinking: false
880			,social_tools: false
881		});
882	}
883	
884	/* Single Portfolio Gallery */
885	if( typeof $.fn.isotope == 'function' ){
886		setTimeout(function(){
887			$('.single-portfolio.gallery .thumbnails figure').isotope();
888		}, 200);
889	}
890	
891	/* Single Portfolio Slider */
892	ts_generate_single_portfolio_slider();
893	
894	/* product deals on revolution */
895	if( $('#block-deals-revolution').length > 0 ){
896		$('#primary').css('position', 'relative');
897		$('#block-deals-revolution').show();
898	}
899});
900
901/*** Mega menu ***/
902function ts_mega_menu_change_state(case_size){
903	if( typeof case_size == 'undefined' ){
904		var case_size = jQuery('body').innerWidth();
905	}
906	case_size += ts_get_scrollbar_width();
907	
908	/* Hide Group Meta Header */
909	if( case_size <= 991 ){
910		jQuery('.group-meta-header').hide();
911		jQuery('.ts-header .header-top').removeClass('open');
912		jQuery('.ts-group-meta-icon-toggle').removeClass('active');
913		
914		jQuery('.ts-group-meta-icon-toggle').off('click');
915		jQuery('.ts-group-meta-icon-toggle').on('click', function(){
916			jQuery('.group-meta-header').slideToggle(300);
917			jQuery('.ts-header .header-top').toggleClass('open');
918			jQuery(this).toggleClass('active');
919		});
920	}
921	/* Reset dropdown icon class on Ipad */
922	jQuery('.ts-menu-drop-icon').removeClass('active');
923	
924	if( case_size > 767 ){
925	
926		var padding_left = 0, container_width = 0;
927		var container = jQuery('.header-sticky > .container');
928		var container_stretch = jQuery('.header-sticky');
929		if( container.length <= 0 ){
930			container = jQuery('.header-sticky');
931			if( container.length <= 0 ){
932				return;
933			}
934			container_width = container.outerWidth();
935		}
936		else{
937			container_width = container.width();
938			padding_left = parseInt(container.css('padding-left'));
939		}
940		var container_offset = container.offset();
941		
942		var container_stretch_width = container_stretch.outerWidth();
943		var container_stretch_offset = container_stretch.offset();
944		
945		setTimeout(function(){
946			jQuery('.ts-menu nav.main-menu > ul.menu > .ts-megamenu-fullwidth').each(function(index, element){
947				var current_offset = jQuery(element).offset();
948				if( jQuery(element).hasClass('ts-megamenu-fullwidth-stretch') ){
949					var left = current_offset.left - container_stretch_offset.left;
950					jQuery(element).children('ul.sub-menu').css({'width':container_stretch_width+'px','left':-left+'px','right':'auto'});
951				}
952				else{
953					var left = current_offset.left - container_offset.left - padding_left;
954					jQuery(element).children('ul.sub-menu').css({'width':container_width+'px','left':-left+'px','right':'auto'});
955				}
956			});
957			
958			jQuery('.ts-menu nav.main-menu > ul.menu').children('.ts-megamenu-columns-1, .ts-megamenu-columns-2, .ts-megamenu-columns-3, .ts-megamenu-columns-4').each(function(index, element){	
959				jQuery(element).children('ul.sub-menu').css({'max-width':container_width+'px'});
960				var sub_menu_width = jQuery(element).children('ul.sub-menu').outerWidth();
961				var item_width = jQuery(element).outerWidth();
962				jQuery(element).children('ul.sub-menu').css({'left':'-'+(sub_menu_width/2 - item_width/2)+'px','right':'auto'});
963				
964				var container_left = container_offset.left;
965				var container_right = container_left + container_width;
966				var item_left = jQuery(element).offset().left;
967				
968				var overflow_left = (sub_menu_width/2 > (item_left + item_width/2 - container_left));
969				var overflow_right = ((sub_menu_width/2 + item_left + item_width/2) > container_right);
970				if( overflow_left ){
971					var left = item_left - container_left - padding_left;
972					jQuery(element).children('ul.sub-menu').css({'left':-left+'px','right':'auto'});
973				}
974				if( overflow_right && !overflow_left ){
975					var left = item_left - container_left - padding_left;
976					left = left - ( container_width - sub_menu_width );
977					jQuery(element).children('ul.sub-menu').css({'left':-left+'px','right':'auto'});
978				}
979			});
980			
981			/* Remove hide class after loading */
982			jQuery('ul.menu li.menu-item').removeClass('hide');
983			
984		},800);
985		
986	}
987	else{ /* Mobile menu action */
988		jQuery('.ic-mobile-menu-button').off('click');
989		jQuery('.ic-mobile-menu-button').on('click', function(){
990			jQuery('#page').addClass('menu-mobile-active');
991		});
992		
993		jQuery('.ic-mobile-menu-close-button').off('click');
994		jQuery('.ic-mobile-menu-close-button').on('click', function(){
995			jQuery('#page').removeClass('menu-mobile-active');
996		});
997		
998		jQuery('#wpadminbar').css('position', 'fixed');
999		
1000		/* Remove hide class after loading */
1001		jQuery('ul.menu li.menu-item').removeClass('hide');
1002	}
1003	
1004}
1005
1006function ts_menu_action_on_ipad(){
1007	/* Vertical Menu Heading */
1008	jQuery('.vertical-menu-heading').on('click',function(){
1009		
1010		var is_active = jQuery(this).hasClass('active');
1011		var vertical_menu = jQuery(this).siblings('.vertical-menu');
1012		
1013		jQuery('.ts-menu nav.main-menu .sub-menu').hide();
1014		jQuery('.ts-menu nav.main-menu li.menu-item').removeClass('active');
1015		jQuery('.ts-menu nav.main-menu .ts-menu-drop-icon').removeClass('active');
1016		
1017		if( vertical_menu.length > 0 ){
1018			if( is_active ){
1019				vertical_menu.fadeOut(250);
1020				jQuery(this).removeClass('active');
1021			}
1022			else{
1023				vertical_menu.fadeIn(250);
1024				jQuery(this).addClass('active');
1025			}
1026		}
1027	});
1028	
1029	/* Vertical Menu Drop Icon */
1030	jQuery('.vertical-menu-wrapper .ts-menu-drop-icon').on('click', function(){
1031		
1032		var is_active = jQuery(this).hasClass('active');
1033		var sub_menu = jQuery(this).siblings('.sub-menu');
1034		
1035		jQuery('.ts-menu nav.main-menu .sub-menu').hide();
1036		jQuery('.ts-menu nav.main-menu .ts-menu-drop-icon').removeClass('active');
1037		jQuery('.ts-menu nav.main-menu li.menu-item').removeClass('active');
1038		
1039		jQuery('.ts-menu nav.vertical-menu .ts-menu-drop-icon').removeClass('active');
1040		jQuery('.ts-menu nav.vertical-menu .sub-menu').hide();
1041		
1042		jQuery(this).parents('.sub-menu').show();
1043		
1044		if( sub_menu.length > 0 ){
1045			if( is_active ){
1046				sub_menu.fadeOut(250);
1047				jQuery(this).removeClass('active');
1048			}
1049			else{
1050				sub_menu.fadeIn(250);
1051				jQuery(this).addClass('active');
1052			}
1053			jQuery(this).parents('.sub-menu').siblings('.ts-menu-drop-icon').addClass('active');
1054		}
1055	});
1056	
1057	/* Main Menu Drop Icon */
1058	jQuery('.ts-menu nav.main-menu .ts-menu-drop-icon').on('click', function(){
1059		
1060		var is_active = jQuery(this).hasClass('active');
1061		var sub_menu = jQuery(this).siblings('.sub-menu');
1062		
1063		jQuery('.vertical-menu-heading').removeClass('active');
1064		jQuery('.vertical-menu-wrapper > .vertical-menu').hide();
1065		jQuery('.ts-menu nav.vertical-menu .ts-menu-drop-icon').removeClass('active');
1066		jQuery('.ts-menu nav.vertical-menu .sub-menu').hide();
1067		
1068		jQuery('.ts-menu nav.main-menu .ts-menu-drop-icon').removeClass('active');
1069		jQuery('.ts-menu nav.main-menu li.menu-item').removeClass('active');
1070		jQuery('.ts-menu nav.main-menu .sub-menu').hide();
1071		
1072		jQuery(this).parents('.sub-menu').show();
1073		
1074		if( sub_menu.length > 0 ){
1075			if( is_active ){
1076				sub_menu.fadeOut(250);
1077				jQuery(this).removeClass('active');
1078				jQuery(this).parent().removeClass('active');
1079			}
1080			else{
1081				sub_menu.fadeIn(250);
1082				jQuery(this).addClass('active');
1083				jQuery(this).parent().addClass('active');
1084			}
1085			jQuery(this).parents('.sub-menu').siblings('.ts-menu-drop-icon').addClass('active');
1086		}
1087	});
1088	
1089	/* Mobile Menu Drop Icon */
1090	jQuery('.ts-menu nav.mobile-menu .sub-menu').hide();
1091	jQuery('.ts-menu nav.mobile-menu .ts-menu-drop-icon').on('click', function(){
1092		var is_active = jQuery(this).hasClass('active');
1093		var sub_menu = jQuery(this).siblings('.sub-menu');
1094		
1095		if( is_active ){
1096			sub_menu.slideUp(250);
1097			sub_menu.find('.sub-menu').hide();
1098			sub_menu.find('.ts-menu-drop-icon').removeClass('active');
1099		}
1100		else{
1101			sub_menu.slideDown(250);
1102		}
1103		jQuery(this).toggleClass('active');
1104	});
1105	
1106}
1107
1108/*** End Mega menu ***/
1109function ts_get_scrollbar_width() {
1110    var $inner = jQuery('<div style="width: 100%; height:200px;">test</div>'),
1111        $outer = jQuery('<div style="width:200px;height:150px; position: absolute; top: 0; left: 0; visibility: hidden; overflow:hidden;"></div>').append($inner),
1112        inner = $inner[0],
1113        outer = $outer[0];
1114     
1115    jQuery('body').append(outer);
1116    var width1 = inner.offsetWidth;
1117    $outer.css('overflow', 'scroll');
1118    var width2 = outer.clientWidth;
1119    $outer.remove();
1120 
1121    return (width1 - width2);
1122}
1123
1124/*** Sticky Menu ***/
1125function ts_sticky_menu(){	
1126	if( jQuery(window).width() > 1200 ){
1127		var top_spacing = 0;
1128		if( jQuery('body').hasClass('logged-in') && jQuery('body').hasClass('admin-bar') && jQuery('#wpadminbar').length > 0 ){
1129			top_spacing = jQuery('#wpadminbar').height();
1130		}
1131		var top_begin = jQuery('header.ts-header').height() + 100;
1132		if( jQuery('body').hasClass('display-vertical-menu') && jQuery('nav.vertical-menu').length > 0 ){
1133			top_begin += jQuery('nav.vertical-menu').height();
1134		}
1135		
1136		setTimeout( function(){
1137			jQuery('.header-sticky').sticky({
1138					topSpacing: top_spacing
1139					,topBegin: top_begin
1140					,scrollOnTop : function (){
1141						ts_mega_menu_change_state();
1142						jQuery('body > .select2-container--open').removeClass('sticky');
1143					}
1144					,scrollOnBottom : function (){
1145						ts_mega_menu_change_state();
1146						jQuery('body > .select2-container--open').addClass('sticky');
1147					}					
1148				});
1149		}, 200);
1150	}
1151}
1152
1153/*** Custom Wishlist ***/
1154function ts_update_tini_wishlist(){
1155	if( typeof upstore_params == 'undefined' ){
1156		return;
1157	}
1158		
1159	var wishlist_wrapper = jQuery('.my-wishlist-wrapper');
1160	if( wishlist_wrapper.length == 0 ){
1161		return;
1162	}
1163	
1164	wishlist_wrapper.addClass('loading');
1165	
1166	jQuery.ajax({
1167		type : 'POST'
1168		,url : upstore_params.ajax_url
1169		,data : {action : 'upstore_update_tini_wishlist'}
1170		,success : function(response){
1171			var first_icon = wishlist_wrapper.children('i.fa:first');
1172			wishlist_wrapper.html(response);
1173			if( first_icon.length > 0 ){
1174				wishlist_wrapper.prepend(first_icon);
1175			}
1176			wishlist_wrapper.removeClass('loading');
1177		}
1178	});
1179}
1180
1181/*** End Custom Wishlist***/
1182
1183/*** Set Cloud Zoom ***/
1184function ts_set_cloud_zoom(){
1185	jQuery('.cloud-zoom-wrap .cloud-zoom-big').remove();
1186	jQuery('.cloud-zoom, .cloud-zoom-gallery').off('click');
1187	var clz_width = jQuery('.cloud-zoom, .cloud-zoom-gallery').width();
1188	var clz_img_width = jQuery('.cloud-zoom, .cloud-zoom-gallery').children('img').width();
1189	var cl_zoom = jQuery('.cloud-zoom, .cloud-zoom-gallery').not('.on_pc');
1190	var temp = (clz_width-clz_img_width)/2;
1191	if(cl_zoom.length > 0 ){
1192		cl_zoom.data('zoom',null).siblings('.mousetrap').off().remove();
1193		cl_zoom.CloudZoom({ 
1194			adjustX:temp	
1195		});
1196	}
1197}
1198
1199/*** Widget toggle ***/
1200function ts_widget_toggle(){
1201	if( typeof upstore_params != 'undefined' && upstore_params.responsive == 0 ){
1202		return;
1203	}
1204	jQuery('.wpb_widgetised_column .widget-title-wrapper a.block-control, .footer-container .widget-title-wrapper a.block-control, .filter-widget-area > section .widget-title-wrapper a.block-control').remove();
1205	var window_width = jQuery(window).width();
1206	window_width += ts_get_scrollbar_width();
1207	if( window_width >= 768 ){
1208		jQuery('.widget-title-wrapper a.block-control').removeClass('active').hide();
1209		jQuery('.widget-title-wrapper a.block-control').parent().siblings(':not(script)').show();
1210	}
1211	else{
1212		jQuery('.widget-title-wrapper a.block-control').removeClass('active').show();
1213		jQuery('.widget-title-wrapper a.block-control').parent().siblings(':not(script)').hide();
1214		jQuery('.wpb_widgetised_column .widget-title-wrapper, .footer-container .widget-title-wrapper, .filter-widget-area > section .widget-title-wrapper').siblings(':not(script)').show();
1215	}
1216}
1217
1218/*** Ajax search ***/
1219function ts_ajax_search(){
1220	var search_string = '';
1221	var search_previous_string = '';
1222	var search_timeout;
1223	var search_delay = 500;
1224	var search_input;
1225	var search_cache_data = {};
1226	jQuery('body').append('<div id="ts-search-result-container" class="ts-search-result-container"></div>');
1227	var search_result_container = jQuery('#ts-search-result-container');
1228	var search_result_container_sidebar = jQuery('#ts-search-sidebar .ts-search-result-container');
1229	var is_sidebar = false;
1230	
1231	jQuery('.ts-header .search-content input[name="s"], #ts-search-sidebar input[name="s"]').on('keyup', function(e){
1232		is_sidebar = jQuery(this).parents('#ts-search-sidebar').length > 0;
1233		search_input = jQuery(this);
1234		search_result_container.hide();
1235		
1236		search_string = jQuery(this).val().trim();
1237		if( search_string.length < 2 ){
1238			search_input.parents('.search-content').removeClass('loading');
1239			return;
1240		}
1241		
1242		if( search_cache_data[search_string] ){
1243			if( !is_sidebar ){
1244				search_result_container.html(search_cache_data[search_string]);
1245				search_result_container.show();
1246			}
1247			else{
1248				search_result_container_sidebar.html(search_cache_data[search_string]);
1249			}
1250			search_previous_string = '';
1251			search_input.parents('.search-content').removeClass('loading');
1252			
1253			if( !is_sidebar ){
1254				search_result_container.find('.view-all-wrapper a').on('click', function(e){
1255					e.preventDefault();
1256					search_input.parents('form').submit();
1257				});
1258			}
1259			else{
1260				search_result_container_sidebar.find('.view-all-wrapper a').on('click', function(e){
1261					e.preventDefault();
1262					search_input.parents('form').submit();
1263				});
1264			}
1265			
1266			return;
1267		}
1268		
1269		clearTimeout(search_timeout);
1270		search_timeout = setTimeout(function(){
1271			if( search_string == search_previous_string || search_string.length < 2 ){
1272				return;
1273			}
1274			
1275			search_previous_string = search_string;
1276		
1277			search_input.parents('.search-content').addClass('loading');
1278			
1279			/* check category */
1280			var category = '';
1281			var select_category = search_input.parents('.search-content').siblings('.select-category');
1282			if( select_category.length > 0 ){
1283				category = select_category.find(':selected').val();
1284			}
1285			
1286			jQuery.ajax({
1287				type : 'POST'
1288				,url : upstore_params.ajax_url
1289				,data : {action : 'upstore_ajax_search', search_string: search_string, category: category}
1290				,error : function(xhr,err){
1291					search_input.parents('.search-content').removeClass('loading');
1292				}
1293				,success : function(response){
1294					if( response != '' ){
1295						response = JSON.parse(response);
1296						if( response.search_string == search_string ){
1297							search_cache_data[search_string] = response.html;
1298							if( !is_sidebar ){
1299								search_result_container.html(response.html);
1300								var top = search_input.offset().top + search_input.outerHeight(true);
1301								var left = Math.ceil(search_input.offset().left);
1302								var width = search_input.outerWidth(true);
1303								var border_width = parseInt(search_input.parent('.search-content').css('border-left-width'));
1304								left -= border_width;
1305								width += border_width;
1306								if( width < 300 ){
1307									width = 300;
1308								}
1309								
1310								window_width = jQuery(window).width(); /* Overflow window */
1311								if( (left + width) > window_width ){
1312									left -= (width - search_input.outerWidth(true));
1313								}
1314								
1315								search_result_container.css({
1316									'position': 'absolute'
1317									,'top': top
1318									,'left': left
1319									,'width': width
1320									,'display': 'block'
1321								});
1322							}
1323							else{
1324								search_result_container_sidebar.html(response.html);
1325							}
1326							
1327							search_input.parents('.search-content').removeClass('loading');
1328							
1329							if( !is_sidebar ){
1330								search_result_container.find('.view-all-wrapper a').on('click', function(e){
1331									e.preventDefault();
1332									search_input.parents('form').submit();
1333								});
1334							}
1335							else{
1336								search_result_container_sidebar.find('.view-all-wrapper a').on('click', function(e){
1337									e.preventDefault();
1338									search_input.parents('form').submit();
1339								});
1340							}
1341						}
1342					}
1343					else{
1344						search_input.parents('.search-content').removeClass('loading');
1345					}
1346				}
1347			});
1348		}, search_delay);
1349	});
1350	
1351	search_result_container.on('mouseleave', function(){
1352		search_result_container.hide();
1353	});
1354	
1355	jQuery('body').on('click', function(){
1356		search_result_container.hide();
1357	});
1358	
1359	jQuery('.ts-search-by-category select.select-category').on('change', function(){
1360		search_previous_string = '';
1361		search_cache_data = {};
1362		jQuery(this).parents('.ts-search-by-category').find('.search-content input[name="s"]').trigger('keyup');
1363	});
1364}
1365
1366/*** Single post - Related posts - Gallery slider ***/
1367function ts_single_related_post_gallery_slider(){
1368	if( jQuery('.single-post figure.gallery, .list-posts .post-item .gallery figure, .ts-blogs-widget .thumbnail.gallery figure').length > 0 ){
1369		var _this = jQuery('.single-post figure.gallery, .list-posts .post-item .gallery figure, .ts-blogs-widget .thumbnail.gallery figure');
1370		var slider_data = {
1371			items: 1
1372			,loop: true
1373			,nav: false
1374			,animateIn: 'fadeIn'
1375			,animateOut: 'fadeOut'
1376			,navText: [,]
1377			,navSpeed: 1000
1378			,rtl: jQuery('body').hasClass('rtl')
1379			,margin: 10
1380			,navRewind: false
1381			,autoplay: true
1382			,autoplayTimeout: 4000
1383			,autoplayHoverPause: true
1384			,autoplaySpeed: false
1385			,autoHeight: true
1386			,mouseDrag: false
1387			,responsive:{0:{items:1}}
1388			,onInitialized: function(){
1389				_this.removeClass('loading');
1390				_this.parent('.gallery').addClass('loaded').removeClass('loading');
1391			}
1392		};
1393		_this.each(function(){
1394			var validate_slider = true;
1395			
1396			if( jQuery(this).find('img').length <= 1 ){
1397				validate_slider = false;
1398			}
1399			
1400			if( validate_slider ){
1401				jQuery(this).owlCarousel(slider_data);
1402			}
1403			else{
1404				jQuery(this).removeClass('loading');
1405				jQuery(this).parent('.gallery').removeClass('loading');
1406			}
1407		});
1408	}
1409	
1410	if( jQuery('.single-post .related-posts.loading').length > 0 ){
1411		var _this = jQuery('.single-post .related-posts.loading');
1412		var slider_data = {
1413			loop: true
1414			,nav: true
1415			,navText: [,]
1416			,dots: false
1417			,navSpeed: 1000
1418			,rtl: jQuery('body').hasClass('rtl')
1419			,margin : 30
1420			,navRewind: false
1421			,responsiveBaseElement: _this
1422			,responsiveRefreshRate: 400
1423			,responsive:{0:{items:1},640:{items:2},1150:{items:3},1400:{items:4}}
1424			,onInitialized: function(){
1425				_this.addClass('loaded').removeClass('loading');
1426			}
1427		};
1428		_this.find('.content-wrapper .blogs').owlCarousel(slider_data);
1429	}
1430	
1431}
1432
1433/*** Single Portfolio Slider ***/
1434function ts_generate_single_portfolio_slider(){
1435	if( jQuery('.single-portfolio.slider .thumbnails figure img').length > 1 ){
1436		var wrapper = jQuery('.single-portfolio.slider');
1437		var element = jQuery('.single-portfolio.slider .thumbnails figure');
1438		var center  = (wrapper.hasClass('center') || wrapper.hasClass('center-fullwidth')) && wrapper.hasClass('top-thumbnail');
1439		var items   = center?2:1;
1440		element.owlCarousel({
1441					items: items
1442					,center: center
1443					,loop: true
1444					,nav: true
1445					,navText: [,]
1446					,dots: false
1447					,navSpeed: 1000
1448					,rtl: jQuery('body').hasClass('rtl')
1449					,navRewind: false
1450					,autoplay: true
1451					,autoplayHoverPause: true
1452					,onInitialized: function(){
1453						wrapper.find('.thumbnails').addClass('loaded').removeClass('loading');
1454					}
1455				});
1456	}
1457	else{
1458		jQuery('.single-portfolio.slider .thumbnails').removeClass('loading');
1459	}
1460}
1461
1462/*** Scrolling Fixed ***/
1463function ts_scrolling_fixed(scrolling_element, fixed_element){
1464	if( scrolling_element.length == 0 || fixed_element.length == 0 || jQuery(window).width() < 768
1465		|| fixed_element.height() >= scrolling_element.height() ){
1466		return;
1467	}
1468	
1469	var fixed_left = fixed_element.offset().left;
1470	var fixed_width = fixed_element.outerWidth();
1471	var admin_bar_height = jQuery('#wpadminbar').length > 0?jQuery('#wpadminbar').outerHeight():0;
1472	var window_height = jQuery(window).height();
1473	
1474	jQuery(window).on('scroll', function(){
1475		var window_scroll_top = jQuery(this).scrollTop();
1476		var sticky_height = 0;
1477		if( jQuery('.is-sticky .header-sticky').length > 0 ){
1478			sticky_height = jQuery('.is-sticky .header-sticky').outerHeight();
1479		}
1480		
1481		var fixed_height = fixed_element.height();
1482		var scrolling_height = scrolling_element.height();
1483		var scrolling_top = scrolling_element.offset().top;
1484		var start_scroll = fixed_height > window_height?fixed_height - window_height:0;
1485		
1486		if( window_scroll_top > scrolling_top + start_scroll ){
1487			var top = sticky_height + admin_bar_height + 20;
1488			if( start_scroll ){
1489				top = -start_scroll;
1490			}
1491			if( window_scroll_top + top + fixed_height > scrolling_top + scrolling_height ){
1492				top = scrolling_height - fixed_height + scrolling_top - window_scroll_top;
1493			}
1494			fixed_element.css({'position': 'fixed', 'left': fixed_left, 'top': top, 'width': fixed_width});
1495		}
1496		else{
1497			fixed_element.attr('style', '');
1498		}
1499	});
1500}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.