//Copyright 2005-2008 e-Software , All Rights Reserved.
//Written by Gengjian. Email:gengs@163.com
//**Start Encode**
var g_TestingInfoDisp = false

var g_TimeOffset = null

var USER_CERT_ISSUER_NAME_E_DRIVERS_CN						= "e-drivers.cn"	



var HTML_URL_PROMPT_USER_WILL_SEND_OUT_DEVICE_INFO			= "Prompt-1.htm"
										

var SOAP_URL_AUTO_REG_NEW_USER								= "/html/AutoRegUser.htm"
var SOAP_URL_DISPATCH_DSP									= "/soap/DispatchDSP.asp"
var SOAP_URL_GET_TIME										= "/soap/GetTime.asp"
var SOAP_URL_GET_COMM_CERT									= "/soap/GetCommCert.asp"

var SOAP_URL_GET_DP_KEY										= "/soap/GetDPKey.asp"

var SOAP_REQ_GET_DSP_INFO_MATHOD_NAME						= "GetDSPInfo"

var SOAP_REQ_ISSUE_SVC_CERT_MATHOD_NAME						= "IssueSvcCert"
var SOAP_REQ_ISSUE_SVC_CERT_PARAMETER_DEPLOY_INFO_TAG		= "DeployInfo"
var SOAP_REQ_ISSUE_SVC_CERT_PARAMETER_DEPLOY_NUMBER_TAG		= "DeployNumber"

var SOAP_REQ_DOWNLOAD_DRIVER_MATHOD_NAME					= "DownloadDriver"
var SOAP_REQ_DOWNLOAD_DRIVER_PARAMETER_DEPLOY_NUMBER_TAG	= "DeployNumber"


var SOAP_RET_ERROR_STRING_TAG			= "faultstring"


function IsObjectInstalled( Object )
{
	if(typeof(Object) == "object")
	{
		if( (Object.object != null) )
		{
			
			return true;
		}
	}
return false
}

