/home/arranoyd/gazehome/wp-content/plugins/uncode-core/vc_extend/assets/js/index_items.js
! function($) {
	"use strict";
	/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
	/*  Base64 class: Base 64 encoding / decoding (c) Chris Veness 2002-2011                          */
	/*    note: depends on Utf8 class                                                                 */
	/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
	var Base64 = {}; // Base64 namespace
	Base64.code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	/**
	 * Encode string into Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648]
	 * (instance method extending String object). As per RFC 4648, no newlines are added.
	 *
	 * @param {String} str The string to be encoded as base-64
	 * @param {Boolean} [utf8encode=false] Flag to indicate whether str is Unicode string to be encoded
	 *   to UTF8 before conversion to base64; otherwise string is assumed to be 8-bit characters
	 * @returns {String} Base64-encoded string
	 */
	Base64.encode = function(str, utf8encode) { // http://tools.ietf.org/html/rfc4648
			utf8encode = (typeof utf8encode == 'undefined') ? false : utf8encode;
			var o1, o2, o3, bits, h1, h2, h3, h4, e = [],
				pad = '',
				c, plain, coded;
			var b64 = Base64.code;
			plain = utf8encode ? Utf8.encode(str) : str;
			c = plain.length % 3; // pad string to length of multiple of 3
			if (c > 0) {
				while (c++ < 3) {
					pad += '=';
					plain += '\0';
				}
			}
			// note: doing padding here saves us doing special-case packing for trailing 1 or 2 chars
			for (c = 0; c < plain.length; c += 3) { // pack three octets into four hexets
				o1 = plain.charCodeAt(c);
				o2 = plain.charCodeAt(c + 1);
				o3 = plain.charCodeAt(c + 2);
				bits = o1 << 16 | o2 << 8 | o3;
				h1 = bits >> 18 & 0x3f;
				h2 = bits >> 12 & 0x3f;
				h3 = bits >> 6 & 0x3f;
				h4 = bits & 0x3f;
				// use hextets to index into code string
				e[c / 3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
			}
			coded = e.join(''); // join() is far faster than repeated string concatenation in IE
			// replace 'A's from padded nulls with '='s
			coded = coded.slice(0, coded.length - pad.length) + pad;
			return coded;
		}
		/**
		 * Decode string from Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648]
		 * (instance method extending String object). As per RFC 4648, newlines are not catered for.
		 *
		 * @param {String} str The string to be decoded from base-64
		 * @param {Boolean} [utf8decode=false] Flag to indicate whether str is Unicode string to be decoded
		 *   from UTF8 after conversion from base64
		 * @returns {String} decoded string
		 */
	Base64.decode = function(str, utf8decode) {
			utf8decode = (typeof utf8decode == 'undefined') ? false : utf8decode;
			var o1, o2, o3, h1, h2, h3, h4, bits, d = [],
				plain, coded;
			var b64 = Base64.code;
			coded = utf8decode ? Utf8.decode(str) : str;
			for (var c = 0; c < coded.length; c += 4) { // unpack four hexets into three octets
				h1 = b64.indexOf(coded.charAt(c));
				h2 = b64.indexOf(coded.charAt(c + 1));
				h3 = b64.indexOf(coded.charAt(c + 2));
				h4 = b64.indexOf(coded.charAt(c + 3));
				bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
				o1 = bits >>> 16 & 0xff;
				o2 = bits >>> 8 & 0xff;
				o3 = bits & 0xff;
				d[c / 4] = String.fromCharCode(o1, o2, o3);
				// check for padding
				if (h4 == 0x40) d[c / 4] = String.fromCharCode(o1, o2);
				if (h3 == 0x40) d[c / 4] = String.fromCharCode(o1);
			}
			plain = d.join(''); // join() is far faster than repeated string concatenation in IE
			return utf8decode ? Utf8.decode(plain) : plain;
		}
		/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
	window.itemIndex = function() {

		var sortedListStyle = function(){
			$.each($('.vc_sorted-list-container select'), function(index, val) {
				wrapSelect($(val));
			});
		}
		sortedListStyle();
		$('.vc_sorted-list-checkbox input').on('change', function(){
			setTimeout( sortedListStyle, 100 );
		});

		var $checkIfLoop = $('.wpb_el_type_loop .loop_field').length,
			$checkIfGallery = $('.uncode_gallery').length;
		if ($checkIfLoop == 0) {
			if ($checkIfGallery == 0) return;
		}
		if ($checkIfGallery == 0) {
			if ($checkIfLoop == 0) return;
		}
		/** fix el id field */
		var elId = $('input[name="el_id"]').val();
		if (elId == '') {
			elId = Math.floor(Math.random() * 90000) + 10000;
			if ($checkIfGallery == 1) $('input[name="el_id"]').val('gallery-' + elId);
			else $('input[name="el_id"]').val('index-' + elId);
		} else {
			if (elId.match(/^\d+$/)) {
				if ($checkIfGallery == 1) $('input[name="el_id"]').val('gallery-' + elId);
				else $('input[name="el_id"]').val('index-' + elId);
			}
		}
		/** fix sliders */

		/**
		 * Index specific
		 */
		if ($checkIfLoop == 1) {
			var $mainLoop = $('.wpb_el_type_loop .loop_field').val().split('|'),
				$typeFound = false;
			for (var $loop in $mainLoop) {
				if ($mainLoop[$loop].indexOf('post_type:') != -1) $typeFound = $mainLoop[$loop];
			}

			if ($typeFound) {
				var $typeFound = $typeFound.replace('post_type:', '');
				showHideSection($typeFound.split(','));
			} else showHideSection(new Array('post'));

			$('.vc_loop-build').bind('click', function() {
				setTimeout(function() {
					$.each($('.loop_params_holder select'), function(index, val) {
						if (!$(this).parent().hasClass('select-wrapper')) $(this).wrap('<div class="select-wrapper"></div>');
					});
				}, 2000);
			});
			var initPostElements = function(){
				$.each($('.vc_sorted-list-container select'), function(index, val) {
					wrapSelect($(val));
					$(val).bind('change', function(event) {
						var el = event.currentTarget;
						setTimeout(function() {
							fixSortableListCallback($(el).closest('.vc_sorted-list').find('input.text_length'));
							fixSortableListCallbackLink($(el).closest('.vc_sorted-list').find('input.read_more_text'));
						}, 500);
					});
				});

				$(document).on('change', '.vc_sorted-list-container select', function() {
					wrapSelect($(this));
					$(this).bind('change', function(event) {
						var el = event.currentTarget;
						setTimeout(function() {
							fixSortableListCallback($(el).closest('.vc_sorted-list').find('input.text_length'));
							fixSortableListCallbackLink($(el).closest('.vc_sorted-list').find('input.read_more_text'));
						}, 500);
					});
				});

				$(document).on('change input paste', '.vc_sorted-list-container input[type="text"]', function(event) {
					var el = event.currentTarget;
					setTimeout(function() {
						$(el).closest('.vc_sorted-list').find('select').trigger('change')
					}, 500);
				});

				$('#vc_edit-form-tab-1 .vc_sorted-list-checkbox input').bind('change', function() {
					setTimeout(function() {
						$.each($('.vc_sorted-list-container select'), function(index, val) {
							wrapSelect($(val));
						});
						$.each($('.vc_sorted-list-container .vc_control-text'), function(index, val) {
							fixSortableListEvents($(val));
						});
						$.each($('.vc_sorted-list-container .vc_control-link'), function(index, val) {
							fixSortableListEventsLink($(val));
						});
					}, 500);
				});
				$('#vc_edit-form-tab-1 .vc_sorted-list-container').on("sortupdate", function(event, ui) {
					setTimeout(function() {
						$.each($('.vc_control-text', event.currentTarget), function(index, val) {
							fixSortableListEvents($(val));
						});
						$.each($('.vc_control-link', event.currentTarget), function(index, val) {
							fixSortableListEventsLink($(val));
						});
					}, 500);
				});
				$.each($('#vc_edit-form-tab-1 .vc_control-text'), function(index, val) {
					fixSortableListEvents($(val));
				});
				$.each($('#vc_edit-form-tab-1 .vc_control-link'), function(index, val) {
					fixSortableListEventsLink($(val));
				});
			};

			$('li[data-tab-index="1"]').on('click', function(){
				setTimeout(initPostElements, 1000);
			});
			setTimeout(initPostElements, 2000);

			$('#uncode_items_container, #uncode_matrix_items_container').sortable({
				axis: "y"
			});

			$('#uncode_items_container, #uncode_matrix_items_container').on("sortupdate", function(event, ui) {

				var $newIds = new Array(),
					newBundle = {},
					$ulThis = $(this),
					$containerUl = $ulThis.parent(),
					$bundleInput = $containerUl.find('.uncode_bundle_items'),
					$tab_block = $ulThis.closest('.vc_edit-form-tab'),
					$retrieveBundle;

				if ($ulThis.is('#uncode_matrix_items_container')) {

					ui.item.add(ui.item.siblings()).each(function(){
						var $uiItem = $(this),
							newIndex = $uiItem.index(),
							oldIndex = $uiItem.attr('data-id');

						if ( $bundleInput.val() != '' ) {
							$retrieveBundle = JSON.parse(Base64.decode($bundleInput.val()));
							if ( oldIndex + '_i' in $retrieveBundle ) {
								var bundleIndexVal = $retrieveBundle[oldIndex + '_i'];
								newBundle[newIndex + '_i'] = bundleIndexVal;
							}
						}
						$uiItem.attr('data-id', newIndex).find('.matrix-item-no').html(newIndex+1);
					});
					$bundleInput.val(Base64.encode(JSON.stringify(newBundle)));

				} else {
					$.each($('li', $ulThis), function(index, val) {
						if ($(val).attr('data-id') !== undefined) $newIds.push($(val).attr('data-id'));
					});
					$tab_block.find('.order_ids').val($newIds.join());
				}

			});
			$(document).on('change', $('.loop_params_holder input[name="post_type"]'), function() {
				if ($('.loop_params_holder input[name="post_type"]').length) {
					var $types = $('.loop_params_holder input[name="post_type"]').val().split(',');
					showHideSection($types);
				}
			});
			/** update query when some changes are made **/
			$('li[data-tab-index="3"]').on('click', function(event) {
				$('select[name="post_matrix"]').trigger('change');
			});

			$('select[name="post_matrix"]').on('change', function(event){
				if ( $( ':selected', this ).val()=='' ) {
					load_item($('input.loop_field[name="loop"]').val());
				}
				if ( $( ':selected', this ).val()=='matrix' ) {
					load_item($('input.loop_field[name="loop"]').val(), $('#uncode_matrix_items_container'));
				}
			});

			$('.wpb_el_type_uncode_matrix_set_amount .matrix_amount').on('keyup', function(){
				$('.wpb_el_type_uncode_matrix_set_amount button').prop('disabled', false);
			});

			$('.wpb_el_type_uncode_matrix_set_amount button').on('click', function(){
				load_item($('input.loop_field[name="loop"]').val(), $('#uncode_matrix_items_container'));
				$(this).prop('disabled', true);
			});
		}
		/**
		 * Gallery specific
		 */
		if ($checkIfGallery == 1) {
			var $mainLoop = $('.uncode_gallery .uncode_gallery_attached_images_ids'),
				media = wp.media,
				Attachment = media.model.Attachment;

			var initGaleryEles = function(){
				$.each($('.vc_sorted-list-container select'), function(index, val) {
					wrapSelect($(val));
				});
			}
			$('li[data-tab-index="3"]').on('click', function(event) {
				load_media($mainLoop.val().split(','));
			});
			$('li[data-tab-index="2"]').on('click', function(event) {
				$('#uncode_items_container, #uncode_matrix_items_container').empty();
			});
			$('li[data-tab-index="1"]').on('click', initGaleryEles );
			setTimeout(initGaleryEles, 2000);
		}

		function fixSortableListEvents(el) {
			var $this = el,
				$list = $this.closest('.vc_sorted-list'),
				$listInput = $list.find('.sorted_list_field'),
				$inputVal = $listInput.val().split(','),
				$textLength = '',
				$textFound = false;
			for (var $index in $inputVal) {
				if ($inputVal[$index].indexOf('text|') != -1) {
					var $values = $inputVal[$index].split('|');
					for (var $i in $values) {
						if (/^\d+$/.test($values[$i])) {
							$textLength = $values[$i];
							$textFound = true;
						}
					}
				}
			}
			if ($list.find('input.text_length').length == 0) {
				if ($textFound) {
					$this.append('<div class="sorted-list-custom-text edit_form_line"><input type="text" class="wpb_vc_param_value text_length" name="text_length" value="' + $textLength + '" placeholder="Chars number…"></div>');
				} else {
					$this.append('<div class="sorted-list-custom-text edit_form_line"><input type="text" class="wpb_vc_param_value text_length" name="text_length" value="" placeholder="Chars number…"></div>');
				}
				$('input', $this).on('change input paste', function() {
					fixSortableListCallback(this);
				});
			} else {
				$.each($('input', $this), function(index, val) {
					fixSortableListCallback(val);
				});
			}
		}

		function fixSortableListCallback(el) {
			var $this = $(el),
				$list = $this.closest('.vc_sorted-list'),
				$listInput = $list.find('.sorted_list_field'),
				$textFound = false;
			if (/^\d+$/.test($this.val()))  {
				var $inputVal = $listInput.val().split(',');
				for (var $index in $inputVal) {
					if ($inputVal[$index].indexOf('text') != -1) {
						var $values = $inputVal[$index].split('|');
						for (var $i in $values) {
							if (/^\d+$/.test($values[$i])) {
								$inputVal[$index] = $inputVal[$index].replace($values[$i], $this.val());
								$textFound = true;
							}
						}
						if (!$textFound) $inputVal[$index] = $inputVal[$index] + '|' + $this.val();
						$inputVal[$index] = $inputVal[$index].replace(/\|$/, "");
					}
				}
				$listInput.val($inputVal.join(','));
			}
		}

		function fixSortableListEventsLink(el) {
			var $this = el,
				$list = $this.closest('.vc_sorted-list'),
				$listInput = $list.find('.sorted_list_field'),
				$inputVal = $listInput.val().split(','),
				$textLength = '',
				$textFound = false;
			for (var $index in $inputVal) {
				if ($inputVal[$index].indexOf('link|') != -1) {
					var $values = $inputVal[$index].split('|');
					if (typeof $values[3] != 'undefined') {
						$textLength = $values[3];
						$textFound = true;
					} else if (typeof $values[2] != 'undefined' && $values[2] != 'default_size' && $values[2] != 'small_size') {
						$textLength = $values[2];
						$textFound = true;
					}
				}
			}
			if ($list.find('input.read_more_text').length == 0) {
				if ($textFound) {
					$this.append('<div class="sorted-list-custom-link edit_form_line"><input type="text" class="wpb_vc_param_value read_more_text" name="read_more_text" value="' + $textLength + '" placeholder="' + SiteParameters.loc_strings.read_more + '"></div>');
				} else {
					$this.append('<div class="sorted-list-custom-link edit_form_line"><input type="text" class="wpb_vc_param_value read_more_text" name="read_more_text" value="" placeholder="' + SiteParameters.loc_strings.read_more + '"></div>');
				}
				$('input', $this).on('change input paste', function() {
					fixSortableListCallbackLink(this);
				});
			} else {
				$.each($('input', $this), function(index, val) {
					fixSortableListCallbackLink(val);
				});
			}
		}

		function fixSortableListCallbackLink(el) {
			var $this = $(el),
				$list = $this.closest('.vc_sorted-list'),
				$listInput = $list.find('.sorted_list_field'),
				$textFound = false;
			if ( typeof $listInput.val() !== 'undefined' && $this.val() != '')  {
				var $inputVal = $listInput.val().split(',');
				for (var $index in $inputVal) {
					if ($inputVal[$index].indexOf('ink') != -1) {
						var $values = $inputVal[$index].split('|');
						if (typeof $values[3] != 'undefined') {
							$inputVal[$index] = $inputVal[$index].replace($values[3], $this.val());
							$textFound = true;
						} else if (typeof $values[2] != 'undefined' && $values[2] != 'default_size' && $values[2] != 'small_size') {
							$inputVal[$index] = $inputVal[$index].replace($values[2], $this.val());
							$textFound = true;
						}
						if (!$textFound) $inputVal[$index] = $inputVal[$index] + '|' + $this.val();
						$inputVal[$index] = $inputVal[$index].replace(/\|$/, "");
					}
				}
				$listInput.val($inputVal.join(','));
			}
		}

		function wrapSelect($this) {
			if (!$this.parent().hasClass('select-wrapper')) $this.wrap('<div class="select-wrapper"></div>');
		}

		function showHideSection($types) {
			if ($types == '') $types = new Array('post');
			$.each($('#vc_edit-form-tab-1 .sorted_list_field'), function(index, val) {
				var $found = false;
				for (var $type in $types) {
					if ($(this).hasClass($types[$type] + '_items')) $found = true;
				}
				if (!$found) $(this).closest('.wpb_el_type_sorted_list').hide();
				else $(this).closest('.wpb_el_type_sorted_list').show();
			});
		}

		var dependent_elements,
			mapped_params,
			$container,
			$containerParent,
			$bundleInput,
			$templateSingle,
			$templateCatEl,
			$templatePostObj,
			$templateMedia,
			$allItems,
			$custom_order,
			$order_ids,
			$matrix_amount;

		function load_media($media) {
			$container = $('#uncode_items_container');
			$containerParent = $container.parent();
			$templateSingle = $('#vc_edit-form-tab-2').clone();
			$templateCatEl = $('#vc_edit-form-tab-1 .wpb_el_type_sorted_list');
			$templateMedia = $('<div />');
			$bundleInput = $containerParent.find('.uncode_bundle_items');
			$('.spinner', $containerParent).css('visibility', 'visible').show();

			var $retrieveBundle;
			mapped_params = {};
			dependent_elements = {};
			/** prepare sort lit templates **/
			$.each($templateCatEl, function(index, val) {
				var $type = $(this).find('.sorted_list_field').attr('name');
				$type = $type.split('_');
				switch (String($type[0])) {
					case ('media'):
						$templateMedia.append($(this).clone());
						break;
				}
			});
			/** reset sort list **/
			$('.vc_sorted-list-container', $templateMedia).html('');
			/** load sort list **/
			$.ajax({
				type: 'POST',
				url: window.ajaxurl,
				data: {
					action: 'uncode_get_medias',
					content: $media,
					templateSingle: $templateSingle.html(),
					templateMedia: $templateMedia.html(),
				},
				dataType: 'html',
			}).done(function(html) {
				init_single_item_list(html, $container);
			});
		}

		function load_item($query, $container) {
			if ( typeof $container === 'undefined' ) {
				$container = $('#uncode_items_container');
				$matrix_amount = false;
			} else {
				$matrix_amount = $container.closest('.vc_edit-form-tab').find('.matrix_amount').val();
			}
			$container.empty();
			$containerParent = $container.parent();
			$bundleInput = $containerParent.find('.uncode_bundle_items');
			$templateSingle = $('#vc_edit-form-tab-2').clone();
			$templateCatEl = $('#vc_edit-form-tab-1 .wpb_el_type_sorted_list');
			$templatePostObj = {};
			$allItems = (($('#pagination-yes')[0].checked || $('#infinite-yes')[0].checked) ? true : false);
			$custom_order = (($('#custom_order-yes')[0].checked) ? true : false);
			$order_ids = $container.closest('.vc_edit-form-tab').find('.order_ids').val();

			$($templateSingle).find('.vc-iconpicker, .vc-icons-selector').remove();
			$('.spinner', $containerParent).css('visibility', 'visible').show();
			$('button', $containerParent).attr('disabled');
			$('button', $containerParent).css('opacity', 0.5);
			/** prepare sort list templates **/
			$.each($templateCatEl, function(index, val) {
				var $type = $(this).find('.sorted_list_field').attr('name'),
				$templatePostType = $('<div />');
				$type = $type.split('_');
				var templateName = 'template' + $type[0].charAt(0).toUpperCase() + $type[0].slice(1);
				$templatePostObj[String(templateName)] = $templatePostType.append($(this).clone()).html();
				/** reset sort list **/
				$('.vc_sorted-list-container', $templatePostObj[String(templateName)]).html('');
			});
			$templatePostObj['action'] = 'uncode_get_query';
			$templatePostObj['content'] = $query;
			$templatePostObj['allItems'] = $allItems;
			$templatePostObj['templateSingle'] = $templateSingle.html();
			$templatePostObj['custom_order'] = $custom_order;
			$templatePostObj['order_ids'] = $order_ids;
			$templatePostObj['matrix_amount'] = $matrix_amount;
			$templatePostObj['postid'] = $bundleInput.attr('data-post');
			/** load sort list **/
			$.ajax({
				type: 'POST',
				url: SiteParameters.admin_ajax,
				data: $templatePostObj,
				dataType: 'html',
			}).done(function(html) {
				init_single_item_list(html, $container);
			});
		}

		function sorted_list_callback(list) {
			var value = _.map(list.find('[data-name]'), function(element) {
				var return_string = encodeURIComponent($(element).data('name'));
				$(element).find('select').each(function() {
					var $sub_control = $(this);
					if ($sub_control.is('select') && $sub_control.val() !== '') {
						return_string += '|' + encodeURIComponent($sub_control.val());
					}
				});
				return return_string;
			}).join(',');
			var getList = list.closest('.vc_sorted-list').find('.sorted_list_field');
			getList.val(value);
			getList.trigger('change');
		}

		function init_single_item_list(html, $container) {
			var $retrieveBundle;
			mapped_params = {};
			dependent_elements = {};
			if (html == '') $container.html('<span class="vc_btn vc_btn-danger">Empty query</span>');
			else $container.html(html);
			$containerParent = $container.parent();
			$bundleInput = $containerParent.find('.uncode_bundle_items');
			$('.spinner', $containerParent).css('visibility', 'hidden').hide();
			$('button', $containerParent).removeAttr('disabled');
			$('button', $containerParent).css('opacity', 1);
			if ($bundleInput.val() != '') {
				$retrieveBundle = JSON.parse(Base64.decode($bundleInput.val()));
				for (var $index in $retrieveBundle) {
					var $item = $('li[data-id="' + parseInt($index) + '"]', $container);
					if ($item.length != 0) {
						$item.addClass('modified');
						$('.option-tree-setting-reset', $item).unbind('*').on('click', function() {
							$("body").addClass('wait');
							var $resetItem = $(this).closest('li'),
								$delIndex = $resetItem.attr('data-id');
							delete $retrieveBundle[$delIndex + '_i'];
							$('.uncode_bundle_items', $containerParent).val(Base64.encode(JSON.stringify($retrieveBundle)));
							$resetItem.removeClass('modified');
							$("body").removeClass('wait');
						});
						for (var $prop in $retrieveBundle[$index]) {
							var $itemProp, $propClass;
							if ( $prop.indexOf('single_layout_') != -1 ) {
								$propClass = $prop.replace('single_layout_','');
								$itemProp = $item.find('.sorted_list_field.' + $propClass);
							} else {
								$itemProp = $item.find('[name="' + $prop + '"]');
							}
							if (!$itemProp.is('input[type="checkbox"]')) {
								if ($itemProp.hasClass('type_numeric_slider')) {
									var getSlider = $itemProp.closest('.ot-numeric-slider-wrap').find('.ot-numeric-slider');
									getSlider.attr('data-value', $retrieveBundle[$index][$prop]);
								} else {
									$itemProp.val($retrieveBundle[$index][$prop]);
								}
							}
							$itemProp.trigger('change');
							$('span.' + $prop + '_factor', $item).html($retrieveBundle[$index][$prop]);
						}
					}
				}
			} else $retrieveBundle = new Object();
			$('.vc_sorted-list').each(function(){
				var $data_container = $(this).closest('[data-container]');
				if ( $data_container.length )
					$(this).find('li').hide();
				$(this).VcSortedList();
				$( document ).trigger( 'vc.display.lists')
			});
			$('.vc_sorted-list-container').on('sortupdate', function() {
				sorted_list_callback($(this));
			});
			/** fix sliders */
			window.initAllSliders();
			/** fix custom link */
			$.each($('#uncode_items_container, #uncode_matrix_items_container').find('.wpb_el_type_vc_link'), function(index, val) {
				var $input = $('input', val),
					$val = $input.val(),
					value_object = $input.data('json'),
					$params_pairs = $val.split('|'),
					$url_label = $(val).find('.url-label'),
					$title_label = $(val).find('.title-label'),
					$result = Object();
				$.each($params_pairs, function(index, val) {
					var $param = val.split(':');
					if ($param[0] != '' && $param[1]) {
						$result[$param[0]] = unescape($param[1]);
					}
				});
				var json = String(JSON.stringify($result)).replace(/\//g, "\\/");
				$input.data('json', $result);
				$input.attr('data-json', json);
				$url_label.html($result.url + (($result.target != undefined) ? $result.target : ''));
				$title_label.html($result.title);
				vc.atts.vc_link.init('vc_link', $(val));
				$url_label.bind('DOMSubtreeModified', function() {
					$input.trigger('change');
				});
			});
			$.each($('.wpb_el_type_dropdown select'), function(index, val) {
				var $select = $(this),
					$container = $select.closest('.wpb_el_type_dropdown');
				$select.on('change', function() {
					var selected = $select.val();
					if (selected != '') {
						$('option', $select).removeAttr('selected');
						$('option[value=' + selected + ']', $select).attr('selected', 'selected');
					}
					if (selected == 'light' || selected == 'dark') {
						var $nextCont = $container.next(),
							$targetEl = $nextCont.find('.dropdown-colors-list li span');
						$.each($targetEl, function(index, val) {
							if ($(val).hasClass('style-light-bg') && selected == 'dark') {
								$(val).attr('class', String($(val).attr('class')).replace('style-light-bg', 'style-dark-bg'));
							}
							if ($(val).hasClass('style-dark-bg') && selected == 'light') {
								$(val).attr('class', String($(val).attr('class')).replace('style-dark-bg', 'style-light-bg'));
							}
						});
					}
				});
				if ($select.hasClass('single_width') || $select.hasClass('single_height')) {
					$select.closest('li').find($('span.' + $select.attr('name') + '_factor')).html($select.val());
				}
				if ($select.is('[class*="_color"]')) {
					var $prevCont = $container.prev(),
						$prevSelect = $prevCont.find('.wpb-select'),
						$dropdownContainer = $select.closest('.colors-dropdown');
					if (window.navigator.userAgent.indexOf("Windows NT 10.0") == -1) {
						$('.selected', $dropdownContainer).remove();
						$('.carat', $dropdownContainer).remove();
						$('> div', $dropdownContainer).remove();
						$select.unwrap('.old');
						$select.unwrap('.colors-dropdown');
						$select.removeAttr('id');
						$select.easyDropDown({
							cutOff: 10,
						});
					}
					if ($prevSelect.length && ($prevSelect.val() == 'light' || $prevSelect.val() == 'dark')) $prevSelect.trigger('change');
				}
			});
			$.each($('.vc_sorted-list-container select'), function(index, val) {
				if (!$(this).parent().hasClass('select-wrapper')) $(this).wrap('<div class="select-wrapper"></div>');
			});
			$.each($('#uncode_items_container, #uncode_matrix_items_container').find('.vc_control-media'), function(index, val) {
				refreshControlMedia(this, $retrieveBundle);
			});
			$.each($('#uncode_items_container, #uncode_matrix_items_container').find('.vc_control-text'), function(index, val) {
				refreshControlText(this, $retrieveBundle);
			});
			$.each($('#uncode_items_container, #uncode_matrix_items_container').find('.vc_control-link'), function(index, val) {
				refreshControlLink(this, $retrieveBundle);
			});
			$('input.text_length', $container).not('[bindset]').attr('bindset','true').on('change input paste', function(e){
				var $container = $(e.target).parents('ul.option-tree-setting-wrap').eq(0),
					dataContainer = $container.data('container'),
					$containerParent = $container.parent(),
					$bundleInput = $containerParent.find('.uncode_bundle_items'),
					$retrieveBundle = $bundleInput.val() != '' ? JSON.parse(Base64.decode($bundleInput.val())) : new Object(),

					data = {
						bundle: $retrieveBundle,
						bundleInput: $bundleInput,
						originOpt: dataContainer
					},
					buildObj = {target: e.target, data: data };
				buildBundle(buildObj);
			});
			$('input.read_more_text', $container).not('[bindset]').attr('bindset','true').on('change input paste', function(e){
				var $container = $(e.target).parents('ul.option-tree-setting-wrap').eq(0),
					dataContainer = $container.data('container'),
					$containerParent = $container.parent(),
					$bundleInput = $containerParent.find('.uncode_bundle_items'),
					$retrieveBundle = $bundleInput.val() != '' ? JSON.parse(Base64.decode($bundleInput.val())) : new Object(),

					data = {
						bundle: $retrieveBundle,
						bundleInput: $bundleInput,
						originOpt: dataContainer
					},
					buildObj = {target: e.target, data: data };
				buildBundle(buildObj);
			});
			$('input.type_numeric_slider', $container).not('[bindset]').attr('bindset','true').each(function(){
				var inputSlider = $(this),
					getSlider = inputSlider.closest('.ot-numeric-slider-wrap').find('.ot-numeric-slider');

				getSlider.on( "slidechange", function( e, ui ){
					var $container = $(e.target).parents('ul.option-tree-setting-wrap').eq(0),
						dataContainer = $container.data('container'),
						$containerParent = $container.parent(),
						$bundleInput = $containerParent.find('.uncode_bundle_items'),
						$retrieveBundle = $bundleInput.val() != '' ? JSON.parse(Base64.decode($bundleInput.val())) : new Object(),

						data = {
							bundle: $retrieveBundle,
							bundleInput: $bundleInput,
							originOpt: dataContainer
						},
						buildObj = {target: inputSlider, data: data };
					buildBundle(buildObj);
				});
			});
			$('input, select', $container).not('.type_numeric_slider').not('.text_length').not('.read_more_text').not('[bindset]').attr('bindset','true').on('change', function(e){
				var $container = $(e.target).parents('ul.option-tree-setting-wrap').eq(0),
					dataContainer = $container.data('container'),
					$containerParent = $container.parent(),
					$bundleInput = $containerParent.find('.uncode_bundle_items'),
					$retrieveBundle = $bundleInput.val() != '' ? JSON.parse(Base64.decode($bundleInput.val())) : new Object(),

					data = {
						bundle: $retrieveBundle,
						bundleInput: $bundleInput,
						originOpt: dataContainer
					},
					buildObj = {target: e.target, data: data };
				buildBundle(buildObj);
			});

			$.each($('#uncode_items_container, #uncode_matrix_items_container').find('input.checkbox'), function(index, val) {
				$(this).removeAttr('id');
				var name = $(this).attr('name'),
					itemId = $(this).closest('.list-list-item').attr('data-id');
				if ($retrieveBundle.hasOwnProperty(String(itemId) + '_i')) {
					if ($retrieveBundle[String(itemId) + '_i'][name] != undefined) {
						if ($retrieveBundle[String(itemId) + '_i'][name] == 'yes') $(this).attr("checked", true);
						else $(this).attr("checked", false);
					}
				}
				$(this).removeAttr('name');
				$(this).attr('name', name + '_' + String(itemId));
			});
			/** fix iconpicker  **/
			$('#uncode_items_container, #uncode_matrix_items_container').find('> li .option-tree-setting-edit').bind('click', function() {
				var $container = $(this).closest('li'),
					$containerUl = $(this).parents('ul').eq(0),
					$iconContainer = $container.find('.wpb_el_type_iconpicker');
				if ($iconContainer.length == 1) {
					$('.vc-iconpicker, .vc-icons-selector', $containerUl).remove();
					if (!$(this).hasClass('active')) {
						$("body").addClass('wait');
						setTimeout(function() {
							$('.vc-iconpicker-wrapper', $iconContainer).append($('#vc_edit-form-tab-2 .vc-iconpicker').clone());
							var $el = $iconContainer.find('.wpb_vc_param_value');
							var settings = $.extend({
								iconsPerPage: 100, // default icons per page for iconpicker
								iconDownClass: 'fa fa-arrow-down',
								iconUpClass: 'fa fa-arrow-up',
								iconLeftClass: 'fa fa-arrow-left',
								iconRightClass: 'fa fa-arrow-right',
								iconSearchClass: 'fa fa-search',
								iconCancelClass: 'fa fa-remove',
								iconBlockClass: 'fa fa-minus-circle'
							}, $el.data('settings'));
							$iconContainer.find('.vc-iconpicker').vcFontIconPicker(settings).on('change', function(e) {
								var $select = $(this);
								if (!$select.data('vc-no-check')) {
										$el.data('vc-no-check', true).val(this.value).trigger('change');
								}
								$select.data('vc-no-check', false);
							});
							var $select = $iconContainer.find('.vc-iconpicker');
							$select.val($el.val());
							$select.data('vc-no-check', true);
							$select.find('[value="' + $el.val() + '"]').attr('selected', 'selected');
							$select.data('vcFontIconPicker').loadIcons(); // this methods actualy reload "active icon" and triggers event change
							$("body").removeClass('wait');
						}, 100);
					}
				}
			});
			$.each($('#uncode_items_container, #uncode_matrix_items_container').find('> li'), function(index, val) {
				var $liContent = $(val),
					callDependencies = {};
				$.each(vc_user_mapper['uncode_index']['params'], function() {
					var param = this;
					if ($.isPlainObject(param) && $.isPlainObject(param.dependency) && $.type(param.dependency.element)) {
						mapped_params[param.param_name] = param;
						var $masters = $('[name=' + ((_.isBoolean(param.dependency.is_empty) || param.dependency.value == 'yes') ? param.dependency.element + '_' + $liContent.attr('data-id') : param.dependency.element) + '].wpb_vc_param_value', $liContent),
							$slave = $('[name= ' + ((param.type == 'checkbox') ? param.param_name + '_' + $liContent.attr('data-id') : param.param_name) + '].wpb_vc_param_value', $liContent);
						$.each($masters, function() {
							var $master = $(this),
								name = $master.attr('name'),
								rules = param.dependency;
							if (!_.isArray(dependent_elements[$master.attr('name')])) dependent_elements[$master.attr('name')] = [];
							dependent_elements[$master.attr('name')].push($slave);
							if (!$master.attr('dependentSetted')) {
								$master.data('dependentSet') && $master.attr('dependentSetted', 'true') && $master.attr('data-dependent-set', 'true') && $master.bind('keyup change', hookDependent);
							}
							if (!callDependencies[name]) {
								callDependencies[name] = $master;
							}
						});
					}
				});
				$.each(callDependencies, function() {
					hookDependent({
						currentTarget: $(this)
					});
				});
				callDependencies = null;
			});
		}

		function hookDependent(e) {
			var $master = $(e.currentTarget),
				$master_container = $master.closest('.vc_column'),
				$list_container = $master.closest('.list-list-item'),
				$list_id = $list_container.attr('data-id'),
				is_empty,
				dependent_elements_hook = _.isArray(dependent_elements) ? dependent_elements_hook : dependent_elements[$master.attr('name')],
				master_value = $master.is(':checkbox') ? _.map($master_container.find('[name=' + $(e.currentTarget).attr('name') + '].wpb_vc_param_value:checked'), function(element) {
					return $(element).val();
				}) : $master.val();
			is_empty = $master.is(':checkbox') ? !$master_container.find('[name=' + $master.attr('name') + '].wpb_vc_param_value:checked').length : !master_value.length;
			if ($master_container.hasClass('vc_dependent-hidden')) {
				_.each(dependent_elements, function($element) {
					$(this).closest('.vc_column').addClass('vc_dependent-hidden');
				});
			} else {

				_.each(dependent_elements_hook, function($element) {
					var $li_element = $element.closest('.list-list-item');
					if ($li_element.attr('data-id') == $list_id) {
						var param_name = $element.attr('name');
						if (/\d/.test(param_name)) {
							param_name = param_name.replace(/\d+/g, '');
							param_name = param_name.substring(0, param_name.length - 1)
						}
						var rules = _.isObject(mapped_params[param_name]) && _.isObject(mapped_params[param_name].dependency) ? mapped_params[param_name].dependency : {},
							$param_block = $element.closest('.vc_column');
						if (_.isBoolean(rules.not_empty) && rules.not_empty === true && !is_empty) { // Check is not empty show dependent Element.
							$param_block.removeClass('vc_dependent-hidden');
						} else if (_.isBoolean(rules.is_empty) && rules.is_empty === true && is_empty) {
							$param_block.removeClass('vc_dependent-hidden');
						} else if (rules.value && _.intersection((_.isArray(rules.value) ? rules.value : [rules.value]), (_.isArray(master_value) ? master_value : [master_value])).length) {
							$param_block.removeClass('vc_dependent-hidden');
						} else if (rules.value_not_equal_to && !_.intersection((_.isArray(rules.value_not_equal_to) ? rules.value_not_equal_to : [rules.value_not_equal_to]), (_.isArray(master_value) ? master_value : [master_value])).length) {
							$param_block.removeClass('vc_dependent-hidden');
						} else {
							$param_block.addClass('vc_dependent-hidden');
						}
						var event = jQuery.Event('change');
						event.extra_type = 'vcHookDepended';
					}
				}, this);
			}
		};

		function buildBundle(e) {
			var $this = $(e.target),
				$retrieveBundle = e.data.bundle,
				$bundleInput = e.data.bundleInput,
				originOpt = e.data.originOpt,
				post_items = $this.parents('.vc_shortcode-param').eq(0).attr('data-vc-shortcode-param-name'),
				$select = $('select[name="post_matrix"]'),
				selectedOpt;
			setTimeout(function() {
				var itemId = $this.closest('.list-list-item').attr('data-id'),
					itemVal = $this.val(),
					itemKey = $this.attr('name');

				if ($this.hasClass('sorted_list_field')) itemKey = 'single_layout_' + post_items;
				/** fix for checkbox **/
				if ($this.is("input") && itemKey.indexOf('_' + itemId) > 0) {
					itemKey = itemKey.replace('_' + itemId, '');
					if (!$this[0].checked) itemVal = 'no';
				}
				if (itemKey == undefined) {
					if ($this.closest('.vc_sorted-list').length) itemKey = 'vc_sorted_list_element';
				}
				/** fix for sorted list elements **/
				if (itemKey == 'vc_sorted_list_element') {
					$.each($('.vc_sorted-list-container select', $this.closest('.vc_sorted-list')), function(index, val) {
						if (!$(this).parent().hasClass('select-wrapper')) $(this).wrap('<div class="select-wrapper"></div>');
					});
					if (itemVal == 'media') {
						if ($this.is(':checked')) refreshControlMedia($this.closest('.vc_sorted-list').find('.vc_control-media'), $retrieveBundle);
					}
					if (itemVal == 'text') {
						if ($this.is(':checked')) refreshControlText($this.closest('.vc_sorted-list').find('.vc_control-text'), $retrieveBundle);
					}
					if (itemVal == 'link') {
						if ($this.is(':checked')) refreshControlLink($this.closest('.vc_sorted-list').find('.vc_control-link'), $retrieveBundle);
					}
					setTimeout(function() {
						var $listContainer = $this.closest('.vc_sorted-list').find('li[data-name=' + itemVal + ']');
						$.each($('input,select', $listContainer), function(index, val) {
							if (!$(val).attr('bindset')) {
								if ($(this).hasClass('text_length') || $(this).hasClass('read_more_text')) $(val).attr('bindset', 'true').bind('change input paste', {
									bundle: $retrieveBundle,
									bundleInput: $bundleInput,
								}, buildBundle);
								else $(val).attr('bindset', 'true').bind('change', {
									bundle: $retrieveBundle,
									bundleInput: $bundleInput
								}, buildBundle);
							}
						});
					}, 250);
				}
				/** change visual values **/
				if (itemKey == 'single_width' || itemKey == 'single_height') {
					$this.closest('li').find($('span.' + itemKey + '_factor')).html(itemVal);
				}

				/** change bundle values **/
				if ($retrieveBundle.hasOwnProperty(String(itemId) + '_i')) {
					if (itemKey == 'vc_sorted_list_element' || itemKey == undefined || itemKey == 'back_image') {
						var $listProp = $this.closest('.vc_sorted-list').find('.sorted_list_field').val();
						if (itemKey == 'back_image') $retrieveBundle[String(itemId) + '_i']['back_image'] = itemVal;
						itemKey = 'single_layout_' + post_items;
						if ($listProp != '') $retrieveBundle[String(itemId) + '_i'][itemKey] = $listProp;
						else delete $retrieveBundle[String(itemId) + '_i'][itemKey];
					} else $retrieveBundle[String(itemId) + '_i'][itemKey] = itemVal;
				} else {
					var obj = new Object();
					if (itemKey == 'vc_sorted_list_element' || itemKey == undefined || itemKey == 'back_image') {
						var $listProp = $this.closest('.vc_sorted-list').find('.sorted_list_field').val();
						if (itemKey == 'back_image') obj['back_image'] = itemVal;

						itemKey = 'single_layout_' + post_items;
						if ($listProp != '') obj[itemKey] = $this.closest('.vc_sorted-list').find('.sorted_list_field').val();
					} else obj[itemKey] = itemVal;
					$retrieveBundle[String(itemId) + '_i'] = obj;
				}

				selectedOpt = $('option:selected', $select).val();
				if ( selectedOpt === originOpt || !$select.length )
					$bundleInput.val(Base64.encode(JSON.stringify($retrieveBundle)));
			}, 250);
		};

		function refreshControlMedia(el, $retrieveBundle) {
			var $this = $(el),
				$list = $this.closest('.vc_sorted-list'),
				$listParentId = $this.closest('.list-list-item').attr('data-id'),
				$listInput = $list.find('.sorted_list_field'),
				$inputVal = $listInput.val().split(','),
				$mediaId = '',
				$mediaFound = false;
			for (var $index in $inputVal) {
				if ($inputVal[$index].indexOf('media|') != -1) $mediaFound = true;
			}
			try {
				$mediaId = $retrieveBundle[$listParentId + '_i']['back_image'];
			} catch (e) {}
			if ($mediaFound && $mediaFound != '') {
				var $div = '<div class="sorted-list-custom-media edit_form_line"><input type="hidden" class="wpb_vc_param_value uncode_gallery_attached_images_ids back_image media_element" name="back_image" value=""><div class="uncode_widget_attached_images"><ul class="uncode_widget_attached_images_list"></ul></div><div class="gallery_widget_site_images"></div><a class="add_media_widget button" href="#" use-single="true" title="Add media">Add media</a></div>';
				if ($mediaId != '' && $mediaId != undefined && $mediaFound) {
					$.ajax({
						type: 'POST',
						url: window.ajaxurl,
						data: {
							action: 'fieldAttachedMedia',
							mediaid: $mediaId
						},
						dataType: 'html',
					}).done(function(html) {
						$mediaId = html;
						$this.append('<div class="sorted-list-custom-media edit_form_line"><input type="hidden" class="wpb_vc_param_value uncode_gallery_attached_images_ids back_image media_element" name="back_image" value=""><div class="uncode_widget_attached_images"><ul class="uncode_widget_attached_images_list">' + $mediaId + '</ul></div><div class="gallery_widget_site_images"></div><a class="add_media_widget button" href="#" use-single="true" title="Add media">Add media</a></div>');
					});
				} else $this.append($div);
			} else $this.append($div);
		}

		function refreshControlText(el, $retrieveBundle) {
			var $this = $(el),
				$list = $this.closest('.vc_sorted-list'),
				$listParentId = $this.closest('.list-list-item').attr('data-id'),
				$listInput = $list.find('.sorted_list_field'),
				$inputVal = $listInput.val().split(','),
				$textLength = '',
				$textFound = false;
			for (var $index in $inputVal) {
				if ($inputVal[$index].indexOf('text|') != -1) $textFound = true;
			}
			try {
				$textLength = $retrieveBundle[$listParentId + '_i']['text_length'];
			} catch (e) {}
			if ($textFound && $textFound != '' && !$('.text_length', $this).length) {
				var $div = '<div class="sorted-list-custom-text edit_form_line"><input type="text" class="wpb_vc_param_value text_length" name="text_length" value="" placeholder="Chars number…"></div>';
				if ($textLength != '' && $textLength != undefined && $textFound) {
					$this.append('<div class="sorted-list-custom-text edit_form_line"><input type="text" class="wpb_vc_param_value text_length" name="text_length" value="' + $textLength + '" placeholder="Chars number…"></div>');
				} else $this.append($div);
			} else $this.append($div);
		}

		function refreshControlLink(el, $retrieveBundle) {
			var $this = $(el),
				$list = $this.closest('.vc_sorted-list'),
				$listParentId = $this.closest('.list-list-item').attr('data-id'),
				$listInput = $list.find('.sorted_list_field'),
				$inputVal = $listInput.val().split(','),
				$textLength = '',
				$textFound = false;
			for (var $index in $inputVal) {
				if ($inputVal[$index].indexOf('link|') != -1) {
					$textFound = true;
				}
			}
			try {
				$textLength = $retrieveBundle[$listParentId + '_i']['read_more_text'];
			} catch (e) {}
			if ($textFound && $textFound != '' && !$('.read_more_text', $this).length) {
				var $div = '<div class="sorted-list-custom-link edit_form_line"><input type="text" class="wpb_vc_param_value read_more_text" name="read_more_text" value="" placeholder="' + SiteParameters.loc_strings.read_more + '"></div>';
				if ($textLength != '' && $textLength != undefined && $textFound) {
					$this.append('<div class="sorted-list-custom-link edit_form_line"><input type="text" class="wpb_vc_param_value read_more_text" name="read_more_text" value="' + $textLength + '" placeholder="' + SiteParameters.loc_strings.read_more + '"></div>');
				} else $this.append($div);
			} else $this.append($div);
		}
	}
}(window.jQuery);