﻿function DataGrid(ModuleRoot,ResultDataRoot)
{
	try
	{
		var reg;
		var TableStr="";
		var PageStr="";

		var DataSourceRoot=ModuleRoot.selectSingleNode("DataSource");
		var GridRoot=ModuleRoot.selectSingleNode("DataShow");

		var TableSet=GridRoot.selectSingleNode("TableSet");
		var RowSet=GridRoot.selectSingleNode("RowSet");
		var HeaderItem=RowSet.selectSingleNode("HeaderItem");
		var ColGroup=RowSet.selectSingleNode("ColGroup");
		var ColSet=GridRoot.selectNodes("ColSet");

		TableStr="<table";
		for(var i=0;i<TableSet.attributes.length;i++)
			TableStr=TableStr+" "+TableSet.attributes[i].name+"='"+TableSet.attributes[i].text+"'";
		TableStr=TableStr+">";
		if(ColGroup!=null)
			TableStr+=ColGroup.xml;

		TableStr+="<thead style='display: table-header-group' id='MainHeader'>";
		TableStr=TableStr+"<tr style='cursor:default'";
		for(var i=0;i<HeaderItem.attributes.length;i++)
			TableStr=TableStr+" "+HeaderItem.attributes[i].name+"='"+HeaderItem.attributes[i].text+"'";
		TableStr=TableStr+">";
		
		for(var i=0;i<ColSet.length;i++)
		{
			tmpstr=""
						
			if(ColSet[i].selectNodes("ColData").length==0||ColSet[i].getAttribute("Display")!="false")
			{
				TableStr=TableStr+"<td";		
				for(var j=0;j<ColSet[i].attributes.length;j++)
				{
					
					if(ColSet[i].attributes[j].name!="HeaderText")
						TableStr=TableStr+" "+ColSet[i].attributes[j].name+"=\""+ColSet[i].attributes[j].text+"\"";
					else
					{
						if(RowSet.getAttribute("HeaderShow")==null||RowSet.getAttribute("HeaderShow")=="true")
							tmpstr=">"+ColSet[i].attributes[j].text+"</td>";
						else
							tmpstr="></td>";
					}
				}
			}
			TableStr=TableStr+tmpstr;
		}
		TableStr=TableStr+"</tr>";
		TableStr+="</thead>";

		TableStr+="<tbody>";
		TableStr+="</tbody>";

		TableStr=TableStr+"</table>";	
		//alert(TableStr)	
		return TableStr;
	}
	catch(ep)
	{
		alert("DataGrid错误号：#000003\n"+ep.message)
	}
}