function SoapAcquireDSPAndDrvInfo( row )
{

	var DSPInfo = new Array()
	
	if (!IsObjectInstalled(DrvCert)) { DSPInfo["Success"] = false; return (DSPInfo);}
	if (!IsObjectInstalled(DrvInst)) { DSPInfo["Success"] = false; return (DSPInfo);}

	var EndURI = "";
	var AlertInfo="Testing info:\n";
	var SoapRequestXML = "";
	var ReturnXML="";

	CreateDymanicDocElement( "newElement" )





	
	SetCurProcessBeginEndPercent( 0 , 5 )
	
	DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_93_1"] + "...")
	DrvCert.UIRefresh()
	
	
	var IssuerNameSubString = USER_CERT_ISSUER_NAME_E_DRIVERS_CN;
	var CertContext = FindAndOpenUserCertByIssuer( IssuerNameSubString );
	
	if (!CertContext) 
	{
		
		
		
		var Hostname = ServerName.value
		DrvInst.DownloadHostname = Hostname;

		if ( !DrvInst.ConnectAddressLocal( Hostname ) )
		{
			DSPInfo["Error"] = "" + PromptArray["DrvCert.js_110_1"] + "" + Hostname + "" + PromptArray["DrvCert.js_110_2"] + "<br>" + PromptArray["DrvCert.js_110_3"] + "" + DrvInst.StatusString
			DSPInfo["Success"] = false; 
			return (DSPInfo);
		}
		showModalDialog( "http:\/\/" + Hostname + SOAP_URL_AUTO_REG_NEW_USER, null, 'dialogWidth:400px;dialogHeight:300px;center:yes');

		CertContext = FindAndOpenUserCertByIssuer( IssuerNameSubString );
		if (!CertContext)
		{
			DSPInfo["Error"] = "" + PromptArray["DrvCert.js_119_1"] + ""
			DSPInfo["Success"] = false; 
			return (DSPInfo);
		}
	}

	SetCurProcessBeginEndPercent( 5,10 )

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()

	var CertProvider = DrvCert.OpenCertProvider( CertContext , 1 );
	if (CertProvider == null || CertProvider == "") 
	{
		DispProgressInfo( 100 , "Open cert provider failed(cert handle=" + CertContext + "): " + DrvCert.ErrorString); 
		{ DSPInfo["Success"] = false; return (DSPInfo);}
	}

	
	SetCurProcessBeginEndPercent( 10 , 20 )

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()

	var CertKeyPhysicalID = DrvCert.GetCertKeyPhysicalID( CertProvider , 1);
	if ( CertKeyPhysicalID == "" || CertKeyPhysicalID == null)
	{
		DSPInfo["Error"] = "Get cert key Physical-ID error<br>" + DrvCert.ErrorString
		DSPInfo["Success"] = false; 
		return (DSPInfo);
	}

	var CertContent = DrvCert.GetCertContent( CertContext )
	if (CertContent == null || CertContent == "")
	{
		DSPInfo["Error"] = "Can not get content for cert " + CertContent 
		DSPInfo["Success"] = false; 
		return (DSPInfo);
	}
	var CertIssuer  = IssuerNameSubString

	SetCurProcessBeginEndPercent( 20 , 30 )

	
	DispProgressInfo( 50 )
	DrvCert.UIRefresh()

	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:Header xmlns:wsu =\"http:\/\/schemas.xmlsoap.org/ws/2002/07/utility\" ";
	SoapRequestXML += "                    xmlns:wsse=\"http:\/\/schemas.xmlsoap.org/ws/2002/07/secext\" >\n";
	SoapRequestXML += "      <CertInfo>\n";
	SoapRequestXML += "         <CertContent>"		+ CertContent		+ "</CertContent>\n";
	SoapRequestXML += "         <CertPhysicalID>"	+ CertKeyPhysicalID + "</CertPhysicalID>\n";
	SoapRequestXML += "         <CertIssuer>"		+ CertIssuer		+ "</CertIssuer>\n";
	SoapRequestXML += "      </CertInfo>\n";
















	SoapRequestXML += "   </SOAP-ENV:Header>\n";
	
	var DeviceListInfo		= GetDeviceListInfoToXml()
	var MACIDs				= GetNetCardInfo()
	var MainBoardInfo		= GetMainBoardInfo()
	var CPUInfo				= GetCPUInfo()
	var DiskInfo			= GetDiskInfo()
	var OSInfo				= GetOSInfo()
	var ProblemDeviceInfo	= GetDeviceDownloadDriverInfoToXml( row )
	
	DispProgressInfo( 80 )
	DrvCert.UIRefresh()

	SoapRequestXML += "   <SOAP-ENV:Body>\n";
	SoapRequestXML += "     <n:" + SOAP_REQ_GET_DSP_INFO_MATHOD_NAME + " xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n";
	SoapRequestXML += DeviceListInfo	+ "\n"
	SoapRequestXML += CPUInfo			+ "\n"
	SoapRequestXML += MainBoardInfo		+ "\n"
	SoapRequestXML += DiskInfo			+ "\n"
	SoapRequestXML += MACIDs			+ "\n"
	SoapRequestXML += OSInfo			+ "\n"
	SoapRequestXML += ProblemDeviceInfo + "\n"
	SoapRequestXML += "     </n:" + SOAP_REQ_GET_DSP_INFO_MATHOD_NAME + ">\n";
	SoapRequestXML += "   </SOAP-ENV:Body>\n";

	SoapRequestXML += "</SOAP-ENV:Envelope>";


	
	DispProgressInfo( 90 )
	DrvCert.UIRefresh()
/*

	SetCurProcessBeginEndPercent( 30 , 40 )

	
	DispProgressInfo( 0 )
	DrvCert.UIRefresh()
	
	var StampTime = new Array()
	StampTime = GetStampTime()					
	var CreateStampTime = StampTime["Create"]
	var ExpireStampTime = StampTime["Expire"]
	var DateTimeFormat    = "VirtualTime"

	SetCurProcessBeginEndPercent( 40 , 50 )

	
	DispProgressInfo( 0 )
	DrvCert.UIRefresh()
	
	var PackagedXml = StampXml( SoapRequestXML , CreateStampTime , ExpireStampTime , DateTimeFormat )
	if ( PackagedXml == null || PackagedXml == "")
	{
		DSPInfo["Error"] = "" + PromptArray["DrvCert.js_248_1"] + "DSP" + PromptArray["DrvCert.js_248_2"] + "XML" + PromptArray["DrvCert.js_248_3"] + ""
		DSPInfo["Success"] = false; 
		return (DSPInfo);
	}


	
	DispProgressInfo( 50 )
	DrvCert.UIRefresh()
	var SignData = XmlToText( PackagedXml );
	if (SignData == null || SignData== "")
	{
		DSPInfo["Error"] = "" + PromptArray["DrvCert.js_260_1"] + "DSP" + PromptArray["DrvCert.js_260_2"] + "XML" + PromptArray["DrvCert.js_260_3"] + ""
		DSPInfo["Success"] = false; 
		return (DSPInfo);
	}
	
	DispProgressInfo( 80 )
	DrvCert.UIRefresh()
	var SignValue = DrvCert.SignDataInString( CertContext , SignData );
	if (SignValue == null || SignValue == "" )
	{
		DSPInfo["Error"] = "" + PromptArray["DrvCert.js_270_1"] + "XML" + PromptArray["DrvCert.js_270_2"] + ""
		DSPInfo["Success"] = false; 
		return (DSPInfo);
	}
	
	DispProgressInfo( 90 )
	DrvCert.UIRefresh()
	var SignedXml = SignXml( PackagedXml , SignValue );
	if ( SignedXml == null)
	{
		DSPInfo["Error"] = "" + PromptArray["DrvCert.js_280_1"] + "DSP" + PromptArray["DrvCert.js_280_2"] + "XML" + PromptArray["DrvCert.js_280_3"] + ""
		DSPInfo["Success"] = false; 
		return (DSPInfo);
	}

	PackagedXml = SignedXml
	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()






*/



	var CertLocation = 1 
	var SoapFinalXMLInfo = SignStampEncryptXMLEx( 
								ServerName.value + SOAP_URL_GET_COMM_CERT , 
								ServerName.value + SOAP_URL_GET_TIME ,
								SoapRequestXML , 
								CertContext , 
								CertLocation )
	if (!SoapFinalXMLInfo["Success"] )
	{
		return false
	}
	AlertInfo += "[] " + PromptArray["DrvCert.js_310_1"] + "SOAP" + PromptArray["DrvCert.js_310_2"] + "\n" + SoapRequestXML + "\n"
	AlertInfo += "[] " + PromptArray["DrvCert.js_311_1"] + "“" + PromptArray["DrvCert.js_311_2"] + "/" + PromptArray["DrvCert.js_311_3"] + "/" + PromptArray["DrvCert.js_311_4"] + "”" + PromptArray["DrvCert.js_311_5"] + "SOAP" + PromptArray["DrvCert.js_311_6"] + "\n" + SoapFinalXMLInfo["Xml"] + "\n"

	var PackagedXml = SoapFinalXMLInfo["Xml"]



	SetCurProcessBeginEndPercent( 50 , 60 )
	if ( !DrvCert.CloseCertProvider( CertProvider )) DispProgressInfo( 100 , "Close cert provider failed(provider=" + CertProvider + ")");
	CertProvider = null;

	DispProgressInfo( 100 )
	DrvCert.UIRefresh()
	SetCurProcessBeginEndPercent( 60 , 70 )
	if ( !DrvCert.CloseUserCert( CertContext )) DispProgressInfo( 100 , "Close cert handle failed(handle=" + CertContext + ")");
	CertContext = null;

	DispProgressInfo( 100 )
	DrvCert.UIRefresh()

	
	
	var Hostname = ServerName.value
	EndURI = Hostname + SOAP_URL_DISPATCH_DSP

	
	SetCurProcessBeginEndPercent( 70 , 90 )

	DispProgressInfo( 0 )
	ReturnXML = DrvCert.SoapClientRequest( EndURI , PackagedXml );
	if (ReturnXML == null || ReturnXML == "")
	{
		DSPInfo["Error"] = "SOAP" + PromptArray["DrvCert.js_342_1"] + ""
		DSPInfo["Success"] = false; 
		return (DSPInfo);
	}

	AlertInfo += "\n[] request package is : \n\n" + PackagedXml + "\n";
	AlertInfo += "\n[] return package is :\n\n" + ReturnXML + "\n";

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	SetCurProcessBeginEndPercent( 90 , 100 )
	DrvCert.UIRefresh()
	if (ErrorInfo != null) 
	{
		DispProgressInfo( 100 , ErrorInfo )
	}
	else
	{
		
		var CheckInfo = CheckSoapServerSignValue( ReturnXML )
		if (!CheckInfo["Success"])
		{
			
			if ( ErrorInfo == null)
			{
				ErrorInfo = "" + PromptArray["DrvCert.js_366_1"] + ":<br>"+ CheckInfo["ErrorInfo"]
			}
			
			else
			{
				AlertInfo += CheckInfo["ErrorInfo"]
			}
		}
	}
	if (!DrvCert.ReleaseProvider())
	{
		DispProgressInfo( 100 , "Release CSP failed\n" + DrvCert.ErrorString);
	}
	else
	{
		AlertInfo += "\n[] CSP released !" + "\n";
	}

	if ( ErrorInfo == "" || ErrorInfo == null )
	{
		
		DispProgressInfo( 100 )
	}
	if (g_TestingInfoDisp) newElement.innerText = AlertInfo

	DSPInfo = GetDSPInfoFromSoapReturnXml( ReturnXML )
	
	
	
	
	
	

	if (	DSPInfo["DrvAspUrl"] && DSPInfo["CerAspUrl"] && DSPInfo["DeviceID"] && DSPInfo["Issuer"] && 
			DSPInfo["BuyNumber"] != undefined && DSPInfo["SubmitAllDeviceFlag"] != undefined )
	{
		DSPInfo["Success"] = true
		DSPInfo["Error"] = ErrorInfo
	}
	else
	{
		DSPInfo["Success"] = false
		DSPInfo["Error"] = ErrorInfo
	}

	
	if (DeviceListInfo) DeviceListInfo = null
	if (CPUInfo)		CPUInfo = null
	if (MainBoardInfo)  MainBoardInfo = null
	if (DiskInfo)		DiskInfo = null
	if (MACIDs)			MACIDs = null
	if (OSInfo)			OSInfo = null
	if (ProblemDeviceInfo) ProblemDeviceInfo = null
	if (SoapRequestXML) SoapRequestXML = null
	if (PackagedXml)	PackagedXml = null
	if (ReturnXML)		ReturnXML = null
	if (CertKeyPhysicalID)	CertKeyPhysicalID = null
	if (CertContent)	CertContent = null


	if (AlertInfo)		AlertInfo = null

return (DSPInfo);
}
function GetNetCardInfo()
{
	var Xml = DrvCert.GetAdaptersPhysicalAddress()
	
	Xml = Xml.replace(/(\&)/gi ,"&amp;");
return (Xml)
}
function GetMainBoardInfo()
{
	var Xml =  DrvCert.GetMainboardInfo()
    if ( !Xml ) 
        Xml = DrvCert.GetMainBoardInfoByWMI()

    
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
    xmlDoc.async = false;
    xmlDoc.loadXML( Xml );

    if (!xmlDoc) 
    {
        Xml = DrvCert.GetMainBoardInfoByWMI()
    }
    else
    {
        
        
        
        
        
        
        
        
        
        
        
        try
        {
            var objNode = xmlDoc.selectSingleNode("\/\/MainBoardItem" )
            var objChildNodes = objNode.childNodes
            if ( !objChildNodes || !objChildNodes.length ) 
                Xml = DrvCert.GetMainBoardInfoByWMI()
        }
        catch( err )
        {
             Xml = "<MainBoardInfo>\n\t<MainBoardItem>\n\t\n</MainBoardItem>\n</MainBoardInfo>"
        }
        
    }
    xmlDoc = null
    
	
	Xml = Xml.replace(/(\&)/gi ,"&amp;");
return (Xml)
}
function GetCPUInfo()
{
	var Xml = DrvCert.GetCPUInfo()
	
	Xml = Xml.replace(/(\&)/gi ,"&amp;");
return (Xml)
}
function GetDiskInfo()
{
    
	
	
	

    
    var OSInfoXml = GetOSInfo()
    var OSString = GetXmlSingleNodeText( OSInfoXml , "OSPlatform" )
    if ( OSString.indexOf("Vista") != -1 )
    {
        var Xml = DrvCert.GetDiskInfoByIDEPort()
        
        if ( Xml == "" || Xml == null || Xml.indexOf("DiskItem") == -1 )
        {
            
            try
            {
                Xml =  DrvCert.GetDiskInfoByWMI()
                if ( Xml == "" || Xml == null || Xml.indexOf("DiskItem") == -1 )
                {
                  Xml = "<DiskInfo>NULL</DiskInfo>"
                }
            }
            catch( e )
            {
                Xml = "<DiskInfo>NULL</DiskInfo>"
            }
        }
        
        
    }
    else
    {
        var Xml =  DrvCert.GetDiskInfo()
    }
	
	Xml = Xml.replace(/(\&)/gi ,"&amp;");

return (Xml)
}
function GetOSInfo()
{
	var Xml =  DrvCert.GetOSInfo()
	
	Xml = Xml.replace(/(\&)/gi ,"&amp;");
return (Xml)
}
function GetPublicKeyInfo( PublicKey )
{





	var PublicKeyInfoStr = ""
	PublicKeyInfoStr += "<PublicKeyInfo>\n"
	PublicKeyInfoStr += "\t<PublicKeyItem>\n"
	PublicKeyInfoStr += "\t\t<PublicKey>" + PublicKey + "</PublicKey>\n"
	PublicKeyInfoStr += "\t</PublicKeyItem>\n"
	PublicKeyInfoStr += "</PublicKeyInfo>\n"
return ( PublicKeyInfoStr )
}
function CheckSoapServerSignValue( SoapReturnXml )
{
	var CheckInfo = new Array()

	var SoapServerOrgXmlAndSignData = new Array()
	SoapServerOrgXmlAndSignData = GetOrgXmlAndSign( SoapReturnXml )

	if ( SoapServerOrgXmlAndSignData["Error"] != "" )
	{
		CheckInfo["ErrorInfo"] = "\nGet soap returned xml error(" + SoapServerOrgXmlAndSignData["Error"] + ")\n"
		CheckInfo["Success"]   = false
		return (CheckInfo)
	}

	var VerifyString		= XmlToText( SoapServerOrgXmlAndSignData["Xml"] )
	var SignValueInBASE64	= SoapServerOrgXmlAndSignData["Sign"]


	
	var DSPName = GetXmlSingleNodeText( SoapReturnXml , SOAP_RET_HEADER_USER_CERT_ISSUER_SUBJECT_KEYWORD_TAG )
	var CertHandle  = DrvCert.FindDSPCertByName( DSPName )
	if ( !CertHandle ) 
	{
		CheckInfo["ErrorInfo"] = "\nOpen DSP cert error(DSP name=" + DSPName + ")\n"
		CheckInfo["Success"]   = false
		return (CheckInfo)
	}
	bSuccess		= DrvCert.VerifyStringByBASE64Sign( CertHandle , VerifyString , SignValueInBASE64 )
	if (!bSuccess)
	{
		CheckInfo["ErrorInfo"] = "\nVerify soap xml and signature error(" + DrvCert.ErrorString + ")\n"
		CheckInfo["Success"]   = false
		if (CertHandle) DrvCert.CloseUserCert( CertHandle )
		return (CheckInfo)
	}

	CheckInfo["Success"] = DrvCert.CloseUserCert( CertHandle )

	return (CheckInfo)
}


