// NOTE: [This JS must loaded as last item]
JSTOOL_CUSTOMIZE.CUSTOMIZER = function(){};

	// ===============================================================
	// Part 0 : Initialize Form
	// ===============================================================	
	JSTOOL_CUSTOMIZE.CUSTOMIZER.IS_READY = false;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.ID = 0;

	JSTOOL_CUSTOMIZE.CUSTOMIZER.SAVE_CMD = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CLEAR_CMD = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CLOSE_CMD = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.LINK_HERE = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.LINK_ROOT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.LINK_MOVE_UP = null;
		
	JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_TXT = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.READONLY_CMB = null;
	JSTOOL_CUSTOMIZE.CUSTOMIZER.DISABLED_CMB = null;	
			
	JSTOOL_CUSTOMIZE.SHOWHIDE.INPUT_INSTANCE = null;
	JSTOOL_CUSTOMIZE.SHOWHIDE.INPUT_INSTANCE_EDIT = null;
	JSTOOL_CUSTOMIZE.SHOWHIDE.CONFIG_URL = null;
	JSTOOL_CUSTOMIZE.SHOWHIDE.TOOL_TITLE = 'ELEMENT_SHOW';
	
	
	/**
	 * For blocking unsupported functionalities
	 */
	JSTOOL_CUSTOMIZE.CUSTOMIZER.LOCK_EDIT = function(IS_ENABLED)
	{
		if(IS_ENABLED == false)
		{
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CLEAR(true);
		}
		
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB, IS_ENABLED);

		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.READONLY_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.DISABLED_CMB, IS_ENABLED);
		JSOC_ELEMENT.VAR_ENABLED(JSTOOL_CUSTOMIZE.CUSTOMIZER.SAVE_CMD, IS_ENABLED);
	};
	
	
	/**
	 * 
	 */
	JSTOOL_CUSTOMIZE.CUSTOMIZER.CLEAR = function(KEEP_URL = false) 
	{
		JSTOOL_CUSTOMIZE.CUSTOMIZER.ID = 0;
		if(KEEP_URL == false)
		{
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT, "");
		}
		
		JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_TXT, "");
		JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_TXT, "");
				
		JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_TXT, "");
		JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_TXT, "");
		JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_TXT, "");
		JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_TXT, "");
		JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_TXT, "");
		
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB, "1");
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB, "1");
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB, "1");
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB, "1");
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB, "1");
		
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB, "1");
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB, "1");
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.READONLY_CMB, "1");
		JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.DISABLED_CMB, "1");
		
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB) > 0)
		{
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB.onchange();
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB.onchange();
			JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB.onchange();
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB.onchange();
			JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB.onchange();
			JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB.onchange();
			JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB.onchange();
		}
	};
	
	
	/**
	 * Load data from the selected access level and element id
	 */
	JSTOOL_CUSTOMIZE.CUSTOMIZER.LOAD = function()
	{
		// Load from cache, if not cached, load from presfilled data
		// _______________________________________________________________________
		if(JSVC_VAR.VAR_ISSET(JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE) == false)
		{
			JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE = JSRC_JSON.REF_CREATE(JSCUS_SQL._CATEGORY._CUSTOMIZE.CUS_ME_QUICK()); 
		}
		
		// Filter out the settings
		// _______________________________________________________________________
		var JSON_CUSTOMIZER = JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE;
		if
		(
			JSVC_STR.VAR_IS_BLANK(JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT)) == false && 
			JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB) > 0 && 
			JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB) > 0
		)
		{
			if(JSVC_VAR.VAR_ISSET(JSON_CUSTOMIZER) && JSRC_JSON.REF_ISSET(JSON_CUSTOMIZER, "CAT_CUSTOM_ACC_LEVEL_ID"))
			{
				JSON_CUSTOMIZER = JSRC_JSON.REF_WHERE
				(
					JSON_CUSTOMIZER, "CAT_CUSTOM_ACC_LEVEL_ID", JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB)
				);
			}
			else
			{
				JSON_CUSTOMIZER = null;
			}
			
			// console.log(JSON_CUSTOMIZER);
			if(JSVC_VAR.VAR_ISSET(JSON_CUSTOMIZER) && JSRC_JSON.REF_ISSET(JSON_CUSTOMIZER, "CAT_CUSTOM_SSTRING"))
			{
				JSON_CUSTOMIZER = JSRC_JSON.REF_WHERE
				(
					JSON_CUSTOMIZER, "CAT_CUSTOM_SSTRING", JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB)
				);
			}
			else
			{
				JSON_CUSTOMIZER = null;
			}
						
			// console.log(JSON_CUSTOMIZER);
			JSTOOL_CUSTOMIZE.CUSTOMIZER.LOCK_EDIT(true);
		}
		else
		{
			JSTOOL_CUSTOMIZE.CUSTOMIZER.LOCK_EDIT(false);
			return;
		}
		
		// No stored settings, Clear Data
		// _______________________________________________________________________
		if(JSVC_VAR.VAR_ISSET(JSON_CUSTOMIZER) == false || JSON_CUSTOMIZER['JSON_COUNT'] <= 0)
		{
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CLEAR(true);
			return;
		}			
		
		
		// Load Existing Data
		// _______________________________________________________________________
		var SCRIPT_DATA = JSON_CUSTOMIZER['CAT_CUSTOM_LSTRING']['1'];
		var OPTION_ELEMENT = null;
		var SCRIPT_LINE = "";		
		JSTOOL_CUSTOMIZE.CUSTOMIZER.ID = JSON_CUSTOMIZER['CAT_CUSTOM_ID']['1'];
		
				
		// Load : CSS Style
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:CSS_STYLE>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:CSS_STYLE>', '</CMIZER:CSS_STYLE>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_TXT, SCRIPT_LINE);
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 2);
			}
			else
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 1);
			}
			OPTION_ELEMENT.onchange();
		}
		
		// Load : CSS Class
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:CSS_CLASS>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:CSS_CLASS>', '</CMIZER:CSS_CLASS>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_TXT, SCRIPT_LINE);
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 2);
			}
			else
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 1);
			}
			OPTION_ELEMENT.onchange();
		}
		
		// Load : Title
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:TITLE>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:TITLE>', '</CMIZER:TITLE>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_TXT, SCRIPT_LINE);
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 2);
			}
			else
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 1);
			}
			OPTION_ELEMENT.onchange();
		}		

		// Load : Caption
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:CAPTION>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:CAPTION>', '</CMIZER:CAPTION>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_TXT, SCRIPT_LINE);
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 2);
			}
			else
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 1);
			}
			OPTION_ELEMENT.onchange();
		}		
		
		// Load : Placeholder
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:PLACEHOLDER>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:PLACEHOLDER>', '</CMIZER:PLACEHOLDER>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_TXT, SCRIPT_LINE);
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 2);
			}
			else
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 1);
			}
			OPTION_ELEMENT.onchange();
		}		
		
		// Load : Data-Format
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:DATA-FORMAT>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:DATA-FORMAT>', '</CMIZER:DATA-FORMAT>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_TXT, SCRIPT_LINE);
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 2);
			}
			else
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 1);
			}
			OPTION_ELEMENT.onchange();
		}	

		// Load : Step
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:STEP>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:STEP>', '</CMIZER:STEP>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_TXT, SCRIPT_LINE);
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 2);
			}
			else
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, 1);
			}
			OPTION_ELEMENT.onchange();
		}	
		
		// Load : Readonly
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:READONLY>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.READONLY_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:READONLY>', '</CMIZER:READONLY>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, SCRIPT_LINE);
			}
		}	

		// Load : Disabled
		// _______________________________________________________________________
		if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:DISABLED>'))
		{
			OPTION_ELEMENT = JSTOOL_CUSTOMIZE.CUSTOMIZER.DISABLED_CMB;
			SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:DISABLED>', '</CMIZER:DISABLED>');
			
			if(JSVC_STR.VAR_IS_BLANK(SCRIPT_LINE) == false)
			{
				JSOC_CMB.VAR_SELECTED_VALUE(OPTION_ELEMENT, SCRIPT_LINE);
			}
		}		
				
	};
	

	// ===============================================================
	// Part 1 : Initialize Form
	// ===============================================================
	
	/**
	 *	Show Customer Selection modal
	 *	@param CALLBACK_METHOD Optional Callback on successful action. Method(ID, DESCRIPTION)
	 *	@param CALLBACK_CONTROL Optional Modal will assign a value to a element on success.
	 */	
	JSTOOL_CUSTOMIZE.CUSTOMIZER.SHOW = function()
	{
		// Initialize
		// _______________________________________________________________________
		if(JSTOOL_CUSTOMIZE.CUSTOMIZER.IS_READY == false)
		{  			
			// Manage Lock / Unlock Mode
			// ...........................................
			var ACTION_ON_OFF = function(ELEMENT_TXT, ELEMENT_CMB)
			{
				if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(ELEMENT_CMB) == 2)
				{
					JSOC_ELEMENT.VAR_READONLY(ELEMENT_TXT, false);
					return true;
				}
				else
				{
					JSOC_ELEMENT.VAR_READONLY(ELEMENT_TXT, true);
					return false;
				}			
			};
			
			// Initialize: Input Button
			// ...........................................
			JSTOOL_CUSTOMIZE.CUSTOMIZER.SAVE_CMD = JSCUS_PG._TOOL.APPLY_BUTTON_SETUP
			(
				"PSCLIB_CUSTOMIZER_MODAL_APPLY_CMD", function()
				{
					JSTOOL_CUSTOMIZE.CUSTOMIZER.DIALOG_SAVE();
				}
			);
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CLEAR_CMD = JSCUS_PG._TOOL.APPLY_BUTTON_SETUP
			(
				"PSCLIB_CUSTOMIZER_MODAL_CLEAR_CMD", function()
				{
					JSTOOL_CUSTOMIZE.CUSTOMIZER.CLEAR();
					JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT.onchange();
				}
			);
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CLOSE_CMD = JSCUS_PG._TOOL.APPLY_BUTTON_SETUP
			(
				"PSCLIB_CUSTOMIZER_MODAL_CLOSE_CMD", function()
				{
					JSOC_DIALOG.VAR_MODAL("PSCLIB_CUSTOMIZER_MODAL", false);
				}
			);
			
			
			// Initialize: URL Quick Buttons
			// ...........................................
			JSTOOL_CUSTOMIZE.CUSTOMIZER.LINK_HERE = JSCUS_PG._TOOL.APPLY_BUTTON_SETUP
			(
				"PSCLIB_CUSTOMIZER_LINK_HERE_CMD", function()
				{
					JSOC_ELEMENT.VAR_VALUE
					(
						JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT, 
						JSVC_STR.VAR_DLEFT(JSVC_URL._CURRENT.VAR_URL(), JSCUS_CACHE.SERVER_URL.length)
					);
					JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT.onchange();
				}
			);
			
			JSTOOL_CUSTOMIZE.CUSTOMIZER.LINK_ROOT = JSCUS_PG._TOOL.APPLY_BUTTON_SETUP
			(
				"PSCLIB_CUSTOMIZER_LINK_ROOT_CMD", function()
				{
					JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT, '/p/');
					JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT.onchange();
				}
			);
			
			JSTOOL_CUSTOMIZE.CUSTOMIZER.LINK_MOVE_UP = JSCUS_PG._TOOL.APPLY_BUTTON_SETUP
			(
				"PSCLIB_CUSTOMIZER_LINK_MOVE_UP_CMD", function()
				{
					// Initialize
					// ***********************************
					var URL_DATA = JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT); 	
					var LAST_INDEX = URL_DATA.lastIndexOf("/");
					
					// Last character is '/'
					// ***********************************
					if(URL_DATA.length == LAST_INDEX + 1 && URL_DATA.length > 1)
					{
						URL_DATA = JSVC_STR.VAR_DRIGHT(URL_DATA, 1);
						LAST_INDEX = URL_DATA.lastIndexOf("/");
					}
					
					// Move one level up
					// ***********************************
					if(LAST_INDEX > 0)
					{
						JSOC_ELEMENT.VAR_VALUE
						(
							JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT, 
							JSVC_STR.VAR_LEFT(URL_DATA, LAST_INDEX + 1)
						);
					}
					JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT.onchange();
				}
			);
			
			
			// Initialize: Input Level, Element Selector
			// ...........................................
			JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_ACC_LEVEL_ID_CMB', null, function(){JSTOOL_CUSTOMIZE.CUSTOMIZER.LOAD();}
			);
			JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_CAT_CUSTOM_URL_TXT', null, function(){JSTOOL_CUSTOMIZE.CUSTOMIZER.LOAD();}
			);
			JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_CAT_CUSTOM_SSTRING_CMB', null, function(){JSTOOL_CUSTOMIZE.CUSTOMIZER.LOAD();}
			);
			
			
			// Populate Element Lists
			// ...........................................
			var SUB_ELEMENT = JSOC_ELEMENT.VAR_SUB_ELEMENTS(document.body, true, true);
			SUB_ELEMENT = JSVC_ARR.VAR_SORT(SUB_ELEMENT, "ASC");
			
			JSOC_CMB.VAR_ADD(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB, "-1", "-");				
			while(SUB_ELEMENT.length > 0)
			{
				if
				(
					JSVC_STR.VAR_CONTAINS_LEFT(SUB_ELEMENT[0], 'DGVCALC_') == false &&
					JSVC_STR.VAR_CONTAINS_LEFT(SUB_ELEMENT[0], 'DGVREORDER_') == false &&
					JSVC_STR.VAR_CONTAINS_LEFT(SUB_ELEMENT[0], 'PSCLIB_') == false &&
					JSVC_STR.VAR_CONTAINS_LEFT(SUB_ELEMENT[0], 'RECAPTION_') == false &&
					JSVC_STR.VAR_CONTAINS_LEFT(SUB_ELEMENT[0], 'SHOWHIDE_') == false
				)
				{
					JSOC_CMB.VAR_ADD
					(
						JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB, 
						(JSOC_CMB.VAR_COUNT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB) + 1).toString(), 
						SUB_ELEMENT[0]
					);					
				}
				SUB_ELEMENT.shift();
			}
			$('.BSSP_' + JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB.id).selectpicker('refresh');
							
						
			// Initialize: Input CSS-Style
			// ...........................................
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_TXT = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_CSS_STYLE_TXT');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_CSS_STYLE_CMB', null, function()
				{
					if(ACTION_ON_OFF(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_TXT, JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB) == false)
					{
						JSOC_ELEMENT.VAR_VALUE
						(
							JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_TXT, 
							JSOC_STYLE.VAR_STYLE(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB))
						);				
					}
				}
			);


			// Initialize: Input CSS-Class
			// ...........................................	
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_TXT = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_CSS_CLASS_TXT');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_CSS_CLASS_CMB', null, function()
				{
					if(ACTION_ON_OFF(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_TXT, JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB) == false)
					{
						JSOC_ELEMENT.VAR_VALUE
						(
							JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_TXT, 
							JSOC_STYLE.VAR_CLASS(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB))
						);				
					}				
				}
			);
	
			
			// Initialize: Input Title
			// ...........................................		
			JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_TXT = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_TITLE_TXT');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_TITLE_CMB', null, function()
				{
					var v = JSOC_ELEMENT.VAR_GET(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB));
						
					if
					(
						ACTION_ON_OFF(JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_TXT, JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB) == false &&
						v.hasAttribute('placeholder')
					)
					{
						JSOC_ELEMENT.VAR_VALUE
						(
							JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_TXT, 
							JSOC_ELEMENT.VAR_INNER_HTML(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB))
						);				
					}				
				}
			);
			
	
			// Initialize: Input Caption
			// ...........................................			
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_TXT = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_CAPTION_TXT');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_CAPTION_CMB', null, function()
				{
					if(ACTION_ON_OFF(JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_TXT, JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB) == false)
					{
						JSOC_ELEMENT.VAR_VALUE
						(
							JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_TXT, 
							JSOC_ELEMENT.VAR_INNER_HTML(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB))
						);				
					}				
				}
			);
			
			
			// Initialize: Input Placeholder
			// ...........................................	
			JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_TXT = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_PLACEHOLDER_TXT');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_PLACEHOLDER_CMB', null, function()
				{
					var v = JSOC_ELEMENT.VAR_GET(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB));
					if
					(
						ACTION_ON_OFF(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_TXT, JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB) == false &&
						v.hasAttribute('placeholder')
					)
					{
						JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_TXT, v.placeholder);				
					}				
				}
			);
			
			
			// Initialize: Input Data-Format
			// ...........................................	
			JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_TXT = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_DATA_FORMAT_TXT');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_DATA_FORMAT_CMB', null, function()
				{
					var v = JSOC_ELEMENT.VAR_GET(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB));
					if
					(
						ACTION_ON_OFF(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_TXT, JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB ) == false &&
						v.hasAttribute('data-format')
					)
					{
						JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_TXT, v.hasAttribute('data-format'));				
					}						
				}
			);


			// Initialize: Input Step
			// ...........................................	
			JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_TXT = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_STEP_TXT');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB = JSCUS_PG._TOOL.APPLY_COMMON_SETUP
			(
				'PSCLIB_CUSTOMIZER_STEP_CMB', null, function()
				{
					var v = JSOC_ELEMENT.VAR_GET(JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB));
					if
					(
						ACTION_ON_OFF(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_TXT, JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB) == false &&
						v.hasAttribute('step')
					)
					{
						JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_TXT, v.hasAttribute('step'));				
					}						
				}
			);
	
	
			// Initialize: Input ReadOnly / Disabled Status
			// ...........................................			
			JSTOOL_CUSTOMIZE.CUSTOMIZER.READONLY_CMB = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_READONLY_CMB');
			JSTOOL_CUSTOMIZE.CUSTOMIZER.DISABLED_CMB = JSOC_ELEMENT.VAR_GET('PSCLIB_CUSTOMIZER_DISABLED_CMB');	
			
									
			// Foreign Field
			// ...........................................
			JSOC_CMB.VAR_CLEAR(JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB);
			JSOC_CMB.VAR_ADD_FROM_JSON
			(
				JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB,
				JSRC_JSON.REF_CREATE(JSCUS_SQL._ACCOUNT._LEVEL.CUS_GET_QUICK()),
				"ACC_LEVEL_ID",
				"ACC_LEVEL_DESCRIPTION",
				false,
				false
			);
			JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB, "1");
			JSOC_CMB.VAR_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB, JSOC_CMB.VAR_SELECTED_INDEX(JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB), '-- EVERYONE -- ');
			$('.BSSP_' + JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB.id).selectpicker('refresh');
			
			
			// Set Default URL
			// ...........................................
			JSTOOL_CUSTOMIZE.CUSTOMIZER.LINK_HERE.onclick();
		}
		
		
		// Load Modal, set to default value
		// _______________________________________________________________________
		JSOC_DIALOG.VAR_MODAL("PSCLIB_CUSTOMIZER_MODAL", true);
		JSTOOL_CUSTOMIZE.CUSTOMIZER.LOCK_EDIT(false);
	};

	// ===============================================================
	// Part 4 : Save Current Config
	// ===============================================================	
	JSTOOL_CUSTOMIZE.CUSTOMIZER.DIALOG_SAVE = function()
	{
		// Initialize
		// _______________________________________________________________________
		var CUSTOMIZATION_SCRIPT = "";
		
		
		// Prepare Script : CSS Style
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_CMB) == 2)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:CSS_STYLE>' + 
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_STYLE_TXT) + 
			'</CMIZER:CSS_STYLE>';
		}

		// Prepare Script : CSS Class
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_CMB) == 2)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:CSS_CLASS>' + 
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CSS_CLASS_TXT) + 
			'</CMIZER:CSS_CLASS>';
		}
		
		// Prepare Script : Title
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_CMB) == 2)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:TITLE>' + 
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.TITLE_TXT) + 
			'</CMIZER:TITLE>';
		}
		
		// Prepare Script : Caption (InnerHTML)
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_CMB) == 2)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:CAPTION>' + 
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.CAPTION_TXT) + 
			'</CMIZER:CAPTION>';
		}		
		
		//  Prepare Script : Placeholder
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_CMB) == 2)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:PLACEHOLDER>' + 
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.PLACEHOLDER_TXT) + 
			'</CMIZER:PLACEHOLDER>';
		}		
		
		// Prepare Script : Data-Format
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_CMB) == 2)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:DATA-FORMAT>' + 
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.DATA_FORMAT_TXT) + 
			'</CMIZER:DATA-FORMAT>';
		}				
		
		// Prepare Script : Step
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_CMB) == 2)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:STEP>' + 
			JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.STEP_TXT) + 
			'</CMIZER:STEP>';
		}				

		// Prepare Script : ReadOnly
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.READONLY_CMB) != 1)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:READONLY>' + 
			JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.READONLY_CMB) + 
			'</CMIZER:READONLY>';
		}	
		
		// Prepare Script : Disabled
		// _______________________________________________________________________
		if(JSOC_CMB.VAR_SELECTED_VALUE_NVAL(JSTOOL_CUSTOMIZE.CUSTOMIZER.DISABLED_CMB) != 1)
		{
			CUSTOMIZATION_SCRIPT = CUSTOMIZATION_SCRIPT + 
			'<CMIZER:DISABLED>' + 
			JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.DISABLED_CMB) + 
			'</CMIZER:DISABLED>';
		}
	
		
		// Save item [Prepare]
		// _______________________________________________________________________
		var SAVE_MAP_ARRAY = JSCUS_SQL._CATEGORY._CUSTOMIZE.CUS_PREPARE_MAPPED_ARRAY_FOR_SAVE();
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_ID", JSTOOL_CUSTOMIZE.CUSTOMIZER.ID);				
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_URL", JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT));					
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_CODE", 'CUSTOMIZATION');					
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_DESCRIPTION", '-');					
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_LSTRING", CUSTOMIZATION_SCRIPT);					
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_SSTRING", JSOC_CMB.VAR_SELECTED_TEXT(JSTOOL_CUSTOMIZE.CUSTOMIZER.SSTRING_CMB));					
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_BIGINT", 0);
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_ACC_LEVEL_ID", JSOC_CMB.VAR_SELECTED_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.ACC_LEVEL_ID_CMB));	
		JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_CAT_CUSTOM_STATUS", 2);
		
		
		// Declare Post Request Handler
		// _______________________________________________________________________
		var RESPONSE_HANDLER = function(IS_SUCCESS, HTTP_RESPONSE)
		{
			// Disable Dialogs
			// ...........................................
			CUS_SEND_DIALOG_TRY_DISMISS();
			
			// Handle Error
			// ...........................................
			if(IS_SUCCESS === false)
			{
				METHOD_UNABLE_TO_SEND_REQUEST(function(){});	
				return;
			}
			
			// Catch JSON Error
			// ...........................................
			else if(JSRC_JSON.REF_IS_JSTRING(HTTP_RESPONSE) == false)
			{
				METHOD_SERVER_ISSUE(function(){}, HTTP_RESPONSE);
				return;			
			}
				
			// Read Response
			// ...........................................
			else
			{
				// Load Response
				// ***********************************
				var JSON_OBJECT = JSRC_JSON.REF_CREATE(HTTP_RESPONSE);
				if(JSRC_JSON.REF_IS_SUCCESS(JSON_OBJECT) === false)
				{
					METHOD_REQUEST_FAILURE(function(){}, JSON_OBJECT);
					return;
				}
				
				// Update Config
				// ***********************************
				GET_MAP_ARRAY = JSCUS_SQL._CATEGORY._CUSTOMIZE.CUS_PREPARE_MAPPED_ARRAY_FOR_GET();		
				JSVC_MAP_ARRAY.VAR_SET(GET_MAP_ARRAY, 'PARAM_CAT_CUSTOM_URL', JSOC_ELEMENT.VAR_VALUE(JSTOOL_CUSTOMIZE.CUSTOMIZER.URL_TXT));	
				JSVC_MAP_ARRAY.VAR_SET(GET_MAP_ARRAY, 'PARAM_CAT_CUSTOM_CODE', 'CUSTOMIZATION');	
				
				JSCUS_SQL._CATEGORY._CUSTOMIZE.CUS_GET_LITE
				(
					GET_MAP_ARRAY,
					function(IS_SUCCESS, RESPONSE_STRING)
					{
						alert('Record Saved');
						if(IS_SUCCESS === false){return;}
						JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE = JSRC_JSON.REF_CREATE(RESPONSE_STRING);
					},
					true
				);
			}
		};
			
			
		// Save Item [Send Request]
		// _______________________________________________________________________
		JSOC_DIALOG.VAR_LOADING_SPINNER(true);
		JSCUS_SQL._CATEGORY._CUSTOMIZE.CUS_SAVE 
		(
			SAVE_MAP_ARRAY,
			RESPONSE_HANDLER
		);
	};
	
	
	// ====================================================================================


	// ===============================================================
	// Apply existing configurations and hide elements.
	// ===============================================================	
	JSTOOL_CUSTOMIZE.CUSTOMIZER.APPLY = function()
	{
		// Load from cache, if not cached, load from presfilled data
		// _______________________________________________________________________
		if(JSVC_VAR.VAR_ISSET(JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE) == false)
		{
			JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE = JSRC_JSON.REF_CREATE(JSCUS_SQL._CATEGORY._CUSTOMIZE.CUS_ME_QUICK()); 
		}
		
		// Abort if not found
		// _______________________________________________________________________
		if(JSVC_VAR.VAR_ISSET(JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE) == false || JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE['JSON_COUNT'] <= 0)
		{
			return;
		}
		
		// Initialize
		// _______________________________________________________________________
		var JSON_CUSTOMIZER =  JSTOOL_CUSTOMIZE.CUSTOMIZER.JSON_CACHE;
		var CUSTOM_COUNT = JSON_CUSTOMIZER['JSON_COUNT'];
		var CUSTOM_INDEX = 1;
		var SCRIPT_DATA = null;
		var SCRIPT_ELEMENT = null;
		var SCRIPT_LINE = null;
		
		// Apply Settings
		// _______________________________________________________________________
		while(CUSTOM_COUNT >= CUSTOM_INDEX)
		{
			// Load Stored Settings
			// .............................
			SCRIPT_DATA = JSON_CUSTOMIZER['CAT_CUSTOM_LSTRING'][CUSTOM_INDEX];
			SCRIPT_ELEMENT = null;		
			
			// Skip if element does not exists, or no settings is given
			// .............................
			if(JSOC_ELEMENT.VAR_ELEMENT_EXISTS
			(
				JSON_CUSTOMIZER['CAT_CUSTOM_SSTRING'][CUSTOM_INDEX]) == false
			)	
			{
				CUSTOM_INDEX ++;
				continue;
			}
			SCRIPT_ELEMENT = JSOC_ELEMENT.VAR_GET(JSON_CUSTOMIZER['CAT_CUSTOM_SSTRING'][CUSTOM_INDEX]);	
			
			// Apply : CSS Style
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:CSS_STYLE>'))
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:CSS_STYLE>', '</CMIZER:CSS_STYLE>');
				JSOC_STYLE.VAR_STYLE(SCRIPT_ELEMENT, SCRIPT_LINE);
				// console.log(['JSOC_STYLE.VAR_STYLE', JSOC_STYLE.VAR_STYLE(SCRIPT_ELEMENT)]);
			}
			
			// Apply : CSS Class
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:CSS_CLASS>'))
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:CSS_CLASS>', '</CMIZER:CSS_CLASS>');
				JSOC_STYLE.VAR_CLASS(SCRIPT_ELEMENT, SCRIPT_LINE);
				// console.log(['JSOC_STYLE.VAR_CLASS', JSOC_STYLE.VAR_CLASS(SCRIPT_ELEMENT)]);
			}	
				
			// Apply : Title
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:TITLE>') && "title" in SCRIPT_ELEMENT)
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:TITLE>', '</CMIZER:TITLE>');
				SCRIPT_ELEMENT.title = SCRIPT_LINE;
				// console.log(['SCRIPT_ELEMENT.title', SCRIPT_ELEMENT.title]);
			}		

			// Apply : Caption
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:CAPTION>') && "innerHTML" in SCRIPT_ELEMENT)
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:CAPTION>', '</CMIZER:CAPTION>');
				JSOC_ELEMENT.VAR_INNER_HTML(SCRIPT_ELEMENT, SCRIPT_LINE);
				// console.log(['JSOC_ELEMENT.VAR_INNER_HTML', JSOC_ELEMENT.VAR_INNER_HTML(SCRIPT_ELEMENT)]);
			}		
		
			// Apply : Placeholder
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:PLACEHOLDER>') && "placeholder" in SCRIPT_ELEMENT)
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:PLACEHOLDER>', '</CMIZER:PLACEHOLDER>');
				SCRIPT_ELEMENT.placeholder = SCRIPT_LINE;
				// console.log(['SCRIPT_ELEMENT.placeholder', SCRIPT_ELEMENT.placeholder]);
			}		
		
			// Load : Data-Format
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:DATA-FORMAT>') && "data-format" in SCRIPT_ELEMENT)
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:DATA-FORMAT>', '</CMIZER:DATA-FORMAT>');
				SCRIPT_ELEMENT.dataset.format = SCRIPT_LINE;
				// console.log(['SCRIPT_ELEMENT.dataset.format', SCRIPT_ELEMENT.dataset.format]);
			}	

			// Load : Step
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:STEP>') && "step" in SCRIPT_ELEMENT)
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:STEP>', '</CMIZER:STEP>');
				SCRIPT_ELEMENT.step = SCRIPT_LINE;
				// console.log(['SCRIPT_ELEMENT.step', SCRIPT_ELEMENT.step]);
			}	
			
			// Load : Readonly
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:READONLY>') && "readOnly" in SCRIPT_ELEMENT)
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:READONLY>', '</CMIZER:READONLY>');
				if(SCRIPT_LINE == "2")
				{
					JSOC_ELEMENT.VAR_READONLY(SCRIPT_ELEMENT, true);
				}
				else if(SCRIPT_LINE == "3")
				{
					JSOC_ELEMENT.VAR_READONLY(SCRIPT_ELEMENT, false);
				}
				// console.log(['JSOC_ELEMENT.VAR_READONLY', JSOC_ELEMENT.VAR_READONLY(SCRIPT_ELEMENT)]);
			}	

			// Load : Disabled
			// .............................
			if(JSVC_STR.VAR_CONTAINS(SCRIPT_DATA, '<CMIZER:DISABLED>') && "disabled" in SCRIPT_ELEMENT)
			{
				SCRIPT_LINE = JSVC_STR.VAR_TAG_BETWEEN(SCRIPT_DATA, '<CMIZER:DISABLED>', '</CMIZER:DISABLED>');
				if(SCRIPT_LINE == "2")
				{
					JSOC_ELEMENT.VAR_ENABLED(SCRIPT_ELEMENT, false);
				}
				else if(SCRIPT_LINE == "3")
				{
					JSOC_ELEMENT.VAR_ENABLED(SCRIPT_ELEMENT, true);
				}
				// console.log(['JSOC_ELEMENT.VAR_ENABLED', JSOC_ELEMENT.VAR_ENABLED(SCRIPT_ELEMENT)]);
			}		
			
			// To next loop
			// .............................
			CUSTOM_INDEX ++;
		}
	};

	
	// ====================================================================================

	
	// ===============================================================	
	// Load Required Script
	// ===============================================================	
	if(typeof JSCUS_SQL._ACCOUNT._LEVEL == 'undefined')
	{
		document.write('<script src="' + JSCUS_CACHE.SERVER_URL + '\/res\/comm\/account\/level.js"><\/script>');
	}
	if(typeof JSCUS_SQL._ACCOUNT._LEVEL == 'undefined' || typeof JSCUS_SQL._ACCOUNT._LEVEL.CUS_GET_QUICK == 'undefined')
	{
		document.write('<script src="' + JSCUS_CACHE.SERVER_URL + '\/Account\/level\/ini_getall"><\/script>');
	}
	JSTOOL_CUSTOMIZE.CUSTOMIZER.APPLY();
	