WEBSERVICE_BASEURL="WebService/";
LANGUAGE='CN';
DEBUG=false;
Current_PageSize=30;//本参数最大值不能超过100，即一页显示的数据不能超过一百条

/////////////////////////////////////////////////////////////////////////////////////////////
//<script language="javascript" src="/common/client/ProcedureCallXML.js"></script>
////////////////////////////////////////////////////////////////////////////////////////////////


/*Functions for operating on the PrecedureCallXML DOM object for convenience
FillProcedureCallXMLbyRecordSet(docProcedureCall,docRecordSet)
ProcedureCallXMLSameWithRecordSet(docProcedureCall,docRecordSet)
getProcedureCallParameter(xmldoc,parameterName)
setProcedureCallParameter(xmldoc,parameterName,value)
removeProcedureCallParameter(xmldoc,parameterName)
*/

function FillProcedureCallXMLbyRecordSet(docProcedureCall,docRecordSet)
{
//用一个记录集（只有一条记录的记录集如BasicInfo）的字段填充一个ProcedureCall的对应参数，
//alert(docProcedureCall.xml);
parameters=docProcedureCall.selectSingleNode('//ProcedureCalls/ProcedureCall').attributes;
//alert(parameters);
var length=parameters.length;
//alert(length);
for(i=0;i<length;i++)
	if(docRecordSet.selectSingleNode('//RecordSet/Record/'+parameters.item(i).nodeName))
		{
		//alert(parameters.item(i).nodeName);
		//alert(docRecordSet.selectSingleNode('//RecordSet/Record/'+parameters.item(i).nodeName).text);
		parameters.item(i).text=docRecordSet.selectSingleNode('//RecordSet/Record/'+parameters.item(i).nodeName).text;
		}
//alert(docProcedureCall.xml);
}

function ProcedureCallXMLSameWithRecordSet(docProcedureCall,docRecordSet)
{
//返回true如果内容相同false如果不相同，主要用于判断数据是否发生变化以决定是否需要提交
result=true;
parameters=docProcedureCall.selectSingleNode('//ProcedureCalls/ProcedureCall').attributes;

var length=parameters.length;
for(i=0;i<length;i++)
	if(docRecordSet.selectSingleNode('//RecordSet/Record/'+parameters.item(i).nodeName))
		{
		 if(parameters.item(i).text!=docRecordSet.selectSingleNode('//RecordSet/Record/'+parameters.item(i).nodeName).text)
			{result=false;break;}
		}
return result;
}

function getProcedureCallParameter(xmldoc,parameterName)
{
return xmldoc.selectSingleNode("//ProcedureCalls/ProcedureCall").attributes.getNamedItem(parameterName).text;
}

function setProcedureCallParameter(xmldoc,parameterName,value)
{
if (!xmldoc.selectSingleNode("//ProcedureCalls/ProcedureCall").attributes.getNamedItem(parameterName))
	{
	var xmlNode = new ActiveXObject("microsoft.xmldom");
	xmldoc.selectSingleNode("//ProcedureCalls/ProcedureCall").attributes.setNamedItem(xmlNode.createAttribute(parameterName));
	}
value=CharFiltrate(value);	
//alert(value);
xmldoc.selectSingleNode("//ProcedureCalls/ProcedureCall").attributes.getNamedItem(parameterName).text=value;
}

//从数据岛里删除一个元素 cookey标志

function removeProcedureCallParameter(xmldoc,parameterName)
{
if (xmldoc.selectSingleNode("//ProcedureCalls/ProcedureCall").attributes.getNamedItem(parameterName))
	{
	//var xmlNode = new ActiveXObject("microsoft.xmldom");
	xmldoc.selectSingleNode("//ProcedureCalls/ProcedureCall").removeAttribute(parameterName);
	}
}
//删除结束
 
 
function CharFiltrate(strFiltrate){
//	strFiltrate=strFiltrate.replace(/\xd8|\u00B6|\u00B7|\x3f|\u00A9|\xAE|\u00ac|\u2022|\u2122/g,"");
	return strFiltrate;
}
 
 
 
 
 
/////////////////////////////////////////////////////////////////////////////////////////////
//<script language="javascript" src="/common/client/WebServiceCall.js"></script>
//////////////////////////////////////////////////////////////////////////////////////////////// 
 


