﻿//***************************************************************************************
//	7WX API set 1.0 for Action Orient Programming (Leebai 200207) 
//  Copyright 2002-2006 XJAWA Corp.  libq@xjawa.com.cn
//***************************************************************************************

//			7WX Public Function
//============================================
//=======1.表格api==============================
//
//用二维数组充填表格 
function XfillTableWithArray(tab,arr,rowCallBack){
	_XparseAndSaveTableInfo(tab);

	if(window.HTMLElement)
		tab = document.getElementById(tab.id);

	if(typeof(arr)=="undefined"){
		alert("开发者：XfillTableWithArray()指定的数据集不存在。");
		return;
	}
	if(typeof(arr)=="string"){//将{arrName_column}简化成{column}
		alert("开发者：XfillTableWithArray()不再支持用字符串指定数据集");
	}
	if(arr.length > 5000){alert("开发者：返回结果集行数太多,建议采用分页机制。");return;}
	
	tab.outerHTML = _XbindTableWithArray(tab.id,arr,rowCallBack);
}
//用两个二维数组（二者间为父子表关系）充填表格 

function XfillTableWith2Array(tab,arr,rowCallBack,tabX,arrX,rowCallBackX){
	if(typeof(tabX)=="string"){//历史问题
		tabX = document.getElementById(tabX);
	}

	_XparseAndSaveNestTableInfo(tab,tabX);

	if(window.HTMLElement){
		tab = document.getElementById(tab.id);
		tabX = document.getElementById(tabX.id);
	}

	if(arr.length > 5000){alert("开发者：返回结果集行数太多,建议采用分页机制。");return;}

	var tabHTML = _XbindTableWithArray(tab.id,arr,rowCallBack);

	for(var i=0;i<arr.length;i++){
		var subItems = new Array();
		for(var j=0;j<arrX.length;j++)
			if(arrX[j][0]==arr[i][0]) subItems[subItems.length]=arrX[j];
		
		var tabXHTML = _XbindTableWithArray(tab.getAttribute("tabXid"),subItems,rowCallBack);
		tabHTML = tabHTML.replace("(xSUBTABLEx)",tabXHTML);
	}

	tab.outerHTML = tabHTML;
}

function XresetTable(tab){
	var tid = (typeof(tab)=="string")? tab :tab.id;
	systemValue7WX[tid + ".XtableSource"]=null;
}

//取表格选中行的对象id拼成的URL格式的参数,用于CallServerGet
function XgetTableSelectedLinesURL(tab,varName){
	var sels = XgetTableSelectedLines(tab);
	var selsURL="";
	for(var i=0;i<sels.length;i++)
		selsURL += "&" + varName + "=" + sels[i];

	return selsURL;
}

//取表格选中行的id及helpvalue拼成的URL格式的参数,用于CallServerGet
function XgetTableSelectedLinesURLX(tab,varName,varName0){
	var sels = XgetTableSelectedLinesX(tab);
	var selsURL="";
	for(var i=0;i<sels.length;i++)
		selsURL += "&" + varName + "=" + sels[i][0]+"&" + varName0 + "=" + sels[i][1];

	return selsURL;
}

//取表格选中行的对象id的数组,用于前端自己做处理。
function XgetTableSelectedLines(tab){
	if(window.HTMLElement)
		tab = document.getElementById(tab.id);
	var retIDs = new Array();
	if(_XcheckTableSelectable(tab)){
		var tplLine = systemValue7WX[tab.id + ".XtplLine"];
		for(i=tplLine;i<tab.rows.length;i++)
			if(tab.rows.item(i).cells.item(0).children[0].checked)
				retIDs[retIDs.length] = tab.rows.item(i).cells.item(0).children[0].getAttribute("XobjectID");
	}
	return retIDs;
}