function GetStampTime( ServerTime )
{
	var ServerVirtualTime , LocalTime
	var StampDate = new Array()
	var objDate = new Date()

	if (!ServerTime)
	{
		
		
		
		{
			
			
			var Hostname = "http:\/\/" + ServerName.value
			var EndURI = Hostname + SOAP_URL_GET_TIME

			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( EndURI , RequestXml );
			ServerVirtualTime = GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_DATE_TIME_TAG )
		}
	}
	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 CheckDSPUserCert( DSPInfo )
{
	
	
	
	
	
	
	
	
	
	
	SetCurProcessBeginEndPercent( 0 , 100 )
	DispProgressInfo( 0 , "" + PromptArray["DrvCert.js_686_1"] + "\"" + DSPInfo["Issuer"] + "\"" + PromptArray["DrvCert.js_686_2"] + "...")
	DrvCert.UIRefresh()

	var CertContext = FindAndOpenUserCertByIssuer( DSPInfo["Issuer"] )

	
	
	if (!CertContext)
	{
		
		
		
		
		
		
		
		
		showModalDialog( DSPInfo["CerAspUrl"], null, 'dialogWidth:500px;dialogHeight:300px;center:yes;resizable:yes;' );
		CertContext = FindAndOpenUserCertByIssuer( DSPInfo["Issuer"] )
		if (!CertContext)
		{
			DispMessageInfo("" + PromptArray["DrvCert.js_707_1"] + "DSP(" + DSPInfo["Issuer"] + ")" + PromptArray["DrvCert.js_707_2"] + "")
			return false
		}
	}
	else
	{
		DispProgressInfo( 100 )
	}

	
	if (CertContext) DrvCert.CloseUserCert( CertContext )
return true
}
function FindAndOpenUserCertByIssuer( IssuerName )
{

	
	
	
	
	
	
	
	
	var FindHandle = DrvCert.CreateCertFind( 1 , "DrvCert" );
	
	
	
	
	var CertContext = DrvCert.CertFind( IssuerName , 1 , FindHandle , 0 ) 
	var CertContextOld
	var ServerTime = 0
	while( CertContext )
	{
		CertContextOld = CertContext

		
		if (DrvCert.GetCertClass(CertContext) != "1")
		{
			
			CertContext = DrvCert.CertFind( IssuerName , 1 , FindHandle , CertContext )
		}
		
		else
		{
			var UserCertNotBefore = Date.parse( DrvCert.GetCertNotBefore( CertContext ) )
			var UserCertNotAfter  = Date.parse( DrvCert.GetCertNotAfter(  CertContext ) )
			
			if (!ServerTime) ServerTime = GetServerTime( ServerName.value + SOAP_URL_GET_TIME )
			
			if ( !( UserCertNotBefore <= ServerTime && ServerTime<= UserCertNotAfter ) )
			{
				
				CertContext = DrvCert.CertFind( IssuerName , 1 , FindHandle , CertContext )
			}
			else
			{
				break;
			}
		}
		
		
		if (CertContextOld) DrvCert.CloseUserCert( CertContextOld )
	}

	DrvCert.CloseCertFind( FindHandle )






















return (CertContext)
}
function FindDSPSvcCertByCertInfo( DSPSvcCertInfo )
{
	
	
	
	
	
	
	
	
	var objTime = new Date()
	var CurServerTime = objTime.getTime() - DSPSvcCertInfo["LocaleServerTimeOffset"]

	if (!DSPSvcCertInfo["Issuer"]) DSPSvcCertInfo["Issuer"]="!!!!!!!!"
	
	
	
	
	
	
	var FindHandle = DrvCert.CreateCertFind( 1 , "DrvCert" );		
	
	
	
	
	
	
	
	
	
	
	
	var CertContext = DrvCert.CertFind( DSPSvcCertInfo["Issuer"] , 1 , FindHandle , 0 ) 
	var CertContextOld
	while( CertContext )
	{	
		CertContextOld = CertContext

		
		if (DrvCert.GetCertClass(CertContext) != DSPSvcCertInfo["Class"] )
		{
			
			CertContext = DrvCert.CertFind( DSPSvcCertInfo["Issuer"] , 1 , FindHandle , CertContext )
		}
		
		else
		{
			var NotBefore = Date.parse(DrvCert.GetCertNotBefore( CertContext ))
			var NotAfter  = Date.parse(DrvCert.GetCertNotAfter( CertContext ))

			
			if ( CurServerTime > NotAfter || CurServerTime < NotBefore )
			{
				
				CertContext = DrvCert.CertFind( DSPSvcCertInfo["Issuer"] , 1 , FindHandle , CertContext )
			}
			else
			{	
				if (DrvCert.GetCertDeviceID(CertContext) != DSPSvcCertInfo["DeviceID"] )
				{
					
					CertContext = DrvCert.CertFind( DSPSvcCertInfo["Issuer"] , 1 , FindHandle , CertContext )
				}
				
				else
				{
					break;
				}
			}
		}

		if (CertContextOld) DrvCert.CloseUserCert( CertContextOld )
	}

	DrvCert.CloseCertFind( FindHandle )

return (CertContext)
}