function DataFill(srcDiv,ModuleDataRoot,ResultDataRoot,PageNo)
{
	
	var mainTBody=srcDiv.getElementsByTagName("tbody");	
	var tbody=mainTBody[0];	
	var row;
	var cell;
	var ModuleSourceRoot=ModuleDataRoot.selectSingleNode("DataSource");
	var ColData=ModuleDataRoot.selectSingleNode("DataShow").getElementsByTagName("ColData");
	try
	{
		var GridRoot=ModuleDataRoot.selectSingleNode("DataShow");

		var TableSet=GridRoot.selectSingleNode("TableSet");
		var RowSet=GridRoot.selectSingleNode("RowSet");
		var ColSet=GridRoot.selectNodes("ColSet");

		var RowItem=RowSet.selectSingleNode("RowItem");
		var RowEval=RowItem.selectNodes("Eval");

		var TmpEval=new Array();
		TmpEval.length=RowEval.length;
		for(var i=0;i<TmpEval.length;i++)
			TmpEval[i]=0;
		var FooterItem=RowSet.selectSingleNode("FooterItem");
		var ColItem;
		var DataCol=ResultDataRoot.selectNodes("DataCol");
		var DataStr="";
		var DataList;
		var TableStr="";

		if(typeof(PageNo)=="undefined")
			PageNo=1;
		var PageSize=30;
		var FieldList;	
		if(ModuleSourceRoot.getAttribute("PageSize")!=null)
			{if (typeof(PageNewSize)=="undefined")
				PageSize=ModuleSourceRoot.getAttribute("PageSize");
			else
				PageSize=PageNewSize;
			}
		var CrossRowData;
		var CrossRowSpan=0;
		CountList=DataCol.length
		for(var i=0;i<DataCol.length;i++)
		{
			row=document.createElement( "tr" );
			for(var k=0;k<RowItem.attributes.length;k++)
			{

				if(RowItem.attributes[k].name!="AlternateBgColor"&&RowItem.attributes[k].name!="bgColor")
				{
					row.setAttribute(RowItem.attributes[k].name,RowItem.attributes[k].text);
				}
				else
				{
					if(i%2)
						row.setAttribute("bgColor",RowItem.getAttribute("bgColor"));
					else
						row.setAttribute("bgColor",RowItem.getAttribute("AlternateBgColor"));
				}
				
			}
			
			if(RowEval.length>0)
			{
				for(var j=0;j<RowEval.length;j++)
				{
					DataStr=RowEval[j].text;
					FieldList=RowEval[j].getAttribute("DataField").split(",");
					for(var k=0;k<FieldList.length;k++)
					{
						reg=new RegExp("{#"+FieldList[k]+"}","gi");
						DataStr=DataStr.replace(reg,DataCol[i].getAttribute(FieldList[k]));
					}
					TmpEval[j]=(parseFloat(TmpEval[j])+parseFloat(eval(DataStr))).FormatCurrency();
				}
			}
			
			row.style.cursor="default";
			//row.attachEvent("onclick",TROnClcik)
			//row.attachEvent("onmouseover",TROnMouseOver)
			//row.attachEvent("onmouseout",TROnMouseOut)
			tbody.appendChild(row);
			
			for(var j=0;j<ColSet.length;j++)
			{
				ColData=ColSet[j].selectSingleNode("ColData");
				ColItem=ColSet[j].selectSingleNode("ColItem");
				if(ColData.parentNode.getAttribute("Display")!="false")
				{
					cell = document.createElement( "td" );
					{
						for(var m=0;m<ColItem.attributes.length;m++)
							{
							cell.setAttribute(ColItem.attributes[m].name,ColItem.attributes[m].text);
							}
						
						row.appendChild(cell);
						if(ColData.getAttribute("ShowFormat")==null||ColData.getAttribute("ShowFormat")=="")
						{
							if(ColData.getAttribute("DataField")=="CountList")
								DataStr=i+1;
							else
								DataStr=DataCol[i].getAttribute(ColData.getAttribute("DataField"));
						}
						else
							DataStr=ShowFormat(ColData.getAttribute("ShowFormat"),DataCol[i],ColData,i);
	
						DataStr=DataStr.replace("</ColData>","")						
						if(DataStr=="")
							cell.innerHTML="&nbsp;";
						else
							cell.innerHTML=DataStr;
					}
				}
			}
		}
		
		var tfoot = document.createElement( "tfoot" );
		tbody.parentElement.appendChild(tfoot);
	
		if(RowSet.selectSingleNode("ComputeItem")!=null)
		{
			var ComputeItem=RowSet.selectSingleNode("ComputeItem");
			var ColItem=ComputeItem.selectNodes("ColFoot");
			var ComputeRow=document.createElement("tr");
			var ComputeCell;
			for(var j=0;j<ColItem.length;j++)
			{
				if(ColItem[j].getAttribute("id")!=null)
				{
					
					reg=new RegExp("{#"+ColItem[j].getAttribute("id")+"}","gi");
					ComputeCell=document.createElement("td");
					for(var m=0;m<ColItem[j].attributes.length;m++)
						{
							ComputeCell.setAttribute(ColItem[j].attributes[m].name,ColItem[j].attributes[m].text);
						
						}
					var T_count=0;
					for (var i=0;i<DataCol.length;i++)
					{
						T_count+=parseFloat(DataCol[i].getAttribute(ColItem[j].getAttribute("id")));
					}
					T_count=T_count.FormatCurrency()
					var FieldList=ColItem[j].getAttribute("id").split(",");
					var myDataStr;
					myDataStr=ColItem[j].xml;
					for(var i=0;i<FieldList.length;i++)
					{
						reg=new RegExp("{#"+FieldList[i]+"}","gi");
						myDataStr=myDataStr.replace(reg,T_count);
						reg=new RegExp("ColFoot","gi");
						myDataStr=myDataStr.replace(reg,"span");
					}
					ComputeCell.innerHTML=myDataStr;
					//alert(ComputeCell.innerHTML)
					ComputeRow.appendChild(ComputeCell);
				}
				else
				{
					ComputeCell=document.createElement("td");
					for(var m=0;m<ColItem[j].attributes.length;m++)
						ComputeCell.setAttribute(ColItem[j].attributes[m].name,ColItem[j].attributes[m].text);
					//alert(ColItem[j].text);
					ComputeCell.innerHTML=ColItem[j].text;
					ComputeRow.appendChild(ComputeCell);
				}
			}
			for(var j=0;j<ComputeItem.attributes.length;j++)
				ComputeRow.setAttribute(ComputeItem.attributes[j].name,ComputeItem.attributes[j].text);
			tfoot.appendChild(ComputeRow);

		}

		if(RowSet.getAttribute("FooterShow")!="false")
		{
			if(GridRoot.getAttribute("PageStyle")!=null&&GridRoot.getAttribute("PageStyle")!="none")
			{
				if(PageXml.documentElement==null)
					DataPageSet();
				var PageStr=DataPage(PageXml.documentElement,ResultDataRoot.getAttribute("ItemCount"),PageNo,PageSize,GridRoot.getAttribute("PageStyle"))
				row = document.createElement( "tr" );
				for(var k=0;k<FooterItem.attributes.length;k++)
					row.setAttribute(FooterItem.attributes[k].name,FooterItem.attributes[k].text);

				for(var k=0;k<FooterItem.attributes.length;k++)
					row.setAttribute(FooterItem.attributes[k].name,FooterItem.attributes[k].text);
				tfoot.appendChild(row);
				cell = document.createElement( "td" );
				var mainTHead=srcDiv.getElementsByTagName("thead");
				cell.setAttribute("colSpan",ColSet.length);
				row.appendChild(cell);
				var reg=new RegExp("{#nbsp}","gi")
				PageStr=PageStr.replace(reg,"&nbsp;")				
				cell.innerHTML =PageStr;
			}
		}
	}
	catch(ep)
	{
		if (typeof(ResultDataRoot)=="object")
		{
		var DataCol=ResultDataRoot.selectSingleNode("DataCol");
		alert("DataFill Error No：#000004\n=========================\n1."+ep.message+"\n2."+DataCol.getAttribute("ErrorMsg"));
		}
		else
		alert("DataFill Error No：#000004\n========================\n1."+ep.message);
	}
}