//取表格选中行的对象id的数组(可附加id外的其他值XhelpValue),用于前端自己做处理。
function XgetTableSelectedLinesX(tab){
	if(window.HTMLElement)
		tab = document.getElementById(tab.id);
	var retIDs = new Array();
	if(_XcheckTableSelectable(tab)){
		var tplLine = systemValue7WX[tab.id + ".XtplLine"];
		for(i=tplLine;i<tab.rows.length;i++)
			if(tab.rows.item(i).cells.item(0).children[0].checked){
				var tdo=tab.rows.item(i).cells.item(0).children[0];
				retIDs[retIDs.length] = new Array(tdo.getAttribute("XobjectID"),tdo.getAttribute("XhelpValue"));
			}
	}
	return retIDs;
}

//删除表格中的选中行
function XdelTableSelectedLines(tab){
	if(window.HTMLElement)
		tab = document.getElementById(tab.id);
	if(_XcheckTableSelectable(tab)){
		var tplLine = systemValue7WX[tab.id + ".XtplLine"];
		for(i=tab.rows.length-1; i>=tplLine;i--)
			if(tab.rows.item(i).cells.item(0).children[0].checked)
				tab.deleteRow(i);
	}
}

//全选/全不选表格中的行
function XsetAllTableLinesChecked(tab,isCheck){
	if(window.HTMLElement)
		tab = document.getElementById(tab.id);
	if(_XcheckTableSelectable(tab)){
		var tplLine = systemValue7WX[tab.id + ".XtplLine"];
		for(i=tab.rows.length-1; i>=tplLine;i--)
			tab.rows.item(i).cells.item(0).children[0].checked=isCheck;
	}
}

//=====table page control  ==============================
function XinsertPageControl(pagesize){
	if(typeof(pagesize)=="undefined")document.write(XpageControlHtml);
	else document.write(XpageControlHtml.replace("value=30","value=" + pagesize));
}
function XinsertPageControl1(pagesize){
	var XpC = XpageControlHtml;
	XpC = XpC.replace("XtotalLines","XtotalLines1");
	XpC = XpC.replace("XtotalPages","XtotalPages1");
	XpC = XpC.replace("XstartLine","XstartLine1");
	XpC = XpC.replace("XpageLines","XpageLines1");
	XpC = XpC.replace("XprePage","XprePage1");
	XpC = XpC.replace("XnextPage","XnextPage1");
	XpC = XpC.replace("XtoPage","XtoPage1");
	if(typeof(pagesize)=="undefined")document.write(XpC);
	else document.write(XpC.replace("value=30","value=" + pagesize));
}

//设置表格翻页时访问的程序和动作
function XsetAppAndAction(app,action){
	if(app.indexOf("/servlet/")<0)
		app = systemPath.servletRoot + "/servlet/"+app;
	XappName = app;
	XactionName = action;
}

//设置查询参数，但不执行数据查询
function XsetBaseQuery(query){XbaseQuery = query;}//030123

//设置表格翻页时的基本查询URL参数或表单名,并对服务器做首次查询访问
//fromFirstPage=true时当前页码重置为首页
function XnewQuery(query,fromFirstPage){
	if(typeof(query)=="string")
		XbaseQuery = query;
	else
		alert("开发者：XnewQuery()需要一个串型的参数,可以是URL参数,也可以是表单名");

	if(fromFirstPage)XnextStartLine = 0;
	_XCallServer();

}

//应用名、方法名、查询条件都不变时从后台刷新表格
function Xrefresh(){ _Xrefresh(); }

//请求下载当前列表页数据对应的Excel文件，当前页或全部。labels：标题列表；labeledColumnOnly：只导出指定标题的列
function XgetExcel(fileName,labels,labeledColumnOnly,allPages){ 
	var forExcel = "&_X_toExcel=yes";
	if(typeof(fileName)!="undefined"){
		forExcel += "&_X_toExcel_FileName="+fileName;
	}
	if(typeof("allPages")=="undefined" || allPages==true)
		forExcel += "&_X_toExcel_all=yes";
	else
		forExcel += "&_X_toExcel_all=no";

	if(typeof(labels)!="undefined"){
		if(labels.indexOf("l_")!=0){
			alert("XgetExcel(fileName,labels)的第二个参数labels的格式应为\"l_列名A=列中文名A&l_列名B=列中文名B......\"");
			return;
		}
		forExcel += "&" + labels;
	}
	if(typeof(labeledColumnOnly)!="undefined" && labeledColumnOnly==true){
		forExcel += "&_X_toExcel_labeledColumnOnly=yes";
	}

	_XCallServer(forExcel);
}