function CheckDSPSvcCert( DSPDrvInfo )
{
	
	
	
	
	
	
	
	
	
	
	
	SetCurProcessBeginEndPercent( 0 , 10 )
	
	DispProgressInfo( 0 , "" + PromptArray["DrvCert.js_898_1"] + "\"" + DSPDrvInfo["Issuer"] + "\"" + PromptArray["DrvCert.js_898_2"] + "...")
	DrvCert.UIRefresh()

	CreateDymanicDocElement( "newElement2" )

	
	

	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/">\n'
	RequestXml += ' <SOAP-ENV:Body>\n'
	RequestXml += '  <'  + SOAP_REQ_SERVICE_CERT_INFO_MATHOD_NAME + '>\n' 
	
	RequestXml += '    <' + SOAP_REQ_SERVICE_CERT_INFO_BUY_NUMBER_TAG + '>' + DSPDrvInfo["BuyNumber"] + '</' + SOAP_REQ_SERVICE_CERT_INFO_BUY_NUMBER_TAG + '>\n'
	RequestXml += '  </' + SOAP_REQ_SERVICE_CERT_INFO_MATHOD_NAME + '>\n'
	RequestXml += ' </SOAP-ENV:Body>\n'
	RequestXml += '</SOAP-ENV:Envelope>\n'

	SetCurProcessBeginEndPercent( 10 , 40 )
	
	DispProgressInfo( 0 )
	DrvCert.UIRefresh()

	
	var ReturnXML = DrvCert.SoapClientRequest( DSPDrvInfo["DrvAspUrl"] , RequestXml );
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
    

	var ServiceCertIssuer		= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_ISSUER_TAG )
	var ServiceCertClass		= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_CLASS_TAG )
	var ServiceCertNotBefore	= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_NOT_BEFORE_TAG )
	var ServiceCertNotAfter		= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_NOT_AFTER_TAG )
	var ServerActualTime		= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_DATE_TIME_TAG )
	var ServiceCertDeviceID		= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_DEVICE_ID_TAG )

	var ServiceCertSubmitNumber	= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_SUBMIT_NUMBER_TAG )
	var ServiceCertDeployNumber	= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_DEPLOY_NUMBER_TAG )
	var ServiceCertEncryptKeyID	= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_ENCRYPT_KEY_ID_TAG )

	var ServiceCertIssuerURL	= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_ISSUE_SVC_CERT_URL_TAG )
    var DownloadDriverURL		= GetXmlSingleNodeText( ReturnXML , SOAP_RET_BODY_SERVICE_CERT_INFO_DOWNLOAD_DRIVER_URL_TAG )

	var DSPSvcCertInfo = new Array()
	DSPSvcCertInfo["Issuer"]		= ServiceCertIssuer
	DSPSvcCertInfo["Class"]			= ServiceCertClass
	DSPSvcCertInfo["NotBefore"]		= ServiceCertNotBefore
	DSPSvcCertInfo["NotAfter"]		= ServiceCertNotAfter
	var objTime = new Date()
	DSPSvcCertInfo["LocaleServerTimeOffset"]	= objTime.getTime() - ServerActualTime
	DSPSvcCertInfo["DeviceID"]		= ServiceCertDeviceID
	DSPSvcCertInfo["SubmitNumber"]	= ServiceCertSubmitNumber
	DSPSvcCertInfo["DeployNumber"]	= ServiceCertDeployNumber
	DSPSvcCertInfo["EncryptKeyID"]	= ServiceCertEncryptKeyID
	DSPSvcCertInfo["IssueURL"]		= ServiceCertIssuerURL
	DSPSvcCertInfo["DownloadURL"]	= DownloadDriverURL
	DSPSvcCertInfo["Success"]		= true

	if (g_TestingInfoDisp) newElement2.innerText =	"\n[] request package is :\n\n" + RequestXml +
													"\n[] return package is :\n\n"  + ReturnXML

	var CertContext

	if (!ServiceCertIssuer || !ServiceCertClass || !ServerActualTime || !ServiceCertIssuerURL || !ServiceCertDeviceID || !DownloadDriverURL )
	{
		DispMessageInfo("" + PromptArray["DrvCert.js_990_1"] + "")
		DSPSvcCertInfo["Success"] = false
	}
	
	else if ( DSPSvcCertInfo["Class"] == "105" )
	{
		DSPSvcCertInfo["Success"] = CreateAndImportDSPSvcCert( DSPDrvInfo , DSPSvcCertInfo )
		
		DispProgressInfo( 100 )
	}
	
	else if ( DSPSvcCertInfo["Class"] == "104" )
	{
		CertContext = FindDSPSvcCertByCertInfo( DSPSvcCertInfo )

		

		
		if ( !CertContext )
		{
			DSPSvcCertInfo["Success"] = CreateAndImportDSPSvcCert( DSPDrvInfo , DSPSvcCertInfo )
			
			DispProgressInfo( 100 )
		}
		else
		{
			if ( !DrvCert.CloseUserCert( CertContext )) DispProgressInfo( 100 , "Close cert handle failed(handle=" + CertContext + ")");
			CertContext = null;
			
			DispProgressInfo( 100 )
		}
	}

	if (g_TestingInfoDisp) newElement2.innerText =	"\n[] request package is :\n\n" + RequestXml +
													"\n[] return package is :\n\n"  + ReturnXML


return(DSPSvcCertInfo)
}

function CreateAndImportDSPSvcCert( DSPDrvInfo , DSPSvcCertInfo )
{
	
	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
	
	

	var CertSize = 1024

	if ( !DrvCert.SelectProvider( CertSize ) )
	{
		DispMessageInfo( "select a CSP for 1024-bit public/private key error\n" + DrvCert.ErrorString)
		return false;
	}
	
	
	
	

	
	if (!DrvCert.GenKey(false))
	{
		DispMessageInfo( " generate a public/private key error\n" + DrvCert.ErrorString);
		return false
	}
	
	
	
	
	

	var DSPPublicKey = DrvCert.GetPublicKeyInBASE64()

	if ( DSPPublicKey == null || DSPPublicKey == "")
	{
		DispMessageInfo( "GetPublicKeyInBASE64() failed" + DrvCert.ErrorString);
	}
	
	
	if (!DrvCert.ReleaseProvider())
	{
		DispMessageInfo( "Release CSP failed\n" + DrvCert.ErrorString);
	}

	var SvcCert = SoapAcquireDSPDrvCert( DSPDrvInfo , DSPSvcCertInfo , DSPPublicKey )

	if (SvcCert["Success"])
	{
		if (!DrvCert.ImportCert( SvcCert["Cert"] ))
		{
			DispMessageInfo( "Import Cert failed\n" + DrvCert.ErrorString);
		}
	}








return SvcCert["Success"]
}
function SoapAcquireDSPDrvCert( DSPDrvInfo , DSPSvcCertInfo , DSPPublicKey )
{
	
	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
	
	

	var row			= DSPDrvInfo["DevRow"]
	var EndURI		= DSPSvcCertInfo["IssueURL"]
	
	

	var IssueDSPSvcCertInfo = new Array()
	
	var AlertInfo="Testing info:\n";
	var SoapRequestXML = "";
	var ReturnXML="";

	CreateDymanicDocElement( "newElement3" )




	SetCurProcessBeginEndPercent( 40 , 80 )
	

	DispProgressInfo( 0 )
	DrvCert.UIRefresh()

	var IssuerNameSubString = DSPDrvInfo["Issuer"]	
	var CertContext = FindAndOpenUserCertByIssuer( IssuerNameSubString );
	if (!CertContext) 
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1156_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1156_2"] + "");
		return 
	}

	
	DispProgressInfo( 10 )
	DrvCert.UIRefresh()
	var CertProvider = DrvCert.OpenCertProvider( CertContext , 1);
	if (!CertProvider) 
	{
		DispProgressInfo( 100 , "Open cert provider failed(cert handle=" + CertContext + ") : " + DrvCert.ErrorString); 
		return
	}


	
	DispProgressInfo( 20 )
	DrvCert.UIRefresh()
	var CertKeyPhysicalID = DrvCert.GetCertKeyPhysicalID( CertProvider , 1);
	if ( CertKeyPhysicalID == null )
	{
		DispProgressInfo( 100 , "Get cert key Physical-ID error <br>" + + DrvCert.ErrorString);
		return
	}

	var CertContent = DrvCert.GetCertContent( CertContext )
	if (!CertContent)
	{
		DispMessageInfo( "Get cert content error" )
		return
	}
	var CertIssuer  = IssuerNameSubString


	
	DispProgressInfo( 30 )
	DrvCert.UIRefresh()

	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:Header xmlns:wsu =\"http:\/\/schemas.xmlsoap.org/ws/2002/07/utility\" ";
	SoapRequestXML += "                    xmlns:wsse=\"http:\/\/schemas.xmlsoap.org/ws/2002/07/secext\" >\n";
	SoapRequestXML += "      <CertInfo>\n";
	SoapRequestXML += "         <CertContent>"		+ CertContent		+ "</CertContent>\n";
	SoapRequestXML += "         <CertPhysicalID>"	+ CertKeyPhysicalID + "</CertPhysicalID>\n";
	SoapRequestXML += "         <CertIssuer>"		+ CertIssuer		+ "</CertIssuer>\n";
	SoapRequestXML += "      </CertInfo>\n";
















	SoapRequestXML += "   </SOAP-ENV:Header>\n";

	SoapRequestXML += "   <SOAP-ENV:Body>\n";
	SoapRequestXML += "     <n:" + SOAP_REQ_ISSUE_SVC_CERT_MATHOD_NAME + " xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n";
	
	if ( DSPDrvInfo["SubmitAllDeviceFlag"] )
	{
		var DeviceListInfo		= GetDeviceListInfoToXml()
		var MACIDs				= GetNetCardInfo()
		var MainBoardInfo		= GetMainBoardInfo()
		var CPUInfo				= GetCPUInfo()
		var DiskInfo			= GetDiskInfo()
		var OSInfo				= GetOSInfo()

		SoapRequestXML += DeviceListInfo	+ "\n"
		SoapRequestXML += CPUInfo			+ "\n"
		SoapRequestXML += MainBoardInfo		+ "\n"
		SoapRequestXML += DiskInfo			+ "\n"
		SoapRequestXML += MACIDs			+ "\n"
		SoapRequestXML += OSInfo			+ "\n"
	}
	var ProblemDeviceInfo	= GetDeviceDownloadDriverInfoToXml( row )
	var PublicKeyInfo		= GetPublicKeyInfo( DSPPublicKey )

	SoapRequestXML += ProblemDeviceInfo + "\n"
	SoapRequestXML += PublicKeyInfo		+ "\n"
	SoapRequestXML += "      <" + SOAP_REQ_ISSUE_SVC_CERT_PARAMETER_DEPLOY_INFO_TAG  + ">\n";	
	SoapRequestXML += "         <" + SOAP_REQ_ISSUE_SVC_CERT_PARAMETER_DEPLOY_NUMBER_TAG + ">"	
								   + DSPSvcCertInfo["DeployNumber"] 
							+ "</" + SOAP_REQ_ISSUE_SVC_CERT_PARAMETER_DEPLOY_NUMBER_TAG + ">\n";
	SoapRequestXML += "      </" + SOAP_REQ_ISSUE_SVC_CERT_PARAMETER_DEPLOY_INFO_TAG + ">\n";	
	SoapRequestXML += "     </n:" + SOAP_REQ_ISSUE_SVC_CERT_MATHOD_NAME + ">\n";
	SoapRequestXML += "   </SOAP-ENV:Body>\n";

	SoapRequestXML += "</SOAP-ENV:Envelope>";