function ShowFormat(ShowType,DataCol,ColData,iCount)
{
	var FieldList;
	var reg;
	var DataStr;
	switch(ShowType)
	{
		case "Function":
			DataStr=ColData.text;
			FieldList=ColData.getAttribute("DataField").split(",");
			for(var i=0;i<FieldList.length;i++)
			{
				reg=new RegExp("{#"+FieldList[i]+"}","gi");
				if(reg.toString()=="/{#CountList}/ig")
					DataStr=DataStr.replace(reg,iCount+1);
				else
					DataStr=DataStr.replace(reg,DataCol.getAttribute(FieldList[i]));
			}
			DataStr=eval(DataStr);
			break;
		case "DataFormat":
			DataStr=ColData.xml;
			reg=new RegExp("<ColData.*>","gi")
			DataStr=DataStr.replace(reg,"");
			reg=new RegExp("</ColData>","gi")
			DataStr=DataStr.replace(reg,"");			
			FieldList=ColData.getAttribute("DataField").split(",");
			for(var i=0;i<FieldList.length;i++)
			{
				reg=new RegExp("{#"+FieldList[i]+"}","gi");
				if(reg.toString()=="/{#CountList}/ig")
					DataStr=DataStr.replace(reg,iCount+1);
				else
					DataStr=DataStr.replace(reg,DataCol.getAttribute(FieldList[i]));
			}
			break;
	}
	var reg=new RegExp("{#nbsp}","gi")
	DataStr=DataStr.replace(reg,"&nbsp;")	
	return DataStr;
}

