function ExecuteChartHelper ()
{
}

// 챠트 출력과 챠트 연결에서 공통되는 부분을 분리
ExecuteChartHelper.setXMLChartAtom = function(xnChartAtomAttrib, alTempItemList, objAttrib)
{
	if (alTempItemList != null && 0 < alTempItemList.length)
	{
		xnChartAtomAttrib.setAttribute("Gallery", alTempItemList[1].getChartType());
	}
	else
	{
		xnChartAtomAttrib.setAttribute("Gallery", 0);
	}
	
	xnChartAtomAttrib.setAttribute("TWODType", objAttrib.B2D);
	xnChartAtomAttrib.setAttribute("ChartTitle", objAttrib.ChartTitle);
	xnChartAtomAttrib.setAttribute("TitlePosition", objAttrib.ChartTitlePosition);
	xnChartAtomAttrib.setAttribute("TitleAlignment", objAttrib.ChartTitleAlignment);
	xnChartAtomAttrib.setAttribute("XAxisTitle", objAttrib.XAxisTitle);
	xnChartAtomAttrib.setAttribute("YAxisLayout", objAttrib.YAxisUnit);
	xnChartAtomAttrib.setAttribute("XAxisGrid", objAttrib.XAxisGrid);
	xnChartAtomAttrib.setAttribute("XAxisLayout", objAttrib.XAxisLayout);
	xnChartAtomAttrib.setAttribute("YAxisTitle", objAttrib.YAxisTitle);
	xnChartAtomAttrib.setAttribute("YAxisGrid", objAttrib.YAxisGrid);
}

ExecuteChartHelper.setXMLChartItem = function (xnChartItemAttrib, alTempItemList)
{
	for (var i = 0, nLen = alTempItemList.length; i < nLen; i++)
	{			
		var xnChartItemValue = XmlLib.createChild(xnChartItemAttrib, "ChartItemValue");
		
		var xnTempNodeDBName = XmlLib.createChildWithValue(xnChartItemValue, "DBName", alTempItemList[i].getDBName());
		var xnTempNodeTableName = XmlLib.createChildWithValue(xnChartItemValue, "TableName", alTempItemList[i].getTableName());
		var xnTempNodeFieldName = XmlLib.createChildWithValue(xnChartItemValue, "FieldName", alTempItemList[i].getFieldName());
		var xnTempNodeDBIndex = XmlLib.createChildWithValue(xnChartItemValue, "DBIndex", alTempItemList[i].getDBIndex());
		var xnTempNodeItemTitle = XmlLib.createChildWithValue(xnChartItemValue, "ItemTitle", alTempItemList[i].getItemTitle());
		var xnTempNodeItemName = XmlLib.createChildWithValue(xnChartItemValue, "ItemName", alTempItemList[i].getItemName());
		var xnTempNodeChartCategory = XmlLib.createChildWithValue(xnChartItemValue, "ChartCategory", alTempItemList[i].getChartCategory());
		var xnTempNodeChartFunction = XmlLib.createChildWithValue(xnChartItemValue, "ChartFunction", alTempItemList[i].getChartFunction());
		var xnTempNodeChartType = XmlLib.createChildWithValue(xnChartItemValue, "ChartType", alTempItemList[i].getChartType());
		var xnTempNodeHidden = XmlLib.createChildWithValue(xnChartItemValue, "Hidden", alTempItemList[i].isHidden());
		var xnTempNodeDataType = XmlLib.createChildWithValue(xnChartItemValue, "DataType",	alTempItemList[i].getDataType());
		
		var xnTempNodeDataSize = null;
		if (isNaN(alTempItemList[i].getDataSize()))
		{
			// 0을 설정하여도 차트를 그리는대는 문제가 없다.
			xnTempNodeDataSize = XmlLib.createChildWithValue(xnChartItemValue, "DataSize", 0);
		}
		else
		{
			xnTempNodeDataSize = XmlLib.createChildWithValue(xnChartItemValue, "DataSize", alTempItemList[i].getDataSize());
		}
	}
}
		
ExecuteChartHelper.setXMLChartStyle = function (xnChartAttrib, objChartStyle, objAttrib)
{
	// 필요한 속성만 추가한다.
	xnChartAttrib.setAttribute("FontXAxisName", "굴림");	// X축 글꼴
	xnChartAttrib.setAttribute("FontXAxisStyle", "0");
	xnChartAttrib.setAttribute("FontXAxisSize", "9");
	xnChartAttrib.setAttribute("FontYAxisName", "굴림");	// Y축 글꼴
	xnChartAttrib.setAttribute("FontYAxisStyle", "0");
	xnChartAttrib.setAttribute("FontYAxisSize", "9");
	xnChartAttrib.setAttribute("ColorBackground", "12632256");			// 전체 배경색
	xnChartAttrib.setAttribute("ColorChartBackground", "14740976");		// 차트 배경색
}