//表格翻页时数据返回后重置翻页控制面板
function XresetPageCtl(totalLines){
	XstartLine.innerHTML = XnextStartLine+1;
	XtoPage.value = XnextStartLine/XpageLines.value + 1;//061206
	XtotalLines.innerHTML = totalLines;
	XtotalPages.innerHTML = ((totalLines-totalLines%XpageLines.value)/XpageLines.value) + (totalLines%XpageLines.value==0 ? 0 : 1);//061206
	XtotalL = totalLines;
	XprePage.src="/commonjs/sysimg/"+((XnextStartLine <= 0)?"null":"pageup")+".gif";
	XnextPage.src="/commonjs/sysimg/"+((totalLines - XnextStartLine <= parseInt(XpageLines.value))?"null":"pagedown")+".gif";

	if(typeof(XtotalLines1)!="undefined"){
		XstartLine1.innerHTML = XnextStartLine+1;
		XtoPage1.value = XtoPage.value;//061206
		XtotalLines1.innerHTML = totalLines;
		XtotalPages1.innerHTML = XtotalPages.innerHTML;//061206
		XprePage1.src=XprePage.src;
		XnextPage1.src=XnextPage.src;
	}

}

//=======任意7wx对象自动合成html的api==================================

//用Buffer中的记录值合成html,obj为脚本对象，为含有模板中7WX指定的属性的二维数组行或对象，为空时取Buffer的离散变量
function Xparse7WXWithRecord(htmlElement,obj){
	var srcHtml = systemValue7WX[htmlElement.id + ".XelementSource"]
	if(typeof(srcHtml)=="undefined"	|| srcHtml==null){
		srcHtml = htmlElement.innerHTML;
		srcHtml = _XreplaceXTagOrAttributeToNormal(srcHtml);
		systemValue7WX[htmlElement.id + ".XelementSource"] = srcHtml;
	}

	htmlElement.innerHTML = new _7WX(srcHtml,'').parse(obj,false);

	htmlElement.style.display="";
}

var XrightAlignType = "-INTEGER-INT-SMALLINT-BIGINT-TINYINT-----"
						+"-FLOAT-DOUBLE-DOUBLE PRECISION------"
						+"-NUMBER-DECIMAL-DEC-REAL------";
function XmakeTableTemplate(tableID,arrayName,colNames,colLabels,colSizes,colTypeNames){
	if(colLabels.length!=colSizes.length||colLabels.length!=colTypeNames.length
		||colLabels.length!=colNames.length){
		alert("函数XmakeTableTemplate(tableID,arrayName,colNames,colLabels,colSizes,colTypeNames)接收的后四个数组参数长度必须相同。");
		return;
	}

	var titles="",rows="",totalwidth=0;
	var tabHeadEvent = typeof(tableHeadEvent)!="undefined" && tableHeadEvent && typeof(on_tableHeadClick)!="undefined";

	for(var i=0;i<colLabels.length;i++){
		var colSize = colSizes[i];
		totalwidth += parseInt(colSize);
		var clicking="";
		if(tabHeadEvent){
			clicking = "style='cursor:pointer;cursor:hand;' onclick=\"on_tableHeadClick("
				+ i + ",'" + colLabels[i] + "',this)\" ";
		}
		titles += "\t\t<TD nowrap " + clicking  + "width="+ colSize
			+ ">"+colLabels[i]+"</TD>\n";
		var align=XrightAlignType.indexOf("-"+colTypeNames[i]+"-")>=0 ? "align='right' " : "";
		var color=align.length!=0 ? "color:blue;" : "";
		rows +=  "\t\t<TD nowrap " + align + "style='" +color+ "'"
			+ ">{"+arrayName+"_" + colNames[i] + (colTypeNames[i]=="BIGINT"?",XformatBigInt":(colNames[i].indexOf("IP")>=0 ? ",XformatIP" :"")) + "}</TD>\n";
	}
	var tmpHtml="<TABLE id="+tableID + " width="+ totalwidth
			+" style='font-size:12px;border:1px solid #006060'>\n"
			+"\t<TR align=center style='background-color:#006060;color:white'>\n"
			+ titles + "\t</TR>\n\t<TR style='display:none;' onmouseover='this.style.backgroundColor=\"#e0e0e0\";' onmouseout='this.style.backgroundColor=\"\";'>\n" + rows + "\t</TR>\n</TABLE>";
//	alert(tmpHtml)
	return tmpHtml;	
}
function  XformatIP(ip){
	if(ip.indexOf(".")>0)//猜测是否ip
		return "<a target=_blank href='http://www.baidu.com/s?wd="+ ip +"&cl=3'>"+ ip +"</a>";
	else
		return ip;
}
function  XformatBigInt(bint){
	if(bint>100000000000)//太大的长整数，很可能是时间戳
		return bint + "<font color=#888844>(" + XformatLongToYMDHM(bint) +")</font>";
	else
		return bint;
}

