<!--
/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

要使用本模块，需要在.htm的head部分中加入以下说明：

<OBJECT ID="DrvCert" WIDTH="0" HEIGHT="0" CODEBASE="DrvCertC.dll" CLASSID="CLSID:2FD68643-4BCE-4EF5-B7B8-F0F1192FDE86"></OBJECT>
<SCRIPT LANGUAGE ="JavaScript" SRC="DynamicPrompt.js"></SCRIPT>
<SCRIPT LANGUAGE ="JavaScript" FOR="window" EVENT="onload">
<!--
	// 如果.htm中有其他onload()事件处理函数，都要一并放在这里，否则，程序不会做任何事情，且导致中断执行
	PromptInit()
//-->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript" FOR="DrvCert" EVENT="OnProcessRate( FinishRate , sMessage )">
<!--
	DispProgressInfo( FinishRate/10 , sMessage )
//-->
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript" SRC="SoapXml.js"></SCRIPT>

*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////



// 下面的定义应该与"../inc/ParamDefine.inc"中的定义一致，才能保证客户端与服务器端的SOAP调用协调工作
//
// <SOAP-ENV:Header xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
//	<CertInfo>
//		<CertContent>MIIEpgIB......</CertContent>
//		<CertPhysicalID>E8UCbjXD0cy0ERmFnDbABb6+sNQ=</CertPhysicalID>
//		<CertIssuer>e-drivers</CertIssuer>
//	</CertInfo>
//	<Timestamp><Created>2004-4-7 15:29:8</Created><Expires>2004-4-7 15:34:8</Expires><Format>UTC</Format></Timestamp>
//  <SignInfo><SignValue>6omcw77e......</SignValue></SignInfo>
// </SOAP-ENV:Header>
var SOAP_REQ_HEADER_TAG						 = "SOAP-ENV:Header"
var SOAP_REQ_HEADER_CERT_CONTENT_TAG		 = "CertContent"
var SOAP_REQ_HEADER_CERT_PHYSICALID_TAG		 = "CertPhysicalID"
var SOAP_REQ_HEADER_CERT_ISSUER_TAG			 = "CertIssuer"
var SOAP_REQ_HEADER_TIMESTAMP_TAG			 = "Timestamp"
var SOAP_REQ_HEADER_TIMESTAMP_CREATE_TAG	 = "Created"
var SOAP_REQ_HEADER_TIMESTAMP_EXPIRE_TAG	 = "Expires"
var SOAP_REQ_HEADER_TIMESTAMP_FORMAT_TAG	 = "Format"
var SOAP_REQ_HEADER_SIGNATURE_TAG			 = "SignInfo"
var SOAP_REQ_HEADER_SIGNATURE_VALUE_TAG		 = "SignValue"

var SOAP_REQ_BODY_PROBLEM_DEVICE_TAG		 = "ProblemDevice"

/*
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <IssuerCertSubString>e-drivers.cn</IssuerCertSubString>
  <Timestamp>
	<Created>2004-5-4 15:2:6</Created>
	<Expires>2004-5-4 15:7:6</Expires>
	<Format>UTC</Format>
  </Timestamp>
  <SignInfo>
	<SignValue>iFpgxdJ84qX+MjO8o9BdWRH1d6S+Xb+8rw9xKYfqYIGQRRyvIZ8nT7gOl0PVbYeIZKdhW3ZUd1ugjgmrVftuhjGNLPcSmpaws/8qfFMzbs7X5jO7u21mMJnEyaL1i5QJqaF2yYwidaa8VCTnFoXSMPpOczMuFMgOwrJ5FpKlbDqAXQ34Q/2UgQjjX5QUiWF+rockNWxAXwB7NGWPC8fn/IHKOtv8mWDs90hsS4IZqsMnF/8QxaCAathv/5Np24xdIa/+dtF/9IXRFB1sRoN7Vd3pWnFKxy0e/vb6qpAjuALACQ/NfX+hI/Lftl9Rx56tcRzEpaE7sZamPjw0Ts2QJQ==</SignValue>
  </SignInfo>
 </SOAP-ENV:Header>
	 <SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
	  <m:GetDSPInfoResponse xmlns:m="http://e-drivers.cn/soap/">
	   <Result>
		<RegResult>User device info add to DB success( user cert serial-number : 81 2C 50 CB  )</RegResult>
		<GetSvcCertInfoURL>http://server/soap/DrvDown.asp</GetSvcCertInfoURL>
		<UserCertIssuerURL>http://server/soap/DrvCert.asp</UserCertIssuerURL>
		<MatchingDeviceID>USB\ROOT_HUB</MatchingDeviceID>
		//<IssuerCertSubString>e-drivers.cn</IssuerCertSubString>
		<UserCertIssuerSubjectKeyWord>e-drivers.cn</UserCertIssuerSubjectKeyWord>
		//<DriverVersion>5.0.2195.1</DriverVersion>
		//<DriverDate>12-9-1999</DriverDate>
		//<DriverProvider>Microsoft</DriverProvider>
		//<DriverSize>123680</DriverSize>
		<BuyNumber>21</BuyNumber>
		<IfSubmitAllDeviceInfo>true</IfSubmitAllDeviceInfo>
	   </Result>
	  </m:GetDSPInfoResponse>
	 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*/
var SOAP_RET_HEADER_TAG                      = "SOAP-ENV:Header"
var SOAP_RET_HEADER_USER_CERT_ISSUER_SUBJECT_KEYWORD_TAG 
											 = "UserCertIssuerSubjectKeyWord"

var SOAP_ENVELOPE_ELEMENT_TAG				 = "SOAP-ENV:Envelope"

var SOAP_RET_BODY_TAG                        = "SOAP-ENV:Body"
var SOAP_RET_BODY_RESULT_TAG                 = "Result"
var SOAP_RET_BODY_REG_RESULT_TAG             = "RegResult"
var SOAP_RET_BODY_DRIVER_SERVICE_URL_TAG     = "GetSvcCertInfoURL"	//"DriverServiceURL"
var SOAP_RET_BODY_SERVICE_CERT_URL_TAG       = "UserCertIssuerURL"	//"CertServiceURL"
var SOAP_RET_BODY_MATCHING_DEVICE_ID_TAG     = "MatchingDeviceID"
//var SOAP_RET_BODY_DRIVER_VERSION_TAG         = "DriverVersion"
//var SOAP_RET_BODY_DRIVER_DATE_TAG            = "DriverDate"
//var SOAP_RET_BODY_DRIVER_PROVIDER_TAG        = "DriverProvider"
//var SOAP_RET_BODY_DRIVER_SIZE_TAG            = "DriverSize"
var SOAP_RET_BODY_BUY_NUMBER_TAG             = "BuyNumber"
var SOAP_RET_BODY_IF_SUBMIT_ALL_DEVICE_TAG   = "IfSubmitAllDeviceInfo"