function CallWebServiceSynchronous(baseURL,webservice,xmldocument,bReturnDOMDocument,bSetLanguage)
//功能：同步调用WebService
//参数：baseURL--基准路径
//      webservice--相对与基准路径的webservice路径给文件名
//      xmldocument--待提交的xml文档
//      bReturnDOMDocument指示函数是否返回DomDocument对象，默认false
//      bSetLanguage指示是否采用默认语言设置，如果需要强制设置语言类别，设置为true，默认false			//updated by funboy 2003/5/19
//返回：webservice所返回内容的文本字串或DOMDocument对象
{
	if ((xmldocument.selectSingleNode("//ProcedureCalls/ProcedureCall").attributes.getNamedItem('Language')) && (!bSetLanguage))
	{
		xmldocument.selectSingleNode("//ProcedureCalls/ProcedureCall").attributes.getNamedItem('Language').text=LANGUAGE;
	}	
	if(DEBUG&&xmldocument)alert(xmldocument.xml);
	var oXMLHTTP=new ActiveXObject("microsoft.XMLHTTP");
	var sURL=baseURL+webservice;
	oXMLHTTP.open("post",sURL,false);

if (xmldocument != null || xmldocument !="") { oXMLHTTP.send(xmldocument); }
else{ oXMLHTTP.send("<ProcedureCalls><ProcedureCall /></ProcedureCalls>"); }

    if(DEBUG)alert(oXMLHTTP.responseText);
	var doc=new ActiveXObject("microsoft.xmldom");
	doc.loadXML(oXMLHTTP.responseText);
	if(doc.parseError.errorCode) doc.loadXML( HTTPExceptionHandler(sURL,xmldocument,oXMLHTTP));
	if (bReturnDOMDocument){	   
		return doc;}
		else
		{		 
		 return doc.xml;	
		 }
		
}

function HTTPExceptionHandler(sURL,xmldocument,oXMLHTTP)
{
var msg;

if (LANGUAGE=='EN')msg="<Messages><Message Object='SYSTEM' Code='-9999'>The system is busying now,please try again later！</Message></Messages>";
else msg="<Messages><Message Object='SYSTEM' Code='-9999'>系统正忙或遇到未知错误，请稍后再试！</Message></Messages>";
ShowXMLMessage(msg);
if(DEBUG){
	if(xmldocument)alert(xmldocument.xml);
	alert(sURL);
	alert(oXMLHTTP.responseText);
	}
return msg;
}

function CallWebServiceByXmlString(baseURL,webservice,xmlstr,bReturnDOMDocument,bSetLanguage)
//功能：同步调用WebService
//参数：baseURL--基准路径
//      webservice--相对与基准路径的webservice路径给文件名
//      xmlstr--待提交的xml文档的文本字串
//      bReturnDOMDocument指示函数是否返回DomDocument对象，默认false
//      bSetLanguage指示是否采用默认语言设置，如果需要强制设置语言类别，设置为true，默认false			//updated by funboy 2003/5/19
//返回：webservice所返回内容的文本字串或DOMDocument对象
{
//	var oXMLHTTP=new ActiveXObject("microsoft.XMLHTTP");
	var xmldocument=new ActiveXObject("microsoft.xmldom");
	xmldocument.loadXML(xmlstr);
	return CallWebServiceSynchronous(baseURL,webservice,xmldocument,bReturnDOMDocument,bSetLanguage)
}

function ShowXMLMessage(xml,bNoSuccessMessage)
//功能：用于显示webservice返回的xml消息
//输入：xml，要显示的消息集合对象，可为字符串类型或xmlDocument类型
//返回：如果xml消息表示调用成功则返回true，否则返回false
{
var xmldoc;
if (typeof(xml)=="string")
	{
	xmldoc=new ActiveXObject("microsoft.xmldom");
	xmldoc.loadXML(xml);
	Messages=xmldoc.selectNodes("//Messages/Message");
	}
	else xmldoc=xml;
Msg='';Status=true;
for(i=0;i<Messages.length;i++)
	{
	Msg+=Messages.item(i).text+'\n';
	if (Messages.item(i).attributes.getNamedItem("Code").text!="0") Status=false;
	}
if(!Status)alert(Msg);
if(bNoSuccessMessage==null)bNoSuccessMessage=true;
if(Status&&!bNoSuccessMessage)alert(Msg);
return Status;
}

function Admin(){
	var cookieString = new String(document.cookie);
	var	cookieHeader = "AdminType=";
	var beginPosition=cookieString.indexOf(cookieHeader)
	tmpstr=cookieString.substring(beginPosition+cookieHeader.length,beginPosition+cookieHeader.length+1);
	this.AdminType=tmpstr;
} 



//<script language="javascript" src="/common/client/TableController.js"></script>

