Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/gg.corals.io/wp-content/plugins/trx_addons/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/gg.corals.io/wp-content/plugins/trx_addons/js/trx_addons.front.js
/**
 * Init scripts
 *
 * @package WordPress
 * @subpackage ThemeREX Addons
 * @since v1.0
 */

/* global jQuery:false */
/* global TRX_ADDONS_STORAGE:false */

jQuery(document).ready(function() {

	"use strict";

	var vc_init_counter = 0;

	trx_addons_init_actions();
	
	// Show preloader
	jQuery(window).on('beforeunload', function(e) {
		if (jQuery.browser && !jQuery.browser.safari) {
			jQuery('#page_preloader').css({display: 'block', opacity: 0}).animate({opacity:0.8}, 300);
			setTimeout(trx_addons_hide_preloader, 5000);
		}
	});


	// Hide preloader
	function trx_addons_hide_preloader() {
		jQuery('#page_preloader').animate({opacity:0}, 800, function() {
									jQuery(this).css( {display: 'none'} );
									});
	}
		
	// Init actions
	function trx_addons_init_actions() {
		if (typeof TRX_ADDONS_STORAGE == 'undefined') {
			window.TRX_ADDONS_STORAGE = {
										'vc_edit_mode': 0
									};
		}
		if (TRX_ADDONS_STORAGE['vc_edit_mode'] > 0 && jQuery('.vc_empty-placeholder').length==0 && vc_init_counter++ < 30) {
			setTimeout(trx_addons_init_actions, 200);
			return;
		}

		// Hide preloader
		trx_addons_hide_preloader();
		
		// Show system message
		var msg = jQuery('.trx_addons_message_box_system'),
			msg_delay = 5000;
		if (msg.length > 0) {
			setTimeout(function() {
				msg.fadeIn().delay(msg_delay).fadeOut();
			}, 1000);
			var login = jQuery('.trx_addons_login_link');
			if (msg.hasClass('trx_addons_message_box_error') && login.length > 0) {
				setTimeout(function() {
					login.trigger('click');
				}, 2000+msg_delay);
			}
		}

		// Shift page down to display hash-link if menu is fixed
		// (except WooCommerce product page, because WooCommerce has own handler of the hash url)
		if (typeof TRX_ADDONS_STORAGE['animate_to_hash']=='undefined' && !jQuery('body').hasClass('single-product')) {
			TRX_ADDONS_STORAGE['animate_to_hash'] = true;
			setTimeout(function() {
				// Hack for MailChimp - use our scroll to form, because his method damage layouts in the Chrome
				if (window.mc4wp_forms_config && window.mc4wp_forms_config.submitted_form && window.mc4wp_forms_config.submitted_form.element_id) {
					trx_addons_document_animate_to(window.mc4wp_forms_config.submitted_form.element_id);
				
				// Shift page down on fixed rows height
				} else if ( location.hash !== '' && location.hash != '#' && location.hash.indexOf('/') == -1 ) {
					var obj = jQuery(location.hash);
					if (obj.length > 0) {
						var off = obj.offset().top,
							scroll = jQuery(window).scrollTop(),
							fixed_height = trx_addons_fixed_rows_height();
						if (!isNaN(off) && ((fixed_height > 0 && off - scroll < fixed_height + 60) || scroll == 0)) {
							trx_addons_document_animate_to(off - fixed_height - 60);
						}
					}
				}
			}, 600);
		}
		
		// Check for Retina display
		trx_addons_set_cookie('trx_addons_is_retina', trx_addons_is_retina() ? 1 : 0, 365);

		// On switch to mobile layout
		jQuery( document ).on( 'action.switch_to_mobile_layout', function() {
			jQuery('[data-hover-animation^="animated"]').each(function() {
				var animation = jQuery(this).data('hover-animation');
				var animation_out = jQuery(this).data('animation-out');
				if (animation_out == undefined) animation_out = "none";
				jQuery(this).removeClass(animation + ' ' + animation_out);
			});
		});

		// Add ready actions to the hidden elements actions
		var first_call = true;
		jQuery(document)
			.on('action.init_hidden_elements', function() {
		// Init core elements
		trx_addons_ready_actions();
				// Generate 'scroll' event after hidden elements are inited
				if (!first_call) jQuery(window).trigger('scroll');
				first_call = false;
			})
			// First call to init core actions
			.trigger('action.init_hidden_elements', [jQuery('body')]);

		// Add our handlers after the VC init
		var vc_js = false;
		jQuery(document).on('vc_js', function() {
			if (!vc_js)	{
				vc_js = true;
				trx_addons_add_handlers();
			}
		});

		// Add our handlers if VC is no activated
		setTimeout(function() {
			if (!vc_js)	{
				trx_addons_add_handlers();
			}
		}, 1);

		// Add our handlers
		function trx_addons_add_handlers() {		
			// Resize handlers
			trx_addons_resize_actions();
			jQuery(window).resize(function() {
				trx_addons_resize_actions();
			});

			// Scroll handlers
			TRX_ADDONS_STORAGE['scroll_busy'] = true;
			trx_addons_scroll_actions();
			jQuery(window).scroll(function() {
				if (window.requestAnimationFrame) {
					if (!TRX_ADDONS_STORAGE['scroll_busy']){
						TRX_ADDONS_STORAGE['scroll_busy'] = true;
						window.requestAnimationFrame(trx_addons_scroll_actions);
					}
				} else {
					TRX_ADDONS_STORAGE['scroll_busy'] = true;
					trx_addons_scroll_actions();
				}
			});

			// Inject our code in the VC function wpb_prepare_tab_content()
			// to init our elements on the new VC tabs, tour and accordion activation
			typeof window.wpb_prepare_tab_content == "function"
				&& typeof window.wpb_prepare_tab_content_old == "undefined"
				&& (window.wpb_prepare_tab_content_old = window.wpb_prepare_tab_content)
				&& (window.wpb_prepare_tab_content = function(e, ui) {
					// Call ThemeREX Addons actions
					if (typeof ui.newPanel !== 'undefined' && ui.newPanel.length > 0) {
						jQuery(document).trigger('action.init_hidden_elements', [ui.newPanel]);
					} else if (typeof ui.panel !== 'undefined' && ui.panel.length > 0) {
						jQuery(document).trigger('action.init_hidden_elements', [ui.panel]);
					}
					// Call old VC handler
					window.wpb_prepare_tab_content_old(e, ui);
				});
			// Inject our code in the VC function vc_accordionActivate()
			// to init our elements on the old VC accordion activation
			typeof window.vc_accordionActivate == "function"
				&& typeof window.vc_accordionActivate_old == "undefined"
				&& (window.vc_accordionActivate_old = window.vc_accordionActivate)
				&& (window.vc_accordionActivate = function(e, ui) {
					// Call ThemeREX Addons actions
					if (typeof ui.newPanel !== 'undefined' && ui.newPanel.length > 0) {
						jQuery(document).trigger('action.init_hidden_elements', [ui.newPanel]);
					} else if (typeof ui.panel !== 'undefined' && ui.panel.length > 0) {
						jQuery(document).trigger('action.init_hidden_elements', [ui.panel]);
					}
					// Call old VC handler
					window.vc_accordionActivate_old(e, ui);
				});
		}
	}

	
	// Page first load actions
	//==============================================
	function trx_addons_ready_actions(e, container) {
	
		if (container === undefined) container = jQuery('body');

		// Animate to the page-inner links
		//----------------------------------------------
		if (TRX_ADDONS_STORAGE['animate_inner_links'] > 0 && !container.hasClass('animate_to_inited')) {
			container
				.addClass('animate_to_inited')
				.on('click', 'a', function(e) {
					var link_obj = jQuery(this);
					var link_parent = link_obj.parent();
					// Skip tabs and accordions
					if (link_parent.parent().hasClass('trx_addons_tabs_titles')	// trx_addons_tabs
						|| link_obj.hasClass('trx_addons_panel_link')			// sc_layouts_panel
						|| link_obj.hasClass('trx_addons_popup_link')			// sc_layouts_popup
						|| link_parent.hasClass('vc_tta-tab') 					// new VC tabs, old VC tabs, new VC tour
						|| link_obj.hasClass('vc_pagination-trigger')			// pagination in VC tabs
						|| link_obj.hasClass('ui-tabs-anchor') 					// old VC tour
						|| link_parent.hasClass('vc_tta-panel-title')			// new VC accordion
						|| link_parent.hasClass('wpb_accordion_header') 		// old VC accordion
						|| link_parent.parents('.wc-tabs').length > 0 			// WooCommerce tabs on the single product page
						|| link_parent.parents('ul[class*="tabs"]').length > 0 	// All other tabs
						) return;
					var href = link_obj.attr('href');
					if (href == '#') return;
					if (trx_addons_is_local_link(href)) {
						var pos = href.indexOf('#'),
							offset = 0;
						if (pos >= 0) {
							href = href.substr(pos);
							if (jQuery(href).length > 0) {
								trx_addons_document_animate_to(href);
								e.preventDefault();
								return false;
							}
						}
					}
				});
		}

		// Add parameter target="_blank" to all external links
		//----------------------------------------------
		if (TRX_ADDONS_STORAGE['add_target_blank'] > 0) {
			jQuery('a').filter(function() {
				return this.hostname && this.hostname !== location.hostname;
			}).attr('target', '_blank').attr('rel', 'nofollow');
		}

		// Hide empty figcaptions
		jQuery('figcaption').each(function() {
			if (jQuery(this).text() == '') {
				jQuery(this).hide();
			}
		});

		// Tabs
		//------------------------------------
		if (jQuery.ui && jQuery.ui.tabs && container.find('.trx_addons_tabs:not(.inited)').length > 0) {
			container.find('.trx_addons_tabs:not(.inited)').each(function () {
				// Get initially opened tab
				var init = jQuery(this).data('active');
				if (isNaN(init)) {
					init = 0;
					var active = jQuery(this).find('> ul > li[data-active="true"]').eq(0);
					if (active.length > 0) {
						init = active.index();
						if (isNaN(init) || init < 0) init = 0;
					}
				} else {
					init = Math.max(0, init);
				}
				// Get disabled tabs
				var disabled = [];
				jQuery(this).find('> ul > li[data-disabled="true"]').each(function() {
					disabled.push(jQuery(this).index());
				});
				// Init tabs
				jQuery(this).addClass('inited').tabs({
					active: init,
					disabled: disabled,
					show: {
						effect: 'fadeIn',
						duration: 300
					},
					hide: {
						effect: 'fadeOut',
						duration: 300
					},
					create: function( event, ui ) {
						if (ui.panel.length > 0) jQuery(document).trigger('action.init_hidden_elements', [ui.panel]);
					},
					activate: function( event, ui ) {
						if (ui.newPanel.length > 0) jQuery(document).trigger('action.init_hidden_elements', [ui.newPanel]);
					}
				});
			});
		}
	
	
		// Accordion
		//------------------------------------
		if (jQuery.ui && jQuery.ui.accordion && container.find('.trx_addons_accordion:not(.inited)').length > 0) {
			container.find('.trx_addons_accordion:not(.inited)').each(function () {
				// Get headers selector
				var accordion = jQuery(this);
				var headers = accordion.data('headers');
				if (headers===undefined) headers = 'h5';
				// Get height style
				var height_style = accordion.data('height-style');
				if (height_style===undefined) height_style = 'content';
				// Get collapsible
				var collapsible = accordion.data('collapsible');
				if (collapsible===undefined) collapsible = false;
				// Get initially opened tab
				var init = accordion.data('active');
				var active = false;
				if (isNaN(init)) {
					init = 0;
					var active = accordion.find(headers+'[data-active="true"]').eq(0);
					if (active.length > 0) {
						while (!active.parent().hasClass('trx_addons_accordion')) {
							active = active.parent();
						}
						init = active.index();
						if (isNaN(init) || init < 0) init = 0;
					}
				} else {
					init = Math.max(0, init);
				}
				// Init accordion
				accordion.addClass('inited').accordion({
					active: init,
					collapsible: collapsible,
					header: headers,
					heightStyle: height_style,
					create: function( event, ui ) {
						if (ui.panel.length > 0) {
							jQuery(document).trigger('action.init_hidden_elements', [ui.panel]);
						} else if (active !== false && active.length > 0) {
							// If headers and panels wrapped into div
							active.find('>'+headers).trigger('click');
						}
					},
					activate: function( event, ui ) {
						if (ui.newPanel.length > 0) jQuery(document).trigger('action.init_hidden_elements', [ui.newPanel]);
					}
				});
			});
		}
	
	
		// Color Picker
		//----------------------------------------------------------------
		var cp = container.find('.trx_addons_color_selector:not(.inited)'),
			cp_created = false;
		if (cp.length > 0) {
			cp.addClass('inited').each(function() {
				// Internal ColorPicker
				if (jQuery(this).hasClass('iColorPicker')) {
					if (!cp_created) {
						trx_addons_color_picker();
						cp_created = true;
					}
					trx_addons_change_field_colors(jQuery(this));
					jQuery(this)
						.on('focus', function (e) {
							trx_addons_color_picker_show(null, jQuery(this), function(fld, clr) {
								fld.val(clr).trigger('change');
								trx_addons_change_field_colors(fld);
							});
						}).on('change', function(e) {
							trx_addons_change_field_colors(jQuery(this));
						});
					
				// WP ColorPicker - Iris
				} else if (typeof jQuery.fn.wpColorPicker != 'undefined') {
					jQuery(this).wpColorPicker({
						// you can declare a default color here,
						// or in the data-default-color attribute on the input
						//defaultColor: false,
				
						// a callback to fire whenever the color changes to a valid color
						change: function(e, ui){
							jQuery(e.target).val(ui.color).trigger('change');
						},
				
						// a callback to fire when the input is emptied or an invalid color
						clear: function(e) {
							jQuery(e.target).prev().trigger('change')
						},
				
						// hide the color picker controls on load
						//hide: true,
				
						// show a group of common colors beneath the square
						// or, supply an array of colors to customize further
						//palettes: true
					});
				}
			});
		}
	
		// Change colors of the field
		function trx_addons_change_field_colors(fld) {
			var clr = fld.val(),
				hsb = trx_addons_hex2hsb(clr);
			fld.css({
				'backgroundColor': clr,
				'color': hsb['b'] < 70 ? '#fff' : '#000'
			});
		}


		// Range Slider
		//------------------------------------
		if (jQuery.ui && jQuery.ui.slider && container.find('.trx_addons_range_slider:not(.inited)').length > 0) {
			container.find('.trx_addons_range_slider:not(.inited)').each(function () {
				// Get parameters
				var range_slider = jQuery(this);
				var linked_field = range_slider.data('linked_field');
				if (linked_field===undefined) linked_field = range_slider.prev('input[type="hidden"]');
				else linked_field = jQuery('#'+linked_field);
				if (linked_field.length == 0) return;
				var range_slider_cur = range_slider.find('> .trx_addons_range_slider_label_cur');
				var range_slider_type = range_slider.data('range');
				if (range_slider_type===undefined) range_slider_type = 'min';
				var values = linked_field.val().split(',');
				var minimum = range_slider.data('min');
				if (minimum===undefined) minimum = 0;
				var maximum = range_slider.data('max');
				if (maximum===undefined) maximum = 0;
				var step = range_slider.data('step');
				if (step===undefined) step = 1;
				// Init range slider
				var init_obj = {
					range: range_slider_type,
					min: minimum,
					max: maximum,
					step: step,
					slide: function(event, ui) {
						var cur_values = range_slider_type === 'min' ? [ui.value] : ui.values;
						linked_field.val(cur_values.join(',')).trigger('change');
						for (var i=0; i < cur_values.length; i++) {
							range_slider_cur.eq(i)
									.html(cur_values[i])
									.css('left', Math.max(0, Math.min(100, (cur_values[i]-minimum)*100/(maximum-minimum)))+'%');
						}
					},
					create: function(event, ui) {
						for (var i=0; i < values.length; i++) {
							range_slider_cur.eq(i)
									.html(values[i])
									.css('left', Math.max(0, Math.min(100, (values[i]-minimum)*100/(maximum-minimum)))+'%');
						}
					}
				};
				if (range_slider_type === true)
					init_obj.values = values;
				else
					init_obj.value = values[0];
				range_slider.addClass('inited').slider(init_obj);
			});
		}
	
	
		// Select2
		//------------------------------------
		if (jQuery.fn && jQuery.fn.select2) {
			container.find('.trx_addons_select2:not(.inited)').addClass('inited').select2();
		}
		
	
		// Video player
		//----------------------------------------------
		if (container.find('.trx_addons_video_player.with_cover .video_hover:not(.inited)').length > 0) {
			container.find('.trx_addons_video_player.with_cover .video_hover:not(.inited)')
				.addClass('inited')
				.on('click', function(e) {
					
					// If video in the popup
					if (jQuery(this).hasClass('trx_addons_popup_link')) return;
					
					jQuery(this).parents('.trx_addons_video_player').eq(0)
						.addClass('video_play')
						.find('.video_embed').html(jQuery(this).data('video'));
	
					// If video in the slide
					var slider = jQuery(this).parents('.slider_swiper').eq(0);
					if (slider.length > 0) {
						var id = slider.attr('id');
						TRX_ADDONS_STORAGE['swipers'][id].stopAutoplay();
						// If slider have controller - stop it too
						id = slider.data('controller');
						if (id && TRX_ADDONS_STORAGE['swipers'][id+'_swiper'])
							TRX_ADDONS_STORAGE['swipers'][id+'_swiper'].stopAutoplay();
						
					}
	
					jQuery(document).trigger('action.init_hidden_elements', [jQuery(this).parents('.trx_addons_video_player').eq(0)]);
					jQuery(window).trigger('resize');
					e.preventDefault();
					return false;
				});
		}
	
	
		// Popups & Panels
		//----------------------------------------------

		// PrettyPhoto Engine
		if (TRX_ADDONS_STORAGE['popup_engine'] == 'pretty') {
			// Display lightbox on click on the image
			container.find("a[href$='jpg']:not(.inited),a[href$='jpeg']:not(.inited),a[href$='png']:not(.inited),a[href$='gif']:not(.inited)").each(function() {
				if (!jQuery(this).parent().hasClass('woocommerce-product-gallery__image'))
					jQuery(this).attr('rel', 'prettyPhoto[slideshow]');
			});
			var images = container.find("a[rel*='prettyPhoto']:not(.inited)"
										+ ":not(.esgbox)"
										+ ":not([data-rel*='pretty'])"
										+ ":not([rel*='magnific'])"
										+ ":not([data-rel*='magnific'])"
										+ ":not([data-elementor-open-lightbox='yes'])"
										+ ":not([data-elementor-open-lightbox='default'])"
										).addClass('inited');
			try {
				images.prettyPhoto({
					social_tools: '',
					theme: 'facebook',
					deeplinking: false
				});
			} catch (e) {};
		
		// or Magnific Popup Engine
		} else if (TRX_ADDONS_STORAGE['popup_engine']=='magnific' && typeof jQuery.fn.magnificPopup != 'undefined') {
			// Display lightbox on click on the image
			container.find("a[href$='jpg']:not(.inited),a[href$='jpeg']:not(.inited),a[href$='png']:not(.inited),a[href$='gif']:not(.inited)").each(function() {
				var obj = jQuery(this);
				if (obj.parents('.cq-dagallery').length == 0
					&& !obj.hasClass('prettyphoto')
					&& !obj.hasClass('esgbox')
				) {
					obj.attr('rel', 'magnific');
				}
			});
			var images = container.find("a[rel*='magnific']:not(.inited)"
										+ ":not(.esgbox)"
										+ ":not(.prettyphoto)"
										+ ":not([rel*='pretty'])"
										+ ":not([data-rel*='pretty'])"
										+ ":not([data-elementor-open-lightbox='yes'])"
										+ ":not([data-elementor-open-lightbox='default'])"
										).addClass('inited');
			// Unbind prettyPhoto
			setTimeout(function() {	images.unbind('click.prettyphoto'); }, 100);
			// Bind Magnific
			try {
				images.magnificPopup({
					type: 'image',
					mainClass: 'mfp-img-mobile',
					closeOnContentClick: true,
					closeBtnInside: true,
					fixedContentPos: true,
					midClick: true,
					//removalDelay: 500, 
					preloader: true,
					tLoading: TRX_ADDONS_STORAGE['msg_magnific_loading'],
					gallery:{
						enabled: true
					},
					image: {
						tError: TRX_ADDONS_STORAGE['msg_magnific_error'],
						verticalFit: true
					},
					zoom: {
						enabled: true,
						duration: 300,
						easing: 'ease-in-out',
						opener: function(openerElement) {
							// openerElement is the element on which popup was initialized, in this case its <a> tag
							// you don't need to add "opener" option if this code matches your needs, it's defailt one.
							if (!openerElement.is('img')) {
								if (openerElement.parents('.trx_addons_hover').find('img').length > 0)
									openerElement = openerElement.parents('.trx_addons_hover').find('img');
								else if (openerElement.find('img').length > 0)
									 openerElement = openerElement.find('img');
								else if (openerElement.siblings('img').length > 0)
									 openerElement = openerElement.siblings('img');
								else if (openerElement.parent().parent().find('img').length > 0)
									 openerElement = openerElement.parent().parent().find('img');
							}
							return openerElement; 
						}
					},
					callbacks: {
						beforeClose: function(){
							jQuery('.mfp-figure figcaption').hide();
							jQuery('.mfp-figure .mfp-arrow').hide();
						}
					}
				});
			} catch (e) {};


			// Prepare links to popups & panels
			var show_on_load = [];
			container.find('.sc_layouts_popup:not(.inited),.sc_layouts_panel:not(.inited)').each(function() {
				var obj = jQuery(this),
					id = obj.attr('id'),
					show = false;
				if (!id) return;
				var is_panel = obj.hasClass('sc_layouts_panel');
				if (obj.hasClass('sc_layouts_show_on_page_load')) {
					show = true;
				} else if (obj.hasClass('sc_layouts_show_on_page_load_once') && trx_addons_get_cookie('trx_addons_show_on_page_load_once_'+id) != '1') {
					trx_addons_set_cookie('trx_addons_show_on_page_load_once_'+id, '1');
					show = true;
				}
				var link = jQuery('a[href="#'+id+'"]');
				if (show) {
					if (link.length == 0) {
						jQuery('body').append('<a href="#'+id+'" class="trx_addons_hidden"></a>');
						link = jQuery('a[href="#'+id+'"]');
					}
					show_on_load.push(link);
				}
				link.addClass(is_panel ? 'trx_addons_panel_link' : 'trx_addons_popup_link')
					.data('panel', obj);
				obj.addClass('inited')
					.on('click', '.sc_layouts_panel_close', function(e) {
						trx_addons_close_panel(obj);
						e.preventDefault();
						return false;
					});
			});
			
			// Close panel on click on the modal cover
			container.find('.sc_layouts_panel_hide_content:not(.inited)').addClass('inited')
				.on('click', function(e) {
					trx_addons_close_panel(jQuery(this).next());
					e.preventDefault();
					return false;
				});


			// Display lightbox on click on the popup link
			container.find(".trx_addons_popup_link:not(.popup_inited)").addClass('popup_inited').magnificPopup({
				type: 'inline',
				focus: 'input',
				closeBtnInside: true,
				callbacks: {
					// Will fire when this exact popup is opened
					// this - is Magnific Popup object
					open: function () {
						// Get saved content or store it (if first open occured)
						trx_addons_prepare_popup_content(this.content, true);
					},
					close: function () {
						// Save and remove content before closing
						// if its contain video, audio or iframe
						trx_addons_close_panel(this.content);
					},
					// resize event triggers only when height is changed or layout forced
					resize: function () {
						trx_addons_resize_actions(jQuery(this.content));
					}
				}
			});
	
			// Display panel on click on the panel link
			container.find(".trx_addons_panel_link:not(.panel_inited)")
				.addClass('panel_inited')
				.on('click', function(e) {
					var panel = jQuery(this).data('panel');
					if (!panel.hasClass('sc_layouts_panel_opened')) {
						trx_addons_prepare_popup_content(panel, true);
						panel.addClass('sc_layouts_panel_opened');
						if (panel.prev().hasClass('sc_layouts_panel_hide_content')) panel.prev().addClass('sc_layouts_panel_opened');
					} else {
						trx_addons_close_panel(panel);
					}
					e.preventDefault();
					return false;
				});
			
			// Close panel
			window.trx_addons_close_panel = function(panel) {
				panel.removeClass('sc_layouts_panel_opened');
				if (panel.prev().hasClass('sc_layouts_panel_hide_content')) panel.prev().removeClass('sc_layouts_panel_opened');
				if (panel.data('popup-content') !== undefined) {
					setTimeout(function() { panel.empty(); }, 500);
				}
			};

			// Get saved content for panel or popup or store it (if first open occured)
			window.trx_addons_prepare_popup_content = function(container, autoplay) {
				var wrapper = jQuery(container);
				// Store popup content to the data-param or restore it when popup open again (second time)
				// if popup contains audio or video or iframe
				if (wrapper.data('popup-content') === undefined) {
					var html = wrapper.html();
					if (html.search(/\<(audio|video|iframe)/i) >= 0) {
						wrapper.data('popup-content', html);
					}
				} else {
					wrapper.html(wrapper.data('popup-content'));
					// Remove class 'inited' to reinit elements
					wrapper.find('.inited').removeClass('inited');
				}
				// Replace src with data-src
				wrapper.find('[data-src]').each(function() {
					jQuery(this).attr( 'src', jQuery(this).data('src') );
				});
				// Init hidden elements
				jQuery(document).trigger('action.init_hidden_elements', [wrapper]);
				// Init third-party plugins in the popup
				jQuery(document).trigger('action.init_popup_elements', [wrapper]);
				// If popup contain embedded video - add autoplay
				if (autoplay) trx_addons_set_autoplay(wrapper);
				// If popup contain essential grid
				var frame = wrapper.find('.esg-grid');
				if (frame.length > 0) {
					var wrappers = [".esg-tc.eec", ".esg-lc.eec", ".esg-rc.eec", ".esg-cc.eec", ".esg-bc.eec"];
					for (var i=0; i<wrappers.length; i++) {
						frame.find(wrappers[i]+'>'+wrappers[i]).unwrap();
					}
				}
				// Call resize actions for the new content
				jQuery(window).trigger('resize');
			};

			// Display popups (panels) on the page (site) load
			if ( !jQuery('body').hasClass('.elementor-editor-active') ) {
				for (var i = 0; i < show_on_load.length; i++) {
					show_on_load[i].trigger('click');
				}
			}
		}
	
	
		// Likes counter
		//---------------------------------------------
		if (container.find('a.post_meta_likes:not(.inited),a.comment_counters_likes:not(.inited)').length > 0) {
			var likes_busy = false;
			container.find('a.post_meta_likes:not(.inited),a.comment_counters_likes:not(.inited)')
				.addClass('inited')
				.on('click', function(e) {
					if (!likes_busy) {
						likes_busy = true;
						var button = jQuery(this);
						var inc = button.hasClass('enabled') ? 1 : -1;
						var post_id = button.hasClass('post_meta_likes') ? button.data('postid') :  button.data('commentid');
						var cookie_likes = trx_addons_get_cookie(button.hasClass('post_meta_likes') ? 'trx_addons_likes' : 'trx_addons_comment_likes');
						if (cookie_likes === undefined || cookie_likes===null) cookie_likes = '';
						jQuery.post(TRX_ADDONS_STORAGE['ajax_url'], {
							action: button.hasClass('post_meta_likes') ? 'post_counter' : 'comment_counter',
							nonce: TRX_ADDONS_STORAGE['ajax_nonce'],
							post_id: post_id,
							likes: inc
						}).done(function(response) {
							var rez = {};
							try {
								rez = JSON.parse(response);
							} catch (e) {
								rez = { error: TRX_ADDONS_STORAGE['msg_ajax_error'] };
								console.log(response);
							}
							if (rez.error === '') {
								var counter = rez.counter;
								if (inc == 1) {
									var title = button.data('title-dislike');
									button.removeClass('enabled trx_addons_icon-heart-empty').addClass('disabled trx_addons_icon-heart');
									cookie_likes += (cookie_likes.substr(-1)!=',' ? ',' : '') + post_id + ',';
								} else {
									var title = button.data('title-like');
									button.removeClass('disabled trx_addons_icon-heart').addClass('enabled trx_addons_icon-heart-empty');
									cookie_likes = cookie_likes.replace(','+post_id+',', ',');
								}
								button.data('likes', counter).attr('title', title).find(button.hasClass('post_meta_likes') ? '.post_meta_number' : '.comment_counters_number').html(counter);
								trx_addons_set_cookie(button.hasClass('post_meta_likes') ? 'trx_addons_likes' : 'trx_addons_comment_likes', cookie_likes, 365);
							} else {
								alert(TRX_ADDONS_STORAGE['msg_error_like']);
							}
							likes_busy = false;
						});
					}
					e.preventDefault();
					return false;
				});
		}
	
	
		// Emotions counter
		//---------------------------------------------
		if (container.find('.trx_addons_emotions:not(.inited)').length > 0) {
			var emotions_busy = false;
			container.find('.trx_addons_emotions:not(.inited)')
				.addClass('inited')
				.on('click', '.trx_addons_emotions_item', function(e) {
					if (!emotions_busy) {
						emotions_busy = true;
						var button = jQuery(this);
						var button_active = button.parent().find('.trx_addons_emotions_active');
						var post_id = button.data('postid');
						jQuery.post(TRX_ADDONS_STORAGE['ajax_url'], {
							action: 'post_counter',
							nonce: TRX_ADDONS_STORAGE['ajax_nonce'],
							post_id: post_id,
							emotion_inc: button.data('slug'),
							emotion_dec: button_active.length > 0 ? button_active.data('slug') : '',
						}).done(function(response) {
							var rez = {};
							try {
								rez = JSON.parse(response);
							} catch (e) {
								rez = { error: TRX_ADDONS_STORAGE['msg_ajax_error'] };
								console.log(response);
							}
							if (rez.error === '') {
								var cookie_likes = trx_addons_get_cookie('trx_addons_emotions'),
									cookie_likes_new = ',';
								if (cookie_likes) {
									cookie_likes = cookie_likes.split(',');
									for (var i=0; i<cookie_likes.length; i++) {
										if (cookie_likes[i] === '') continue;
										var tmp = cookie_likes[i].split('=');
										if (tmp[0] != post_id) cookie_likes_new += cookie_likes[i] + ',';
									}
								}
								cookie_likes = cookie_likes_new;
								if (button_active.length > 0) {
									button_active.removeClass('trx_addons_emotions_active');
								}
								if (button_active.length == 0 || button.data('slug') != button_active.data('slug')) {
									button.addClass('trx_addons_emotions_active');
									cookie_likes += (cookie_likes.substr(-1)!=',' ? ',' : '') + post_id + '=' + button.data('slug') + ',';
								}
								for (var i in rez.counter)
									button.parent().find('[data-slug="'+i+'"] .trx_addons_emotions_item_number').html(rez.counter[i]);
								trx_addons_set_cookie('trx_addons_emotions', cookie_likes, 365);
							} else {
								alert(TRX_ADDONS_STORAGE['msg_error_like']);
							}
							emotions_busy = false;
						});
					}
					e.preventDefault();
					return false;
				});
		}
	
	
		// Socials share
		//----------------------------------------------
		if (container.find('.socials_share .socials_caption:not(.inited)').length > 0) {
			container.find('.socials_share .socials_caption:not(.inited)').each(function() {
				jQuery(this).addClass('inited').on('click', function(e) {
					jQuery(this).siblings('.social_items').slideToggle();	//.toggleClass('opened');
					e.preventDefault();
					return false;
				});
			});
		}
		if (container.find('.socials_share .social_items:not(.inited)').length > 0) {
			container.find('.socials_share .social_items:not(.inited)').each(function() {
				jQuery(this).addClass('inited').on('click', '.social_item_popup', function(e) {
					var url = jQuery(this).data('link');
					window.open(url, '_blank', 'scrollbars=0, resizable=1, menubar=0, left=100, top=100, width=480, height=400, toolbar=0, status=0');
					e.preventDefault();
					return false;
				});
			});
		}
		
		
		// Widgets decoration
		//----------------------------------------------
	
		// Decorate nested lists in widgets and side panels
		container.find('.widget ul > li').each(function() {
			if (jQuery(this).find('ul').length > 0) {
				jQuery(this).addClass('has_children');
			}
		});
	
		// Archive widget decoration
		container.find('.widget_archive a:not(.inited)').addClass('inited').each(function() {
			var val = jQuery(this).html().split(' ');
			if (val.length > 1) {
				val[val.length-1] = '<span>' + val[val.length-1] + '</span>';
				jQuery(this).html(val.join(' '))
			}
		});
	
	
		// Menu
		//----------------------------------------------
	
		// Prepare menus (if menu cache is used)
		jQuery('.sc_layouts_menu_nav').each(function() {
			if (jQuery(this).find('.current-menu-item').length == 0 || jQuery('body').hasClass('blog_template')) {
				if (TRX_ADDONS_STORAGE['menu_cache'] === undefined) TRX_ADDONS_STORAGE['menu_cache'] = [];
				var id = jQuery(this).attr('id');
				if (id === undefined) {
					id = ('sc_layouts_menu_nav_' + Math.random()).replace('.', '');
					jQuery(this).attr('id', id);
				}
				TRX_ADDONS_STORAGE['menu_cache'].push('#'+id);
			}
		});
		if (TRX_ADDONS_STORAGE['menu_cache'] && TRX_ADDONS_STORAGE['menu_cache'].length > 0) {
			// Mark the current menu item and its parent items in the cached menus
			var href = window.location.href;
			if (href.substr(-1)=='/') href = href.substr(0, href.length-1);
			var href2 = href + '/';
			for (var i = 0; i < TRX_ADDONS_STORAGE['menu_cache'].length; i++) {
				var menu = jQuery(TRX_ADDONS_STORAGE['menu_cache'][i]+':not(.prepared)');
				if (menu.length==0) continue;
				menu.addClass('prepared');
				menu.find('li').removeClass('current-menu-ancestor current-menu-parent current-menu-item current_page_item');
				menu.find('a[href="'+href+'"],a[href="'+href2+'"]').each(function(idx) {
					var li = jQuery(this).parent();
					li.addClass('current-menu-item');
					if (li.hasClass('menu-item-object-page')) li.addClass('current_page_item');
					var cnt = 0;
					while ((li = li.parents('li')).length > 0) {
						cnt++;
						li.addClass('current-menu-ancestor'+(cnt==1 ? ' current-menu-parent' : ''));
					}
				});
			}
		}
	
	
		// Forms
		//------------------------------------
		
		// Remove 'error_field' class on any key pressed in the field
		jQuery("form").on('keypress', '.error_field', function() {
			if (jQuery(this).val() !== '')
				jQuery(this).removeClass('error_field');
		});
	
		// Comment form
		jQuery("form#commentform").submit(function(e) {
			var rez = trx_addons_comments_validate(jQuery(this));
			if (!rez)
				e.preventDefault();
			return rez;
		});
		
		// Comments form
		function trx_addons_comments_validate(form) {
			form.find('input').removeClass('error_field');
			var comments_args = {
				error_message_text: TRX_ADDONS_STORAGE['msg_validation_error'],		// Global error message text (if don't write in checked field)
				error_message_show: true,											// Display or not error message
				error_message_time: 4000,											// Error message display time
				error_message_class: 'trx_addons_message_box trx_addons_message_box_error',	// Class appended to error message block
				error_fields_class: 'error_field',									// Class appended to error fields
				exit_after_first_error: false,										// Cancel validation and exit after first error
				rules: [
					{
						field: 'comment',
						min_length: { value: 1, message: TRX_ADDONS_STORAGE['msg_text_empty'] }
					}
				]
			};
			if (form.find('.comments_author input[aria-required="true"]').length > 0) {
				comments_args.rules.push(
					{
						field: 'author',
						min_length: { value: 1, message: TRX_ADDONS_STORAGE['msg_name_empty']},
						max_length: { value: 60, message: TRX_ADDONS_STORAGE['msg_name_long']}
					}
				);
			}
			if (form.find('.comments_email input[aria-required="true"]').length > 0) {
				comments_args.rules.push(
					{
						field: 'email',
						min_length: { value: 1, message: TRX_ADDONS_STORAGE['msg_email_empty']},
						max_length: { value: 60, message: TRX_ADDONS_STORAGE['msg_email_long']},
						mask: { value: TRX_ADDONS_STORAGE['email_mask'], message: TRX_ADDONS_STORAGE['msg_email_not_valid']}
					}
				);
			}
			var error = trx_addons_form_validate(form, comments_args);
			return !error;
		}
		

		// Animated hover
		//------------------------------------
		container.find('[data-hover-animation^="animated"]').closest('.elementor-column,.post_layout_custom').each(function() {
			if (jQuery(this).hasClass('hover-animation-inited')) return;
			jQuery(this).addClass('hover-animation-inited').hover(
				// Mouse in
				function(e) {
					jQuery(this).find('[data-hover-animation^="animated"]').each(function() {
						var obj = jQuery(this);
						var animation = obj.data('hover-animation');
						var animation_in = obj.data('animation-in');
						if (animation_in == undefined) animation_in = "none";
						var animation_in_delay = obj.data('animation-in-delay');
						if (animation_in_delay == undefined) animation_in_delay = 0;
						var animation_out = obj.data('animation-out');
						if (animation_out == undefined) animation_out = "none";
						if (animation_in != 'none') {
							setTimeout(function() {
								obj.removeClass(animation + ' ' + animation_out);
								obj.addClass(animation + ' ' + animation_in);
							}, animation_in_delay);
						}
					});
				},
				// Mouse out
				function(e) {
					jQuery(this).find('[data-hover-animation^="animated"]').each(function() {
						var obj = jQuery(this);
						var animation = obj.data('hover-animation');
						var animation_in = obj.data('animation-in');
						if (animation_in == undefined) animation_in = "none";
						var animation_out = obj.data('animation-out');
						if (animation_out == undefined) animation_out = "none";
						var animation_out_delay = obj.data('animation-out-delay');
						if (animation_out_delay == undefined) animation_out_delay = 0;
						if (animation_out != 'none') {
							setTimeout(function() {
								obj.removeClass(animation + ' ' + animation_in);
								obj.addClass(animation + ' ' + animation_out);
							}, animation_out_delay);
						}
					});
				}
			);
		});


		// Other settings
		//------------------------------------

		// Scroll to top button
		container.find('.trx_addons_scroll_to_top:not(.inited)').addClass('inited').on('click', function(e) {
			jQuery('html,body').animate({
				scrollTop: 0
			}, 'slow');
			e.preventDefault();
			return false;
		});


		// Call plugins specific action (if exists)
		//----------------------------------------------
		jQuery(document).trigger('action.before_ready_trx_addons');
		jQuery(document).trigger('action.ready_trx_addons');
		jQuery(document).trigger('action.after_ready_trx_addons');
		
	} //end ready


	// Increment post views counter via AJAX
	if (TRX_ADDONS_STORAGE['ajax_views']) {
		jQuery(document).on('action.ready_trx_addons', function() {
			if (!TRX_ADDONS_STORAGE['post_views_counter_inited']) {
				TRX_ADDONS_STORAGE['post_views_counter_inited'] = true;
				setTimeout(function() {
					jQuery.post(TRX_ADDONS_STORAGE['ajax_url'], {
						action: 'post_counter',
						nonce: TRX_ADDONS_STORAGE['ajax_nonce'],
						post_id: TRX_ADDONS_STORAGE['post_id'],
						views: 1
					}).done(function(response) {
						var rez = {};
						try {
							rez = JSON.parse(response);
						} catch (e) {
							rez = { error: TRX_ADDONS_STORAGE['ajax_error'] };
							console.log(response);
						}
						if (rez.error === '') {
							jQuery('.post_meta_single .post_meta_views .post_meta_number,.sc_layouts_title_meta .post_meta_views .post_meta_number').html(rez.counter);
						}
					});
				}, 10);
			}
		});
	}


	
	// Scroll actions
	//==============================================
	
	// Do actions when page scrolled
	function trx_addons_scroll_actions() {

		var scroll_offset = jQuery(window).scrollTop();
		var scroll_to_top_button = jQuery('.trx_addons_scroll_to_top');
		var adminbar_height = Math.max(0, jQuery('#wpadminbar').height());
	
		// Scroll to top button show/hide
		if (scroll_to_top_button.length > 0) {
			if (scroll_offset > 100)
				scroll_to_top_button.addClass('show');
			else
				scroll_to_top_button.removeClass('show');
		}

		// Scroll actions for animated elements
		jQuery('[data-animation^="animated"]:not(.animated)').each(function() {
			if (jQuery(this).offset().top < scroll_offset + jQuery(window).height())
				jQuery(this).addClass(jQuery(this).data('animation'));
		});

		// Display scroll progress
		if (TRX_ADDONS_STORAGE['scroll_progress'] == 'top' || TRX_ADDONS_STORAGE['scroll_progress'] == 'bottom') {
			trx_addons_show_scroll_progress();
		}

		// Call theme/plugins specific action (if exists)
		//----------------------------------------------
		jQuery(document).trigger('action.scroll_trx_addons');

		// Set flag about scroll actions are finished
		TRX_ADDONS_STORAGE['scroll_busy'] = false;
	}

	// Display scroll progress
	function trx_addons_show_scroll_progress() {
		if (TRX_ADDONS_STORAGE['scroll_progress_status'] == undefined) {
			jQuery( 'body' ).append('<div class="scroll_progress_wrap scroll_progress_'+TRX_ADDONS_STORAGE['scroll_progress']+'"><span class="scroll_progress_status"></span></div>');
			TRX_ADDONS_STORAGE['scroll_progress_status'] = jQuery( '.scroll_progress_wrap .scroll_progress_status' );
			// Animate to relative page part on click
			TRX_ADDONS_STORAGE['scroll_progress_status'].on('click', function(e) {
				trx_addons_document_animate_to( Math.round((jQuery(document).height() - jQuery(window).height()) * (e.pageX / jQuery(this).parent().width())) );
				e.preventDefault();
				return false;
			});
		}
		TRX_ADDONS_STORAGE['scroll_progress_status'].width( Math.min(100, Math.round(jQuery(window).scrollTop() * 100 / (jQuery(document).height() - jQuery(window).height()))) + '%');
	}
	
	
	// Resize actions
	//==============================================
	
	// Do actions when page scrolled
	function trx_addons_resize_actions(cont) {
		if (cont===undefined) cont = jQuery('body');

		// Before plugin's resize actions
		jQuery(document).trigger('action.resize_vc_row_start', [cont]);

		// Call theme/plugins specific action (if exists)
		jQuery(document).trigger('action.resize_trx_addons', [cont]);

		// After plugin's resize actions
		jQuery(document).trigger('action.resize_vc_row_end', [cont]);
	}
	
	
	
	var $video_tags = jQuery('video'),
		$iframe_tags = jQuery('iframe');
		// Fit video frames to document width
		jQuery(document).on('action.resize_trx_addons', trx_addons_resize_video);
		function trx_addons_resize_video(e, cont) {
			// Resize tag 'video'
			if ( $video_tags.length > 0 ) {
				$video_tags.each(function() {
					var $self = jQuery(this),
						classes = $self.attr( 'class' );
					// If item now invisible
					if ( $self.parents('.mejs-mediaelement').length === 0
						|| $self.hasClass('trx_addons_noresize')
						|| classes.indexOf('_resize') > 0
						|| classes.indexOf('_noresize') > 0
						|| $self.parents('div:hidden,section:hidden,article:hidden').length > 0
					) {
						return;
					}
					var video = $self.addClass('trx_addons_resize').eq(0);
					var ratio = (video.data('ratio') !== undefined ? video.data('ratio').split(':') : [16,9]);
					ratio = ratio.length!=2 || ratio[0]==0 || ratio[1]==0 ? 16/9 : ratio[0]/ratio[1];
					var mejs_cont = video.parents('.mejs-video').eq(0);
					var mfp_cont  = video.parents( '.mfp-content' ).eq(0);
					var w_attr = video.data('width');
					var h_attr = video.data('height');
					if (!w_attr || !h_attr) {
						w_attr = video.attr('width');
						h_attr = video.attr('height');
						if ((!w_attr || !h_attr) && mejs_cont.length > 0) {
							w_attr = Math.ceil( mejs_cont.width() );
							h_attr = Math.ceil( mejs_cont.height() );
						}
						if (!w_attr || !h_attr) return;
						video.data({'width': w_attr, 'height': h_attr});
					}
					var percent = (''+w_attr).substr(-1) == '%';
					w_attr      = parseInt( w_attr, 10 );
					h_attr      = parseInt( h_attr, 10 );
					var w_real  = Math.ceil( mejs_cont.length > 0 
												? Math.min( percent ? 10000 : w_attr, mejs_cont.parents('div,article').eq(0).width() ) 
												: Math.min( percent ? 10000 : w_attr, video.parents('div,article').eq(0).width() ) 
										   );
					if ( mfp_cont.length > 0 ) {
						w_real  = Math.max( Math.ceil( mfp_cont.width() ), w_real );
					}
					var h_real  = Math.ceil( percent ? w_real/ratio : w_real/w_attr*h_attr );
					if ( parseInt( video.attr('data-last-width'), 10) == w_real ) {
						return;
					}
					if ( percent ) {
						video.height( h_real );
					} else if ( video.parents('.wp-video-playlist').length > 0 ) {
						if ( mejs_cont.length === 0 ) {
							video.attr({'width': w_real, 'height': h_real});
						}
					} else {
						video.attr({'width': w_real, 'height': h_real}).css({'width': w_real+'px', 'height': h_real+'px'});
						if (mejs_cont.length > 0) {
							trx_addons_set_mejs_player_dimensions(video, w_real, h_real);
						}
					}
					video.attr('data-last-width', w_real);
				});
			}

			// Resize tag 'iframe'
			if ( $iframe_tags.length > 0 ) {
				$iframe_tags.each(function() {
					var $self = jQuery(this);
					// If item now invisible
					if ($self.addClass('trx_addons_resize').parents('div:hidden,section:hidden,article:hidden').length > 0 || $self.hasClass('trx_addons_noresize')) {
						return;
					}
					var iframe = $self.eq(0),
						iframe_src = iframe.attr('src') ? iframe.attr('src') : iframe.data('src');
					if (iframe_src === undefined || iframe_src.indexOf('soundcloud') > 0) return;
					var w_attr = iframe.attr('width');
					var h_attr = iframe.attr('height');
					if ( ! w_attr || ! h_attr || w_attr <= 325 ) {
						return;
					}
					var ratio = iframe.data('ratio') !== undefined 
									? iframe.data('ratio').split(':') 
									: ( iframe.parent().data('ratio') !== undefined 
										? iframe.parent().data('ratio').split(':') 
										: ( iframe.find('[data-ratio]').length>0 
											? iframe.find('[data-ratio]').data('ratio').split(':') 
											: [w_attr, h_attr]
											)
										);
					ratio      = ratio.length != 2 || ratio[0] === 0 || ratio[1] === 0 ? 16 / 9 : ratio[0] / ratio[1];
					var percent   = ( '' + w_attr ).slice(-1) == '%';
					w_attr        = parseInt( w_attr, 10 );
					h_attr        = parseInt( h_attr, 10 );
					var par       = iframe.parents('div,section').eq(0),
						contains   = iframe.data('contains-in-parent')=='1' || iframe.hasClass('contains-in-parent'),
						nostretch = iframe.data('no-stretch-to-parent')=='1' || iframe.hasClass('no-stretch-to-parent'),
						pw        = Math.ceil( par.width() ),
						ph        = Math.ceil( par.height() ),
						w_real    = nostretch ? Math.min( w_attr, pw ) : pw,
						h_real    = Math.ceil( percent ? w_real/ratio : w_real/w_attr*h_attr );
					if ( contains && par.css('position') == 'absolute' && h_real > ph ) {
						h_real = ph;
						w_real = Math.ceil( percent ? h_real*ratio : h_real*w_attr/h_attr );
					}
					if ( parseInt(iframe.attr('data-last-width'), 10) == w_real ) return;
					iframe.css({'width': w_real+'px', 'height': h_real+'px'});
					iframe.attr('data-last-width', w_real);
				});
			}
		}	// trx_addons_resize_video
	
	
	// Set Media Elements player dimensions
	function trx_addons_set_mejs_player_dimensions(video, w, h) {
		if (mejs) {
			for (var pl in mejs.players) {
				if (mejs.players[pl].media.src == video.attr('src')) {
					if (mejs.players[pl].media.setVideoSize) {
						mejs.players[pl].media.setVideoSize(w, h);
					} else if (mejs.players[pl].media.setSize) {
						mejs.players[pl].media.setSize(w, h);
					}
					mejs.players[pl].setPlayerSize(w, h);
					mejs.players[pl].setControlsSize();
				}
			}
		}
	}
	

	// Fix columns
	jQuery(document).on('action.resize_trx_addons', trx_addons_fix_column);
	jQuery(document).on('action.scroll_trx_addons', trx_addons_fix_column);
	
	function trx_addons_fix_column(e, cont) {
		if (cont===undefined) cont = jQuery('body');
		var force = e.namespace == 'resize_trx_addons';
		cont.find('.sc_column_fixed').each(function() {
			var col = jQuery(this),
				row = col.parent();
			
			// Exit if non-standard responsive is used for this columns
			if (col.attr('class').indexOf('vc_col-lg-')!=-1 || col.attr('class').indexOf('vc_col-md-')!=-1) {
				return;

			// Unfix on mobile layout (all columns are fullwidth)
			} else if (jQuery(window).width() < 768) {
				var old_style = col.data('old_style');
				if (old_style !== undefined) {
					col.attr('style', old_style).removeAttr('data-old_style');
				}
		
			} else {
		
				var col_height = col.outerHeight();
				var row_height = row.outerHeight();
				var row_top = row.offset().top;
				var scroll_offset = jQuery(window).scrollTop();
				var top_panel_fixed_height = trx_addons_fixed_rows_height();
	
				// If column shorter then content and page scrolled below the content's top
				if (col_height < row_height && scroll_offset + top_panel_fixed_height > row_top) {
					
					var col_init = {
							'position': 'undefined',
							'top': 'auto',
							'bottom' : 'auto'
							};
					
					if (typeof TRX_ADDONS_STORAGE['scroll_offset_last'] == 'undefined') {
						TRX_ADDONS_STORAGE['col_top_last'] = row_top;
						TRX_ADDONS_STORAGE['scroll_offset_last'] = scroll_offset;
						TRX_ADDONS_STORAGE['scroll_dir_last'] = 1;
					}
					var scroll_dir = scroll_offset - TRX_ADDONS_STORAGE['scroll_offset_last'];
					if (scroll_dir == 0)
						scroll_dir = TRX_ADDONS_STORAGE['scroll_dir_last'];
					else
						scroll_dir = scroll_dir > 0 ? 1 : -1;
					
					var col_big = col_height + 30 >= jQuery(window).height() - top_panel_fixed_height,
						col_top = col.offset().top;

					if (col_top < 0) {
						col_top = TRX_ADDONS_STORAGE['col_top_last'];
					}


					// If column height greater then window height
					if (col_big) {
	
						// If change scrolling dir
						if (scroll_dir != TRX_ADDONS_STORAGE['scroll_dir_last'] && col.css('position') == 'fixed') {
							col_init.top = col_top - row_top;
							col_init.position = 'absolute';
	
						// If scrolling down
						} else if (scroll_dir > 0) {
							if (scroll_offset + jQuery(window).height() >= row_top + row_height + 30) {
								col_init.bottom = 0;
								col_init.position = 'absolute';
							} else if (scroll_offset + jQuery(window).height() >= (col.css('position') == 'absolute' ? col_top : row_top) + col_height + 30) {
								col_init.bottom = 30;
								col_init.position = 'fixed';
							}
					
						// If scrolling up
						} else {
							if (scroll_offset + top_panel_fixed_height <= col_top) {
								col_init.top = top_panel_fixed_height;
								col_init.position = 'fixed';
							}
						}
					
					// If column height less then window height
					} else {
						if (scroll_offset + top_panel_fixed_height >= row_top + row_height - col_height) {
							col_init.bottom = 0;
							col_init.position = 'absolute';
						} else {
							col_init.top = top_panel_fixed_height;
							col_init.position = 'fixed';
						}
					}

					if (force && col_init.position == 'undefined' && col.css('position') == 'absolute') {
						col_init.position = 'absolute';
						if (col.css('top') != 'auto') {
							col_init.top = col.css('top');
						} else {
							col_init.bottom = col.css('bottom');
						}
					}

					if (col_init.position != 'undefined') {
						// Insert placeholder before this column
						var style = col.attr('style');
						if (!style) style = '';
						if (!col.prev().hasClass('sc_column_fixed_placeholder')) {
							col.css(col_init);
							TRX_ADDONS_STORAGE['scroll_dir_last'] = 0;
							col.before('<div class="sc_column_fixed_placeholder '+col.attr('class').replace('sc_column_fixed', '')+'"'
										+ (col.data('col') ? ' data-col="' + col.data('col') + '"' : '')
										+ '></div>');
						}
						// Detect horizontal position
						col_init.left = col_init.position == 'fixed' ? col.prev().offset().left : col.prev().position().left;
						col_init.width = col.prev().width() + parseFloat(col.prev().css('paddingLeft')) + parseFloat(col.prev().css('paddingRight'));
						// Set position
						if (force 
							|| col.css('position') != col_init.position 
							|| TRX_ADDONS_STORAGE['scroll_dir_last'] != scroll_dir
							|| col.width() != col_init.width) {
							if (col.data('old_style') === undefined) {
								col.attr('data-old_style', style);
							}
							col.css(col_init);
						}
					}

					TRX_ADDONS_STORAGE['col_top_last'] = col_top;
					TRX_ADDONS_STORAGE['scroll_offset_last'] = scroll_offset;
					TRX_ADDONS_STORAGE['scroll_dir_last'] = scroll_dir;
	
				} else {
	
					// Unfix when page scrolling to top
					var old_style = col.data('old_style');
					if (old_style !== undefined) {
						col.attr('style', old_style).removeAttr('data-old_style');
						if (col.prev().hasClass('sc_column_fixed_placeholder'))
							col.prev().remove();
					}

				}
			}
		});
	}

});