var SOAP_REQ_TIME_METHOD_NAME                = "GetTime"
var SOAP_RET_BODY_DATE_TIME_TAG				 = "DateTime"

var SOAP_REQ_SERVICE_CERT_INFO_MATHOD_NAME			= "GetSvcCertInfo"
//var SOAP_REQ_SERVICE_CERT_INFO_ITEM_DEVICE_ID_TAG	= "DeviceID"
var SOAP_REQ_SERVICE_CERT_INFO_BUY_NUMBER_TAG		= "BuyNumber"
//<SOAP-ENV:Body SOAP-ENV:encodingStyle="">
//    <m:GetSvcCertInfoResponse xmlns:m="http://e-drivers.cn/soap/" SOAP-ENV:encodingStyle="">
//        <Result>
//            <Issuer>e-drivers.cn</Issuer>
//            <Class>2</Class>
//            <NotBefore>12-9-1999 12:00:00</NotBefore>
//            <NotAfter>12-9-1999 12:10:00</NotAfter>
//            <DateTime>1084325192921</DateTime>
//            <DeviceID>USB\ROOT_HUB</DeviceID>
//        </Result>
//    </m:GetSvcCertInfoResponse>
//</SOAP-ENV:Body>
//
// GetSvcCertInfo.asp服务返回的SOAP信息包XML标签
//
var SOAP_RET_BODY_SERVICE_CERT_INFO_ISSUER_TAG                  = "Issuer"
var SOAP_RET_BODY_SERVICE_CERT_INFO_CLASS_TAG                   = "Class"
var SOAP_RET_BODY_SERVICE_CERT_INFO_NOT_BEFORE_TAG              = "NotBefore"
var SOAP_RET_BODY_SERVICE_CERT_INFO_NOT_AFTER_TAG               = "NotAfter"
var SOAP_RET_BODY_SERVICE_CERT_INFO_DATE_TIME_TAG               = "DateTime"
var SOAP_RET_BODY_SERVICE_CERT_INFO_DEVICE_ID_TAG               = "DeviceID"
var SOAP_RET_BODY_SERVICE_CERT_INFO_SUBMIT_NUMBER_TAG           = "SubmitNumber"
var SOAP_RET_BODY_SERVICE_CERT_INFO_DEPLOY_NUMBER_TAG           = "DeployNumber"
var SOAP_RET_BODY_SERVICE_CERT_INFO_ENCRYPT_KEY_ID_TAG          = "EncryptKeyID"
var SOAP_RET_BODY_SERVICE_CERT_INFO_ISSUE_SVC_CERT_URL_TAG      = "SvcCertIssuerUrl"
var SOAP_RET_BODY_SERVICE_CERT_INFO_DOWNLOAD_DRIVER_URL_TAG     = "DownloadDriverUrl"
//<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
// <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
//  <IssuerCertSubString>e-drivers.cn</IssuerCertSubString>
//  <Timestamp><Created>2004-5-14 9:49:40</Created><Expires>2004-5-14 9:54:40</Expires><Format>UTC</Format></Timestamp><SignInfo><SignValue>0MXm5vkjG+5y/NcFxO6yaNggO+E6SjrVBNL6mnFhvjNhRRENfUcwr46SaguE+J4CmhGWptQvpMwb6i5X+6vEegH2xxihSg3FGh3xU4wMILzRPuUkSIjfSL8+UTq2YFdk4UHR7HUX3GVK1Mc9FRIK9NVdhQy/jej8R3aHR2Bo41tal0CUjT62IA++AIoNv0OCVsRToPet3IewwbKxyCh0/MsEUs4OH12MESSiH3wnXZKsopAuJBpYAv3IHULS1cK9qhRfjMnKOfc4gIb/R15fWjtJuIskh6Ff1pI8C4fcQGb2pfuePJZBWnA30QlKOdC8iHWJb5y10kAj9oLGNSTqUA==</SignValue></SignInfo></SOAP-ENV:Header>
// <SOAP-ENV:Body xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
//  <m:IssueSvcCertResponse xmlns:m="http://e-drivers.cn/soap/">
//   <Result>
//    <RegResult>Svc Cert : ...</RegResult>
//   </Result>
//  </m:IssueSvcCertResponse>
// </SOAP-ENV:Body>
//</SOAP-ENV:Envelope>
//
// IssueSvcCert.asp服务的SOAP返回信息包XML标签
//
var SOAP_RET_HEADER_TAG							= "SOAP-ENV:Header"
var SOAP_RET_HEADER_ISSUER_CERT_SUB_STRING_TAG	= "IssuerCertSubString"
var SOAP_RET_BODY_TAG							= "SOAP-ENV:Body"
var SOAP_RET_BODY_RESULT_TAG					= "Result"
var SOAP_RET_BODY_REG_RESULT_TAG				= "RegResult"


var SOAP_RET_RESULT_USER_CERT_TAG			 = "UserCert"
var SOAP_RET_RESULT_DSP_CERT_TAG			 = "DSPCert"
var SOAP_RET_ERROR_STRING_TAG				 = "faultstring"
var SOAP_RET_ERROR_CODE_TAG					 = "faultcode"

var SOAP_REQ_HEADER_SIGN_CERT_INFO_TAG		 = "SignCertInfo"
var SOAP_REQ_HEADER_SIGN_CERT_CONTENT_TAG	 = "CertContent"
var SOAP_REQ_HEADER_SIGN_CERT_PHYSICALID_TAG = "CertPhysicalID"
var SOAP_REQ_HEADER_SIGN_CERT_ISSUER_TAG	 = "CertIssuer"

