﻿var insertclear=true;//新增后是否需要进行界面清空
var firstneedrefreshgrid=true;//第一次新增时需要清空底部表格后再新增
//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);
}
//url中有些是特殊字符,当向服务器传递这些值的时候,需要替换,否则服务器会得到错误的值
function urlspecialreplace(url)
{
	var rval=url;
	rval=rval.replace(/\%/g,"%25");
	rval=rval.replace(/\+/g,"%2B");
	rval=rval.replace(/\ /g,"%20");
	rval=rval.replace(/\//g,"%2F");
	rval=rval.replace(/\?/g,"%3F");
	rval=rval.replace(/\#/g,"%23");
	rval=rval.replace(/\&/g,"%26");
	rval=rval.replace(/\=/g,"%3D");
	return rval;
}
//███████████████████████████████████████████████████████████████████████
//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,"");
	}
}

//███████████████████████████████████████████████████████████████████████
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;
	}
}
//███████████████████████████████████████████████████████████████████████
//四舍五入,//最多支持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));
}

//███████████████████████████████████████████████████████████████████████
//返回重复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+"]的节点★");
	}
}
//███████████████████████████████████████████████████████████████████████
String.prototype.lenB   =   function()//调用时需要加括号
{
	return   this.replace(/[^\x00-\xff]/g,"**").length;
} 
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.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=new ActiveXObject("Msxml2.DOMDocument");
		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;

		if(this.postpage==null)
		{
			//alert(location.pathname+location.search);
			//alert(GetPageName()+location.search);
		    this.postpage=GetPageName();
		}
		//------------------------------------
		//var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		var oXmlHttp;
		if(window.ActiveXObject)
		{
			try
			{
				oXmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(ex)
			{
				try
				{
					oXmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(ex)
				{
					var s="recordset创建XMLHTTP失败:"+(ex.message==null?ex:ex.message);
					errmsg(s,16,"意外错误!")
				}
			}
		}
		else if(window.XMLHttpRequest)
		{
			oXmlHttp=new XMLHttpRequest();
		}
		//-----------------------------------
		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("Msxml2.DOMDocument");
		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)];
		}
	}
}

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.shownum=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();
        
        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)//创建数据
        {

            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='选中表格所有行'>全选"); 
            if(this.shownum)
				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

	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="";
				
				
				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){}
	}
	//找到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);
		
        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

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
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//███████████████████████████████████████████████████████████████████████

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();
    }
    
}

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)
{
	var rs=new recordset();
	var rval="";
	rs.postpage=postpage;
	rs.type=type;
	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;
}

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
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 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>";
            	}
            }
        }
    }
}