/**
 * 실행시 지정 챠트 속성 다이얼로그를 연다
 */
ExecuteChartHelper.showChartAttribDialog = function (arDialogArgument)
{
	return Utils.showModalDialog(
		"/ups/sys/html/support/RuntimeChartAttrib.html;", 
		arDialogArgument,
		-1, -1, 380, 485);
}

/**
 * 실행시 지정의 결과에의해 기존 검색 결과중 삭제되어야할 컬럼 정보가 있는지 확인하고, 해당 컬럼의 인덱스리스트를 생성하여 반환한다
 * @param xnColName (기존 검색결과의 컬럼 이름 xml)
 * @param xlRowData (기전 검색결과의 값의 행 xml)
 * @param alTempItemList
 */
ExecuteChartHelper.getRemoveColIndexList = function (xlColName, xlRowData, alTempItemList)
{
	var alRemoveIndex = new Array();
	
	if (null == xlColName || null == xlRowData || null == alTempItemList)
	{
		return alRemoveIndex;
	}
	
	if (null != xlRowData && 0 < xlRowData.length)
	{
		var xlColData = XmlLib.selectNodeList(xlRowData[0], "./ColData");
		
		for (var i = 0, nColLen = xlColData.length; i < nColLen; i++)
		{
			if (false == ExecuteChartHelper.isExistColData(xlColName[i], alTempItemList))
			{
				alRemoveIndex.push(i);
			}
		}
	}
	
	return alRemoveIndex;
}	

/**
 * 실행시 지정에 의해 바뀐 챠트 속성 중에 기존의 해당 컬럼이 존재 하는지의 여부를 체크한다.
 * 존재 하게 되면, 실행시 정에 의해 바뀐 챠트에도 존재하는 값이 된다 
 */
ExecuteChartHelper.isExistColData = function (xnColName, alTempItemList)
{
	if (null == alTempItemList)
	{
		return false;
	}
	
	for (var i = 0, nLen = alTempItemList.length; i < nLen; i++)
	{
		if (XmlLib.getTextValue(xnColName) == alTempItemList[i].getItemName())
		{
			return true;
		}
	}
	
	return false;
}
/**
 * 실행시 지정후 변경된 내용중, 챠트 검색값에서 삭제 되어야할 컬럼을 행으로 부터 삭제한다
 * @param nlRowData (기존 검색의 결과의 값의 행)
 * @param alRemoveIndex (삭제되어야 할 컬럼의 인덱스를 담은 리스트)
 */
ExecuteChartHelper.removeColDataFormRowData = function (xlRowData, alRemoveIndex)
{
	for (var i = 0, nLen = xlRowData.length; i < nLen; i++)
	{
		var xnRowData = xlRowData[i];
		
		var xlColData = XmlLib.selectNodeList(xlRowData[i], "ColData");
		
		for (var j = 0, nColLen = alRemoveIndex.length; j < nColLen; j++)
		{
			XmlLib.removeNode(xlRowData[i], xlColData[alRemoveIndex[j]]);
		}	
	}
}

/**
 * 실행시 지정후 변경된 내용중, 챠트 검색값에서 삭제 되어야할 컬럼 이름을 삭제한다
 * @param xnColAttrib (기존 검색 결과중 컬럼 속성 xml)
 * @param nlRowData (기존 검색의 결과의 값의 행)
 * @param alRemoveIndex (삭제되어야 할 컬럼의 인덱스를 담은 리스트)
 */
ExecuteChartHelper.removeColNameFromColAttrib = function (xnColAttrib, xlColName, alRemoveIndex)
{
	for (var j = 0, nColLen = alRemoveIndex.length; j < nColLen; j++)
	{
		XmlLib.removeNode(xnColAttrib, xlColName[alRemoveIndex[j]]);
	}
}

		
ExecuteChartHelper.getItemNameList = function (xnAtom)
{
	var xnColAttrib = XmlLib.selectSingleNode(xnAtom, "//ColAttrib");
	
	if (null == xnColAttrib)
	{
		return;
	}
	
	var arColNames = XmlLib.selectNodeList(xnColAttrib, "./ColName");
	
	var arItemNameList = new Array();


	for (var i = 0, nLen = arColNames.length; i < nLen; i++)
	{
		arItemNameList.push(XmlLib.getTextValue(arColNames[i]));
	}
	
	return arItemNameList;

}