//<SOAP-ENV:Header xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
//  <EncryptCertInfo>
//    <CertContent>MIIG...A=</CertContent>
//  </EncryptCertInfo>
//  <SignCertInfo>
//	  <CertContent>MIIE...A=</CertContent>
//    <CertPhysicalID>grmAmynV61s/hx60efPdmKf8VDM=</CertPhysicalID>
//  </SignCertInfo>
//  <Timestamp>
//    <Created>1088308336562</Created>
//    <Expires>1088308636562</Expires>
//    <Format>VirtualTime</Format>
//  </Timestamp>
//  <SignInfo>
//    <SignValue>o89c9QX6Ww49wnSa0WnBsddhiOgOt1Px6/K0encS5YKXx1ICSl5J4Rb0QEP8FavC7NEjrDA5msX53nr5jnF0ryEsVA7owisp9ij3pDi1FIN4qQTjqGpzzGbs6rBzCgjhaFUtuU9S6NUsod30rPugBEMSCJv8FeCKllLzEcHIS1o=</SignValue>
//  </SignInfo>
// </SOAP-ENV:Header>
var SOAP_REQ_HEADER_ENCRYPT_CERT_INFO_TAG	 = "EncryptCertInfo"
var SOAP_REQ_HEADER_ENCRYPT_CERT_CONTENT_TAG = "CertContent"

// GetCommCert.asp服务需要的SOAP请求方法名称
var SOAP_REQ_GET_COMM_CERT_MATHOD_NAME       = "GetCommCert"
var SOAP_RET_GET_COMM_CERT_TAG				 = "CommCert"

// <SOAP-ENV:Body>
//   <EncryptedDataInBASE64>DAEAAA...prVYrQWFKV+7U</EncryptedDataInBASE64>
// </SOAP-ENV:Body>
var SOAP_REQ_BODY_ENCRYPT_METHOD_NAME        = "EncryptedXML"
var SOAP_REQ_BODY_ENCRYPT_DATA_TAG			 = "EncryptedXMLInBASE64"


// 申请用户证书的Soap包必须在生成后的以下时间段内被处理，否则失效
// 该值在服务器端处理时会被忽略
var g_ExpireSeconds = 5*60 ;

/////////////////////////////////////////////////////////////////////////////////////////////
function GetUsertCertFromSoapRetXML( XML )
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		//DispMessageInfo("Load xml overflow on getting user cert from soap returned xml");
		return null
	}
	var objNode = xmlDoc.selectSingleNode("//" + SOAP_RET_RESULT_USER_CERT_TAG);//"UserCert"	// for more to see "XPath Examples"
	if (!objNode) return (null)
	var Cert = objNode.text;
	xmlDoc = null;
return (Cert);
}

function GetErrorInfoFromSoapRetXml( XML )
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		//DispMessageInfo("Load xml overflow on getting error info from soap returned xml");
		return null
	}
	var objNode = xmlDoc.selectSingleNode("//" + SOAP_RET_ERROR_STRING_TAG);//"faultstring"	// for more to see "XPath Examples"
	if (!objNode) return (null)
	var ErrorInfo = objNode.text;
	xmlDoc = null;
return (ErrorInfo)
}
function GetDSPCertFromSoapRetXML( XML )
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		//DispMessageInfo("Load xml overflow on getting DSP cert from soap returned xml");
		return null
	}
	var objNode = xmlDoc.selectSingleNode("//" + SOAP_RET_RESULT_DSP_CERT_TAG);//"DSPCert"	// for more to see "XPath Examples"
	if (!objNode) return (null)
	var Cert = objNode.text;
	xmlDoc = null;
return (Cert);
}

