// DataSet µî·Ï ¹è¿­
var G_arrDataSets = new Array();
// ³¯Â¥ Ã³¸® ÄÃ·³ µî·Ï ¹è¿­
var	G_arrDateCols = new Array();

// ÀÚµ¿ LOV Ã³¸® ÄÃ·³ µî·Ï ¹è¿­
var	G_arrAutoLovs = new Array();

// DataSetÀÇ ÀÐ±â ÁøÇà ¿©ºÎ
var G_isLoading = false;

// TransactionÀÇ Post ÁøÇà ¿©ºÎ
var G_isSaveing = false;

// TransactionÀÇ Error ¿©ºÎ
var G_isError = false;

// DataSetÀÇ SyncData Ã¼Å© ¿©ºÎ
var G_isSyncDataCheck = false;

// DataSetÀÇ º°Äª
var G_DataSetTitle = null;

// NotNull ÄÃ·³¸í
var G_NotNullColName = null;

// Key ÄÃ·³¸í
var G_KeyColName = null;

// ÃÖÁ¾ Æ÷Ä¿½ºµÈ °¡¿ì½º °´Ã¼
var G_FocusObject = null;

// ÃÖÁ¾ Æ÷Ä¿½ºµÈ °¡¿ì½º ±×¸®µåÀÇ Dataset °´Ã¼
var G_FocusDataset = null;

// °Ë»ö
var G_findCol = "";
var G_findText = "";
var G_findUpper = false;

// °¢Á¾ ¸Þ¼¼Áö
var G_MSG_SAVE = "ÀúÀå ÇÏ½Ã°Ú½À´Ï±î?";
var G_MSG_CHANGED_SAVE = "º¯°æ »çÇ×À» ÀúÀå ÇÏ½Ã°Ú½À´Ï±î?";
var G_MSG_SAVE_OK = "ÀúÀåµÇ¾ú½À´Ï´Ù.";
var G_MSG_SAVE_ERR = "ÀúÀå½ÇÆÐ";
var G_MSG_SEVICE_URL_ERR = "Service URLÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.";
var G_MSG_DATASET_NULL = "DataSetÀÌ ³Î(Null) ÀÔ´Ï´Ù.";
var G_MSG_DATASET_NAME_NULL = "DataSet¸íÀÌ ³Î(Null) ÀÔ´Ï´Ù.";
var G_MSG_DATASET_REG_ERR = "DataSetÀÌ µî·ÏµÇÁö ¾Ê¾Ò½À´Ï´Ù.";
var G_MSG_TRANS_NULL = "TransactionÀÌ ³Î(Null) ÀÔ´Ï´Ù.";
var G_MSG_GRID_NULL = "Grid°¡ ³Î(Null) ÀÔ´Ï´Ù.";
var G_MSG_ROW_NULL = "row(ÀÌ)°¡ ³Î(Null)ÀÌ°Å³ª 1º¸´Ù ÀÛ½À´Ï´Ù.";
var G_MSG_COL_NAME_NULL = "ÄÃ·³¸íÀÌ ³Î(Null) ÀÔ´Ï´Ù.";
var G_MSG_COL_NOT_NULL = "ÇÊ¼öÇ×¸ñÀÌ ÀÔ·ÂµÇÁö ¾Ê¾Ò½À´Ï´Ù.";

var G_MSG_COL_KEY_ERROR = "";
var G_MSG_COL_KEY_ERROR_NOT_NULL= "ÇÊ¼öÀÔ·ÂÇ×¸ñÀÌ ÀÔ·ÂµÇÁö ¾Ê¾Ò½À´Ï´Ù.";
var G_MSG_COL_KEY_ERROR_KEY		= "Å°Ç×¸ñÀÌ Áßº¹µÇ¾ú½À´Ï´Ù.";

// ÄÃ·³ÀÇ »ö»ó
var G_NORMAL_COLOR = "#FFFFFF";
var G_KEY_COLOR = "#D6E6F3";
var G_NOTNULL_COLOR = "#FFFFB5";
var G_READONLY_COLOR = "#EFEFEF";
var G_LOV_COLOR = "#ECEAC8";
var G_TOGGLE_COLOR = "#F4F2D8"; //<--NEQ COLOR(#E7EFF7)
var G_GRID_SET_FOCUS_COLOR = "#A4D2E1"; //<--OLD COLOR(#BBE0F4)
var G_GRID_KILL_FOCUS_COLOR = "#D4D0C8";

// °øÅë DB ¿¡·¯
var G_ORA_20009 = "ORA-20009";

