//**************************************************************
//檔案名稱:gGrid.js
//目    的:提供Grid用的Javascript函數
// 版本變更：
// xx. YYYY/MM/DD	AUTHOR		COMMENTS
//  1. 2005/01/03	Dean		Create
//**************************************************************

//頁面全域變數
var gobjTR = null;

//**************************************************************
//*函數名稱:getColName(vobjTbl)
//*目    的:由col的fldName取得各欄位名稱
//*參數說明:
//			vobjTbl:Table物件
//*回轉值:名稱陣列
//**************************************************************
function getColName(vobjTbl) {
	var maryfldName = new Array();
	for(var i=0;i<vobjTbl.children.length;i++) {
		if(vobjTbl.children(i).tagName=="COLGROUP") {
			var mobjColGroup = vobjTbl.children(i);
			for(var j=0;j<mobjColGroup.children.length;j++) {
				var mobjCol = mobjColGroup.children(j);
				if(mobjCol.fldName==undefined) {
					if(gInDesignMode) {
						alert("第"+(j+1)+"個欄位未指定名稱!請設定COL的fldName屬性");
					}
				}
				maryfldName[j] = mobjCol.fldName;
			}
		}
	}
	return maryfldName;		
}

//**************************************************************
//*函數名稱:getColAttr(vstrAttr)
//*目    的:根據欄位名稱由col取得欄位相關屬性(僅使用於tr的onclick事件)
//*			程式會自動由點選欄位的Act屬性取得對應的col屬性
//*參數說明:
//			vobjTbl:Table物件
//			vstrFildNm:欄位名稱
//			vstrAttr:欄位屬性名稱
//*回轉值:屬性值定串
//**************************************************************
function getColAttr(vstrAttr) {
	var objTD = getParentByTag(event.srcElement,"TD");
	//選取多個TD時，會觸發TR的onClick事件，但srcElement為TR，而不是TD，造成錯誤，所以不處理
	if (objTD == null){
		return "";
	}
	var vobjTbl = getParentByTag(objTD,"TABLE")
	var mstrFieldNm = objTD.Act;

	var mstrRtn = "";
	for(var i=0;i<vobjTbl.children.length;i++) {
		if(vobjTbl.children(i).tagName=="COLGROUP") {
			var mobjColGroup = vobjTbl.children(i);
			for(var j=0;j<mobjColGroup.children.length;j++) {
				var mobjCol = mobjColGroup.children(j);
				if(mobjCol.fldName==undefined) {
					if(gInDesignMode) {
						alert("第"+(j+1)+"個欄位未指定名稱!請設定COL的fldName屬性");
					}
				}
				if(mobjCol.fldName==mstrFieldNm) {
					mstrRtn = mobjCol[vstrAttr];
					if(mstrRtn==undefined) {
						if(gInDesignMode) {
							alert("第"+(j+1)+"個欄位未指定屬性:" + vstrAttr)
						}
						mstrRtn = "";
					}
				}
			}
		}
	}
	return mstrRtn;		
}