//TableController
function TableController(ControlName)
{
//以 下 是 R/W属性，且应该在对象初始化时赋值
	this.xmlDataIsland=null;
	this.objTable=null;
	this.objCheckboxSet=null;//可选，有CheckBoxs时使用
	this.bSingleSelect=false;


//以下是TableController提供的method
	this.Refresh=TableController_Refresh;		//语法：obj.Refresh();
	this.SelectARow=TableController_SelectARow;    //语法：obj.SelectARow(rowIndex);
	this.CheckAll=TableController_CheckAll;		//语法：obj.CheckAll(bFlag);
	this.getItem=TableController_getItem;		    //语法：obj.getItem(sField);
	this.getItems=TableController_getItems;
	this.getAllItems=TableController_getAllItems;
	this.getItemCSV=TableController_getItemCSV;    //语法：obj.getItemCSV(sField);
	this.getSelectedCount=TableController_getSelectedCount;

//以下是ReadOnly属性
	this.CurrentRowIndex=0;
	this.ControlName=ControlName;	
	
 this.OnAfterRowSelected=null;
}

function TableController_Refresh()
{
	timeout=this.xmlDataIsland.selectSingleNode("//RecordSet").childNodes.length*20+500;
	if(this.ControlName)setTimeout(this.ControlName+".SelectARow("+this.CurrentRowIndex+");",timeout);
	if(this.xmlDataIsland.selectSingleNode("//RecordSet").childNodes.length)this.objTable.style.display='';
		else this.objTable.style.display='none';
}

function TableController_SelectARow(rowIndex)
{
//在table中选择一行
//输入：rowIndex要选择的行
//返回：选中行的序号，选择行高亮显示，其它行白底显示，数据集指针指向相应行

if (rowIndex>=this.xmlDataIsland.selectSingleNode("//RecordSet").childNodes.length)rowIndex=this.xmlDataIsland.selectSingleNode("//RecordSet").childNodes.length-1;
if (rowIndex<0)
	{	
		this.CurrentRowIndex=-1;
		if (this.OnAfterRowSelected)this.OnAfterRowSelected(this.CurrentRowIndex);
		return -1;
	}
	if (!this.xmlDataIsland.selectSingleNode("//RecordSet").childNodes.length)
		return -1;
	this.xmlDataIsland.recordset.AbsolutePosition=rowIndex+1;
	this.CurrentRowIndex=rowIndex;
	for(i=0;i<this.objTable.rows.length;i++)
		{
		this.objTable.rows(i).bgColor=0xffffff;
		if(this.bSingleSelect&&this.objCheckboxSet)this.objCheckboxSet(i).checked=false;
		}
	if(!this.objTable.rows.item(rowIndex))
	{
		this.CurrentRowIndex=-1;
		if (this.OnAfterRowSelected)this.OnAfterRowSelected(this.CurrentRowIndex);
		return -1;

	}		
	this.objTable.rows.item(rowIndex).bgColor=0xefefef;	
	if(this.bSingleSelect&&this.objCheckboxSet)this.objCheckboxSet(rowIndex).checked=true;
	//alert(this.objTable.rows.length);
	if (this.OnAfterRowSelected)this.OnAfterRowSelected(this.CurrentRowIndex);
	return rowIndex;
}



//-------------全选触发函数
function TableController_CheckAll(bFlag)
{
//功能：根据传入的CheckBox集合，全部进行选中或取消选中
//参数：bFlag传入是选中还是取消
//返回：bFlag，
	for (i=0;i<this.objTable.rows.length;i++){
		this.objCheckboxSet[i].checked=bFlag;
	}
	return bFlag;
}

function TableController_getItem(sField)
{
if(this.CurrentRowIndex<0)return "";

return String(this.xmlDataIsland.recordset(sField));
}

function TableController_getItems()
{

var args=TableController_getItems.arguments;
var result=new HashArray(args);

if(this.CurrentRowIndex<0)return result;
for(i=0;i<args.length;i++)
	{
	result[args[i]]=String(this.xmlDataIsland.recordset(args[i]));
	}
return result;
}

function TableController_getAllItems()
{
	var fieldCount=this.xmlDataIsland.recordset.Fields.count;
	var args=new Array(fieldCount-1);
	for(i=0;i<fieldCount-1;i++){
		args[i]=this.xmlDataIsland.recordset.Fields(i).Name;
		}
	var result=new HashArray(args);
	
	if(this.CurrentRowIndex<0)return result;
	for(i=0;i<args.length;i++)
		{
		result[args[i]]=String(this.xmlDataIsland.recordset(args[i]));
		}
	return result;
}

function TableController_getItemCSV(sField)
{
if (!this.xmlDataIsland.selectSingleNode("//RecordSet").childNodes.length)
	return '';
if(this.CurrentRowIndex<0)
	return '';

var csv="";
for (i=0;i<this.objTable.rows.length;i++)
	if(this.objCheckboxSet[i].checked)
		{
		this.xmlDataIsland.recordset.AbsolutePosition=i+1;
		value=String(this.xmlDataIsland.recordset(sField));
		csv=(csv)?(csv+","+value):value;
		}
	this.xmlDataIsland.recordset.AbsolutePosition=this.CurrentRowIndex+1;
return csv;
}