/*


	
	DispProgressInfo( 40 )
	DrvCert.UIRefresh()
	
	var StampTime = new Array()
	
	StampTime = GetStampTime( )
	var CreateStampTime = StampTime["Create"]
	var ExpireStampTime = StampTime["Expire"]
	var DateTimeFormat    = "ActualTime"


	
	DispProgressInfo( 50 )
	DrvCert.UIRefresh()
	
	var PackagedXml = StampXml( SoapRequestXML , CreateStampTime , ExpireStampTime , DateTimeFormat )
	if ( PackagedXml == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1277_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1277_2"] + "XML" + PromptArray["DrvCert.js_1277_3"] + "")
		{ IssueDSPSvcCertInfo["Success"] = false; return (IssueDSPSvcCertInfo);}
	}


	
	DispProgressInfo( 60 )
	DrvCert.UIRefresh()
	var SignData = XmlToText( PackagedXml );
	if (SignData == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1288_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1288_2"] + "XML" + PromptArray["DrvCert.js_1288_3"] + "")
		{ IssueDSPSvcCertInfo["Success"] = false; return (IssueDSPSvcCertInfo);}
	}
	
	DispProgressInfo( 70 )
	DrvCert.UIRefresh()
	var SignValue = DrvCert.SignDataInString( CertContext , SignData );
	var SignedXml = SignXml( PackagedXml , SignValue );
	if ( SignedXml == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1298_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1298_2"] + "XML" + PromptArray["DrvCert.js_1298_3"] + "")
		{ IssueDSPSvcCertInfo["Success"] = false; return (IssueDSPSvcCertInfo);}
	}
	PackagedXml = SignedXml



*/


	var DSPHostname = ""
	
	if ( DSPSvcCertInfo["IssueURL"].match(/^http:\/\/./i) )
	{
		
		DSPHostname = DSPSvcCertInfo["IssueURL"].replace(/^http:\/\/(.*)/i , "$1" )
		var DSPHostnameArray = DSPHostname.split("/")
	}
	
	else
	{
		
		DSPHostname = DSPSvcCertInfo["IssueURL"]
		var DSPHostnameArray = DSPHostname.split("/")
	}
	var CertLocation = 1 
	var SoapFinalXMLInfo = SignStampEncryptXMLEx( 
								DSPHostnameArray[0] + SOAP_URL_GET_COMM_CERT , 
								DSPHostnameArray[0] + SOAP_URL_GET_TIME ,
								SoapRequestXML , 
								CertContext , 
								CertLocation )
	if (!SoapFinalXMLInfo["Success"] )
	{
		return false
	}
	AlertInfo += "[] " + PromptArray["DrvCert.js_1334_1"] + "SOAP" + PromptArray["DrvCert.js_1334_2"] + "\n" + SoapRequestXML + "\n"
	AlertInfo += "[] " + PromptArray["DrvCert.js_1335_1"] + "“" + PromptArray["DrvCert.js_1335_2"] + "/" + PromptArray["DrvCert.js_1335_3"] + "/" + PromptArray["DrvCert.js_1335_4"] + "”" + PromptArray["DrvCert.js_1335_5"] + "SOAP" + PromptArray["DrvCert.js_1335_6"] + "\n" + SoapFinalXMLInfo["Xml"] + "\n"

	var PackagedXml = SoapFinalXMLInfo["Xml"]





	
	DispProgressInfo( 80 )
	DrvCert.UIRefresh()
	if ( !DrvCert.CloseCertProvider( CertProvider )) DispProgressInfo( 100 , "Close cert provider failed(provider=" + CertProvider + ")");
	CertProvider = null;
	
	DispProgressInfo( 90 )
	DrvCert.UIRefresh()
	if ( !DrvCert.CloseUserCert( CertContext )) DispProgressInfo( 100 , "Close cert handle failed(handle=" + CertContext + ")");
	CertContext = null;

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()
	
	SetCurProcessBeginEndPercent( 80 , 95 )

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()
	ReturnXML = DrvCert.SoapClientRequest( EndURI , PackagedXml );
	if (!ReturnXML)
	{
		DispMessageInfo( "" + PromptArray["DrvCert.js_1366_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1366_2"] + "SOAP" + PromptArray["DrvCert.js_1366_3"] + "")
		return
	}

	AlertInfo += "\n[] request package is : \n\n" + PackagedXml + "\n";
	AlertInfo += "\n[] return package is :\n\n" + ReturnXML + "\n";
	
	if (g_TestingInfoDisp) newElement3.innerText = AlertInfo


	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	SetCurProcessBeginEndPercent( 95 , 100 )

	
	DispProgressInfo( 60 )
	DrvCert.UIRefresh()
	if (ErrorInfo != null) 
	{
		DispProgressInfo( 100 , ErrorInfo )
	}
	else
	{
		
		var CheckInfo = CheckSoapServerSignValue( ReturnXML )
		if (!CheckInfo["Success"])
		{
			
			if ( ErrorInfo == null)
			{
				DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1411_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1411_2"] + "")
			}
			
			else
			{
				
				DispMessageInfo( CheckInfo["ErrorInfo"] )
			}
		}
	}



	if ( ErrorInfo == "" || ErrorInfo == null )
	{
		
		DispProgressInfo( 100 )
	}

	IssueDSPSvcCertInfo["Cert"]		= GetInfoByTagFromXml( ReturnXML, SOAP_RET_BODY_REG_RESULT_TAG )

	if (IssueDSPSvcCertInfo["Cert"])
	{
		IssueDSPSvcCertInfo["Success"]	= true
	}
	else
	{
		IssueDSPSvcCertInfo["Success"]	= false
	}
	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()

	
	if (DeviceListInfo) DeviceListInfo = null
	if (CPUInfo)		CPUInfo = null
	if (MainBoardInfo)  MainBoardInfo = null
	if (DiskInfo)		DiskInfo = null
	if (MACIDs)			MACIDs = null
	if (OSInfo)			OSInfo = null
	if (ProblemDeviceInfo) ProblemDeviceInfo = null
	if (SoapRequestXML) SoapRequestXML = null
	if (PackagedXml)	PackagedXml = null
	if (ReturnXML)		ReturnXML = null
	if (CertKeyPhysicalID)	CertKeyPhysicalID = null
	if (CertContent)	CertContent = null
	
	
	if (AlertInfo)		AlertInfo = null