function XconvertColSizes(colSizes,pixsWidthPerChar){
	if(typeof(pixsWidthPerChar)=="undefined")
		pixsWidthPerChar = 6;
	var newColSizes = new Array();
	for(var i=0;i<colSizes.length;i++){
		var size = parseInt(colSizes[i]) * parseInt(pixsWidthPerChar/2)+10;
		newColSizes[i] = size > 160 ? 160 : (size <20 ? 20 : size);
	}
	return newColSizes;
}

function XsetOrderIcon(td,isDesc){
	var tds = td.parentElement.children;
	for(var i=0;i<tds.length;i++){
		var objs = tds[i].children;
		for(var j=objs.length-1;j>=0;j--)
			if(objs[j].outerHTML.indexOf("up.gif")>0 ||objs[j].outerHTML.indexOf("down.gif")>0)
				tds[i].removeChild(j);
	}
	td.innerHTML = td.innerHTML + "<img align=absmiddle src=/commonjs/sysimg/"+(isDesc?"down":"up")+".gif>";
}

//========================================================================
//			7WX Private Function
//========================================================================
//fill table 020829 030604 bigChange  
//030625 bigChange:_XfillTableWithArray-->_XparseAndSaveTableInfo+_XbindTableWithArray+_XtableParsed
function _XparseAndSaveTableInfo(tab){
	if(_XtableParsed(tab))return;
	var tplRow = tab.rows.item(tab.rows.length-1);tplRow.style.display="";
	var tableTplLine = tplRow.outerHTML;
	var tableTplLineUC = tableTplLine.toUpperCase();
	var tplIndex;
	if(tableTplLineUC.indexOf("<TABLE")==-1){tplIndex = tab.outerHTML.toUpperCase().lastIndexOf("<TR");}
	else{XXXtab=tab.outerHTML.toUpperCase();/*alert(XXXtab);*/tplIndex = _XfindLastTr(XXXtab);}//when nesting table

	var tableHead = tab.outerHTML.substring(0,tplIndex);tplRow.style.display="none";//alert(tableTplLine);
	tableTplLine = _XreplaceXTagOrAttributeToNormal(tableTplLine);//alert(tableTplLine);

	systemValue7WX[tab.id + ".XtableSource"] = tableHead;
	systemValue7WX[tab.id + ".XtableTplLine"] = tableTplLine;//预留
	systemValue7WX[tab.id + ".X7WX"] = new _7WX(tableTplLine,'');
	systemValue7WX[tab.id + ".XtplLine"] = tab.rows.length-1;
	systemValue7WX[tab.id + ".XhasBorder"] = (tab.border > 0 && !_XignoreBorderWhenEmpty) ? true :false;
}
var _XignoreBorderWhenEmpty = false;