/*-------------------- ÃÊ±âÈ­ --------------------*/
function G_Initialize()
{
}
/*-------------------- ³¯Â¥ Ã³¸® °ü·Ã --------------------*/
// ³¯Â¥ °´Ã¼ class
function G_DateCol(agrid,acolid,adatetag)
{
	try
	{
		// 
		this.grid = agrid;
		this.colid = acolid;
		if(adatetag == null || C_isNull(adatetag))
		{
			this.datetag = "D";
		}
		else
		{
			this.datetag = adatetag;
		}
		this.calendarid = agrid.DataId+"."+acolid;
		
		this.grid.ColumnProp(this.colid, 'EditStyle') = "Popup";
	}
	catch (e)
	{
		C_msgOk("G_DateCol ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}
function	G_addDateCol(grid,colid,datetag)
{
	try
	{
		var objDateInfo = new G_DateCol(grid,colid,datetag);
		
		if (G_arrDateCols == null) G_arrDateCols = new Array();
		
		G_arrDateCols.push(objDateInfo);
	}
	catch (e)
	{
		C_msgOk("³¯Â¥ ÄÃ·³ µî·Ï ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}
function	G_searchDateCol(grid,colid)
{
	var dateinfo = null;
	
	try
	{
		if (grid == null || C_isNull(grid))
		{
			C_msgOk("G_searchDateCol ¿¡·¯ : ±×¸®µå ÀÎÀÚ°¡ nullÀÔ´Ï´Ù.", "¿¡·¯");
			return null;
		}
		if (G_arrDateCols == null) G_arrDateCols = new Array();
		
		// µî·ÏµÈ DateColÀ» °Ë»ö
		for (var i = 0; i < G_arrDateCols.length; i++)
		{
			if (G_arrDateCols[i].grid == grid && G_arrDateCols[i].colid == colid)
			{
				dateinfo = G_arrDateCols[i];
				return dateinfo;
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_searchDateCol ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return dateinfo;
}
function	G_defaultDateProcessInGrid(dataset, row, colid, olddata,COL_DATA)
{
	if(C_isNull(COL_DATA))
	{
		return ;
	}
	else
	{
		if(C_isValidDate(COL_DATA))
		{
			dataset.NameString(row,colid) = C_toDateFormatString(COL_DATA);
		}
		else
		{
			dataset.NameString(row,colid) = olddata;
			C_msgOk("³¯Â¥°ªÀÌ Àß ¸ø ÀÔ·ÂµÇ¾ú½À´Ï´Ù.","¾Ë¸²");
		}
		return ;
	}
}
function	G_defaultYmProcessInGrid(dataset, row, colid, olddata,COL_DATA)
{
	if(C_isNull(COL_DATA))
	{
		return ;
	}
	else
	{
		var	lsUMask = COL_DATA.toString().replace(/-/g, "");
		if (!C_isNum(lsUMask))
		{
			dataset.NameString(row,colid) = olddata;
			C_msgOk("¼ýÀÚ¸¦ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.");
			return;
		}

		if (lsUMask.length != 6)
		{
			dataset.NameString(row,colid) = olddata;
			C_msgOk("³â¿ùÀº 6ÀÚ¸®¸¦ ÀÔ·ÂÇÏ¼Å¾ß ÇÕ´Ï´Ù.");
			return;
		}

		var year  = lsUMask.substr(0, 4);
		var month = lsUMask.substr(4, 2);

		if (parseInt(year) < 1900)
		{
			dataset.NameString(row,colid) = olddata;
			C_msgOk("1900³â ÀÌÈÄÀÇ ³âµµ¸¦ ÀÔ·ÂÇÏ¼¼¿ä.");
			return;
		}

		if (!C_isValidMonth(month))
		{
			dataset.NameString(row,colid) = olddata;
			C_msgOk("¿ùÀº 1~12 ±îÁö¸¸ ÀÔ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.");
			return;
		}
		dataset.NameString(row,colid) =lsUMask.substr(0, 4) + "-" + lsUMask.substr(4, 2);
	}
}
function G_CalendarResult(asCalendarID, asDate, asYear, asMonth, asDay)
{
	var			dateinfo = null;
	if (G_arrDateCols == null) G_arrDateCols = new Array();
	
	// µî·ÏµÈ DateColÀ» °Ë»ö
	for (var i = 0; i < G_arrDateCols.length; i++)
	{
		if (G_arrDateCols[i].calendarid == asCalendarID)
		{
			dateinfo = G_arrDateCols[i];
			var		objdataset = G_searchDataSet(dateinfo.grid.DataId);
			objdataset.NameString(objdataset.RowPosition,dateinfo.colid) = asDate;
		}
	}
}

/*-------------------- DataSet °ü·Ã --------------------*/
// DataSetInfo °´Ã¼ Class
function G_DataSetInfo(aDataset, aTrans, aGrid, aServiceURL, aDataSetTitle, aNotNullColName, aSort, aClearChild)
{
	try
	{
		// DataSet
		if (aDataset != null)
		{
			// DataSetÀÇ DataID(Service URL)
			aDataset.DataID = C_isNull(aServiceURL) ? G_MSG_SEVICE_URL_ERR : aServiceURL;
			this.dataset = aDataset;
			this.dataset_id = aDataset.id;
		}
		else
		{
			this.dataset = null;
			this.dataset_id = null;
		}
		
		// Transaction
		if (aTrans != null)
		{
			this.trans = aTrans;
			this.trans_id = aTrans.id;
		}
		else
		{
			this.trans = null;
			this.trans_id = null;
		}
		
		// Grid
		if (aGrid != null)
		{
			this.grid = aGrid;
			this.grid_id = aGrid.id;
		}
		else
		{
			this.grid = null;
			this.grid_id = null;
		}
		
		// ±×¸®µåÀÇ À§Ä¡
		this.grid_x = 0;
		this.grid_y = 0;
		// ±×¸®µå ³»ÀÇ ÀÌº¥Æ® ¹ß»ý À§Ä¡
		this.grid_event_x = 0;
		this.grid_event_y = 0;
		
		// DataSetÀÇ º°Äª
		this.dataset_title = C_isNull(aDataSetTitle) ? aDataset.id : aDataSetTitle;
		
		// NotNull ÄÃ·³¸í
		this.notnull_col_name = aNotNullColName;
		
		// Sort ¿©ºÎ
		this.sort = C_isNull(aSort) ? true : aSort;
		
		// Master DataSetInfo(´ÜÀÏ DataSetInfo·Î ¼³Á¤)
		this.masterDataSet = null;
		
		// Detail DataSetInfo(º¹¼ö DataSetInfo·Î ¼³Á¤)
		this.detailDataSets = new Array();
		
		// Relation ÄÃ·³ Á¤º¸
		this.relCols = new Array();
		
		this.isLoaded = false;
		this.isClearChild = aClearChild == null ? false:aClearChild;
		
		this.isOffLoadChild = false;
		
		//³¯Â¥ ÄÃ·³ Á¤º¸
	}
	catch (e)
	{
		C_msgOk("G_DataSetInfo ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

// RelColInfo °´Ã¼ Class
function G_RelColInfo(aMColName, aDColName)
{
	try
	{
		this.masterColName = aMColName;
		this.detailColName = aDColName;
	}
	catch (e)
	{
		C_msgOk("G_RelColInfo ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

// µî·ÏµÈ DataSetÀ» °Ë»ö
function G_searchDataSet(aDataSetName)
{
	var dataset = null;
	var datasetinfo = null;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		dataset = datasetinfo == null ? null : datasetinfo.dataset;
	}
	catch (e)
	{
		C_msgOk("G_searchDataSet ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return dataset;
}
function G_searchDataSetNoError(aDataSetName)
{
	var dataset = null;
	var datasetinfo = null;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		dataset = datasetinfo == null ? null : datasetinfo.dataset;
	}
	catch (e)
	{
	}
	
	return dataset;
}

// µî·ÏµÈ DataSetInfo °Ë»ö
function G_searchDataSetInfo(aDataSetName)
{
	var datasetinfo = null;
	
	try
	{
		if (C_isNull(aDataSetName))
		{
			C_msgOk("G_searchDataSetInfo ¿¡·¯ : " + G_MSG_DATASET_NAME_NULL, "¿¡·¯");
			return null;
		}
		
		// µî·ÏµÈ DataSetÀ» °Ë»ö
		for (var i = 0; i < G_arrDataSets.length; i++)
		{
			if (G_arrDataSets[i].dataset_id == aDataSetName)
			{
				datasetinfo = G_arrDataSets[i];
				break;
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_searchDataSetInfo ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return datasetinfo;
}
//ÇØ´ç µ¥ÀÌÅ¸ ™VÀÇ load ¿©ºÎ °ËÁõ
function G_isLoaded(aDataSetName)
{
	var datasetinfo = null;
	var changed = false;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		return datasetinfo.isLoaded;
	}
	catch (e)
	{
		C_msgOk("G_isChanged ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return false;
}

// ÇÏÀ§ DataSetÀÇ º¯°æ¿©ºÎ
function G_isChanged(aDataSetName)
{
	var datasetinfo = null;
	var changed = false;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		
		for (var i = 0; i < datasetinfo.detailDataSets.length; i++)
		{
			if (datasetinfo.detailDataSets[i].dataset.IsUpdated)
			{
				G_DataSetTitle = datasetinfo.detailDataSets[i].dataset_title;
				return true;
			}
			
			if (datasetinfo.detailDataSets[i].detailDataSets.length > 0)
			{
				changed = G_isChanged(datasetinfo.detailDataSets[i].dataset_id);
			}
			
			if (changed) return true;
		}
	}
	catch (e)
	{
		C_msgOk("G_isChanged ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return false;
}

// ÇÏÀ§ DataSetÀÇ ·¹ÄÚµå Á¸Àç ¿©ºÎ
function G_isExistRow(aDataSetName)
{
	var datasetinfo = null;
	var existRow = false;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		
		for (var i = 0; i < datasetinfo.detailDataSets.length; i++)
		{
			if (datasetinfo.detailDataSets[i].dataset.CountRow > 0)
			{
				G_DataSetTitle = datasetinfo.detailDataSets[i].dataset_title;
				return true;
			}
			
			if (datasetinfo.detailDataSets[i].detailDataSets.length > 0)
			{
				existRow = G_isExistRow(datasetinfo.detailDataSets[i].dataset_id);
			}
			
			if (existRow) return true;
		}
	}
	catch (e)
	{
		C_msgOk("G_isExistRow ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return false;
}

// DataSetÀÇ Key Áßº¹ ¹× ÀÔ·Â¿©ºÎ
function G_isSyncData()
{
	try
	{
		for (var i = 0; i < G_arrDataSets.length; i++)
		{
			G_isSyncDataCheck = true;
			
			if (!G_arrDataSets[i].dataset.SyncData)
			{
				if (G_arrDataSets[i].grid != null)
				{
					G_DataSetTitle = G_arrDataSets[i].dataset_title;
	
					// jsk4 Ãß°¡ ½ÃÀÛ
					G_NotNullColName = "";
					G_KeyColName = "";
					for( col=1;col<=G_arrDataSets[i].dataset.CountColumn;col++){
						ColProp = G_arrDataSets[i].dataset.ColumnProp(col);
						// 2 Key Column
						// 4 Not Null Column
						if( (ColProp == 2 ) || (ColProp == 4 ) )
						{
							var _datasetColumn = G_arrDataSets[i].dataset.ColumnID(col);
							var _gridTitle = G_arrDataSets[i].grid.ColumnProp(_datasetColumn, 'Name');
	
							if(G_arrDataSets[i].dataset.NameString(G_arrDataSets[i].dataset.RowPosition, _datasetColumn) == "")
							{
								if(G_NotNullColName != ""){
									G_NotNullColName = G_NotNullColName + ", ";
								}
	
								G_NotNullColName = G_NotNullColName + ( C_isNull(_gridTitle)?"["+_datasetColumn + "]":"["+_gridTitle + "]" );
							}
	
							if(ColProp == 2 ) {
								if(G_KeyColName != ""){
									G_KeyColName = G_KeyColName + ", ";
								}
	
								G_KeyColName = G_KeyColName + ( C_isNull(_gridTitle)?"["+_datasetColumn + "]":"["+_gridTitle + "]" );
							}
						}
					}
					if(G_NotNullColName != "") {
						G_MSG_COL_KEY_ERROR = G_MSG_COL_KEY_ERROR_NOT_NULL;
						G_NotNullColName = "<BR><BR>* ¹ÌÀÔ·ÂÇ×¸ñ : " + G_NotNullColName;
					} else {
						G_MSG_COL_KEY_ERROR = G_MSG_COL_KEY_ERROR_KEY;
						G_NotNullColName = "<BR><BR>* Å°Ç×¸ñ : " + G_KeyColName;
					}
				}
				else
				{
					if (!G_arrDataSets[i].dataset.SyncData)
					{
						G_DataSetTitle = G_arrDataSets[i].dataset_title;
						G_MSG_COL_KEY_ERROR = G_MSG_COL_KEY_ERROR_NOT_NULL;
						G_NotNullColName = "";
						G_isSyncDataCheck = false;
						return false;
					}
				}
					
				// jsk4 Ãß°¡ ³¡

				// ¿ø ¼Ò½º ÁÖ¼®Ã³¸®
				/*
				G_NotNullColName = C_isNull(G_arrDataSets[i].notnull_col_name) ? "(ÇÊ¼öÀÔ·Â:" + G_arrDataSets[i].notnull_col_name + ")" : "";
				*/

				G_isSyncDataCheck = false;
				return false;
			}
			
			G_isSyncDataCheck = false;
		}
	}
	catch (e)
	{
		C_msgOk("G_isSyncData ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return true;
}

// »óÀ§ DataSetÀÇ Relation Key ÀÔ·Â¿©ºÎ
function G_isMasterKeyInserted(aDataSetName)
{
	var datasetinfoM = null;
	var datasetinfoD = null;
	var colname = null;
	var row = -1;
	var columnindex = -1;
	
	try
	{
		datasetinfoD = G_searchDataSetInfo(aDataSetName);
		datasetinfoM = datasetinfoD.masterDataSet;
		
		for (var i = 0; i < datasetinfoD.relCols.length; i++)
		{
			colname = datasetinfoD.relCols[i].masterColName;
			row = datasetinfoM.dataset.RowPosition;
			columnindex = datasetinfoM.dataset.ColumnIndex(colname);
			
			if (C_isNull(datasetinfoM.dataset.ColumnString(row, columnindex)))
			{
				G_DataSetTitle = datasetinfoM.dataset_title;
				return false;
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_isMasterKeyInserted ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return true;
}

// DataSetÀÇ Key ÄÃ·³ ¹× Not Null ÄÃ·³ ÀÔ·Â¿©ºÎ
function G_isKeyInserted(aDataSetName)
{
	var datasetinfo = null;
	var dataset = null;
	var row = -1;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		dataset = datasetinfo.dataset;
		
		for (var i = 1; i <= dataset.CountRow; i++)
		{
			// RowÀÇ Status°¡ ÀÔ·Â,¼öÁ¤(1:Insert,3:Update)ÀÌ ¾Æ´Ï¸é Skip
			if (dataset.RowStatus(i) != 1 && dataset.RowStatus(i) != 3) continue;
			
			for (var j = 1; j <= dataset.CountColumn; j++)
			{
				// ÄÃ·³ÀÇ ¼Ó¼ºÀÌ Key(2) ¶Ç´Â Not Null(4)ÀÎ °æ¿ì ÀÔ·Â¿©ºÎ °ËÁõ
				if (dataset.ColumnProp(j) == "2" || dataset.ColumnProp(j) == "4")
				{
					if (C_isNull(dataset.ColumnString(i, j)))
					{
						G_DataSetTitle = datasetinfo.dataset_title;
						return false;
					}
				}
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_isKeyInserted ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return true;
}

// »óÀ§ DataSetÀÇ Relation KeyÀÇ °ªÀ» °¡Á®¿Í ÀÔ·Â
function G_setKeyInsert(aDataSetName)
{
	var datasetinfoM = null;
	var datasetinfoD = null;
	var colnameM = null;
	var rowM = -1;
	var colnameD = null;
	var rowD = -1;
	try
	{
		datasetinfoD = G_searchDataSetInfo(aDataSetName);
		datasetinfoM = datasetinfoD.masterDataSet;
		
		for (var i = 0; i < datasetinfoD.relCols.length; i++)
		{
			colnameM = datasetinfoD.relCols[i].masterColName;
			rowM = datasetinfoM.dataset.RowPosition;
			
			colnameD = datasetinfoD.relCols[i].detailColName;
			rowD = datasetinfoD.dataset.RowPosition;
			datasetinfoD.dataset.NameValue(rowD, colnameD) = datasetinfoM.dataset.NameValue(rowM, colnameM);
		}
	}
	catch (e)
	{
		C_msgOk("G_setKeyInsert ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

// ÇÏÀ§ DataSet µ¥ÀÌÅÍ ÀÐ±â
function G_loadDetailDataSet(aDataSetName)
{
	var datasetinfo = null;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		if(datasetinfo.isOffLoadChild) return;
		for (var i = 0; i < datasetinfo.detailDataSets.length; i++)
		{
			G_Load(datasetinfo.detailDataSets[i].dataset, "");
		}
	}
	catch (e)
	{
		C_msgOk("G_loadDetailDataSet ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

// ÇÏÀ§ DataSetÀÇ ·¹ÄÚµå Å¬¸®¾î
function G_clearDetailDataSet(aDataSetName)
{
	var datasetinfo = null;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataSetName);
		
		for (var i = 0; i < datasetinfo.detailDataSets.length; i++)
		{
			datasetinfo.detailDataSets[i].dataset.ClearData();
			
			if (datasetinfo.detailDataSets[i].detailDataSets.length > 0)
			{
				G_clearDetailDataSet(datasetinfo.detailDataSets[i].dataset_id);
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_isExistRow ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}


/*-------------------- DataSet ÀÌº¥Æ® °ü·Ã --------------------*/
function G_OnRowInsertBefore(dataset)
{
	var ret = true;
	
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		ret = OnRowInsertBefore(dataset);
	}
	catch (e)
	{
		if (typeof(OnRowInsertBefore) == "function")
		{
			C_msgOk("G_OnRowInsertBefore ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
			return false;
		}
	}
	
	// retÀÇ °ªÀÌ falseÀÎ °æ¿ì ÀÔ·ÂÀÛ¾÷ÀÌ Ãë¼ÒµÈ´Ù.
	if (ret == false) return false;
	
	return true;
}

function G_OnRowInserted(dataset, row)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnRowInserted(dataset, row);
	}
	catch (e)
	{
		if (typeof(OnRowInserted) == "function")
		{
			C_msgOk("G_OnRowInserted ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnRowDeleteBefore(dataset)
{
	var ret = true;
	
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		ret = OnRowDeleteBefore(dataset);
	}
	catch (e)
	{
		if (typeof(OnRowDeleteBefore) == "function")
		{
			C_msgOk("G_OnRowDeleteBefore ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
			return false;
		}
	}
	
	// retÀÇ °ªÀÌ falseÀÎ °æ¿ì »èÁ¦ÀÛ¾÷ÀÌ Ãë¼ÒµÈ´Ù.
	if (ret == false) return false;
	
	return true;
}

function G_OnRowDeleted(dataset, row)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnRowDeleted(dataset, row);
	}
	catch (e)
	{
		if (typeof(OnRowDeleted) == "function")
		{
			C_msgOk("G_OnRowDeleted ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnDataError(dataset, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnDataError(dataset, row, colid);
	}
	catch (e)
	{
		if (typeof(OnDataError) == "function")
		{
			C_msgOk("G_OnDataError ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_CanRowPosChange(dataset, row)
{
	try
	{
		if (G_isLoading || G_isSaveing || G_isSyncDataCheck) return true;
		
		try
		{
			// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
			if (!OnRowPosChangeBefore(dataset, row)) return false;
		}
		catch (e)
		{
			if (typeof(OnRowPosChangeBefore) == "function")
			{
				C_msgOk("G_CanRowPosChange ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
			}
		}
		
		if (G_isChanged(dataset.id))
		{
			//ÆäÀÌÁö ¼Ó¼ºÀÌ ÀúÀå°¡´ÉÀÏ°æ¿ì¸¸ Åº´Ù.
			if (C_ProgAuthority_S == 'T')
			{
				var ret = C_msgYesNoCancel(G_MSG_SAVE, "ÀúÀå");
				
				if (ret == "Y")
				{
					if (!G_saveAllDataMsg(dataset)) return false;
				}
				else if (ret == "C")
				{
					return false;
				}
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_CanRowPosChange ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

function G_OnRowPosChanged(dataset, row)
{
	try
	{
		if (G_isLoading) return;
		
		try
		{
			// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
			OnRowPosChanged(dataset, row);
		}
		catch (e)
		{
			if (typeof(OnRowPosChanged) == "function")
			{
				C_msgOk("G_OnRowPosChanged ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
				return;
			}
		}
		
		// ÇÏÀ§ Å×ÀÌºí µ¥ÀÌÅÍ ÀÐ±â
		G_loadDetailDataSet(dataset.id);
		
		// ÇöÀç Æ÷Ä¿½º¸¦ ¹ÞÀº ±×¸®µåÀÇ µ¥ÀÌÅÍ™VÀÇ Á¤º¸¸¦ »óÅÂ¹Ù¿¡ Ç¥½Ã
		if (dataset == G_FocusDataset) window.status = "[ÀüÃ¼ : " + dataset.CountRow + " Çà] ÇöÀç : " + row + " Çà";
	}
	catch (e)
	{
		C_msgOk("G_OnRowPosChanged ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_OnColumnChanged(dataset, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnColumnChanged(dataset, row, colid);
	}
	catch (e)
	{
		if (typeof(OnColumnChanged) == "function")
		{
			C_msgOk("G_OnColumnChanged ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnLoadBefore(dataset)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLoadBefore(dataset);
	}
	catch (e)
	{
		if (typeof(OnLoadBefore) == "function")
		{
			C_msgOk("G_OnLoadBefore ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnLoadStarted(dataset)
{
	var datasetinfo = G_searchDataSetInfo(dataset.id);
	
	if (datasetinfo.grid != null)
	{
		datasetinfo.grid.ReDraw = false;
	}
	
	// Wait ÇÁ·¹ÀÓ Ç¥½Ã
	//C_ShowWait(true);
	
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLoadStarted(dataset);
	}
	catch (e)
	{
		if (typeof(OnLoadStarted) == "function")
		{
			C_msgOk("G_OnLoadStarted ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnLoadCompleted(dataset, rowcnt)
{
	var datasetinfo = null;
	var grid = null;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(dataset.id);
		datasetinfo.isLoaded = true;
		grid = datasetinfo.grid;
		
		if (grid != null)
		{
			grid.ReDraw = true;
			
			for (var i = 1; i <= dataset.CountColumn; i++)
			{
				switch (dataset.ColumnProp(i))
				{
					case 2 :
						if (grid.ColumnProp(dataset.ColumnID(i), "BgColor") == "{Decode(CurRow-ToInteger(CurRow/2)*2, 0, '" + G_TOGGLE_COLOR + "', 1, '" + G_NORMAL_COLOR + "')}")
						{
							grid.ColumnProp(dataset.ColumnID(i), "BgColor") = G_KEY_COLOR;
						}
						break;
					case 4 :
						if (grid.ColumnProp(dataset.ColumnID(i), "BgColor") == "{Decode(CurRow-ToInteger(CurRow/2)*2, 0, '" + G_TOGGLE_COLOR + "', 1, '" + G_NORMAL_COLOR + "')}")
						{
							grid.ColumnProp(dataset.ColumnID(i), "BgColor") = G_NOTNULL_COLOR;
						}
						break;
					default :
						break;
				}
			}
		}
		
		if (rowcnt < 1)
		{
			// ÇÏÀ§ DataSetÀÇ ·¹ÄÚµå Å¬¸®¾î
			G_clearDetailDataSet(dataset.id);
		}
	}
	catch (e)
	{
		C_msgOk("G_OnLoadCompleted Grid ÄÃ·³ÀÇ »ö»ó¼³Á¤ ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	// Wait ÇÁ·¹ÀÓ ¼û±â±â
	//C_ShowWait(false);
	
	try
	{
		G_isLoading = false;
		
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLoadCompleted(dataset, rowcnt);
	}
	catch (e)
	{
		if (typeof(OnLoadCompleted) == "function")
		{
			C_msgOk("G_OnLoadCompleted ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnLoadError(dataset)
{
	var datasetinfo = null;
	var msg = null;
	
	// Wait ÇÁ·¹ÀÓ ¼û±â±â
	//C_ShowWait(false);
	
	try
	{
		datasetinfo = G_searchDataSetInfo(dataset.id);
		
		if (datasetinfo.grid != null)
		{
			datasetinfo.grid.ReDraw = true;
		}
		
		msg = datasetinfo.dataset_title + "(" + datasetinfo.dataset_id + ")" + "ÀÇ ÀÐ±â ¿¡·¯\n";
		msg += "\nDataId : " + dataset.DataId;
		msg += "\n¿¡·¯ÄÚµå : " + dataset.ErrorCode;
		msg += "\n¿¡·¯¸Þ¼¼Áö : " + dataset.ErrorMsg;
		
		try
		{
			G_isLoading = false;
			
			// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
			OnLoadError(dataset, msg);
		}
		catch (e)
		{
			C_msgError(msg, "¿¡·¯");
		}
	}
	catch (e)
	{
		C_msgOk("G_OnLoadError ÀÌº¥Æ® ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_OnLoadProcess(dataset, rowcnt)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLoadProcess(dataset, rowcnt);
	}
	catch (e)
	{
		if (typeof(OnLoadProcess) == "function")
		{
			C_msgOk("G_OnLoadProcess ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnFilter(dataset, row)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		if (!OnFilter(dataset, row)) return false;
	}
	catch (e)
	{
		if (typeof(OnFilter) == "function")
		{
			C_msgOk("G_OnFilter ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	return true;
}

function G_OnLayoutChanged(dataset, colcnt)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLayoutChanged(dataset, colcnt);
	}
	catch (e)
	{
		if (typeof(OnLayoutChanged) == "function")
		{
			C_msgOk("G_OnLayoutChanged ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnRowsetChanged(dataset)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnRowsetChanged(dataset);
	}
	catch (e)
	{
		if (typeof(OnRowsetChanged) == "function")
		{
			C_msgOk("G_OnRowsetChanged ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}


/*-------------------- Transaction ÀÌº¥Æ® °ü·Ã --------------------*/
function G_OnPostBefore(dataset, trans)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		if (!OnPostBefore(dataset, trans))
		{
			return false;
		}
	}
	catch (e)
	{
		if (typeof(OnPostBefore) == "function")
		{
			C_msgOk("G_OnPostBefore ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
			return false;
		}
	}
	
	return true;
}

function G_OnSuccess(dataset, trans)
{
	try
	{
		G_isSaveing = false;
		
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnSuccess(dataset, trans);
	}
	catch (e)
	{
		if (typeof(OnSuccess) == "function")
		{
			C_msgOk("G_OnSuccess ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnFail(dataset, trans)
{
	var datasetinfo = null;
	var msg = null;
	
	try
	{
		// Áßº¹ ÀçÁøÀÔ ¹æÁö
		if (G_isError) return;
		
		G_isSaveing = false;
		G_isError = true;
		
		datasetinfo = G_searchDataSetInfo(dataset.id);
		
		if (trans.ErrorMsg.indexOf(G_ORA_20009) > -1)
		{
			var liStartIndex = trans.ErrorMsg.indexOf(G_ORA_20009) + G_ORA_20009.length + 2;
			var liEndIndex = trans.ErrorMsg.indexOf("ORA-", liStartIndex) > -1 ? trans.ErrorMsg.indexOf("ORA-", liStartIndex) : trans.ErrorMsg.length;
			msg = trans.ErrorMsg.substring(liStartIndex, liEndIndex);
		}
		else
		{
			//msg = datasetinfo.dataset_title + "(" + datasetinfo.dataset_id + ")" + "ÀÇ ÀúÀå ¿¡·¯\n";
			msg = "ÀúÀå ¿¡·¯!\n";
			msg += "\nAction : " + trans.Action;
			msg += "\n¿¡·¯ÄÚµå : " + trans.ErrorCode;
			msg += "\n¿¡·¯¸Þ¼¼Áö : " + trans.ErrorMsg;
		}
		
		try
		{
			// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
			OnFail(dataset, trans, msg);
		}
		catch (e)
		{
			var ret = trans.ErrorMsg.indexOf(G_ORA_20009) > -1 ? C_msgOk(msg, "¿¡·¯") : C_msgError(msg, "¿¡·¯");
		}
	}
	catch (e)
	{
		C_msgOk("G_OnFail ÀÌº¥Æ® ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}


/*-------------------- Grid ÀÌº¥Æ® °ü·Ã --------------------*/
// ±×¸®µåÀÇ onFocus Ã³¸® ÇÔ¼ö
function G_OnFocus()
{
	var datasetinfo = null;
	
	try
	{
		// ÇöÀç ÀÌº¥Æ® °´Ã¼¸¦ ÀúÀå
		C_EventObject = event.srcElement;
		
		// ÃÖÁ¾ Æ÷Ä¿½ºµÈ °¡¿ì½º °´Ã¼¸¦ ÀúÀå
		G_FocusObject = event.srcElement;

		datasetinfo = G_searchDataSetInfo(C_EventObject.DataID);
		// ±×¸®µåÀÇ À§Ä¡¸¦ ÀúÀå
		datasetinfo.grid_x = event.clientX - event.offsetX;
		datasetinfo.grid_y = event.clientY - event.offsetY;
		
		// ÃÖÁ¾ Æ÷Ä¿½ºµÈ °¡¿ì½º ±×¸®µåÀÇ Dataset °´Ã¼¸¦ ÀúÀå
		G_FocusDataset = datasetinfo.dataset;
	}
	catch (e)
	{
		C_msgOk("G_OnFocus ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_CanColumnPosChange(dataset, grid, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		if (!CanColumnPosChange(dataset, grid, row, colid)) return false;
	}
	catch (e)
	{
		if (typeof(CanColumnPosChange) == "function")
		{
			C_msgOk("G_CanColumnPosChange ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	return true;
}

function G_OnClick(dataset, grid, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnClick(dataset, grid, row, colid);
	}
	catch (e)
	{
		if (typeof(OnClick) == "function")
		{
			C_msgOk("G_OnClick ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnCloseUp(dataset, grid, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnCloseUp(dataset, grid, row, colid);
	}
	catch (e)
	{
		if (typeof(OnCloseUp) == "function")
		{
			C_msgOk("G_OnCloseUp ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnColIndexChanged(dataset, grid, srcIndex, destIndex)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnColIndexChanged(dataset, grid, srcIndex, destIndex);
	}
	catch (e)
	{
		if (typeof(OnColIndexChanged) == "function")
		{
			C_msgOk("G_OnColIndexChanged ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnColSizing(dataset, grid, Index, OrgWidth, RstWidth)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnColSizing(dataset, grid, Index, OrgWidth, RstWidth);
	}
	catch (e)
	{
		if (typeof(OnColSizing) == "function")
		{
			C_msgOk("G_OnColSizing ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnColumnPosChanged(dataset, grid, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		if (!OnColumnPosChanged(dataset, grid, row, colid)) return false;
	}
	catch (e)
	{
		if (typeof(OnColumnPosChanged) == "function")
		{
			C_msgOk("G_OnColumnPosChanged ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	return true;
}

function G_OnCommand(dataset, grid, code, text)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnCommand(dataset, grid, code, text);
	}
	catch (e)
	{
		if (typeof(OnCommand) == "function")
		{
			C_msgOk("G_OnCommand ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	try
	{
		if (code == "1020")
		{
			G_findWindow(dataset, grid);
		}
		else if (code == "1040")
		{
			G_find(dataset, G_findCol, G_findText, G_findUpper, false);
		}
		else if (code == "3010")
		{
			try
			{
				btnretrieve_onclick();
			}
			catch (e)
			{
				if (typeof(btnretrieve_onclick) == "function")
				{
					C_msgOk("°øÅë¹öÆ°(Á¶È¸) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
				}
				else
				{
					C_msgOk("°øÅë¹öÆ°(Á¶È¸) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "¿¡·¯");
				}
			}
		}
		else if (code == "3020")
		{
			try
			{
				btnadd_onclick();
			}
			catch (e)
			{
				if (typeof(btnadd_onclick) == "function")
				{
					C_msgOk("°øÅë¹öÆ°(Ãß°¡) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
				}
				else
				{
					C_msgOk("°øÅë¹öÆ°(Ãß°¡) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "¿¡·¯");
				}
			}
		}
		else if (code == "3030")
		{
			try
			{
				btninsert_onclick();
			}
			catch (e)
			{
				if (typeof(btninsert_onclick) == "function")
				{
					C_msgOk("°øÅë¹öÆ°(»ðÀÔ) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
				}
				else
				{
					C_msgOk("°øÅë¹öÆ°(»ðÀÔ) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "¿¡·¯");
				}
			}
		}
		else if (code == "3040")
		{
			try
			{
				btndelete_onclick();
			}
			catch (e)
			{
				if (typeof(btndelete_onclick) == "function")
				{
					C_msgOk("°øÅë¹öÆ°(»èÁ¦) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
				}
				else
				{
					C_msgOk("°øÅë¹öÆ°(»èÁ¦) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "¿¡·¯");
				}
			}
		}
		else if (code == "3045")
		{
			G_duplicateColumn(dataset, grid);
		}
		else if (code == "3050")
		{
			try
			{
				btnsave_onclick();
			}
			catch (e)
			{
				if (typeof(btnsave_onclick) == "function")
				{
					C_msgOk("°øÅë¹öÆ°(ÀúÀå) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
				}
				else
				{
					C_msgOk("°øÅë¹öÆ°(ÀúÀå) °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö°¡ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.", "¿¡·¯");
				}
			}
		}
		else if (code == "5020")
		{
			var datasetinfo = G_searchDataSetInfo(dataset.id);
			
			grid.GridToExcel(datasetinfo.dataset_title,"",0);
		}
		else if (code == "5040")
		{
			var datasetinfo = G_searchDataSetInfo(dataset.id);
			
			grid.GridToExcel(datasetinfo.dataset_title,"",32);
		}
		else if (code == "7020")
		{
			grid.ColumnProp(grid.GetColumn(), "Show") = "false";
		}
		else if (code == "7040")
		{
			var lrCols = G_getGridCols(grid);
		
			if (lrCols != null && lrCols.length > 0)
			{
				for (var i = 0; i < lrCols.length; i++)
				{
					grid.ColumnProp(lrCols[i], "Show") = "true";
				}
			}
		}
		else if (code.toString().length > 4 && code.toString().substring(0, 4) == "7040")
		{
			var lrCols = G_getGridCols(grid);
			var subcode = code.toString().substring(4);
			
			if (subcode == "0")
			{
				if (lrCols != null && lrCols.length > 0)
				{
					for (var i = 0; i < lrCols.length; i++)
					{
						if (grid.ColumnProp(lrCols[i], "Show") == "FALSE")
						{
							grid.ColumnProp(lrCols[i], "Show") = "true";
						}
					}
				}
			}
			else
			{
				grid.ColumnProp(lrCols[parseInt(subcode) - 1], "Show") = "true";
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_OnCommand ÀÌº¥Æ® ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_OnDblClick(dataset, grid, row, colid)
{
	var datasetinfo = null;
	
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		if (row > 0)
		{
			OnDblClick(dataset, grid, row, colid);
		}
	}
	catch (e)
	{
		if (typeof(OnDblClick) == "function")
		{
			C_msgOk("G_OnDblClick ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	try
	{
		if (G_searchDataSetInfo(dataset.id).sort == true && row == 0)
		{
			var lsSign = "";
			
			if (colid == dataset.SortExpr.substr(1))
			{
				lsSign = dataset.SortExpr.substr(0, 1) == "+" ? "-" : "+";
			}
			else
			{
				lsSign = "+";
			}
			
			dataset.SortExpr = lsSign + colid;
			dataset.Sort();
		}
	}
	catch (e)
	{
		C_msgOk("G_OnDblClick Grid ÄÃ·³ÀÇ Sort ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_OnDropDown(dataset, grid, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnDropDown(dataset, grid, row, colid);
	}
	catch (e)
	{
		if (typeof(OnDropDown) == "function")
		{
			C_msgOk("G_OnDropDown ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnEnter(dataset, grid, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnEnter(dataset, grid, row, colid);
	}
	catch (e)
	{
		if (typeof(OnEnter) == "function")
		{
			C_msgOk("G_OnEnter ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnExit(dataset, grid, row, colid, olddata)
{
	try
	{
		var		objdateinfo = G_searchDateCol(grid,colid);
		if(objdateinfo != null)
		{
			var		COL_DATA;
			COL_DATA = dataset.NameString(row,colid);
			if(objdateinfo.datetag == "D")
			{
				G_defaultDateProcessInGrid(dataset, row, colid, olddata,COL_DATA);
			}
			else if(objdateinfo.datetag == "M")
			{
				G_defaultYmProcessInGrid(dataset, row, colid, olddata,COL_DATA);
			}
			else
			{
				C_msgOk("G_OnExit ¿¡·¯ : ¾Ë ¼ö ¾ø´Â ³¯Â¥ Çü½ÄÀÔ´Ï´Ù.", "¿¡·¯");
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_OnExit ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	G_processAutoLov(dataset, grid, row, colid, olddata);
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnExit(dataset, grid, row, colid, olddata);
	}
	catch (e)
	{
		if (typeof(OnExit) == "function")
		{
			C_msgOk("G_OnExit ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnFirstUp(dataset, grid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnFirstUp(dataset, grid);
	}
	catch (e)
	{
		if (typeof(OnFirstUp) == "function")
		{
			C_msgOk("G_OnFirstUp ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnKeyPress(dataset, grid, kcode)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnKeyPress(dataset, grid, kcode);
	}
	catch (e)
	{
		if (typeof(OnKeyPress) == "function")
		{
			C_msgOk("G_OnKeyPress ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	try
	{
		if (kcode == "123") // F12
		{
			if (C_isNull(G_findCol) || C_isNull(G_findText))
			{
				G_findWindow(dataset, grid);
			}
			else
			{
				G_find(dataset, G_findCol, G_findText, G_findUpper, false);
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_OnKeyPress ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

function G_OnKillFocus(dataset, grid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnKillFocus(dataset, grid);
	}
	catch (e)
	{
		if (typeof(OnKillFocus) == "function")
		{
			C_msgOk("G_OnKillFocus ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	try
	{
		/*
		window.status = "";
		*/
	}
	catch (e)
	{
		C_msgOk("G_OnKillFocus ÀÌº¥Æ® ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_OnLastDown(dataset, grid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLastDown(dataset, grid);
	}
	catch (e)
	{
		if (typeof(OnLastDown) == "function")
		{
			C_msgOk("G_OnLastDown ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnLButtonDblClk(dataset, grid, row, colid, xpos, ypos)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLButtonDblClk(dataset, grid, row, colid, xpos, ypos);
	}
	catch (e)
	{
		if (typeof(OnLButtonDblClk) == "function")
		{
			C_msgOk("G_OnLButtonDblClk ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnLButtonDown(dataset, grid, row, colid, xpos, ypos)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLButtonDown(dataset, grid, row, colid, xpos, ypos);
	}
	catch (e)
	{
		if (typeof(OnLButtonDown) == "function")
		{
			C_msgOk("G_OnLButtonDown ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnLButtonUp(dataset, grid, row, colid, xpos, ypos)
{
	var datasetinfo = null;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(dataset.id);
		// ÀÌº¥Æ® ¹ß»ýÀ§Ä¡ ÀúÀå
		datasetinfo.grid_event_x = xpos;
		datasetinfo.grid_event_y = ypos;
	}
	catch (e)
	{
		C_msgOk("G_OnLButtonUp ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnLButtonUp(dataset, grid, row, colid, xpos, ypos);
	}
	catch (e)
	{
		if (typeof(OnLButtonUp) == "function")
		{
			C_msgOk("G_OnLButtonUp ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnPopup(dataset, grid, row, colid, data)
{
	try
	{
		var		objdateinfo = G_searchDateCol(grid,colid);
		if(objdateinfo != null)
		{
			var		COL_DATA;
			COL_DATA = dataset.NameString(row,colid);
			C_Calendar(objdateinfo.calendarid, objdateinfo.datetag, COL_DATA);
		}
	}
	catch (e)
	{
		C_msgOk("G_OnPopup ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	G_processLov(dataset, grid, row, colid, data);
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnPopup(dataset, grid, row, colid, data);
	}
	catch (e)
	{
		if (typeof(OnPopup) == "function")
		{
			C_msgOk("G_OnPopup ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnRButtonDblClk(dataset, grid, row, colid, xpos, ypos)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnRButtonDblClk(dataset, grid, row, colid, xpos, ypos);
	}
	catch (e)
	{
		if (typeof(OnRButtonDblClk) == "function")
		{
			C_msgOk("G_OnRButtonDblClk ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnRButtonDown(dataset, grid, row, colid, xpos, ypos)
{
//	try
//	{
//		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
//		OnRButtonDown(dataset, grid, row, colid, xpos, ypos);
//	}
//	catch (e)
//	{
//		if (typeof(OnRButtonDown) == "function")
//		{
//			C_msgOk("G_OnRButtonDown ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
//		}
//	}
	
	try
	{
		var lsBar1 = "¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡^1^0001^false";
		var lsBar2 = "¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡^1^0002^false";
		var lsBar3 = "¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡^1^0003^false";
		
		var lsFind = dataset.CountRow > 0 ? "Ã£±â(ALT+F)^1^1020^true" : "Ã£±â^1^1020^false";
		var lsNextFind = C_isNull(G_findCol) || C_isNull(G_findText) || dataset.CountRow < 1 ? "´ÙÀ½Ã£±â(F12)^1^1040^false" : "´ÙÀ½Ã£±â(F12)^1^1040^true";
		
		var lsLoad = "Á¶È¸(ALT+R)^1^3010^true";
		var lsAdd = "Ãß°¡(ALT+A)^1^3020^true";
		var lsInsert = dataset.CountRow > 0 ? "»ðÀÔ(ALT+I)^1^3030^true" : "»ðÀÔ(ALT+I)^1^3030^false";
		var lsDelete = dataset.CountRow > 0 ? "»èÁ¦(ALT+D)^1^3040^true" : "»èÁ¦(ALT+D)^1^3040^false";
		var	lsDuplicate = dataset.CountRow > 0 && dataset.RowPosition > 1 ? "º¹Á¦(ALT+C)^1^3045^true" : "º¹Á¦(ALT+C)^1^3045^false";
		var lsSave = "ÀúÀå(ALT+S)^1^3050^true";
		
		var lsExcel = dataset.CountRow > 0 ? "¿¢¼¿º¯È¯^1^5020^true" : "¿¢¼¿º¯È¯^1^5020^false";
		var lsExcelSheet = dataset.CountRow > 0 ? "¿¢¼¿º¯È¯(Sheet)^1^5040^true" : "¿¢¼¿º¯È¯(Sheet)^1^5040^false";
		
		var lsColHide = C_isNull(grid.GetColumn()) ? "¿­¼û±â±â^1^7020^false" : "¿­¼û±â±â^1^7020^true";
		var lsColShow = "¿­º¸ÀÌ±â^1^7040^true";
		var lsColList = "ÀüÃ¼^2^70400^true,";
		
		// ¼û°ÜÁø ¿­ ¸®½ºÆ®¸¦ ¼­ºê ¸Þ´º·Î ±¸¼º
		var lrCols = G_getGridCols(grid);
		
		if (lrCols != null && lrCols.length > 0)
		{
			for (var i = 0; i < lrCols.length; i++)
			{
				if (grid.ColumnProp(lrCols[i], "Show") == "FALSE")
				{
					lsColList += grid.ColumnProp(lrCols[i], "Name") + "^2^7040" + (i + 1) + "^true,";
				}
			}
			
			lsColList = lsColList.substring(0, lsColList.length - 1);
		}
		
		switch (C_ProgAuthority)
		{
			case "R" : // ¾²±â
				if (C_ProgAuthority_R == "T")
				{
					lsLoad = "Á¶È¸(ALT+R)^1^3010^true";
					lsAdd = "Ãß°¡(ALT+A)^1^3020^false";
					lsInsert = "»ðÀÔ(ALT+I)^1^3030^false";
					lsDelete = "»èÁ¦(ALT+D)^1^3040^false";
					lsSave = "ÀúÀå(ALT+S)^1^3050^false";
					lsDuplicate = "º¹Á¦(ALT+C)^1^3045^false";
				}
				else
				{
					lsLoad = "Á¶È¸(ALT+R)^1^3010^false";
					lsAdd = "Ãß°¡(ALT+A)^1^3020^false";
					lsInsert = "»ðÀÔ(ALT+I)^1^3030^false";
					lsDelete = "»èÁ¦(ALT+D)^1^3040^false";
					lsSave = "ÀúÀå(ALT+S)^1^3050^false";
					lsDuplicate = "º¹Á¦(ALT+C)^1^3045^false";
				}
				break;
			case "I" : // ÀÐ±â
				//Á¶È¸
				if (C_ProgAuthority_R == "T")
				{
					lsLoad = "Á¶È¸(ALT+R)^1^3010^true";
				}
				else
				{
					lsLoad = "Á¶È¸(ALT+R)^1^3010^false";
				}
				//Ãß°¡
				if (C_ProgAuthority_A == "T")
				{
					lsAdd = "Ãß°¡(ALT+A)^1^3020^true";
				}
				else
				{
					lsAdd = "Ãß°¡(ALT+A)^1^3020^false";
				}
				//»ðÀÔ
				if (C_ProgAuthority_I == "T")
				{
					lsInsert = "»ðÀÔ(ALT+I)^1^3030^true";
				}
				else
				{
					lsInsert = "»ðÀÔ(ALT+I)^1^3030^false";
				}
				//»èÁ¦
				if (C_ProgAuthority_D == "T")
				{
					lsDelete = "»èÁ¦(ALT+D)^1^3040^true";
				}
				else
				{
					lsDelete = "»èÁ¦(ALT+D)^1^3040^false";
				}
				//ÀúÀå
				if (C_ProgAuthority_S == "T")
				{
					lsSave = "ÀúÀå(ALT+S)^1^3050^ture";
				}
				else
				{
					lsSave = "ÀúÀå(ALT+S)^1^3050^false";
				}
				//º¹Á¦
				if ((C_ProgAuthority_A == "T") || (C_ProgAuthority_I == "T"))
				{
					lsDuplicate = "º¹Á¦(ALT+C)^1^3045^true";
				}
				else
				{
					lsDuplicate = "º¹Á¦(ALT+C)^1^3045^false";
				}
				break;
			default :
				lsLoad = "Á¶È¸(ALT+R)^1^3010^false";
				lsAdd = "Ãß°¡(ALT+A)^1^3020^false";
				lsInsert = "»ðÀÔ(ALT+I)^1^3030^false";
				lsDelete = "»èÁ¦(ALT+D)^1^3040^false";
				lsSave = "ÀúÀå(ALT+S)^1^3050^false";
				lsDuplicate = "º¹Á¦(ALT+C)^1^3045^false";
				break;
		}
		if(! grid.Editable)
		{
			lsAdd = "Ãß°¡(ALT+A)^1^3020^false";
			lsInsert = "»ðÀÔ(ALT+I)^1^3030^false";
			lsDelete = "»èÁ¦(ALT+D)^1^3040^false";
			lsSave = "ÀúÀå(ALT+S)^1^3050^false";
			lsDuplicate = "º¹Á¦(ALT+C)^1^3045^false";
		}
		grid.MenuData = lsFind + "," + lsNextFind;
		grid.MenuData += "," + lsBar1 + "," + lsLoad + "," + lsAdd + "," + lsInsert + "," + lsDuplicate + "," + lsDelete + "," + lsSave;
		grid.MenuData += "," + lsBar2 + "," + lsExcel + "," + lsExcelSheet;
		grid.MenuData += "," + lsBar3 + "," + lsColHide + "," + lsColShow + "," + lsColList;
		grid.SetColumn(colid);
		try
		{
			// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
			OnRButtonDown(dataset, grid, row, colid, xpos, ypos);
		}
		catch (e)
		{
			if (typeof(OnRButtonDown) == "function")
			{
				C_msgOk("G_OnRButtonDown ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
			}
		}
		
		grid.TrackPopupMenu (xpos, ypos);
	}
	catch (e)
	{
		C_msgOk("G_OnRButtonDown ÀÌº¥Æ® ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_OnRButtonUp(dataset, grid, row, colid, xpos, ypos)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnRButtonUp(dataset, grid, row, colid, xpos, ypos);
	}
	catch (e)
	{
		if (typeof(OnRButtonUp) == "function")
		{
			C_msgOk("G_OnRButtonUp ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnReturn(dataset, grid, row, colid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnReturn(dataset, grid, row, colid);
	}
	catch (e)
	{
		if (typeof(OnReturn) == "function")
		{
			C_msgOk("G_OnReturn ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnScrolling(dataset, grid, row, column, setscrolling)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnScrolling(dataset, grid, row, column, setscrolling);
	}
	catch (e)
	{
		if (typeof(OnScrolling) == "function")
		{
			C_msgOk("G_OnScrolling ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}

function G_OnSetFocus(dataset, grid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		OnSetFocus(dataset, grid);
	}
	catch (e)
	{
		if (typeof(OnSetFocus) == "function")
		{
			C_msgOk("G_OnSetFocus ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
	
	try
	{
		var lrCols = null;
		var lrGrps = null;
		
		// ÀüÃ¼ ±×¸®µå ¸®™V
		for (var i = 0; i < G_arrDataSets.length; i++)
		{
			if (G_arrDataSets[i].grid == null) continue;
			
			lrCols = G_getGridCols(G_arrDataSets[i].grid);

			G_arrDataSets[i].grid.IndicatorBkColor = G_arrDataSets[i].grid == grid ? G_GRID_SET_FOCUS_COLOR : G_GRID_KILL_FOCUS_COLOR;
			G_arrDataSets[i].grid.IndicatorColBkColor = G_arrDataSets[i].grid == grid ? G_GRID_SET_FOCUS_COLOR : G_GRID_KILL_FOCUS_COLOR;
			
			if (lrCols != null && lrCols.length > 0)
			{
				for (var j = 0; j < lrCols.length; j++)
				{
					G_arrDataSets[i].grid.ColumnProp(lrCols[j], "HeadBgColor") = G_arrDataSets[i].grid == grid ? G_GRID_SET_FOCUS_COLOR : G_GRID_KILL_FOCUS_COLOR;
				}
			}			
		}
		
		// ÇöÀç Æ÷Ä¿½º¸¦ ¹ÞÀº ±×¸®µåÀÇ µ¥ÀÌÅÍ™V ÀúÀå
		G_FocusDataset = dataset;
		
		// ÇöÀç Æ÷Ä¿½º¸¦ ¹ÞÀº ±×¸®µåÀÇ µ¥ÀÌÅÍ™VÀÇ Á¤º¸¸¦ »óÅÂ¹Ù¿¡ Ç¥½Ã
		window.status = "[ÀüÃ¼ : " + dataset.CountRow + " Çà] ÇöÀç : " + dataset.RowPosition + " Çà";
	}
	catch (e)
	{
		C_msgOk("G_OnSetFocus ÀÌº¥Æ® ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_OnUserColor(dataset, grid, row, eventid)
{
	try
	{
		// °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call
		return OnUserColor(dataset, grid, row, eventid);
	}
	catch (e)
	{
		if (typeof(OnUserColor) == "function")
		{
			C_msgOk("G_OnUserColor ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}


/*-------------------- °³¹ßÀÚ »ç¿ë°¡´É ÇÔ¼ö --------------------*/
// DataSet °øÅë ÃÊ±âÈ­
function G_DataSetInit(dataset)
{
	if (dataset == null)
	{
		C_msgOk("DataSet °øÅë ÃÊ±âÈ­ ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		// !!DataSet °øÅë ÃÊ±âÈ­ Ãß°¡!!
		dataset.SyncLoad = true;
	}
	catch (e)
	{
		C_msgOk("DataSet °øÅë ÃÊ±âÈ­ ¼³Á¤ ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// Transaction °øÅë ÃÊ±âÈ­
function G_TransInit(trans)
{
	if (trans == null)
	{
		C_msgOk("Transaction °øÅë ÃÊ±âÈ­ ¿¡·¯ : " + G_MSG_TRANS_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		// !!Transaction °øÅë ÃÊ±âÈ­ Ãß°¡!!
		trans.ServerIP = "";
		trans.KeyName = "toinb_dataid4";
		trans.Protocol = "1";
		//trans.StatusResetType = "0";
	}
	catch (e)
	{
		C_msgOk("Transaction °øÅë ÃÊ±âÈ­ ¼³Á¤ ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// Grid °øÅë ÃÊ±âÈ­
function G_GridInit(grid)
{
	if (grid == null)
	{
		C_msgOk("Grid °øÅë ÃÊ±âÈ­ ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		// !!Grid °øÅë ÃÊ±âÈ­ Ãß°¡!!
		grid.ColSelect = false;
		grid.ColSizing = "true";
		grid.SortView = "false";
		grid.AutoResizing = true;
		grid.FixSizing = true;
		grid.UsingOneClick = 1;
		grid.DragDropEnable = true;
		grid.SuppressOption = "1";
		grid.SelectionColor += "<SC>Type='EditCol', BgColor='#D4E4E4'</SC>";
		grid.SelectionColor += "<SC>Type='EditRow', BgColor='#D4E4E4'</SC>";
		grid.SelectionColor += "<SC>Type='CurCol', BgColor='#D4E4E4'</SC>";
		grid.SelectionColor += "<SC>Type='CurRow', BgColor='#D4E4E4'</SC>";
		grid.SelectionColor += "<SC>Type='SelRow', BgColor='#D4E4E4'</SC>";
	}
	catch (e)
	{
		C_msgOk("Grid °øÅë ÃÊ±âÈ­ ¼³Á¤ ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSet µî·Ï
function G_addDataSet(aDataset, aTrans, aGrid, aServiceURL, aDataSetTitle, aNotNullColName, aSort, aClearChild)
{
	if (aDataset == null)
	{
		C_msgOk("DataSet µî·Ï ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{	
		var objDataSetInfo = new G_DataSetInfo(aDataset, aTrans, aGrid, aServiceURL, aDataSetTitle, aNotNullColName, aSort, aClearChild);
		
		if (G_arrDataSets == null) G_arrDataSets = new Array();
		
		G_arrDataSets.push(objDataSetInfo);
	}
	catch (e)
	{
		C_msgOk("DataSet µî·Ï ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	try
	{
		G_DataSetInit(aDataset);
		// DataSet °ü·Ã ÀÌº¥Æ®
		aDataset.attachEvent ("OnRowInserted", new Function("row", "G_OnRowInserted(" + aDataset.id + ", row);"));
		aDataset.attachEvent ("OnRowDeleted", new Function("row", "G_OnRowDeleted(" + aDataset.id + ", row);"));
		aDataset.attachEvent ("OnDataError", new Function("row", "colid", "G_OnDataError(" + aDataset.id + ", row, colid);"));
		aDataset.attachEvent ("CanRowPosChange", new Function("row", "return G_CanRowPosChange(" + aDataset.id + ", row);"));
		aDataset.attachEvent ("OnRowPosChanged", new Function("row", "G_OnRowPosChanged(" + aDataset.id + ", row);"));
		aDataset.attachEvent ("OnColumnChanged", new Function("row", "colid", "G_OnColumnChanged(" + aDataset.id + ", row, colid);"));
		aDataset.attachEvent ("OnLoadStarted", new Function("G_OnLoadStarted(" + aDataset.id + ");"));
		aDataset.attachEvent ("OnLoadCompleted", new Function("rowcnt", "G_OnLoadCompleted(" + aDataset.id + ", rowcnt);"));
		aDataset.attachEvent ("OnLoadError", new Function("G_OnLoadError(" + aDataset.id + ");"));
		aDataset.attachEvent ("OnLoadProcess", new Function("rowcnt", "G_OnLoadProcess(" + aDataset.id + ", rowcnt);"));
		aDataset.attachEvent ("OnFilter", new Function("row", "return G_OnFilter(" + aDataset.id + ", row);"));
		aDataset.attachEvent ("OnLayoutChanged", new Function("colcnt", "G_OnLayoutChanged(" + aDataset.id + ", colcnt);"));
		aDataset.attachEvent ("OnRowsetChanged", new Function("G_OnRowsetChanged(" + aDataset.id + ");"));
	}
	catch (e)
	{
		C_msgOk("DataSet ÃÊ±âÈ­ ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	try
	{
		if (aTrans != null)
		{
			G_TransInit(aTrans);
			
			// Transaction °ü·Ã ÀÌº¥Æ®
			aTrans.attachEvent ("OnSuccess", new Function("G_OnSuccess(" + aDataset.id + ", " + aTrans.id + ");"));
			aTrans.attachEvent ("OnFail", new Function("G_OnFail(" + aDataset.id + ", " + aTrans.id + ");"));
		}
	}
	catch (e)
	{
		C_msgOk("Transaction ÃÊ±âÈ­ ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	try
	{
		if (aGrid != null)
		{
			aGrid.DataID = aDataset.id;
			
			G_GridInit(aGrid);
			G_setGridToggleColor(aGrid);
			
			// ±×¸®µåÀÇ onFocus Ã³¸® ÇÔ¼ö
			aGrid.onfocus = G_OnFocus;
			
			// Grid °ü·Ã ÀÌº¥Æ®
			aGrid.attachEvent ("CanColumnPosChange", new Function("row", "colid", "return G_CanColumnPosChange(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnClick", new Function("row", "colid", "G_OnClick(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnCloseUp", new Function("row", "colid", "G_OnCloseUp(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnColIndexChanged", new Function("srcIndex", "destIndex", "G_OnColIndexChanged(" + aDataset.id + ", " + aGrid.id + ", srcIndex, destIndex);"));
			aGrid.attachEvent ("OnColSizing", new Function("Index", "OrgWidth", "RstWidth", "G_OnColSizing(" + aDataset.id + ", " + aGrid.id + ", Index, OrgWidth, RstWidth);"));
			aGrid.attachEvent ("OnColumnPosChanged", new Function("row", "colid", "return G_OnColumnPosChanged(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnCommand", new Function("code", "text", "G_OnCommand(" + aDataset.id + ", " + aGrid.id + ", code, text);"));
			aGrid.attachEvent ("OnDblClick", new Function("row", "colid", "G_OnDblClick(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnDropDown", new Function("row", "colid", "G_OnDropDown(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnEnter", new Function("row", "colid", "G_OnEnter(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnExit", new Function("row", "colid", "olddata", "G_OnExit(" + aDataset.id + ", " + aGrid.id + ", row, colid, olddata);"));
			aGrid.attachEvent ("OnFirstUp", new Function("G_OnFirstUp(" + aDataset.id + ", " + aGrid.id + ");"));
			aGrid.attachEvent ("OnKeyPress", new Function("kcode", "G_OnKeyPress(" + aDataset.id + ", " + aGrid.id + ", kcode);"));
			aGrid.attachEvent ("OnKillFocus", new Function("G_OnKillFocus(" + aDataset.id + ", " + aGrid.id + ");"));
			aGrid.attachEvent ("OnLastDown", new Function("G_OnLastDown(" + aDataset.id + ", " + aGrid.id + ");"));
			aGrid.attachEvent ("OnLButtonDblClk", new Function("row", "colid", "xpos", "ypos", "G_OnLButtonDblClk(" + aDataset.id + ", " + aGrid.id + ", row, colid, xpos, ypos);"));
			aGrid.attachEvent ("OnLButtonDown", new Function("row", "colid", "xpos", "ypos", "G_OnLButtonDown(" + aDataset.id + ", " + aGrid.id + ", row, colid, xpos, ypos);"));
			aGrid.attachEvent ("OnLButtonUp", new Function("row", "colid", "xpos", "ypos", "G_OnLButtonUp(" + aDataset.id + ", " + aGrid.id + ", row, colid, xpos, ypos);"));
			aGrid.attachEvent ("OnPopup", new Function("row", "colid", "data", "G_OnPopup(" + aDataset.id + ", " + aGrid.id + ", row, colid, data);"));
			aGrid.attachEvent ("OnRButtonDblClk", new Function("row", "colid", "xpos", "ypos", "G_OnRButtonDblClk(" + aDataset.id + ", " + aGrid.id + ", row, colid, xpos, ypos);"));
			aGrid.attachEvent ("OnRButtonDown", new Function("row", "colid", "xpos", "ypos", "G_OnRButtonDown(" + aDataset.id + ", " + aGrid.id + ", row, colid, xpos, ypos);"));
			aGrid.attachEvent ("OnRButtonUp", new Function("row", "colid", "xpos", "ypos", "G_OnRButtonUp(" + aDataset.id + ", " + aGrid.id + ", row, colid, xpos, ypos);"));
			aGrid.attachEvent ("OnReturn", new Function("row", "colid", "G_OnReturn(" + aDataset.id + ", " + aGrid.id + ", row, colid);"));
			aGrid.attachEvent ("OnScrolling", new Function("row", "column", "setscrolling", "G_OnScrolling(" + aDataset.id + ", " + aGrid.id + ", row, column, setscrolling);"));
			aGrid.attachEvent ("OnSetFocus", new Function("G_OnSetFocus(" + aDataset.id + ", " + aGrid.id + ");"));
			aGrid.attachEvent ("OnUserColor", new Function("row", "eventid", "return G_OnUserColor(" + aDataset.id + ", " + aGrid.id + ", row, eventid);"));
		}
	}
	catch (e)
	{
		C_msgOk("Grid ÃÊ±âÈ­ ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSetÀÇ Relation µî·Ï
function G_addRel(aMasterDataset, aDetailDataset)
{
	if (aMasterDataset == null || aDetailDataset == null)
	{
		C_msgOk("G_addRel ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		var datasetinfoM = G_searchDataSetInfo(aMasterDataset.id);
		var datasetinfoD = G_searchDataSetInfo(aDetailDataset.id);
		
		if (datasetinfoM == null)
		{
			C_msgOk("G_addRel ¿¡·¯ : " + G_MSG_DATASET_REG_ERR + "(" + aMasterDataset.id + ")", "¿¡·¯");
			return false;
		}
		
		if (datasetinfoD == null)
		{
			C_msgOk("G_addRel ¿¡·¯ : " + G_MSG_DATASET_REG_ERR + "(" + aDetailDataset.id + ")", "¿¡·¯");
			return false;
		}
		
		if (datasetinfoM.detailDataSets == null) datasetinfoM.detailDataSets = new Array();
		
		datasetinfoM.detailDataSets.push(datasetinfoD);
		datasetinfoD.masterDataSet = datasetinfoM;
	}
	catch (e)
	{
		C_msgOk("G_addRel ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSetÀÇ Relation µî·Ï
function G_addRelCol(aDataset, aMasterColName, aDetailColName)
{
	if (aDataset == null)
	{
		C_msgOk("G_addRelCol ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	if (C_isNull(aMasterColName) || C_isNull(aDetailColName))
	{
		C_msgOk("G_addRelCol ¿¡·¯ : " + G_MSG_COL_NAME_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		var datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		if (datasetinfo == null)
		{
			C_msgOk("G_addRelCol ¿¡·¯ : " + G_MSG_DATASET_REG_ERR + "(" + aDataset.id + ")", "¿¡·¯");
			return false;
		}
		
		if (datasetinfo.relCols == null) datasetinfo.relCols = new Array();
		
		var relColInfo = new G_RelColInfo(aMasterColName, aDetailColName);
		
		datasetinfo.relCols.push(relColInfo);
	}
	catch (e)
	{
		C_msgOk("G_addRelCol ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSetÀÇ ÀÚ·áÀÐ±â
function G_Load(aDataset, aDataId)
{
	if (aDataset == null)
	{
		C_msgOk("G_Load ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		// ÀÐ±âÀü º¯°æ»çÇ× Ã¼Å©(ÇöÀç »ç¿ë ¾ÈÇÔ)
		/*
		if (aDataset.IsUpdated || G_isChanged(aDataset.id))
		{
			var ret = C_msgYesNo(G_MSG_CHANGED_SAVE, "ÀúÀå");
			
			if (ret == "Y")
			{
				if (!G_saveAllData(aDataset)) return false;
			}
			else
			{
				G_clearAllData(aDataset);
			}
		}
		*/
		
		G_isLoading = true;
		
		if (!C_isNull(aDataId))
		{
			aDataset.DataId = aDataId;
		}
		
		G_OnLoadBefore(aDataset);

		aDataset.reset();
	}
	catch (e)
	{
		G_isLoading = false;
		C_msgOk("G_Load ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSet¿¡ ÇÑ Çà Ãß°¡
function G_addRow(aDataset, aValid)
{
	var datasetinfo = null;
	
	if (aDataset == null)
	{
		C_msgOk("G_addRow ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	if (!G_OnRowInsertBefore(aDataset)) return;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		if (aValid == null || aValid == true)
		{
			if (!G_isSyncData())
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÇ " + G_MSG_COL_KEY_ERROR + G_NotNullColName, "¿¡·¯");
				return false;
			}
			
			if (!G_isMasterKeyInserted(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÇ " + G_MSG_COL_NOT_NULL, "¿¡·¯");
				return false;
			}
			
			if (G_isChanged(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÌ(°¡) ÀúÀåµÇÁö ¾Ê¾Ò½À´Ï´Ù.", "¿¡·¯");
				return false;
			}
		}
		
		aDataset.addRow();
		G_setKeyInsert(aDataset.id);
		
		// ÀÚµ¿ Æ÷Ä¿½º
		if (datasetinfo.grid != null)
		{
			datasetinfo.grid.Focus();
		}
	}
	catch (e)
	{
		C_msgOk("G_addRow ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSetÀÇ Æ¯Á¤ À§Ä¡¿¡ ÇÑ Çà Ãß°¡
function G_insertRow(aDataset, row, aValid)
{
	var datasetinfo = null;
	var iRow = 0;
	
	if (aDataset == null)
	{
		C_msgOk("G_insertRow ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	iRow = (row == null || row == undefined) ? aDataset.RowPosition : row;
	
	if (row < 1)
	{
		C_msgOk("G_insertRow ¿¡·¯ : " + G_MSG_ROW_NULL, "¿¡·¯");
		return false;
	}
	
	if (!G_OnRowInsertBefore(aDataset)) return;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		if (aValid == null || aValid == true)
		{
			if (!G_isSyncData())
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÇ " + G_MSG_COL_KEY_ERROR + G_NotNullColName, "¿¡·¯");
				return false;
			}
			
			if (!G_isMasterKeyInserted(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÇ " + G_MSG_COL_NOT_NULL, "¿¡·¯");
				return false;
			}
			
			if (G_isChanged(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÌ(°¡) ÀúÀåµÇÁö ¾Ê¾Ò½À´Ï´Ù.", "¿¡·¯");
				return false;
			}
		}
		
		aDataset.InsertRow(iRow);
		G_setKeyInsert(aDataset.id);
		
		// ÀÚµ¿ Æ÷Ä¿½º
		if (datasetinfo.grid != null)
		{
			datasetinfo.grid.Focus();
		}
	}
	catch (e)
	{
		C_msgOk("G_insertRow ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSetÀÇ Æ¯Á¤ À§Ä¡¿¡ ÇÑ Çà »èÁ¦
function G_deleteRow(aDataset, row, aValid)
{
	var datasetinfo = null;
	var iRow = 0;
	
	if (aDataset == null)
	{
		C_msgOk("G_deleteRow ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	iRow = (row == null || row < 1) ? aDataset.RowPosition : row;
	
	if (aDataset.CountRow > 0)
	{
		if (iRow == null || iRow < 1)
		{
			C_msgOk("G_deleteRow ¿¡·¯ : " + G_MSG_ROW_NULL, "¿¡·¯");
			return false;
		}
	}
	
	if (!G_OnRowDeleteBefore(aDataset)) return;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		if (aValid == null || aValid == true)
		{
			if (G_isChanged(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÌ(°¡) ÀúÀåµÇÁö ¾Ê¾Ò½À´Ï´Ù.", "¿¡·¯");
				return false;
			}
			
			if (G_isExistRow(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÇ µ¥ÀÌÅÍ°¡ Á¸ÀçÇÕ´Ï´Ù.", "¿¡·¯");
				return false;
			}
		}
		
		aDataset.DeleteRow(iRow);
		
		// ÀÚµ¿ Æ÷Ä¿½º
		if (datasetinfo.grid != null)
		{
			datasetinfo.grid.Focus();
		}
	}
	catch (e)
	{
		C_msgOk("G_deleteRow ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSetÀÇ ¸ðµç Çà »èÁ¦
function G_deleteAllRow(aDataset, aValid)
{
	var datasetinfo = null;
	
	if (aDataset == null)
	{
		C_msgOk("G_deleteAllRow ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	if (!G_OnRowDeleteBefore(aDataset)) return;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		if (aValid == null || aValid == true)
		{
			if (G_isChanged(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÌ(°¡) ÀúÀåµÇÁö ¾Ê¾Ò½À´Ï´Ù.", "È®ÀÎ");
				return false;
			}
			
			if (G_isExistRow(aDataset.id))
			{
				C_msgOk("'" + G_DataSetTitle + "'ÀÇ µ¥ÀÌÅÍ°¡ Á¸ÀçÇÕ´Ï´Ù.", "È®ÀÎ");
				return false;
			}
		}
		
		aDataset.DeleteAll();
		
		// ÀÚµ¿ Æ÷Ä¿½º
		if (datasetinfo.grid != null)
		{
			datasetinfo.grid.Focus();
		}
	}
	catch (e)
	{
		C_msgOk("G_deleteAllRow ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}

// DataSetÀÇ ÀúÀå
function G_saveData(aDataset)
{
	var datasetinfo = null;
	var trans = null;
	
	if (aDataset == null)
	{
		C_msgOk("G_saveData ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		trans = datasetinfo.trans;

		if (trans == null)
		{
			C_msgOk("G_saveData ¿¡·¯ : " + G_MSG_TRANS_NULL + "(" + aDataset.id + ")", "¿¡·¯");
			return false;
		}
		
		if(!G_OnPostBefore(aDataset, trans)) return false;
		
		if (!G_isSyncData())
		{
			C_msgOk("'" + G_DataSetTitle + "'ÀÇ " + G_MSG_COL_KEY_ERROR + G_NotNullColName, "¿¡·¯");
			return false;
		}
		
		if (!G_isKeyInserted(aDataset.id))
		{
			C_msgOk("'" + G_DataSetTitle + "'ÀÇ " + G_MSG_COL_NOT_NULL, "È®ÀÎ");
			return false;
		}
		
		G_isSaveing = true;
		G_isError = false;

		trans.Post();
	}
	catch (e)
	{
		G_isSaveing = false;
		C_msgOk("G_saveData ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return !G_isError;
}

// DataSetÀÇ ÀúÀå(ÀúÀå¿Ï·á ¸Þ¼¼Áö Ãâ·Â)
function G_saveDataMsg(aDataset)
{
	if (G_saveData(aDataset) && !G_isError)
	{
		C_msgOk(G_MSG_SAVE_OK);
		return true;
	}
	else
	{
		return false;
	}
}
// ÇØ´ç DataSetÀÇ ÀúÀå ¹× ÇÏÀ§ÀÇ ¸ðµç DataSet ÀúÀå(ÀúÀå¿Ï·á ¸Þ¼¼Áö Ãâ·Â)
function G_saveAllDataMsg(aDataset)
{
	if (G_saveAllData(aDataset))
	{
		C_msgOk(G_MSG_SAVE_OK);
		return true;
	}
	else
	{
		return false;
	}
}

// ÇØ´ç DataSetÀÇ ÀúÀå ¹× ÇÏÀ§ÀÇ ¸ðµç DataSet ÀúÀå
function G_saveAllData(aDataset)
{
	var datasetinfo = null;
	
	if (aDataset == null)
	{
		C_msgOk("G_saveAllData ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return false;
	}
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		if (aDataset.IsUpdated)
		{
			if (!G_saveData(aDataset)) return false;
		}
		
		for (var i = 0; i < datasetinfo.detailDataSets.length; i++)
		{
			if (!G_saveAllData(datasetinfo.detailDataSets[i].dataset)) return false;
		}
	}
	catch (e)
	{
		C_msgOk("G_saveAllData ¿¡·¯ : " + e.message, "¿¡·¯");
		return false;
	}
	
	return true;
}


// ÇØ´ç DataSet ¹× ÇÏÀ§ÀÇ ¸ðµç DataSetÀÇ ¸ðµç Data ¹× Header Á¤º¸¸¦ Áö¿î´Ù
function G_clearAllData(aDataset)
{
	var datasetinfo = null;
	
	if (aDataset == null)
	{
		C_msgOk("G_clearAllData ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		aDataset.ClearAll();
		
		for (var i = 0; i < datasetinfo.detailDataSets.length; i++)
		{
			G_clearAllData(datasetinfo.detailDataSets[i].dataset);
		}
	}
	catch (e)
	{
		C_msgOk("G_clearAllData ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

// ÇØ´ç DataSetÀÇ ÀÐ±â/¾²±â ÄÃ·³ ¼³Á¤
function G_setReadWriteCol(aGrid, aColName)
{
	if (aGrid == null)
	{
		C_msgOk("G_setReadWriteCol ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return;
	}
	
	if (C_isNull(aColName))
	{
		C_msgOk("G_setReadWriteCol ¿¡·¯ : " + G_MSG_COL_NAME_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		aGrid.ColumnProp(aColName, "Edit") = "";
		aGrid.ColumnProp(aColName, "BgColor") = G_NORMAL_COLOR;
	}
	catch (e)
	{
		C_msgOk("G_setReadWriteCol ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

// ÇØ´ç DataSetÀÇ ÀÐ±âÀü¿ë ÄÃ·³ ¼³Á¤
function G_setReadOnlyCol(aGrid, aColName)
{
	if (aGrid == null)
	{
		C_msgOk("G_setReadOnlyCol ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return;
	}
	
	if (C_isNull(aColName))
	{
		C_msgOk("G_setReadOnlyCol ¿¡·¯ : " + G_MSG_COL_NAME_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		aGrid.ColumnProp(aColName, "Edit") = "None"; // ¼öÁ¤ºÒ°¡
		aGrid.ColumnProp(aColName, "BgColor") = G_READONLY_COLOR;
	}
	catch (e)
	{
		C_msgOk("G_setReadOnlyCol ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

// ÇØ´ç DataSetÀÇ LOV ÄÃ·³ ¼³Á¤
function G_setLovCol(aGrid, aColName, isBgColor)
{
	if (aGrid == null)
	{
		C_msgOk("G_setLovCol ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return;
	}
	
	if (C_isNull(aColName))
	{
		C_msgOk("G_setLovCol ¿¡·¯ : " + G_MSG_COL_NAME_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		//aGrid.ColumnProp(aColName, "Edit") = "None"; // ¼öÁ¤ºÒ°¡
		if (isBgColor == null) aGrid.ColumnProp(aColName, "BgColor") = G_LOV_COLOR;
		aGrid.ColumnProp(aColName, "EditStyle") = "Popup";
		aGrid.RejectEnterkeyOnPopupStyle = true;		//±×¸®µå¿¡¼­ enter Å° ÀÔ·Â½Ã popupÀ» ¶ßÁö ¾Ê°ÔÇÑ´Ù.
	}
	catch (e)
	{
		C_msgOk("G_setLovCol ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

// ÇØ´ç GridÀÇ LOV ÄÃ·³ ¼³Á¤(ÄÃ·³ÆíÁýºÒ°¡)
function G_setLovFixCol(aGrid, aColName, isBgColor)
{
	if (aGrid == null)
	{
		C_msgOk("G_setLovFixCol ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return;
	}
	
	if (C_isNull(aColName))
	{
		C_msgOk("G_setLovFixCol ¿¡·¯ : " + G_MSG_COL_NAME_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		if (isBgColor == null || isBgColor) aGrid.ColumnProp(aColName, "BgColor") = G_LOV_COLOR;
		aGrid.ColumnProp(aColName, "EditStyle") = "PopupFix";
		aGrid.RejectEnterkeyOnPopupStyle = true;		//±×¸®µå¿¡¼­ enter Å° ÀÔ·Â½Ã popupÀ» ¶ßÁö ¾Ê°ÔÇÑ´Ù.
	}
	catch (e)
	{
		C_msgOk("G_setLovFixCol ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

// ÇØ´ç GridÀÇ ÆË¾÷ ÄÃ·³ ¼³Á¤
function G_setPopupCol(aGrid, aColName, isBgColor)
{
	if (aGrid == null)
	{
		C_msgOk("G_setPopupCol ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return;
	}
	
	if (C_isNull(aColName))
	{
		C_msgOk("G_setPopupCol ¿¡·¯ : " + G_MSG_COL_NAME_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		if (isBgColor == null || isBgColor) aGrid.ColumnProp(aColName, "BgColor") = G_NORMAL_COLOR;
		aGrid.ColumnProp(aColName, "EditStyle") = "Popup";
	}
	catch (e)
	{
		C_msgOk("G_setPopupCol ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

// ÇØ´ç GridÀÇ ÆË¾÷ ÄÃ·³ ¼³Á¤(ÄÃ·³ÆíÁýºÒ°¡)
function G_setPopupFixCol(aGrid, aColName, isBgColor)
{
	if (aGrid == null)
	{
		C_msgOk("G_setPopupFixCol ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return;
	}
	
	if (C_isNull(aColName))
	{
		C_msgOk("G_setPopupFixCol ¿¡·¯ : " + G_MSG_COL_NAME_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		if (isBgColor == null || isBgColor) aGrid.ColumnProp(aColName, "BgColor") = G_READONLY_COLOR;
		aGrid.ColumnProp(aColName, "EditStyle") = "PopupFix";
	}
	catch (e)
	{
		C_msgOk("G_setPopupFixCol ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

// ÇØ´ç GridÀÇ ÄÃ·³ ID¸¦ ¹è¿­·Î ³Ñ±ä´Ù.
function G_getGridCols(aGrid)
{
	if (aGrid == null)
	{
		C_msgOk("G_getGridCols ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return null;
	}
	
	if (C_isNull(aGrid.Format)) return null;
	
	var lrCols = new Array();
	var lsTemp = aGrid.Format.toUpperCase().replace(/\t/g," ").replace(/\r/g," ").replace(/'/g,"").replace(/"/g,""); //'
	var lrExceptionChars = new Array("'", '"', " ");
	var lsCol = "";
	var liLastInx = 0;
	
	try
	{
		do
		{
			liLastInx = lsTemp.indexOf("ID", liLastInx);
			
			if (liLastInx == -1) break;
			
			if (lsTemp.charAt(liLastInx - 1) != ' ')
			{
				liLastInx += 2;
				continue;
			}
			
			for (var i = liLastInx + 2; i < lsTemp.length; i++)
			{
				if (lsTemp.charAt(i) == '=')
				{
					lsCol = lsTemp.substring(i + 1, lsTemp.indexOf(" ", i + 1));
					
					if (!C_isNull(lsCol))
					{
						lrCols.push(lsCol);
						liLastInx = lsTemp.indexOf(" ", i + 1);
						break;
					}
				}
				
				liLastInx = i;
			}
		}
		while (liLastInx > 0 && liLastInx < lsTemp.length);
		
		return (lrCols == null || lrCols.length < 1) ? null : lrCols;
	}
	catch (e)
	{
		C_msgOk("G_getGridCols ¿¡·¯ : " + e.message, "¿¡·¯");
		return null;
	}
}

// ÇØ´ç GridÀÇ Çà »ö»óÀ» Åä±ÛÇÏµµ·Ï ¼³Á¤(aCols:ÄÃ·³¸íÀ» ´ãÀº ¹è¿­)
function G_setGridToggleColor(aGrid)
{
	if (aGrid == null)
	{
		C_msgOk("G_setGridToggleColor ¿¡·¯ : " + G_MSG_GRID_NULL, "¿¡·¯");
		return;
	}
	
	try
	{
		var lrCols = G_getGridCols(aGrid);
		
		if (lrCols == null || lrCols.length < 1) return;
		
		for (var i = 0; i < lrCols.length; i++)
		{
			if (aGrid.ColumnProp(lrCols[i], "BgColor") == -1)
			{
				aGrid.ColumnProp(lrCols[i], "BgColor") = "{Decode(CurRow-ToInteger(CurRow/2)*2, 0, '" + G_TOGGLE_COLOR + "', 1, '" + G_NORMAL_COLOR + "')}";
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_setGridToggleColor ¿¡·¯ : " + e.message, "¿¡·¯");
		return;
	}
}

function G_findWindow(dataset, grid)
{
	try
	{
		var args = new Array();
		var ret = null;
		
		args[0] = dataset;
		args[1] = grid;
		args[2] = grid.GetColumn();
		args[3] = G_findText;
		args[4] = G_findUpper;
		
		var intDalHeight = 206;
		var intDalWidth = 378;
		
		if(isVista)
		{
			intDalHeight = intDalHeight - 45;
			intDalWidth = intDalWidth - 5;
		}
		
		ret = window.showModalDialog(COMM_PATH + "alertFind.jsp", args, "center:yes; dialogWidth:"+intDalWidth+"px; dialogHeight:"+intDalHeight+"px; status:no; help:no; scroll:no");
		
		if (ret == null || ret.length < 4) return;
		
		G_findCol = ret[1];
		G_findText = ret[2];
		G_findUpper = ret[3];
		
		G_find(dataset, G_findCol, G_findText, G_findUpper, false);
		grid.Focus();
	}
	catch (e)
	{
		C_msgOk("G_findWindow ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function G_find(dataset, colid, text, upper, end)
{
	try
	{
		var lsFindText = upper ? G_findText : G_findText.toUpperCase();
		
		if (dataset == null)
		{
			C_msgOk("G_find ¿¡·¯ : " + G_MSG_DATASET_NULL, "¿¡·¯");
			return;
		}
		
		if (C_isNull(colid) || C_isNull(text))
		{
			C_msgOk("G_find ¿¡·¯ : °Ë»öÄÃ·³ ¶Ç´Â °Ë»ö¾î°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò½À´Ï´Ù.", "¿¡·¯");
			return;
		}
		
		for (var i = end ? 1 : dataset.RowPosition + 1; i <= dataset.CountRow; i++)
		{
			var lsText = upper ? dataset.NameString(i, G_findCol) : dataset.NameString(i, G_findCol).toUpperCase();
			
			if (lsText.indexOf(lsFindText) > -1)
			{
				dataset.RowPosition = i;
				G_searchDataSetInfo(dataset.id).grid.Focus();
				return;
			}
		}
		
		if (C_msgYesNo("°Ë»ö¿Ï·á!<br><br>Ã³À½ºÎÅÍ ´Ù½Ã °Ë»öÇÏ½Ã°Ú½À´Ï±î?") == "Y")
		{
			G_find(dataset, colid, text, upper, true);
		}
	}
	catch (e)
	{
		C_msgOk("G_find ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function   G_MultiDeleteRow(aDataset)
{
	/*
	if (!G_OnRowDeleteBefore(aDataset)) return;
	
	for (i=1;i<=aDataset.CountRow;i++)
	{
		if (aDataset.RowMark(i) == 1) 
		{
			aDataset.DeleteMarked();
		}
	}
	*/
	var curRowPosition = 0;
	var arSelectRow = new Array();
	
	for (i=1;i<=aDataset.CountRow;i++) {
		if( aDataset.RowMark(i) == 1 ) {
			if(curRowPosition==0) curRowPosition = i;
			arSelectRow.push(i);
			aDataset.RowMark(i) = 0;
		}
	}

	aDataset.UndoMarked();

	for(i=(arSelectRow.length-1);i>=0;i--){
		G_deleteRow(aDataset, arSelectRow[i], true);
	}

	if( curRowPosition == 0 ) return;

	if( curRowPosition > aDataset.CountRow ) {
		aDataset.RowPosition = aDataset.CountRow;
	} else {
		aDataset.RowPosition = curRowPosition;
	}
}
function G_ChildRetrieveOnOff(aDataset,abBool)
{
	var datasetinfo = null;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		datasetinfo.isOffLoadChild = abBool;
	}
	catch (e)
	{
		C_msgOk("G_ChildRetrieveOnOff ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}
function G_ChildRetrieveOn(aDataset)
{
	G_ChildRetrieveOnOff(aDataset,false);
}
function G_ChildRetrieveOff(aDataset)
{
	G_ChildRetrieveOnOff(aDataset,true);
}
// ÇØ´ç µ¥ÀÌÅÍ™V°ú ±×¸®µå¸¦ ¼³Á¤ÇÑ´Ù.(ÇÁ¸®Æû ½ºÅ¸ÀÏ½Ã »ç¿ë)
function G_focusDataset(aDataset)
{
	var datasetinfo = null;
	
	if (aDataset == null) return;
	if (G_FocusDataset == aDataset) return;
	
	try
	{
		datasetinfo = G_searchDataSetInfo(aDataset.id);
		
		G_FocusDataset = datasetinfo.dataset;
		G_FocusObject = datasetinfo.grid;
		
		G_OnSetFocus(datasetinfo.dataset, datasetinfo.grid);
	}
	catch (e)
	{
	}
}
function	G_isChangedDataset(dataset)
{
	if(dataset.IsUpdated) return true;
	return G_isChanged(dataset.id);
}
function	G_assignDatasetToDictionary(dataset,dict,row)
{
	for(var i = 1 ; i <= dataset.CountColumn ; i ++)
	{
		dict.set(dataset.ColumnID(i),dataset.NameString(row,dataset.ColumnID(i)));
	}
}
function	G_assignDictionaryToDataset(dataset,dict,row)
{
	for(var i = 1 ; i <= dataset.CountColumn ; i ++)
	{
		dataset.NameString(row,dataset.ColumnID(i)) = dict.get(dataset.ColumnID(i));
	}
}
function	G_getDataHeader(dataset)
{
	var		lsDataHeader = "";
	for(var i = 1 ; i <= dataset.CountColumn ; i ++)
	{
		var		lsColName = dataset.ColumnID(i);
		var		liColType = dataset.ColumnType(i);
		var		lsColType;
		var		lsColProp;
		if(liColType == 1)
		{
			lsColType = "STRING("+dataset.ColumnSize(i)+")";
		}
		else if(liColType == 2)
		{
			lsColType = "INT";
		}
		else if(liColType == 3)
		{
			lsColType = "DECIMAL("+dataset.ColumnSize(i)+"."+dataset.ColumnDec(i)+")";
		}
		else if(liColType == 5)
		{
			lsColType = "URL";
		}
		else
		{
			lsColType = "STRING("+dataset.ColumnSize(i)+")";
		}
		var		liColProp = dataset.ColumnProp(i);

		if(liColProp == 0)
		{
			lsColProp = "NORMALTYPE";
		}
		else if(liColProp == 1)
		{
			lsColProp = "NORMALTYPE";
		}
		else if(liColType == 2)
		{
			lsColProp = "KEYVALUETYPE";
		}
		else
		{
			lsColProp = "NORMALTYPE";
		}
		if(i == 1)
		{
			lsDataHeader += lsColName+":"+lsColType+":"+lsColProp;
		}
		else
		{
			lsDataHeader += ","+lsColName+":"+lsColType+":"+lsColProp;
		}
	}
	return lsDataHeader;
}
function	G_getFloatFrom(dataset,aiRow,asCol)
{
	try
	{
		var			lfRet = parseFloat(dataset.NameString(aiRow,asCol));
		if(isNaN(lfRet)) return 0.0;
		return lfRet;
	}
	catch(e)
	{
		return 0.0;
	}
}
function	G_setFloatTo(dataset,aiRow,asCol,afValue)
{
	if(isNaN(afValue))
	{
		dataset.NameString(aiRow,asCol) = "0";
	}
	else
	{
		dataset.NameString(aiRow,asCol) = afValue;
	}
	
}
function	G_duplicateColumn(dataset, grid)
{
	var		column = grid.GetColumn();
	if(dataset.ColumnIndex(column) < 1) return;
	if(grid.ColumnProp(column, 'Edit').toUpperCase() == "NONE") return;
	if(dataset.ColumnProp(dataset.ColumnIndex(column)) == 2)	//Å°ÄÃ·³ÀÌ¸é
	{
		C_msgOk("ÇØ´ç ÄÃ·³Àº º¹Á¦½ÃÅ³ ¼ö ¾ø½À´Ï´Ù.(À¯ÀÏ°ª Ç×¸ñÀÔ´Ï´Ù.) ", "¾Ë¸²");
		return;
	}
	if(dataset.RowPosition <= 1) return;
	dataset.NameString(dataset.RowPosition,column) = dataset.NameString(dataset.RowPosition - 1,column);
	
	try
	{
		G_defaultOnDuplicateColumn(dataset,grid,dataset.RowPosition,column);
		OnDuplicateColumn(dataset,grid,dataset.RowPosition,column);
	}
	catch(e)
	{
	}
}

function	btnfind_onclick()
{
	try
	{
		var			grid = C_EventObject;
		var			dataset = G_searchDataSet(grid.DataID);
		G_findWindow(dataset, grid);
	}
	catch(e)
	{
	}
}
function	btndup_onclick()
{
	try
	{
		var			grid = C_EventObject;
		if(grid.DataID == null) return;
		var			dataset = G_searchDataSetNoError(grid.DataID);
		if(dataset == null) return;
		if(dataset.CountRow < 1) return;
		if(dataset.RowPosition <= 1) return;
		if(!grid.Editable) return;
		G_duplicateColumn(dataset, grid);
	}
	catch(e)
	{
	}
}

/*--------------±×¸®µå¿ë ÀÚµ¿ LOV ---------------------*/
//pair ±¸Á¶Ã¼
function	G_pair(aData1,aData2)
{
	this.Data1 = aData1;
	this.Data2 = aData2;
}
//"°ª1:°ª2,°ª3:°ª4" ÇüÅÂ¸¦ split ÇÏ±â
function	G_splitPairString(aString)
{
	var		arrs = aString.split(",");
	var		ret = new Array();
	for(var i = 0 ; i < arrs.length ; ++i)
	{
		var		pair = arrs[i].split(":");
		ret.push(new G_pair(pair[0],pair[1]));
	}
	return ret;
}

function	G_autoLovColInfo(aLovName,aGrid, aDataset , aColName, aInputArgs , aReturnValues)
{
	try
	{
		// 
		this.LovName = aLovName;
		this.grid = aGrid;
		this.dataset = aDataset;
		this.colid = aColName;
		this.InputArgs = G_splitPairString(aInputArgs);
		this.ReturnValues = G_splitPairString(aReturnValues);
	}
	catch (e)
	{
		C_msgOk("G_autoLovColInfo ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}
//ÀÚµ¿ LOV ¼³Á¤
//aLovName : LOV¸í
//aGrid : ±×¸®µå
//aDataset : ÀÚµ¿ °Ë»ö¿¡ »ç¿ëµÉ µ¥ÀÌÅ¸™V ex> dsLOV
//aColName : LOV¸¦ Ç¥½ÃÇÒ ÄÃ·³¸í
//aInputArgs : LOV·Î ³Ñ°ÜÁÙ ÀÔ·Â ÀÎÀÚ ¼³Á¤ ex> "ACC_CODE:SEARCH_CONDITION,COMP_CODE:COMP_CODE" => "ÄÃ·³¸í1:LOVÀÎÀÚ¸í1,ÄÃ·³¸í2:LOVÀÎÀÚ¸í2....."
//aReturnValues : LOV¿¡¼­ ³Ñ°Ü¹ÞÀ» µ¥ÀÌÅ¸ ¼³Á¤ ex> "ITR_ACC_CODE:ACC_CODE,ITR_ACC_NAME:ACC_NAME" => "ÄÃ·³¸í1:LOVÄÃ·³¸í1,ÄÃ·³¸í2:LOVÄÃ·³¸í2....."
//isBgColor : LOV ¹é±×¶ó¿îµå ÄÃ·¯
function	G_setAutoLovCol(aLovName,aGrid, aDataset , aColName , aInputArgs , aReturnValues , isBgColor)
{
	var		lrObj = new G_autoLovColInfo(aLovName,aGrid, aDataset , aColName, aInputArgs , aReturnValues);
	G_setLovCol(aGrid, aColName, isBgColor);
	if(G_arrAutoLovs == null) G_arrAutoLovs = new Array();
	G_arrAutoLovs.push(lrObj);
}
function	G_searchAutoLovCol(grid,colid)
{
	var lovinfo = null;
	
	try
	{
		if (grid == null || C_isNull(grid))
		{
			C_msgOk("G_searchAutoLovCol ¿¡·¯ : ±×¸®µå ÀÎÀÚ°¡ nullÀÔ´Ï´Ù.", "¿¡·¯");
			return null;
		}
		if (G_arrAutoLovs == null) G_arrAutoLovs = new Array();
		
		// µî·ÏµÈ lovColÀ» °Ë»ö
		for (var i = 0; i < G_arrAutoLovs.length; i++)
		{
			if (G_arrAutoLovs[i].grid == grid && G_arrAutoLovs[i].colid == colid)
			{
				lovinfo = G_arrAutoLovs[i];
				return lovinfo;
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_searchDateCol ¿¡·¯ : " + e.message, "¿¡·¯");
	}
	
	return lovinfo;
}
function	G_processLov(dataset, grid, row, colid, data)
{
	try
	{
		var		objlovinfo = G_searchAutoLovCol(grid,colid);
		if(objlovinfo != null)
		{
			var		objdataset = G_searchDataSet(objlovinfo.grid.DataId);
			if(!G_raiseEvent_OnBeforeLov(dataset,grid,row,colid,data))
			{
				return;
			}
			var		lrArgs = new C_Dictionary();
			var		lrRet = null;
			if(objlovinfo.InputArgs != null)
			{
				for(var i = 0 ; i < objlovinfo.InputArgs.length ; ++i)
				{
					if(objlovinfo.InputArgs[i].Data1 == objlovinfo.colid)
					{
						lrArgs.set(objlovinfo.InputArgs[i].Data2, "");
					}
					else
					{
						lrArgs.set(objlovinfo.InputArgs[i].Data2, dataset.NameString(row,objlovinfo.InputArgs[i].Data1));
					}
				}
			}
			lrRet = C_LOV(objlovinfo.LovName, lrArgs);

			if(lrRet != null)
			{
				if(objlovinfo.ReturnValues != null)
				{
					for(var i = 0 ; i < objlovinfo.ReturnValues.length ; ++i)
					{
						dataset.NameString(row,objlovinfo.ReturnValues[i].Data1) = lrRet.get(objlovinfo.ReturnValues[i].Data2);
					}
				}
				G_raiseEvent_OnSuccessLov(dataset,grid,row,colid,data);
			}
			else
			{
				G_raiseEvent_OnCancelLov(dataset,grid,row,colid,data);
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_processLov ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}
function G_processAutoLov(dataset, grid, row, colid, olddata)
{
	try
	{
		var		objlovinfo = G_searchAutoLovCol(grid,colid);
		if(objlovinfo == null) return;
		var		COL_DATA;
		COL_DATA = dataset.NameString(row,colid);
		var		objdataset = G_searchDataSet(objlovinfo.grid.DataId);
		
		if(!G_raiseEvent_OnBeforeLov(dataset,grid,row,colid,olddata))
		{
			//dataset.NameString(row,colid)	= olddata;
			return;
		}
		

		if(C_isNull(COL_DATA))
		{
			if(objlovinfo.ReturnValues != null)
			{
				for(var i = 0 ; i < objlovinfo.ReturnValues.length ; ++i)
				{
					dataset.NameString(row,objlovinfo.ReturnValues[i].Data1) = "";
				}
			}
			G_raiseEvent_OnSuccessLov(dataset,grid,row,colid,olddata);
			return ;
		}



		var		lrArgs = new C_Dictionary();
		var		lrRet = null;
		if(objlovinfo.InputArgs != null)
		{
			for(var i = 0 ; i < objlovinfo.InputArgs.length ; ++i)
			{
				lrArgs.set(objlovinfo.InputArgs[i].Data2, dataset.NameString(row,objlovinfo.InputArgs[i].Data1));
			}
		}
		lrRet = C_AutoLov(objlovinfo.dataset,objlovinfo.LovName,lrArgs,"T");

		if(lrRet != null)
		{
			if(objlovinfo.ReturnValues != null)
			{
				for(var i = 0 ; i < objlovinfo.ReturnValues.length ; ++i)
				{
					dataset.NameString(row,objlovinfo.ReturnValues[i].Data1) = lrRet.get(objlovinfo.ReturnValues[i].Data2);
				}
			}
			G_raiseEvent_OnSuccessLov(dataset,grid,row,colid,olddata);
		}
		else
		{
			dataset.NameString(row,colid)	= olddata;
			G_raiseEvent_OnCancelLov(dataset,grid,row,colid,olddata);
		}
	}
	catch (e)
	{
		C_msgOk("G_OnPopup ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}
function	G_raiseEvent_OnBeforeLov(dataset,grid,row,colid,olddata)
{
	var ret = true;
	try
	{
		ret = OnBeforeGridLov(dataset,grid,row,colid,olddata);
	}
	catch (e)
	{
		if (typeof(OnBeforeGridLov) == "function")
		{
			C_msgOk("OnBeforeGridLov ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
			return false
		}
	}
	
	// retÀÇ °ªÀÌ falseÀÎ °æ¿ì LOVÈ£ÃâÀÌ Ãë¼ÒµÈ´Ù.
	if (ret == false) return false;
	
	return true;
}
function	G_raiseEvent_OnSuccessLov(dataset,grid,row,colid,olddata)
{
	try
	{
		OnSuccessGridLov(dataset,grid,row,colid,olddata);
	}
	catch (e)
	{
		if (typeof(OnSuccessGridLov) == "function")
		{
			C_msgOk("OnSuccessGridLov ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}
function	G_raiseEvent_OnCancelLov(dataset,grid,row,colid,olddata)
{
	try
	{
		OnCancelGridLov(dataset,grid,row,colid,olddata);
	}
	catch (e)
	{
		if (typeof(OnCancelGridLov) == "function")
		{
			C_msgOk("OnCancelGridLov ÀÌº¥Æ®ÀÇ °³¹ßÀÚ Á¤ÀÇ ÇÔ¼ö Call ¿¡·¯ : " + e.message, "¿¡·¯");
		}
	}
}
function	G_defaultOnDuplicateColumn(dataset,grid,row,colid)
{
	if(row < 2) return;
	try
	{
		var		objlovinfo = G_searchAutoLovCol(grid,colid);
		if(objlovinfo == null) return;
		if(objlovinfo.ReturnValues != null)
		{
			for(var i = 0 ; i < objlovinfo.ReturnValues.length ; ++i)
			{
				dataset.NameString(row,objlovinfo.ReturnValues[i].Data1) = dataset.NameString(row-1,objlovinfo.ReturnValues[i].Data1);
			}
		}
	}
	catch (e)
	{
		C_msgOk("G_defaultOnDuplicateColumn ¿¡·¯ : " + e.message, "¿¡·¯");
	}
}

function	__WS__(id)
{
	document.write(id.innerHTML);
}