return (IssueDSPSvcCertInfo);
}
function SoapAcquireDSPDownloadDrv( SvcCertInfo , DSPDrvInfo , DeviceInfo )
{
    
	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	var DownloadDrvInfo = new Array()

	var EndURI = "";
	var AlertInfo="Testing info:\n";
	var SoapRequestXML = "";
	var ReturnXML="";

	CreateDymanicDocElement( "newElement4" )



	
	SetCurProcessBeginEndPercent( 0 , 5 )
	
	DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1518_1"] + "\""+DSPDrvInfo["Issuer"]+"\"" + PromptArray["DrvCert.js_1518_2"] + "..." )
	DrvCert.UIRefresh()

	var IssuerNameSubString = DSPDrvInfo["Issuer"];
	var CertContext = FindAndOpenUserCertByIssuer( IssuerNameSubString );
	if (!CertContext) 
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1525_1"] + "\""+DSPDrvInfo["Issuer"]+"\"" + PromptArray["DrvCert.js_1525_2"] + "");
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}

	SetCurProcessBeginEndPercent( 5,10 )

	
	DispProgressInfo(100)
	DrvCert.UIRefresh()
	var CertProvider = DrvCert.OpenCertProvider( CertContext , 1);
	if (!CertProvider)
	{
		DispProgressInfo( 100 , "Open cert provider failed(cert handle=" + CertContext + ") : " + DrvCert.ErrorString); 
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}

	
	SetCurProcessBeginEndPercent( 10 , 20 )

	
	DispProgressInfo( 0 )
	DrvCert.UIRefresh()
	var CertKeyPhysicalID = DrvCert.GetCertKeyPhysicalID( CertProvider , 1);
	if ( CertKeyPhysicalID == "" )
	{
		DispProgressInfo( 100 , "Get cert key Physical-ID error " + DrvCert.ErrorString);
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}
	
	DispProgressInfo( 20 )
	DrvCert.UIRefresh()

	var CertContent = DrvCert.GetCertContent( CertContext )
	if (!CertContent || CertContent == null)
	{
		DispMessageInfo( "Get cert content error<br>" + DrvCert.ErrorString);
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}

	var CertIssuer  = IssuerNameSubString

	
	DispProgressInfo( 40 )
	DrvCert.UIRefresh()
	
	var SvcCertContext = FindDSPSvcCertByCertInfo( SvcCertInfo )
	if (!SvcCertContext)
	{
		DispMessageInfo("" + PromptArray["DrvCert.js_1577_1"] + "" + SvcCertInfo["Issuer"] + "" + PromptArray["DrvCert.js_1577_2"] + "\"" + SvcCertInfo["DeviceID"] + "\"" + PromptArray["DrvCert.js_1577_3"] + "" + SvcCertInfo["Class"] + "" + PromptArray["DrvCert.js_1577_4"] + "" )
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}
	
	DispProgressInfo( 60 )
	DrvCert.UIRefresh()
	var SvcCertProvider = DrvCert.OpenCertProvider( SvcCertContext , 1)
	if (!SvcCertProvider) 
	{
		DispMessageInfo( "Open cert provider failed(cert handle=" + SvcCertContext + ") : " + DrvCert.ErrorString); 
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}
	
	DispProgressInfo( 80 )
	DrvCert.UIRefresh()
	var SvcCertKeyPhysicalID = DrvCert.GetCertKeyPhysicalID( SvcCertProvider , 1);
	if ( SvcCertKeyPhysicalID == "" )
	{
		DispMessageInfo( "Get cert key Physical-ID error<br>" + DrvCert.ErrorString);
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}
	
	
	DispProgressInfo( 90 )
	DrvCert.UIRefresh()
	var SvcCertContent = DrvCert.GetCertContent( SvcCertContext )
	if (!SvcCertContent || SvcCertContent == null)
	{
		DispMessageInfo( "Get cert content error<br>" + DrvCert.ErrorString);
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()


	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:Header xmlns:wsu =\"http:\/\/schemas.xmlsoap.org/ws/2002/07/utility\" ";
	SoapRequestXML += "                    xmlns:wsse=\"http:\/\/schemas.xmlsoap.org/ws/2002/07/secext\" >\n";
	SoapRequestXML += "      <SignCertInfo>\n";
	SoapRequestXML += "         <UserCertContent>"		+ CertContent			+ "</UserCertContent>\n";
	SoapRequestXML += "         <UserCertPhysicalID>"	+ CertKeyPhysicalID		+ "</UserCertPhysicalID>\n";
	SoapRequestXML += "         <CertContent>"			+ SvcCertContent		+ "</CertContent>\n";
	SoapRequestXML += "         <CertPhysicalID>"		+ SvcCertKeyPhysicalID  + "</CertPhysicalID>\n";
	SoapRequestXML += "         <CertIssuer>"			+ SvcCertInfo["Issuer"]	+ "</CertIssuer>\n";
	SoapRequestXML += "      </SignCertInfo>\n";
















	SoapRequestXML += "   </SOAP-ENV:Header>\n";


	SoapRequestXML += "   <SOAP-ENV:Body>\n";
	SoapRequestXML += "     <n:" + SOAP_REQ_DOWNLOAD_DRIVER_MATHOD_NAME + " xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"; 
	SoapRequestXML += "			<" + SOAP_REQ_DOWNLOAD_DRIVER_PARAMETER_DEPLOY_NUMBER_TAG + ">" 
								   + SvcCertInfo["DeployNumber"] 
							+ "</" + SOAP_REQ_DOWNLOAD_DRIVER_PARAMETER_DEPLOY_NUMBER_TAG + ">\n"
	SoapRequestXML += "     </n:" + SOAP_REQ_DOWNLOAD_DRIVER_MATHOD_NAME + ">\n";
	SoapRequestXML += "   </SOAP-ENV:Body>\n";

	SoapRequestXML += "</SOAP-ENV:Envelope>";

	SetCurProcessBeginEndPercent( 20 , 30 )

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()

	var StampTime = new Array()
	
	
	StampTime = GetStampTime( )		
	var CreateStampTime = StampTime["Create"]
	var ExpireStampTime = StampTime["Expire"]
	var DateTimeFormat    = "VirtualTime"

	SetCurProcessBeginEndPercent( 30 , 40 )

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()

	SetCurProcessBeginEndPercent( 40 , 50 )
	
	var PackagedXml = StampXml( SoapRequestXML , CreateStampTime , ExpireStampTime , DateTimeFormat )
	if ( PackagedXml == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1684_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1684_2"] + "XML" + PromptArray["DrvCert.js_1684_3"] + "")
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}

	
	DispProgressInfo( 60 )
	DrvCert.UIRefresh()



	var SignData = XmlToText( PackagedXml );
	if (SignData == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1698_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1698_2"] + "XML" + PromptArray["DrvCert.js_1698_3"] + "")
		DownloadDrvInfo["Success"] = false
		return ( DownloadDrvInfo )
	}

	
	DispProgressInfo( 80 )
	DrvCert.UIRefresh()

	var SignValue = DrvCert.SignDataInString( SvcCertContext , SignData );
	var SignedXml = SignXml( PackagedXml , SignValue );
	if ( SignedXml == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1711_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1711_2"] + "XML" + PromptArray["DrvCert.js_1711_3"] + "")
		DownloadDrvInfo["Success"] = false; 
		return ( DownloadDrvInfo )
	}
	PackagedXml = SignedXml

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()




	SetCurProcessBeginEndPercent( 50 , 60 )

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()
	if ( !DrvCert.CloseCertProvider( CertProvider )) DispProgressInfo( 100 , "Close cert provider failed(provider=" + CertProvider + ")");
	CertProvider = null;
	SetCurProcessBeginEndPercent( 60 , 70 )

	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()
	if ( !DrvCert.CloseUserCert( CertContext )) DispProgressInfo( 100 , "Close cert handle failed(handle=" + CertContext + ")");
	CertContext = null;

	EndURI = SvcCertInfo["DownloadURL"]
	
	SetCurProcessBeginEndPercent( 70 , 90 )

	
	DispProgressInfo( 0 )
	ReturnXML = DrvCert.SoapClientRequest( EndURI , PackagedXml );
	if (!ReturnXML)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_1748_1"] + ""+DSPDrvInfo["Issuer"]+"" + PromptArray["DrvCert.js_1748_2"] + "SOAP" + PromptArray["DrvCert.js_1748_3"] + "")
		DownloadDrvInfo["Success"] = false
		return ( DownloadDrvInfo )
	}
	AlertInfo += "\n[] request package is : \n\n" + PackagedXml + "\n";
	AlertInfo += "\n[] return package is :\n\n"   + ReturnXML   + "\n";

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	var ErrorCode = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_CODE_TAG )
	SetCurProcessBeginEndPercent( 90 , 100 )
	DrvCert.UIRefresh()

	if (ErrorInfo != null) 
	{
		DispProgressInfo( 100 , ErrorInfo )
		DrvCert.DeleteCert( SvcCertContext )
		DownloadDrvInfo["Success"] = false
		return ( DownloadDrvInfo )
	}

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	DownloadDrvInfo["Success"]			= true
	DownloadDrvInfo["DrvContent"]		= GetInfoByTagFromXml( ReturnXML, "DrvContent" )
	DownloadDrvInfo["DrvClass"	]		= GetInfoByTagFromXml( ReturnXML, "DrvClass" )
	DownloadDrvInfo["DrvDate"	]		= GetInfoByTagFromXml( ReturnXML, "DrvDate" )
	DownloadDrvInfo["DrvSize"	]		= GetInfoByTagFromXml( ReturnXML, "DrvSize" )
	DownloadDrvInfo["DrvVer"	]		= GetInfoByTagFromXml( ReturnXML, "DrvVer" )
	DownloadDrvInfo["CatFileName"]		= GetInfoByTagFromXml( ReturnXML, "DrvCatFileName" )
	DownloadDrvInfo["InfFileName"]		= GetInfoByTagFromXml( ReturnXML, "DrvInfFileName" )
	DownloadDrvInfo["DrvInfSection"]	= GetInfoByTagFromXml( ReturnXML, "DrvInfSection"  )
	DownloadDrvInfo["DrvProvider"]		= GetInfoByTagFromXml( ReturnXML, "DrvProvider"  )

	if ( !DrvCert.CloseCertProvider( SvcCertProvider )) DispProgressInfo( 100 , "Close cert provider failed(provider=" + SvcCertProvider + ")");
	SvcCertProvider = null;

	if ( !DrvCert.CloseUserCert( SvcCertContext )) DispProgressInfo( 100 , "Close cert handle failed(handle=" + SvcCertContext + ")");
	SvcCertContext = null;

	if (!DrvCert.ReleaseProvider())
	{
		DispProgressInfo( 100 , "Release CSP failed\n" + DrvCert.ErrorString);
	}
	else
	{
		AlertInfo += "\n[] CSP released !" + "\n";
	}

	if ( ErrorInfo == "" || ErrorInfo == null )
	{
		
		DispProgressInfo( 100 )
	}
	if (g_TestingInfoDisp) newElement4.innerText = AlertInfo

	
	if (SoapRequestXML)		SoapRequestXML		= null
	if (PackagedXml)		PackagedXml			= null
	if (ReturnXML)			ReturnXML			= null
	if (CertKeyPhysicalID)	CertKeyPhysicalID	= null
	if (CertContent)		CertContent			= null
	if (SignValue)			SignValue			= null
	if (SignedXml)			SignedXml			= null
	if (AlertInfo)			AlertInfo			= null










