//Copyright 2005-2008 e-Software , All Rights Reserved.
//Written by Gengjian. Email:gengs@163.com
//**Start Encode**
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"

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"	
var SOAP_RET_BODY_SERVICE_CERT_URL_TAG       = "UserCertIssuerURL"	
var SOAP_RET_BODY_MATCHING_DEVICE_ID_TAG     = "MatchingDeviceID"




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_BUY_NUMBER_TAG		= "BuyNumber"















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"















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"


















var SOAP_REQ_HEADER_ENCRYPT_CERT_INFO_TAG	 = "EncryptCertInfo"
var SOAP_REQ_HEADER_ENCRYPT_CERT_CONTENT_TAG = "CertContent"


var SOAP_REQ_GET_COMM_CERT_MATHOD_NAME       = "GetCommCert"
var SOAP_RET_GET_COMM_CERT_TAG				 = "CommCert"




var SOAP_REQ_BODY_ENCRYPT_METHOD_NAME        = "EncryptedXML"
var SOAP_REQ_BODY_ENCRYPT_DATA_TAG			 = "EncryptedXMLInBASE64"




var g_ExpireSeconds = 5*60 ;


function GetUsertCertFromSoapRetXML( XML )
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		
		return null
	}
	var objNode = xmlDoc.selectSingleNode("\/\/" + SOAP_RET_RESULT_USER_CERT_TAG);
	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)
	{
		
		return null
	}
	var objNode = xmlDoc.selectSingleNode("\/\/" + SOAP_RET_ERROR_STRING_TAG);
	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)
	{
		
		return null
	}
	var objNode = xmlDoc.selectSingleNode("\/\/" + SOAP_RET_RESULT_DSP_CERT_TAG);
	if (!objNode) return (null)
	var Cert = objNode.text;
	xmlDoc = null;
return (Cert);
}

