(function($) {

	//Frontend live save
	var $saveButton = $('[data-vc-ui-element="button-save"]');

	$saveButton.on('click', function() {
		if (!$('body').hasClass('vc_editor')) {
			return false;
		}

		var $vcIframe = $('#vc_inline-frame');
		var cssId = $('.woodmart-css-id').val();
		var $styleTag = $vcIframe.contents().find('#new' + cssId);
		var results = '';
		var rawResults = {
			desktop: {},
			tablet : {},
			mobile : {}
		};
		var rawCss = {
			desktop: '',
			tablet : '',
			mobile : ''
		};

		$('.wpb_el_type_woodmart_responsive_spacing').each(function() {
			var $control = $(this);
			var data = $control.find('.wpb_vc_param_value').val();

			if (!data || $control.hasClass('vc_dependent-hidden')) {
				return;
			}

			data = JSON.parse(window.atob(data));

			$.each(data.data, function(device, values) {
				$.each(values, function(property, value) {
					var selector = '.wd-page-wrapper .wd-rs-' + cssId;
					if ('vc_column' === data.shortcode || 'vc_column_inner' === data.shortcode) {
						selector += ' > .vc_column-inner';
					}

					if (typeof rawResults[device][selector] !== 'object') {
						rawResults[device][selector] = {};
					}

					if (typeof rawResults[device][selector][property] !== 'object') {
						rawResults[device][selector][property] = {};
					}

					rawResults[device][selector][property] = property + ':' + value + ' !important;';
				});
			});
		});

		$('.wpb_el_type_wd_colorpicker, .wpb_el_type_wd_box_shadow, .wpb_el_type_wd_dimensions, .wpb_el_type_wd_number, .wpb_el_type_wd_select, .wpb_el_type_wd_slider').each(function() {
			var $control = $(this);
			var settings = $control.data('param_settings');
			var data = $control.find('.wpb_vc_param_value').val();

			if (!data || $control.hasClass('vc_dependent-hidden')) {
				return;
			}

			data = JSON.parse(window.atob(data));

			$.each(settings.selectors, function(selector, properties) {
				$.each(data.devices, function(device, deviceValue) {
					selector = selector.replace('{{WRAPPER}}', '.wd-rs-' + cssId);

					properties.forEach(function(property, index) {
						if (deviceValue.color || (deviceValue.value && '-' !== deviceValue.value)) {
							if (typeof rawResults[device][selector] !== 'object') {
								rawResults[device][selector] = {};
							}

							if (typeof rawResults[device][selector][property] !== 'object') {
								rawResults[device][selector][property] = {};
							}
						}

						var value;

						if (settings.type === 'wd_box_shadow' && deviceValue.color) {
							value = property.replace('{{HORIZONTAL}}', deviceValue.horizontal);
							value = value.replace('{{VERTICAL}}', deviceValue.vertical);
							value = value.replace('{{BLUR}}', deviceValue.blur);
							value = value.replace('{{SPREAD}}', deviceValue.blur);
							value = value.replace('{{COLOR}}', deviceValue.color);

							rawResults[device][selector][property] = value;
						} else if (settings.type === 'wd_dimensions' && ( deviceValue.top || deviceValue.right || deviceValue.bottom || deviceValue.left )) {
							if (typeof rawResults[device] !== 'object') {
								rawResults[device] = {}
							}

							if (typeof rawResults[device][selector] !== 'object') {
								rawResults[device][selector] = {}
							}

							if (property.includes('{{TOP}}') && deviceValue.top && '-' !== deviceValue.top) {
								value = property
									.replace('{{TOP}}', deviceValue.top)
									.replace('{{UNIT}}', deviceValue.unit || 'px')
							} else if (property.includes('{{RIGHT}}') && deviceValue.right && '-' !== deviceValue.right) {
								value = property
									.replace('{{RIGHT}}', deviceValue.right)
									.replace('{{UNIT}}', deviceValue.unit || 'px')
							} else if (property.includes('{{BOTTOM}}') &&deviceValue.bottom && '-' !== deviceValue.bottom) {
								value = property
									.replace('{{BOTTOM}}', deviceValue.bottom)
									.replace('{{UNIT}}', deviceValue.unit || 'px')
							}
							else if (property.includes('{{LEFT}}') && deviceValue.left && '-' !== deviceValue.left) {
								value = property
									.replace('{{LEFT}}', deviceValue.left)
									.replace('{{UNIT}}', deviceValue.unit || 'px')
							}

							if (value) {
								rawResults[device][selector][property] = value
							}
						} else if (deviceValue.value && '-' !== deviceValue.value) {
							value = property.replace('{{VALUE}}', deviceValue.value);

							if (deviceValue.unit) {
								value = value.replace('{{UNIT}}', deviceValue.unit);
							}

							rawResults[device][selector][property] = value;
						}
					});
				});
			});
		});

		$.each(rawResults, function(device, selectors) {
			$.each(selectors, function(selector, cssData) {
				rawCss[device] += selector + '{';
				$.each(cssData, function(index, cssValue) {
					rawCss[device] += cssValue;
				});
				rawCss[device] += '}';
			});
		});

		$.each(rawCss, function(device, cssValue) {
			if (device === 'desktop' && cssValue) {
				results += cssValue;
			} else if (device === 'tablet' && cssValue) {
				results += '@media (max-width: 1199.98px) {' + cssValue + '}';
			} else if (device === 'mobile' && cssValue) {
				results += '@media (max-width: 767.98px) {' + cssValue + '}';
			}
		});

		if ($styleTag.length === 0) {
			$vcIframe.contents().find('body').prepend('<style id="new' + cssId + '" data-type="woodmart_shortcodes-custom-css">' + results + '</style>');
		} else if ($styleTag.length > 0) {
			$styleTag.html(results);
		}
	});

	$saveButton.on('click', function() {
		if (!$('body').hasClass('vc_editor')) {
			return;
		}

		var $vcIframe = $('#vc_inline-frame');
		var cssId = $('.woodmart-css-id').val();
		var $styleTag = $vcIframe.contents().find('#' + cssId);
		var results = '';
		var sortedCssData = {};
		var css = {
			desktop: '',
			tablet : '',
			mobile : ''
		};

		$('.woodmart-rs-wrapper, .woodmart-vc-colorpicker').each(function() {
			dataSorting($(this));
		});

		$.each(sortedCssData, function(size, selectors) {
			$.each(selectors, function(selector, cssData) {
				css[size] += selector + '{';
				$.each(cssData, function(cssProp, cssValue) {
					css[size] += cssProp + ':' + cssValue + ';';
				});
				css[size] += '}';
			});
		});

		$.each(css, function(size, cssValue) {
			if (size == 'desktop' && cssValue) {
				results += cssValue;
			} else if (size == 'tablet' && cssValue) {
				results += '@media (max-width: 1199.98px) {' + cssValue + '}';
			} else if (size == 'mobile' && cssValue) {
				results += '@media (max-width: 767.98px) {' + cssValue + '}';
			}
		});

		if ($styleTag.length == 0) {
			$vcIframe.contents().find('body').prepend('<style id="' + cssId + '" data-type="woodmart_shortcodes-custom-css">' + results + '</style>');
		} else if ($styleTag.length > 0) {
			$styleTag.html(results);
		}

		function dataSorting($this) {
			if ($this.parents('.vc_shortcode-param').hasClass('vc_dependent-hidden')) {
				return;
			}
			var data = $this.find('.wpb_vc_param_value').val();

			if (data) {
				var parseData = JSON.parse(window.atob(data));

				$.each(parseData.data, function(size, cssValue) {
					if (typeof sortedCssData[size] != 'object') {
						sortedCssData[size] = {};
					}

					$.each(parseData.css_args, function(cssProp, classesArray) {
						$.each(classesArray, function(index, cssClass) {
							selector = '#wd-' + parseData.selector_id + cssClass;

							if (typeof sortedCssData[size][selector] != 'object') {
								sortedCssData[size][selector] = {};
							}

							if (typeof sortedCssData[size][selector][cssProp] != 'object') {
								sortedCssData[size][selector][cssProp] = {};
							}

							if (cssProp == 'font-size') {
								sortedCssData[size][selector]['line-height'] = parseInt(cssValue.replace('px', '')) + 10 + 'px';
							}
							if (cssProp == 'line-height') {
								delete sortedCssData[size][selector]['line-height'];
							}
							sortedCssData[size][selector][cssProp] = cssValue;
						});
					});
				});
			}
		}
	});

	//JS init on frontend editor
	if (typeof window.InlineShortcodeView != 'undefined') {
		window.InlineShortcodeView_woodmart_brands = window.InlineShortcodeView.extend({
			rendered: function() {
				$(document).trigger('FrontendEditorCarouselInit', [this.$el.find('.brands-items-wrapper')]);
				window.InlineShortcodeView_woodmart_brands.__super__.rendered.call(this);
			}
		});

		window.InlineShortcodeView_woodmart_categories = window.InlineShortcodeView.extend({
			rendered: function() {
				$(document).trigger('FrontendEditorCarouselInit', [this.$el.find('.categories-style-carousel')]);
				window.InlineShortcodeView_woodmart_categories.__super__.rendered.call(this);
			}
		});

		window.InlineShortcodeView_woodmart_blog = window.InlineShortcodeView.extend({
			rendered: function() {
				$(document).trigger('FrontendEditorCarouselInit', [this.$el.find('.slider-type-post')]);
				window.InlineShortcodeView_woodmart_blog.__super__.rendered.call(this);
			}
		});

		window.InlineShortcodeView_woodmart_gallery = window.InlineShortcodeView.extend({
			rendered: function() {
				$(document).trigger('FrontendEditorCarouselInit', [this.$el.find('.wd-images-gallery')]);
				window.InlineShortcodeView_woodmart_gallery.__super__.rendered.call(this);
			}
		});

		window.InlineShortcodeView_woodmart_instagram = window.InlineShortcodeView.extend({
			rendered: function() {
				$(document).trigger('FrontendEditorCarouselInit', [this.$el.find('.instagram-pics')]);
				window.InlineShortcodeView_woodmart_instagram.__super__.rendered.call(this);
			}
		});

		window.InlineShortcodeView_woodmart_products = window.InlineShortcodeView.extend({
			rendered: function() {
				$(document).trigger('FrontendEditorCarouselInit', [this.$el.find('.slider-type-product')]);
				window.InlineShortcodeView_woodmart_products.__super__.rendered.call(this);
			}
		});
	}

})(jQuery);