function _XreplaceIgnoreCase(Xsrc,Xfrom,Xto){ //Ignore [Xfrom]'s Case
	var srcUC = Xsrc.toUpperCase();
	var fromUC = Xfrom.toUpperCase();
	var fromLen = Xfrom.length;
	
	var index = srcUC.indexOf(fromUC);
	//var start = 0;
	while(index>=0){ //replace all [Xfrom] to upcase
		Xsrc = Xsrc.substring(0,index) + fromUC + Xsrc.substring(index+fromLen);
		index = srcUC.indexOf(fromUC,index+fromLen);
	}
	while(Xsrc.indexOf(fromUC)!=-1)Xsrc=Xsrc.replace(fromUC,Xto);
	return Xsrc;
}

var XactiveTagAndAttributes = new Array();
XactiveTagAndAttributes = ["<img","style","src","href"];//Tag Deprecate,"<ximg" no need
function _XreplaceXTagOrAttributeToNormal(xsrc){ //Some attr may be parsing on load
	for(var i=0; i<XactiveTagAndAttributes.length; i++){
		var inTpl = XactiveTagAndAttributes[i];
		if(inTpl.charAt(0)=="<") inTpl = "<x" + inTpl.substring(1);
		else inTpl = "x" + inTpl;

		xsrc = _XreplaceIgnoreCase(xsrc,inTpl,XactiveTagAndAttributes[i]);
	}
	return 	xsrc;
}

function _XparseAndSaveNestTableInfo(tab,tabX){
	if(!_XtableParsed(tabX)){
		_XparseAndSaveTableInfo(tabX);
		tab.setAttribute("tabXid",tabX.id);
		tabX.outerHTML = "(xSUBTABLEx)";
		_XparseAndSaveTableInfo(tab);
	}
}

function _XbindTableWithArray(tabid,arr,rowCallBack){
	var tableHead=systemValue7WX[tabid + ".XtableSource"];
	var	tableTplLine7WX=systemValue7WX[tabid + ".X7WX"];
	var hasBorder = systemValue7WX[tabid + ".XhasBorder"];
	if(typeof(tableHead)=="undefined" || tableHead==null){
		alert("开发者：在调用_XbindTableWithArray()之前，请先确保对表格已做过_XparseAndSaveTableInfo()");return;
	}

//	var tt0=new Date();	tt0=tt0.getTime();
	var linesHtml="";
	var hasRowCallBack = (typeof(rowCallBack)=='function');//可自定义每行的回调解析 //030618
	for(i=0; i<arr.length; i++){ //耗时非线性增长,与buffer中数据量有关！！！
		var rowHtml = tableTplLine7WX.parse(arr[i],hasBorder,i+1);
		if(hasRowCallBack )rowHtml = rowCallBack(rowHtml,i);
		linesHtml += rowHtml;
	}
//	var tt1=new Date();	tt1=tt1.getTime();
//	alert("use Time(ms):" + (tt1-tt0));

	return tableHead + linesHtml + "</TABLE>";
}
function _XtableParsed(tab){
	var tabid = (typeof(tab)=="string") ? tab : tab.id;
//	alert(systemValue7WX[tabid + ".XtableSource"]);
	return typeof(systemValue7WX[tabid + ".XtableSource"])!="undefined" && systemValue7WX[tabid + ".XtableSource"]!=null;
}


var XXXtab;
function _XfindLastTr(trString){

	var pos1,table1,table2;
	var subStrBefore,subStrAfter;
	pos1=trString.lastIndexOf("<TR");
	subStrBefore=XXXtab.substring(0,pos1);
	subStrAfter=XXXtab.substring(pos1);
	table1=_XfindsubStringcount(subStrAfter,"<TABLE");
	table2=_XfindsubStringcount(subStrAfter,"</TABLE");
	
	if((table2 - table1 ) == 1) return pos1;
	else return _XfindLastTr(subStrBefore);
}
function _XfindsubStringcount(String1,substr1){
	 var pos2 =String1.indexOf(substr1);
	 if(pos2 >= 0 ) return 1 + _XfindsubStringcount(String1.substring(pos2+3),substr1);
	 else return 0;
}

