var insertclear=true;//新增后是否需要进行界面清空
var firstneedrefreshgrid=true;//第一次新增时需要清空底部表格后再新增
var zindexcount = 1000;
//function document.oncontextmenu() { return false; }
function outerwrite(S)
{
	document.write(S);
}
//███████████████████████████████████████████████████████████████████████
//setTimeout(查询2,1,sqls)
var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay) 
{
	 if(typeof fRef == 'function')
	 {
		  var argu = Array.prototype.slice.call(arguments,2);
		  var f = (function(){ fRef.apply(null, argu); });
		  return _st(f, mDelay);
	 }
	 return _st(fRef,mDelay);
}
//███████████████████████████████████████████████████████████████████████
//GetQueryValue(document.location.search,'xzy')
//对参数不区分大小写
function GetQueryValue(sorStr,panStrs)
{
	
	var vStr="";
	var panStr="";
	
	if (sorStr==null || sorStr=="" || panStrs==null || panStrs=="") return vStr;

	sorStr = sorStr.toLowerCase();
	panStrs=panStrs.toLowerCase();
	
	panStr=panStrs;
	panStr += "=";
	panStr="?"+panStr;
	var itmp;
	itmp=sorStr.indexOf(panStr);//&id=10

	if(itmp<0)
	{
		panStr=panStrs;
		panStr += "=";
		panStr="&"+panStr;
		itmp=sorStr.indexOf(panStr);
				
	}
	if (itmp<0){return vStr;}
	

	sorStr = sorStr.substr(itmp + panStr.length);
	itmp=sorStr.indexOf("&");
	if (itmp<0)
	{
		return sorStr.replace(/%20/g,"").replace(/ /g,"").replace(/\'/g,"").replace(/\"/g,"");
	}
	else
    {
		sorStr=sorStr.substr(0,itmp);
		return sorStr.replace(/%20/g,"").replace(/ /g,"").replace(/\'/g,"").replace(/\"/g,"");
	}
}
//对参数区分大小写
function GetQueryValueDXX(sorStr,panStrs)
{
	
	var vStr="";
	var panStr="";
	
	if (sorStr==null || sorStr=="" || panStrs==null || panStrs=="") return vStr;

	//sorStr = sorStr.toLowerCase();
	//panStrs=panStrs.toLowerCase();
	
	panStr=panStrs;
	panStr += "=";
	panStr="?"+panStr;
	var itmp;
	itmp=sorStr.indexOf(panStr);//&id=10

	if(itmp<0)
	{
		panStr=panStrs;
		panStr += "=";
		panStr="&"+panStr;
		itmp=sorStr.indexOf(panStr);
				
	}
	if (itmp<0){return vStr;}
	

	sorStr = sorStr.substr(itmp + panStr.length);
	itmp=sorStr.indexOf("&");
	if (itmp<0)
	{
		return sorStr.replace(/%20/g,"").replace(/ /g,"").replace(/\'/g,"").replace(/\"/g,"");
	}
	else
    {
		sorStr=sorStr.substr(0,itmp);
		return sorStr.replace(/%20/g,"").replace(/ /g,"").replace(/\'/g,"").replace(/\"/g,"");
	}
}
//███████████████████████████████████████████████████████████████████████
//创建简单的XML串,相当于是一行一列的,<roots><tname><colname>val</colname></tname></roots>
//调用方法:CreateSimpleXML("roots","tname","colname","邢志云")
function CreateSimpleXML(roots,tname,colname,val)
{
	var objDom
	var objRoot
	var objNode
	var objNodeValue
	var s
	
	objDom = new ActiveXObject("Microsoft.XMLDOM");
	objDom.async=false;
	objDom.preserveWhiteSpace = true;
	//-----------------------------------------------------------------------------------
	objRoot = objDom.createElement(roots);
	objDom.appendChild(objRoot); //添加根节点
	//-----------------------------------------------------------------------------------
	objNode = objDom.createElement(tname);
	
	objNodeValue = objDom.createElement(colname);
	objNodeValue.text =val;
	objNode.appendChild(objNodeValue);

	objRoot.appendChild(objNode);		
	//-----------------------------------------------------------------------------------
	s=objDom.xml

	objDom = null;
	objRoot = null;
	objNode = null;
	objNodeValue = null;
	delete objDom;
	CollectGarbage();
	return s;
}
//███████████████████████████████████████████████████████████████████████
function setdefaultfocus(content)
{
	var obj=content.all;
    for(i=0 ;i<obj.length; i++)
    {
		if(obj[i].tagName=="INPUT")
		{
			if(obj[i].type.toUpperCase()=="TEXT")
			{
				if(obj[i].defaultfocus=="true")
				{
					if(!obj[i].disabled)
					{
						setfocus(obj[i]);
						break;
					}
				}
			}
		}
	}
}
function setfocus(obj)
{
	try{obj.focus();}catch(ex){;}
}
//███████████████████████████████████████████████████████████████████████
//获取当前网页的文件名
//如http://127.0.0.1/lhjc\test.htm?dd 则返回 test.htm
//测试样例:http://127.0.0.1/lhjc\test.htm?dd->test.htm
//         http://127.0.0.1/lhjc\test.htm?id=1&back=cctv.htm->test.htm
function GetPageName()
{
	var fn=location.href+"?";
	var wn=fn.indexOf("?");
	fn=fn.substring(0,wn);
	var rval=fn.replace(/^.+\/(.+)$/,'$1');
	return rval
}
//这个函数不是很可靠,对于http://127.0.0.1/lhjc/a.htm/a.htm就会出错
function GetUrlPath()//获取当前页面的路径,如:http://127.0.0.1/lhjc/jst_main.htm,返回http://127.0.0.1/lhjc/
{
	var fn=location.href+"?";
	var pagename=GetPageName();
	var ini=fn.indexOf(pagename);
	var rval="";
	if(ini>-1)
	{
		rval=(fn.substring(0,ini));
	}
	return rval;
}

//███████████████████████████████████████████████████████████████████████
function IsNumber(num)
{
	if(isNaN(Number((num))))
    {
        return false;   			
    }	
	else
	{
		if(num+""=="")return false;
		return true;
	}
}
function ReadSerial(no)
{
	var xzy="";
	try
	{
		ePass.OpenDevice(no, "");
		xzy=ePass.GetStrProperty(7,0,0);
		ePass.CloseDevice();
	}
	catch (e)
	{
		//alert("myerror:" + e.number+"\r\n"+e.message);
	}	
	return xzy;
}
//███████████████████████████████████████████████████████████████████████
//四舍五入,//最多支持6位小数的四舍五入
function MyRound(numberRound,roundDigit){
var sOffsetPara = 1000000 ;
return parseFloat(parseFloat(numberRound*sOffsetPara).toFixed(roundDigit)/sOffsetPara).toFixed(roundDigit) * 1.0;
}
//███████████████████████████████████████████████████████████████████████
function MyVal(num)
{
	if(isNaN(Number((num))))
    {
        return 0;   			
    }
	return Number((num));
}
//███████████████████████████████████████████████████████████████████████
//设置edit页面上所有的录入框,为只读,并且按钮不可见
//在只读状态下,需要执行这个函数
function setpagereadonly(content)
{
	var obj =content.all;
	//alert(obj.length);
	iautitle.innerHTML="_阅读";
	for(var i=0 ;i<obj.length; i++)
	{
		if(obj[i].antireadonly)//给元素设置上antireadonly=true则可以抵抗页面制度函数对元素功能的破坏
		{
			;
		}
		else
		{
			if(obj[i].tagName=="INPUT" || obj[i].tagName=="TEXTAREA")
			{
				obj[i].readOnly=true;
				obj[i].onclick=function(){;}
				obj[i].ondbclick=function(){;}
				obj[i].onfocus=function(){;}
				if(obj[i].type.toUpperCase()=="CHECKBOX" || obj[i].type.toUpperCase()=="RADIO")
				{
					//obj[i].disabled=true;
					//obj[i].style.display="none";
					obj[i].onclick=function(){return false;}
				}
				obj[i].style.cursor="auto";
				if(obj[i].className=="mxxCalendar"){obj[i].className="";}
			}
			if(obj[i].tagName=="IMG")
			{
				if(obj[i].onclick!=null)
				{
					obj[i].style.display="none";
				}
			}
			if(obj[i].tagName=="BUTTON")
			{
				obj[i].style.display="none";
			}
			if(obj[i].id=="divfj"){obj[i].innerHTML="";obj[i].style.display="none"}
		}
	}		
}
//███████████████████████████████████████████████████████████████████████
//返回重复len次的c串
//如 alert(Space("c",5)); 返回 ccccc
function Space(c,len)
{
	var i;
	var rval;
	rval="";
	for(i=0;i<len;i++)
	{
		rval=rval+c;
	}
	return rval;
}
//███████████████████████████████████████████████████████████████████████
//去掉首尾的空格
function trim(str)
{
	return str.replace(/^\s*/,'').replace(/\s*$/,'');
}
function String.prototype.trim(){return this.replace(/(^\s*)|(\s*$)/g,"");}
//███████████████████████████████████████████████████████████████████████
//从xml的节点node,按照名称tagName获取该节点下的某个子节点的text,
function GetItemVal(node,tagName)
{
	//alert(Row.childNodes[0].tagName);
	//alert(node.childNodes.length);
	var i;
	for(i=0;i<node.childNodes.length;i++)
	{
		if(node.childNodes[i].tagName.toUpperCase()==tagName.toUpperCase())
		{
			return node.childNodes[i].text;
			break;
		}
	}
	if(i==node.childNodes.length)
	{
		throw("GetItemVal()★不存在["+tagName+"]的节点★");
	}
}
//███████████████████████████████████████████████████████████████████████
//Excel控制代码
//合并某个列中相同内容的单元格
//ExcelMerge列(1,10,"A");
function excelmergecol(StartRow,EndRow,MergeCol)
{
    var OldValue;
    var OldValue行;
    var NewValue;
    var R;
    OldValue = "邢志云";
    NewValue = "";
    R = StartRow;
	for(R=StartRow;R<=(EndRow+1);R++)
	{
		NewValue=TANGER_OCX.ActiveDocument.Sheets(1).Cells(R, MergeCol).value;
		if(NewValue!=OldValue)
		{
            if (R > (StartRow + 1))
			{
                //TANGER_OCX.ActiveDocument.Application.Range("A8:A10").MergeCells=true;
				//alert("*"+OldValue+"*");
				if(OldValue!=null && OldValue!="")//对于本身就是""的行,不合并
				{
					TANGER_OCX.ActiveDocument.Application.Range("A"+OldValue行+":A"+(R-1)).MergeCells=true;
				}
            }
            OldValue行 = R;
		}
		else
		{
			TANGER_OCX.ActiveDocument.Sheets(1).Cells(R, MergeCol) = null;
		}
		OldValue = NewValue;
	}
}
function orderchar(Index)//excel顺序字符
{
	var char1N=0;
	var char2N=0;
	var char1="";
	var char2="";
	char1N=parseInt(Index / 26);
	char2N=Index %26;
	if(char2N==0)
	{
		char1N=char1N-1;
        if(char1N > 0)char1 = String.fromCharCode("A".charCodeAt(0) + char1N - 1);
        char2 = "Z";
	}
	else
	{
        if(char1N > 0)char1 = String.fromCharCode("A".charCodeAt(0) + char1N - 1);
        char2 = String.fromCharCode("A".charCodeAt(0) + char2N - 1)	;	
	}
	return char1+char2;
}
String.prototype.lenB   =   function()//调用时需要加括号
{
	return   this.replace(/[^\x00-\xff]/g,"**").length;
}   


//███████████████████████████████████████████████████████████████████████
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//recordset start
/*
recordset的调用例子
var s="";
var rs=new recordset();


 
//直接得到xml而不是rows
rs.type="calltest";
rs.resulttype=1;
alert(rs.open("你好","邢志云"));
return;


 
//可以这么传参数
var para=new Array();
para[0]="@@姓名=邢志云";
para[1]="@@性别=男";
para[2]="cctv\r\ntytv<font color=red>xxx</font>";
para[3]="@@年龄=34";
rs.type="calltest";
rs.open(para);


 
//可以这么传参数
rs.type="calltest";
rs.open("@@name=邢志云","@@gental=男","太原");

rs.type="defaultdbgrid";//"calltest";//
rs.recordperpage=15;
rs.pageno=3;
rs.open("");
alert("数据总量:"+rs.allpagerecordcount+"\r\n每页显示:"+rs.recordperpage+"\r\n总页数:"+rs.pagecount+"\r\n当前页:"+rs.pageno);
//遍历列名称和类型
//------------------------这段显示了结果集的内容
var s="";
for(c=0;c<rs.columncount;c++)
{
    s=s+rs.getcolnamebyno(c)+"("+rs.getcoltype(c)+") | ";
}
s=s+"\r\n";
//alert(s);

//遍历行字段
if(rs.recordcount>0)
{    
    for(var r=0;r<rs.recordcount;r++)
    {
        for(var c=0;c<rs.columncount;c++)
        {
            s=s+rs.rows(r,c)+" | ";
        }
        s=s+"\r\n";
    }
}
alert(s);
//------------------------
rs.close();
//alert(rs.getcolnobyname("标题"));//根据列名返回列序号
//alert(rs.rows(0,"标题"));//根据列名称访问字段值
*/
function recordset()
{
	this.postpage=null;//向哪个页面提交,默认是本页
	this.type=null;//提交的action,不能为空
	this.columncount=0;//只读,反映结果集中有多少个列
	this.recordcount=0;//只读,反映结果集中有多少行数据
	this.resulttype=0;//0:把返回值写入到数组中 1:仅返回xml结果,不把xml编成数组,这种情况下open后没有rows,直接就返回了xml结果集
	
	//分页时,查询语句需要有一个不重复的排序列
	this.recordperpage=null;//每页显示的数据量,默认null表示不分页
	this.pageno=1;//显示的是第几页,默认是第一页
	this.pagecount=null;//只读,总共有多少页
    this.allpagerecordcount=null;//只读,总共有多少行数据(指不分页的情况下)
     
	this.errors="";
	
	var colarr=new Array();//存储列的名称,都是大写的,colarr[0]="姓名NAME",colarr[1]="性别GENTAL"......
	var coltypearr=new Array();//存储列的类型 C表示字符,N表示数字
	var rowarr=new Array();//存储结果集的二维数组
	var nametoimap={};//存储每个列的名字和列序号的对应关系
	this.getrowarr=function()
	{
	    return rowarr;
	}
	this.close=function()//关闭,主要清理的数据,其他的还都保留着
	{
	    colarr.splice(0,100000000);
	    rowarr.splice(0,100000000);
	    coltypearr.splice(0,100000000);
	    nametoimap={};
		delete colarr;
		delete rowarr;
		delete coltypearr;
		delete nametoimap;
		this.columncount=0;
		this.recordcount=0;
		CollectGarbage();
	}
	//读取结果并设置各种值
	this.open=function()
	{
		//alert(sqls);
		//rowarr[0]=new Array(5);
		//rowarr[1]=new Array(5);
		var objDom;
		var objRoot;
		var objNode;
		var objNodeValue;
		var xmlsql;
		var i,n,s;
		var args,values;
		this.errors="";
		this.columncount=0;
		this.recordcount=0;
		objDom = new ActiveXObject("Microsoft.XMLDOM");
		objDom.async=false;
		objDom.preserveWhiteSpace = true;
		objRoot = objDom.createElement("root");
		objDom.appendChild(objRoot); //添加根节点
		
		objNode = objDom.createElement("params");
		var inputs=arguments;
		if(arguments.length==0)
		{
		    throw "recordset.open:★必须设置参数,open不支持无参数调用★"
		}
		else if(arguments.length==1)
		{
		    //如果只有1个参数,那么判断这个参数是否为数组,函数支持数组为参数,这个数组把arguments代替了
		    if(typeof(arguments[0])=="object" && arguments[0].length)
		    {
		        inputs=arguments[0];
		    }
		}
		for(i=0;i<inputs.length;i++)
		{
			inputs[i]=inputs[i]+"";//转为字符串
		    args=null;
		    if(inputs[i].substring(0,2)=="@@")//判断名字参数
		    {
		        s=inputs[i].substring(2);
		        n=s.indexOf("=")
		        if(n>-1)
		        {
		            args=s.substring(0,n)
		            values=s.substring(n+1);
		        }
		    }
		    if(args==null)
		    {
		        objNodeValue = objDom.createElement("xmlparams"+i);
		        objNodeValue.text =inputs[i];
		    }
		    else
		    {
		        objNodeValue = objDom.createElement(args);
		        objNodeValue.text =values;
		    }
		    objNode.appendChild(objNodeValue);
		}
		
		objRoot.appendChild(objNode);
		
		if(this.recordperpage!=null)//有分页设置
		{
            objNode = objDom.createElement("pagesplit");	
            
            objNodeValue = objDom.createElement("recordperpage");
		    objNodeValue.text =this.recordperpage;
		    objNode.appendChild(objNodeValue);	
		    
            objNodeValue = objDom.createElement("pageno");
		    objNodeValue.text =this.pageno;
		    objNode.appendChild(objNodeValue);
		    		    
            objRoot.appendChild(objNode);
        }
		xmlsql=objDom.xml;
		/*提交结果集样例
        <root>
            <params>
                <name>邢志云</name>
                <gental>男</gental>
                <xmlparams2>太原</xmlparams2>
            </params>
            <pagesplit>
                <recordperpage>15</recordperpage>
                <pageno>1</pageno>
            </pagesplit>
        </root>		
		*/
//		alert(xmlsql);
//		return;
		//2.向页面提交,返回xml结果集
		/*
		返回结果集样例
		<NewDataSet>
			<cols>
				<cn>样品类别</cn>
				<cn>符号</cn>
			</cols>
			<coltype>
				<cn>N</cn>
				<cn>C</cn>
			</coltype>
             <pageset>//这一节也可能没有
                <pagecount>25</pagecount>
                <pageno>2</pageno>
                <allpagerecordcount>122</allpagerecordcount>
                <recordperpage>5</recordperpage>
             </pageset>			
			<r>
				<c>军品原材料</c>
				<c>A</c>
			</r>
			<r>
				<c>军品半成品</c>
				<c>B</c>
			</r>
			<r>
				<c>车辆</c>
				<c>C</c>
			</r>
		</NewDataSet>
		*/
		if(this.postpage==null)
		{
			//alert(location.pathname+location.search);
			//alert(GetPageName()+location.search);
		    this.postpage=GetPageName();
		}
		var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		var tarurl;
		var urlpara=location.search;

		if(urlpara.indexOf("?")>-1)
			urlpara=urlpara+"&xmlaction="+this.type;
		else
			urlpara="?xmlaction="+this.type;

		if(urlpara.lenB()!=urlpara.length)urlpara=escape(urlpara);
		
		urlpara=urlpara.replace(/%3F/g,"?").replace(/%26/g,"&").replace(/%3D/g,"=");
		tarurl=this.postpage+urlpara;
		oXmlHttp.Open("POST", tarurl, false);
		oXmlHttp.setRequestHeader("Content-Type","text/xml")
		oXmlHttp.Send(xmlsql);
		//alert(xmlsql);

		var Xsldom=new ActiveXObject("Microsoft.XMLDOM");
		Xsldom.async=false;
		Xsldom.loadXML(oXmlHttp.responseText);//得到返回的xml结果
//		alert(oXmlHttp.responseText);
//		return;
		//3.解析xml并存储到数组中
		var Table,row,col,n;
		
		if(Xsldom.documentElement.tagName=="NewDataSet")//是正常返回的数据
		{		
			if(this.resulttype==1)
		    {
		        return oXmlHttp.responseText;
		    }
			//Table=Xsldom.documentElement.childNodes;
			Table=Xsldom.documentElement.selectNodes("//NewDataSet/cols");//表的列名称
			for(i=0;i<Table.length;i++) 
			{
				Row=Table.item(i);
				Col=Row.childNodes;
				this.columncount=Col.length;
				for(n=0;n<this.columncount;n++)
				{
					colarr[n]=Col.item(n).text.toUpperCase();
					nametoimap[colarr[n].toUpperCase()]=n;//从名字到列序号的反向映射
				}
			}
            Table=Xsldom.documentElement.selectNodes("//NewDataSet/coltype");//表的列类型
			for(i=0;i<Table.length;i++) 
			{
				Row=Table.item(i);
				Col=Row.childNodes;
				for(n=0;n<this.columncount;n++) 
				{
					coltypearr[n]=Col.item(n).text;
				}
			}	
			Table=Xsldom.documentElement.selectNodes("//NewDataSet/pageset");//分页结果
			for(i=0;i<Table.length;i++) 
			{
				Row=Table.item(i);
				Col=Row.childNodes;
				for(n=0;n<Col.length;n++) 
				{
                    if(Col.item(n).nodeName=="recordperpage")this.recordperpage=Col.item(n).text*1;					
                    if(Col.item(n).nodeName=="pageno")this.pageno=Col.item(n).text*1;
                    if(Col.item(n).nodeName=="pagecount")this.pagecount=Col.item(n).text*1;
                    if(Col.item(n).nodeName=="allpagerecordcount")this.allpagerecordcount=Col.item(n).text*1;
				}
			}		
			Table=Xsldom.documentElement.selectNodes("//NewDataSet/r");//表的行数据
			this.recordcount=Table.length;
			for(i=0;i<Table.length;i++)
			{
				Row=Table.item(i);
				Col=Row.childNodes;
				rowarr[i]=new Array(Col.length);
				for(n=0;n<Col.length;n++)
				{
					if(coltypearr[n]=="N")
					{
						rowarr[i][n]=Col.item(n).text;
						if(rowarr[i][n]!="")
							rowarr[i][n]=MyVal(rowarr[i][n]);//去掉数字后面的.0000之类的东西
					}
					else
						rowarr[i][n]=Col.item(n).text;
				}
			}
			//alert(this.recordcount);
			//alert(rowarr[3][1]);
		}
		else if(Xsldom.documentElement.tagName=="error")//返回了错误
		{
			s="redordset.open:发生了意外错误:\n"+Xsldom.documentElement.childNodes(0).text;
			this.errors=s;
			throw s;
		}
        delete objDom;
		delete oXmlHttp;
		delete Xsldom
		CollectGarbage();
	}
	//根据列的编号,返回列的名称
	this.getcolnamebyno=function(col)
	{
		if(this.columncount>0 && col<this.columncount)
		{
			return colarr[col];
		}
		else
		{
			//alert ("列编号["+col+"]不在有效范围内");
			throw ("recordset.getcolnamebyno:★列编号["+col+"]不在有效范围内★");
			//return "";
		}
	}
	//根据列的名称,返回列的编号
	this.getcolnobyname=function(cname)
	{
		var i=nametoimap[cname.toUpperCase()];
		if(i==null)
		    throw "recordset.getcolnobyname:★列名["+cname+"]不存在★";
		else
		    return i;
	}
	//根据列的编号(或名字),返回列的类型,字符C,数字N
	this.getcoltype=function(col)
	{
	    if(IsNumber(col))//是数字
	    {
		    if(this.columncount>0 && col<this.columncount)
		    {
			    return coltypearr[col];
		    }
		    else
		    {
			    //alert ("列编号["+col+"]不在有效范围内");
			    throw ("recordset.getcoltype:★列编号["+col+"]不在有效范围内★");
			    //return "";
		    }
		}
		else
		{
		    return coltypearr[this.getcolnobyname(col)];
		}
	}	
	//返回结果集中的值,rows[0][1],
	this.rows=function(row,col)
	{
		if(IsNumber(col))//是数字
		{
			return rowarr[row][col];
		}
		else
		{
			return rowarr[row][this.getcolnobyname(col)];
		}
	}
}
//recordset end
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//███████████████████████████████████████████████████████████████████████
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//dbgrid start
/*
调用的例子
    var rs=new recordset();
    var t=new dbgrid();//如果在一个页面上创建多个表格,则需要每次都new dbgrid();否则各表格的grid对象会以最后一个为准
    wait("查询进行中,请稍后...");
    rs.type="defaultdbgrid";
    rs.recordperpage=15;
    rs.pageno=1;
    rs.open("");

    t.id="qtx";
    t.rs=rs;
    t.showcheck=true;
    t.startcolno=1;
    t.rskeyname="id";
    t.itemclick=Edit;
    //t.beforeshow=test1;
    //t.aftershow=test3;
    t.createtable(QueryResultContent);
    alert(qtx.dbgrid.checkedkeys());//显示选中的复选框
*/
function dbgrid()
{
    this.id=null;//表格的名字必须设置,而且不能重复,假设this.id=qt则表格中行的id形如qtr0,列id形如qtr0c0
    
    this.tables="border='1' width='99%' bordercolorlight='#5088E0' bordercolordark='#E6EEF6' cellspacing='0' cellpadding='0'";
    this.trshead="class='dbgridtrshead' style=''";
    this.trsodd="class='dbgridtrsodd'";
    this.trseven="class='dbgridtrseven'";
	this.td="";
    this.showhead=true;//是否显示表头
    
    this.showcheck=false;//是否显示checkbox列
    this.showpagedetail=true;//是否显示底部的翻页链接
    this.showexceltrans=true;//是否显示导入Excel链接
    
    this.startcolno=0;//从第几列开始列表
    this.rskeyname=null;//rs中哪个字段做为关键字,一般是IDS
    this.columnname=new Array();//对应列的名字,顺序和表头是对应的,columnname[i]中i从startcolno开始编号,所以可能没有0元素
    this.columntype=new Array();//对应列的数据类型,C或N,,columntype[i]中i从startcolno开始编号,所以可能没有0元素
    
    this.itemclick=null;//函数名(不带括号),点击表格中文字的时候,诱发的事件
    this.beforeshow=null;//函数名(不带括号),显示或翻页之前诱发的事件,调用方式 t.beforeshow=test1; test1就是某个函数
    this.aftershow=null;//函数名(不带括号),显示或翻页之后诱发的事件
    this.headclick=null;//字符串函数名(不带括号),点击标题后的事件,一般是做排序,要设置函数的名称的字符串
	this.headtitle=null;//鼠标放到列标题上的时候显示的title

    this.rs;//结果集,dbgrid就是把这个rs中的数据转换为表格显示
    this.maxrowid;//表格行编号,最大编到了多少
    this.container;
    //把创建的表格加载到 container 中
    this.createtable=function(container)   
    {
        if(this.beforeshow!=null)this.beforeshow(this);
        
        var htmls=new Array();
        var c,r;
        var rowid=-1,colid;
        var trid;
		var s;
        if(container==null && this.container==null)throw("dbgrid.createtable:★必须设置在哪个容器上创建★");

        if(container==null)container=this.container;
        if(this.container==null)this.container=container;
        
        if(this.id==null)throw("dbgrid.createtable:★必须先设置表格id★");

        htmls.push("<table ");htmls.push(" id="+this.id+" "+this.tables+">");
        htmls.push("<tbody>");
        if(this.showhead)//创建表头
        {
            htmls.push("<tr id="+this.id+"_r"+(++rowid)+" "+this.trshead+">");
            colid=0;
            if(this.showcheck)//显示check列
            {
                htmls.push("<td "+this.td+" id="+this.id+"_r"+rowid+"c"+(colid++)+" width=15>");
                htmls.push("<input type='checkbox' onclick="+this.id+".dbgrid.choiceall('"+this.id+"_checkbox',this.checked) title='选中表格所有行'>"); 
                htmls.push("</td>");
            }
            for(c=this.startcolno;c<this.rs.columncount;c++)
            {
                //s=s+this.rs.getcolnamebyno(c)+"("+this.rs.getcoltype(c)+") | ";
				s=this.rs.getcolnamebyno(c);
                htmls.push("<td "+this.td+" id="+this.id+"_r"+rowid+"c"+(colid++)+">");
				htmls.push("<a id="+this.id+"_c"+s+" value='"+s+"'");
				if(this.headclick!=null)
					htmls.push(" onclick="+this.headclick+"(this) title='"+this.headtitle+"' condition='' style='cursor:hand' ");
				htmls.push(">");//condition默认为'',点击后可能是asc或desc
                htmls.push(s);
				htmls.push("</a>");
                htmls.push("</td>");
                this.columnname[c]=this.rs.getcolnamebyno(c);
                this.columntype[c]=this.rs.getcoltype(c);
            }
            htmls.push("</tr>");
        }
        if(this.rs.recordcount>0)//创建数据
        {
/*第13行的样例,this.id是QueryTable
若修改这里的代码,则addrow中也需要修改
<tr height="25" bgcolor="#ffffcc" align="middle" id="QueryTable_r13" rowno="13" rsid="d173338b-d676-41c3-a748-0c463c99b040">
	<td id="QueryTable_r13c0" width="15">
		<input id="QueryTable_d173338b-d676-41c3-a748-0c463c99b040" onpropertychange="QueryTable.dbgrid.checkboxchange(this)" type="checkbox" name="QueryTable_checkbox" rsid="d173338b-d676-41c3-a748-0c463c99b040" rowid="QueryTable_r13">
	</td>
	<td id="QueryTable_r13c1" rscolid="1">
		<a style="CURSOR: hand" onclick="QueryTable.dbgrid.cellclick('QueryTable_r13','d173338b-d676-41c3-a748-0c463c99b040')">sdf </a>
	</td>
	<td id="QueryTable_r13c2" rscolid="2">
		<a style="CURSOR: hand" onclick="QueryTable.dbgrid.cellclick('QueryTable_r13','d173338b-d676-41c3-a748-0c463c99b040')">&nbsp;</a>
	</td>
	<td id="QueryTable_r13c3" rscolid="3">
		<a style="CURSOR: hand" onclick="QueryTable.dbgrid.cellclick('QueryTable_r13','d173338b-d676-41c3-a748-0c463c99b040')">&nbsp;</a>
	</td>
</tr>
*/
            for(r=0;r<this.rs.recordcount;r++)
            {
                trid=this.id+"_r"+(++rowid);
                htmls.push("<tr id="+trid+" ");
                if(r % 2==0)
                    htmls.push(this.trsodd);
                else
                    htmls.push(this.trseven);
                //每个数据行上有和行序号相关的rowno
                htmls.push(" rowno="+rowid);
				if(this.rskeyname!=null)//可以通过遍历tr的方法,找到rs(ids)对应的行
                    htmls.push(" rsid="+this.rs.rows(r,this.rskeyname));
                htmls.push(">");
                colid=0;
                if(this.showcheck)//显示check列
                {
                    htmls.push("<td "+this.td+" id="+this.id+"_r"+rowid+"c"+(colid++)+" width=15>");
                    
                    htmls.push("<input type='checkbox'");
                    htmls.push(" onpropertychange='"+this.id+".dbgrid.checkboxchange(this)'");
                    htmls.push(" rowid="+trid);
                    if(this.rskeyname!=null)
                        htmls.push(" rsid="+this.rs.rows(r,this.rskeyname));
					//每个数据行的checkbox上都有和rs(id)相关的name属性,可以通过rs(id)找到对应的行
					if(this.rskeyname!=null)
						htmls.push(" id="+this.id+"_"+this.rs.rows(r,this.rskeyname));
                    htmls.push(" name="+this.id+"_checkbox>");
                    
                    htmls.push("</td>");
                }                
                for(c=this.startcolno;c<this.rs.columncount;c++)
                {
                    htmls.push("<td "+this.td+" id="+this.id+"_r"+rowid+"c"+(colid++)+" rscolid="+c+">");//rscolid:说明的是本单元格对应的是rs中哪个列,columnname[rscolid]可以得到本单元格对应的字段名称
	                
	                if(this.itemclick!=null)
	                {
	                    htmls.push("<a onclick="+this.id+".dbgrid.cellclick('"+trid+"'");
	                    if(this.rskeyname!=null)htmls.push(",'"+this.rs.rows(r,this.rskeyname)+"'");
	                    htmls.push(") style='cursor:hand;'>");
	                }
	                htmls.push(this.rs.rows(r,c));
	                htmls.push("&nbsp;");
	                if(this.itemclick!=null)
	                    htmls.push("</a>");
	                    
	                htmls.push("</td>");
                }
                htmls.push("</tr>");
                //alert(r+":"+this.rs.rows(r,5));
            }
        }     
        htmls.push("</tbody>");
        htmls.push("</table>");   
        
		htmls.push("<span class='smallword'>");
        if(this.showpagedetail)
        {
            //数据总量:"+rs.allpagerecordcount+"\r\n每页显示:"+rs.recordperpage+"\r\n总页数:"+rs.pagecount+"\r\n当前页:"+rs.pageno
            
            if(this.showcheck)
				htmls.push("<input type='checkbox' onclick="+this.id+".dbgrid.choiceall('"+this.id+"_checkbox',this.checked) title='选中表格所有行'>全选"); 
            htmls.push("&nbsp;&nbsp;记录总数:<a style='color:red;' id="+this.id+"_recordcountdisp>"+this.rs.allpagerecordcount+"</a>&nbsp;");
            htmls.push("&nbsp;&nbsp;&nbsp;页次:"+this.rs.pagecount+"-");
            htmls.push("<input maxLength='10' value='"+this.rs.pageno+"' name='"+this.id+"_gopageno' style='font-family:宋体;height:16;width:25;border: 1px solid #000000; text-align:left;font-size:9pt;'>");
            htmls.push("<input type='button' value='Go' onclick="+this.id+".dbgrid.gotopage("+this.id+"_gopageno.value) style='cursor:hand;font-family:宋体;border:1px solid #000000; width:20;height:16;font-size:9pt;'>");
            
            htmls.push("&nbsp;&nbsp;");
            
            if(this.rs.allpagerecordcount>0 && this.rs.pageno>1)
                htmls.push("<a style='color=blue;cursor:hand' onclick=\""+this.id+".dbgrid.gotopage(1);\"><font face='webdings'>9</font>第一页</a>");
            else
                htmls.push("<a style=\"color='#999999';\"><font face='webdings'>9</font>第一页</a>");
            htmls.push("&nbsp;");
            if(this.rs.pageno>1)
                htmls.push("<a style='color=blue;cursor:hand' onclick=\""+this.id+".dbgrid.gotopage("+(this.rs.pageno-1)+");\"><font face='webdings'>7</font>上一页</a>");
            else
                htmls.push("<a style=\"color='#999999';\"><font face='webdings'>7</font>上一页</a>");
            htmls.push("&nbsp;");
            if(this.rs.pageno<this.rs.pagecount)
                htmls.push("<a style='color=blue;cursor:hand' onclick=\""+this.id+".dbgrid.gotopage("+(this.rs.pageno+1)+");\">下一页<font face='webdings' >8</font></a>");
            else
                htmls.push("<a style=\"color='#999999';\">下一页<font face='webdings' >8</font></a>");
            htmls.push("&nbsp;");
            if(this.rs.allpagerecordcount>0 && this.rs.pageno<this.rs.pagecount)
                htmls.push("<a style='color=blue;cursor:hand' onclick=\""+this.id+".dbgrid.gotopage("+this.rs.pagecount+");\">最末页<font face='webdings'>:</font></a>");
            else
                htmls.push("<a style=\"color='#999999';\">最末页<font face='webdings'>:</font></a>");
        }
		if(this.showexceltrans)
		{
			htmls.push("&nbsp;&nbsp;");
			htmls.push("<a style='color=blue;cursor:hand' onclick=\"gridtoexcel('"+this.id+"')\">※把当前显示表格数据导入Excel中※</a>");
		}
		htmls.push("</span>");
        container.innerHTML=htmls.join("");
        htmls.splice(0,100000000);
        
        this.maxrowid=rowid;
        var obj=document.getElementById(this.id);
        if(obj!=null)//向表格上附加其它属性,可以通过表格id来访问
        {
            obj.dbgrid=this;
        }
        if(this.aftershow!=null)this.aftershow();
        //alert(container.innerHTML);
    }//createtable:end

/*第13行的样例,this.id是QueryTable
<tr height="25" bgcolor="#ffffcc" align="middle" id="QueryTable_r13" rowno="13" rsid="d173338b-d676-41c3-a748-0c463c99b040">
	<td id="QueryTable_r13c0" width="15">
		<input id="QueryTable_d173338b-d676-41c3-a748-0c463c99b040" onpropertychange="QueryTable.dbgrid.checkboxchange(this)" type="checkbox" name="QueryTable_checkbox" rsid="d173338b-d676-41c3-a748-0c463c99b040" rowid="QueryTable_r13">
	</td>
	<td id="QueryTable_r13c1" rscolid="1">
		<a style="CURSOR: hand" onclick="QueryTable.dbgrid.cellclick('QueryTable_r13','d173338b-d676-41c3-a748-0c463c99b040')">sdf </a>
	</td>
	<td id="QueryTable_r13c2" rscolid="2">
		<a style="CURSOR: hand" onclick="QueryTable.dbgrid.cellclick('QueryTable_r13','d173338b-d676-41c3-a748-0c463c99b040')">&nbsp;</a>
	</td>
	<td id="QueryTable_r13c3" rscolid="3">
		<a style="CURSOR: hand" onclick="QueryTable.dbgrid.cellclick('QueryTable_r13','d173338b-d676-41c3-a748-0c463c99b040')">&nbsp;</a>
	</td>
</tr>
*/
	this.addrow=function(first,rskeyvalue)
	{
		var rs=new recordset();
		rs.type=this.id+"_defaultdbgrid";
		rs.recordperpage=1;
		rs.pageno=1;
		
		rs.where=this.rskeyname+"='"+rskeyvalue+"'";
		rs.fields=this.rs.fields;
		rs.order="";
		rs.showrow=true;
		rs.open(rs.showrow,rs.where,rs.fields,rs.order);
		//当first=true的时候,表格会重新创建,并且只显示新增的这一行
		if(first)
		{
			this.rs=rs;
			this.createtable(QueryResultContent);
			this.hlightrow(this.id+"_r1");
			rs.close();
		}
		else//first=false的时候是向表格的底部追加一行
		{
			var rowid=this.maxrowid;
			var tableobj=document.getElementById(this.id);
			var tbodyobj=tableobj.childNodes[0];
			var trobj,tdobj;
			var sa=new Array();		
			var trid=this.id+"_r"+(++rowid);
			var colid=0;
			if(rowid % 2==0)
				trobj=document.createElement("<tr "+this.trseven+">");
			else
				trobj=document.createElement("<tr "+this.trsodd+">");
			trobj.id=trid;
			trobj.rowno=rowid;
			if(this.rskeyname!=null)
				trobj.rsid=rs.rows(0,this.rskeyname);
			tbodyobj.appendChild(trobj);

			if(this.showcheck)//显示check列
			{
				tdobj=document.createElement("<td>");
				tdobj.width="15";
				tdobj.id=this.id+"_r"+rowid+"c"+(colid++);
				
				sa.push("<input type='checkbox'");
				sa.push(" onpropertychange='"+this.id+".dbgrid.checkboxchange(this)'");
				sa.push(" rowid="+trid);
				if(this.rskeyname!=null)
					sa.push(" rsid="+rs.rows(0,this.rskeyname));
				//每个数据行的checkbox上都有和rs(id)相关的name属性,可以通过rs(id)找到对应的行
				if(this.rskeyname!=null)
					sa.push(" id="+this.id+"_"+rs.rows(0,this.rskeyname));
				sa.push(" name="+this.id+"_checkbox>");
				
				tdobj.innerHTML=sa.join("");
				sa.splice(0,100);

				trobj.appendChild(tdobj);
			}
			for(var c=this.startcolno;c<rs.columncount;c++)
			{//修改这段代码时refreshrow中的相应程序也需要修改.
				tdobj=document.createElement("<td>");
				tdobj.id=this.id+"_r"+rowid+"c"+(colid++)+" rscolid="+c;//rscolid:说明的是本单元格对应的是rs中哪个列,columnname[rscolid]可以得到本单元格对应的字段名称
				if(this.itemclick!=null)
				{
					sa.push("<a onclick="+this.id+".dbgrid.cellclick('"+trid+"'");
					if(this.rskeyname!=null)sa.push(",'"+rs.rows(0,this.rskeyname)+"'");
					sa.push(") style='cursor:hand;'>");
				}
				sa.push(rs.rows(0,c));
				sa.push("&nbsp;");
				if(this.itemclick!=null)
					sa.push("</a>");
				tdobj.innerHTML=sa.join("");
				sa.splice(0,100);
				trobj.appendChild(tdobj);
			}	
			this.maxrowid=rowid;
			this.hlightrow(trobj.id);
		}
		var obj=document.getElementById(this.id+"_recordcountdisp");
		if(obj!=null)obj.innerText="";//MyVal(obj.innerText)+1;
		rs.close();
	}

	this.refreshrow=function(rskeyvalue)
	{
		var rs=new recordset();
		var tableobj=document.getElementById(this.id);
		var tbodyobj=tableobj.childNodes[0];
		var trobj;	
		var i,c,ctd;
		var sa=new Array();
		var rrsid,rrskeyvalue;
		rrskeyvalue=rskeyvalue.toLowerCase();
		for(i=0;i<tbodyobj.childNodes.length;i++)
		{
			//找到了对应的行
			rrsid=tbodyobj.childNodes[i].rsid;
			if(rrsid!=null)
			{
				rrsid=rrsid.toLowerCase();
				if(rrsid==rrskeyvalue)
				{
					trobj=tbodyobj.childNodes[i];
					rs.type=this.id+"_defaultdbgrid";
					rs.recordperpage=1;
					rs.pageno=1;
					
					rs.where=this.rskeyname+"='"+rskeyvalue+"'";
					rs.fields=this.rs.fields;
					rs.order="";
					rs.showrow=true;
					rs.open(rs.showrow,rs.where,rs.fields,rs.order);
					if(this.showcheck)
						ctd=1;
					else
						ctd=0;
					for(c=this.startcolno;c<rs.columncount;c++)
					{
						if(this.itemclick!=null)
						{
							sa.push("<a onclick="+this.id+".dbgrid.cellclick('"+trobj.id+"'");
							if(this.rskeyname!=null)sa.push(",'"+rs.rows(0,this.rskeyname)+"'");
							sa.push(") style='cursor:hand;'>");
						}
						sa.push(rs.rows(0,c));
						sa.push("&nbsp;");
						if(this.itemclick!=null)
							sa.push("</a>");
						trobj.childNodes[ctd++].innerHTML=sa.join("");
						sa.splice(0,100);
					}
					
					rs.close();
					this.hlightrow(trobj.id);
					break;
				}
			}
		}
	}
	
    //根据行号删除行,假设表格id为qt,调用方法为qt.dbgrid.deleterowbyrowno(5);
	//行号是按行号生成的 0,1,2,3,4
    this.deleterowbyrowno=function(rowno)
    {
        var trobj=document.getElementById(this.id+"_r"+rowno);
        if(trobj==null)
            throw("dbgrid.deleterowbyrowno:★以["+this.id+"_r"+rowno+"]为id的行没有找到,可能表格不存在或行不存在★");
        else
        {
            var tbody=document.getElementById(this.id).childNodes[0];
			tbody.removeChild(trobj);
			//this.hiderecordcountdisp();
			var obj=document.getElementById(this.id+"_recordcountdisp");
			if(obj!=null)obj.innerText="";//MyVal(obj.innerText)-1;
        }
    }
	//根据行上的checkbox的id来删除行,假设表格id为qt,那么每行都有(可能,this.showcheck=true时才创建)checkbox的name为qt_1188,1188是行的id
	//只有有this.showcheck=true的时候每个行才有这个id,一般都是和rs(id)相关的
    this.deleterowbycheckid=function(rskeyvalue)
    {
        var checkboxobj=document.getElementById(this.id+"_"+rskeyvalue);
		if(checkboxobj==null)throw("dbgrid.deleterowbycheckid:★以["+this.id+"_"+rskeyvalue+"]为id的checkbox没有找到,可能表格不存在或行不存在★");
        var trobj=document.getElementById(checkboxobj.rowid);
		if(trobj==null)
            throw("dbgrid.deleterowbycheckid:★以["+checkboxobj.rowid+"]为id的行没有找到,可能表格不存在或行不存在★");
        else
        {
            var tbody=document.getElementById(this.id).childNodes[0];
			tbody.removeChild(trobj);
			//this.hiderecordcountdisp();
			var obj=document.getElementById(this.id+"_recordcountdisp");
			if(obj!=null)obj.innerText="";//MyVal(obj.innerText)-1;
        }
    }
    //隐藏行,假设表格id为qt,调用方法为qt.dbgrid.rowdisplay(5);
    //hide:默认为none,也可以是inline(显示)
    this.rowdisplay=function(rowno,hide)
    {
        var trobj=document.getElementById(this.id+"_r"+rowno);
        if(hide==null)hide="none";
        if(trobj==null)
            throw("dbgrid.rowdisplay:★以["+this.id+"_r"+rowno+"]为id的行没有找到,可能表格不存在或行不存在★");
        else
        {
            trobj.style.display=hide;
        }
    }
    //隐藏列,qt.dbgrid.coldisplay(2)
    //hide:默认为none,也可以是inline(显示)
    this.coldisplay=function(colno,hide)
    {
        var tableobj=document.getElementById(this.id);
        var tbody=tableobj.childNodes[0];
        var rowcollect=tbody.childNodes;
        var tdobj;
        if(hide==null)hide="none";
        for(var r=0;r<rowcollect.length;r++)
        {
	        tdobj=document.getElementById(rowcollect[r].id+"c"+colno);
	        if(tdobj==null)
	            throw("dbgrid.hidecol:★以["+rowcollect[r].id+"c"+colno+"]为id的单元格没有找到,可能指定的列号不存在★");
	        else
	            tdobj.style.display=hide;
        }
    }
    //返回checkbox中选中的id串,如1,2,3
    //调用方法:s=qt.dbgrid.checkedkeys();
    this.checkedkeys=function(spliter)
    {
        var checkobjs=document.getElementsByName(this.id+"_checkbox");
        var ids=new Array();
        if(spliter==null)spliter=",";
        for(var i=0;i<checkobjs.length;i++)
        {
            if(checkobjs[i].checked)
            {
                ids.push(checkobjs[i].rsid);
            }
        }
        return ids.join(spliter);
    }
    //页面跳转
    this.gotopage=function(topageno)
    {
/*@cc_on
	@if (@inuser)
		try
		{
	@end
@*/

			var tableobj=document.getElementById(this.id);
			//var pagetoobj;
			if(tableobj!=null)
			{
				tableobj.dbgrid.container.innerHTML="";
				doevents();
				
				tableobj.dbgrid.rs.close();
				tableobj.dbgrid.rs.pageno=topageno;//pagetoobj.value;
				//wait("查询中,请稍后...");
				//alert(tableobj.dbgrid.rs.where+":"+tableobj.dbgrid.rs.fields+":"+tableobj.dbgrid.rs.order);
				tableobj.dbgrid.rs.open(tableobj.dbgrid.rs.showrow,tableobj.dbgrid.rs.where,tableobj.dbgrid.rs.fields,tableobj.dbgrid.rs.order);
				tableobj.dbgrid.createtable(tableobj.dbgrid.container);
				//wait("closeall");
			}	
/*@cc_on
	@if (@inuser)
		}    
    catch(ex) 
    {
        var s="gotopage:"+(ex.message==null?ex:ex.message);
        errmsg(s,16,"意外错误!")
    }
	@end
@*/

    }
	//隐藏记录总数显示的<a>
	this.hiderecordcountdisp=function()
	{
		var obj=document.getElementById(this.id+"_recordcountdisp");
		if(obj!=null)obj.style.display="none";
	}
    this.choiceall=function(checknames,corn)
    {
	    var objs=document.getElementsByName(checknames)
	    if(objs.length==0)
	    {
		    alert("没有可共选择的数据行");
		    return;
	    }
	    for(var i=0;i<objs.length;i++)
	    {
	        if(objs[i].checked!=corn)objs[i].checked=corn;
			
	    }
    } 
	this.hlightrow=function(trid)
	{
		try
        {
			
            var tableobj=document.getElementById(this.id);
            var trobj=document.getElementById(trid);
            if(tableobj.lastclickrow!=null)
            {
                if(tableobj.lastclickrow.cloldbkcolor!=null)
                {
                    //tableobj.lastclickrow.bgColor=tableobj.lastclickrow.cloldbkcolor;
                    //tableobj.lastclickrow.cloldbkcolor=null;
					tableobj.lastclickrow.style.backgroundColor=tableobj.lastclickrow.cloldbkcolor;
                    tableobj.lastclickrow.cloldbkcolor=null;
                }
            }
            tableobj.lastclickrow=trobj;
            //trobj.cloldbkcolor=trobj.bgColor;
            //trobj.bgColor=1349375;//4390722;
			trobj.cloldbkcolor=trobj.style.backgroundColor;
			trobj.style.backgroundColor=4390722;//1349375;
        }
        catch(e){}
	}
	this.hlightrow2=function(vids,gotomaodian)
	{
		if(this.rskeyname==null)return;
		vids=vids.toLowerCase();
		var tableobj=document.getElementById(this.id);
		var tbody = tableobj.childNodes[0];
		var rowcollect;
		var rtb;
		rowcollect=tbody.childNodes;
		for(rtb=0;rtb<rowcollect.length;rtb++)
		{
			if(rowcollect[rtb].rsid!=null)
			if(rowcollect[rtb].rsid.toLowerCase()==vids)
			{
				this.hlightrow(rowcollect[rtb].id,gotomaodian);
				break;
			}
		}		
	}
	//找到ids的下一行或上一行,返回下一行或上一行的ids,并高亮
	//如果没有rskeyname则不能用这个函数
	//direction:-1向上 1向下
	this.movenext=function(direction,ids)
	{
		var tableobj=document.getElementById(this.id);
		var tbody = tableobj.childNodes[0];
		var rowcollect;
		var r;
		var rval=new movenextval();
		var have=false;
		rval.ids="";
		rowcollect=tbody.childNodes;
		for(r=1;r<rowcollect.length;r++)
		{
			//colcollect=rowcollect[r].childNodes;
			//alert(rowcollect[r].rsid);
			if(ids==rowcollect[r].rsid)
			{
				have=true;
				break;
			}
		}
	//this.ids;
	//this.rowid;
	//this.havemore;
		if(have)
		{
			if(direction==1)//下一行
			{
				if(r<(rowcollect.length-1))
				{
					rval.ids=rowcollect[r+1].rsid;
					rval.rowid=rowcollect[r+1].id;
				}
				rval.havemore=(r<rowcollect.length-2);
			}
			else//上一行
			{
				if(r>1)
				{
					rval.ids=rowcollect[r-1].rsid;
					rval.rowid=rowcollect[r-1].id;
				}
				rval.havemore=(r>2);
			}
			if(rval.ids!="")this.hlightrow(rval.rowid);
		}
		return rval;
	}
    //tableid,trid,rskeyvalue,envokfunction
    this.cellclick=function(trid,rskeyvalue)
    {
		this.hlightrow(trid);
		doevents();
        this.itemclick(rskeyvalue);
    }       
    this.checkboxchange=function(checkboxobj)
    {
        if(event.propertyName=="checked")
        {
            var rowobj=document.getElementById(checkboxobj.rowid)
            if(rowobj!=null)
            {
                if(checkboxobj.checked)//选中 .style.backgroundColor
                {   
                    if(rowobj.cloldbkcolor!=null)
                    {
                        //rowobj.bgColor=rowobj.cloldbkcolor;
                        rowobj.style.backgroundColor=rowobj.cloldbkcolor;
						rowobj.cloldbkcolor=null;
                    }
                    //rowobj.chkoldbkcolor=rowobj.bgColor;
                    //rowobj.bgColor=8421504; 
					rowobj.chkoldbkcolor=rowobj.style.backgroundColor;
                    rowobj.style.backgroundColor=8421504;
                }
                else
                {
                    //rowobj.bgColor=rowobj.chkoldbkcolor;
					rowobj.style.backgroundColor=rowobj.chkoldbkcolor;
                    rowobj.cloldbkcolor=null;
                }
            }   
        }
    }    
}
function movenextval()
{
	this.ids;
	this.rowid;
	this.havemore;
}
function gridtoexcel(tableid)
{
	var left,top,width,height;
	width=screen.availWidth*0.9;
	height=screen.availHeight*0.9;
	left=(screen.availWidth-width)/2;
	top=(screen.availHeight-height)/2;
	wait("数据传输中,请稍后...");
	window.open("print_grid.aspx?tableid="+tableid,"","left="+left+",top="+top+",width="+width+",height="+height+",toolbar=no,directories=no,menubar=no,resizable=yes,scrollbars=yes,titlebar=yes");	
}
//dbgrid end
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//███████████████████████████████████████████████████████████████████████
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//queryer start
/*调用方式:
var rs=new recordset();
var s,st;
rs.type="getvisiblecols";
rs.open("");
s=rs.rows(0,0);//字段串
st=rs.rows(0,1);//类型串
rs.close();

var qe=new queryer();
qe.level=4;
qe.create(s,st,SearchContent);
qe.addsetter("公司","=","泰森");
qe.addsetter("点击率",">","100");
qe.addsetter("点击率","<=","200");
qe.addallfield("公司","点击率");
//可以用SearchContent.queryer来通过容器对象访问setter对象
//alert(SearchContent.queryer.getvalue());获得查询设置
*/
function queryer()
{
    this.fields;//字段串
    this.fieldstype;//字段类型串
    this.container;//创建容器
    this.level=2;//复杂度设置1:字段+值 2:条件 3:与或 4:括号

    this.maxrowno=-1;//表明当前条件设置最大的编号,只起个序号的作用
    
    this.optionsfield;//只读,存储字段下拉框的内容
    this.keycodehander=null;//一个函数名字符串的值,表示在文本框中按下键盘时诱发的事件函数名,例子:qe.keycodehander="querybutton";
    this.create=function(fields,fieldstype,container)
    {
	    var cols;
	    var colstype;
	    var htmls=new Array();
	    var s;
	    var i;
	    
        if(container==null && this.container==null)throw("queryer.create:★必须设置在哪个容器上创建★");
        if(container==null)container=this.container;
        if(this.container==null)this.container=container;
        
        if(fieldstype==null && this.fieldstype==null)throw("queryer.create:★必须设置字段类型串★");
        if(fieldstype==null)fieldstype=this.fieldstype;
        if(this.fieldstype==null)this.fieldstype=fieldstype;
        
        if(fields==null && this.fields==null)throw("queryer.create:★必须设置字段串★");
        if(fields==null)fields=this.fields;
        if(this.fields==null)this.fields=fields;
	    
        cols=fields.split(",");
        colstype=fieldstype.split(",");
        htmls.push("<option value=''></option>");
        for(i=0;i<cols.length;i++)
        {
            htmls.push("<option value='"+cols[i]+"' ftype='"+colstype[i]+"'>"+cols[i]+"</option>");
        }
        
        this.optionsfield=htmls.join("");

        htmls.splice(0,100000000);
        htmls=null;
        //把已有的字段增加上
        //this.addallfield();
        //把自己做为对象附加到容器上,将来可以通过容器访问查询对象
        container.queryer=this;
    }
    //追加所有的字段
    //可以加参数,表示不加载这些字段的设置框,但下拉框中仍然有
    this.addallfield=function()
    {
        var cols=this.fields.split(",");
        var i;
        var a;
        var have;
        for(i=0;i<cols.length;i++)
        {
            have=true;
            for(a=0;a<arguments.length;a++)
            {
                if(cols[i]==arguments[a])
                {
                    have=false;
                    break;
                }
            }
            if(have)this.addsetter(cols[i]);
        }
        //最后再加一个空的
        this.addsetter();
    }
    //删除所有的字段
    this.deleteallfield=function(addlast)
    {
        var i;
        this.container.innerHTML="";
        this.maxrowno=-1;
        //只增加一个空的
		if(addlast==null)addlast=true;
        if(addlast)this.addsetter();
    }
    //增加一个条件设置框
    //fieldname如果!=null则字段中显示这个名称
    this.addsetter=function(fieldname,condition,setvalue)
    {
        var htmls=new Array();
        var no=++this.maxrowno;
        var nodediv;
        var display;
		var obj;
		var divid="fieldno_"+no;
        nodediv=document.createElement("<div id="+divid+" rownum="+no+" name=queryitem>");
        //与或
        if(this.level>=3)
            display="inline";
        else
            display="none";
        htmls.push("<select size='1' id=andor style='display:"+display+";'><option value=''></option><option value='and'>并且</option><option value='or'>或</option></select>");
        //左括号
        if(this.level>=4)
            display="inline";
        else
            display="none";
        htmls.push("<select size='1' id=lbracket style='display:"+display+";'><option value=''></option><option value='('>(</option></select>");
        //字段
        htmls.push("<select size='1' id=fieldname onchange=\""+this.container.id+".queryer.addjudge("+no+")\">"+this.optionsfield+"</select>");
        //条件
        if(this.level>=2)
            display="inline";
        else
            display="none";
        htmls.push("<select size='1' id=condition style='display:"+display+";'><option value=''></option><option value='='>=</option><option value='&gt;'>></option><option value='&lt;'><</option><option value='&gt;='>>=</option><option value='&lt;='><=</option><option value='&lt;&gt;'><></option><option value='like'>包含</option></select>");
        //值
        htmls.push("<input type='text' id=setvalue  size='15' ");
		if(this.keycodehander!=null)
		{
			htmls.push("onKeyDown="+this.keycodehander+"(this)");
		}
		htmls.push(">");
        //值选择onclick=alert("+this.container.id+".all."+divid+".all.setvalue.value)
        htmls.push("<img src='images/button/dropdown.jpg' onclick=querydropdown('"+this.container.id+"',"+this.container.id+".all."+divid+") title='符合条件的预选值,仅显示前100条' style='cursor:hand;border: 1px solid #000080'>");
        //右括号
        if(this.level>=4)
            display="inline";
        else
            display="none";
        htmls.push("<select size='1' id=rbracket style='display:"+display+";'><option value=''></option><option value=')'>)</option></select>");
        //删除
        //htmls.push("<input type='button' value='×' id='closequery' onmousedown=\""+this.container.id+".queryer.deletesetter("+no+")\" style='cursor:hand;width=18;height=18;'>");
        htmls.push("<img border=0 id='closequery' title='删除此设置' src='images/button/delsetter.gif' onmousedown=\""+this.container.id+".queryer.deletesetter("+no+")\" style='cursor:hand;'>");

        nodediv.innerHTML=htmls.join("");
        this.container.appendChild(nodediv);
        if(fieldname!=null)
        {
            obj=eval(this.container.id+".all.fieldno_"+no);
            obj.all.fieldname.value=fieldname;          
        }
        if(condition!=null)
        {
            obj=eval(this.container.id+".all.fieldno_"+no);
            obj.all.condition.value=condition;
        }
        if(setvalue!=null)
        {
            obj=eval(this.container.id+".all.fieldno_"+no);
            obj.all.setvalue.value=setvalue;
        }
        htmls.splice(0,100000000);
        htmls=null;        
    }
    //获取设置值
    this.getvalue=function(excludfields)
    {
        var objfield =this.container.children;
        var i;
        var htmls=new Array();
        var andor,lbracket,fieldname,condition,setvalue,rbracket;
        var fieldtype;
        var s;
        var lrquotation;
        for(i=0;i<objfield.length;i++)
        {
            fieldname=objfield[i].all.fieldname.value;
            lbracket=objfield[i].all.lbracket.value;
            rbracket=objfield[i].all.rbracket.value;
			condition=objfield[i].all.condition.value;
            setvalue=objfield[i].all.setvalue.value;
			fieldtype=objfield[i].all.fieldname.options[objfield[i].all.fieldname.options.selectedIndex].ftype;
            andor=objfield[i].all.andor.value;
			
			if(fieldname=="")
			{
				if(andor=="")andor="and";
				if(andor=="and")andor=" and ";
				if(andor=="or") andor=" or  ";
				if(lbracket=="")andor="";
				htmls.push(andor+lbracket+rbracket);
				continue;
			}
            if(fieldname==excludfields)
			{
				if(andor=="")andor="and";
				if(andor=="and")andor=" and ";
				if(andor=="or") andor=" or  ";
				if(lbracket=="")andor="";
				htmls.push(andor+lbracket+rbracket);
				continue;
			}
            if(condition=="" && setvalue=="")
			{
				if(andor=="")andor="and";
				if(andor=="and")andor=" and ";
				if(andor=="or") andor=" or  ";
				if(lbracket=="")andor="";
				htmls.push(andor+lbracket+rbracket);
				continue;
			}
            
            
            
            
            //htmls.push(fieldname+"("+fieldtype+")"+condition+setvalue);
            if(fieldtype=="N")
            {
                lrquotation="";
                if(condition=="")condition="=";
                if(condition=="like")
                {
                    s="★只有字符才能使用'包含',而["+fieldname+"]是数字类型,所以不能使用包含条件,请调整查询设置★";
                    alert(s);
                    throw(s);
                }
            }
            else
            {
                if(condition=="")condition="like";
                lrquotation="'";
                setvalue=setvalue.replace(/'/g,"''");
                if(condition=="like")
                {
                    setvalue=setvalue.replace(/\[/g,"\[\[]");
                    if(setvalue.indexOf("%")==-1)setvalue="%"+setvalue+"%";
                }                
            }
            if(condition=="like" && setvalue=="%%")
            {
                condition="=";
                setvalue="";
            }
            if(andor=="")andor="and";
            if(andor=="and")andor=" and ";
            if(andor=="or") andor=" or  ";//长度和and时是一样的,这样有利于截取
            if(condition=="like")condition=" like ";
            //对null的处理
            if(fieldtype=="N")
            {
                
                if(setvalue=="")
                    if(condition=="<>")
                        s=fieldname+" is not null";
                    else if(condition=="=")
                        s=fieldname+" is null";   
                    else
                        s=fieldname+condition+"null";
                else
                    s=fieldname+condition+lrquotation+setvalue+lrquotation;
            }
            else
            {
                if(setvalue=="")
                {
                    if(condition=="<>")
                        s="("+fieldname+" is not null and "+fieldname+"<>'')";
                    else if(condition=="=")
                        s="("+fieldname+" is null or "+fieldname+"='')";
                    else
                        s=fieldname+condition+"''";
                }
                else
                    s=fieldname+condition+lrquotation+setvalue+lrquotation;
            }
            
            htmls.push(andor+lbracket+s+rbracket);
        }
        s=htmls.join("");
        htmls.splice(0,100000000);
        htmls=null;
        if(s.length>0)s=s.substring(5);
		s=s.replace(/\( and/g,"(");
		s=s.replace(/\( or/g,"(");
		s=s.replace(/and \(\)/g,"");
		s=s.replace(/or \(\)/g,"");
		s=s.replace(/\(\)/g,"");
		if(s.substring(0,4)==" and")s=s.substring(4);
		if(s.substring(0,3)==" or")s=s.substring(3);
        return trim(s);
    }
    //设置复杂度
    this.setlevel=function(level)
    {
        this.level=level;
        var i;
        var objfield =this.container.children;
        for(i=0 ;i< objfield.length; i++)
        {
        	if(level>=4)
        	{
        	    objfield[i].all.lbracket.style.display="inline";
        	    objfield[i].all.rbracket.style.display="inline";;
        	}
        	else
        	{
        	    objfield[i].all.lbracket.style.display="none";
        	    objfield[i].all.rbracket.style.display="none";
        	    objfield[i].all.lbracket.value="";
        	    objfield[i].all.rbracket.value="";
        	}
        	
        	if(level>=3)
        	    objfield[i].all.andor.style.display="inline";
        	else
        	{
        	    objfield[i].all.andor.style.display="none";  
        	    objfield[i].all.andor.value=""; 
        	}
        	if(level>=2)
        	    objfield[i].all.condition.style.display="inline";
        	else
        	{
        	    objfield[i].all.condition.style.display="none"; 
        	    objfield[i].all.condition.value=""; 
        	}
        }

    }
    //删除某个条件
    this.deletesetter=function(i)
    {
		if(event.button!=1)return;
        if(this.maxrowno==i)return;//最后一个不能删除
        var s=this.container.id+".all.fieldno_"+i;
        var obj=eval(s);
        this.container.removeChild(obj);
    }   
    //点击最后一条时自动再追加一个空的
    this.addjudge=function(i)
    {
        if(this.maxrowno==i)this.addsetter();
    }
}
function querydropdown(contentid,fielddiv)
{
/*@cc_on
	@if (@inuser)
		try
		{
	@end
@*/
		var fieldname=fielddiv.all.fieldname.value;
		if(fieldname=="")return;
		var container=fielddiv.parentNode;
		var valueboxobj=fielddiv.all.setvalue;
		var where;
		var rs=new recordset();
		if(fielddiv.all.andor.value=="or")
			where="";
		else
			where=container.queryer.getvalue(fieldname);
		rs.type=contentid+"_querydropdown";
		rs.open(fieldname,where);
		dropdown(valueboxobj,rs,true,true)
/*@cc_on
	@if (@inuser)
		}    
    catch(ex) 
    {
        var s="querydropdown:"+(ex.message==null?ex:ex.message);
        errmsg(s,16,"意外错误!")
    }
	@end
@*/
	
}
//queryer end
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//███████████████████████████████████████████████████████████████████████
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//orderer start
/*
调用例子:
var od=new orderer();
od.create(s,OrderContent);//s是字段串
od.addsetter("创建日期","desc");
od.addsetter();
//alert(OrderContent.orderer.getvalue());
*/
function orderer()
{
    this.fields;//字段串
    this.container;//创建容器
    this.maxrowno=-1;//表明当前条件设置最大的编号,只起个序号的作用
    
    this.optionsfield;//只读,存储字段下拉框的内容
    

    this.create=function(fields,container)
    {
	    var cols;
	    var htmls=new Array();
	    var s;
	    var i;
	    
        if(container==null && this.container==null)throw("orderer.create:★必须设置在哪个容器上创建★");
        if(container==null)container=this.container;
        if(this.container==null)this.container=container;
        
        if(fields==null && this.fields==null)throw("orderer.create:★必须设置字段串★");
        if(fields==null)fields=this.fields;
        if(this.fields==null)this.fields=fields;
	    
	    cols=fields.split(",");
        htmls.push("<option value=''></option>");
        for(i=0;i<cols.length;i++)
        {
            htmls.push("<option value='"+cols[i]+"'>"+cols[i]+"</option>");
        }
        
        this.optionsfield=htmls.join("");

        htmls.splice(0,100000000);
        htmls=null;
        //把已有的字段增加上
        //this.addallfield();
        //把自己做为对象附加到容器上,将来可以通过容器访问查询对象
        container.orderer=this;
    }
    //追加所有的字段
    //可以加参数,表示不加载这些字段的设置框,但下拉框中仍然有
    this.addallfield=function()
    {
        var cols=this.fields.split(",");
        var i;
        var a;
        var have;
        for(i=0;i<cols.length;i++)
        {
            have=true;
            for(a=0;a<arguments.length;a++)
            {
                if(cols[i]==arguments[a])
                {
                    have=false;
                    break;
                }
            }
            if(have)this.addsetter(cols[i]);
        }
        //最后再加一个空的
        this.addsetter();
    }
    //删除所有的字段
    this.deleteallfield=function(addlast)
    {
        var i;
        this.container.innerHTML="";
        this.maxrowno=-1;
        //只增加一个空的
		if(addlast==null)addlast=true;
        if(addlast)this.addsetter();
    }
    //增加一个条件设置框
    //fieldname如果!=null则字段中显示这个名称
	//condition:asc或desc
    this.addsetter=function(fieldname,condition)
    {
        var htmls=new Array();
        var no=++this.maxrowno;
        var nodediv;
        var display;
		var obj;
        nodediv=document.createElement("<div id=fieldno_"+no+" rownum="+no+" name=queryitem>");
        //字段
        htmls.push("<select size='1' id=fieldname onchange=\""+this.container.id+".orderer.addjudge("+no+")\">"+this.optionsfield+"</select>");
        //升降
        htmls.push("<select size='1' id=condition><option value=''></option><option value='asc'>升↑</option><option value='desc'>降↓</option></select>");
        //删除
        //htmls.push("<input type='button' value='×' id='closequery' onclick=\""+this.container.id+".orderer.deletesetter("+no+")\" style='cursor:hand;width=18;height=18;'>");
        htmls.push("<img border=0 id='closequery' title='删除此设置' src='images/button/delsetter.gif' onmousedown=\""+this.container.id+".orderer.deletesetter("+no+")\" style='cursor:hand;'>");

        nodediv.innerHTML=htmls.join("");
        this.container.appendChild(nodediv);
        if(fieldname!=null)
        {
            obj=eval(this.container.id+".all.fieldno_"+no);
            obj.all.fieldname.value=fieldname;            
        }
        if(condition!=null)
        {
            obj=eval(this.container.id+".all.fieldno_"+no);
            obj.all.condition.value=condition;
        }
        htmls.splice(0,100000000);
        htmls=null;        
    }
    //获取设置值
    this.getvalue=function()
    {
        var objfield =this.container.children;
        var i;
        var htmls=new Array();
        var fieldname,condition;
        var s;
        for(i=0;i<objfield.length;i++)
        {
            fieldname=objfield[i].all.fieldname.value;
            condition=objfield[i].all.condition.value;
            if(fieldname!="")
            {
                htmls.push(fieldname+" "+condition);
            }
        }
        s=htmls.join();
        htmls.splice(0,100000000);
        htmls=null;
        return s;
    }    
    //删除某个条件
    this.deletesetter=function(i)
    {
        if(this.maxrowno==i)return;//最后一个不能删除
        var s=this.container.id+".all.fieldno_"+i;
        var obj=eval(s);
        this.container.removeChild(obj);
    }   
    //点击最后一条时自动再追加一个空的
    this.addjudge=function(i)
    {
        if(this.maxrowno==i)this.addsetter();
    }
    
}

//orderer end
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//███████████████████████████████████████████████████████████████████████
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//fielder start
/*
调用例子:
var fd=new fielder();
fd.create(s,FieldContent);
fd.addsetter("创建日期");
fd.addallfield("创建日期");
//alert(FieldContent.fielder.getvalue());
*/
function fielder()
{
    this.fields;//字段串
    this.container;//创建容器
    this.maxrowno=-1;//表明当前条件设置最大的编号,只起个序号的作用
    
    this.optionsfield;//只读,存储字段下拉框的内容
    

    this.create=function(fields,container)
    {
	    var cols;
	    var htmls=new Array();
	    var s;
	    var i;
	    
        if(container==null && this.container==null)throw("fielder.create:★必须设置在哪个容器上创建★");
        if(container==null)container=this.container;
        if(this.container==null)this.container=container;
        
        if(fields==null && this.fields==null)throw("fielder.create:★必须设置字段串★");
        if(fields==null)fields=this.fields;
        if(this.fields==null)this.fields=fields;
	    
	    cols=fields.split(",");
        htmls.push("<option value=''></option>");
        for(i=0;i<cols.length;i++)
        {
            htmls.push("<option value='"+cols[i]+"'>"+cols[i]+"</option>");
        }
        
        this.optionsfield=htmls.join("");

        htmls.splice(0,100000000);
        htmls=null;
        //把已有的字段增加上
        //this.addallfield();
        //把自己做为对象附加到容器上,将来可以通过容器访问查询对象
        container.fielder=this;
    }
    //追加所有的字段
    //可以加参数,表示不加载这些字段的设置框,但下拉框中仍然有
    this.addallfield=function()
    {
        var cols=this.fields.split(",");
        var i;
        var a;
        var have;
        for(i=0;i<cols.length;i++)
        {
            have=true;
            for(a=0;a<arguments.length;a++)
            {
                if(cols[i]==arguments[a])
                {
                    have=false;
                    break;
                }
            }
            if(have)this.addsetter(cols[i]);
        }
        //最后再加一个空的
        this.addsetter();
    }
    //删除所有的字段
    this.deleteallfield=function(addlast)
    {
        var i;
        this.container.innerHTML="";
        this.maxrowno=-1;
        //只增加一个空的
		if(addlast==null)addlast=true;
        if(addlast)this.addsetter();
    }
    //增加一个条件设置框
    //fieldname如果!=null则字段中显示这个名称
    this.addsetter=function(fieldname)
    {
        var htmls=new Array();
        var no=++this.maxrowno;
        var nodediv;
        var display;
		var obj;
        nodediv=document.createElement("<div id=fieldno_"+no+" rownum="+no+" name=queryitem>");
        //字段
        htmls.push("<select size='1' id=fieldname onchange=\""+this.container.id+".fielder.addjudge("+no+")\">"+this.optionsfield+"</select>");
        //删除
        //htmls.push("<input type='button' value='×' id='closequery' onclick=\""+this.container.id+".fielder.deletesetter("+no+")\" style='cursor:hand;width=18;height=18;'>");
        htmls.push("<img border=0  title='删除此设置' src='images/button/delsetter.gif' onmousedown=\""+this.container.id+".fielder.deletesetter("+no+")\" style='cursor:hand;'>");

        nodediv.innerHTML=htmls.join("");
        this.container.appendChild(nodediv);
        if(fieldname!=null)
        {
            obj=eval(this.container.id+".all.fieldno_"+no);
            obj.all.fieldname.value=fieldname;            
        }
        htmls.splice(0,100000000);
        htmls=null;        
    }
    //获取设置值
    this.getvalue=function()
    {
        var objfield =this.container.children;
        var i,j;
        var htmls=new Array();
        var fieldname;
        var s;
        for(i=0;i<objfield.length;i++)
        {
            fieldname=objfield[i].all.fieldname.value;
            if(fieldname!="")
            {
                for(j=0;j<htmls.length;j++)
                {
                    if(fieldname==htmls[j])
                    {
                        s="★字段筛选中,["+fieldname+"]出现了至少2次,字段名不能重复,请调整★";
                        alert(s);
                        throw(s);
                    }
                }
                htmls.push(fieldname);
            }
        }
        s=htmls.join();
        htmls.splice(0,100000000);
        htmls=null;
        return s;
    }      
    //删除某个条件
    this.deletesetter=function(i)
    {
        if(this.maxrowno==i)return;//最后一个不能删除
        var s=this.container.id+".all.fieldno_"+i;
        var obj=eval(s);
        this.container.removeChild(obj);
    }   
    //点击最后一条时自动再追加一个空的
    this.addjudge=function(i)
    {
        if(this.maxrowno==i)this.addsetter();
    }
    
}
//fielder end
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//███████████████████████████████████████████████████████████████████████
function getrsval(postpage,type,p1,p2,p3,p4,p5,p6)
{
	var rs=new recordset();
	var rval="";
	rs.postpage=postpage;
	rs.type=type;
	if(p6!=null)rs.open(p1,p2,p3,p4,p5,p6); 
	else if(p5!=null)rs.open(p1,p2,p3,p4,p5);
	else if(p4!=null)rs.open(p1,p2,p3,p4);
	else if(p3!=null)rs.open(p1,p2,p3);
	else if(p2!=null)rs.open(p1,p2);
	else if(p1!=null)rs.open(p1);
	else if(p1==null)rs.open("");
	if(rs.recordcount>0)rval=rs.rows(0,0);
	rs.close();
	rs=null;
	return rval;
}
//修改时设置box的初始值
function setboxvalue(content,ids)
{
    var rs=new recordset();
    rs.type=content.id+"_setboxvalue";
    rs.open(ids);
    var obj;
	if(rs.recordcount==0)throw("setboxvalue:★没有找到指定的数据★");
    for(var i=0;i<rs.columncount;i++)
    {
        //obj=document.getElementById(rs.getcolnamebyno(i));
		obj=eval(content.id+".all."+rs.getcolnamebyno(i));
        if(obj!=null)
        {
            obj.value=rs.rows(0,i);
        }
    }   
    rs.close();
    rs=null;
	var funafter;
	try{funafter=eval(content.id+"_Aftersetboxvalue");}catch(ee){}
	if(funafter!=null)
	{
		funafter();
	}
	if(!content.insert && GetQueryValue(document.location.search,"prenext")!="")
	{
		previewbutton.style.display="inline";
		nextbutton.style.display="inline";
	}
}
//编辑界面上:设置box的字段属性
function setboxattri(content)
{
	var rs=new recordset();
	rs.type=content.id+"_getboxtype";//设置box的背景色
    rs.open("");
    var obj;
    for(var i=0;i<rs.columncount;i++)
    {
        //obj=document.getElementById(rs.getcolnamebyno(i));
		obj=eval(content.id+".all."+rs.getcolnamebyno(i));
        if(obj!=null)
        {
            obj.fieldtype=rs.rows(0,i);//CN
            obj.fieldnullable=rs.rows(1,i);//YN
            obj.fieldlength=rs.rows(2,i);//50
            if(obj.fieldnullable=="N")
                obj.style.backgroundColor="#FFE0C0";
        }
    }
    rs.close();
    rs=null;
}
//███████████████████████████████████████████████████████████████████████
//保存前的合法性检测,返回""表示通过,返回其它字符串表示错误提示
//对文本框中要保存的数据进行合法性检测
//检测的项目包括:
//1.非空检测
//2.类型检测:字符,数字,等
//3.长度检测
function checkdata(content)
{
	var obj =content.all;
	var i;
	var have;
	var fieldname,setvalue;
	var errs="";
    for(i=0 ;i<obj.length; i++)
    {
		have=false;
        if(obj[i].tagName=="INPUT")
		{
			if(obj[i].type.toUpperCase()=="TEXT")
			{
				have=true;
			}
			if(obj[i].type.toUpperCase()=="PASSWORD")
			{
				have=true;
			}
		}
		if(obj[i].tagName=="TEXTAREA")
		{
			have=true;
		}
		if(have)
		{
			if(obj[i].fieldbox!=null)
			{
				fieldname=obj[i].id;
				setvalue=obj[i].value;
				//obj[i].fieldtype obj[i].fieldnullable obj[i].fieldlength
				if(obj[i].fieldnullable=="N")
				{
				    if(setvalue=="" && fieldname.toUpperCase()!="IDS")//新增时主键可能不写内容
				    {
				        setfocus(obj[i]);
				        errs="★字段["+fieldname+"]必须填写,不得为空★";
				        return errs;
				    }
				}
				if(obj[i].fieldtype=="C")
				{
				    if(setvalue.length>obj[i].fieldlength)
				    {
				        setfocus(obj[i]);
				        errs="★字段["+fieldname+"]超长\r\n本字段支持最大长度为"+obj[i].fieldlength+"\r\n而您填写的内容长度为"+setvalue.length+"★";
				        return errs;
				    }
				}
				if(obj[i].fieldtype=="N")
				{
					if(setvalue!="")
				    if(!IsNumber(setvalue))
				    {
				        setfocus(obj[i]);
				        errs="★字段["+fieldname+"]只能填写数字★";
				        return errs;
				    }
				}
			}
		}
    }    
    return "";
}
//███████████████████████████████████████████████████████████████████████
//needclear:只对新增数据有效,修改时本参数无意义.
//          默认为true,当新增的后会自动清空界面,等待新增下一条内容
//          false时,新增后转入本条记录的修改状态
function EditSave(content,needclear)
{
/*@cc_on
	@if (@inuser)
		try
		{
	@end
@*/
		var saveobj=document.getElementById("savebutton");
		if(saveobj==null)
			return false;
		else
		{
			if(saveobj.style.display=="none")
				return false;
		}
        var oldinsert=content.insert;//因为在savedata的过程中insert的状态可能变化
        var refresh=GetQueryValue(document.location.search,'refresh');
        var ids;
        var first;
        var funbefore,funafter;
        
        try{funbefore=eval(content.id+"_BeforeSave");}catch(ee){}
        if(funbefore!=null)
        {
            if(!funbefore())return;
        }
        ids=savedata(content,needclear);
        try{funafter=eval(content.id+"_AfterSave");}catch(ee){}
        if(funafter!=null)
        {
            funafter();
        }
		//新增后处理
		if(content.insert)
		{
			if(!needclear)//新增后不需清空,则会自动转入修改状态
			{
				setboxvalue(content,ids);
				content.insert=false;
				content.all.iautitle.innerHTML="_修改";
				content.all.iautitle.style.cursor="hand";
				content.all.iautitle.onclick=new Function("changetoinsert("+content.id+")");
			}
		}
        if(refresh!="")//需要进行底部刷新
        {
			if(firstneedrefreshgrid)
			{
				if(content.refreshed==null && oldinsert)
				{
					first=true;
					content.refreshed=true;
				}
				else
					first=false;
            }
			else
				first=false;
            eval("opener."+refresh+"("+oldinsert+","+first+","+"'"+ids+"')");
            
        }
        if(oldinsert)
        {
            if(needclear)changetoinsert(EditContent);
            if(CTiShiSet.checked)alert("√新增数据成功!");
        }
        else
        {
            delattachlink(content);
            if(CTiShiSet.checked)alert("√数据修改成功!");
        }
        setTimeout(setdefaultfocus,1,content);
		return true;
/*@cc_on
	@if (@inuser)
		}    
    catch(ex) 
    {
        var s="EditSave:"+(ex.message==null?ex:ex.message);
        errmsg(s,16,"×意外错误×!")
    }
	@end
@*/    
}
//编辑界面上保存数据
//content:容器
//成功返回ids,失败则爆发错误
function savedata(content)
{
	var backids="";
	var errs=checkdata(content);
	if(errs!="")
	{
		throw("savedata:"+errs);
	}
	var obj =content.all;
	var i;
	var have;
	var fieldname,setvalue;
	var pris=new Array();
	var s,iau;
	for(i=0 ;i<obj.length; i++)
	{
		have=false;
		if(obj[i].tagName=="INPUT")
		{
			if(obj[i].type.toUpperCase()=="TEXT")
			{
				have=true;
			}
			if(obj[i].type.toUpperCase()=="PASSWORD")
			{
				have=true;
			}
		}
		if(obj[i].tagName=="TEXTAREA")
		{
			have=true;
		}
		if(have)
		{
			if(obj[i].fieldbox!=null)
			{
				fieldname=obj[i].id;
				setvalue=obj[i].value;
				//obj[i].fieldtype obj[i].fieldnullable obj[i].fieldlength
				s=setvalue.replace(/\"/g,"\\\"");
				s=s.replace(/\r\n/g,"\\r\\n")
				pris.push("\"@@"+fieldname+"="+s+"\"");
				if(obj[i].parentcheck!=null)//检测这个值在指定的表中是否存在,一般下拉值要求在原始表中必须存在
				{
					pris.push("\"@@parentcheck"+i+"="+obj[i].parentcheck+"\"");
				}
			}
		}
	}
	var rs=new recordset();
	rs.type=content.id+"_savedata";
	if(content.insert)
		iau="insert";
	else
		iau="update";
	//附件删除start--------------------
	var fjids=new Array();
	if(eval(content.id+".all.fjcontainer")!=null)
	{
		if(content.all.fjcontainer.innerHTML!="")
		{
			for(i=0;i<content.all.fjchceck.length;i++)
			{
				if(content.all.fjchceck[i].checked)
				{
					fjids.push(content.all.fjchceck[i].fjid);
				}
			}
			if(content.all.fjchceck.checked)//当只有一个附件的时候,上面的数组会失效
			{
				fjids.push(content.all.fjchceck.fjid);
			}
		}
	}	
	//附件删除end----------------------
	eval("rs.open('"+fjids.join(",")+"','','"+iau+"',"+pris.join(",")+")");//rs.open('','',"insert","@@姓名=邢志云","@@性别=男");前2个字段是备用的
	backids=rs.rows(0,0);
	rs.close();
	rs=null;
	if(backids=="")throw("savedata:★意外错误,没有数据发生改变,本次数据更新无效★");
	return backids;
}
function dropdowndistinct(content,boxobj,forcerenew)
{
	try
	{
		var rs=new recordset();
		rs.type=content.id+"_getdistinct";
		if(forcerenew || boxobj.drophtml==null)
		{
			rs.open(boxobj.id);
		}
		dropdown(boxobj,rs,true,forcerenew)
	}
    catch(ex) 
    {
        var s="dropdowndistinct:"+(ex.message==null?ex:ex.message);
        errmsg(s,16,"意外错误!")
    }
}
//添加用户自定义字段文本框
function adduserfield(content,fieldwidth)
{
	var userfieldcontent=eval(content.id+".all.userfield");
	if(userfieldcontent!=null)
	{
		var obj =content.all;
		var i;
		var have;
		var htmls=new Array();
		var alreadyfields="";
		for(i=0 ;i<obj.length; i++)//对于已经加入到界面上的自定义字段不再重新增加
		{
			have=false;
			if(obj[i].tagName=="INPUT")
			{
				if(obj[i].type.toUpperCase()=="TEXT")
				{
					have=true;
				}
				if(obj[i].type.toUpperCase()=="PASSWORD")
				{
					have=true;
				}
			}
			if(obj[i].tagName=="TEXTAREA")
			{
				have=true;
			}
			if(have)
			{
				if(obj[i].fieldbox!=null)
				{
					if(obj[i].id.substring(0,1)=="_")htmls.push(obj[i].id);
				}
			}
		}
		alreadyfields=htmls.join(",")+",";
		htmls.splice(0,100000);
		//----------------------------------------------------------------
		var fields=getrsval(null,content.id+"_allcols");
		var field=fields.split(",");
		var i;
		var s;
		htmls.push("<table border='1' width='100%' bordercolorlight='#0000FF' cellspacing='0' cellpadding='0' bordercolordark='#FFFFFF'>");
		for(i=0;i<field.length;i++)
		{
			if(field[i].substring(0,1)=="_")
			{
				s=field[i]+",";
				if(alreadyfields.indexOf(s)==-1)
				{
					htmls.push("<tr height=24>");
					htmls.push("	<td width='"+fieldwidth+"' align='right'  style='color:blue;'>"+field[i]+"<input type='checkbox' onclick='"+field[i]+".keeplast=this.checked;'   tabindex=999 title='新增时持续上一次内容'>:</td>");
					htmls.push("	<td><input id='"+field[i]+"' fieldbox type='text' style='width:90%;border: 1px solid #DCF3F0;'  />");
					htmls.push("<img border='0' src='images/button/dropdown.jpg' style='cursor:hand;border: 1px solid #000080' onclick='dropdowndistinct("+content.id+","+content.id+".all."+field[i]+",true)'>");
					htmls.push("</td>");
					htmls.push("</tr>");
				}
			}
		}
		htmls.push("</table>");
		userfieldcontent.innerHTML=htmls.join("");
		htmls.splice(0,100000);
	}
}
//转为新增状态时执行本过程
function changetoinsert(content)
{
    content.insert=true;
    clearboxvalue(content);
    
    IDS.value=getrsval(null,"nextid");
    
    if(content.all.fjcontainer!=null)content.all.fjcontainer.innerHTML="";
    content.all.iautitle.innerHTML="_新增";
    content.all.iautitle.style.cursor="normal";
    content.all.iautitle.onclick=null;
	previewbutton.style.display="none";
	nextbutton.style.display="none";
    setTimeout(setdefaultfocus,1,content);
	var funafter;
	try{funafter=eval(content.id+"_Afterchangetoinsert");}catch(ee){}
	if(funafter!=null)
	{
		funafter();
	}    
}
function clearboxvalue(content)
{
    var obj =content.all;
    var i;
    var have;
    for(i=0 ;i<obj.length; i++)
    {
	    have=false;
        if(obj[i].tagName=="INPUT")
	    {
		    if(obj[i].type.toUpperCase()=="TEXT")
		    {
			    have=true;
		    }
		    if(obj[i].type.toUpperCase()=="PASSWORD")
		    {
			    have=true;
		    }
	    }
	    if(obj[i].tagName=="TEXTAREA")
	    {
		    have=true;
	    }
	    if(have)
	    {
		    if(obj[i].fieldbox!=null)
		    {
                if(obj[i].keeplast)
                    ;
                else
					obj[i].value="";
		    }
	    }
    }    
	var funafter;
	try{funafter=eval(content.id+"_Afterclearboxvalue");}catch(ee){}
	if(funafter!=null)
	{
		funafter();
	}
}
function EditDelete(tgrid)
{
/*@cc_on
	@if (@inuser)
		try
		{
	@end
@*/

        //wait("操作进行中,请稍后...");
        var checks=tgrid.checkedkeys()
        var ids;
        if(checks=="")
        {
            alert("请先选中要删除数据对应行的复选框");
            return;
        }
        else
        {
            ids=checks.split(",");
            var v=confirm("确定删除选定的["+ids.length+"]条记录吗?");
            if(!v)return;
        }
        var s=getrsval(null,tgrid.id+"_deleterecord",checks);
        if(s=="1")
        {
            for(var i=0;i<ids.length;i++)
                tgrid.deleterowbycheckid(ids[i]);
            alert("√删除成功.");
        }
        else
            throw("★未说明的意外错误★");
        //wait("");
/*@cc_on
	@if (@inuser)
		}    
    catch(ex) 
    {
        var s="EditDelete:"+(ex.message==null?ex:ex.message);
        errmsg(s,16,"意外错误!")
    }
	@end
@*/

}
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
function getpinpoint(oNode,pNode){

 if(!pNode)
 var pNode = document.body

 var oCurrentNode=oNode;
 var iLeft=0;
 var iTop=0;
 while((oCurrentNode)&&(oCurrentNode!=pNode)){
 iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;
 iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;
 oCurrentNode=oCurrentNode.offsetParent;
}
 if(pNode == document.body){

 if(document.documentElement.scrollTop)
 iTop+=document.documentElement.scrollTop;
 if(document.documentElement.scrollLeft)
 iLeft+=document.documentElement.scrollLeft;
}
 return new Array(iLeft,iTop);
}
function dropdown(boxobj,rs,closers,forcerenew,listclick,listwidth,listheight)//DIV
{	
	//alert('d');
	var boxobjval=boxobj.value;
	if(boxobj.drophtml==null)boxobj.drophtml="";

	var pinpoint=getpinpoint(boxobj);
	//mc.left=pinpoint[0];
	//mc.top=pinpoint[1];
	

	var lists;
	var s1,s2;
	var colc;
	var defaultselected="";
	var htmls=new Array();
	if(listwidth==null)listwidth=boxobj.clientWidth+22;
	if(listheight==null)listheight=150;

	if(boxobj.drophtml.length==0 || forcerenew)
	{
		colc=rs.columncount;
		
		s1=boxobj.id;
		if(boxobj.parentNode.id!="")
		{
			s1=boxobj.parentNode.id+".all."+s1;
		}
		if(boxobj.parentNode.parentNode.id!="")
		{
			s1=boxobj.parentNode.parentNode.id+".all."+s1;
		}
		if(boxobj.parentNode.parentNode.parentNode.id!="")
		{
			s1=boxobj.parentNode.parentNode.parentNode.id+".all."+s1;
		}
		//alert(s1);
		htmls.push("<select size='15' name='DropListsobj' style='border-style: solid; border-width: 1px;width="+listwidth+"; height:"+listheight+"' ");
		htmls.push("onclick=\"document.all."+s1+".value=this.value;document.body.removeChild(document.all.dropdowndiv);");//parent.document.focus();
		if(listclick!=null)
			htmls.push(listclick+"(this.value);");
		htmls.push("\">");
		//lists=lists+"<option value='&lt;ff&gt;'>&lt;ff&gt;</option><option value='bb'>bb</option>";
		htmls.push("<option value=\""+""+"\" >"+""+"</option>");
		for(var r=0;r<rs.recordcount;r++)
		{
			
			s1=(rs.rows(r,0)+"").replace(/</g,"&lt;");//特殊字符替换:  <变成&lt;  
			if(colc>1)
			{
				s2=(rs.rows(r,1)+"").replace(/</g,"&lt;");
			}
			else
			{
				s2=s1;
			}
			if(boxobjval==rs.rows(r,0))
				defaultselected="";//"selected";
			else
				defaultselected="";
			
			htmls.push("<option value=\""+s1.replace(/"/g,"&quot;")+"\" "+defaultselected+">"+s2+"</option>");
		}
		htmls.push("</select>");
		lists=htmls.join("");
		htmls.splice(0,100000000);
		if(closers){rs.close();rs=null;}
	}
	else
	{
		lists=boxobj.drophtml;
	}


	//oPopBody.innerHTML=lists;
	boxobj.drophtml=lists;
	//alert(boxobj.drophtml);
	//oPopup.show(mc.left+2,mc.top+boxobj.clientHeight+4,listwidth,listheight, document.body);
	
	var divobj=document.getElementById("dropdowndiv");
	if(divobj!=null)document.body.removeChild(divobj);
	divobj=document.createElement("<div id='dropdowndiv' style='position: absolute; z-index:999;left: "+(pinpoint[0]+2)+"; top: "+(pinpoint[1]+boxobj.clientHeight+4)+"; width: "+listwidth+"; height: "+listheight+";'>");
	document.body.appendChild(divobj);
	divobj.innerHTML=lists;
	DropListsobj.focus();
	DropListsobj.onblur=function(){document.body.removeChild(document.all.dropdowndiv);}
}
function dropdown_pop(boxobj,rs,closers,forcerenew,listclick)  //PopUp
{
	//alert('d');
	function MCT()
	{
		this.top=-1;
		this.left=-1;
	}

	var boxobjval=boxobj.value;
	if(boxobj.drophtml==null)boxobj.drophtml="";

	var parObj = boxobj;
	var mc=new MCT();
	mc.top =  0;
	mc.left = 0;
	var T=true;
	while(parObj && T){
		//alert(parObj.tagName);
		if(parObj.tagName=="FRAME" || parObj.tagName=="IFRAME")
		{
			T=false;
			break;
		}

		mc.left += parObj.offsetLeft;
		mc.top += parObj.offsetTop;

		if (!parObj.offsetParent)
		{
			mc.top -=  parObj.ownerDocument.body.scrollTop;
			mc.left -= parObj.ownerDocument.body.scrollLeft;
		}
		if(!parObj.offsetParent && parObj.ownerDocument.parentWindow.frameElement)
			parObj = parObj.ownerDocument.parentWindow.frameElement;
		else
			parObj = parObj.offsetParent;
	}
	
	var oPopup= window.createPopup();
	var oPopDoc = oPopup.document;
	var oPopBody = oPopDoc.body;

	var listwidth=boxobj.clientWidth+20;
	var listheight=201;
	var lists;
	var s1,s2;
	var colc;
	var defaultselected="";
	var htmls=new Array();
	if(boxobj.drophtml.length==0 || forcerenew)
	{
		colc=rs.columncount;
		
		s1=boxobj.id;
		if(boxobj.parentNode.id!="")
		{
			s1=boxobj.parentNode.id+".all."+s1;
		}
		if(boxobj.parentNode.parentNode.id!="")
		{
			s1=boxobj.parentNode.parentNode.id+".all."+s1;
		}
		if(boxobj.parentNode.parentNode.parentNode.id!="")
		{
			s1=boxobj.parentNode.parentNode.parentNode.id+".all."+s1;
		}
		//alert(s1);
		htmls.push("<select size='15' name='D1' style='border-style: solid; border-width: 1px;width="+listwidth+"; height:201' ");
		htmls.push("onclick=\"parent.document.all."+s1+".value=this.value;parent.document.focus();");
		if(listclick!=null)
			htmls.push("parent."+listclick+"(this.value);");
		htmls.push("\">");
		//lists=lists+"<option value='&lt;ff&gt;'>&lt;ff&gt;</option><option value='bb'>bb</option>";
		htmls.push("<option value=\""+""+"\" >"+""+"</option>");
		for(var r=0;r<rs.recordcount;r++)
		{
			
			s1=(rs.rows(r,0)+"").replace(/</g,"&lt;");//特殊字符替换:  <变成&lt;  
			if(colc>1)
			{
				s2=(rs.rows(r,1)+"").replace(/</g,"&lt;");
			}
			else
			{
				s2=s1;
			}
			if(boxobjval==rs.rows(r,0))
				defaultselected="";//"selected";
			else
				defaultselected="";
			
			htmls.push("<option value=\""+s1.replace(/"/g,"&quot;")+"\" "+defaultselected+">"+s2+"</option>");
		}
		htmls.push("</select>");
		lists=htmls.join("");
		htmls.splice(0,100000000);
		if(closers){rs.close();rs=null;}
	}
	else
	{
		lists=boxobj.drophtml;
	}
	oPopBody.innerHTML=lists;
	boxobj.drophtml=lists;
	//alert(boxobj.drophtml);
	oPopup.show(mc.left+2,mc.top+boxobj.clientHeight+5,listwidth,listheight, document.body);
}
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
function addattach(contentid,attachID,showname,attachname,bytes,url,showdel)
{
	//fjcontainer.innerHTML起初是"",什么也没有
	var s="";
	var bytess;
	var HTMLs=new Array();
	var content=document.getElementById(contentid);
	bytes=MyRound(MyVal(bytes)/1000000,4);
	
	bytess=bytes+"M";
	if(attachname==null || attachname.lengt==0) return;
	if(content.all.fjcontainer.num==0)
		content.all.fjcontainer.innerHTML="<a style='color:black'>相关附件:</a><br/>";			
	content.all.fjcontainer.num++;
	s=content.all.fjcontainer.num+"";
	if(s.length==1)s="0"+s;
	HTMLs.push(content.all.fjcontainer.innerHTML);
	HTMLs.push("<span style='display:inline' id='a"+attachID+"'>");
	if(showdel)HTMLs.push("<input type='checkbox' name='fjchceck' fjid='"+attachID+"' title='勾中此框,再保存可以删除对应attach'>");
	HTMLs.push(s);
	HTMLs.push(":<a href=\""+url+"\" target='_blank' style='color:blue'>"+showname+"</a>&nbsp;&nbsp;&nbsp;("+bytess+")");
	HTMLs.push("</div>");
	content.all.fjcontainer.innerHTML=HTMLs.join("");
}
function delattachlink(content)
{
	var obj;
	if(content.all.fjcontainer==null) return;
	if(content.all.fjcontainer.innerHTML!="")
	{
		for(var i=0;i<content.all.fjchceck.length;i++)
		{
			if(content.all.fjchceck[i].checked)
			{
				content.all.fjchceck[i].checked=false;
				obj=document.getElementById("a"+fjchceck[i].fjid);
				obj.style.display="none";
				content.all.fjcontainer.num--;
			}
		}
		if(content.all.fjchceck.checked)//当只有一个附件的时候,上面的数组会失效
		{
			content.all.fjchceck.checked=false;
			obj=document.getElementById("a"+fjchceck.fjid);
			obj.style.display="none";
			content.all.fjcontainer.num--;
		}	
		if(content.all.fjcontainer.num==0)content.all.fjcontainer.innerHTML="";
	}
}
function refreshattachlink(content,showdel) //showdel==true的时候,显示删除用的复选框
{
	var IDS=content.all.IDS.value;
	var rs=new recordset;
	if(content.all.fjcontainer==null) return;
	content.all.fjcontainer.innerHTML="";
	content.all.fjcontainer.num=0;
	rs.type=content.id+"_getattach";
	rs.open(IDS);
	if(rs.recordcount>0)
	{	
		for(var r=0;r<rs.recordcount;r++)
		{
			s=rs.rows(r,"附件名称");
			addattach(content.id,rs.rows(r,"IDS"),rs.rows(r,"原始名称"),s,rs.rows(r,"字节数"),"fileup\\"+s,showdel);
		}
	}
	rs.close();
	rs=null;
}
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
function addfield(fieldname,type)
{
/*@cc_on
	@if (@inuser)
		try
		{
	@end
@*/   
    var rval=getrsval(null,"addfield",fieldname,type);
    return rval;//OK表示成功
/*@cc_on
	@if (@inuser)
		}    
    catch(ex) 
    {
        var s="*:"+(ex.message==null?ex:ex.message);
        errmsg(s,16,"意外错误!")
    }
	@end
@*/ 
}
function deletefield(fieldname)
{
/*@cc_on
	@if (@inuser)
		try
		{
	@end
@*/   
    var rval=getrsval(null,"deletefield",fieldname);
    return rval;//OK表示成功
/*@cc_on
	@if (@inuser)
		}    
    catch(ex) 
    {
        var s="*:"+(ex.message==null?ex:ex.message);
        errmsg(s,16,"意外错误!")
    }
	@end
@*/ 
}
function getallcols()
{
    var rs=new recordset();
    rs.type="SearchContent_allcols";
    rs.open("");
    return rs;
}
function setheadordershow()
{
    var i;
    var heada;
    var fieldname,condition;
    var n=0;
    var needxh=false;
	if(OrderContent.oldorder.length>1)needxh=true;
    for(i=0;i<OrderContent.oldorder.length;i++)
    {
        fieldname=OrderContent.oldorder[i].fieldname;
        condition=OrderContent.oldorder[i].condition;
        if(fieldname!="")
        {
            heada=document.getElementById("QueryTable_c"+fieldname);
			n++;
            if(heada!=null)
            {
            	if(condition=="" || condition=="asc")
            	{
	            	heada.condition="asc";
	            	heada.innerHTML=heada.value+"<font color=red>↑"+(needxh?"<sup>"+n+"</sup>":"")+"</font>";
            	}
            	else
            	{
            		heada.condition="desc";
	            	heada.innerHTML=heada.value+"<font color=red>↓"+(needxh?"<sup>"+n+"</sup>":"")+"</font>";
            	}
            }
        }
    }
}
//cover_start----------------------------
cover.idcount = 0;
function cover()
{//作者:山西太原的邢志云,mail: ty258@163.com
    this.have = false;
    this.oDiv;
    this.create = function(coverid)
    {
        if (!this.have)
        {
            if (coverid == null) coverid = "xzycover" + (cover.idcount++);
            this.oDiv = document.createElement("<DIV id='" + coverid + "' style='DISPLAY: inline; Z-INDEX: " + (zindexcount++) + "; FILTER: alpha(opacity=60); POSITION: absolute; LEFT: 0px; TOP: 0px; WIDTH: 100%; HEIGHT: 100%; BACKGROUND-COLOR: #555555; '>");
            document.body.insertBefore(this.oDiv, document.body.firstChild);
            this.oDiv.style.width = "3000px";
            this.oDiv.style.height = document.documentElement.scrollHeight;
            this.oDiv.innerHTML = "<iframe style='width:100%;height:100%;FILTER: alpha(opacity=0);'></iframe>";
            this.have = true;
            return coverid;
        }
    }
    this.remove = function()
    {
        if (this.have)
        {
            if (this.oDiv != null)
            {
                document.body.removeChild(this.oDiv);
            }
            this.have = false;
        }
    }
}
//cover_end----------------------------