function XmlToText( Xml )
{
/*
// 下面的字符串内容是一个XML例子

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
 <SOAP-ENV:Header xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
  <CertInfo>
   <CertContent>MIIEpgIBAzCCBGIGCSqGSIb3DQEHAaCCBFMEggRPMIIESzCCBEcGCSqGSIb3DQEHBqCCBDgwggQ0AgEAMIIELQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQIulwlwmjLZ80CAgfQgIIEAEud5NrGlW88WO+JqyWg5LatKnHAmsiPEsr7Tg9JSVfoi+F7r7BgTjrCzdLnvhusEbhmMKHFODtL/+yAkX/YnNIon76SfPF/zp09je5H8xkc2VUCzqozvx6VM9jUH8z96Bzl8hasegt++8tx7aSH8/ZIzVk/94e+JTEzJJm1cpB6OrKaZczs/s9EEq2CUYe0IIlVfXyqLDryxcaISoNmY+CIeAOVclo2Q0owSZJzKa3lhOR9k707ujg4E5/ceggvfnyxObbzFP1ysR6WR6zuQr0aGrrUlrTqh9WbZ0FLqYMgKq8B4AWfYGxjUJv35W710Wk+ZQwsKqKc3xtGmz1CpiXNMIHlwmNstJBVusYELgEIBD3RrxKs21jjkBBcHtwc4I693cG+9PcY4S+W7cgvRUL9Nx6L4Gvh785TfY9yIV/yHsC2OmohRaXESsEzfZibl5a6XFOG/x9wd5HFMloDqCiAM4sOE1i6peOI0W1Qy/weCppBGzir3rJOuUHvQLeiKOnhiEKtMVhXeO0Hs+i/pKalaI4Je302FXvBgFCAnyrBdVpX/kAUQAk51YRJAFmtTAhcF6m9SVeLUc0aBRB1+dSTSQedZVqbN/y/j12PdishOCG8reiov+ZsmgGW6/OUIxDdGKQ9jRamhWlOHTliqORvQay7imPcdGtQ0MB3nX0KNnNeBtI5RhLPCpA1Z+BKtYBiT0wvk2V1j6wMUkHp96Xw+5NOmVBm0Yvvsev9KRC+GWg409G84XdqQxnDV/oAtexjVqSt6K0QpdnvBW+mFi8Rem8A1/zicRoqrTiFr1ntrRe3brhiPWhklRFS3ey5US+ec0QCgYhdzsRpGEJzlHZkgPCoE32GkJy2pZY9VM2ppdZ2AaZ2+qsogmsIrDbJJAvSpQofueUUxvJNSyn6I9PUmQdRGnvZAxPeR3rgrwVr82ZWOo5GeJIxuxTFDeRotYVyNuccht7j7kizUNH/eSW+eOTnlPQlvvyZae2m3qJVaQ/5huOeeYQYEdPK5JqgtSILm8SbZMhBlsANEvIBB2ViTFQD/wwlTS7OuG4ar4w2lt3Y1PGrttefaQbP3lQbVt5AyAEIbNtFOmSx7IgapTK4AOqKx5okV2/odZRqvxivnRWRcbbnDLZZLLKi0kZwm1ExtzbbLlupotgYN/yYSmhu9UkKJkuKzDRxZ95nEPmiqqtvU8NZTK/p7c2K1iSSWAFSNx7S4X8Ky4qFj97N4pee3jTssd0KVez3RNLHNf4QEj20EHEPSuo4bViWTwfCp7KfmFpC/SeCiKBPFirJRbOWVE3nl7I9IqrbY4OqJRXDzs1M2ihJ6FYZQDLLHUKVuL8ly+eYznGptTbRteqFEk0wOzAfMAcGBSsOAwIaBBQ6avUFpXm1J+QuwANxhDSaFa++8AQU3LVkvo2lsA+X7HUhrFxtceR6bD8CAgfQ</CertContent>
   <CertPhysicalID>I5GxyQVvM/8++BBrmHdNgm2cQE8=</CertPhysicalID>
   <CertIssuer>e-drivers</CertIssuer>
  </CertInfo>
  <Timestamp><Created>2004-4-11 4:12:29</Created><Expires>2004-4-11 4:17:29</Expires><Format>UTC</Format></Timestamp><SignInfo><SignValue>F1LNEVr2w9d9Y6oAm3cuVoCNcOK7tBi0ZBSGYfYk2oEjIDxpTzpVsJzUCoXeZfCMVJ8DZOv7EgReDi+uI5bd/tD0ov2NyLesWx6kOx5hV7u9PBQt3t61kT4c9D+I5jBIvthnr517d7kSkVQrUN9523SS79eAtiuIcTIxUnKnYKk=</SignValue></SignInfo></SOAP-ENV:Header>
 <SOAP-ENV:Body>
  <n:UserInfo xmlns:n="http://e-drivers.cn/soap/">
   <Name>耿健</Name>
   <Gender>male</Gender>
   <Mobile>13621093184</Mobile>
   <Address>北京市石景山区杨庄南里古城地铁家园8-2205</Address>
   <AreaCode>010</AreaCode>
   <Phone>68815191</Phone>
   <Email>geng_founder@yahoo.com.cn</Email>
   <UserName>gengs</UserName>
   <Password>xxxxxx</Password>
   <Automail>Yes</Automail>
  </n:UserInfo>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

// 下面的字符串内容是一个生成XML例子

	// loadXML 只支持UTF-16 / UCS-2 encodings , 否则会失败
	var str = '<?xml version="1.0" encoding="UTF-16"?>\n';

	str += '<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">\n';
	str += "   <SOAP-ENV:Header xmlns:wsu =\"http://schemas.xmlsoap.org/ws/2002/07/utility\" ";
	str += "                    xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2002/07/secext\" >\n";
	str += "      <CertInfo>\n";
	str += "         <CertContent>KGDsjhsgdhahws</CertContent>\n";
	str += "         <CertPhysicalID>DewqdAYBStswtTgh875</CertPhysicalID>\n";
	str += "         <CertIssuer>e-drivers.cn</CertIssuer>\n";
	str += "      </CertInfo>\n";
	str += "      <Timestamp>\n";
	str += "         <Created>2004-03-08 12:00:00</Created>\n";
	str += "         <Expires>2004-03-08 12:05:00</Expires>\n";
	str += "         <Format>UTC</Format>\n";
	str += "      </Timestamp>\n";
	str += "      <m:SignInfo xmlns:m=\"http://e-drivers.cn/soap/\">\n";
	str += "         <m:SignValue>DewqdAYBStswtTgh875</m:SignValue>\n";
	str += "      </m:SignInfo>\n";
	str += "   </SOAP-ENV:Header>\n";
	str += "   <SOAP-ENV:Body>\n";
	str += "     <n:UserInfo xmlns:n=\"http://e-drivers.cn/soap/\">\n";
	str += "        <Name>Geng jian</Name>\n";
	str += "        <Gender>male</Gender>\n";
	str += "        <Mobile>13641323232</Mobile>\n";
	str += "        <Address>北京市朝阳区广和里7巷3号楼1-602</Address>\n";
	str += "        <AreaCode>010</AreaCode>\n";
	str += "        <Phone>87772028</Phone>\n";
	str += "        <Email>gengs@163.com</Email>\n";
	str += "        <UserName>gengs</UserName>\n";
	str += "        <Password>aaaaa</Password>\n";
	str += "        <Automail>Yes</Automail>\n";
	str += "     </n:UserInfo>\n";
	str += "   </SOAP-ENV:Body>\n";
	str += "</SOAP-ENV:Envelope>";
*/
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

	xmlDoc.async = false;
	xmlDoc.loadXML( Xml );

	var oNodeList ;
	var root ;

	root = xmlDoc.documentElement ;
	if (!root)
	{
		//DispMessageInfo("Load xml overflow on changing xml to text");
		return null;
	}
	
	oNodeList = root.childNodes;
	if (!oNodeList)
	{
		return null;
	}

	var text = "";
	var xml  = "";
	for (var i=0;i<oNodeList.length ; i++)
	{
		text += oNodeList(i).text;
		xml  += oNodeList(i).xml;
	}
	// free memory
	xml = null
return (text)
}