function _XcheckTableSelectable(tab){
	if(typeof(systemValue7WX[tab.id + ".XtableSource"])=="undefined"){
		//alert("开发者：表格"+ tab.id + "尚未被充填,不能调用表格选择类函数,如XgetTableSelectedLines()");	
		return false;
	}
	var tplLine = systemValue7WX[tab.id + ".XtplLine"];
	if(tab.rows.length <= tplLine){ 
//		alert("表格"+ tab.id + "没有数据。");
		return false;	
	}

	var firstColChildrens =  tab.rows.item(tplLine).cells.item(0).children;
	var c0HTML = firstColChildrens[0].outerHTML;
	if(firstColChildrens.length < 1
		|| (c0HTML.indexOf("checkbox")<0
		&& c0HTML.indexOf("radio")<0)){
		alert("开发者：表格"+ tab.id + "首列TD中的首个元素不是Radio或checkbox元素,不能调用表格选择类函数,如XgetTableSelectedLines()");	
		return false;
	}

	var selector = firstColChildrens[0];
	if(selector.getAttribute("XobjectId")== null){
		alert("开发者：表格"+ tab.id + "首列TD中的首个元素未定义XobjectID属性,不能调用表格选择类函数,如XgetTableSelectedLines()");	
		return false;
	}		

	return true;
}

//=====table page control private==============================
var XappName;
var XactionName;
var XbaseQuery;
var XnextStartLine=0;
var XtotalL = 0;

function _XsetPageSize(pageSizeInput){
	if(parseInt(pageSizeInput.value)<1)
		pageSizeInput.value = 1;
	if(pageSizeInput.id=="XpageLines"){
		if(typeof(XpageLines1)!="undefined")
			XpageLines1.value=XpageLines.value;
	}else
		XpageLines.value=XpageLines1.value;

	XtoPage.value=0;//061206
	_XgotoPage(XtoPage);
}
function _XpageUp(){
	XnextStartLine -= parseInt(XpageLines.value);
	if(XnextStartLine<0) XnextStartLine=0;
	_XCallServer();
}
function _XpageDown(){
	XnextStartLine += parseInt(XpageLines.value);
	_XCallServer();
}
function _XgotoPage(eventS){
	if(eventS.value < 1) eventS.value=1;

	var maxPageMod = XtotalL%XpageLines.value;
	var maxPage = (XtotalL-maxPageMod)/parseInt(XpageLines.value);
	if(maxPageMod ==0 && parseInt(eventS.value) > maxPage)
		eventS.value = maxPage;
	else if(maxPageMod != 0 && parseInt(eventS.value) > maxPage+1)
		eventS.value = maxPage+1;
	
	if(eventS.id=="XtoPage"){
		if(typeof(XtoPage1)!="undefined")
			XtoPage1.value=XtoPage.value;
	}else
		XtoPage.value=XtoPage1.value;

	XnextStartLine = parseInt(XpageLines.value)*(parseInt(eventS.value)-1);
	_XCallServer();
}
function _Xrefresh(){
	_XCallServer();
}
function _XCallServer(forExcel){
	var pagePara = "&start="+ (XnextStartLine+1) + "&len=" + parseInt(XpageLines.value);
	if(typeof(forExcel)!="undefined"){
		pagePara += forExcel;
	}

//	alert(pagePara);
	if(XbaseQuery.length == 0 || XbaseQuery.indexOf("=") != -1){ //URL参数
		var qURL= XbaseQuery + pagePara;
//alert(qURL);
		callServerGet(XappName,XactionName,qURL);
	}else{	//表单参数
//		alert(XappName + "?" + pagePara);
		callServerPost(XappName + "?" + pagePara.substring(1),XactionName,XbaseQuery);
	}
}
var XpageControlHtml='<span style="font-size:12px;" >'
					+'&nbsp;共&nbsp;<span style="color:blue"  id=XtotalLines></span>&nbsp;条，'
					+'每页<input id=XpageLines onchange="_xSynchronized(this);" type=text size=2 value=30 style="border:0px solid gray;color:blue; background-color:transparent;width:20px;text-align:center;" maxlength=2 onkeydown="if(event.keyCode==13){_xCheckXpageLines(this);_XsetPageSize(this)}">条，'
					+'共&nbsp;<span  style="color:blue" id=XtotalPages></span>&nbsp;页'
					+'<span style="display:none;">&nbsp;当前页从&nbsp;<span  style="color:blue" id=XstartLine></span>&nbsp;条开始</span>'
					+'&nbsp;&nbsp;&nbsp; 第<input id=XtoPage type=text size=3  style="border:0px solid gray;color:blue; background-color:transparent;width:40px;text-align:center;" onkeydown="if(event.keyCode==13)_XgotoPage(this)">页'
					+'&nbsp;<img align=absmiddle onmouseover="this.border=1;" onmouseout="this.border=0;" id=XprePage onclick="if(this.src.indexOf(\'null.gif\')<0)_XpageUp()" style="cursor:pointer;cursor:hand;" alt="上一页" src="/commonjs/sysimg/pageup.gif">'
					+'&nbsp;<img align=absmiddle onmouseover="this.border=1;" onmouseout="this.border=0;" id=XnextPage onclick="if(this.src.indexOf(\'null.gif\')<0)_XpageDown()" style="cursor:pointer;cursor:hand;" alt="下一页" src="/commonjs/sysimg/pagedown.gif">'
					+'&nbsp;<img align=absmiddle onmouseover="this.border=1;" onmouseout="this.border=0;" onclick="_Xrefresh()" alt="刷新列表" src="/commonjs/sysimg/reload.gif" style="cursor:pointer;cursor:hand;">'
					+'</span>';

