403Webshell
Server IP : 46.105.57.169  /  Your IP : 216.73.216.67
Web Server : Apache
System : Linux webm002.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User : verseaumee ( 152031)
PHP Version : 8.5.7
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/verseaumee/blueversion/wp-content/plugins/unlimited-elements-for-elementor/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/verseaumee/blueversion/wp-content/plugins/unlimited-elements-for-elementor/js/settings.js

"use strict";



function UniteSettingsUC(){

	

	var g_arrControls = {};

	var g_arrChildrenControls = {};

	

	var g_IDPrefix = "#unite_setting_";

	var g_colorPicker, g_colorPickerWrapper, g_iconsHash={};

	var g_objParent = null, g_objWrapper = null, g_objSapTabs = null;

	var g_objProvider = new UniteProviderAdminUC();

	

	

	var g_vars = {

		NOT_UPDATE_OPTION: "unite_settings_no_update_value",

		keyupTrashold: 500

	};

	

	var g_temp = {

		settingsID:null,

		handle: null,

		enableTriggerChange: true,

		cacheValues: null,

		objItemsManager: null,

		objFontsPanel:null,

		isSidebar: false,

		isInited: false,

		customSettingsKey: "custom_setting_type",

		colorPickerType: null,

		isRepeaterExists: false

	};

	

	this.events = {

			CHANGE: "settings_change",

			INSTANT_CHANGE: "settings_instant_change",

			AFTER_INIT: "after_init",

			OPEN_CHILD_PANEL: "open_child_panel"

	};

	

	var g_options = {

			show_saps:false,

			saps_type:""

	};

	

	if(!g_ucAdmin)

		var g_ucAdmin = new UniteAdminUC();

	

	var t=this;

	

	

	/**

	 * validate that the parent exists

	 */

	function validateInited(){

		

		if(!g_objParent || g_objParent.length == 0)

			throw new Error("The parent not given, settings not inited");

		

	}

	

	

	/**

	 * compare control values

	 */

	function iscValEQ(controlValue, value){

		

		if(typeof value != "string"){

			

			return jQuery.inArray( controlValue, value) != -1;

		}else{

			return (value.toLowerCase() == controlValue);

		}



	}

	

	

	/**

	 * get input by name and filter by type. 

	 * if not found or filtered, return null

	 */

	this.getInputByName = function(name, type){

		

		var inputID = g_IDPrefix+name;

		var objInput = jQuery(inputID);

		if(objInput.length == 0)

			return(null);

		

		if(!type)

			return(objInput);

		

		var inputType = objInput[0].type;

		if(type != inputType)

			return(null);

		

		return(objInput);

	};

	

	

	/**

	 * close all accordion items

	 */

	function closeAllAccordionItems(formID){

		jQuery("#"+formID+" .unite-postbox .inside").slideUp("fast");

		jQuery("#"+formID+" .unite-postbox .unite-postbox-title").addClass("box_closed");

	}

	

	

	this.__________OTHER_EXTERNAL__________ = function(){};

		

	

	/**

	 * init tipsy

	 */

	function initTipsy(gravity){

		

		if(!g_objWrapper)

			return(false);

		

		if(typeof jQuery("body").tipsy != "function")

			return(false);

				

		if(!gravity)

			gravity = "s";

		

		var tipsyOptions = {

				html:true,

				gravity:"s",

		        delayIn: 1000,

		        selector: ".uc-tip"

		};

		

		g_objWrapper.tipsy(tipsyOptions);

		

	}

	

	

	/**

	 * get all settings inputs

	 */

	function getObjInputs(controlsOnly){

		

		validateInited();

		

		//include

		var selectors = "input, textarea, select, .unite-setting-inline-editor, .unite-setting-input-object";

		var selectorNot = "input[type='button'], input[type='range'], select.select2-hidden-accessible";

		

		if(controlsOnly === true){

			selectors = "input[type='radio'], select, input.unite-setting-addonpicker";

		}else{

			

			//items

			

			if(g_temp.objItemsManager){

				selectors += ", .uc-setting-items-panel";

				selectorNot += ", .uc-setting-items-panel select, .uc-setting-items-panel input, .uc-setting-items-panel textarea";

			}

			

			//fonts

			if(g_temp.objFontsPanel){

				selectors += ", .uc-setting-fonts-panel";

				selectorNot += ", .uc-setting-fonts-panel select, .uc-setting-fonts-panel input, .uc-setting-fonts-panel textarea";

			}

			

			if(g_temp.isRepeaterExists == true)

				selectorNot += ", .unite-settings-repeater *";

			

		}

		

		var objInputs = g_objParent.find(selectors).not(selectorNot);

		

		

		return(objInputs);

	}

	

	

	/**

	 * get input name

	 */

	function getInputName(objInput){

		var name = objInput.attr("name");

		if(!name)

			name = objInput.data("name");

		

		return(name);

	}

	

	

	/**

	 * get input basic type

	 */

	function getInputBasicType(objInput){

		

		if(!objInput){

			console.trace();

			throw new Error("empty input, can't get basic type");

		}

		

		var type = objInput[0].type;

		if(!type)

			type = objInput.prop("tagName").toLowerCase();

		

		switch(type){

			case "select-one":

			case "select-multiple":

				type = "select";

			break;

		}

		

		return(type);

	}

	

	

	/**

	 * get input type

	 */

	function getInputType(objInput){

		

		if(!objInput){

			console.trace();

			throw new Error("empty input, can't get type");

		}

		

		if(objInput.hasClass("select2-hidden-accessible"))

			return(null);

		

		if(!objInput || objInput.length == 0){

			console.trace();

			throw new Error("getInputType - objInput is empty");

		}

			

		if(!objInput[0]){

			trace("wrong input object");

			console.trace();

		}

		

		var type = objInput[0].type;

		if(!type)

			type = objInput.prop("tagName").toLowerCase();

		

		var customType = objInput.data("settingtype");

		

		switch(type){

			case "select-multiple":

				type = "multiselect";

				if(customType)

					type = customType;

				

			break;

			case "select-one":

				type = "select";

				if(customType)

					type = customType;

			break;

			case "number":

				type = "text";

				

				if(objInput.hasClass("unite-setting-range"))

					type="range";

				

			break;

			case "text":

								

				if(objInput.hasClass("unite-color-picker"))

					type = "color";

				else if(objInput.hasClass("unite-setting-image-input"))

					type = "image";

				else if(objInput.hasClass("unite-setting-mp3-input"))

					type = "mp3";

				else if(objInput.hasClass("unite-postpicker-input"))

					type="post";

				else if(objInput.hasClass("unite-iconpicker-input"))

					type="icon";

				else if(objInput.hasClass("unite-setting-range"))

					type="range";

				else if(objInput.hasClass("unite-setting-addonpicker"))

					type="addon";

				

			break;

			case "textarea":

				if(objInput.hasClass("mce_editable") || objInput.hasClass("wp-editor-area"))

					type = "editor_tinymce";

			break;

			case "div":

				

				type = customType;

				

				if(!type){

					

					if(objInput.hasClass("uc-setting-items-panel"))

						type = "items";

					else

					if(objInput.hasClass("uc-setting-fonts-panel"))

						type = "fonts";

					else

					if(objInput.hasClass("unite-setting-inline-editor"))

						type = "editor_tinymce";

				}

				

			break;

		}

		

		

		return(type);

	}

	

	

	/**

	 * get input value

	 */

	function getSettingInputValue(objInput){

		

		var name = getInputName(objInput);

		var type = getInputType(objInput);

		var value = objInput.val();

		var inputID = objInput.prop("id");

		

		if(!name)

			return(g_vars.NOT_UPDATE_OPTION);

		

		var flagUpdate = true;

		

		switch(type){

			case "hidden":		//allow to pass objects

				var hiddenValue = objInput.data("input_value");

				if(hiddenValue)

					value = hiddenValue;

			break;

			case "select":

				var selectedText = objInput.children("option:selected").html();

			break;

			case "checkbox":

				value = objInput.is(":checked");

			break;

			case "radio":

				if(objInput.is(":checked") == false) 

					flagUpdate = false;

			break;

			case "button":

				flagUpdate = false;

			break;

			case "editor_tinymce":

				

				if(typeof tinyMCE != "undefined"){

					

					var objEditor = tinyMCE.EditorManager.get(inputID);

					if(objEditor)						

						value = objEditor.getContent();

				}

				

			break;

			case "image":

				var imageID = objInput.data("imageid");

				if(imageID && jQuery.isNumeric(imageID))

					value = imageID;

			case "mp3":

				var source = objInput.data("source");

				

				//convert to relative url if not addon

				if(source != "addon" && jQuery.isNumeric(value) == false)

					value = g_ucAdmin.urlToRelative(value);

			break;				

			case "post":

				value = getPostPickerValue(objInput);

			break;

			case "items":

				value = g_temp.objItemsManager.getItemsData();

			break;

			case "fonts":

				value = t.getFontsPanelData();

			break;

			case "map":

				value = objInput.data("mapdata");

			break;

			case "repeater":

				value = getRepeaterValues(objInput);

			break;

			case "multiselect":

				value = multiSelectModifyAfterGet(value);

			break;

			case "dimentions":

				value = dimentionsGetValues(objInput);

			break;

			default:

				//custom settings

				var objCustomType = getCustomSettingType(type);

				if(objCustomType){

					if(objCustomType.funcGetValue)

						value = objCustomType.funcGetValue(objInput, t);

					else

						value = "";

				}

			break;

		}

		

		

		if(flagUpdate == false)

			return(g_vars.NOT_UPDATE_OPTION);

		

		

		return(value);

	}

	

	

	/**

	 * get settings values object by the parent

	 */

	this.getSettingsValues = function(controlsOnly, isChangedOnly){

		

		validateInited();

		

		var obj = new Object();

		

		var name,value,type,flagUpdate,inputID;

		

		if(controlsOnly == true)

			var objInputs = getObjInputs(controlsOnly);

		else{

			var objInputs = getObjInputs().not(".unite-setting-transparent");

		}

		

		jQuery.each(objInputs, function(index, input){

			

			var objInput = jQuery(input);

			

			name = getInputName(objInput);

			type = getInputType(objInput);

			value = getSettingInputValue(objInput);

						

			if(value == g_vars.NOT_UPDATE_OPTION)

				return(true);

			

			//remain only changed values from default values

			if(isChangedOnly === true){

				var defaultValue = getInputDefaultValue(objInput);

								

				if(defaultValue === value)

					return(true);

			}

			

			

			inputID = objInput.prop("id");

			

			//set additional vars

			

			switch(type){

				case "select":

					var selectedText = objInput.children("option:selected").html();

					obj[name+"_unite_selected_text"] = selectedText;

				break;

				case "checkbox":

					value = objInput.is(":checked");

				break;

				case "image":

					

					if(value && jQuery.isNumeric(value)){

						obj[name+"_url"] = objInput.data("url");

					}

				break;

			}

			

			

			obj[name] = value;

			

		});

		

		//trace("settings values");

		//trace(obj);

		

		return(obj);

	};

	

	

	/**

	 * get default value

	 */

	function getInputDefaultValue(objInput){

		

		var type = getInputType(objInput);

		var name = getInputName(objInput);

		

		var dataname = "default";

		var checkboxDataName = "defaultchecked";

		

		var defaultValue;

		

		switch(type){

			default:

				if(!name)

					return(false);

				

				defaultValue = objInput.data(dataname);

												

				if(typeof defaultValue == "object")

					defaultValue = JSON.stringify(defaultValue);

								

				if(type == "select"){

					if(defaultValue === true)

						defaultValue = "true";

					if(defaultValue === false)

						defaultValue = "false";

				}

				

			break;					

			case "radio":

			case "checkbox":

				defaultValue = objInput.data(checkboxDataName);

				defaultValue = g_ucAdmin.strToBool(defaultValue);				

			break;

		}

		

		if(jQuery.isNumeric(defaultValue))

			defaultValue = defaultValue.toString();

		

		return(defaultValue);

	}

	

	

	/**

	 * clear input

	 */

	function clearInput(objInput, dataname, checkboxDataName){

		

		var name = getInputName(objInput);

				

		var type = getInputType(objInput);

		var inputID = objInput.prop("id");

		var defaultValue;

		

		if(!dataname)

			var dataname = "default";

		

		if(!checkboxDataName)

			var checkboxDataName = "defaultchecked";

		

		

		switch(type){

			case "select":

			case "textarea":

			case "range":

			case "text":

			case "password":

				

				if(!name)

					return(false);

				

				defaultValue = objInput.data(dataname);

												

				if(typeof defaultValue == "object")

					defaultValue = JSON.stringify(defaultValue);

								

				if(type == "select"){

					if(defaultValue === true)

						defaultValue = "true";

					if(defaultValue === false)

						defaultValue = "false";

				}

				

				objInput.val(defaultValue);

				

			break;					

			case "hidden":

				defaultValue = objInput.data(dataname);

				objInput.val(defaultValue);

			break;

			case "icon":

				defaultValue = objInput.data(dataname);

				objInput.val(defaultValue);

				objInput.trigger("blur");

			break;

			case "color":

				

				defaultValue = objInput.data(dataname);

				objInput.val(defaultValue);

				

				if(g_colorPicker)

					g_colorPicker.linkTo(objInput);	

				

				objInput.trigger("change");

				

				//clear manually

				if(defaultValue == "")

					objInput.attr("style","");

				

			break;

			case "checkbox":

				defaultValue = objInput.data(checkboxDataName);

				defaultValue = g_ucAdmin.strToBool(defaultValue);

				

				if(defaultValue == true)

					objInput.attr("checked", true);

				else

					objInput.attr("checked", false);

			break;

			case "radio":

				

				defaultValue = objInput.data(checkboxDataName);

				

				defaultValue = g_ucAdmin.strToBool(defaultValue);

								

				if(defaultValue == true){

					objInput.prop("checked", true);

					

					//maybe change to attr

					

				}

				

			break;

			case "editor_tinymce":

				

				var objEditorWrapper = objInput.parents(".unite-editor-setting-wrapper");

				defaultValue = objEditorWrapper.data(dataname);

					

				if(typeof tinyMCE == "undefined")	//skip the init, if no editor yet

					break;

				

				var objEditor = tinyMCE.EditorManager.get(inputID);

				

				if(objEditor){

					objEditor.setContent(defaultValue);

				}else{

					objInput.val(defaultValue);

				}

				

			break;

			case "addon":

			case "image":

			case "mp3":

				defaultValue = objInput.data(dataname);

				objInput.val(defaultValue);

				objInput.trigger("change");

			break;

			case "post":

				defaultValue = objInput.data(dataname);

				

				setPostPickerValue(objInput, defaultValue);

				

			break;

			case "items":

				if(dataname != "initval")

					g_temp.objItemsManager.clearItemsPanel();

			break;

			case "fonts":

				//don't clear here

			break;

			case "map":

				//don't clear map

			break;

			case "repeater":

				setRepeaterValues(objInput, null, true);

			break;

			case "col_layout":

				//don't clear col layout

			break;

			case "multiselect":

								

				defaultValue = objInput.data(dataname);

				defaultValue = multiSelectModifyForSet(defaultValue);

				objInput.val(defaultValue);

			break;

			case "dimentions":

				//no clear for now

			break;

			default:

				

				var objCustomType = getCustomSettingType(type);

				

				if(objCustomType){

					if(objCustomType.funcClearValue)

						objCustomType.funcClearValue(objInput);

				}

				else{

					

					var success = g_ucAdmin.clearProviderSetting(type, objInput, dataname);

					if(success == false){

						trace("for clear - wrong type: " + type);

						trace(objInput);

					}

					

				}

			break;

		}

		

		objInput.removeData("unite_setting_oldvalue");

		

	}



	

	/**

	 * set input value

	 */

	function setInputValue(objInput, value, value2){

				

		var type = getInputType(objInput);

		var inputID = objInput.prop("id");

		var name = objInput.prop("name");

		

		switch(type){

			case "select":

			case "textarea":

			case "text":

			case "password":

								

				objInput.val(value);

			case "hidden":

				if(typeof value == "object"){

					objInput.data("input_value", value);

				}

				else{

					objInput.val(value);

					objInput.data("input_value", null);

				}

			break;

			case "addon":

				

				objInput.val(value);

				objInput.trigger("change");				

			break;

			case "range":

				

				value = parseFloat(value);

				

				objInput.val(value);

				objInput.trigger("input");

			break;

			case "icon":

				objInput.val(value);

				objInput.trigger("blur");

			break;

			case "color":

				objInput.val(value);

				

				if(g_colorPicker)

					g_colorPicker.linkTo(objInput);

				

				objInput.trigger("change");

			break;

			case "checkbox":

				value = g_ucAdmin.strToBool(value);

				

				if(value == true){

					objInput.attr("checked", "checked");

					objInput.prop("checked", "checked");

				}

				else{

					objInput.prop("checked", false);

					objInput.removeAttr("checked");

				}

				

			break;

			case "radio":

				

				var radioValue = objInput.val();		//set by radio text

								

				if(radioValue === "true" || radioValue === "false"){

					radioValue = g_ucAdmin.strToBool(radioValue);

					value = g_ucAdmin.strToBool(value);

				}

				

				if(radioValue === value){

					objInput.prop("checked", true);

				}else{

					

					objInput.removeAttr("checked");

					objInput.attr("checked", false);

				}

				

			break;

			case "editor_tinymce":

				

				if(typeof tinyMCE == "undefined"){	//set textarea content

					

					objInput.val(value);

					

				}else{

					var objEditor = tinyMCE.EditorManager.get(inputID);

					if(objEditor){

						objEditor.setContent(value);

					}else{

						objInput.val(value);

					}

				}

				

			break;

			case "image":

				if(value2){

					objInput.data("imageid",value2);	//set image id

				}

				objInput.data("url", value);

				

				

				

			case "mp3":

				objInput.val(value);

				objInput.trigger("change");

			break;

			case "post":

				

				setPostPickerValue(objInput, value);

				

			break;

			case "items":

				g_temp.objItemsManager.setItemsFromData(value);

			break;

			case "map":

				//set map value

			break;

			case "fonts":

				setFontPanelData(objInput, value);

			break;

			case "multiselect":

				value = multiSelectModifyForSet(value);

				objInput.val(value);

			break;

			default:

				

				var objCustomType = getCustomSettingType(type);

				if(objCustomType)

					if(objCustomType.funcSetValue)

						objCustomType.funcSetValue(objInput, value);

				else{

					

					//check for provider

					var success =  g_ucAdmin.providerSettingSetValue(type, objInput, value);

					

					//trace error

					if(success == false){

						trace("for setvalue - wrong type: " + type);

					}

					

				}	

				

			break;

		}

		

		

	}

	

	

	/**

	 * clear settings

	 */

	this.clearSettings = function(dataname, checkboxDataName){

				

		validateInited();

		

		var objInputs = getObjInputs();

				

		jQuery.each(objInputs, function(index, input){

			

			var objInput = jQuery(input);

			clearInput(objInput, dataname, checkboxDataName);

		});

	};

	

	

	/**

	 * get field names by type

	 */

	this.getFieldNamesByType = function(type){

		

		validateInited();

		

		var objInputs = getObjInputs();

		var arrFieldsNames = [];

		

		jQuery.each(objInputs, function(index, input){

			var objInput = jQuery(input);

			var name = getInputName(objInput);

			

			var inputType = getInputType(objInput);

			if(inputType == type)

				arrFieldsNames.push(name);

		});

		

		return(arrFieldsNames);

	};



	

	/**

	 * clear settings

	 */

	this.clearSettingsInit = function(){

		

		validateInited();

		

		t.clearSettings("initval","initchecked");

		

	};

	

	

	/**

	 * set single setting value

	 */

	this.setSingleSettingValue = function(name, value){

				

		var objInput = t.getInputByName(name);

		

		if(!objInput || objInput.length == 0)

			return(false);

		

		g_temp.enableTriggerChange = false;

		

		setInputValue(objInput, value);

		

		g_temp.enableTriggerChange = true;

		

	};

	

	

	/**

	 * set values, clear first

	 */

	this.setValues = function(objValues, noClear){

				

		validateInited();

		

		if(noClear !== true)

			this.clearSettings();

		

		

		//if empty values - exit

		if(typeof objValues != "object"){

			return(false);

		}

								

		g_temp.enableTriggerChange = false;

		

		var objInputs = getObjInputs();

		

		//trace(objValues); trace(objInputs);

				

		jQuery.each(objInputs, function(index, input){

			var objInput = jQuery(input);

						

			var name = getInputName(objInput);

			

			if(!name || typeof name == "undefined")

				return(true);

										

			var type = getInputType(objInput);

			

			if(type != "radio")

				clearInput(objInput);

			

			if(objValues.hasOwnProperty(name)){

				var value = objValues[name];

				var value2 = null;

				

				switch(type){

					case "image":

						

						if(jQuery.isNumeric(value)){

							

							var url = g_ucAdmin.getVal(objValues, name+"_url");

							if(url){

								value2 = value;

								value = url;

							}

							

						}else{

							var imageID = g_ucAdmin.getVal(objValues, name+"_imageid");

							if(imageID)

								value2 = imageID;

						}

					break;

				}

				

				setInputValue(objInput, value, value2);

			}

			

		});

		

		applyControls();

		

		g_temp.enableTriggerChange = true;

		

	};



	function _________CUSTOM_SETTING_TYPES__________(){}

	

	

	/**

	 * get custom setting type, if empty setting name - returrn all types

	 */

	function getCustomSettingType(settingName){

		

		var objCustomSettings = g_ucAdmin.getGlobalData(g_temp.customSettingsKey);

		if(!objCustomSettings)

			objCustomSettings = {};

		

		if(!settingName)

			return(objCustomSettings);

		

		var objType = g_ucAdmin.getVal(objCustomSettings, settingName, null);

		

		return(objType);

	}

	

	function _______RANGE_SLIDER_____(){}

	

	

	/**

	 * get range input from input that can be range or text

	 */

	function getRangeInput(objInput){

		

		var objRangeWrapper = objInput.parents(".unite-setting-range-wrapper");

		if(objRangeWrapper.length == 0)

			throw new Error("range input not found");

		

		var inputText = objRangeWrapper.find("input.unite-setting-range");

		return(inputText);

	}

	

	

	/**

	 * init range slider

	 * input can be input text or range

	 */

	function initRangeInput(objInput, funcChange){

				

		var objRangeWrapper = objInput.parents(".unite-setting-range-wrapper");

		if(objRangeWrapper.length == 0)

			return(false);

		

		var isInited = objRangeWrapper.data("inited");

		if(isInited === true)

			return(false);

						

		var inputRange = objRangeWrapper.find("input[type='range']");

		var inputText = objRangeWrapper.find("input.unite-setting-range");

		if(inputText.length == 0)

			throw new Error("range text field not found");

		

		

		//on range change

		inputRange.on("input", function(event){

			var value = jQuery(this).val();

			inputText.val(value);

			

			//trigger instant event

			funcChange(null, inputText, true);

			

		});

		

		//on text change

		inputText.on("input", function(){

			var value = jQuery(this).val();

			

			if(value === "")

				value = jQuery(this).prop("placeholder");

						

			inputRange.val(value);

		});

		

		inputText.on("placeholder_change",function(){

			

			inputText.trigger("input");

		});

		

		objRangeWrapper.data("inited", true);

	}

	

	

	function _______MULTI_SELECT_____(){}



	

	/**

	 * modify value for save, turrn to array

	 */

	function multiSelectModifyForSet(value){

		

		if(typeof value != "string")

			return(value);

		

		value = value.split(",");

		

		return(value);

	}

	

	

	/**

	 * modify value after get

	 */

	function multiSelectModifyAfterGet(value){

		

		if(jQuery.isArray(value) == false)

			return(false);

		

		value = value.join(",");

		

		return(value);

	}

	

	

	function _______COLOR_PICKER_____(){}

	

	

	/**

	 * init farbtastic color picker input events

	 */

	function initColorPickerInputEvents_farbtastic(objInput){

		

		if(!g_colorPickerWrapper){

			initColorPicker();

		}

		

		var input = objInput[0];

		g_colorPicker.linkTo(input);

		

		objInput.focus(function(){

			

			g_colorPicker.linkTo(this);

			

			var bodyWidth = jQuery("body").width();

			

			g_colorPickerWrapper.show();

			var input = jQuery(this);

			var offset = input.offset();

			

			var wrapperWidth = g_colorPickerWrapper.width();

			var inputWidth = input.width();

			var inputHeight = input.height();

			

			var posLeft = offset.left - wrapperWidth / 2 + inputWidth/2;

			

			var posRight = posLeft + wrapperWidth;

			if(posRight > bodyWidth)

				posLeft = bodyWidth - wrapperWidth;

			

			if(posLeft < 0)

				posLeft = 0;

			

			var posTop = offset.top - g_colorPickerWrapper.height() - inputHeight + 10;

			if(posTop < 0)

				posTop = 0;

			

			g_colorPickerWrapper.css({

				"left":posLeft,

				"top":posTop

			});



		}).on("click",function(){			

			return(false);	//prevent body click

		});

		

	}

	

	

	/**

	 * init color picker input

	 */

	function initColorPickerInputEvents(objInput, funcChange){

		

		switch(g_temp.colorPickerType){

			case "farbtastic":

				initColorPickerInputEvents_farbtastic(objInput, funcChange);

			break;

			case "spectrum":

				objInput.spectrum({

					move:function(){

						

						g_ucAdmin.runWithTrashold(function(){

														

							if(funcChange && typeof funcChange == "function"){

								funcChange(null, objInput, false);

							}

							else

								t.onSettingChange(null, objInput, false);

							

							

						});

						

					}

				});

			break;

		}

				

				

	}

	

	

	/**

	 * check onchange on color input

	 */

	function checkColorInputOnchange(objInput){

		

		if(objInput.val() == "")

			objInput.css("background-color","");

		

	}

	

	

	/**

	 * init farbtastic color picker

	 */

	function initColorPicker_farbtastic(){

		

		g_colorPickerWrapper = jQuery('#divColorPicker');

		if(g_colorPickerWrapper.length == 0){

			jQuery("body").append('<div id="divColorPicker" style="display:none;"></div>');

			g_colorPickerWrapper = jQuery('#divColorPicker');

		}

		

		//init the wrapper itself

		var isInited = g_colorPickerWrapper.data("inited");

		

		if(isInited !== true){

						

			g_colorPickerWrapper.on("click",function(){

				

				return(false);	//prevent body click

			});

			

			jQuery("body").on("click",function(){

				g_colorPickerWrapper.hide();

			});

			

			g_colorPickerWrapper.data("inited", true);

			

		}

		

		if(!g_colorPicker)

		g_colorPicker = jQuery.unite_farbtastic('#divColorPicker', null, function(input, value){

			var objInput = jQuery(input);

			

			objInput.trigger("keyup");

		});

		

	}

	

	

	/**

	 * init color picker

	 */

	function initColorPicker(){

		

		g_temp.colorPickerType = g_ucAdmin.getGeneralSetting("color_picker_type");

		

		switch(g_temp.colorPickerType){

			case "farbtastic":

				initColorPicker_farbtastic();

			break;

			case "spectrum":

			break;

			default:

				throw new Error("Wrong color picker type: " + g_temp.colorPickerType);

			break;

		}

		

		

				

		

	};



	

	function _______MP3_SETTING_____(){}

	

	

	/**

	 * update image url base

	 */

	this.updateMp3FieldState = function(objInput, isEnable){

		

		var objButton = objInput.siblings(".unite-button-choose");

		var objError = objInput.siblings(".unite-setting-mp3-error");

		

		objInput.trigger("change");

		

		if(!isEnable){				//set disabled mode

			

			if(objError.length)

				objError.show();

			

			g_ucAdmin.disableInput(objInput);

			g_ucAdmin.disableButton(objButton);

			

		}else{						//set enabled mode

			

			if(objError.length)

				objError.hide();

			

			g_ucAdmin.enableInput(objInput);

			g_ucAdmin.enableButton(objButton);

		}

		

		

	};

	

	

	/**

	 * on change image click - change the image

	 */

	function onChooseMp3Click(){

		var objButton = jQuery(this);

		

		if(g_ucAdmin.isButtonEnabled(objButton) == false)

			return(true);

		

		var objInput = objButton.siblings(".unite-setting-mp3-input");

		var source = objInput.data("source");

		

		g_ucAdmin.openAddMp3Dialog(g_uctext.choose_audio,function(urlMp3){

			

			if(source == "addon"){		//in that case the url is an object

				var inputValue = urlMp3.url_assets_relative;

				var fullUrl = urlMp3.full_url;

				objInput.data("url", fullUrl);

				

				setInputValue(objInput, inputValue);

			}else{

				setInputValue(objInput, urlMp3);

			}

			

			objInput.trigger("change");

			

		},false, source);

		

	}

	

	function _______IMAGE_SETTING_____(){}

	

	

	/**

	 * set image preview

	 */

	function setImagePreview(){

				

		var objInput = jQuery(this);

						

		if(objInput.length == 0)

			throw new Error("wrong image input given");

				

		var source = objInput.data("source");			

		

		var url = objInput.val();

				

		if(source == "addon"){

			

			if(url == ""){

				objInput.data("urlfull","");

			}

			

			var urlFull = objInput.data("urlfull");

			

			urlFull = g_ucAdmin.urlToFull(url);

			objInput.data("urlfull", urlFull);

			

			url = g_ucAdmin.urlToFull(urlFull);

			

		}else{

			url = g_ucAdmin.urlToFull(url);

		}

		

		var objPreview = objInput.siblings(".unite-setting-image-preview");

		var objWrapper = objInput.parents(".unite-setting-image");

		

		url = jQuery.trim(url);

				

		if(url == ""){

			

			objWrapper.removeClass("unite-image-exists");

			objPreview.css("background-image","");

			objInput.data("imageid","");

			objInput.data("url","");

			

		}else{

			objInput.data("url",url);

			

			objWrapper.addClass("unite-image-exists");

			objPreview.css("background-image","url('"+url+"')");

		}

		

		return(true);

	}

	

	

	/**

	 * on change image click - change the image

	 */

	function onChooseImageClick(event){

		

		//event.preventDefault();

		

		var objButton = jQuery(this);

		

		var objWrapper = objButton.parents(".unite-setting-image");

		

		var objInput = objWrapper.find(".unite-setting-image-input");

		var source = objInput.data("source");

		

		

		g_ucAdmin.openAddImageDialog(g_uctext.choose_image,function(urlImage, imageID){

			

			if(source == "addon"){		//in that case the url is an object

				var inputValue = urlImage.url_assets_relative;

				var fullUrl = urlImage.full_url;				

				objInput.data("urlfull", fullUrl);

				

				setInputValue(objInput, inputValue);

			}else

				setInputValue(objInput, urlImage, imageID);

			

			objInput.trigger("change");

			

		},false, source);

		

		return(false);

	}

	

	

	/**

	 * on clear image click

	 */

	function onClearImageClick(event){

		

		event.preventDefault();

		

		var objButton = jQuery(this);

		var objWrapper = objButton.parents(".unite-setting-image");

				

		var objInput = objWrapper.find("input.unite-setting-image-input");

		

		objInput.val("");

		objInput.data("urlfull","");

		objInput.data("imageid","");

		objInput.data("url","");

		

		objInput.trigger("change");

		

		return(false);

	}

	

	

	/**

	 * update image url base

	 */

	this.updateImageFieldState = function(objInput, isEnable){

		

		var objError = objInput.siblings(".unite-setting-image-error");

		var objPreview = objInput.siblings(".unite-setting-image-preview");

		var objWrapper = objInput.parents(".unite-setting-image");

		

		objInput.trigger("change");

		

		if(isEnable == false){				//set disabled mode

			

			if(objError.length)

				objError.show();

			

			g_ucAdmin.disableInput(objInput);

			objWrapper.addClass("unite-disabled");

			

		}else{						//activate image input

			if(objError.length)

				objError.hide();

			

			g_ucAdmin.enableInput(objInput);

			objWrapper.removeClass("unite-disabled");

			

			objPreview.show();

			

			var backgroundImage = objPreview.css("background-image");

			

			if(backgroundImage && backgroundImage != "none")

				objWrapper.addClass("unite-image-exists");

			else

				objWrapper.removeClass("unite-image-exists");

			

		}

		

		

	}

	

	

	/**

	 * on update assets path

	 * update all image addon inputs url base

	 */

	function onUpdateAssetsPath(event, urlBase){

		

		validateInited();

		

		var objInputs = getObjInputs();



		objInputs.each(function(index, input){

			

			var objInput = jQuery(input);

			var type = getInputType(objInput);

			if(type != "image" || type != "mp3")

				return(true);

			

			var source = objInput.data("source");

			

			if(source == "addon"){

				var isEnable = true;

				if(!urlBase)

					isEnable = false;

				

				t.updateImageFieldState(objInput, isEnable);

			}

			

		});

		

	}

	

	function _______SAPS_____(){}

	

	/**

	 * get all sap tabs

	 */

	function getAllSapTabs(){

		

		var objTabs = g_objSapTabs.children("a");

		

		return(objTabs);

	}

	

	

	/**

	 * show sap elmeents

	 */

	function showSapInlineElements(numSap){



		var elementClass = ".unite-sap-" + numSap;

		var objElements = g_objParent.find(".unite-sap-element");

		

		if(objElements.length == 0)

			return(false);

		

		var objSapElements = g_objParent.find(elementClass);

		

		objElements.not(objSapElements).addClass("unite-setting-hidden");

		

		objSapElements.removeClass("unite-setting-hidden");

	}

	

	

	/**

	 * on sap tab click

	 */

	function onSapTabClick(){

		

		var classSelected = "unite-tab-selected";

		

		var objTab = jQuery(this);

		

		if(objTab.hasClass(classSelected))

			return(false);

		

		var allTabs = getAllSapTabs();

		

		allTabs.not(objTab).removeClass(classSelected);

		

		objTab.addClass(classSelected);

		

		var sapNum = objTab.data("sapnum");

		

		showSapInlineElements(sapNum);

			

	}

	

	/**

	 * init saps tabs

	 */

	function initSapsTabs(){

		

		if(!g_objWrapper){

			g_objSapTabs = null;

			return(false);

		}

		

		g_objSapTabs = g_objWrapper.find(".unite-settings-tabs");

		

		if(g_objSapTabs.length == 0){

			

			g_objSapTabs = null;

			return(false);

		}

		

		g_objSapTabs.children("a").on("click",onSapTabClick);

	}

	

		

	

	/**

	 * init saps accordion type

	 */

	function initSapsAccordion(){

		

		if(!g_objWrapper)

			return(false);

		

		var classClosed = "unite-closed";

		

		g_objWrapper.find(".unite-postbox .unite-postbox-title").not(".unite-no-accordion").on("click",function(){

			

			var objHandle = jQuery(this);

			var objInside = objHandle.siblings(".unite-postbox-inside");

			

			//open

			if(objHandle.hasClass(classClosed)){

				

				//close all items

				g_objWrapper.find(".unite-postbox .unite-postbox-inside").not(objInside).slideUp("fast");

				g_objWrapper.find(".unite-postbox .unite-postbox-title").not(objHandle).addClass("unite-closed");

								

				objHandle.removeClass(classClosed);

				objInside.slideDown("fast");

				

			}else{	//close

				objHandle.addClass(classClosed);

				objInside.slideUp("fast");

			}

			

		});

		

	}

	

	

	/**

	 * set accordion max height. set the inner options max height

	 */

	this.setAccordionMaxHeight = function(bodyHeight){

		

		if(!g_objWrapper)

			return(false);

		

		var spaceBetween = g_ucAdmin.getVal(g_options, "accordion_sap", null);

		if(spaceBetween === null){

			trace(g_options);

			throw new Error("Space between accordion items not set in settings options");

		}

				

		var titleHeight = g_ucAdmin.getVal(g_options, "accordion_title_height", null);

		var numTitles = g_objWrapper.find(".unite-postbox .unite-postbox-title").length;

				

		var extraHeight = 0;

		if(numTitles > 0)

			extraHeight = titleHeight * numTitles + spaceBetween * (numTitles-1);

		

		var insideMaxHeight = bodyHeight - extraHeight;

				

		g_objWrapper.find(".unite-postbox-inside").css("max-height",insideMaxHeight+"px");

	};

	

	

	/**

	 * init saps

	 */

	function initSaps(){

				

		if(g_options.show_saps == false)

			return(false);

		

		if(!g_objWrapper)

			return(false);

		

		switch(g_options.saps_type){

			case "saps_type_inline":

				initSapsTabs();

			break;

			case "saps_type_accordion":

				initSapsAccordion();

			break;

			default:

				throw new Error("Init saps error: wrong saps type: " + g_options.saps_type);

			break;

		}

		

	}



	function ______ADDON_PICKER____(){}

	

	

	/**

	 * get addons browser object

	 */

	this.getObjAddonBrowser = function(addonType){

		

		var keyCache = "uc_obj_addons_browsers";

		var objAddonBrowsersCache = g_ucAdmin.getGlobalData(keyCache);

		if(!objAddonBrowsersCache)

			objAddonBrowsersCache = {};

		

		var objBrowser = g_ucAdmin.getVal(objAddonBrowsersCache, addonType);

		

		//init browser if not inited yet

		if(!objBrowser){

			

			var browserID = "uc_addon_browser_"+addonType;

			

			var objBrowserWrapper = jQuery("#" + browserID);

			g_ucAdmin.validateDomElement(objBrowserWrapper,"addons browser with id: "+browserID);

			

			var objBrowser = new UniteCreatorBrowser();

			objBrowser.init(objBrowserWrapper);

			

			objAddonBrowsersCache[addonType] = objBrowser;

			g_ucAdmin.storeGlobalData(keyCache, objAddonBrowsersCache);

		}

		

		return(objBrowser);

	};

	

	

	/**

	 * init addon picker

	 */

	function initAddonPicker(objInput){

		

		var addonType = objInput.data("addontype");

		var objSelectButton = objInput.siblings(".unite-addonpicker-button");

		var objWrapper = objInput.parents(".unite-settings-addonpicker-wrapper");

		var objButtons = objWrapper.find(".uc-action-button");

		var objTitle = objInput.siblings(".unite-addonpicker-title");

		var objBrowser = t.getObjAddonBrowser(addonType);

		var settingName = objInput.prop("name");

		var settingDataName = settingName + "_data";

		var objAddonConfig = new UniteCreatorAddonConfig();

		var settingDataName = settingName + "_data";

		var objInputData = t.getInputByName(settingDataName);

		

		

		objInput.change(function(){

			

			var addonname = objInput.val();

						

			//set empty

			if(!addonname){

				objWrapper.addClass("unite-empty-content");

				objSelectButton.css("background-image", "none");

				if(objTitle.length)

					objTitle.html("");

					

				return(true);

			}

			

			var objData = objBrowser.getAddonData(addonname);

						

			if(!objData)

				return(true);

			

			if(objData.bgimage)

				objSelectButton.css("background-image", objData.bgimage);

			

			objWrapper.removeClass("unite-empty-content");

			

			if(objTitle.length){

				var title = g_ucAdmin.getVal(objData, "title");

				if(!title)

					title = addonname;

				

				objTitle.show().html(title);

			}

			

			//update data

			if(objInputData){

				

				var addonData = objAddonConfig.getGridAddonDataFromBrowserData(objData);

				setInputValue(objInputData, addonData);

				

			}

						

		});

		

		

		//---- select button

		

		objSelectButton.on("click",function(event){

			

			event.stopPropagation();

			event.stopImmediatePropagation();

			

			objBrowser.openAddonsBrowser(null, function(objData){

				

				var addonName = objData.name;

				

				//clear

				if(!addonName){

					

					objInput.val("");

					

					objWrapper.addClass("unite-empty-content");

					objSelectButton.css("background-image", "");

					

					if(objTitle.length)

						objTitle.html("");

					

				}else{

					

					objInput.val(addonName);

					

					if(objData.bgimage)

						objSelectButton.css("background-image", objData.bgimage);

					

					objWrapper.removeClass("unite-empty-content");

					

					if(objTitle.length)

						objTitle.html(objData.title);

					

					//update data

					if(objInputData){

						var addonData = objAddonConfig.getGridAddonDataFromBrowserData(objData);

						setInputValue(objInputData, addonData);

					}

					

				}

								

				t.onSettingChange(null, objInput);

				onControlSettingChange(null, objInput[0]);

				

			}, objSelectButton);

			

		});

		

		// ------------ action buttons 

		

		objButtons.on("click",function(){

			var objButton = jQuery(this);

			var action = objButton.data("action");

						

			switch(action){

				case "clear":

					objInput.val("");

					objInput.trigger("change");

				break;

				case "configure":

					

					var configureAction = objButton.data("configureaction");

					g_ucAdmin.validateNotEmpty(configureAction, "configure action");

					

					g_ucAdmin.validateDomElement(objInputData, "addon picker input data");

					var addonData = getSettingInputValue(objInputData);

					

					if(!addonData){

						var addonName = objInput.val();

						addonData = objAddonConfig.getEmptyAddonData(addonName, addonType);

					}

					

					//open the panel

					var sendData = objAddonConfig.getSendDataFromAddonData(addonData);

					var panelTitle = objAddonConfig.getAddonTitle(addonData);

					var panelData = objAddonConfig.getPanelData(addonData);

					

					var options = {

							pane_name: "addon-settings",

							send_data: sendData,

							panel_title: panelTitle,

							panel_data: panelData,

							setting_name: settingDataName,

							changing_setting_name: settingName,

							addon_data: addonData

					};

					

					

					triggerEvent(t.events.OPEN_CHILD_PANEL, options);

				break;

			}

			

		});

		

	}

	

	function ______ICON_PICKER____(){}

	

	

	/**

	 * add icons type

	 */

	this.iconPicker_addIconsType = function(name, arrIcons, iconsTemplate, optParams){

		

		var key = "icon_picker_type_"+name;

		var objType = g_ucAdmin.getGlobalData(key);

		if(objType)

			return(false);

		

		var params = {

				"name": name,

				"icons":arrIcons,

				"template":iconsTemplate

		};

		

		if(optParams)

			jQuery.extend(params, optParams);

			

		g_ucAdmin.storeGlobalData(key, params);

	};

	

	

	/**

	 * get icons type object

	 */

	function iconPicker_getObjIconsType(name){

		var key = "icon_picker_type_"+name;

		var objType = g_ucAdmin.getGlobalData(key);

		

		if(!objType)

			throw new Error("Icons type: "+name+" not found");

		

		return(objType);

	}

	

	

	/**

	 * init the dialog

	 */

	function iconPicker_initDialog(type){

		

		if(!type)

			var type = "fa";

		

		var dialogID = "unite_icon_picker_dialog_"+type;

		

		var objDialogWrapper = jQuery("#"+dialogID);

		if(objDialogWrapper.length){

			g_iconsHash = jQuery("body").data("uc_icons_hash");

						

			return(objDialogWrapper);

		}

		

		if(type == "elementor" && g_ucFaIcons.length == 0)

			type = "fa";

		

		//set "fa" template

		if(type == "fa"){

			

			t.iconPicker_addIconsType("fa", g_ucFaIcons, function(icon){	//icon to html functoin

				var classAdd = "fa fa-";

				if(icon.indexOf("fa-") != -1)

					classAdd = "";

				 

				var html = '<i class="'+classAdd+icon+'"></i>';

								

				return(html);

			});	

			

		}else if(type == "elementor"){

			

			t.iconPicker_addIconsType("elementor", g_ucElIcons, function(icon){	//icon to html functoin

				

				var html = '<i class="'+icon+'"></i>';

								

				return(html);

			});	

			

			

			

		}

		

		var objType = iconPicker_getObjIconsType(type);

		var isAddNew = g_ucAdmin.getVal(objType, "add_new");

		

		

		var htmlDialog = '<div id="'+dialogID+'" class="unite-icon-picker-dialog unite-inputs unite-picker-type-'+type+'" style="display:none">';

		htmlDialog += '<div class="unite-iconpicker-dialog-top">';

		htmlDialog += '<input class="unite-iconpicker-dialog-input-filter" type="text" placeholder="Type to filter" value="">';

		htmlDialog += '<span class="unite-iconpicker-dialog-icon-name"></span>';

		

		//add new functionality

		/*

		if(isAddNew === true){

			htmlDialog += '<a class="unite-button-secondary unite-iconpicker-dialog-button-addnew">Add New Shape</a>';

		}

		*/

		

		htmlDialog += '</div>';

		htmlDialog += '<div class="unite-iconpicker-dialog-icons-container"></div></div>';

		

		

		jQuery("body").append(htmlDialog);

		

		objDialogWrapper = jQuery('#'+dialogID);

		

		var objContainer = objDialogWrapper.find('.unite-iconpicker-dialog-icons-container');

		var objFilter = objDialogWrapper.find('.unite-iconpicker-dialog-input-filter');

		var objIconName = objDialogWrapper.find(".unite-iconpicker-dialog-icon-name");

		

		//set the icons

		

		var arrIcons = [];

					

		arrIcons = objType.icons;

		var iconTemplate = objType.template;

								

		var isArray = jQuery.isArray(arrIcons);

		

		jQuery.each(arrIcons, function(index, icon) {

			

			var iconTitle = null;

			

			if(isArray == false){

				iconTitle = icon;

				icon = index;

			}

			

			var hashName = icon+"_"+type;

			

			if(typeof iconTemplate == "function"){

				var iconHtml = iconTemplate(icon);

			}else{

				var iconHtml = iconTemplate.replace("[icon]", icon);

			}

			

			var objIcon = jQuery('<span class="unite-iconpicker-icon">'+iconHtml+'</span>');

			

			var iconName = icon;

			if(objType && typeof objType.getIconName == "function")

				iconName = objType.getIconName(icon);

			

			//avoid doubles

			if(g_iconsHash.hasOwnProperty(hashName) == false){

				objIcon.data('title', iconTitle);

				objIcon.data('name', iconName);

				objIcon.data('value', icon);

				

				objContainer.append(objIcon);

				g_iconsHash[hashName] = objIcon;

			}

			

		});

		

		jQuery("body").data("uc_icons_hash", g_iconsHash);

		

		var dialogTitle = "Choose Icon";

		if(type == "shape")

			dialogTitle = "Choose Shape";

		

		

		objDialogWrapper.dialog({

			autoOpen: false,

			height: 500,

			width: 800,

			dialogClass:"unite-ui unite-ui2",

			title: dialogTitle,

			open: function( event, ui ) {

			  

			  objContainer.scrollTop(0);

			  

			  var objSelectedIcon = objContainer.find('.icon-selected');

			  if (!objSelectedIcon.length) 

				  return(false);

			  

			  if(objSelectedIcon.is(":hidden") == true)

				  return(false);

			  

			  //scroll to icon

			  var containerHeight = objContainer.height();

			  var iconPos = objSelectedIcon.position().top;

			  

			  if(iconPos > containerHeight)

				  objContainer.scrollTop(iconPos - (containerHeight / 2 - 50) );

			}

		

		  });

		

		//init events

		objContainer.on('click', '.unite-iconpicker-icon', function (event) {

				

				objContainer.find('.icon-selected').removeClass('icon-selected');

				var objIcon = jQuery(event.target).closest('.unite-iconpicker-icon');

				objIcon.addClass('icon-selected');

				

				var iconName = objIcon.data('name');

				var iconValue = objIcon.data('value');

				var iconTitle = objIcon.data('title');

				

				//update picker object

				var objPicker = objDialogWrapper.data("objpicker");

				var objPickerInput = objPicker.find(".unite-iconpicker-input");

				var objPickerButton = objPicker.find(".unite-iconpicker-button");

				var objPickerTitle = objPicker.find(".unite-iconpicker-title");

				

				var inputValue = iconValue;

				if(type == "fa"){

					if(iconName.indexOf("fa-") == -1)

						inputValue = 'fa fa-' + iconName;

					else

						inputValue = iconName;

				}

				

				objPickerInput.val(inputValue);

				

				if(typeof iconTemplate == "function")

					var htmlIcon = iconTemplate(iconValue);

				else 

					var htmlIcon = iconTemplate.replace("[icon]", iconValue);

				

				objPickerButton.html(htmlIcon);

				

				//set title

				if(iconTitle)

					objPickerTitle.show().html(iconTitle);

				else

					objPickerTitle.hide()

				

				objPickerInput.trigger("change");

				

				//close dialog

				objDialogWrapper.dialog("close");

		});

		

		//on icon mouseover

		objContainer.on('mouseenter', '.unite-iconpicker-icon', function (event) {

			

			var objIcon = jQuery(event.target).closest('.unite-iconpicker-icon');

			

			var iconNameStr = objIcon.data('name');

			var iconTitle = objIcon.data('title');

				

			var iconName = iconNameStr;

			if(iconTitle)

				iconName = iconTitle;

			

			if(type == "fa"){

				

				iconName = iconName.replace("fa-", "");

				

				if(iconName.indexOf("fab ") == 0)

					iconName = iconName.replace("fab ", "")+" [brand]";

				else

					if(iconName.indexOf("fal ") == 0)

						iconName = iconName.replace("fal ", "")+" [light]";

				else

					if(iconName.indexOf("far ") == 0)

						iconName = iconName.replace("far ", "")+" [regular]";

				else

					iconName = iconName+" [solid]";

				

			}

			

			objIconName.text(iconName);

		});

		

		//on icon mouseover

		objContainer.on('mouseleave', '.unite-iconpicker-icon', function (event) {

			objIconName.text("");

		});

		

			

		//filter functionality

		objFilter.on('keyup', function () {

			

			var strFilter = objFilter.val();

			strFilter = jQuery.trim(strFilter);

			

			var objIcons = objDialogWrapper.find(".unite-iconpicker-icon");

			

			jQuery(objIcons).each(function(index, icon){

				  var objIcon = jQuery(icon);

				  var name = objIcon.data("name");

				  				  

				  var isVisible = false;

				  if(strFilter == "" || name.indexOf(strFilter) !== -1)

					  isVisible = true;

				  

				  if(isVisible == true)

					  objIcon.show();

				  else

					  objIcon.hide();

				  

			});

		  });

		  

		

		return(objDialogWrapper);

	}

	

	

	

	/**

	 * init icon picker raw function

	 */

	function initIconPicker(objInput){

		

		var iconsType = objInput.data("icons_type");

		if(!iconsType)

			iconsType = "fa";

		

		var objDialogWrapper = iconPicker_initDialog(iconsType);

		

		if(!objDialogWrapper || objDialogWrapper.length == 0){

			trace("icon picker dialog not inited");

			return(false);

		}

		

		var objPickerWrapper = objInput.parents(".unite-settings-iconpicker");

		var objInput = objPickerWrapper.find('input.unite-iconpicker-input');

		var objButton = objPickerWrapper.find('.unite-iconpicker-button');

		var objTitle = objPickerWrapper.find('.unite-iconpicker-title');

		

		//on button click

		objButton.on("click",function () {

			

				if (objDialogWrapper.dialog('isOpen')) {

					objDialogWrapper.dialog('close');

				} else {

					objDialogWrapper.data("objpicker", objPickerWrapper);

					objDialogWrapper.dialog('open');

				}

		});

		

		

		//on input blur

		objInput.on('blur', function () {

			

			var value = jQuery(this).val();

			

			if(iconsType == "fa")

				value = value.replace("fa fa-","");

			

			value = jQuery.trim(value);

			

			var hashName = value+"_"+iconsType;

			

			if(!g_iconsHash[hashName]){

				var text = "choose";

				if(iconsType == "shape")

					text = "Choose Shape";

				

				objButton.html(text);

				return(false);

			}

			

			var objIcon = g_iconsHash[hashName];

			var iconTitle = objIcon.data("title");

			

			var objType = iconPicker_getObjIconsType(iconsType);

			if(!objType.template)

				throw new Error("icon template not found");

			

			if(typeof objType.template == "function")

				var htmlIcon = objType.template(value);				

			else

				var htmlIcon = objType.template.replace("[icon]", value);

			

			objButton.html(htmlIcon);

			

			//set title

			if(iconTitle)

				objTitle.show().html(iconTitle);

			else

				objTitle.hide();

			

			

			//set selected icon in dialog

			var objContainer = objDialogWrapper.find('.unite-iconpicker-dialog-icons-container');

			

			objContainer.find('.icon-selected').removeClass('icon-selected');

			objIcon.addClass('icon-selected');

			

		});

		

		objInput.trigger("blur");

		

	}

	

	

	function ______MAP_PICKER____(){}

	

	

	/**

	 * init google map picker

	 */

	function initMapPicker(objPickerWrapper){

		

		var dialogTitle = objPickerWrapper.data("dialogtitle");

		

		var objButton = objPickerWrapper.find(".unite-mappicker-button");

		var objOverlay = objPickerWrapper.find(".unite-mappicker-chooser-overlay");

		g_ucAdmin.validateDomElement(objButton, "choose map button");

		

		

		objButton.on("click",function(){

			

			var dialogOptions = {};

			dialogOptions["title"] = dialogTitle;

			

			var onMapUpdate = function(data, objDialog){

				

				var urlMapImage = data.url_static_map;

				objPickerWrapper.find(".unite-mappicker-mapimage").attr("src", urlMapImage);

				

				objPickerWrapper.data("mapdata", data);

				

				t.onSettingChange(null, objPickerWrapper);

				

				setTimeout(function(){

					objDialog.dialog("close");

				}, 100);

			};

			

			var urlParams = {};

			var mapData = objPickerWrapper.data("mapdata");

			window.uc_mappicker_data = mapData;

			

			g_ucAdmin.openIframeDialog("mappicker", urlParams, dialogOptions, onMapUpdate);

						

		});

		

		objOverlay.on("click",function(){

			objButton.trigger("click");

		});

	}

	

	

	function ______POST_PICKER____(){}

	

	/**

	 * init post picker 

	 */

	function initPostPicker(objWrapper){

		

		//fix select focus inside jquery ui dialogs

		g_ucAdmin.fixModalDialogSelect2();

		

		var objSelect = objWrapper.find(".unite-setting-post-picker");

		

		var postID = objSelect.data("postid");

		var postTitle = objSelect.data("posttitle");

		var placeholder = objSelect.data("placeholder");

		

		var data = [];

		if(postID && postTitle){

			

			data.push({

				id:postID,

				text: postTitle

			});

		}

		

		var urlAjax = g_ucAdmin.getUrlAjax("get_posts_list_forselect");

		

		objSelect.select2({

			data:data,

			placeholder: placeholder,

			allowClear: true,

			ajax:{

				url:urlAjax,

				dataType:"json"

			}

		});

		

		

		//on change - trigger change event

		objSelect.on("change", function (e) { 

			

			t.onSettingChange(null, objWrapper, false);

			

		});

		

	}

	

	/**

	 * set post picker value

	 */

	function setPostPickerValue(objWrapper, value){

				

		var objSelect = objWrapper.find(".unite-setting-post-picker");

				

		objSelect.val(value);

	}

	

	

	/**

	 * get post picker value

	 */

	function getPostPickerValue(objWrapper){

		

		var objSelect = objWrapper.find(".unite-setting-post-picker");

				

		var value = objSelect.select2("val");

				

		return(value);

	}

		

	function _______ANIMATIONS_____(){}

	

	/**

	 * on settings animation change, run the demo

	 */

	function onAnimationSettingChange(){

		

		var objSelect = jQuery(this);

		var objParent = objSelect.parents("table");

		if(objParent.length == 0)

			objParent = objSelect.parents("ul");

			

		g_ucAdmin.validateDomElement(objParent, "Animation setting parent");

		

		var objDemo = objParent.find(".uc-animation-demo span");

		var animation = objSelect.val();

		

		g_ucAdmin.validateDomElement(objDemo, "Animation setting demo");

		

		var className = animation + ' animated';

		objDemo.removeClass().addClass(className).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){

		      jQuery(this).removeClass();

		 });

		

	}

	

	

	/**

	 * init animations selector settings

	 */

	function initAnimationsSelector(){

		

		if(!g_objWrapper)

			return(false);

		

		//init animations

		var objAnimations = g_objWrapper.find("select.uc-select-animation-type");

		

		if(objAnimations.length == 0)

			return(false);

		

		objAnimations.change(onAnimationSettingChange);

		

	}

	

	function _____ITEMS_PANEL_____(){}

	

	

	/**

	 * open the items manager in dialog

	 */

	function onItemsPanelEditItemsClick(){

		

		var objButton = jQuery(this);

		var objSetting = objButton.parents(".uc-setting-items-panel");

		var settingID = objSetting.prop("id");

		var dialogID = settingID+"_dialog";

		

		var objDialog = jQuery("#"+dialogID);

		

		g_ucAdmin.validateDomElement(objDialog, "items dialog");

		

		var buttonOpts = {};

		

		buttonOpts[g_uctext.update] = function(){

			objDialog.dialog("close");

			

			var objItemsWrapper = g_objParent.find(".uc-setting-items-panel");

			t.onSettingChange(null, objItemsWrapper);

		};

		

		var dialogOptions = {

				buttons:buttonOpts,

				minWidth:800,

				modal:true,

				dialogClass:"unite-ui",

				open:function(){

				}

			};

		

		objDialog.dialog(dialogOptions);

		

	}

	

	

	/**

	 * init items panel setting

	 */

	function initItemsPanel(){

		

		var objItemsWrapper = g_objParent.find(".uc-setting-items-panel");

		if(objItemsWrapper.length == 0)

			return(false);

		

		if(objItemsWrapper.length != 1){

			throw new Error("There must be only 1 items panel");

		}

					

		g_temp.objItemsManager = new UCManagerAdmin();

		g_temp.objItemsManager.initManager();

		

		//side panel dialog

		

		var objButtonEditItems = objItemsWrapper.find(".uc-setting-items-panel-button");

		if(objButtonEditItems.length){

			objButtonEditItems.on("click",onItemsPanelEditItemsClick);

		}

		

	}

	

	function __________FONTS_PANEL__________(){}

	

	

	/**

	 * on font panel setting change

	 */

	function onFontPanelInputChange(event, objInput, isInstant){

		

		if(!objInput)

			var objInput = jQuery(event.target);

		

		var objFontsWrapper = objInput.parents(".uc-setting-fonts-panel");

		

		var type = getInputType(objInput);

		

		if(type == "color")

			checkColorInputOnchange(objInput);

				

		if(isInstant !== true){

			updateInputChildPlaceholders(objInput);

		}

		

		//throw font panel setting change event

		t.onSettingChange(null, objFontsWrapper, isInstant);

	}

	

	

	/**

	 * init fonts panel

	 */

	this.initFontsPanel = function(objFontsWrapper){

				

		if(!objFontsWrapper)

			var objFontsWrapper = g_objParent.find(".uc-setting-fonts-panel");

		

		if(objFontsWrapper.length == 0)

			return(false);

				

		//if init without parent

		if(!g_objParent)

			g_objParent = objFontsWrapper.parent();

			

			

		g_temp.objFontsPanel = objFontsWrapper.find(".uc-fontspanel");

		if(g_temp.objFontsPanel.length == 0){

			g_temp.objFontsPanel = null;

			return(null);

		}

			

		

		//checkbox event

		g_temp.objFontsPanel.find(".uc-fontspanel-toggle").on("click",function(){

				

			var objCheck = jQuery(this);

			var sectionID = objCheck.data("target");

			var objSection = jQuery("#" + sectionID);

			g_ucAdmin.validateDomElement(objSection, "fonts panel section");

			

			if(objCheck.is(":checked")){

				

				objSection.show();

				

			}else{

				

				objSection.hide();

			}

			

		});

		

		//init inputs

		var objInputs = g_temp.objFontsPanel.find("input, select");

		jQuery.each(objInputs, function(index, input){

			var objInput = jQuery(input);

			

			var type = getInputType(objInput);

			

			initInputEvents(objInput, onFontPanelInputChange);

			

		});

		

		

		return(g_temp.objFontsPanel);

	};

	

	

	/**

	 * get fonts panel data

	 */

	this.getFontsPanelData = function(){

		

		if(!g_temp.objFontsPanel)

			return(null);

		

		var objData = {};

		var objCheckboxes = g_temp.objFontsPanel.find(".uc-fontspanel-toggle");

		jQuery.each(objCheckboxes, function(index, checkbox){

			

			var objCheckbox = jQuery(checkbox);

			

			if(objCheckbox.is(":checked") == false)

				return(true);

			

			var sectionID = objCheckbox.data("target");

			var sectionName = objCheckbox.data("sectionname");

			

			var objSection = jQuery("#" + sectionID);

			g_ucAdmin.validateDomElement(objSection, "fonts panel section "+sectionID);

			

			//get fields values

			var objFields = objSection.find(".uc-fontspanel-field");

			

			var fieldsValues = {};

			jQuery.each(objFields, function(index, field){

			

				var objField = jQuery(field);

				

				var fieldName = objField.data("fieldname");

				var value = objField.val();

								

				if(jQuery.trim(value) == "")

					return(true);

				

				fieldsValues[fieldName] = value;

				

			});

						

			if(jQuery.isEmptyObject(fieldsValues) == false)

				objData[sectionName] = fieldsValues;

			

		});

		

		return(objData);

	};

	

	

	/**

	 * set fonts panel data

	 */

	function setFontPanelData(objInput, arrData){

				

		clearFontsPanelData(objInput);

		

		jQuery.each(arrData, function(sectionName, objFields){

			

			//check toggle

			var objToggle = objInput.find(".uc-fontspanel-toggle-"+sectionName);

			if(objToggle.length == 0)

				return(true);

			

			objToggle.attr("checked","checked");

			objToggle.prop("checked","checked");

			

			//trace(objToggle);

			

			//open section

			var sectionID = objToggle.data("target");

						

			var objSection = jQuery("#"+sectionID);

			

			g_ucAdmin.validateDomElement(objSection, "section: "+sectionID);

			

			objSection.show();

							

			//go through the section fields

			jQuery.each(objFields, function(fieldName, fieldValue){

				

				var objInput = objSection.find(".uc-fontspanel-field[data-fieldname="+fieldName+"]");

				

				if(!objInput || objInput.length == 0){

					

					if(fieldName == "mobile-size")

						return(true);

					

					throw new Error("field not found: "+fieldName);

				}

								

				setInputValue(objInput, fieldValue);

				

			});

			

		});

		

	}

	

	

	/**

	 * clear data

	 */

	function clearFontsPanelData(objInput){

		

		//uncheck toggles

		var objToggles = objInput.find(".uc-fontspanel-toggle");

		

		objToggles.removeAttr("checked");

		objToggles.attr("checked",false);

		

		//hide fields

		var objSections = objInput.find(".uc-fontspanel-section");

		objSections.hide();

		

		//clear inputs

		var objInputs = objSections.find("input.uc-fontspanel-field");

		objInputs.val("");

		

	}

	

	

	/**

	 * destroy fonts panel

	 */

	this.destroyFontsPanel = function(){

		

		if(!g_temp.objFontsPanel)

			return(false);

		

		g_temp.objFontsPanel.find(".uc-fontspanel-toggle").off("click");

		g_temp.objFontsPanel = null;

		

	}

	

	

	/**

	 * destroy repeaters

	 */

	this.destroyRepeaters = function(){

		

		var objRepeaterItems = g_objParent.find(".unite-repeater-item");

		

		if(objRepeaterItems.length == 0)

			return(false);

		

		var objRepeaters = g_objParent.find(".unite-settings-repeater");

		objRepeaters.sortable("destroy");

		

		

		jQuery.each(objRepeaterItems, function(index, item){

			

			var objItem = jQuery(item);

			var objSettings = objItem.data("itemsettings");

			objSettings.destroy();

		});

		

		objRepeaterItems.find(".unite-repeater-item-head").off("click");

				

	}

	

	

	function _______REPEATERS_____(){}



	/**

	 * set repetaer values

	 */

	function setRepeaterValues(objWrapper, arrValues, takeDefault){

		

		if(takeDefault === true)

			var arrValues = objWrapper.data("itemvalues");

		

		var objItemsWrapper = objWrapper.find(".unite-repeater-items");

		

		//clear existing

		objItemsWrapper.html("");

		

		if(!arrValues)

			return(false);

		

		if(jQuery.isArray(arrValues) == false)

			return(false);

		

		

		jQuery.each(arrValues, function(index, objItemValues){

			

			repeaterAddItem(null, objWrapper, objItemValues);

			

		});

		

	}

	

	

	/**

	 * get repeater values

	 */

	function getRepeaterValues(objWrapper){

		

		var objItemsWrapper = objWrapper.find(".unite-repeater-items");

		var objItems = objItemsWrapper.find(".unite-repeater-item");



		var arrItemsValues = [];

		

		if(objItems.length == 0)

			return(arrItemsValues);

		

		jQuery.each(objItems, function(index, item){

			

			var objItem = jQuery(item);

			

			var objSettings = objItem.data("objsettings");

							

			var itemValues = objSettings.getSettingsValues();

			

			arrItemsValues.push(itemValues);

			

		});

		

		return(arrItemsValues);

	}

	

	

	/**

	 * add repeater item

	 */

	function repeaterAddItem(event, objWrapper, objItemValues, objItemInsertAfter){

		

		if(!objWrapper){

			var objButton = jQuery(this);

			var objWrapper = objButton.parents(".unite-settings-repeater");

		}

		

		var isNewItem = false;

		if(!objItemValues)

			isNewItem = true;

		

		var isDuplicated = false;

		if(objItemInsertAfter)

			isDuplicated = true;

		

		var objSettingsTemplate = objWrapper.find(".unite-repeater-template");

		var objItemsWrapper = objWrapper.find(".unite-repeater-items");

		var objEmptyText = objWrapper.find(".unite-repeater-emptytext")

		var objItems = objItemsWrapper.find(".unite-repeater-item");

		

		g_ucAdmin.validateDomElement(objItemsWrapper, "items wrapper");

		g_ucAdmin.validateDomElement(objSettingsTemplate, "settings template");

		

		//close other items, if not duplicated

		if(isDuplicated == false)		

			objItems.addClass("unite-item-closed");

		

		//set item title

		

		if(isNewItem == false){

			

			var itemTitle = objItemValues.title;

		}else{

			

			var itemTitle = objWrapper.data("itemtitle");

			if(!itemTitle)

				itemTitle = "Item";

			

			var numItems = objItemsWrapper.children().length;

			var currentNumItem = numItems+1;

			itemTitle += " "+currentNumItem;

			

		}

		

		var deleteText = objWrapper.data("deletetext");

		var duplicateText = objWrapper.data("duplicatext");

		

		//append item

		var htmlSettingsTemplate = objSettingsTemplate.html();

		

		var addClass = "";

		if(objItemInsertAfter)

			addClass = " unite-item-closed";

			

		var html = "<div class='unite-repeater-item"+addClass+"'>";

		html += "	<div class='unite-repeater-item-head'>";

		html += "		<a class='unite-repeater-trash unite-repeater-buttondelete' title='"+deleteText+"'><i class='fa fa-trash' aria-hidden='true'></i></a>";

		html += "		<a class='unite-repeater-duplicate unite-repeater-buttonduplicate' title='"+duplicateText+"'><i class='fa fa-clone' aria-hidden='true'></i></a>";

		

		html += "		<div class='unite-repeater-arrow'></div>";

		html += "	<span>" + itemTitle+"</span>";

		html += "	</div>";	

		html += "	<div class='unite-repeater-item-settings'>";

		html += htmlSettingsTemplate;

		html += "	</div>";

		html += "</div>";

		

		objEmptyText.hide();

		

		var objItem = jQuery(html);

		

		//change the id's

		

		var objItemSettingsWrapper = objItem.find(".unite_settings_wrapper");

		g_ucAdmin.validateDomElement(objItemSettingsWrapper, "item settigns wrapper");

		

		var objOptions = objItemSettingsWrapper.data("options");

		

		//replace setting IDs

		var idPrefix = objOptions.id_prefix;

		var newID = idPrefix+"item_"+g_ucAdmin.getRandomString(5)+"_";

		html = g_ucAdmin.replaceAll(html, idPrefix, newID);

				

		//put to the item again

		var objItem = jQuery(html);

		var objItemSettingsWrapper = objItem.find(".unite_settings_wrapper");

		

		//change wrapper ID

		var settingsWrapperID = "unite_settings_repeater_"+newID;

		objItemSettingsWrapper.attr("id", settingsWrapperID);

				

		g_ucAdmin.validateDomElement(objItemSettingsWrapper, "item settigns wrapper");

		

		if(objItemInsertAfter){

			objItem.insertAfter(objItemInsertAfter);

		}

		else

		objItemsWrapper.append(objItem);

		

		var objHeadTitle = objItem.find(".unite-repeater-item-head span");

		

		var objItemSettings = new UniteSettingsUC();

		objItemSettings.init(objItemSettingsWrapper);

		

		var objInputTitle = objItemSettings.getInputByName("title");

		

		objInputTitle.on("input",function(){

			

			var objInput = jQuery(this);

			var value = objInput.val();

			objHeadTitle.html(value);			

		});

		

		if(isNewItem == false){

			

			objItemSettings.setValues(objItemValues);

			

		}else{		//if new item

			

			//Update item title input if available

			if(objInputTitle)

				objInputTitle.val(itemTitle);

			

			//update generated ID

			var objInputGeneratedID = objItemSettings.getInputByName("generated_id");

			if(objInputGeneratedID){

				var generatedID = g_ucAdmin.getRandomString(7);

				objInputGeneratedID.val(generatedID);

			}

		

		}

		

		

		objItem.data("objsettings", objItemSettings);

		

		t.onSettingChange(null, objWrapper);

		

	}

	

	

	/**

	 * init repeater

	 */

	function initRepeater(objWrapper){

		

		var objButtonAdd = objWrapper.find(".unite-repeater-buttonadd");

		var objItemsWrapper = objWrapper.find(".unite-repeater-items");

		var objEmptyText = objWrapper.find(".unite-repeater-emptytext")

			

		//init button

		objButtonAdd.on("click",repeaterAddItem);

		

		//init container sortable

		objWrapper.sortable({

			items: ".unite-repeater-item",

			handle: ".unite-repeater-item-head",

			cursor: "move",

			axis: "y",

			update: function(event, ui){

				

				var objItem = ui.item;

				

				t.onSettingChange(null, objWrapper);

				

				objItem.data("just_moved",true);

								

			}

		});

		

		//head on click

		objWrapper.on("click", ".unite-repeater-item-head", function(){

			

			var objHead = jQuery(this);

			var objItem = objHead.parents(".unite-repeater-item");

			

			var justMoved = objItem.data("just_moved");

			if(justMoved === true){

				objItem.data("just_moved", false);

				return(true);

			}

			

			objItem.toggleClass("unite-item-closed");

			

		});

		

		//delete

		

		objWrapper.on("click", ".unite-repeater-buttondelete", function(){

			

			var objButton = jQuery(this);

			var objItem = objButton.parents(".unite-repeater-item");

			objItem.remove();

			

			var numItems = objItemsWrapper.children().length;

			if(numItems == 0)

				objEmptyText.show();

			

			t.onSettingChange(null, objWrapper);

			

		});

		

		objWrapper.on("click", ".unite-repeater-buttonduplicate", function(){

						

			var objButton = jQuery(this);

			var objItem = objButton.parents(".unite-repeater-item");

			

			objItem.data("just_moved",true);

			

			var itemSettings = objItem.data("objsettings");

			var settingsValues = itemSettings.getSettingsValues();

			

			repeaterAddItem(null, objWrapper, settingsValues, objItem);

						

		});

		

	}

	

	

	/**

	 * init repeaters globally

	 */

	function initRepeaters(){

		

		var objRepeaters = g_objWrapper.find(".unite-settings-repeater");

		if(objRepeaters.length == 0)

			return(false);

		

		g_temp.isRepeaterExists = true;

		

	}

	

	function _______DIMENTIONS_____(){}

	

	

	/**

	 * get dimentions setting value

	 */

	function dimentionsGetValues(objWrapper){

		

		var objAllInputs = objWrapper.find("input");

		var objUnits = objWrapper.find("select");

		

		var data = {};

		

		objAllInputs.each(function(index, input){

			var objInput = jQuery(input);

			var value = objInput.val();

			var pos = objInput.data("pos");

			

			data[pos] = value;

		});

		

		data["unit"] = objUnits.val();

		

		return(data);

	}

	

	

	

	function _______CONTROLS_____(){}

	

	/**

	 * get control action, according all the parents of the controlled children

	 * isSingle == true - don't do recursion

	 */

	function getControlAction(parent, control){

				

		var isEqual = iscValEQ(parent.value, control.value);

		

		var action = null;

		

		switch(control.type){

			case "enable":

			case "disable":

		

				if(control.type == "enable" && !isEqual || control.type == "disable" && isEqual)

					action = "disable";

				else

					action = "enable";

			break;

			case "show":

				if(isEqual) 

					action = "show";

				else 

					action = "hide";

			break;

			case "hide":

				if(isEqual) 

					action = "hide";

				else 

					action = "show";

			break;

		}	

				

		return(action);

	}

	

	

	/**

	 * get action of multiple parents

	 */

	function getControlActionMultiple(parent, control, arrParents){

		

		if(g_temp.cacheValues == null)

			g_temp.cacheValues = t.getSettingsValues(true);

				

		var isShow = null;

		var isEnable = null;

		

		var action = "";

		var mainAction = "";

		

		jQuery.each(arrParents, function(index, parentID){

			

			//get action

			if(parentID == parent.id){

				action = getControlAction(parent, control);

				mainAction = action;

			}

			else{

				var objControl = g_arrControls[parentID][control.idChild];

				

				var parentValue = g_temp.cacheValues[parentID];

				

				var objParent = {

						id: parentID, 

						value: parentValue

				};

				

				action = getControlAction(objParent, objControl);

				

			}

			

			switch(action){

				case "show":

					if(isShow === null)

						isShow = true;

				break;

				case "hide":

					isShow = false;

				break;

				case "enable":

					if(isEnable === null)

						isEnable = true;

				break;

				case "disable":

					isEnable = false;

				break;

			}

			

		});



		if(isEnable === null && isShow === null)

			return(null);

			

		var outputShow = (isShow === true)?"show":"hide";

		var outputEnable = (isEnable === true)?"enable":"disable";

		

		if(isEnable !== null && isShow !== null){

			if(mainAction == "show" || mainAction == "hide")

				return(outputShow);

			else

				return(outputEnable);

		}

		

		if(isShow !== null)

			return(outputShow);

		

		return(outputEnable);

	}

	

	

	/**

	 * on selects change - impiment the hide/show, enabled/disables functionality

	 */

	function onControlSettingChange(event, input){

		

		if(!input)

			input = this;

		

		var controlValue = input.value.toLowerCase();

		var controlID = input.name;

		

		

		if(!g_arrControls[controlID]) 

			return(false);

		

		g_temp.cacheValues = null;

		

		var arrChildControls = g_arrControls[controlID];

		

		var objParent = {

				id: controlID,

				value: controlValue

		};

		

		jQuery.each(arrChildControls, function(childName, objControl){

			

			var objChildInput = jQuery(g_IDPrefix + childName);

			

			var rowID = g_IDPrefix + childName + "_row";

			

			var objChildRow = jQuery(rowID);

			

			if(objChildRow.length == 0)

				return(true);

			

			var value = objControl.value;

			

			objControl.idChild = childName;

			

			//check multiple parents

			var arrParents = g_ucAdmin.getVal(g_arrChildrenControls, childName);

			if(arrParents)

				var action = getControlActionMultiple(objParent, objControl, arrParents);

			else

				var action = getControlAction(objParent, objControl);

			

			

			var inputTagName = "";

			if(objChildInput.length)

				inputTagName = objChildInput.get(0).tagName;

			

			var isChildRadio = (inputTagName == "SPAN" && objChildInput.length && objChildInput.hasClass("radio_wrapper"));

			

			switch(objControl.type){

				case "enable":

				case "disable":

					

					if(objChildInput.length > 0){

						

						//disable

						if(action == "disable"){

							

							objChildRow.addClass("setting-disabled");

							

							if(objChildInput.length)

								objChildInput.prop("disabled","disabled").css("color","");

							

							if(isChildRadio)

								objChildInput.children("input").prop("disabled","disabled").addClass("disabled");

							

							if(objChildInput.length && objChildInput.hasClass("unite-color-picker") && g_temp.colorPickerType == "spectrum")

								objChildInput.spectrum("disable");

							

						}//enable						

						else{	

							

							objChildRow.removeClass("setting-disabled");

							

							if(objChildInput.length)

								objChildInput.prop("disabled","");

							

							if(isChildRadio)

								objChildInput.children("input").prop("disabled","").removeClass("disabled");

							

							//color the input again

							if(objChildInput.length && objChildInput.hasClass("unite-color-picker")){

								

								if(g_colorPicker)

									g_colorPicker.linkTo(objChildInput);

								else if(g_temp.colorPickerType == "spectrum")

									objChildInput.spectrum("enable");

								

							}

		 				}

						

					}

				break;

				case "show":

				case "hide":

					

					if(action == "show") 

						objChildRow.removeClass("unite-setting-hidden");

					else 

						objChildRow.addClass("unite-setting-hidden");

					

				break;

			}

			

		});

	}

	

	

	/**

	 * apply controls if available

	 */

	function applyControls(){

				

		if(!g_objParent)

			return(false);

		

		g_objParent.find("select").trigger("change");

		g_objParent.find("input[type='radio']:checked").trigger("change");

		

	}

	

	

	

	function _______EVENTS_____(){}

	

	

	/**

	 * update events (in case of ajax set)

	 */

	this.updateEvents = function(){

		

		initSettingsEvents();

		

		initTipsy("s");

		

		if(typeof g_objProvider.onSettingsUpdateEvents == "function")

			g_objProvider.onSettingsUpdateEvents(g_objParent);

		

	};



	

	/**

	 * set on change event, this function should run before init

	 */

	this.setEventOnChange = function(func){

		

		t.onEvent(t.events.CHANGE, func);

	};

	

	

	/**

	 * update input child placeholders if avilable

	 */

	function updateInputChildPlaceholders(objInput){

				

		if(!objInput)

			return(false);

		

		if(objInput.length == 0)

			return(false);

		

		var type = getInputType(objInput);

		if(type == "range")

			objInput = getRangeInput(objInput);

		

		var arrPlaceholderGroup = objInput.data("placeholder_group");

		

		if(!arrPlaceholderGroup)

			return(false);

		

		if(jQuery.isArray(arrPlaceholderGroup) == false)

			return(false);

				

		var valuePrev = "";

		

		jQuery.each(arrPlaceholderGroup, function(index, inputID){

			

			var objChildInput = jQuery("#" + inputID);

			if(objChildInput.length == 0)

				throw new Error("input not found with id: " + inputID);

							

			if(index > 0){

				

				objChildInput.attr("placeholder", valuePrev);

				objChildInput.trigger("placeholder_change");

			}

			

			var value = objChildInput.val();

			if(value !== "")

				valuePrev = value;

						

			

		});

		

		

	}

	

	

	/**

	 * run on setting change

	 */

	this.onSettingChange = function(event, objInput, isInstantChange){

				

		if(g_temp.enableTriggerChange == false)

			return(true);

		

		var dataOldValue = "unite_setting_oldvalue";

		if(isInstantChange == true)

			dataOldValue = "unite_setting_oldvalue_instant";

		

		if(!objInput)

			var objInput = jQuery(event.target);

				

		var type = getInputType(objInput);

		

		if(!type)

			return(true);

		

		

		if(type == "color")

			checkColorInputOnchange(objInput);

		

		var value = getSettingInputValue(objInput);

				

		switch(type){

			case "radio":

			case "select":

			case "fonts":

			case "items":

			case "map":

			break;

			default:

				//check by value

				var oldValue = objInput.data(dataOldValue);

				

				if(value === oldValue)

					return(true);

				

				objInput.data(dataOldValue, value);

			break;

		}

				

		//trigger event

		

		var eventToTrigger = t.events.CHANGE;

		if(isInstantChange == true)

			eventToTrigger = t.events.INSTANT_CHANGE;

		

		var name = getInputName(objInput);

		

		triggerEvent(eventToTrigger, {"name": name, "value": value});

	};



	

	

	/**

	 * trigger event

	 */

	function triggerEvent(eventName, params){

		if(!params)

			var params = null;

		

		if(g_objParent)

			g_objParent.trigger(eventName, params);

	}

	

	

	/**

	 * on event name

	 */

	this.onEvent = function(eventName, func){

		validateInited();				

		

		g_objParent.on(eventName,func);

	};



	

	/**

	 * combine controls to one object, and init control events.

	 */

	function initControls(){

		

		if(!g_objWrapper)

			return(false);

		

		var objControls = g_objWrapper.data("controls");

		

		if(!objControls)

			return(false);

		

		g_objWrapper.removeAttr("data-controls");

		

		g_arrControls = objControls.parents;

		g_arrChildrenControls = objControls.children;

		

		

		//init events

		g_objParent.find("select, input[type='radio'], input.unite-setting-addonpicker").change(onControlSettingChange);

		

	}

	

	

	

	/**

	 * init image chooser

	 */

	this.initImageChooser = function(objImageSettings){

				

		if(objImageSettings.length == 0)

			return(false);

		

		objImageSettings.find(".unite-setting-image-preview").on("click",onChooseImageClick);

		objImageSettings.find(".unite-button-choose").on("click",onChooseImageClick);

		objImageSettings.find(".unite-button-clear").on("click",onClearImageClick);

		

		var objInput = objImageSettings.find("input");

		

		objInput.change(setImagePreview);

	};

	

	

	/**

	 * init mp3 chooser

	 */

	this.initMp3Chooser = function(objMp3Setting){



		if(objMp3Setting.length == 0)

			return(false);

		

		

		objMp3Setting.find(".unite-button-choose").on("click",onChooseMp3Click);

	};

	

	

	

	/**

	 * trigger on keyup

	 */

	this.triggerKeyupEvent = function(objInput, event, funcChange){

		

		if(!funcChange)

			funcChange = t.onSettingChange;

		

		if(g_temp.enableTriggerChange == false)

			return(true);

		

		//run instant

		funcChange(event, objInput, true);

		

		g_ucAdmin.runWithTrashold(funcChange, event, objInput);

		

	};

	

	

	/**

	 * init single input event

	 */

	function initInputEvents(objInput, funcChange){

				

		if(!funcChange)

			funcChange = t.onSettingChange;

		

		var type = getInputType(objInput);

		var basicType = getInputBasicType(objInput);

				

		//init by type

		switch(type){

			case "color":

				initColorPickerInputEvents(objInput, funcChange);

			break;

			case "icon":

				initIconPicker(objInput);

			break;

			case "range":

				initRangeInput(objInput, funcChange);

			break;

			case "map":

				initMapPicker(objInput);

			break;

			case "addon":

				initAddonPicker(objInput);

			break;

			case "repeater":

				initRepeater(objInput);

			break;

			case "post":

				initPostPicker(objInput);

			break;

			case "multiselect":

				objInput.on("input", funcChange);

			break;

			default:

				

				//custom setting

				var objCustomType = getCustomSettingType(type);

				if(objCustomType){

					if(objCustomType.funcInit)

						objCustomType.funcInit(objInput, t);

				}

				else	//provider setting

					g_ucAdmin.initProviderSettingEvents(type, objInput);

				

			break;

		}

		

		//init by base type

		switch(basicType){

			case "checkbox":

			case "radio":

				objInput.on("click",funcChange);

			break;

			case "div":		//special types

				

			break;

			default:

								

				objInput.change(funcChange);

				

				objInput.on("keyup", function(event){

					t.triggerKeyupEvent(objInput, event, funcChange);

				});

			break;

		}

		

	}

	

	

	/**

	 * init settings events

	 */

	function initSettingsEvents(){

				

		var objInputs = getObjInputs();

				

		jQuery.each(objInputs, function(index, input){

			var objInput = jQuery(input);

						

			initInputEvents(objInput);

		});

		

		

		//init image input events

		var objImageSettings = g_objParent.find(".unite-setting-image");

		t.initImageChooser(objImageSettings);

		

		//init mp3 input events

		var objMp3Settings = g_objParent.find(".unite-setting-mp3");

		t.initMp3Chooser(objMp3Settings);

		

		initControls();

	}

	

	

	/**

	 * init global events - not repeating

	 */

	function initGlobalEvents(){

		

		g_ucAdmin.onEvent("update_assets_path", onUpdateAssetsPath);

		

	}

	

	

	/**

	 * init options

	 */

	function initOptions(){

		

		if(!g_objWrapper)

			return(false);

		

		var objOptions = g_objWrapper.data("options");

		

		if(typeof objOptions != "object")

			throw new Error("The options should be an object");

		

		g_objWrapper.removeAttr("data-options");

		

		var arrOptions = ["show_saps","saps_type","id_prefix"];

		

		jQuery.each(arrOptions, function(index, optionKey){

			g_options[optionKey] = g_ucAdmin.getVal(objOptions, optionKey, g_options[optionKey]);

			

			//delete option key

			objOptions[optionKey] = true;

			delete objOptions[optionKey];

			

		});

		

		//merge with other options

		jQuery.extend(g_options, objOptions);

				

		if(g_options["id_prefix"])

			g_IDPrefix = "#"+g_options["id_prefix"];

		

	}

	

	/**

	 * update placeholders

	 */

	this.updatePlaceholders = function(objPlaceholders){

		

		if(!g_objParent)

			return(false);

		

		jQuery.each(objPlaceholders, function(key, value){

			

			var objInput = t.getInputByName(key);

			if(!objInput)

				return(true);

			

			objInput.attr("placeholder", value);

			objInput.trigger("placeholder_change");

		});

		

	};

	

	/**

	 * focus first input

	 */

	this.focusFirstInput = function(){

		

		var objInputs = getObjInputs();

		

		jQuery.each(objInputs, function(index, input){

			var objInput = jQuery(input);

			var type = getInputType(objInput);

			switch(type){

				case "textarea":

				case "text":

					objInput.focus();

					return(false);

				break;

			}

		});

	};

	

	

	

	/**

	 * destroy settings object

	 */

	this.destroy = function(){

				

		g_ucAdmin.offEvent("update_assets_path");



		var objInputs = g_objParent.find("input,textarea,select").not("input[type='radio']");

		

		objInputs.off("change");

		

		var objInputsClick = g_objParent.find("input[type='radio']");

		objInputsClick.off("click");

				

		var objImageSettings = g_objParent.find(".unite-setting-image");

		

		//destroy image events:

		if(objImageSettings.length){

			

			objImageSettings.find(".unite-button-choose").off("click");

			objImageSettings.find(".unite-button-clear").off("click");

			objImageSettings.find("input").off("change");

		}

		

		//destroy control events

		g_objParent.find("select, input").off("change");

		

		//destroy loaded events

		g_objParent.off(t.events.CHANGE);

		

		//destroy tabs events

		if(g_objSapTabs)

			g_objSapTabs.children("a").off("click");

		

		//destroy accordion events

		if(g_objWrapper){

			var objAccordionItems = g_objWrapper.find(".unite-postbox .unite-postbox-title");

			if(objAccordionItems.length)

				objAccordionItems.off("click");

		}

		

		g_objProvider.destroyEditors(t);

		

		//null parent object so it won't pass the validation

		if(g_objParent.length){

			g_objParent.html("");

		}

		

		//destroy items manager

		if(g_temp.objItemsManager){

			g_temp.objItemsManager.destroy();

			g_temp.objItemsManager = null;

			g_objParent.find(".uc-setting-items-panel-button").off("click");

		}

		

		if(g_temp.objFontsPanel)

			t.destroyFontsPanel();

		

		if(g_temp.isRepeaterExists == true)

			t.destroyRepeaters();

		

		

		//destroy icon pickers

		g_objParent.find(".unite-settings-iconpicker input").off("blur");

		g_objParent.find(".unite-iconpicker-button").off("blur");

		

		//destroy custom setting types

		var objCustomTypes = getCustomSettingType();

		if(objCustomTypes){

			jQuery.each(objCustomTypes, function(index, objType){

				

				if(objType.funcDestroy && g_objParent && g_objParent.length)

					objType.funcDestroy(g_objParent);

				

			});

		}

		

		//destroy addon picker

		g_objParent.find(".unite-addonpicker-button").off("click");

		

		g_objParent.find(".unite-button-primary, .unite-button-secondary").off("click");

		

		g_objParent = null;

	};

	

	

	/**

	 * set id prefix

	 */

	this.setIDPrefix = function(idPrefix){

		g_IDPrefix = "#"+idPrefix;

	};

	

	

	/**

	 * get id prefix

	 */

	this.getIDPrefix = function(){

		

		return(g_IDPrefix);

	};

	

	/**

	 * get wrapper

	 */

	this.getObjWrapper = function(){

		

		return(g_objParent);

	};

	

	/**

	 * return if the settings are in sidebar

	 */

	this.isSidebar = function(){

		return(g_temp.isSidebar);

	};

	

	

	/**

	 * run custom command

	 */

	this.runCommand = function(command){

				

		switch(command){

			case "open_items_panel":

				var objButton = g_objParent.find(".uc-setting-items-panel-button");

				if(objButton.length)

					objButton.trigger("click");

			break;

		}

		

	};

	

	

	

	

	/**

	 * add custom type

	 * fields: type, funcInit, funcSetValue, funcGetValue, funcClearValue

	 */

	this.addCustomSettingType = function(type, objType){

		

		g_ucAdmin.validateObjProperty(objType, ["funcInit",

                               "funcSetValue",

                               "funcGetValue",

                               "funcClearValue",

                               "funcDestroy",

		 ],"custom setting type object");

					

		var objCustomSettings = getCustomSettingType();

		

		var existing = g_ucAdmin.getVal(objCustomSettings, type);

		if(existing)

			throw new Error("The custom settings type: "+type+" alrady exists");

		

		objCustomSettings[type] = objType;

		

		g_ucAdmin.storeGlobalData(g_temp.customSettingsKey, objCustomSettings);

	};

	

	

	

	/**

	 * init the settings function, set the tootips on sidebars.

	 */

	this.init = function(objParent){

				

		if(!g_ucAdmin)

			g_ucAdmin = new UniteAdminUC();

		

				

		g_objParent = objParent;

		

		if(g_objParent.length > 1){

			

			trace(g_objParent);

			throw new Error("Settings object can't be inited with too many parents");

		}

		

		//init settings wrapper

		if(g_objParent.hasClass("unite_settings_wrapper") == true)

			g_objWrapper = g_objParent;

		else{

			g_objWrapper = g_objParent.children(".unite_settings_wrapper");

		}

		

		if(g_objWrapper.length == 0)

			g_objWrapper = g_objParent.parents(".unite_settings_wrapper");

		

		if(g_objWrapper.length == 0)

			g_objWrapper = null;

		

		//set if sidebar

		if(g_objWrapper && g_objWrapper.hasClass("unite-settings-sidebar"))

			g_temp.isSidebar = true;

		

		if(g_objWrapper)

			g_temp.settingsID = g_objWrapper.prop("id");

		

		g_temp.enableTriggerChange = false;

		

		validateInited();

		

		initOptions();

		

		initColorPicker();	//put the color picker automatically

		

		initAnimationsSelector();

		

		initItemsPanel();

		

		initRepeaters();

		

		t.initFontsPanel();

		

		initGlobalEvents();

		

		t.updateEvents();

		

		initSaps();

				

		t.clearSettingsInit();

		

		g_objProvider.initEditors(t);

		

		g_temp.isInited = true;



		g_temp.enableTriggerChange = true;

		

	};





} // UniteSettings class end




Youez - 2016 - github.com/yon3zu
LinuXploit