function TableController_getSelectedCount()
{

var count=0;
if(this.objCheckboxSet){ //如果有checkbox则看选了几个
		for (i=0;i<this.objTable.rows.length;i++)
		if(this.objCheckboxSet[i].checked)count++;
	}
	else if (this.CurrentRowIndex>-1)count=1; //否则看是否选中了一条
return count;

}

function HashArray(args)
{
	for(i=0;i<args.length-1;i++)this[args[i]]=null;
}

function HashArray(args)
{
	for(i=0;i<args.length-1;i++)this[args[i]]=null;
}

function mOvr(src,clrOver){ 
	if (!src.contains(event.fromElement)) { 
		src.style.cursor = 'hand'; 
		src.bgColor = clrOver; 
	}
}
function mOut(src,clrIn){ 
	if (!src.contains(event.toElement)) { 
		src.style.cursor = 'default'; 
		src.bgColor = clrIn; 
	}
}

var ActiveItem="";
function mOclk(src,clrOver,clrIn){
	ActiveItem.bgColor = clrIn; 
	if (!src.contains(event.fromElement)) { 
		src.style.cursor = 'hand'; 
		src.bgColor = clrOver; 
	}
	ActiveItem=src;
}



//<script language="javascript" src="/common/client/ProcedureCallXML.js"></script>
//<script language="javascript" src="/common/client/WebseviceCall.js"></script>
//<script language="javascript" src="/common/client/cookie.js"></script>
//<script language="javascript" src="/common/client/TurnPageController.js"></script>
//翻页控制器

function TurnPageController()
{
	//  The Read/Write Properties 
	this.WebServiceBaseURL="";
	this.WebService="";
	this.xmlProcedureCall=null;
	this.GetGertainPage=null;
	this.RefreshCallBack=null;
	this.PageSize=Current_PageSize;	
	this.PageSize=(this.PageSize==null)?15:this.PageSize;	//没COOKIE时，默认为15
	
	// The ReadOnly Properties
	this.CurrentPage=0;
	this.PageCount=0;
	this.RecordCount=0;

	//  The public methods
	this.GotoPage=TurnPageController_GotoPage;
	this.GoNextPage=TurnPageController_GoNextPage;
	this.GoPrevPage=TurnPageController_GoPrevPage;
	
	//  The private properties
	this.xmlRecordNodeList=null;
	this.xmlCurrentPage=new ActiveXObject("microsoft.xmldom");
	this.xmlCurrentPage.async=false;
	
}

function TurnPageController_GotoPage(PageNo)
{	
	if(isNaN(PageNo))PageNo=1;	
	if(PageNo>this.PageCount)PageNo=this.PageCount;
	if(PageNo<1)PageNo=1;
		this.GetCertainPage(PageNo);
	this.CurrentPage=PageNo;
	this.RefreshCallBack(this.xmlCurrentPage,this.PageCount,this.CurrentPage,this.RecordCount);
	return;
}

function TurnPageController_GoNextPage()
{
	if(this.CurrentPage==this.PageCount)return;
	this.GotoPage(this.CurrentPage+1);
}
function TurnPageController_GoPrevPage()
{
	if(this.CurrentPage==1)return;
	this.GotoPage(this.CurrentPage-1);
}

function ServerSidePageBreak(PageNo)
{
	setProcedureCallParameter(this.xmlProcedureCall,"PageNo",PageNo);
	setProcedureCallParameter(this.xmlProcedureCall,"PageSize",this.PageSize);
	this.xmlCurrentPage=CallWebServiceSynchronous(this.WebServiceBaseURL,this.WebService,this.xmlProcedureCall,true);
	this.RecordCount=this.xmlCurrentPage.selectSingleNode("//RecordSet/Record/RecordCount");
	if (this.RecordCount) this.RecordCount=parseInt(this.RecordCount.text,10);
		else this.RecordCount=0;
	this.PageCount=Math.ceil(this.RecordCount/this.PageSize);		
}

function ClientSidePageBreak(PageNo)
{
    if(!this.xmlRecordNodeList){
    	xmlRecordSet=CallWebServiceSynchronous(this.WebServiceBaseURL,this.WebService,this.xmlProcedureCall,true);
	    this.xmlRecordNodeList=xmlRecordSet.selectNodes("//RecordSet/Record");
	    this.RecordCount=this.xmlRecordNodeList.length;
	    this.PageCount=Math.ceil(this.RecordCount/this.PageSize);		
    }
	this.xmlCurrentPage.loadXML("<RecordSet></RecordSet>");
	firstRow=(PageNo-1)*this.PageSize;
	lastRow=PageNo*this.PageSize;
	if(lastRow>this.RecordCount)lastRow=this.RecordCount;
	for(i=firstRow;i<lastRow;i++)
		this.xmlCurrentPage.childNodes.item(0).appendChild(this.xmlRecordNodeList.item(i));
}