//**************************************************************
//*函數名稱:getColAttrArray(vobjTbl,vstrAttr)
//*目    的:根據欄位名稱由col取得欄位相關屬性(僅使用於tr的onclick事件)
//*			程式會自動由點選欄位的Act屬性取得對應的col屬性
//*參數說明:
//			vobjTbl:Table物件
//			vstrFildNm:欄位名稱
//			vstrAttr:欄位屬性名稱
//*回轉值:屬性值定串
//**************************************************************
function getColAttrArray(vobjTbl,vstrAttr) {
	var maryfldAttr = new Array();
	for(var i=0;i<vobjTbl.children.length;i++) {
		if(vobjTbl.children(i).tagName=="COLGROUP") {
			var mobjColGroup = vobjTbl.children(i);
			for(var j=0;j<mobjColGroup.children.length;j++) {
				var mobjCol = mobjColGroup.children(j);
				if(mobjCol[vstrAttr]==undefined) {
					if(gInDesignMode) {
						alert("第"+(j+1)+"個欄位未指COL的"+vstrAttr+"屬性!");
					}
				}
				maryfldAttr[j] = mobjCol[vstrAttr];
			}
		}
	}
	return maryfldAttr;		
}
//**************************************************************
//*函數名稱:getTblXML(vstrTblNm)
//*目    的:將指定表格的資料以XML格式組合
//*參數說明:
//			vstrTblNm:Table物件
//*回轉值:XML格式的表格資料
//**************************************************************
function getTblXML(vstrTblNm){
	//取得表格物件
	var mobjTbl = document.all[vstrTblNm];

	//取得各欄名稱
	var maryColName;
	var maryColSkip;
	maryColName = getColName(mobjTbl);
	maryColSkip =getColAttrArray(mobjTbl,"skip")

	//逐列處理
	var mstrRow = "";
	for(var i=0;i<mobjTbl.rows.length;i++) {
		mobjTr = mobjTbl.rows(i);
		if (mobjTr.className != "grd_title") {
			mstrRow = mstrRow + "<row>"
			//逐欄處理
			for(var j=0;j<mobjTr.cells.length;j++) {
				if (maryColSkip[j] == "N") {
					mobjTd = mobjTr.cells(j);
					mstrRow = mstrRow + "<" + maryColName[j] + ">" + toXMLFormat(getTdChildData(mobjTd)) + "</" + maryColName[j] + ">";
				}
			}
			mstrRow = mstrRow + "</row>";
		}
	}
	mstrRow = "<root>" + mstrRow + "</root>";
	return mstrRow;
}

//**************************************************************
//*函數名稱:getTrXML()
//*目    的:將點選表格列的資料以XML格式組合
//*參數說明:
//			vstrTblNm:Table物件
//*回轉值:XML格式的表格列資料
//**************************************************************
function getTrXML(){
	var mobjTR = getParentByTag(event.srcElement,"TR");
	var mobjTbl = getParentByTag(event.srcElement,"TABLE")
	var mobjTD = null;

	//記錄點選的列
	gobjTR = mobjTR;

	//取得各欄名稱
	var maryColName;
	var maryColSkip;
	maryColName = getColName(mobjTbl);
	maryColSkip =getColAttrArray(mobjTbl,"skip")
	

	//逐欄處理
	var mstrRow = "<row>"
	for(var i=0;i<mobjTR.cells.length;i++) {
		if (maryColSkip[i] == "N") {
			mobjTD = mobjTR.cells(i);
			mstrRow = mstrRow + "<" + maryColName[i] + ">" + toXMLFormat(mobjTD.innerHTML) + "</" + maryColName[i] + ">";
		}
	}
	mstrRow = mstrRow + "</row>";
	mstrRow = "<root>" + mstrRow + "</root>";
	return mstrRow;
}

//**************************************************************
//*函數名稱:getTdChildData(vobjTd)
//*目    的:取出TD中控制項的值
//*參數說明:
//			vstrTblNm:Table物件
//*回轉值:XML格式的表格列資料
//**************************************************************
function getTdChildData(vobjTd){
	var mstrData = "";
	if(vobjTd.children.length==0) {
		mstrData = vobjTd.innerText
	} else {
		for(i=0;i<vobjTd.children.length;i++) {
			if(vobjTd.children[i].type=="checkbox"){
				if(vobjTd.children[i].checked==true){
					mstrData = mstrData + toXMLFormat(vobjTd.children[i].value);
				}
			} else {
				mstrData = mstrData + toXMLFormat(vobjTd.children[i].value);
			}
		}
	}
	return mstrData;
}

//**************************************************************
//*函數名稱:RemoveTR(vobjTR)
//*目    的:將點選表格的列移除
//*參數說明:
//			vobjTR:TR物件
//*回轉值:XML格式的表格列資料
//**************************************************************
function RemoveTR(vobjTR) {
	var objTbl = null;
	if(vobjTR) {
		objTbl = getParentByTag(vobjTR,"TABLE");
		objTbl.deleteRow(vobjTR.rowIndex);		
	} else {
		objTbl = getParentByTag(gobjTR,"TABLE");
		objTbl.deleteRow(gobjTR.rowIndex);
	}
}