return ( DownloadDrvInfo )
}	



























function ClientDeployDriver( DownloadDrvInfo , DeviceInfo , SvcCertInfo )
{
	
	
	
	
	
	
	
	
	
	

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
    
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	SetCurProcessBeginEndPercent( 0 , 30 )
	DispProgressInfo( 0 )
	DrvCert.UIRefresh()
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	var CurUserAppDataFolderPath = DrvCert.GetFolderPath( 36 )	
	                                                            
	if ( !CurUserAppDataFolderPath )
	{
		DispMessageInfo( "" + PromptArray["DrvCert.js_1983_1"] + "%Application Data%" + PromptArray["DrvCert.js_1983_2"] + "" )
		return false
	}
	DispProgressInfo( 20 )
	DrvCert.UIRefresh()



























	var hKey  = DrvCert.RegCreateKey( 2     , "SOFTWARE\\Walker" ) 
	var hKey2 = DrvCert.RegCreateKey( hKey  , "MyDrivers" )
	var hKey3 = DrvCert.RegCreateKey( hKey2 , "DownloadDrv" ) 
	var hKey4 = DrvCert.RegCreateKey( hKey3 , DownloadDrvInfo["DrvProvider"]  + "&" + DownloadDrvInfo["DrvClass"]) 
	var ValueData = DrvCert.RegQueryValue( hKey4 , "InstanceNumbers" )

	var ValueDataString = ""
	var InstanceNumber = 0
	if (!ValueData)
	{
		InstanceNumber  = 1
		ValueDataString =	"<RegInfo>"
						+		"<RegValueType>REG_DWORD</RegValueType>"
						+		"<RegValueData>" + InstanceNumber + "</RegValueData>"
						+	"</RegInfo>"	
		DrvCert.RegSetValue( hKey4 , "InstanceNumbers" , ValueDataString )
	}
	else
	{
		InstanceNumber  = parseInt(ValueData.toString(10)) + 1
		ValueDataString =	"<RegInfo>"
						+		"<RegValueType>REG_DWORD</RegValueType>"
						+		"<RegValueData>" + InstanceNumber + "</RegValueData>"
						+	"</RegInfo>"	
		DrvCert.RegSetValue( hKey4 , "InstanceNumbers" , ValueDataString )
	}

	
	
	
	
	
	
	

	
	CurUserAppDataFolderPath += "\\" + "MyDrivers\\DownloadDrv"		  +
								"\\" + DownloadDrvInfo["DrvProvider"] + 
								"\\" + DownloadDrvInfo["DrvClass"]    +
								"\\" + InstanceNumber

	
	var DownloadDrvFileName = CurUserAppDataFolderPath + "\\Download.cab"

	if ( !DrvCert.SaveBASE64ToBinFile( DownloadDrvInfo["DrvContent"] , DownloadDrvFileName ) )
	{
		DispMessageInfo( "" + PromptArray["DrvCert.js_2061_1"] + "<br>" + DownloadDrvFileName )
		return false
	}
	else
	{
		
	}
	DispProgressInfo( 40 )
	DrvCert.UIRefresh()

	
	if ( !DrvCert.ExtractCabToPath( DownloadDrvFileName , CurUserAppDataFolderPath ) )
	{
		DispMessageInfo( "" + PromptArray["DrvCert.js_2074_1"] + "" )
		return false
	}
	DispProgressInfo( 80 )
	DrvCert.UIRefresh()

	
	DrvCert.DeleteFile( DownloadDrvFileName )	
	DispProgressInfo( 100 )
	DrvCert.UIRefresh()

	SetCurProcessBeginEndPercent( 30 , 40 )
	
	
	

	SetCurProcessBeginEndPercent( 40 , 60 )
    
	
	
	
	
	
	
	
	
	
	
	
	
	
	var DencryptKey = GetDriverPackageDencryptKey( SvcCertInfo )
	if ( !DencryptKey )
	{
		return false
	}
	
	SetCurProcessBeginEndPercent( 60 , 70 )
	
	
	var FileNameXml = DrvCert.FindFileInPath( CurUserAppDataFolderPath + "\\*.enc" )
	var EncFileName = GetXmlSingleNodeText( FileNameXml , "FileItem0" )
	if (!EncFileName)
	{
		DispMessageInfo( "" + PromptArray["DrvCert.js_2118_1"] + "" )
		return false
	}
	
	var DataInBASE64 = DrvCert.GetBASE64StringFromBinFile( CurUserAppDataFolderPath + "\\" + EncFileName )

	
	var DecryptedDataInBASE64 = DrvCert.DencryptDataByKey( DataInBASE64 , DencryptKey )
	DrvCert.SaveBASE64ToBinFile( DecryptedDataInBASE64 , CurUserAppDataFolderPath + "\\DrvFiles.cab" )


	SetCurProcessBeginEndPercent( 70 , 80 )
	
	DrvCert.ExtractCabToPath( CurUserAppDataFolderPath + "\\DrvFiles.cab" , CurUserAppDataFolderPath )
	DrvCert.DeleteFile( CurUserAppDataFolderPath + "\\DrvFiles.cab" )

	SetCurProcessBeginEndPercent( 80 , 90 )
	
	DrvCert.DeleteFile( CurUserAppDataFolderPath + "\\" + EncFileName )

	var FileNameXml = DrvCert.FindFileInPath( CurUserAppDataFolderPath + "\\*.inf" )
	var InfFileName = GetXmlSingleNodeText( FileNameXml , "FileItem0" )
	if (InfFileName) DrvCert.DeleteFile( CurUserAppDataFolderPath + "\\" + InfFileName )

	var FileNameXml  = DrvCert.FindFileInPath( CurUserAppDataFolderPath + "\\*.sign" )
	var SignFileName = GetXmlSingleNodeText( FileNameXml , "FileItem0" )
	if (SignFileName) DrvCert.DeleteFile( CurUserAppDataFolderPath + "\\" + SignFileName )

	SetCurProcessBeginEndPercent( 90 , 100 )









































	var hKey5 = DrvCert.RegCreateKey( hKey4 , InstanceNumber ) 
	var ValueDataString =	"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData>" + CurUserAppDataFolderPath + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "BackupBaseDir" , ValueDataString )

	
	
	var DrvBackupStatus = 0x00000080 | 0x00080000 
	
	if ( DownloadDrvInfo["CatFileName"] ) DrvBackupStatus |= 0x00040000
	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_DWORD</RegValueType>"
						+		"<RegValueData>" + DrvBackupStatus.toString(10) + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "BackupDriverStatus" , ValueDataString )
	
	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData>" + DownloadDrvInfo["CatFileName"] + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "CatalogFileName" , ValueDataString )

	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData></RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "DeviceDesc" , ValueDataString )

	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData>" + DownloadDrvInfo["DrvDate"] + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "DrvDate" , ValueDataString )

	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData>" + DownloadDrvInfo["DrvVer"] + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "DrvVersion" , ValueDataString )

	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData>" + SvcCertInfo["DeviceID"] + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "HardwareID" , ValueDataString.replace(/&/gi ,"&amp;") )

	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_MULTI_SZ</RegValueType>"
						+		"<RegValueData>" + DeviceInfo["HardwareID"].replace(/;/gi ," ") 
												 + DeviceInfo["CompatibleID"].replace(/;/gi ," ")
							   + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "HardwareIDsCompatibleIDs" , ValueDataString.replace(/&/gi ,"&amp;") )


	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData>" + DownloadDrvInfo["DrvInfSection"] + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "InfSection" , ValueDataString )



	ValueDataString =		"<RegInfo>"
						+		"<RegValueType>REG_SZ</RegValueType>"
						+		"<RegValueData>" + DownloadDrvInfo["InfFileName"] + "</RegValueData>"
						+	"</RegInfo>"	
	DrvCert.RegSetValue( hKey5 , "SystemInfName" , ValueDataString )

	DrvCert.RegCloseKey( hKey  )
	DrvCert.RegCloseKey( hKey2 )
	DrvCert.RegCloseKey( hKey3 )
	DrvCert.RegCloseKey( hKey4 )
	DrvCert.RegCloseKey( hKey5 )