function SignXml( Xml , SignValue )
{
	var SignInfoElem , SignValueElem ;

	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( Xml );
	if (!xmlDoc.documentElement)
	{
		//DispMessageInfo("Load xml overflow on signing xml");
		return null
	}

	SignInfoElem		= xmlDoc.createElement(SOAP_REQ_HEADER_SIGNATURE_TAG);		//"SignInfo"
	SignValueElem		= xmlDoc.createElement(SOAP_REQ_HEADER_SIGNATURE_VALUE_TAG);//"SignValue"
	SignValueElem.text	= SignValue;
	SignInfoElem.appendChild( SignValueElem );


	var objNode;
	objNode = xmlDoc.selectSingleNode("//" + SOAP_REQ_HEADER_TAG);//SOAP-ENV:Header	// for more to see "XPath Examples"
	if (!objNode)
	{
		//DispMessageInfo("Not found node - <" + SOAP_REQ_HEADER_TAG + ">");
		//return null;
		var HeaderElem = xmlDoc.createElement( SOAP_REQ_HEADER_TAG )
		HeaderElem.appendChild( SignInfoElem )

		var objEnvelopeNode = xmlDoc.selectSingleNode("//" + SOAP_ENVELOPE_ELEMENT_TAG);	//SOAP-ENV:Envelope
		if (!objEnvelopeNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_ENVELOPE_ELEMENT_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		var objBodyNode = xmlDoc.selectSingleNode("//" + SOAP_RET_BODY_TAG )	//SOAP-ENV:Body
		if (!objBodyNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_RET_BODY_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		// 将创建的Header添加到Envelope节点Body子节点前面
		objEnvelopeNode.insertBefore( HeaderElem , objBodyNode )
	}
	else
	{
		objNode.appendChild( SignInfoElem )
	}

	var root = xmlDoc.documentElement;
	if (!root) return null;

	return ( root.xml )
}


// 该函数已经作废
function GetUTCDateTime()
{
	var strDate = new Array()
	var objDate = new Date()

	strDate["Create"]  =  objDate.getUTCFullYear()	+ "-";
	strDate["Create"] += (objDate.getUTCMonth() + 1)+ "-";
	strDate["Create"] +=  objDate.getUTCDate()		+ " ";
	strDate["Create"] +=  objDate.getUTCHours()		+ ":";
	strDate["Create"] +=  objDate.getUTCMinutes()	+ ":"
	strDate["Create"] +=  objDate.getUTCSeconds()

	objDate.setUTCMinutes( objDate.getUTCMinutes() + g_ExpireSeconds / 60 )

	strDate["Expire"]  =  objDate.getUTCFullYear()	+ "-";
	strDate["Expire"] += (objDate.getUTCMonth() + 1)+ "-";
	strDate["Expire"] +=  objDate.getUTCDate()		+ " ";
	strDate["Expire"] +=  objDate.getUTCHours()		+ ":";
	strDate["Expire"] +=  objDate.getUTCMinutes()	+ ":"
	strDate["Expire"] +=  objDate.getUTCSeconds()


   return( strDate )
}
function StampXml( Xml , CreateUTCDateTime , ExpireUTCDateTime , DateTimeFormat )
{
	var TimestampElem , CreatedElem , ExpiredElem , TimeFormatElem ;

	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( Xml );
	var root = xmlDoc.documentElement;
	if (!root) return null;

	TimestampElem		= xmlDoc.createElement(SOAP_REQ_HEADER_TIMESTAMP_TAG);			//"Timestamp"
	CreatedElem			= xmlDoc.createElement(SOAP_REQ_HEADER_TIMESTAMP_CREATE_TAG);	//"Created"
	ExpiredElem			= xmlDoc.createElement(SOAP_REQ_HEADER_TIMESTAMP_EXPIRE_TAG);	//"Expires"
	TimeFormatElem		= xmlDoc.createElement(SOAP_REQ_HEADER_TIMESTAMP_FORMAT_TAG);	//"Format"

	CreatedElem.text	= CreateUTCDateTime
	ExpiredElem.text	= ExpireUTCDateTime
	TimeFormatElem.text	= DateTimeFormat

	TimestampElem.appendChild( CreatedElem )
	TimestampElem.appendChild( ExpiredElem )
	TimestampElem.appendChild( TimeFormatElem )


	var objNode;
	objNode = xmlDoc.selectSingleNode("//" + SOAP_REQ_HEADER_TAG );	//SOAP-ENV:Header// for more to see "XPath Examples"
	if (!objNode)
	{
		//DispMessageInfo("Not found node - <" + SOAP_REQ_HEADER_TAG + ">");
		//return (null)
		var HeaderElem = xmlDoc.createElement( SOAP_REQ_HEADER_TAG )
		HeaderElem.appendChild( TimestampElem )

		var objEnvelopeNode = xmlDoc.selectSingleNode("//" + SOAP_ENVELOPE_ELEMENT_TAG);	//SOAP-ENV:Envelope
		if (!objEnvelopeNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_ENVELOPE_ELEMENT_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		var objBodyNode = xmlDoc.selectSingleNode("//" + SOAP_RET_BODY_TAG )	//SOAP-ENV:Body
		if (!objBodyNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_RET_BODY_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		// 将创建的Header添加到Envelope节点Body子节点前面
		objEnvelopeNode.insertBefore( HeaderElem , objBodyNode )
	}
	else
	{
		objNode.appendChild( TimestampElem );
	}


	return ( root.xml )
}
function GetInfoByTagFromXml( XML , TagName )
{
    // 2006-10-25
	if (typeof(XML) == "object")
		XML = XML.xml;


	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		//DispMessageInfo("Load xml overflow on getting info by tag from xml");
		return (null)
	}
	var objNode = xmlDoc.selectSingleNode("//" + TagName );//"faultstring"	// for more to see "XPath Examples"
	if (!objNode) return (null)
	var Info = objNode.text;
	xmlDoc = null;
return (Info)
}


function GetOrgXmlAndSign( Xml )
{
	var OrgXmlAndSign = new Array()
	var SignNodesList;

	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
	xmlDoc.async = false
	xmlDoc.loadXML( Xml )

	// <SOAP-ENV:Header xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
	//	<Timestamp><Created>2004-4-7 15:29:8</Created><Expires>2004-4-7 15:34:8</Expires><Format>UTC</Format></Timestamp><SignInfo><SignValue>6omcw77ePQpOOvPXN1aFMLQE7wkOdEJrmyH1a3laGriZ3QMpCyFQ2vklAgGkucwH/4yJ2VfV/nlZLJ809HTuIYAyhnOEwty93dReFx4l2l/ubZH+skFJnfminWM42/b82hW49PgOn/6W7SHsy84puSWpRf8c9FkiuNcw84Vmenk=</SignValue></SignInfo></SOAP-ENV:Header>
	var HeaderObjNode ;
	HeaderObjNode = xmlDoc.selectSingleNode("//" + SOAP_REQ_HEADER_TAG);//SOAP-ENV:Header

	var SignObjNode ;
	SignObjNode  = xmlDoc.selectSingleNode("//" + SOAP_REQ_HEADER_SIGNATURE_TAG);//SignInfo

	if (( HeaderObjNode ) && ( SignObjNode ) )
	{
		HeaderObjNode.removeChild( SignObjNode );

		OrgXmlAndSign["Xml"]   = xmlDoc.xml;
		// <SignInfo><SignValue>6omcw77ePQpOOvPXN1aF.....</SignValue></SignInfo>
		SignNodesList = SignObjNode.childNodes 
		OrgXmlAndSign["Sign"]  = SignNodesList(0).text
		OrgXmlAndSign["Error"] = ""
	}
	else
	{
		OrgXmlAndSign["Xml"]  = ""
		OrgXmlAndSign["Sign"] = ""
		OrgXmlAndSign["Error"] = "Select node \"" + SOAP_REQ_HEADER_TAG + "\" or \"" + SOAP_REQ_HEADER_SIGNATURE_TAG + "\" error for soap client xml"
	}
	xmlDoc = null

return ( OrgXmlAndSign )
}
function GetXmlSingleNodeText( Xml , NodeTag )
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
	xmlDoc.async = false;
	xmlDoc.loadXML( Xml );
	if (!xmlDoc) return(null)
	var objNode = xmlDoc.selectSingleNode("//" + NodeTag )
	if (!objNode) return (null)
	var text = objNode.text
	xmlDoc = null

return (text)
}
function GetDSPInfoFromSoapReturnXml( Xml )
{
//	var SOAP_RET_HEADER_USER_CERT_ISSUER_SUBJECT_KEYWORD_TAG 
//												 = "UserCertIssuerSubjectKeyWord"
//
//	var SOAP_ENVELOPE_ELEMENT_TAG				 = "SOAP-ENV:Envelope"
//
//	var SOAP_RET_BODY_TAG                        = "SOAP-ENV:Body"
//	var SOAP_RET_BODY_RESULT_TAG                 = "Result"
//	var SOAP_RET_BODY_REG_RESULT_TAG             = "RegResult"
//	var SOAP_RET_BODY_DRIVER_SERVICE_URL_TAG     = "GetSvcCertInfoURL"	//"DriverServiceURL"
//	var SOAP_RET_BODY_SERVICE_CERT_URL_TAG       = "UserCertIssuerURL"	//"CertServiceURL"
//	var SOAP_RET_BODY_MATCHING_DEVICE_ID_TAG     = "MatchingDeviceID"
//	//var SOAP_RET_BODY_DRIVER_VERSION_TAG         = "DriverVersion"
//	//var SOAP_RET_BODY_DRIVER_DATE_TAG            = "DriverDate"
//	//var SOAP_RET_BODY_DRIVER_PROVIDER_TAG        = "DriverProvider"
//	//var SOAP_RET_BODY_DRIVER_SIZE_TAG            = "DriverSize"
//	var SOAP_RET_BODY_BUY_NUMBER_TAG             = "BuyNumber"
//	var SOAP_RET_BODY_IF_SUBMIT_ALL_DEVICE_TAG   = "IfSubmitAllDeviceInfo"

	var DSPInfo = new Array()
	var Tmp
	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_DRIVER_SERVICE_URL_TAG )
	DSPInfo["DrvAspUrl"] = ( Tmp ) ? Tmp : "" ;
	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_SERVICE_CERT_URL_TAG )
	DSPInfo["CerAspUrl"] = ( Tmp ) ? Tmp : "" ;
	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_MATCHING_DEVICE_ID_TAG )
	DSPInfo["DeviceID" ] = ( Tmp ) ? Tmp : "" ;
	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_HEADER_USER_CERT_ISSUER_SUBJECT_KEYWORD_TAG )
	DSPInfo["Issuer"   ] = ( Tmp ) ? Tmp : "" ;