function XmlToText( Xml )
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");

	xmlDoc.async = false;
	xmlDoc.loadXML( Xml );

	var oNodeList ;
	var root ;

	root = xmlDoc.documentElement ;
	if (!root)
	{
		
		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;
	}
	
	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)
	{
		
		return null
	}

	SignInfoElem		= xmlDoc.createElement(SOAP_REQ_HEADER_SIGNATURE_TAG);		
	SignValueElem		= xmlDoc.createElement(SOAP_REQ_HEADER_SIGNATURE_VALUE_TAG);
	SignValueElem.text	= SignValue;
	SignInfoElem.appendChild( SignValueElem );


	var objNode;
	objNode = xmlDoc.selectSingleNode("\/\/" + SOAP_REQ_HEADER_TAG);
	if (!objNode)
	{
		
		
		var HeaderElem = xmlDoc.createElement( SOAP_REQ_HEADER_TAG )
		HeaderElem.appendChild( SignInfoElem )

		var objEnvelopeNode = xmlDoc.selectSingleNode("\/\/" + SOAP_ENVELOPE_ELEMENT_TAG);	
		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 )	
		if (!objBodyNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_RET_BODY_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		
		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);			
	CreatedElem			= xmlDoc.createElement(SOAP_REQ_HEADER_TIMESTAMP_CREATE_TAG);	
	ExpiredElem			= xmlDoc.createElement(SOAP_REQ_HEADER_TIMESTAMP_EXPIRE_TAG);	
	TimeFormatElem		= xmlDoc.createElement(SOAP_REQ_HEADER_TIMESTAMP_FORMAT_TAG);	

	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 );	
	if (!objNode)
	{
		
		
		var HeaderElem = xmlDoc.createElement( SOAP_REQ_HEADER_TAG )
		HeaderElem.appendChild( TimestampElem )

		var objEnvelopeNode = xmlDoc.selectSingleNode("\/\/" + SOAP_ENVELOPE_ELEMENT_TAG);	
		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 )	
		if (!objBodyNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_RET_BODY_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		
		objEnvelopeNode.insertBefore( HeaderElem , objBodyNode )
	}
	else
	{
		objNode.appendChild( TimestampElem );
	}


	return ( root.xml )
}
function GetInfoByTagFromXml( XML , TagName )
{
    
	if (typeof(XML) == "object")
		XML = XML.xml;


	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		
		return (null)
	}
	var objNode = xmlDoc.selectSingleNode("\/\/" + TagName );
	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 )

	
	
	var HeaderObjNode ;
	HeaderObjNode = xmlDoc.selectSingleNode("\/\/" + SOAP_REQ_HEADER_TAG);

	var SignObjNode ;
	SignObjNode  = xmlDoc.selectSingleNode("\/\/" + SOAP_REQ_HEADER_SIGNATURE_TAG);

	if (( HeaderObjNode ) && ( SignObjNode ) )
	{
		HeaderObjNode.removeChild( SignObjNode );

		OrgXmlAndSign["Xml"]   = xmlDoc.xml;
		
		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 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_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()





	var EndURL = SoapGetCommCertURL	
	var CommCertInfo = GetServerCommCert( EndURL )
	if (!CommCertInfo["Success"])
	{
		SoapFinalXMLInfo["Success"]		= false
		SoapFinalXMLInfo["ErrorInfo"]	= CommCertInfo["ErrorInfo"]
		SoapFinalXMLInfo["Xml"]			= ""
		return (SoapFinalXMLInfo)
	}





	var EncryptedXMLInfo = EncryptXMLByCert( SoapRequestXML , CommCertInfo["CommCert"] )
	if (!EncryptedXMLInfo["Success"])
	{
		SoapFinalXMLInfo["Success"]		= false
		SoapFinalXMLInfo["ErrorInfo"]	= EncryptedXMLInfo["ErrorInfo"]
		SoapFinalXMLInfo["Xml"]			= ""
		return (SoapFinalXMLInfo)
	}




	SoapFinalXMLInfo = StampAndSignXmlEx( SoapGetTimeURL , EncryptedXMLInfo["Xml"] , CertContext , CertLocation )





	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 )	
	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 )
{
	var ReturnXmlInfo = new Array()

	var SetSignCertXml = SetXmlSignCertInfo( SoapRequestXML , CertContext , CertLocation )
	if ( !SetSignCertXml )
	{
		ReturnXmlInfo["Error"] = "" + PromptArray["SoapXml.js_727_1"] + "XML" + PromptArray["SoapXml.js_727_2"] + ""
		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"] = "" + PromptArray["SoapXml.js_743_1"] + "XML" + PromptArray["SoapXml.js_743_2"] + ""
		ReturnXmlInfo["Success"] = false; 
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}

	var SignData = XmlToText( PackagedXml );
	if (!SignData)
	{
		ReturnXmlInfo["Error"] = "" + PromptArray["SoapXml.js_752_1"] + "XML" + PromptArray["SoapXml.js_752_2"] + ""
		ReturnXmlInfo["Success"] = false; 
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}

	var SignValue = DrvCert.SignDataInString( CertContext , SignData );
	if ( !SignValue )
	{
		ReturnXmlInfo["Error"] = "" + PromptArray["SoapXml.js_761_1"] + "XML" + PromptArray["SoapXml.js_761_2"] + ""+DrvCert.ErrorString
		ReturnXmlInfo["Success"] = false; 
		ReturnXmlInfo["Xml"] = ""
		return (ReturnXmlInfo);
	}
	var SignedXml = SignXml( PackagedXml , SignValue );
	if ( !SignedXml )
	{
		ReturnXmlInfo["Error"] = "" + PromptArray["SoapXml.js_769_1"] + "XML" + PromptArray["SoapXml.js_769_2"] + ""
		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);
	if (!CertProvider) 
	{
		
		return null
	}

	var CertKeyPhysicalID = DrvCert.GetCertKeyPhysicalID( CertProvider , CertLocation);
	if ( 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






	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) 
	if (!objNode)
	{
		
		var HeaderElem = xmlDoc.createElement( SOAP_REQ_HEADER_TAG )
		HeaderElem.appendChild( CertInfoElem )

		var objEnvelopeNode = xmlDoc.selectSingleNode("\/\/" + SOAP_ENVELOPE_ELEMENT_TAG)	
		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 )	
		if (!objBodyNode)
		{
			DispMessageInfo("Not found node - <" + SOAP_RET_BODY_TAG + "> & <" + SOAP_REQ_HEADER_TAG + ">, StampXml() failer");
			return null;
		}
		
		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)
	{
		
		
		
		{
			
			
			
			var EndURI = URL
			ServerVirtualTime = GetServerTime( EndURI )
		}
	}
	else
	{
		ServerVirtualTime = ServerTime
	}


	LocalTime = objDate.getTime()
	
	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
        
        
        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 && ( typeof(text) == "string" ) )
    
    {
        var XmlText = text
        
        
        
        
        
        
        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;");
		
        
		XmlText = XmlText.replace(/(\#)/gi  ,"&#35;"  );
        return (XmlText)
    }
    else
    {
        return ( text )
    }
}





var g_xmlhttp=false;
var g_XmlHttpMsgTag = "MsgTableTag"
var g_CreateMessageObjFlag = false

var g_SoapMsgTimeoutValue				= 1

function SoapXMLHttpRequest( SoapApplyURL , SoapRequestXML )
{
    var RespXml = ""
    
    
     try 
     {
        g_xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     } 
     catch (e) 
     {
        try 
        {
            g_xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (E) 
        {
            g_xmlhttp = false;
        }
     }
    if ( !g_xmlhttp ) 
    {
        return ( null )
    }


    try
    {
        
        CreateMessageObject()

        var element = document.getElementById( g_XmlHttpMsgTag ); 
        if ( element )
        {
            SoapDispMessageInfo(   "" + PromptArray["SoapXml.js_1001_1"] + "..."   )
        }

        g_xmlhttp.Open( "POST", "http:\/\/" + SoapApplyURL , false )
        g_xmlhttp.setRequestHeader("Content-Type", "text/xml-SOAP" )

        g_xmlhttp.onreadystatechange   =   getReady   
        
        g_xmlhttp.send( SoapRequestXML )
        RespXml = g_xmlhttp.responseXML

    }
    catch( err ) 
    {
        var errInfo = "XMLHttpRequest() error - " + err.description + " (0x" + err.number.toString(16) + ")"
    }
    if (typeof(RespXml) == "object") RespXml = RespXml.xml


return ( RespXml )
}

function   getReady()   
{   
    if(g_xmlhttp.readyState==4)   
    {   
        if(g_xmlhttp.status==200)   
        {   
            var element = document.getElementById( g_XmlHttpMsgTag ); 
            if ( element ) SoapHideMessageInfo()
        }   
        else   
        {   
        }
    }  
}   


function GetTextByTagFromXml( XML , TagName )
{
    
	
	


	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		return (null)
	}
	var objNode = xmlDoc.selectSingleNode("\/\/" + TagName );
	if (!objNode) return (null)
	var Info = objNode.text;
	xmlDoc = null;
return (Info)
}



function CreateMessageObject()
{

    
    if ( !g_CreateMessageObjFlag )
    {
	    var oDiv=window.document.createElement("<DIV ID='" + g_XmlHttpMsgTag + "'></DIV>");
	    window.document.body.appendChild(oDiv);
        
        g_CreateMessageObjFlag = true
    }

	var PromptTableHTML = "";
	PromptTableHTML += '<!-- A DHTML alert box -->'
	PromptTableHTML += '<Table bgcolor="#DDDDC8" border=0 cellspacing=0 cellpadding=0 ID="MsgTable" style="display:none; position:absolute;">'
	PromptTableHTML += '<TR>'
	PromptTableHTML += '	<TD BgColor=#000040 height=0 colspan=3></TD>'
	PromptTableHTML += '</TR>'
	PromptTableHTML += '<TR>'
	PromptTableHTML += '	<TD BgColor=#000040 width=1></TD>'
	PromptTableHTML += '	<TD bgcolor="#000000" valign="bottom">'
	PromptTableHTML += '      <p align="right"><input type="button" value="><" style="letter-spacing: -2; font-size: 6pt; color: black" onclick="SoapHideMessageInfo()" onMouseMove="this.style.color=\'red\';this.style.cursor=\'hand\';" onMouseOut="this.style.color=\'black\';this.style.fontStyle=\'normal\';" ></p>'
	PromptTableHTML += '    </TD>'
	PromptTableHTML += '	<TD BgColor=#000040 width=1></TD>'
	PromptTableHTML += '</TR>'
	PromptTableHTML += '<TR>'
	PromptTableHTML += '	<TD BgColor=#000040 height=0 colspan=3></TD>'
	PromptTableHTML += '</TR>'
	PromptTableHTML += '<TR>'
	PromptTableHTML += '	<TD BgColor=#000040 width=1></TD>'
	PromptTableHTML += '	<TD><br>'
	PromptTableHTML += '		<CENTER>'
	PromptTableHTML += '			<table width=100% height=100%><tr><td width=8></td><td><Span ID="MsgTag"></Span></td><td width=8></td></tr></table>'
	PromptTableHTML += '		</CENTER>'
	PromptTableHTML += '	  <br>'
	PromptTableHTML += '	</TD>'
	PromptTableHTML += '	<TD BgColor=#000040 width=1></TD>'
	PromptTableHTML += '</TR> '
	PromptTableHTML += '<TR>'
	PromptTableHTML += '	<TD BgColor=#000040 height=0 colspan=3></TD>'
	PromptTableHTML += '</TR>'
	PromptTableHTML += '</Table>'

    
	
    
    MsgTableTag.innerHTML = PromptTableHTML
}   
    
function SoapDispMessageInfo( sMessage )
{
    
	MsgTag.innerHTML = sMessage

    MsgTable.style.display='';
	window.status = sMessage;

    
    
    
	
    
	
    
    
    if ( window.document.body.scrollTop == 0 )
    {
        MsgTable.style.pixelTop  = (window.document.documentElement.clientHeight - MsgTable.clientHeight ) / 2 + (window.document.documentElement.scrollTop ) 
        MsgTable.style.pixelLeft = (window.document.documentElement.clientWidth  - MsgTable.clientWidth  ) / 2 + (window.document.documentElement.scrollLeft)
    }
    
    
    
    else
    {
        MsgTable.style.pixelTop  = (window.document.body.clientHeight - MsgTable.clientHeight ) / 2 + (window.document.body.scrollTop ) 
        MsgTable.style.pixelLeft = (window.document.body.clientWidth  - MsgTable.clientWidth  ) / 2 + (window.document.body.scrollLeft)
    }

    
    window.setTimeout("StartDisp();",g_SoapMsgTimeoutValue);
}

function StartDisp()
{
    
    window.setTimeout("SoapHideMessageInfo();",g_SoapMsgTimeoutValue);
}
function SoapHideMessageInfo() 
{
	window.status="";
	MsgTable.style.display='none';
}

function GetXmlByTagFromXml( XML , TagName )
{
    
	
	


	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async = false;
	xmlDoc.loadXML( XML ) ; 
	if (!xmlDoc.documentElement)
	{
		return (null)
	}
	var objNode = xmlDoc.selectSingleNode("\/\/" + TagName );
	if (!objNode) return (null)
	var Info = objNode.xml;
	xmlDoc = null;
return (Info)
}