return true
}

function GetDriverPackageDencryptKey( SvcCertInfo )
{
    
	
	
	
	
	
	
	
	
	
	
	

	var DencryptKey = ""

	var EndURI = "";
	var AlertInfo="Testing info:\n";
	var SoapRequestXML = "";
	var ReturnXML="";

	CreateDymanicDocElement( "newElement5" )



	DispProgressInfo( 0 )
	DrvCert.UIRefresh()

	
	var SvcCertContext = FindDSPSvcCertByCertInfo( SvcCertInfo )
	if (!SvcCertContext)
	{
		DispMessageInfo("" + PromptArray["DrvCert.js_2300_1"] + "" + SvcCertInfo["Issuer"] + "" + PromptArray["DrvCert.js_2300_2"] + "\"" + SvcCertInfo["DeviceID"] + "\"" + PromptArray["DrvCert.js_2300_3"] + "" + SvcCertInfo["Class"] + "" + PromptArray["DrvCert.js_2300_4"] + "" )
		return ( DencryptKey )
	}
	DispProgressInfo( 10 )
	DrvCert.UIRefresh()

	var SvcCertProvider = DrvCert.OpenCertProvider( SvcCertContext , 1)
	if (!SvcCertProvider) 
	{
		DispMessageInfo( "Open cert provider failed(cert handle=" + SvcCertContext + ") : " + DrvCert.ErrorString); 
		return ( DencryptKey )
	}
	DispProgressInfo( 20 )
	DrvCert.UIRefresh()

	var SvcCertKeyPhysicalID = DrvCert.GetCertKeyPhysicalID( SvcCertProvider , 1);
	if ( SvcCertKeyPhysicalID == "" )
	{
		DispMessageInfo( "Get cert key Physical-ID error<br>" + DrvCert.ErrorString);
		return ( DencryptKey )
	}
	DispProgressInfo( 30 )
	DrvCert.UIRefresh()

	var SvcCertContent = DrvCert.GetCertContent( SvcCertContext )
	if (!SvcCertContent || SvcCertContent == null)
	{
		DispMessageInfo( "Get cert content error<br>" + DrvCert.ErrorString);
		return ( DencryptKey )
	}
	DispProgressInfo( 40 )
	DrvCert.UIRefresh()


	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:Header xmlns:wsu =\"http:\/\/schemas.xmlsoap.org/ws/2002/07/utility\" ";
	SoapRequestXML += "                    xmlns:wsse=\"http:\/\/schemas.xmlsoap.org/ws/2002/07/secext\" >\n";
	SoapRequestXML += "      <SignCertInfo>\n";
	SoapRequestXML += "         <CertContent>"		+ SvcCertContent		+ "</CertContent>\n";
	SoapRequestXML += "         <CertPhysicalID>"	+ SvcCertKeyPhysicalID  + "</CertPhysicalID>\n";
	SoapRequestXML += "      </SignCertInfo>\n";
	
	
	
	
	
	
	
	

	
	
	
	
	
	
	
	SoapRequestXML += "   </SOAP-ENV:Header>\n";

	SoapRequestXML += "   <SOAP-ENV:Body>\n";
	SoapRequestXML += "     <n:GetDPKey xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"; 
	SoapRequestXML += "			<EncryptKeyID>" + SvcCertInfo["EncryptKeyID"] + "</EncryptKeyID>\n"
	SoapRequestXML += "			<SubmitNumber>" + SvcCertInfo["SubmitNumber"] + "</SubmitNumber>\n"
	SoapRequestXML += "     </n:GetDPKey>\n";
	SoapRequestXML += "   </SOAP-ENV:Body>\n";
	SoapRequestXML += "</SOAP-ENV:Envelope>";

	
	
	var objTime = new Date()
	
	var StampTime = GetStampTime( objTime.getTime() - SvcCertInfo["LocaleServerTimeOffset"] )		
	var CreateStampTime = StampTime["Create"]
	var ExpireStampTime = StampTime["Expire"]
	var DateTimeFormat    = "VirtualTime"

	var PackagedXml = StampXml( SoapRequestXML , CreateStampTime , ExpireStampTime , DateTimeFormat )
	if ( PackagedXml == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_2381_1"] + "XML" + PromptArray["DrvCert.js_2381_2"] + "")
		return ( DencryptKey )
	}

	var SignData = XmlToText( PackagedXml );
	if (SignData == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_2388_1"] + "XML" + PromptArray["DrvCert.js_2388_2"] + "")
		return ( DencryptKey )
	}

	var SignValue = DrvCert.SignDataInString( SvcCertContext , SignData );
	var SignedXml = SignXml( PackagedXml , SignValue );
	if ( SignedXml == null)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_2396_1"] + "XML" + PromptArray["DrvCert.js_2396_2"] + "")
		return ( DencryptKey )
	}
	PackagedXml = SignedXml

	var Hostname = ServerName.value
	EndURI = Hostname + SOAP_URL_GET_DP_KEY	
	
	ReturnXML = DrvCert.SoapClientRequest( EndURI , PackagedXml );
	if (!ReturnXML)
	{
		DispProgressInfo( 100 , "" + PromptArray["DrvCert.js_2407_1"] + "SOAP" + PromptArray["DrvCert.js_2407_2"] + "")
		DownloadDrvInfo["Success"] = false
		return ( DencryptKey )
	}
	AlertInfo += "\n[] request package is : \n\n" + PackagedXml + "\n";
	AlertInfo += "\n[] return package is :\n\n"   + ReturnXML   + "\n";

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	var ErrorCode = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_CODE_TAG )

	if (ErrorInfo != null) 
	{
		DispProgressInfo( 100 , ErrorInfo )
		return ( DencryptKey )
	}

	
	
	DencryptKey	= GetInfoByTagFromXml( ReturnXML, "KeyInBASE64" )

	if ( !DrvCert.CloseCertProvider( SvcCertProvider )) DispProgressInfo( 100 , "Close cert provider failed(provider=" + SvcCertProvider + ")");
	SvcCertProvider = null;

	if ( !DrvCert.CloseUserCert( SvcCertContext )) DispProgressInfo( 100 , "Close cert handle failed(handle=" + SvcCertContext + ")");
	SvcCertContext = null;

	if (!DrvCert.ReleaseProvider())
	{
		DispProgressInfo( 100 , "Release CSP failed\n" + DrvCert.ErrorString);
	}
	else
	{
		AlertInfo += "\n[] CSP released !" + "\n";
	}

	if ( ErrorInfo == "" || ErrorInfo == null )
	{
		
	}
	if (g_TestingInfoDisp) newElement5.innerText = AlertInfo

	
	if (SoapRequestXML			!= undefined )			SoapRequestXML		= null
	if (PackagedXml				!= undefined )			PackagedXml			= null
	if (ReturnXML				!= undefined )			ReturnXML			= null
	if (SvcCertKeyPhysicalID	!= undefined )			SvcCertKeyPhysicalID= null
	if (SvcCertContent			!= undefined )			SvcCertContent		= null
	if (SignValue				!= undefined )			SignValue			= null
	if (SignedXml				!= undefined )			SignedXml			= null
	if (AlertInfo				!= undefined )			AlertInfo			= null

return ( DencryptKey )
}






























































