function _xSynchronized(thisobj){
	_xCheckXpageLines(thisobj);
	if(typeof(XpageLines1)!="undefined"){
		if(thisobj.id=="XpageLines")XpageLines1.value= XpageLines.value;
		else if(typeof(XpageLines)!="undefined") XpageLines.value= XpageLines1.value;
	}
}
function _xCheckXpageLines(thisobj){
	var value = parseInt(thisobj.value);
	if(isNaN(value))thisobj.value = 10;
	else if(value<1)thisobj.value = 1;
	else if(value >99999)thisobj.value = 99;
}


//7WX解析后数据存储;bufferPos已经不用
function _7WX(str7WX,bufferPos){
	this.src7WX = str7WX;
	this.tokens = new Array();
	this.parse = _parse7WX;

	//parse and store tokens
	this.initOK = false;
	this.xBuffer = bufferPos + "buffer.";
	var xStartPre=0;
	var xStart=0;
	var xEnd=0;
	var xSep=0;
	var xStartCode="7WX(";
	var xStartCodeLen = 4;
	var xEndCode=")";
	var xSepCode=",";
	var xUndef = "undefined";
	var xVarName,xFunName;

//	alert(str7WX);
	str7WX = str7WX.replace(/{{/g,"&#123;");
	str7WX = str7WX.replace(/}}/g,"&#125;");
	str7WX = str7WX.replace(/{/g,xStartCode);//新语法{objects_property} 如需要显示‘{’、‘}’，使用‘{{’、‘}}’
	str7WX = str7WX.replace(/}/g,xEndCode);
	str7WX = str7WX.replace(/%7B/g,xStartCode);//同义补充
	str7WX = str7WX.replace(/%7D/g,xEndCode);

	var count=0;

	str7WX = _XremoveComment(str7WX);
//	alert(str7WX);
	xStart = str7WX.indexOf(xStartCode);
	while(xStart != -1){
		xEnd = str7WX.indexOf(xEndCode,xStart);
		if(xEnd < xSep){
			alert("开发者：7WX元素定义错误："+ str7WX.substring(xStart,xStart+40) + "...");
			return;
		}
		xVarName = str7WX.substring(xStart+xStartCodeLen,xEnd);

		xSep = xVarName.indexOf(xSepCode);
		if(xSep != -1){
			xFunName = xVarName.substr(xSep+1);
			xVarName = xVarName.substring(0,xSep);
		}else
			xFunName = "";

//alert(xVarName  + "|" + xFunName);
		if(xVarName=="#") xVarName = "999"; //template will get row index from {#}

		var index = isNaN(parseInt(xVarName)) ? eval(this.xBuffer + xVarName) : parseInt(xVarName);//7WX index num

		var fun=null,funType=0;
		if(xFunName.length > 0){
			if(xFunName.charAt(0)=="*"){
				funType = 1;
				fun = eval(xFunName.substring(1));
			}else
				fun = eval(xFunName);

			if(typeof(fun) == xUndef){
				alert("开发者：7WX(" + xVarName + "," + xFunName + ")对应的格式化函数" + xFunName + "未定义。");
				return;
			}
		}

		if(xStartPre < xStart)
			this.tokens[count++] = new _7WXtoken(0,str7WX.substring(xStartPre,xStart),null,null,null,null);

		this.tokens[count++] = new _7WXtoken(1,xVarName,index,xFunName,fun,funType);

		xStartPre = xEnd+1;
		xStart = str7WX.indexOf(xStartCode,xEnd);
	}
	if(xStartPre < str7WX.length)
		this.tokens[count++] = new _7WXtoken(0,str7WX.substring(xStartPre),null,null,null,null);

	this.initOK = true;
}
function _7WXtoken(type,token,index,funName,fun,funType){
	this.type = type;
	this.token = token;
	this.index = index;
	this.funName = funName;
	this.fun = fun;
	this.funType = funType;
}
//7WX解析
function _parse7WX(arrRowOrObject,empToNbsp,rowIndex){
	if(!this.initOK){
		alert("7WX显示模版定义错误，不能显示数据："+src7WX);
		return;
	}

	var xUndef = "undefined";
	var xNbsp = "&nbsp;";
	var x7WXAll = "";
	var itemValue;

	var isObj = arrRowOrObject!=null && typeof(arrRowOrObject.concat) == xUndef;
//alert("::"+(arrRowOrObject.constructor==Array))
	for(var i=0;i<this.tokens.length;i++){
		var token = this.tokens[i];
		if(token.type==0)
			x7WXAll += token.token;
		else{
			itemValue = token.index==999 ? rowIndex : 
				(arrRowOrObject==null ? eval("buffer."+token.token) :
				(isObj ? arrRowOrObject[token.token] : arrRowOrObject[token.index] ));
//alert(token.token+"----"+itemValue)
	
			if(typeof(itemValue) == xUndef){
				alert("开发者：返回数据Buffer中没有 7WX(" + token.token + " ...)对应的值");
				itemValue="(未知)";
			}
//			alert(itemValue);
			if(token.fun!=null){
				if(token.funType==0)
					itemValue = token.fun(itemValue);
				else{
					itemValue = token.fun(itemValue,arrRowOrObject);
				}
				if(typeof(itemValue) == xUndef){
					alert("开发者：7WX(" + token.token + "," + token.funName + ")对应的格式化函数" + token.funName + "无返回值。");
					return;
				}
			}
			if(itemValue.length==0 && empToNbsp)
				itemValue = xNbsp;
//alert(itemValue);
			x7WXAll += itemValue;
		}
	}
//	alert("x7WXAll:"+x7WXAll);
	return x7WXAll;

}


//remove html comment block
function _XremoveComment(str7WX){
	var commStart = "<!--";
	var commEnd = "-->";
	var xStart,xEnd=0;
	var finalStr="";

	xStart = str7WX.indexOf(commStart);
	while(xStart != -1){
		finalStr += str7WX.substring(xEnd,xStart);
		xEnd = str7WX.indexOf(commEnd,xStart);
		if(xEnd == -1){
			alert("开发者：以下html代码中含有不完整（无结束标志）的注释。\n\n" + str7WX);
			return "";
		}
		xEnd += 3;
		xStart = str7WX.indexOf(commStart,xEnd);
	}
	finalStr += str7WX.substring(xEnd); 
	return finalStr;
}

//system value
var systemValue7WX = new Array();