/* Global functions */
(function() {
	"use strict";

	/* Paint arc on canvas with digits (used in the shortcodes and reviews) */
	window.trx_addons_draw_arc_on_canvas = function(item, value) {
	
		var canvas = item.find('canvas');
		if (canvas.length == 0) return;
		
		var digits = canvas.next();
		var brd = parseInt(digits.css('border-top-width'), 10);
		var w = Math.ceil(digits.width()+2*brd);
	
		var needRepaint = false;
		if (canvas.attr('width') != w) {
			needRepaint = true;
			canvas.attr({
				'width': w,
				'height': w
			});
		}
	
		if (item.data('old-value') == value && !needRepaint) return;
		item.data('old-value', value);
		
		var percent = value * 100 / canvas.data('max-value');
		var angle = 360 * percent / 100;
		var Ar = angle * Math.PI / 180;
	
		var canvas_dom = canvas.get(0);
		var context = canvas_dom.getContext('2d');
		var r = (w - brd) / 2;
		var cx = w / 2;
		var cy = w / 2;
	
		context.beginPath();
		context.clearRect(0, 0, w, w);
		context.arc(cx, cy, r, 0, Ar, false);
		context.imageSmoothingEnabled= true;
		context.lineWidth = brd;
		context.strokeStyle = canvas.data('color');
		context.stroke();
	};

})();

Spamworldpro Mini