var OldTRClickEventBgColor=""
var OldTROverEventBgColor=""
var OldTRClickEventObj
var TRClickEvenBgColor=""
var TROverEvenBgColor="#CCDDDD"
function TROnClcik()
{
	var oEvent=window.event.srcElement;
	for(var i=0;oEvent.tagName!="TR"&&i<10;i++)oEvent=oEvent.parentElement;
	if(oEvent.bgColor==TRClickEvenBgColor)return true;
	if(OldTRClickEventBgColor!="")
		OldTRClickEventObj.bgColor=OldTRClickEventBgColor;
	OldTRClickEventObj=oEvent;
	OldTRClickEventBgColor=OldTROverEventBgColor;
	oEvent.bgColor=TRClickEvenBgColor;
	OldTROverEventBgColor=TRClickEvenBgColor;
return true
}
function TROnMouseOver()
{
	var oEvent=window.event.srcElement;
	for(var i=0;oEvent.tagName!="TR"&&i<10;i++)oEvent=oEvent.parentElement;
	
	OldTROverEventBgColor=oEvent.bgColor;
	oEvent.bgColor=TROverEvenBgColor;//onmouseover
return true
}
function TROnMouseOut()
{
	var oEvent=window.event.srcElement;
	for(var i=0;oEvent.tagName!="TR"&&i<10;i++)oEvent=oEvent.parentElement;
	
	oEvent.bgColor=OldTROverEventBgColor;
return true
}
function DivDataGrid(ModuleRoot,ResultDataRoot,PageNo,PageSize)
{
try
	{
		var reg;
		var TableStr="";
		var PageStr="";
		var DataSourceRoot=ModuleRoot.selectSingleNode("DataSource");
		var GridRoot=ModuleRoot.selectSingleNode("DataShow");
		var TableSet=GridRoot.selectSingleNode("TableSet");
		var Datatype="";
		var SelectStr="";
		if (TableSet.getAttribute("Datatype")!=null)
		{
			Datatype=TableSet.getAttribute("Datatype").toLowerCase();
		}
		var RowSet=GridRoot.selectSingleNode("RowSet");
		var HeaderItem=RowSet.selectSingleNode("HeaderItem");
		var ColGroup=RowSet.selectSingleNode("ColGroup");
		var ColSet=GridRoot.selectNodes("ColSet");
		//======12-15 by fzm=========
		var RowItem=RowSet.selectSingleNode("RowItem");
		var RowEval=RowItem.selectNodes("Eval");
		var TmpEval=new Array();
		TmpEval.length=RowEval.length;
		for(var i=0;i<TmpEval.length;i++)
			TmpEval[i]=0;	
		var FooterItem=RowSet.selectSingleNode("FooterItem");
		var DataCol=ResultDataRoot.selectNodes("DataCol");
		if(typeof(PageNo)=="undefined")
			PageNo=1;
		var row="";
		var cell="";
		if (Datatype=="select")
		{
		SelectStr="<Select";
		for(var i=0;i<TableSet.attributes.length;i++)
		{
			if (TableSet.attributes[i].name!="Datatype")
			{
				SelectStr=SelectStr+" "+TableSet.attributes[i].name+"='"+TableSet.attributes[i].text+"'";
			}
		}
		SelectStr=SelectStr+">\n<option value=''>请选择...</option>\n{#select}\n</Select>\n";
		}
		//================
		if(RowSet.getAttribute("HeaderShow")==null||RowSet.getAttribute("HeaderShow")=="true")
		{
		TableStr="<div";
		for(var i=0;i<TableSet.attributes.length;i++)
			TableStr=TableStr+" "+TableSet.attributes[i].name+"='"+TableSet.attributes[i].text+"'";
		TableStr=TableStr+">\n";
		if(ColGroup!=null)
			TableStr+=ColGroup.xml;
		
		
		
		for(var i=0;i<ColSet.length;i++)
		{
			tmpstr=""
						
			if(ColSet[i].selectNodes("ColData").length==0||ColSet[i].getAttribute("Display")!="false")
			{
				TableStr=TableStr+"\t<div";		
				for(var j=0;j<ColSet[i].attributes.length;j++)
				{
					if(ColSet[i].attributes[j].name!="HeaderText")
						TableStr=TableStr+" "+ColSet[i].attributes[j].name+"=\""+ColSet[i].attributes[j].text+"\"";
					else
					{						
							tmpstr=">"+ColSet[i].attributes[j].text+"</div>\n";						
					}
				}
			}
			TableStr=TableStr+tmpstr;
		}

		TableStr=TableStr+"</div>\n";
		}

		var FieldList;
		if (typeof(PageSize)=="undefined")
		{
			var PageSize=10;
			if(DataSourceRoot.getAttribute("PageSize")!=null)
			{
				if (typeof(PageNewSize)=="undefined")			
					PageSize=DataSourceRoot.getAttribute("PageSize");
				else
					PageSize=PageNewSize;
			}
			
		}
		var CrossRowData;
		var CrossRowSpan=0;
		row+="<div";
		for(var k=0;k<RowItem.attributes.length;k++)
			{		
						row+=" "+RowItem.attributes[k].name+"=\""+RowItem.attributes[k].text+"\"";
				
			}
		row+=">\n";
		
		var rowT="";
		CountList=DataCol.length
		for(var i=0;i<DataCol.length;i++)
		{		
			rowT+=row;
			cell=""
			for(var j=0;j<ColSet.length;j++)
			{
				ColData=ColSet[j].selectSingleNode("ColData");
				ColItem=ColSet[j].selectSingleNode("ColItem");
				var DataStr="";
				if(ColData.parentNode.getAttribute("Display")!="false")
				{
					cell+= "\t<div";	
					for(var m=0;m<ColItem.attributes.length;m++)
						{
						cell+=" "+ColItem.attributes[m].name+"=\""+ColItem.attributes[m].text+"\"";							
						}	
					if(ColData.getAttribute("ShowFormat")==null||ColData.getAttribute("ShowFormat")=="")
					{
						if(ColData.getAttribute("DataField")=="CountList")
							DataStr=i+1;
						else
							DataStr=DataCol[i].getAttribute(ColData.getAttribute("DataField"));
					}
					else
						DataStr=ShowFormat(ColData.getAttribute("ShowFormat"),DataCol[i],ColData,i);
					if(DataStr=="")
						DataStr="&nbsp;";
						cell+=">"+DataStr+"\t</div>\n"	
				}
				
			}
			rowT+=cell+"</div>\n"
		}
		TableStr+=rowT;
		if(RowSet.getAttribute("FooterShow")!="false")
		{

			if(GridRoot.getAttribute("PageStyle")!=null&&GridRoot.getAttribute("PageStyle")!="none")
			{
				if(PageXml.documentElement==null)
					DataPageSet();					
				var PageStr=DataPage(PageXml.documentElement,ResultDataRoot.getAttribute("ItemCount"),PageNo,PageSize,GridRoot.getAttribute("PageStyle"))
				var reg=new RegExp("<DataShow>","gi");
				PageStr=PageStr.replace(reg,"")
				reg=new RegExp("</DataShow>","gi")
				PageStr=PageStr.replace(reg,"")
				var footStr="<div class=\"mainbar0\" style=\"margin-top :2px;height : 26px;\">\n";
				footStr+="<div style=\"float:right;\">{#TbFoot}</div>\n</div>\n";
				reg=new RegExp("{#TbFoot}","gi")
				footStr=footStr.replace(reg,PageStr)
				reg=new RegExp("{#nbsp}","gi")
				footStr=footStr.replace(reg,"&nbsp;")
				TableStr+=footStr;
			}
		}
		if (Datatype=="select"&&SelectStr!="")
		{			
			var reg= new RegExp("<div>","gi")
			TableStr=TableStr.replace(reg,"")
			var reg= new RegExp("</div>","gi")
			TableStr=TableStr.replace(reg,"")
			var reg= new RegExp("\n","gi")
			TableStr=TableStr.replace(reg,"")
			TableStr=SelectStr.replace("{#select}",TableStr);
		}
		return TableStr;
	}
catch(ep)
	{
		alert("DivDataList错误号：#000005\n"+ep.message)
	}
}
