		
	// ===============================================================
	// Request Save
	// ===============================================================
	function HTTP_SAVE(CALLBACK_METHOD, RESUME_INDEX = 0)
	{
		// Initialize
		// _______________________________________________________________________
		var REQUEST_PARAM_BUNDLE_MAP_ARRAY = [];
		var SAVE_MAP_ARRAY = null;
		var ROW_COUNT = TRANS_LIST_DGV.ROW.COUNT();
		var ROW_INDEX = 0;
		
		
		// Check Edit Status
		// _______________________________________________________________________
		if(EDIT_HANDLER.REF_IS_MODIFIED == false)
		{
			JSVC_INFO.VAR_NOTHING_TO_SAVE(function(){CALLBACK_METHOD(false);})	
			return;		
		}


		// Validate Zero / Negative [Numeric Input]
		// _______________________________________________________________________
		while(ROW_COUNT > ROW_INDEX)
		{			
			if(TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_COST_ACTUAL", ROW_INDEX) <= 0)
			{
				JSOC_DIALOG.VAR_MESSAGE_BOX
				(
					'Field Qty Actual cannot be zero or negative.', 
					'Information',
					'OK', 'WARNING',
					function(MESSAGE_RESPONSE)
					{
						TRANS_LIST_DGV.CELL.ELEMENT("REC_TRANSLIST_COST_ACTUAL", ROW_INDEX).style.borderColor = JSCUS_CACHE.SITE_ON_ERROR_BORDER_COLOR;
						TRANS_LIST_DGV.CELL.ELEMENT("REC_TRANSLIST_COST_ACTUAL", ROW_INDEX).focus();
						CALLBACK_METHOD(false);
					}
				);	
				return;			
			}			
			
			ROW_INDEX ++;
		}
		 

		// Populate MapArray
		// _______________________________________________________________________	
		ROW_INDEX = RESUME_INDEX;
		while(ROW_COUNT > ROW_INDEX && REQUEST_PARAM_BUNDLE_MAP_ARRAY.length <= 30)
		{
			// Save item [Prepare]
			// ...........................................
			SAVE_MAP_ARRAY = JSCUS_SQL._RECORD._TRANS_LIST.CUS_PREPARE_MAPPED_ARRAY_FOR_SAVE();
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_ID", TRANS_LIST_DGV.CELL.VALUE_NVALL("REC_TRANSLIST_ID", ROW_INDEX));				
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_REC_TRANS_ID", TRANS_LIST_DGV.CELL.VALUE_NVALL("REC_TRANSLIST_REC_TRANS_ID", ROW_INDEX));
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_CAT_PRODUCT_ID", TRANS_LIST_DGV.CELL.VALUE_NVALL("REC_TRANSLIST_CAT_PRODUCT_ID", ROW_INDEX));
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_CAT_UOM_ID",  TRANS_LIST_DGV.CELL.VALUE_NVALL("REC_TRANSLIST_CAT_UOM_ID", ROW_INDEX));
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_COST_BASE", TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_COST_BASE", ROW_INDEX));	
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_COST_ACTUAL", TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_COST_ACTUAL", ROW_INDEX));	
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_COST_PC", TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_COST_PC", ROW_INDEX));	
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_COST_ALLOWANCE", TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_COST_ALLOWANCE", ROW_INDEX));	
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_PRICE_NET", TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_PRICE_NET", ROW_INDEX));	
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_ING_PRICE", TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_ING_PRICE", ROW_INDEX));	
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_ING_NET_CONTENT", TRANS_LIST_DGV.CELL.VALUE_NVAL("REC_TRANSLIST_ING_NET_CONTENT", ROW_INDEX));	
			JSVC_MAP_ARRAY.VAR_SET(SAVE_MAP_ARRAY, "PARAM_REC_TRANSLIST_STATUS", 2);
		
			REQUEST_PARAM_BUNDLE_MAP_ARRAY.push(SAVE_MAP_ARRAY);
			ROW_INDEX ++;
		}
		

		// Declare Post Request Handler
		// _______________________________________________________________________
		var RESPONSE_HANDLER = function(IS_SUCCESS, HTTP_RESPONSE)
		{
			// Handle Error
			// ...........................................
			if(IS_SUCCESS === false)
			{
				CUS_SEND_DIALOG_TRY_DISMISS();
				METHOD_UNABLE_TO_SEND_REQUEST(CALLBACK_METHOD);	
				return;
			}
			
			
			// Catch JSON Error
			// ...........................................
			else if(JSRC_JSON.REF_IS_JSTRING(HTTP_RESPONSE) == false)
			{
				CUS_SEND_DIALOG_TRY_DISMISS();
				METHOD_SERVER_ISSUE(CALLBACK_METHOD, HTTP_RESPONSE);
				return;			
			}
				
				
			// Read Response
			// ...........................................
			var JSON_OBJECT = JSRC_JSON.REF_CREATE(HTTP_RESPONSE);
			if(JSRC_JSON.REF_IS_SUCCESS(JSON_OBJECT) === false)
			{
				CUS_SEND_DIALOG_TRY_DISMISS();
				METHOD_REQUEST_FAILURE(CALLBACK_METHOD, JSON_OBJECT);
				return;
			}
		
		
			// Update Changes to DataGridView
			// ...........................................
			var JSON_COUNT = JSRC_JSON.REF_READ_NVALL(JSON_OBJECT, "JSON_COUNT");
			var CURRENT_CAT_PRODUCT_ID = 0;
			var CURRENT_ROW_INDEX = 0;
					
			while(JSON_COUNT > 0)
			{				
				// Locate Row
				CURRENT_CAT_PRODUCT_ID = JSRC_JSON.REF_READ(JSON_OBJECT, "REC_TRANSLIST_CAT_PRODUCT_ID", JSON_COUNT);
				CURRENT_ROW_INDEX = TRANS_LIST_DGV.COLUMN.FIND("REC_TRANSLIST_CAT_PRODUCT_ID", CURRENT_CAT_PRODUCT_ID);			
				if(CURRENT_ROW_INDEX >= 0)
				{
					TRANS_LIST_DGV.CELL.VALUE
					(
						"REC_TRANSLIST_ID", CURRENT_ROW_INDEX, 
						JSRC_JSON.REF_READ(JSON_OBJECT, "INSERTED_ID", JSON_COUNT)
					);
				}
						
				// To next loop
				JSON_COUNT --;
			}


			// Loop unfinished save
			// ...........................................
			if(ROW_COUNT > ROW_INDEX)
			{
				HTTP_SAVE(CALLBACK_METHOD, RESUME_INDEX);
				return;
			}
			
				
			// Lift edit and Exit EditMode
			// ...........................................
			EDIT_HANDLER.REF_IS_MODIFIED = false;
			EDIT_HANDLER.HAS_NEWLY_SAVED_DATA = true;			
			CUS_SEND_DIALOG_TRY_DISMISS();
			CALLBACK_METHOD(true);										
		};
			
			
		// Save Item [Send Request]
		// _______________________________________________________________________
		JSOC_DIALOG.VAR_LOADING_SPINNER(true);
		JSCUS_SQL._RECORD._TRANS_LIST.CUS_SAVE 
		(
			REQUEST_PARAM_BUNDLE_MAP_ARRAY,
			RESPONSE_HANDLER
		);
		
	};