//	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_DRIVER_VERSION_TAG )
//	DSPInfo["DrvVer"   ] = ( Tmp ) ? Tmp : "" ;
//	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_DRIVER_DATE_TAG )
//	DSPInfo["DrvDate"  ] = ( Tmp ) ? Tmp : "" ;
//	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_DRIVER_PROVIDER_TAG )
//	DSPInfo["DrvVendor"] = ( Tmp ) ? Tmp : "" ;
//	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_DRIVER_SIZE_TAG )
//	DSPInfo["DrvSize"  ] = ( Tmp ) ? Tmp : "" ;
	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_BUY_NUMBER_TAG )
	DSPInfo["BuyNumber"   ] = ( Tmp ) ? Tmp : "" ;
	Tmp = GetInfoByTagFromXml( Xml, SOAP_RET_BODY_IF_SUBMIT_ALL_DEVICE_TAG )
	DSPInfo["SubmitAllDeviceFlag"   ] = ( Tmp ) ? Tmp : "" ;

return (DSPInfo)
}
///////////////////////////////////////////////////////////////////////////////////
function SignStampEncryptXMLEx( SoapGetCommCertURL , SoapGetTimeURL , SoapRequestXML , CertContext , CertLocation )
{
	var SoapFinalXMLInfo = new Array()

//	SetCurProcessBeginEndPercent( 0 , 25 )
//	DispProgressInfo(0)
//	DrvCert.UIRefresh()

	var EndURL = SoapGetCommCertURL	//"dispatch.e-drivers.cn/soap/GetCommCert.asp"
	var CommCertInfo = GetServerCommCert( EndURL )
	if (!CommCertInfo["Success"])
	{
		SoapFinalXMLInfo["Success"]		= false
		SoapFinalXMLInfo["ErrorInfo"]	= CommCertInfo["ErrorInfo"]
		SoapFinalXMLInfo["Xml"]			= ""
		return (SoapFinalXMLInfo)
	}
//	SetCurProcessBeginEndPercent( 25 , 50 )
//	DispProgressInfo(0)
//	DrvCert.UIRefresh()


	var EncryptedXMLInfo = EncryptXMLByCert( SoapRequestXML , CommCertInfo["CommCert"] )
	if (!EncryptedXMLInfo["Success"])
	{
		SoapFinalXMLInfo["Success"]		= false
		SoapFinalXMLInfo["ErrorInfo"]	= EncryptedXMLInfo["ErrorInfo"]
		SoapFinalXMLInfo["Xml"]			= ""
		return (SoapFinalXMLInfo)
	}
//	SetCurProcessBeginEndPercent( 50 , 100)
//	DispProgressInfo(0)
//	DrvCert.UIRefresh()

	SoapFinalXMLInfo = StampAndSignXmlEx( SoapGetTimeURL , EncryptedXMLInfo["Xml"] , CertContext , CertLocation )

//	SetCurProcessBeginEndPercent( 100 )
//	DispProgressInfo(100)
//	DrvCert.UIRefresh()

	return (SoapFinalXMLInfo)
}
///////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////
function GetServerCommCert( URL )
{

	SoapRequestXML = "";
	SoapRequestXML += "<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"no\"?>\n";
	SoapRequestXML += "<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">\n";
	SoapRequestXML += "  <SOAP-ENV:Body>\n";
	SoapRequestXML += "    <n:" + SOAP_REQ_GET_COMM_CERT_MATHOD_NAME + " xmlns:n=\"http://e-drivers.cn/soap/\">\n";
	SoapRequestXML += "    </n:" + SOAP_REQ_GET_COMM_CERT_MATHOD_NAME + ">\n";
	SoapRequestXML += "  </SOAP-ENV:Body>\n";
	SoapRequestXML += "</SOAP-ENV:Envelope>";


	ReturnXML = DrvCert.SoapClientRequest( URL , SoapRequestXML )
	
	var ErrorInfo
	var CertInfo = new Array()
	var CommCert = GetInfoByTagFromXml( ReturnXML , SOAP_RET_GET_COMM_CERT_TAG )	// "CommCert"
	if ( (CommCert == "")  || !CommCert )
	{
		ErrorInfo = GetInfoByTagFromXml( ReturnXML , SOAP_RET_ERROR_STRING_TAG )
		CertInfo["Success"] = false
		CertInfo["ErrorInfo"] = ErrorInfo
		CertInfo["CommCert"] = ""
		return (CertInfo)
	}
	else
	{
		CertInfo["Success"] = true
		CertInfo["ErrorInfo"] = ""
		CertInfo["CommCert"] = CommCert
		return (CertInfo)
	}
}
///////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////
function EncryptXMLByCert( SoapRequestXML , CommCert )
{
	var XMLInfo = new Array()

	var EncryptedDataInBASE64 = DrvCert.EncryptBstrStringByCert( SoapRequestXML , CommCert )
	if (!EncryptedDataInBASE64) {alert( "Encrypt XML failed("+DrvCert.ErrorString+")");return}
	var EncryptedXML = ""
	EncryptedXML += '<?xml version="1.0" encoding="UTF-16" standalone="no"?>\n';
	EncryptedXML += '<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">\n'
	EncryptedXML += ' <SOAP-ENV:Header xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">\n'
	EncryptedXML += '  <' + SOAP_REQ_HEADER_ENCRYPT_CERT_INFO_TAG + '>\n'
	EncryptedXML += '   <' + SOAP_REQ_HEADER_ENCRYPT_CERT_CONTENT_TAG + '>'+ CommCert + '</' + SOAP_REQ_HEADER_ENCRYPT_CERT_CONTENT_TAG + '>\n'
	EncryptedXML += '  </' + SOAP_REQ_HEADER_ENCRYPT_CERT_INFO_TAG + '>\n'
	EncryptedXML += ' </SOAP-ENV:Header>\n'
	EncryptedXML += ' <SOAP-ENV:Body>\n'
	EncryptedXML += '  <' + SOAP_REQ_BODY_ENCRYPT_METHOD_NAME + '>\n' 
	EncryptedXML += '   <' + SOAP_REQ_BODY_ENCRYPT_DATA_TAG + '>' + EncryptedDataInBASE64 + '</' + SOAP_REQ_BODY_ENCRYPT_DATA_TAG + '>\n'
	EncryptedXML += '  </' + SOAP_REQ_BODY_ENCRYPT_METHOD_NAME + '>\n' 
	EncryptedXML += ' </SOAP-ENV:Body>\n'
	EncryptedXML += '</SOAP-ENV:Envelope>\n'

	XMLInfo["Success"]   = true
	XMLInfo["ErrorInfo"] = ""
	XMLInfo["Xml"] = EncryptedXML

	EncryptedDataInBASE64 = null
return ( XMLInfo )
}
///////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////
function StampAndSignXmlEx( SoapGetTimeURL , SoapRequestXML , CertContext , CertLocation )//CertLocation : 1:Current_user_location 2:Local_machine_location
{
	var ReturnXmlInfo = new Array()

	var SetSignCertXml = SetXmlSignCertInfo( SoapRequestXML , CertContext , CertLocation )
	if ( !SetSignCertXml )
	{
		ReturnXmlInfo["Error"] = "设置XML头签名证书信息失败"
		ReturnXmlInfo["Success"] = false; 
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}
	
	var StampTime = new Array()

	StampTime = GetStampTimeEx( SoapGetTimeURL )
	var CreateStampTime = StampTime["Create"]
	var ExpireStampTime = StampTime["Expire"]
	var DateTimeFormat    = "VirtualTime"

	var PackagedXml = StampXml( SetSignCertXml , CreateStampTime , ExpireStampTime , DateTimeFormat )
	if ( !PackagedXml )
	{
		ReturnXmlInfo["Error"] = "签署XML时间戳失败"
		ReturnXmlInfo["Success"] = false; 
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}

	var SignData = XmlToText( PackagedXml );
	if (!SignData)
	{
		ReturnXmlInfo["Error"] = "转换XML内容到文本格式失败"
		ReturnXmlInfo["Success"] = false; 
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}

	var SignValue = DrvCert.SignDataInString( CertContext , SignData );
	if ( !SignValue )
	{
		ReturnXmlInfo["Error"] = "获取XML内容签名信息失败"+DrvCert.ErrorString
		ReturnXmlInfo["Success"] = false; 
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}
	var SignedXml = SignXml( PackagedXml , SignValue );
	if ( !SignedXml )
	{
		ReturnXmlInfo["Error"] = "添加签名信息到XML失败"
		ReturnXmlInfo["Success"] = false
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}
	ReturnXmlInfo["Success"] = true
	ReturnXmlInfo["Xml"] = SignedXml
	ReturnXmlInfo["Error"] = ""
return (ReturnXmlInfo)
}
///////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////
function SetXmlSignCertInfo( Xml , CertContext , CertLocation )
{


	var CertProvider = DrvCert.OpenCertProvider( CertContext , CertLocation);//1:Current_user_location 2:Local_machine_location
	if (!CertProvider) 
	{
		//DispProgressInfo( 100 , "Open cert provider failed(cert handle=" + CertContext + ")"); 
		return null
	}

	var CertKeyPhysicalID = DrvCert.GetCertKeyPhysicalID( CertProvider , CertLocation);//1:Current_user_location 2:Local_machine_location
	if ( CertKeyPhysicalID == "" )
	{
		//DispProgressInfo( 100 , "Get CertKeyPhysicalID error \n" + CertKeyPhysicalID)
		return null
	}
	var CertContent = DrvCert.GetCertContent( CertContext )

	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( Xml );
	var root = xmlDoc.documentElement;
	if (!root) return null

//	SoapRequestXML += "      <CertInfo>\n";
//	SoapRequestXML += "         <CertContent>"		+ CertContent		+ "</CertContent>\n";
//	SoapRequestXML += "         <CertPhysicalID>"	+ CertKeyPhysicalID + "</CertPhysicalID>\n";
//	SoapRequestXML += "         <CertIssuer>"		+ CertIssuer		+ "</CertIssuer>\n";
//	SoapRequestXML += "      </CertInfo>\n";
	var CertInfoElem		= xmlDoc.createElement(SOAP_REQ_HEADER_SIGN_CERT_INFO_TAG)

	var CertContentElem		= xmlDoc.createElement(SOAP_REQ_HEADER_SIGN_CERT_CONTENT_TAG)
	CertContentElem.text	= CertContent
	
	var CertPhysicalIDElem  = xmlDoc.createElement(SOAP_REQ_HEADER_SIGN_CERT_PHYSICALID_TAG)
	CertPhysicalIDElem.text	= CertKeyPhysicalID
	
	CertInfoElem.appendChild( CertContentElem )
	CertInfoElem.appendChild( CertPhysicalIDElem )


	var objNode;
	objNode = xmlDoc.selectSingleNode("//" + SOAP_REQ_HEADER_TAG) //SOAP-ENV:Header
	if (!objNode)
	{
		// 如果XML没有Header部分，就创建
		var HeaderElem = xmlDoc.createElement( SOAP_REQ_HEADER_TAG )
		HeaderElem.appendChild( CertInfoElem )

		var objEnvelopeNode = xmlDoc.selectSingleNode("//" + SOAP_ENVELOPE_ELEMENT_TAG)	//SOAP-ENV:Envelope
		if (!objEnvelopeNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_ENVELOPE_ELEMENT_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		var objBodyNode = xmlDoc.selectSingleNode("//" + SOAP_RET_BODY_TAG )	//SOAP-ENV:Body
		if (!objBodyNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_RET_BODY_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		// 将创建的Header添加到Envelope节点Body子节点前面
		objEnvelopeNode.insertBefore( HeaderElem , objBodyNode )
	}
	else
	{
		objNode.appendChild( CertInfoElem )
	}

	if ( CertProvider ) DrvCert.CloseCertProvider( CertProvider )
return ( root.xml )
}
///////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////
function GetStampTimeEx( URL , ServerTime )
{
	var ServerVirtualTime , LocalTime
	var StampDate = new Array()
	var objDate = new Date()

	if (!ServerTime)
	{
		// 只在从未调用过/soap/GetTime.asp时执行一次，以后都按上次的结果来用
		// 但由于DSP可以有多个，每个的虚时间都可能不同，因此取消该优化措施
		//if (g_TimeOffset == null)
		{
			//var Hostname = location.hostname
			//if (Hostname == "") Hostname = ServerName.value
			//var EndURI = Hostname + SOAP_URL_GET_TIME
			var EndURI = URL
			ServerVirtualTime = GetServerTime( EndURI )
		}
	}
	else
	{
		ServerVirtualTime = ServerTime
	}


	LocalTime = objDate.getTime()
	//g_TimeOffset = 3599859
	g_TimeOffset = LocalTime - ServerVirtualTime

	StampDate["Create"] = objDate.getTime() - g_TimeOffset
	StampDate["Expire"] = StampDate["Create"] + g_ExpireSeconds * 1000
return ( StampDate )
}
///////////////////////////////////////////////////////////////////////////////////
function GetServerTime( URL )
{
	var RequestXml = ""
	RequestXml += '<?xml version="1.0" encoding="UTF-16" standalone="no"?>\n';
	RequestXml += '<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">'
	RequestXml += ' <SOAP-ENV:Body>'
	RequestXml += '  <' + SOAP_REQ_TIME_METHOD_NAME + '></' + SOAP_REQ_TIME_METHOD_NAME + '>'
	RequestXml += ' </SOAP-ENV:Body>'
	RequestXml += '</SOAP-ENV:Envelope>'

	var ReturnXML = DrvCert.SoapClientRequest( URL , RequestXml );
	var ServerVirtualTime = GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_DATE_TIME_TAG )
return ( ServerVirtualTime )
}
function XmlDencoding( XmlText )
{
    if ( XmlText )
    {
        var text = XmlText
        // 替换“&”字符为“&amp;”；替换“<”为“&lt;”；替换“>”为“&gt;”
        // 替换“'”为“&apos;”；替换“"”为“&quot;”；替换“#”为“&#35”
        text = text.replace(/(&amp;)/gi  ,"&");
        text = text.replace(/(&lt;)/gi   ,"<");
        text = text.replace(/(&gt;)/gi   ,">");
        text = text.replace(/(&apos;)/gi ,"'");
        text = text.replace(/(&quot;)/gi ,'"');
        text = text.replace(/(&#35;)/gi   ,"#");
        return (text)
    }
    else
    {
        return ( XmlText )
    }
}
function XmlEncoding( text )
{
    if ( text )
    {
        var XmlText = text
        // 替换“&”为“&amp;”
        // 替换“<”为“&lt;”
        // 替换“>”为“&gt;”
        // 替换“'”为“&apos;”
        // 替换“"”为“&quot;”
        // 替换“#”为“&#35”
        XmlText = XmlText.replace(/(\&)/gi  ,"&amp;" );
        XmlText = XmlText.replace(/(\<)/gi  ,"&lt;"  );
        XmlText = XmlText.replace(/(\>)/gi  ,"&gt;"  );
        XmlText = XmlText.replace(/(\')/gi  ,"&apos;");
        XmlText = XmlText.replace(/(\")/gi  ,"&quot;");
		// 2006-9-25
        //XmlText = XmlText.replace(/(\#)/gi  ,"&#35"  );
		XmlText = XmlText.replace(/(\#)/gi  ,"&#35;"  );
        return (XmlText)
    }
    else
    {
        return ( text )
    }
}

-->