//Copyright 2005-2008 e-Software , All Rights Reserved.
//Written by Gengjian. Email:gengs@163.com
//**Start Encode**
var g_NewDeviceInfo	= new Array;			
var g_CurNewDevice	= 0;

var g_oTable ;								
var g_oTBody0 ;								
var g_maxcols=8;							
var g_mincols=2;							


var g_ifDisplayInternalErrorInfo = false;	

var g_OSEnumDevFlag = 0;					
var g_EnumOverTimerHandle;					



var g_DeviceInfo                        = new Array         
var g_DeviceRows                        = 0                 


var g_NormalSystemDeviceInfoArray	    = new Array;		
var g_NormalSystemDeviceRows	        = 0;				

var g_UserDrvDeviceInfoArray            = new Array         
var g_UserDrvDeviceRows	                = 0                 

var g_DeviceRowsNeedExportDriver		= 0                 

var g_ExportedDeviceArray               = new Array
var g_ExportedDeviceRows                = 0
var g_ExportedSuccessDeviceRows         = 0

var g_NoExportDeviceArray                   = new Array
var g_NoExportDeviceRows                = 0

var g_UserSelectExpDrvNumber            = 0

var g_DevErrDeviceInfoArray             = new Array();
var g_DevErrDeviceRows	                = 0                 



var g_ImportedDeviceArray               = new Array
var g_ImportedDeviceRows                = 0
var g_ImportedSuccessDeviceRows         = 0

var g_NoImportDeviceArray               = new Array
var g_NoImportDeviceRows                = 0

var g_UserSelectImpDrvNumber            = 0

var UPLOAD_CAB_FILE_BUFFER_SIZE     = 10240       
var DOWNLOAD_CAB_FILE_BUFFER_SIZE   = 10240       


var CGI_UPLOAD_CAB_FILE_BUFFER_SIZE   = 33*1024       
var CGI_DOWNLOAD_CAB_FILE_BUFFER_SIZE = 33*1024       


var g_UserID                  = 0
var g_UserExportedDriverRows  = 0

var g_CanUserConnectToServer            = false

var g_NeedReenum 		= 0;				
var g_MaxDeviceIndex 	= 0;				

var g_DrvInstLogFilePath	= ""    
var g_AppLaunchPath			= ""	
var g_ClientStartPath		= ""	
var g_DrvInstLogFileName	= "drvinst.log"






var INF_ENCRYPT_CONST_STRING = "e-Software.cn"   



var CLIENT_ACCESS_MODE_SERVER_CLIENT = "ServerClient"
var CLIENT_ACCESS_MODE_USER_CLIENT   = "UserClient"




var g_SkipExpCurDrvFlag


var g_SkipImpCurDrvFlag




var UNKNOWN_DEVICE_ID           =  "UNKNOWN\\NULL_DEVICE_NULL_DEVICE_NULL_DEVICE"

var DOWNLOAD_PATH               = "eDrivers_Backup"



var g_UserHostSerialNumber      = ""

var g_DownloadPath              = ""        

var g_DefaultLoader             = "DrvExp"         


var g_CaseID                    = ""               




function DisplayMessage( Msg )
{
	InputDataBox4.value		= InputDataBox4.value + "\n" + Msg;
	InputDataBox4.scrollTop = InputDataBox4.scrollHeight ; 
	
	if (g_DrvInstLogFilePath)
	{
		
		
		
		
		
		
		DrvInst.AppendStringToFileEnd( g_DrvInstLogFilePath , "\r\n" + GetLocalTime() + Msg)
	}
	
	else
	{
		
	}
}

function GetLocalTime()
{
		var d  = new Date();
        var year  = d.getYear()
        var month = (d.getMonth() + 1)
        var date  = d.getDate()
        var hours = d.getHours()
        var min   = d.getMinutes()
        var sec   = d.getSeconds()
        var mil   = d.getMilliseconds().toString(10)
            year  = year + "-"
            month = ( month <10 ) ? "0" + month + "-" : month + "-"
            date  = ( date  <10 ) ? "0" + date  + " " : date  + " "
            hours = ( hours <10 ) ? "0" + hours + ":" : hours + ":"
            min   = ( min   <10 ) ? "0" + min   + ":" : min   + ":"
            sec   = ( sec   <10 ) ? "0" + sec   + ":" : sec   + ":"
            mil   = "0000".substring(0,4-mil.length-1) + mil
		var	str   = "[ " + year + month + date + hours + min + sec + mil  + " ] "
   return( str )
}


function StartDriverExport()
{
    
    var CookieFlag = GetCookie( "OpenRunLogWinFlag" )
	if ( ( CookieFlag == "true") || !CookieFlag ) restoreTransientMessage()


	
	
	
	
	
	
	

	ResetInitVal();
	
	

	
	
	
	
	
	var hKey4 = DrvCert.RegOpenKey( 2 , "SOFTWARE\\Walker\\DrvInst\\Setup")
	g_DrvInstLogFilePath = DrvCert.RegQueryValue( hKey4 , "DrvInstLogFilePath" )
	
	
	if (!g_DrvInstLogFilePath && g_ClientStartPath) g_DrvInstLogFilePath = g_ClientStartPath + "\\" + g_DrvInstLogFileName


	DisplayMessage( "===============================================================" )
	DisplayMessage( "" + PromptArray["DrvExp.js_197_1"] + "" + PromptArray["DrvExp.js_197_2"] + "..." )

	
	if (DrvInst.DrvInstInit() == 0)
	{
		return -2;
	}
	g_ifDisplayInternalErrorInfo = false;

	var hostname;
	hostname = ServerName.value;
	DrvInst.DownloadHostname = hostname;
	g_CanUserConnectToServer = DrvInst.ConnectAddressLocal(hostname);
	if (g_CanUserConnectToServer)
	{
		DisplayMessage(	"" + PromptArray["DrvExp.js_212_1"] + "http:\/\/" + hostname + "" + PromptArray["DrvExp.js_212_2"] + "");

	}
	else
	{
		DisplayMessage("" + PromptArray["DrvExp.js_217_1"] + "http:\/\/" + hostname + "" + PromptArray["DrvExp.js_217_2"] + "");
        
        
        
        
		
		
        
	}

    
    
    
    

    
    
	DrvInst.ShowHiddenDevice = 1
	
	
	g_OSEnumDevFlag = 1;


	
	EnumDevice(1);

	return 0;
}




function ResetInitVal()
{
	oTableContainer.innerText = ""

	
	

	DrvInst.DrvInstFinish();

	
	g_ifDisplayInternalErrorInfo = true;

	DrvInst.FinishedPercent	= 0 ;

	

	
	
	

	var UrlPathname = location.pathname;	
	var UrlHostname = location.hostname;	
	
	
	if (UrlHostname == "")
	{
		
		UrlPathname = UrlPathname.replace( /%20/gi , " ");
		if (UrlPathname.charAt(0) == "/")
		{
			
			UrlPathname = UrlPathname.substring(1 , UrlPathname.lastIndexOf("\\")); 
		}
		else
		{
			UrlPathname = UrlPathname.substring(0 , UrlPathname.lastIndexOf("\\")); 
		}
	}
	
	else
	{
		
		UrlPathname = "";
	}

	g_ClientStartPath = UrlPathname

	
	DrvInst.DownloadHostname = UrlHostname;
	DrvInst.CurrentWorkDirectory = UrlPathname;

	(DrvInst.CurrentWorkDirectory == "")
		?DisplayMessage("" + PromptArray["DrvExp.js_301_1"] + "NULL")
		:DisplayMessage("" + PromptArray["DrvExp.js_302_1"] + "" + DrvInst.CurrentWorkDirectory);

	DeleteDeviceTable();

	return 0;
}




var g_Finish = 0;
var g_timerID="";



function ApplyInitProcessEvent()
{
	
}




function EnumDevice(EnumMode)
{
	

	
	if (( EnumMode != 0) && DrvInst.GetSysInstallDrvStatus())
	{
		DisplayMessage("Windows" + PromptArray["DrvExp.js_332_1"] + "")
		DisplayMessage("" + PromptArray["DrvExp.js_333_1"] + "...");
		DrvInst.EnumDevice(1);
		return 1;
	}
    
    
	
    
	
	
	
    
    
	
	
	
	
    
	
    
    
    
    
    
    
    
	
	
	
    
    
	
    
	
	
    
    
	
	
	
	
    
	
    
    
    
    
    
    
	
	
	

    
	
    
    
    
    if ( !g_UserID)
    {
        DisplayMessage("" + PromptArray["DrvExp.js_393_1"] + "...");
        Title.innerHTML = '<br><center>' + PromptArray["DrvExp.js_394_1"] + '...</center>'
        DrvCert.UIRefresh()

        var RetRegUserInfo = RegUserHardwareInfo()
        
        
        
        
        
        
        
        
        
        
        

        if ( !RetRegUserInfo["Success"] )
        {
            
            
            
            
            
            if ( RetRegUserInfo["Info"] == "Unauthorized users" )
            {
                Title.innerHTML = "<br><center>" + PromptArray["DrvExp.js_419_1"] + "<br><br><a href='../../../login_cn.htm'>" + PromptArray["DrvExp.js_419_2"] + "</a></center>"
                DrvCert.UIRefresh()
                return false
            }
            
            else if ( RetRegUserInfo["Info"] == "Unauthorized host" )
            {
                Title.innerHTML = "<br><center>" + PromptArray["DrvExp.js_426_1"] + "<br><br><a href='../../../login_cn.htm'>" + PromptArray["DrvExp.js_426_2"] + "</a></center>"
                DrvCert.UIRefresh()
                return false
            }
            else
            {
                Title.innerHTML = "<br><center>" + PromptArray["DrvExp.js_432_1"] + "<br>" + RetRegUserInfo["Info"] + "</center>"
                DrvCert.UIRefresh()
                return false
            }
        }
        g_UserID = RetRegUserInfo["UserID"]
        
        
        
        
        SetCookie( "UserID" , g_UserID )

        
        
        
        var DownloadPath = ""
        
        if ( ( RetRegUserInfo["UserType"].toUpperCase() == "NEW" )  || !RetRegUserInfo["DownloadPath"] || RetRegUserInfo["DownloadPath"] == "null" )
        {
            DownloadPath = GetDownloadDrive() + "\\" + DOWNLOAD_PATH
            SubmitUserDownloadDriverPath( g_UserID , DownloadPath )
        }
        
        else
        {
            DownloadPath = RetRegUserInfo["DownloadPath"]
        }
        
        g_DownloadPath = DownloadPath

        
        
        
        DrvInst.SetMyDriversRootDir( DownloadPath )

        
        g_CaseID = RetRegUserInfo["CaseID"]
        DisplayMessage("" + PromptArray["DrvExp.js_469_1"] + ":" + g_CaseID );

    }
    
    
	DisplayMessage("" + PromptArray["DrvExp.js_474_1"] + "...");
    Title.innerHTML = '<br><center>' + PromptArray["DrvExp.js_475_1"] + '...</center>'
	DrvCert.UIRefresh()
	 
	g_NormalSystemDeviceRows    = 0;
    g_DeviceRows                = 0

	g_UserDrvDeviceRows         = 0
	g_DevErrDeviceRows          = 0
	g_UserSelectExpDrvNumber    = 0
	g_UserSelectImpDrvNumber    = 0

	
    g_DeviceRowsNeedExportDriver	= 0

    g_ExportedDeviceRows        = 0
    g_ImportedDeviceRows        = 0
    g_ExportedSuccessDeviceRows = 0
    g_NoExportDeviceRows        = 0

	DrvInst.EnumDevice(0);
	g_OSEnumDevFlag = 0;
	g_MaxDeviceIndex = DrvInst.DeviceIndex + 1;

    
	BackupUserDriverForExport()

	
	g_NormalSystemDeviceRows    = 0;
    g_DeviceRows                = 0

	g_UserDrvDeviceRows         = 0
	g_DevErrDeviceRows          = 0
	g_UserSelectExpDrvNumber    = 0
	g_UserSelectImpDrvNumber    = 0

	
    g_DeviceRowsNeedExportDriver = 0
    g_ExportedDeviceRows        = 0
    g_ImportedDeviceRows        = 0
    g_ExportedSuccessDeviceRows = 0
    g_NoExportDeviceRows        = 0

	DrvInst.EnumDevice(0);
	g_OSEnumDevFlag = 0;
	g_MaxDeviceIndex = DrvInst.DeviceIndex + 1;
    
    

    
    if ( RetRegUserInfo["UserType"] == "New" )
    {
        
        DisplayMessage("" + PromptArray["DrvExp.js_527_1"] + "...");
        Title.innerHTML = '<br><center>' + PromptArray["DrvExp.js_528_1"] + '...</center>'
                        + '<br>'
                        + '<table align=center id=PercentTbl width=400 bgColor=black border=0 cellSpacing=0 cellPadding=0 >'
                        + '<tr><td>'
                        + '  <IMG id="PercentImg" SRC="img/img.gif" WIDTH="0" HEIGHT="16" BORDER=0>'
                        + '</td></tr></table>'
                        + '<div id=PercentString>&nbsp;</div>'
        DrvCert.UIRefresh()
        RegUserDeviceInfoList( g_UserID )
    }


	DisplayMessage("" + PromptArray["DrvExp.js_540_1"] + "...");
    Title.innerHTML = '<br><center>' + PromptArray["DrvExp.js_541_1"] + '...<br></center>'
	                + '<br>'
					+ '<table align=center id=PercentTbl width=400 bgColor=black border=0 cellSpacing=0 cellPadding=0 >'
					+ '<tr><td>'
					+ '  <IMG id="PercentImg" SRC="img/img.gif" WIDTH="0" HEIGHT="16" BORDER=0>'
					+ '</td></tr></table>'
					+ '<div id=PercentString>&nbsp;</div>'
	DrvCert.UIRefresh()
	
	GetDriverExportStatusFromDB( g_UserID )

    Title.innerHTML = ''

    g_UserExportedDriverRows = GetUserExportedDriverRows()
    
    var AccountInfoArray = GetAccountInfoFromServer( g_SessionEmail )

	UserIDTag.innerHTML =   '<table>'
                          + '<tr>'
                          + '<td>' + PromptArray["DrvExp.js_560_1"] + ':</td><td>' + g_UserID + '&nbsp;&nbsp;&nbsp;<br></td>'
                          + '</tr>'
                          + '<tr>'
                          + '<td>' + PromptArray["DrvExp.js_563_1"] + ':</td><td>' + ( g_UserExportedDriverRows ) + '&nbsp;&nbsp;&nbsp;<br></td>'
                          + '</tr>'
                          
                          + '<tr>'
                          + '<td>' + PromptArray["DrvExp.js_567_1"] + ':</td><td align=left><span id=AmountValue>' + AccountInfoArray["Amount"] + '</span></td>'
                          + '</tr>'
                          
                          + '</table>'


    ListAllDevicesForImportExportDriver()
}

function ListAllDevicesForImportExportDriver()
{
	DeleteDeviceTable()
	CreateDeviceTable();

	
	ListDriverForExport()

    
    if ( g_DeviceRowsNeedExportDriver )
    {
        
        
        
        
        ListDriverProtected()

        oRow = document.createElement("TR");
        oCell = document.createElement("TD");
        oCell.colSpan= g_maxcols+1
        oCell.align = "center"
        oCell.innerHTML = "<br>"
                        + "<input type='button' value='" + PromptArray["DrvExp.js_598_1"] + "' onclick='location.reload()'>"
                        + "<input type='button' value='" + PromptArray["DrvExp.js_599_1"] + "' onclick='DriverImportExportProcedure()'>"

        oRow.appendChild(oCell);
        g_oTBody0.appendChild(oRow);

    }
    else
    {
        oRow = document.createElement("TR");
        oCell = document.createElement("TD");
        oCell.colSpan= g_maxcols+1
        oCell.align = "center"
        oCell.innerHTML = "<br>"
                        
                        
                        + "" + PromptArray["DrvExp.js_614_1"] + "" + g_MaxDeviceIndex + "" + PromptArray["DrvExp.js_614_2"] + "" + g_UserDrvDeviceRows + "" + PromptArray["DrvExp.js_614_3"] + ""


        oRow.appendChild(oCell);
        g_oTBody0.appendChild(oRow);

        
        
        
        
        ListDriverProtected()

        oRow = document.createElement("TR");
        oCell = document.createElement("TD");
        oCell.colSpan= g_maxcols+1
        oCell.align = "center"
        oCell.innerHTML = "<br>"
                        
                        + "<br><br><br><center><input type='button' value='" + PromptArray["DrvExp.js_632_1"] + "  " + PromptArray["DrvExp.js_632_2"] + "' onclick='if ( this.value == \"" + PromptArray["DrvExp.js_632_3"] + "  " + PromptArray["DrvExp.js_632_4"] + "\" ) return false;window.open( \"Comment.htm\" );this.value=\"" + PromptArray["DrvExp.js_632_5"] + "  " + PromptArray["DrvExp.js_632_6"] + "\"'></center>"

        oRow.appendChild(oCell);
        g_oTBody0.appendChild(oRow);
    }
   oTableContainer.align="center"

}

function ApplyMsgEvent()
{
	if (!g_ifDisplayInternalErrorInfo) return 0;

	if (DrvInst.InitExitCode == 0) 
	{ 
		
		
		DisplayMessage(DrvInst.StatusString);
	} 
	else 
	{ 
		DisplayMessage(DrvInst.StatusString + "(code: 0x000" + DrvInst.InitExitCode.toString(16)  + ")");
	} 
}



function CreateDeviceTable()
{
	var oRow, oCell;
	var i, j;
	
	
	var heading = new Array;
	
	
	
	
	
	
	
	
	heading[0] = heading[1] = heading[2] = heading[3] = heading[4] = heading[5] = heading[6] = heading[7] = "";

	
	g_oTable		= document.createElement("TABLE");
	var oTHead	    = document.createElement("THEAD");
	g_oTBody0		= document.createElement("TBODY");
	var oTFoot	    = document.createElement("TFOOT");
	var oCaption    = document.createElement("CAPTION");


	
	g_oTable.appendChild(oTHead);
	g_oTable.appendChild(g_oTBody0);
	g_oTable.appendChild(oTFoot);
	g_oTable.appendChild(oCaption);

	
	
	
	g_oTable.border     ="0";
	g_oTable.cellspacing="0";
	g_oTable.cellpadding="0";
	
	
	
	
	g_oTable.ID="DeviceTable";

	
	oRow = document.createElement("TR");
	oTHead.appendChild(oRow);
	
	

	
	for (i=g_mincols; i<g_maxcols; i++)
	{
	  oCell = document.createElement("TD");
	  
	  oCell.innerHTML = "";
	  
	  oRow.appendChild(oCell);
	}

	
	oRow = document.createElement("TR");
	oTFoot.appendChild(oRow);

	oCell = document.createElement("TD");
	oRow.appendChild(oCell);

	oCell.innerText = "";
	oCell.align		= "center";
	oCell.colSpan = g_maxcols;
	
	

	
	oCaption.innerText = "";
	oCaption.style.fontSize = "10";
	oCaption.align = "bottom";

	
	oTableContainer.appendChild(g_oTable);
}




function DeleteDeviceTable()
{
	if (g_oTable)	g_oTable.removeNode(true);
    oTableContainer.innerHTML= ""
}








function ImpExpApplyEnumDeviceEvent()
{
	var oRow, oCell;
	var j;
	var stock = new Array;

	
	

    
	GetDeviceInfoToArray(stock);

    
    SaveDeviceInfoToArray(stock,g_DeviceInfo,g_DeviceRows);
    g_DeviceRows ++;

    
	if ( !stock[5] && !(stock[7] & 0x00080000) )
	{
		
		SaveDeviceInfoToArray(stock,g_NormalSystemDeviceInfoArray,g_NormalSystemDeviceRows);
	
		g_NormalSystemDeviceRows ++;

		return 0;
	}
	

	

	
	
	
	if ( !stock[5] )
	{
		
		SaveDeviceInfoToArray(stock , g_UserDrvDeviceInfoArray , g_UserDrvDeviceRows);
        
		g_UserDrvDeviceInfoArray[ g_UserDrvDeviceRows + ',21']= true
        
        g_UserDrvDeviceRows ++

	}
	
    
	else
	{
        
        
        
        
        
        
        
        
        
        if ( stock[3] )
        {
            
            SaveDeviceInfoToArray(stock,g_NormalSystemDeviceInfoArray,g_NormalSystemDeviceRows);
            g_NormalSystemDeviceRows ++;
        }
        else
        {

            
            SaveDeviceInfoToArray(stock , g_DevErrDeviceInfoArray , g_DevErrDeviceRows);
            g_DevErrDeviceInfoArray[ g_DevErrDeviceRows + ',21']= true
            g_DevErrDeviceRows ++
        }
        
	}

	

	
	
	
	
	
    
	
    
	
	
	
	
	
	
	
	


}

function SaveDeviceInfoToArray(DeviceInfo,SavetoArray,row)
{
	SavetoArray[row + ",0"  ] = g_DeviceRows;
	SavetoArray[row + ",1"  ] = DeviceInfo[1];
	SavetoArray[row + ",2"  ] = DeviceInfo[2];
	SavetoArray[row + ",3"  ] = DeviceInfo[3];
	SavetoArray[row + ",4"  ] = DeviceInfo[4];
	SavetoArray[row + ",5"  ] = DeviceInfo[5];
	SavetoArray[row + ",6"  ] = DeviceInfo[6];
	SavetoArray[row + ",7"  ] = DeviceInfo[7];
	SavetoArray[row + ",8"  ] = DeviceInfo[8];
	SavetoArray[row + ",9"  ] = DeviceInfo[9];
	SavetoArray[row + ",10" ] = DeviceInfo[10];
	SavetoArray[row + ",11" ] = DeviceInfo[11];
	SavetoArray[row + ",12" ] = DeviceInfo[12];
	SavetoArray[row + ",13" ] = DeviceInfo[13];
}
function ReadArrayToDeviceInfo(DeviceInfo,ReadToArray,row)
{
	DeviceInfo[0]  = ReadToArray[row + ",0"  ] ;
	DeviceInfo[1]  = ReadToArray[row + ",1"  ] ;
	DeviceInfo[2]  = ReadToArray[row + ",2"  ] ;
	DeviceInfo[3]  = ReadToArray[row + ",3"  ] ;
	DeviceInfo[4]  = ReadToArray[row + ",4"  ] ;
	DeviceInfo[5]  = ReadToArray[row + ",5"  ] ;
	DeviceInfo[6]  = ReadToArray[row + ",6"  ] ;
	DeviceInfo[7]  = ReadToArray[row + ",7"  ] ;
	DeviceInfo[8]  = ReadToArray[row + ",8"  ] ;
	DeviceInfo[9]  = ReadToArray[row + ",9"  ] ;
	DeviceInfo[10] = ReadToArray[row + ",10" ] ;
	DeviceInfo[11] = ReadToArray[row + ",11" ] ;
	DeviceInfo[12] = ReadToArray[row + ",12" ] ;
	DeviceInfo[13] = ReadToArray[row + ",13" ] ;
}
function GetDeviceInfoToArray(DeviceInfo)
{
	DeviceInfo[0]  = 0;
	DeviceInfo[1]  = DrvInst.DeviceIndex;
	DeviceInfo[2]  = DrvInst.DeviceClassID;
	DeviceInfo[3]  = DrvInst.DeviceClassType;
	DeviceInfo[4]  = DrvInst.DeviceStatus;
	DeviceInfo[5]  = DrvInst.DeviceProblem;
	DeviceInfo[6]  = DrvInst.DeviceName;
	DeviceInfo[7]  = DrvInst.BackupDriverStatus;
	DeviceInfo[8]  = DrvInst.HardwareID;
	DeviceInfo[9]  = DrvInst.CompatibleID;
	DeviceInfo[10] = DrvInst.MatchingDeviceID;
	DeviceInfo[11] = DrvInst.DriverDate;
	DeviceInfo[12] = DrvInst.DriverVer;
	DeviceInfo[13] = DrvInst.DriverProvider;
}


function TranslateDeviceInfoToArray(DeviceInfo,OrgDeviceInfo,CurrentRow,ItemNumber)
{
	var devStatNumbers = 32 ; 
	var j;
	
	var deviceClass = new Array;
	var deviceClassImg = new Array;
				 
				 
	deviceClass[ 1] = "" + PromptArray["DrvExp.js_913_1"] + "";		            deviceClassImg[ 1] = "power.gif";			
	deviceClass[ 2] = "" + PromptArray["DrvExp.js_914_1"] + "";                 deviceClassImg[ 2] = "CDROM.gif";			
	deviceClass[ 3] = "" + PromptArray["DrvExp.js_915_1"] + "";	                deviceClassImg[ 3] = "minidisk.gif";		
	deviceClass[ 4] = "" + PromptArray["DrvExp.js_916_1"] + "";                 deviceClassImg[ 4] = "card.gif";			
	deviceClass[ 5] = "" + PromptArray["DrvExp.js_917_1"] + "";                 deviceClassImg[ 5] = "floppy.gif"; 			
	deviceClass[ 6] = "" + PromptArray["DrvExp.js_918_1"] + "";                 deviceClassImg[ 6] = "floppy.gif";			
	deviceClass[ 7] = "" + PromptArray["DrvExp.js_919_1"] + "";                 deviceClassImg[ 7] = "minidisk.gif"; 		
	deviceClass[ 8] = "" + PromptArray["DrvExp.js_920_1"] + "";                 deviceClassImg[ 8] = "hid.gif";		        
	deviceClass[ 9] = "" + PromptArray["DrvExp.js_921_1"] + "";                 deviceClassImg[ 9] = "hardware.gif";		
	deviceClass[10] = "" + PromptArray["DrvExp.js_922_1"] + "";                 deviceClassImg[10] = "hardware.gif";		
	deviceClass[11] = "" + PromptArray["DrvExp.js_923_1"] + "";                 deviceClassImg[11] = "hardware.gif";		
	deviceClass[12] = "" + PromptArray["DrvExp.js_924_1"] + "";                 deviceClassImg[12] = "scanner.gif";			
	deviceClass[13] = "" + PromptArray["DrvExp.js_925_1"] + "";                 deviceClassImg[13] = "Ir.gif";				
	deviceClass[14] = "" + PromptArray["DrvExp.js_926_1"] + "";                 deviceClassImg[14] = "keyboard.gif";		
	deviceClass[15] = "" + PromptArray["DrvExp.js_927_1"] + "";                 deviceClassImg[15] = "media.gif";			
	deviceClass[16] = "" + PromptArray["DrvExp.js_928_1"] + "";                 deviceClassImg[16] = "chip.GIF";			
	deviceClass[17] = "" + PromptArray["DrvExp.js_929_1"] + "";                 deviceClassImg[17] = "modem.gif";			
	deviceClass[18] = "" + PromptArray["DrvExp.js_930_1"] + "";                 deviceClassImg[18] = "monitor.gif";			
	deviceClass[19] = "" + PromptArray["DrvExp.js_931_1"] + "";                 deviceClassImg[19] = "mouse.gif";			
	deviceClass[20] = "" + PromptArray["DrvExp.js_932_1"] + "";                 deviceClassImg[20] = "hardware.gif";		
	deviceClass[21] = "" + PromptArray["DrvExp.js_933_1"] + "";                 deviceClassImg[21] = "sound.gif";			
	deviceClass[22] = "" + PromptArray["DrvExp.js_934_1"] + "";                 deviceClassImg[22] = "multiport.gif";		
	deviceClass[23] = "" + PromptArray["DrvExp.js_935_1"] + "";                 deviceClassImg[23] = "network.gif";			
	deviceClass[24] = "" + PromptArray["DrvExp.js_936_1"] + "";                 deviceClassImg[24] = "network.gif";			
	deviceClass[25] = "" + PromptArray["DrvExp.js_937_1"] + "";                 deviceClassImg[25] = "network.gif";			
	deviceClass[26] = "" + PromptArray["DrvExp.js_938_1"] + "";                 deviceClassImg[26] = "network.gif";			
	deviceClass[27] = "" + PromptArray["DrvExp.js_939_1"] + "";                 deviceClassImg[27] = "hardware.gif";		
	deviceClass[28] = "" + PromptArray["DrvExp.js_940_1"] + "";                 deviceClassImg[28] = "port.gif";			
	deviceClass[29] = "" + PromptArray["DrvExp.js_941_1"] + "";                 deviceClassImg[29] = "printer.gif";			
	deviceClass[30] = "" + PromptArray["DrvExp.js_942_1"] + "";                 deviceClassImg[30] = "printer.gif";			
	deviceClass[31] = "" + PromptArray["DrvExp.js_943_1"] + "";                 deviceClassImg[31] = "cpu.gif";				
	deviceClass[32] = "" + PromptArray["DrvExp.js_944_1"] + "";                 deviceClassImg[32] = "scsi.gif";			
	deviceClass[33] = "" + PromptArray["DrvExp.js_945_1"] + "";                 deviceClassImg[33] = "hardware.gif";		
	deviceClass[34] = "" + PromptArray["DrvExp.js_946_1"] + "";                 deviceClassImg[34] = "minidisk.gif";		
	deviceClass[35] = "" + PromptArray["DrvExp.js_947_1"] + "";                 deviceClassImg[35] = "system.gif";			
	deviceClass[36] = "" + PromptArray["DrvExp.js_948_1"] + "";                 deviceClassImg[36] = "tape.gif";			
	deviceClass[37] = "" + PromptArray["DrvExp.js_949_1"] + "";                 deviceClassImg[37] = "usb.gif";				
	deviceClass[38] = "" + PromptArray["DrvExp.js_950_1"] + "";                 deviceClassImg[38] = "card.gif";			
	deviceClass[39] = "" + PromptArray["DrvExp.js_951_1"] + "";                 deviceClassImg[39] = "hardware.gif";		
	deviceClass[40] = "" + PromptArray["DrvExp.js_952_1"] + "";                 deviceClassImg[40] = "hardware.gif";		
	deviceClass[41] = "" + PromptArray["DrvExp.js_953_1"] + "";                 deviceClassImg[41] = "computer.gif";		
	deviceClass[42] = "" + PromptArray["DrvExp.js_954_1"] + "";                 deviceClassImg[42] = "system.gif";			
	deviceClass[43] = "" + PromptArray["DrvExp.js_955_1"] + "";                 deviceClassImg[43] = "hardware.gif";		
	deviceClass[44] = "" + PromptArray["DrvExp.js_956_1"] + "";                 deviceClassImg[44] = "nonpnp.gif";			
	deviceClass[45] = "" + PromptArray["DrvExp.js_957_1"] + "";                 deviceClassImg[45] = "nonpnp.gif";			
	deviceClass[46] = "" + PromptArray["DrvExp.js_958_1"] + "";                 deviceClassImg[46] = "unknown.gif";			
	deviceClass[47] = "" + PromptArray["DrvExp.js_959_1"] + "";                 deviceClassImg[47] = "printer.gif";			
	deviceClass[48] = "" + PromptArray["DrvExp.js_960_1"] + "";                 deviceClassImg[48] = "game.gif";			

	var DevStatusFlags  = new Array;

	
	var DevStatusString = new Array;

	DevStatusFlags[ 1] = 0x00000001 ;DevStatusString[ 1] = "" + PromptArray["DrvExp.js_967_1"] + "";						
	DevStatusFlags[ 2] = 0x00000002 ;DevStatusString[ 2] = "" + PromptArray["DrvExp.js_968_1"] + "";					    
	DevStatusFlags[ 3] = 0x00000004 ;DevStatusString[ 3] = "" + PromptArray["DrvExp.js_969_1"] + "";					    
	DevStatusFlags[ 4] = 0x00000008 ;DevStatusString[ 4] = "" + PromptArray["DrvExp.js_970_1"] + "";					    
	DevStatusFlags[ 5] = 0x00000010 ;DevStatusString[ 5] = "" + PromptArray["DrvExp.js_971_1"] + "";						
	DevStatusFlags[ 6] = 0x00000020 ;DevStatusString[ 6] = "" + PromptArray["DrvExp.js_972_1"] + "";						
	DevStatusFlags[ 7] = 0x00000040 ;DevStatusString[ 7] = "" + PromptArray["DrvExp.js_973_1"] + "";			            
	DevStatusFlags[ 8] = 0x00000080 ;DevStatusString[ 8] = "" + PromptArray["DrvExp.js_974_1"] + "";						
	DevStatusFlags[ 9] = 0x00000100 ;DevStatusString[ 9] = "" + PromptArray["DrvExp.js_975_1"] + "";			            
	DevStatusFlags[10] = 0x00000200 ;DevStatusString[10] = "" + PromptArray["DrvExp.js_976_1"] + "";			            
	DevStatusFlags[11] = 0x00000400 ;DevStatusString[11] = "" + PromptArray["DrvExp.js_977_1"] + "";					    
	DevStatusFlags[12] = 0x00000800 ;DevStatusString[12] = "" + PromptArray["DrvExp.js_978_1"] + "";						
	DevStatusFlags[13] = 0x00001000 ;DevStatusString[13] = "" + PromptArray["DrvExp.js_979_1"] + "";						
	DevStatusFlags[14] = 0x00002000 ;DevStatusString[14] = "" + PromptArray["DrvExp.js_980_1"] + "";			            
	DevStatusFlags[15] = 0x00004000 ;DevStatusString[15] = "" + PromptArray["DrvExp.js_981_1"] + "";						
	DevStatusFlags[16] = 0x00008000 ;DevStatusString[16] = "" + PromptArray["DrvExp.js_982_1"] + "";						
	DevStatusFlags[17] = 0x00010000 ;DevStatusString[17] = "" + PromptArray["DrvExp.js_983_1"] + "";						
	DevStatusFlags[18] = 0x00020000 ;DevStatusString[18] = "" + PromptArray["DrvExp.js_984_1"] + "";						
	DevStatusFlags[19] = 0x00040000 ;DevStatusString[19] = "" + PromptArray["DrvExp.js_985_1"] + "";					    
	DevStatusFlags[20] = 0x00080000 ;DevStatusString[20] = "" + PromptArray["DrvExp.js_986_1"] + "";			            
	DevStatusFlags[21] = 0x00100000 ;DevStatusString[21] = "" + PromptArray["DrvExp.js_987_1"] + "";					    
	DevStatusFlags[22] = 0x00200000 ;DevStatusString[22] = "" + PromptArray["DrvExp.js_988_1"] + "";			            
	DevStatusFlags[23] = 0x00400000 ;DevStatusString[23] = "" + PromptArray["DrvExp.js_989_1"] + "";		                
	DevStatusFlags[24] = 0x00800000 ;DevStatusString[24] = "";
	DevStatusFlags[25] = 0x01000000 ;DevStatusString[25] = "";
	DevStatusFlags[26] = 0x02000000 ;DevStatusString[26] = "" + PromptArray["DrvExp.js_992_1"] + "";					    
	DevStatusFlags[27] = 0x04000000 ;DevStatusString[27] = "" + PromptArray["DrvExp.js_993_1"] + "";				        
	DevStatusFlags[28] = 0x08000000 ;DevStatusString[28] = "" + PromptArray["DrvExp.js_994_1"] + "";				        
	DevStatusFlags[29] = 0x10000000 ;DevStatusString[29] = "" + PromptArray["DrvExp.js_995_1"] + "";				        
	DevStatusFlags[30] = 0x20000000 ;DevStatusString[30] = "" + PromptArray["DrvExp.js_996_1"] + "";                        
	DevStatusFlags[31] = 0x40000000 ;DevStatusString[31] = "" + PromptArray["DrvExp.js_997_1"] + "";			            
	DevStatusFlags[32] = 0x80000000 ;DevStatusString[32] = "" + PromptArray["DrvExp.js_998_1"] + "";					    

    var DevProblem = new Array;
	DevProblem[" 1,1"]	= 0x00000001;  DevProblem[" 2,1"]  = "" + PromptArray["DrvExp.js_1001_1"] + "";
	DevProblem[" 1,2"]	= 0x00000002;  DevProblem[" 2,2"]  = "" + PromptArray["DrvExp.js_1002_1"] + "";
	DevProblem[" 1,3"]	= 0x00000003;  DevProblem[" 2,3"]  = "" + PromptArray["DrvExp.js_1003_1"] + "";
	DevProblem[" 1,4"]	= 0x00000004;  DevProblem[" 2,4"]  = "" + PromptArray["DrvExp.js_1004_1"] + "";
	DevProblem[" 1,5"]	= 0x00000005;  DevProblem[" 2,5"]  = "" + PromptArray["DrvExp.js_1005_1"] + "";
	DevProblem[" 1,6"]	= 0x00000006;  DevProblem[" 2,6"]  = "" + PromptArray["DrvExp.js_1006_1"] + "";
	DevProblem[" 1,7"]	= 0x00000007;  DevProblem[" 2,7"]  = "" + PromptArray["DrvExp.js_1007_1"] + "";
	DevProblem[" 1,8"]	= 0x00000008;  DevProblem[" 2,8"]  = "" + PromptArray["DrvExp.js_1008_1"] + "";
	DevProblem[" 1,9"]	= 0x00000009;  DevProblem[" 2,9"]  = "" + PromptArray["DrvExp.js_1009_1"] + "";
	DevProblem[" 1,10"] = 0x0000000A;  DevProblem[" 2,10"] = "" + PromptArray["DrvExp.js_1010_1"] + "";
	DevProblem[" 1,11"] = 0x0000000B;  DevProblem[" 2,11"] = "" + PromptArray["DrvExp.js_1011_1"] + "";
	DevProblem[" 1,12"] = 0x0000000C;  DevProblem[" 2,12"] = "" + PromptArray["DrvExp.js_1012_1"] + "";
	DevProblem[" 1,13"] = 0x0000000D;  DevProblem[" 2,13"] = "" + PromptArray["DrvExp.js_1013_1"] + "";
	DevProblem[" 1,14"] = 0x0000000E;  DevProblem[" 2,14"] = "" + PromptArray["DrvExp.js_1014_1"] + "";
	DevProblem[" 1,15"] = 0x0000000F;  DevProblem[" 2,15"] = "" + PromptArray["DrvExp.js_1015_1"] + "";
	DevProblem[" 1,16"] = 0x00000010;  DevProblem[" 2,16"] = "" + PromptArray["DrvExp.js_1016_1"] + "";
	DevProblem[" 1,17"] = 0x00000011;  DevProblem[" 2,17"] = "" + PromptArray["DrvExp.js_1017_1"] + "";
	DevProblem[" 1,18"] = 0x00000012;  DevProblem[" 2,18"] = "" + PromptArray["DrvExp.js_1018_1"] + "";
	DevProblem[" 1,19"] = 0x00000013;  DevProblem[" 2,19"] = "" + PromptArray["DrvExp.js_1019_1"] + "";           
	DevProblem[" 1,20"] = 0x00000014;  DevProblem[" 2,20"] = "" + PromptArray["DrvExp.js_1020_1"] + "";      
	DevProblem[" 1,21"] = 0x00000015;  DevProblem[" 2,21"] = "" + PromptArray["DrvExp.js_1021_1"] + "";        
	DevProblem[" 1,22"] = 0x00000016;  DevProblem[" 2,22"] = "" + PromptArray["DrvExp.js_1022_1"] + "";        
	DevProblem[" 1,23"] = 0x00000017;  DevProblem[" 2,23"] = "" + PromptArray["DrvExp.js_1023_1"] + ""; 
	DevProblem[" 1,24"] = 0x00000018;  DevProblem[" 2,24"] = "" + PromptArray["DrvExp.js_1024_1"] + "";           
	DevProblem[" 1,25"] = 0x00000019;  DevProblem[" 2,25"] = "" + PromptArray["DrvExp.js_1025_1"] + "";        
	DevProblem[" 1,26"] = 0x0000001A;  DevProblem[" 2,26"] = "" + PromptArray["DrvExp.js_1026_1"] + "";                
	DevProblem[" 1,27"] = 0x0000001B;  DevProblem[" 2,27"] = "" + PromptArray["DrvExp.js_1027_1"] + "";             
	DevProblem[" 1,28"] = 0x0000001C;  DevProblem[" 2,28"] = "" + PromptArray["DrvExp.js_1028_1"] + "";                
	DevProblem[" 1,29"] = 0x0000001D;  DevProblem[" 2,29"] = "" + PromptArray["DrvExp.js_1029_1"] + "";                  
	DevProblem[" 1,30"] = 0x0000001E;  DevProblem[" 2,30"] = "" + PromptArray["DrvExp.js_1030_1"] + "";             
	DevProblem[" 1,31"] = 0x0000001F;  DevProblem[" 2,31"] = "" + PromptArray["DrvExp.js_1031_1"] + ""; 
	DevProblem[" 1,32"] = 0x00000020;  DevProblem[" 2,32"] = "" + PromptArray["DrvExp.js_1032_1"] + "";                
	DevProblem[" 1,33"] = 0x00000021;  DevProblem[" 2,33"] = "" + PromptArray["DrvExp.js_1033_1"] + "";                
	DevProblem[" 1,34"] = 0x00000022;  DevProblem[" 2,34"] = "" + PromptArray["DrvExp.js_1034_1"] + "";                  
	DevProblem[" 1,35"] = 0x00000023;  DevProblem[" 2,35"] = "" + PromptArray["DrvExp.js_1035_1"] + "";           
	DevProblem[" 1,36"] = 0x00000024;  DevProblem[" 2,36"] = "" + PromptArray["DrvExp.js_1036_1"] + "";                 
	DevProblem[" 1,37"] = 0x00000025;  DevProblem[" 2,37"] = "" + PromptArray["DrvExp.js_1037_1"] + "";
	DevProblem[" 1,38"] = 0x00000026;  DevProblem[" 2,38"] = "" + PromptArray["DrvExp.js_1038_1"] + "";


	var DrvBackupStatusFlags  = new Array;
	var DrvBackupStatusString = new Array;

	DrvBackupStatusFlags[ 1] = 0x00000001 ; DrvBackupStatusString[ 1] = "" + PromptArray["DrvExp.js_1044_1"] + "";
	DrvBackupStatusFlags[ 2] = 0x00000002 ; DrvBackupStatusString[ 2] = "" + PromptArray["DrvExp.js_1045_1"] + "";
	DrvBackupStatusFlags[ 3] = 0x00000004 ; DrvBackupStatusString[ 3] = "" + PromptArray["DrvExp.js_1046_1"] + "";
	DrvBackupStatusFlags[ 4] = 0x00000008 ; DrvBackupStatusString[ 4] = "" + PromptArray["DrvExp.js_1047_1"] + "";
	DrvBackupStatusFlags[ 5] = 0x00000010 ; DrvBackupStatusString[ 5] = "" + PromptArray["DrvExp.js_1048_1"] + "";
	DrvBackupStatusFlags[ 6] = 0x00000020 ; DrvBackupStatusString[ 6] = "" + PromptArray["DrvExp.js_1049_1"] + "";			
	DrvBackupStatusFlags[ 7] = 0x00000040 ; DrvBackupStatusString[ 7] = "" + PromptArray["DrvExp.js_1050_1"] + "";	
	DrvBackupStatusFlags[ 8] = 0x00000080 ; DrvBackupStatusString[ 8] = "" + PromptArray["DrvExp.js_1051_1"] + "";
	DrvBackupStatusFlags[ 9] = 0x00000100 ; DrvBackupStatusString[ 9] = "" + PromptArray["DrvExp.js_1052_1"] + "";
	DrvBackupStatusFlags[10] = 0x00000200 ; DrvBackupStatusString[10] = "";
	DrvBackupStatusFlags[11] = 0x00000400 ; DrvBackupStatusString[11] = "";
	DrvBackupStatusFlags[12] = 0x00000800 ; DrvBackupStatusString[12] = "";
	DrvBackupStatusFlags[13] = 0x00001000 ; DrvBackupStatusString[13] = "";
	DrvBackupStatusFlags[14] = 0x00002000 ; DrvBackupStatusString[14] = "";
	DrvBackupStatusFlags[15] = 0x00004000 ; DrvBackupStatusString[15] = "";
	DrvBackupStatusFlags[16] = 0x00080000 ; DrvBackupStatusString[16] = "" + PromptArray["DrvExp.js_1059_1"] + "";	
	DrvBackupStatusFlags[17] = 0x00010000 ; DrvBackupStatusString[17] = "" + PromptArray["DrvExp.js_1060_1"] + "";
	DrvBackupStatusFlags[18] = 0x00020000 ; DrvBackupStatusString[18] = "" + PromptArray["DrvExp.js_1061_1"] + "";
	DrvBackupStatusFlags[19] = 0x00040000 ; DrvBackupStatusString[19] = "" + PromptArray["DrvExp.js_1062_1"] + "";
	DrvBackupStatusFlags[20] = 0x00008000 ; DrvBackupStatusString[20] = "";
	DrvBackupStatusFlags[21] = 0x00100000 ; DrvBackupStatusString[21] = "" + PromptArray["DrvExp.js_1064_1"] + "";
	DrvBackupStatusFlags[22] = 0x00200000 ; DrvBackupStatusString[22] = "" + PromptArray["DrvExp.js_1065_1"] + "";
	DrvBackupStatusFlags[23] = 0x00400000 ; DrvBackupStatusString[23] = "" + PromptArray["DrvExp.js_1066_1"] + "";
	DrvBackupStatusFlags[24] = 0x00800000 ; DrvBackupStatusString[24] = "";
	DrvBackupStatusFlags[25] = 0x01000000 ; DrvBackupStatusString[25] = "";
	DrvBackupStatusFlags[26] = 0x02000000 ; DrvBackupStatusString[26] = "";
	DrvBackupStatusFlags[27] = 0x04000000 ; DrvBackupStatusString[27] = "";
	DrvBackupStatusFlags[28] = 0x08000000 ; DrvBackupStatusString[28] = "";
	DrvBackupStatusFlags[29] = 0x10000000 ; DrvBackupStatusString[29] = "";
	DrvBackupStatusFlags[30] = 0x20000000 ; DrvBackupStatusString[30] = "";
	DrvBackupStatusFlags[31] = 0x40000000 ; DrvBackupStatusString[31] = "";
	DrvBackupStatusFlags[32] = 0x80000000 ; DrvBackupStatusString[32] = "";

	
	
	DeviceInfo["0"]			= ItemNumber;
	
	DeviceInfo["1"]			= OrgDeviceInfo[CurrentRow + ",1"] ; 

	
	(deviceClass[OrgDeviceInfo[CurrentRow + ",2"]]) 
		? DeviceInfo["2"]	= 
							
							
							
							
							
							
							
							"<img border='0' src='img/"
							+ deviceClassImg[OrgDeviceInfo[CurrentRow + ",2"]] + "' "
							+ " alt='" + deviceClass[OrgDeviceInfo[CurrentRow + ",2"]] 
							+ "' width='16' height='16' "
							+ " id='img" + ItemNumber + "'" 
							+ " onMouseMove='this.style.cursor=\"help\"' "
							
							
							+ " onMoveOut=DeviceMouseMoveOutEvent('" + ItemNumber + "')" 
							+ " >&nbsp;&nbsp;" 
		: DeviceInfo["2"]	= 
							
							
							
							
							
							
							"<img border='0' src='img/unknown.gif'"
							+ "alt='" + PromptArray["DrvExp.js_1111_1"] + "" + OrgDeviceInfo[CurrentRow + ",2"] + "," + PromptArray["DrvExp.js_1111_2"] + "\"" + PromptArray["DrvExp.js_1111_3"] + "\"" + PromptArray["DrvExp.js_1111_4"] + ""
							+ "' width='16' height='16' "
							+ " id='img" + ItemNumber + "'" 
							+ " onMouseMove='this.style.cursor=\"help\"' "
							
							
							+ " onMoveOut=DeviceMouseMoveOutEvent('" + ItemNumber + "')" 
							+ " >&nbsp;&nbsp;";
	
	
	var Stat2			= OrgDeviceInfo[CurrentRow + ",4"] ; 
	var resu2			= Stat2 &  DevStatusFlags[31];
	
	
	if (OrgDeviceInfo[CurrentRow + ",3"])
	{
		DeviceInfo["3"]			= "<img border='0' src='img/3.gif'" 
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ "alt='" + PromptArray["DrvExp.js_1129_1"] + "'>";
	}
	else if (resu2)
	{
		DeviceInfo["3"]			= "<img border='0' src='img/4.GIF'" 
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ "alt='" + PromptArray["DrvExp.js_1135_1"] + "'>";
	}
	else
	{
		DeviceInfo["3"]			= " ";
	}
	
	
	var str = "";
	for (j=1;j<=32;j++)
	{
		var Stat = OrgDeviceInfo[CurrentRow + ",4"] ; 
		var resu = Stat & DevStatusFlags[j] ;
		if( resu > 0 )
		{
			if (DevStatusString[j]) 
				str = str +  DevStatusString[j] + "," ;
		}
	}
	if (OrgDeviceInfo[CurrentRow + ",4"])
	{
		str += "Code:0x" + OrgDeviceInfo[CurrentRow + ",4"].toString(16);
	}

	var Stat2			= OrgDeviceInfo[CurrentRow + ",4"] ; 
	var resu2			= Stat2 &  DevStatusFlags[11];		 
	var resu1			= Stat2 &  DevStatusFlags[9];		 
	if (resu2 || resu1)	
	{
		DeviceInfo["4"]			= "<img border='0' src='img/checkbug.gif'" 
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ "width='16' height='16' alt='" 
							+ str 
							+ "'>";
	}
	else
	{
		DeviceInfo["4"]			= "<img border='0' src='img/4.GIF'" 
							+ " onMouseMove='this.style.cursor=\"help\"' "
							
							+ "alt='" 
							+ str 
							+ "'>";
	}

	
	
	if (OrgDeviceInfo[CurrentRow + ",5"] > 38 ) 
	{
		
		var prob = "(code:" + OrgDeviceInfo[CurrentRow + ",5"] + ")";
		DeviceInfo["5"]	= "<img border='0' "
							+"src='img/error1.GIF'"
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ " width=16 height=16 "
							+ " alt='" + prob + "'>";

	}
	else
	{
		var prob = DevProblem[" 2," + OrgDeviceInfo[CurrentRow + ",5"] ] 
					+ "(code:" + OrgDeviceInfo[CurrentRow + ",5"] + ")";
		
		if (OrgDeviceInfo[CurrentRow + ",5"] != 0)
		{
			DeviceInfo["5"]	= "<img border='0' "
								+"src='img/error1.GIF'"
								+ " onMouseMove='this.style.cursor=\"help\"' "
								+ " width=16 height=16 "
								+ " alt='" + prob + "'>";
		}
		else
		{	
			DeviceInfo["5"]			= " ";
		}
	}
    
	var SoapApplyURL = ServerName.value + SoapAspURL.value		
    
    var DownloadURL = SoapApplyURL + "?mode=downloaddrv&driverid=" + OrgDeviceInfo[CurrentRow + ",DriverID"]
    var DeviceDescHtml  = " href='?' onclick='DownloadDriverByUserClick( \"" + DownloadURL + "\" );return false' "

    var onClickStr   = 
                       
                       
                       
                       ( OrgDeviceInfo[CurrentRow + ",DriverID"] ) 
                       ? DeviceDescHtml : "";

    

    
	
    
    
	(deviceClass[OrgDeviceInfo[CurrentRow + ",2"]]) 
		? DeviceInfo["6"] = ""
					+ "<a style='color: green;font-style: normal;font-family: " + PromptArray["DrvExp.js_1232_1"] + ";'"
					+ " VALIGN='top'"
					
					
					
                    
                    + onClickStr
					+ " onMouseMove='this.style.color=\"red\";this.style.cursor=\"hand\"'"
                    + " onMouseOut='this.style.color=\"green\";this.style.fontStyle=\"normal\";'"
                    
					+ " >"
					+ OrgDeviceInfo[CurrentRow + ",6"] 
					+ "</a>&nbsp;&nbsp;"
		: DeviceInfo["6"] =""
                    
                    
					
                    + "<a style='color: green;font-style: normal;font-family: " + PromptArray["DrvExp.js_1249_1"] + ";'"
                    
					+ " VALIGN='top'"
					
					
					
                    
					
					
					
                    
                    + onClickStr
					+ " onMouseMove='this.style.color=\"red\";this.style.cursor=\"hand\"'"
                    + " onMouseOut='this.style.color=\"green\";this.style.fontStyle=\"normal\";'"
                    
					+ " >" 
					+ OrgDeviceInfo[CurrentRow + ",6"] 
                    
                    
					
                    + "</a>&nbsp;&nbsp;"
                    


	
	
	
	var str = "";
	var Stat = OrgDeviceInfo[CurrentRow + ",7"];

	
	if 	(!(Stat & 0x00000010))   str += "" + PromptArray["DrvExp.js_1280_1"] + ",";
	
	
	if 	(!(Stat & 0x00080000))   
	{
		str += "" + PromptArray["DrvExp.js_1285_1"] + ",";
	}
	
	
	else
	{
		str += "";
	}

	
	for (j=1;j<=32;j++)
	{
		var Stat = OrgDeviceInfo[CurrentRow + ",7"] ; 
		var resu = Stat & DrvBackupStatusFlags[j] ;
		if( resu > 0 )
		{
			if (DrvBackupStatusString[j]) 
				str = str +  DrvBackupStatusString[j] + "," ;
		}
	}
	if (OrgDeviceInfo[CurrentRow + ",7"])
	{
		str += "Code:0x" + OrgDeviceInfo[CurrentRow + ",7"].toString(16);
	}

	var Stat2 = OrgDeviceInfo[CurrentRow + ",7"] ; 
	
	
	if ( (Stat2 & 0x00080000) && (Stat2 & 0x00000010) )
	{
		DeviceInfo["7"]		= "<img border='0' src='img/6.gif'" 
							
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ "alt='" 
							+ str 
							+ "'>";
	}
	
	else if (Stat2 & 0x00000010)
	{
		DeviceInfo["7"]		= "<img border='0' src='img/3.gif'" 
							
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ "alt='" 
							+ str 
							+ "'>";
	}
	
	else if(Stat2 & 0x00080000)
	{
		DeviceInfo["7"]		= "<img border='0' src='img/1.GIF'" 
							
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ "alt='"
							+ str
							+ "'>";
	}
	
	
	
	

	
	
	else
	{
		DeviceInfo["7"]		= "<img border='0' src='img/4.GIF'" 
							
							+ " onMouseMove='this.style.cursor=\"help\"' "
							+ "alt='" 
							+ str 
							+ "'>";
	}
}

function RunDriverExportToServerOpenProcess( DeviceInfo )
{
    DisplayMessage("" + PromptArray["DrvExp.js_1362_1"] + "[" + DeviceInfo[6] + "](#" + DeviceInfo[1] + ")");
    DriverExportToServerOpenProcess( DeviceInfo );
}



function DriverExportToServerOpenProcess( OrgDeviceInfo )
{
	
	var DeviceInfo   = new Array;
    var DeviceInfoArray = new Array()

	var DeviceNumber,TableItem;
	var DeviceName;
        SaveDeviceInfoToArray( OrgDeviceInfo ,DeviceInfoArray , 0);
		TranslateDeviceInfoToArray( DeviceInfo , DeviceInfoArray , 0 , 0 );

	
	DeleteDeviceTable();
	CreateDeviceTable();

	
	oRow = document.createElement("TR");

	oCell = document.createElement("TD");

	oCell.vAlign	="top"; 
	oCell.width     ="60"

	oRow.appendChild(oCell);

	oCell = document.createElement("TD");
	oCell.innerHTML	= DeviceInfo[7];
	oCell.vAlign	="top"; 

	oRow.appendChild(oCell);

	oCell = document.createElement("TD");
	oCell.innerHTML	= DeviceInfo[3];
	oCell.vAlign	="top"; 

	oRow.appendChild(oCell);

	oCell = document.createElement("TD");
	oCell.innerHTML	= DeviceInfo[4];
	oCell.vAlign	="top"; 

	oRow.appendChild(oCell);

	oCell = document.createElement("TD");
	oCell.innerHTML	= DeviceInfo[5];
	oCell.vAlign	="top"; 

	oRow.appendChild(oCell);
	
	oCell = document.createElement("TD");
	oCell.innerHTML	= DeviceInfo[2];
	oCell.vAlign	="top"; 

	oRow.appendChild(oCell);

	oCell = document.createElement("TD");
	var innerHTML = ""
					+ "<SPAN style='font-style: normal;font-family: " + PromptArray["DrvExp.js_1425_1"] + ";' "
					
					
					
					
					
					+ ">" + DeviceInfo[6]
					+ "</SPAN>&nbsp;&nbsp;"
					+ "<br><br><span id='ProcessingInfo'>" + PromptArray["DrvExp.js_1433_1"] + "...</span>";

	oCell.innerHTML	= innerHTML ;			
	oCell.vAlign	="top"; 
	oRow.appendChild(oCell);

	g_oTBody0.appendChild(oRow);

	oTableContainer.align="left"
}



function RunDriverExportToServerCloseProcess( DeviceInfo )
{
    DisplayMessage("" + PromptArray["DrvExp.js_1448_1"] + "[" + DeviceInfo[6] + "](#" + DeviceInfo[1] + ")");
    DriverExportToServerCloseProcess();
}



function DriverExportToServerCloseProcess()
{
	














	
	
	DeleteDeviceTable();

	
}




function ApplyReEnumDevicesEvent()
{
	EnumDevice(1);
	return 0;
}





function DeviceMouseMoveInEvent(row)
{

}



function DeviceMouseMoveOutEvent(row)
{

}




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 GetHtmlLaunchPath()
{
	var UrlPathname = location.pathname;	
	var UrlHostname = location.hostname;	
	
	
	if (UrlHostname == "")
	{
		UrlPathname = UrlPathname.replace( /%20/gi , " ");
		if (UrlPathname.charAt(0) == "/")
		{
			
			UrlPathname = UrlPathname.substring(1 , UrlPathname.lastIndexOf("\\")); 
		}
		else
		{
			UrlPathname = UrlPathname.substring(0 , UrlPathname.lastIndexOf("\\")); 
		}
	}
	
	else
	{
        
		return ""
	}
	return (UrlPathname)
}

function DynaLoadClientLogoAndADHTML()
{
	
	if (!g_AppLaunchPath)
	{
		var hKey4 = DrvCert.RegOpenKey( 2 , "SOFTWARE\\Walker\\DrvInst\\Setup")
		if ( hKey4 )
		{
			g_DrvInstLogFilePath = DrvCert.RegQueryValue( hKey4 , "DrvInstLogFilePath" )
			if ( g_DrvInstLogFilePath )
			{
				g_AppLaunchPath = g_DrvInstLogFilePath.substring( 0 , g_DrvInstLogFilePath.lastIndexOf("\\") )
			}
		}
	}
	
	
	
	var FileNameXml = DrvCert.FindFileInPath( g_AppLaunchPath + "\\" + LOGO_FILE_SUB_DIR_FILENAME ) ;
    var CabFileName = GetXmlSingleNodeText( FileNameXml , "FileItem0" )
    if ( CabFileName ) 
	{
		if ( LOGO_FILE_LINK_TO_URL )																
		{
			LogoDiv.innerHTML = '<A href="' + LOGO_FILE_LINK_TO_URL + '">'								
							  + '<IMG src="' + LOGO_FILE_SUB_DIR_FILENAME + '" border=0 ALT=""></A>'
		}
		else
		{
			LogoDiv.innerHTML = '<IMG src="' + LOGO_FILE_SUB_DIR_FILENAME + '" border=0 ALT="" >'
		}
	}
	var FileNameXml = DrvCert.FindFileInPath( g_AppLaunchPath + "\\" + AD_FILE_SUB_DIR_FILENAME ) ; 
	var CabFileName = GetXmlSingleNodeText( FileNameXml , "FileItem0" )
    if ( CabFileName ) 
	{
		
		if (CabFileName.search(/\.swf$/i != -1))
		{
			var objHtml = ""
			objHtml += '<OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 '
			objHtml += '      codeBase=http:\/\/download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0 '
			objHtml += '      height=60 width=468>'
			objHtml += '	  <PARAM NAME="movie" VALUE=' + AD_FILE_SUB_DIR_FILENAME + '>'
			objHtml += '	  <PARAM NAME="quality" VALUE="high">'
			objHtml += '      <embed src=' + AD_FILE_SUB_DIR_FILENAME + 'quality=high pluginspage="http:\/\/www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="468" height="60"></embed>'
			objHtml += '</OBJECT>'
			if ( AD_FILE_LINK_TO_URL )																	
			{
				ADDiv.innerHTML =	'<A href="' + AD_FILE_LINK_TO_URL + '">' + objHtml + '</A>'
			}
			else
			{
				ADDiv.innerHTML =	objHtml
			}
		}
		
		else if ( CabFileName.search(/\.gif$/i != -1 ))
		{
			if ( AD_FILE_LINK_TO_URL )																	
			{
				ADDiv.innerHTML =	'<A href="' + AD_FILE_LINK_TO_URL + '">'								
								  + '<IMG src="' + AD_FILE_SUB_DIR_FILENAME + '" border=0 ALT=""></A>'
			}
			else
			{
				ADDiv.innerHTML =	'<IMG src="' + AD_FILE_SUB_DIR_FILENAME + '" border=0 ALT="">'
			}
		}
	}

}

function BackupUserDriverForExport()
{
	var stock = new Array()

	Title.innerHTML = '<br><center>' + PromptArray["DrvExp.js_1624_1"] + '...<br></center>'
	                + '<br>'
					+ '<table align=center id=PercentTbl width=400 bgColor=black border=0 cellSpacing=0 cellPadding=0 >'
					+ '<tr><td>'
					+ '  <IMG id="PercentImg" SRC="img/img.gif" WIDTH="0" HEIGHT="16" BORDER=0>'
					+ '</td></tr></table>'
					+ '<div id=PercentString>&nbsp;</div>'

	var TotalBackupDrivers = 0
	for (var i=0; i<g_UserDrvDeviceRows ; i++)
	{
		ReadArrayToDeviceInfo(stock , g_UserDrvDeviceInfoArray , i);
		
        
		
        
    	
        
        if ( !(stock[3]) && !stock[5] && ( (stock[7] & 0x00000010) || (stock[7] & 0x00200000) ) ) TotalBackupDrivers ++
	}
	var CurBackupDrvRow = 0
	for (var i=0; (i<g_UserDrvDeviceRows) && TotalBackupDrivers; i++)
	{

		ReadArrayToDeviceInfo(stock , g_UserDrvDeviceInfoArray , i);

        
        
		
		
        
    	
        
        if ( !(stock[3]) && !stock[5] && ( (stock[7] & 0x00000010) || (stock[7] & 0x00200000) ) )
		{
			DisplayMessage("" + PromptArray["DrvExp.js_1659_1"] + "[" + stock[6] + "]" + PromptArray["DrvExp.js_1659_2"] + "...");

			CurBackupDrvRow ++

            PercentImg.width=PercentTbl.width*(CurBackupDrvRow)/TotalBackupDrivers
            PercentString.innerHTML = '<center>' + Math.floor((CurBackupDrvRow)/TotalBackupDrivers*100) + '%</center>'

			RunDriverExportToServerOpenProcess( stock );	
			ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_1667_1"] + '...'
			DrvCert.UIRefresh()

			var err = DrvInst.BackupDriver(stock[1]);
			(!err)	? DisplayMessage("" + PromptArray["DrvExp.js_1671_1"] + " - " + PromptArray["DrvExp.js_1671_2"] + "[" + stock[6] + "]")
					: DisplayMessage("" + PromptArray["DrvExp.js_1672_1"] + " - " + PromptArray["DrvExp.js_1672_2"] + "[" + stock[6] + "]");

			
			RunDriverExportToServerCloseProcess( stock )
		}
	}
	Title.innerHTML = ''
}
function GetDriverExportStatusFromDB( UserID )
{
	var stock = new Array()

    
	for (var i=0; i<g_DevErrDeviceRows ; i++)
	{

		ReadArrayToDeviceInfo( stock , g_DevErrDeviceInfoArray , i);

        DisplayMessage("" + PromptArray["DrvExp.js_1690_1"] + "[" + stock[6] + "]" + PromptArray["DrvExp.js_1690_2"] + "...");


        PercentImg.width=PercentTbl.width*(i+1)/( g_DevErrDeviceRows + g_UserDrvDeviceRows )
        PercentString.innerHTML = '<center>' + Math.floor((i+1)/( g_DevErrDeviceRows + g_UserDrvDeviceRows )*100) + '%</center>'

        RunDriverExportToServerOpenProcess( stock );	

        ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_1698_1"] + '...'
        DrvCert.UIRefresh()

        var RetInfo = GetDeviceExportDriverStatus( UserID , stock );
        if (RetInfo["Success"])
        {
            DisplayMessage("" + PromptArray["DrvExp.js_1704_1"] + "[" + stock[6] + "]" + PromptArray["DrvExp.js_1704_2"] + "")
            
            g_DevErrDeviceInfoArray[i+",20"] = true
            g_DevErrDeviceInfoArray[i+",UserID"  ] = RetInfo["UserID"]
            g_DevErrDeviceInfoArray[i+",DriverID"] = RetInfo["DriverID"]
            
        }
        else
        {
            
            g_DevErrDeviceInfoArray[i+",20"] = false
       		DisplayMessage("" + PromptArray["DrvExp.js_1715_1"] + "[" + stock[6] + "]" + PromptArray["DrvExp.js_1715_2"] + ":" + RetInfo["ErrorInfo"] )
        }

        
        RunDriverExportToServerCloseProcess( stock )
	}
    
	for (var i=0; i<g_UserDrvDeviceRows ; i++)
	{

		ReadArrayToDeviceInfo( stock , g_UserDrvDeviceInfoArray , i);

        DisplayMessage("" + PromptArray["DrvExp.js_1727_1"] + "[" + stock[6] + "]" + PromptArray["DrvExp.js_1727_2"] + "...");


        PercentImg.width=PercentTbl.width*(g_DevErrDeviceRows+i+1)/( g_DevErrDeviceRows + g_UserDrvDeviceRows )
        PercentString.innerHTML = '<center>' + Math.floor((g_DevErrDeviceRows+i+1)/( g_DevErrDeviceRows + g_UserDrvDeviceRows )*100) + '%</center>'

        RunDriverExportToServerOpenProcess( stock );	

        ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_1735_1"] + '...'
        DrvCert.UIRefresh()

        var RetInfo = GetDeviceExportDriverStatus( UserID , stock );
        if ( RetInfo["Success"] )
        {
            DisplayMessage("" + PromptArray["DrvExp.js_1741_1"] + "[" + stock[6] + "]" + PromptArray["DrvExp.js_1741_2"] + "")
            
            g_UserDrvDeviceInfoArray[i+",20"      ] = true
            g_UserDrvDeviceInfoArray[i+",UserID"  ] = RetInfo["UserID"]
            g_UserDrvDeviceInfoArray[i+",DriverID"] = RetInfo["DriverID"]
        }
        else
        {
       		DisplayMessage("" + PromptArray["DrvExp.js_1749_1"] + "[" + stock[6] + "]" + PromptArray["DrvExp.js_1749_2"] + ":" + RetInfo["ErrorInfo"] )
            
            g_UserDrvDeviceInfoArray[i+",20"] = false
            g_DeviceRowsNeedExportDriver ++
        }

        
        RunDriverExportToServerCloseProcess( stock )
	}

}
function GetDeviceExportDriverStatus( UserID , DeviceInfo )
{
	
	
	
	
	
	
	
	
	
	
	
	
	

	
	
	
    
    
    
    var DriverHashValueInBASE64 = ""
    
    if ( !DeviceInfo[5] )
    {
        var BackupDriverInfo = GetGivenDeviceBackupDriverInfo( DeviceInfo )
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        {
            var InfFileNameXml = DrvCert.FindFileInPath( BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"] )
            var InfFileName = GetXmlSingleNodeText( InfFileNameXml , "FileItem0" )
            if ( InfFileName )
            {
                
                var InfBASE64 = DrvCert.GetBASE64StringFromBinFile( BackupDriverInfo["DriverBackupPath"] + "\\" + 
                                                                         BackupDriverInfo["INFName"] )
                DriverHashValueInBASE64 = DrvCert.GetDataHash( InfBASE64 )
            }
        }
    }

	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
    
	
    SoapRequestXML += "     <n:IfDriverExportedEx xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    
    SoapRequestXML += "         <UserID>"               + UserID                                                + "</UserID>\n"
    SoapRequestXML += "         <MatchingDeviceID>"     + XmlEncoding( DeviceInfo[10] )                         + "</MatchingDeviceID>\n"
    SoapRequestXML += "         <HardwareIDCompaIDs>"   + XmlEncoding( DeviceInfo[8] + DeviceInfo[9] )          + "</HardwareIDCompaIDs>\n"
    SoapRequestXML += "         <BackupDriverDate>"     + XmlEncoding( DeviceInfo[11] )                         + "</BackupDriverDate>\n"
    SoapRequestXML += "         <DriverHash>"           + DriverHashValueInBASE64                               + "</DriverHash>\n"
	SoapRequestXML += GetOSInfo() + "\n"
    
	
    SoapRequestXML += "     </n:IfDriverExportedEx>\n"
    
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

    
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_1859_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_1859_2"] + "\n" + PromptArray["DrvExp.js_1859_3"] + ":\n" + SoapRequestXML )
        RetInfo["Success"       ] = false
        RetInfo["ErrorInfo"     ] = "" + PromptArray["DrvExp.js_1861_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_1861_2"] + ""
		return ( RetInfo )
	}

    var RetInfo = new Array()

    var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if ( ErrorInfo ) 
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_1870_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_1870_2"] + ":\n" + ErrorInfo )
        RetInfo["Success"       ] = false
        RetInfo["ErrorInfo"     ] = ErrorInfo
        RetInfo["UserID"        ] = 0
        RetInfo["DriverID"      ] = 0
		return ( RetInfo )
	}
	else
	{


        DisplayMessage( "" + PromptArray["DrvExp.js_1881_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_1881_2"] + "" )
        var ResultString = GetInfoByTagFromXml( ReturnXML, "Result" )
        var ResultUserID = GetInfoByTagFromXml( ReturnXML, "UserID" )
        var ResultDrvID  = GetInfoByTagFromXml( ReturnXML, "DriverID" )
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        RetInfo["Success"       ] = ( ( ResultString == "Success" ) && ( parseInt(ResultUserID) ) ) ? true : false
        

        RetInfo["ErrorInfo"     ] = ""
        RetInfo["UserID"        ] = ResultUserID
        RetInfo["DriverID"      ] = ResultDrvID
		return ( RetInfo )
	}

}

function ListDriverForExport()
{
	
	
    
    
    if ( g_DeviceRowsNeedExportDriver )
	{
		var stock = new Array()

		oRow  = document.createElement("TR");
		oCell = document.createElement("TD");
		oCell.colSpan= g_maxcols
		oCell.align = "center"
		oCell.innerHTML = "<br>" + PromptArray["DrvExp.js_1926_1"] + "" + g_DeviceRowsNeedExportDriver + "" + PromptArray["DrvExp.js_1926_2"] + "<br><br>"
		oRow.appendChild(oCell);
		g_oTBody0.appendChild(oRow);

		for (var i=0; i<g_UserDrvDeviceRows ; i++)
		{
			ReadArrayToDeviceInfo(stock , g_UserDrvDeviceInfoArray , i)
			
			if ( (!(stock[7] & 0x00000010)) && !stock[5] && !g_UserDrvDeviceInfoArray[i+",20"] )
			{
				oRow = document.createElement("TR");
				g_oTBody0.appendChild(oRow);

				oCell = document.createElement("TD");
				oCell.align="right"
                oCell.innerHTML = '<INPUT TYPE="checkbox" checked onclick="g_UserDrvDeviceInfoArray[' + i + '+ \',21\']=this.checked">'
                oRow.appendChild(oCell)

				TranslateDeviceInfoToArray(stock,g_UserDrvDeviceInfoArray, i ,i );

				for (j=g_mincols; j<g_maxcols; j++)
				{
					oCell = document.createElement("TD");
					
					(j==2)	? oCell.innerHTML = stock[7]
							: (j==6) ? oCell.innerHTML = stock[2]
									 : (j==7) ? oCell.innerHTML = stock[6]
											  : oCell.innerHTML = stock[j];
					
					oCell.vAlign	="top"; 
					(j==7) ? oCell.align = "left": oCell.align = "center";
					oRow.appendChild(oCell);
				}
			}
            
            else
            {
            }
		}
	}
}
function 	ListDriverExportedResult()
{

    if ( g_ExportedDeviceRows )
	{
		var stock = new Array()

		oRow = document.createElement("TR");
		oCell = document.createElement("TD");
		oCell.colSpan= g_maxcols+1
		oCell.align = "center"
		oCell.innerHTML = "<br>" + PromptArray["DrvExp.js_1978_1"] + "<br><br>"
		oRow.appendChild(oCell);
		g_oTBody0.appendChild(oRow);


        for (var i=0; i<g_ExportedDeviceRows ; i++)
		{

			ReadArrayToDeviceInfo(stock , g_ExportedDeviceArray , i)

			
			
			{
				var oRow,oCell;
				oRow = document.createElement("TR");
				g_oTBody0.appendChild(oRow);

				
				
				TranslateDeviceInfoToArray( stock , g_ExportedDeviceArray , i ,i );

				if (!stock[6] || stock[1]==0 ||  !stock[4] )
				{
					stock[0] = stock[1] = stock[2] = stock[3] = stock[4] = stock[5] = stock[6] = stock[7] = "";
				}
				if ( g_ExportedDeviceArray[i+",22"] )
				{
                    var ExpDrvHtml = "<img src='img/yes.gif' onMouseMove='this.style.cursor=\"help\"' width='16' height='16' alt='" + g_ExportedDeviceArray[i+",23"] + "'>"
				}
                else
                {
                    var ExpDrvHtml = "<img src='img/err.gif' onMouseMove='this.style.cursor=\"help\"' width='16' height='16' alt='" + g_ExportedDeviceArray[i+",23"] + "'>"
                     stock[6] =  stock[6].replace( /green/ig , "red" )
                }
				for (j=0; j<g_maxcols; j++)
				{

					oCell = document.createElement("TD");
					
					(j==0)? oCell.innerHTML =""
					   :(j==1)? oCell.innerHTML = ExpDrvHtml
						    :(j==2)	? oCell.innerHTML = stock[7]
						        : (j==6) ? oCell.innerHTML = stock[2]
									 : (j==7) ? oCell.innerHTML = stock[6]
											  : oCell.innerHTML = stock[j];
					
					oCell.vAlign	="top"; 
					if (j==7)
					{
						oCell.align = "left";
					}
					else
					{
						oCell.align = "center";
					}
					oRow.appendChild(oCell);
				}
			}
		}
	}

    
	
	
	if ( g_NoExportDeviceRows )
	{
		var stock = new Array()

		oRow  = document.createElement("TR");
		oCell = document.createElement("TD");

		oCell.colSpan= g_maxcols+1
		oCell.innerHTML = "<center><br>" + PromptArray["DrvExp.js_2050_1"] + "<br></center><br>"
		                  
		oCell.align = "right"
		oRow.appendChild(oCell);
		g_oTBody0.appendChild(oRow);


		for (var i=0; i<g_NoExportDeviceRows ; i++)
		{
			ReadArrayToDeviceInfo(stock , g_NoExportDeviceArray , i)

			{
				var oRow,oCell;
				oRow = document.createElement("TR");
				g_oTBody0.appendChild(oRow);


				
				
				TranslateDeviceInfoToArray(stock,g_NoExportDeviceArray, i ,i );

				if (!stock[6] || stock[1]==0 ||  !stock[4] )
				{
					stock[0] = stock[1] = stock[2] = stock[3] = stock[4] = stock[5] = stock[6] = stock[7] = "";
				}
                var ExpDrvHtml = "<img src='img/err2.gif' onMouseMove='this.style.cursor=\"help\"' width='16' height='16' alt='" + PromptArray["DrvExp.js_2075_1"] + "'>"
                
				for (j=0; j<g_maxcols; j++)
				{

					oCell = document.createElement("TD");
					
					(j==0)? oCell.innerHTML =""
					   :(j==1)? oCell.innerHTML = ExpDrvHtml
						:(j==2)	? oCell.innerHTML = stock[7]
							: (j==6) ? oCell.innerHTML = stock[2]
									 : (j==7) ? oCell.innerHTML = stock[6]
											  : oCell.innerHTML = stock[j];
					
					oCell.vAlign	="top"; 
					if (j==7)
					{
						oCell.align = "left";
						
					}
					else
					{
						oCell.align = "center";
					}
					oRow.appendChild(oCell);
				}
			}
		}
	}
    
    
    if ( g_UserExportedDriverRows || g_DevErrDeviceRows )
	{
		var stock = new Array()

		oRow  = document.createElement("TR");
		oCell = document.createElement("TD");
		oCell.colSpan= g_maxcols+1
		oCell.align = "center"
		oCell.innerHTML = "<br>" + PromptArray["DrvExp.js_2114_1"] + "<br><br>"
		oRow.appendChild(oCell);
		g_oTBody0.appendChild(oRow);

		for (var i=0; i<g_UserDrvDeviceRows ; i++)
		{
			ReadArrayToDeviceInfo(stock , g_UserDrvDeviceInfoArray , i)
			
			if ( g_UserDrvDeviceInfoArray[i+",20"] )
			{
				oRow = document.createElement("TR");
				g_oTBody0.appendChild(oRow);

                var ExpDrvHtml = "<img src='img/yes.gif' onMouseMove='this.style.cursor=\"help\"' width='16' height='16'>"

				TranslateDeviceInfoToArray(stock,g_UserDrvDeviceInfoArray, i ,i );
                
				if (!stock[6] || stock[1]==0 ||  !stock[4] )
				{
					stock[0] = stock[1] = stock[2] = stock[3] = stock[4] = stock[5] = stock[6] = stock[7] = "";
				}

				
                for (j=0; j<g_maxcols; j++)
				{
					oCell = document.createElement("TD");
					(j==0)? oCell.innerHTML =""
					   :(j==1)? oCell.innerHTML = ExpDrvHtml
                            :(j==2)	? oCell.innerHTML = stock[7]
                                : (j==6) ? oCell.innerHTML = stock[2]
                                    : (j==7) ? oCell.innerHTML = stock[6]
                                        : oCell.innerHTML = stock[j];
					
					oCell.vAlign	="top"; 
					(j==7) ? oCell.align = "left": oCell.align = "center";
					oRow.appendChild(oCell);
				}
			}
		}
        for (var i=0; i<g_DevErrDeviceRows ; i++)
        {

            ReadArrayToDeviceInfo( stock , g_DevErrDeviceInfoArray , i);
			
			if ( g_DevErrDeviceInfoArray[i+",20"] )
			{
				oRow = document.createElement("TR");
				g_oTBody0.appendChild(oRow);

                var ExpDrvHtml = "<img src='img/yes.gif' onMouseMove='this.style.cursor=\"help\"' width='16' height='16'>"

				TranslateDeviceInfoToArray(stock,g_DevErrDeviceInfoArray, i ,i );
                
				if (!stock[6] || stock[1]==0 ||  !stock[4] )
				{
					stock[0] = stock[1] = stock[2] = stock[3] = stock[4] = stock[5] = stock[6] = stock[7] = "";
				}

				
                for (j=0; j<g_maxcols; j++)
				{
					oCell = document.createElement("TD");
					(j==0)? oCell.innerHTML =""
					   :(j==1)? oCell.innerHTML = ExpDrvHtml
                            :(j==2)	? oCell.innerHTML = stock[7]
                                : (j==6) ? oCell.innerHTML = stock[2]
                                    : (j==7) ? oCell.innerHTML = stock[6]
                                        : oCell.innerHTML = stock[j];
					
					oCell.vAlign	="top"; 
					(j==7) ? oCell.align = "left": oCell.align = "center";
					oRow.appendChild(oCell);
				}
			}
		}
	}

}


function ExportDriverToServer()
{
    var ExportResult = false
	
    if ( g_DeviceRowsNeedExportDriver )
	{
		ExportResult = ExportDriverQueueToServer( g_UserID , g_UserDrvDeviceRows )
	}
    if ( !ExportResult ) return
}

	


function ExportDriverQueueToServer( UserID , CurDevices )
{
	var DeviceInfo	= new Array;
    var FinishedPercent

	if (CurDevices == 0) return false

	Title.innerHTML = '<center>' + PromptArray["DrvExp.js_2215_1"] + '...</center>'
	                + '<br>'
					+ '<table align=center id=PercentTbl width=400 bgColor=black border=0 cellSpacing=0 cellPadding=0 >'
					+ '<tr><td>'
					+ '  <IMG id="PercentImg" SRC="img/img.gif" WIDTH="0" HEIGHT="16" BORDER=0>'
					+ '</td></tr></table>'
					+ '<div id=PercentString>&nbsp;</div>'
					+ '<table align=center id=PercentSubTbl width=400 bgColor=black border=0 cellSpacing=0 cellPadding=0 >'
					+ '<tr><td>'
					+ '  <IMG id="PercentSubImg" SRC="img/img.gif" WIDTH="0" HEIGHT="16" BORDER=0>'
					+ '</td></tr></table>'
					+ '<div id=PercentSubString>&nbsp;</div>'
	DrvCert.UIRefresh()

	for (var i=0; i<CurDevices ; i++)
	{
		ReadArrayToDeviceInfo(DeviceInfo , g_UserDrvDeviceInfoArray , i);
		
		if (!(DeviceInfo[7] & 0x00000010) && !DeviceInfo[5] && !g_UserDrvDeviceInfoArray[i+",20"] && ( g_UserDrvDeviceInfoArray[i+",21"] != false) )
		{
			g_UserSelectExpDrvNumber ++
		}		
	}
	for (var i=0; i<CurDevices; i++)
	{
		PercentImg.width=PercentTbl.width*(g_ExportedDeviceRows)/g_UserSelectExpDrvNumber
    	PercentString.innerHTML = '<center>' + Math.floor((g_ExportedDeviceRows)/g_UserSelectExpDrvNumber*100) + '%</center>'
        
    	DrvCert.UIRefresh()

		ReadArrayToDeviceInfo(DeviceInfo , g_UserDrvDeviceInfoArray , i);

		RunDriverExportToServerOpenProcess( DeviceInfo );	
		
        
        
        
        
        
        
		if (!(DeviceInfo[7] & 0x00000010) && !DeviceInfo[5] && !g_UserDrvDeviceInfoArray[i+",20"] && ( g_UserDrvDeviceInfoArray[i+",21"] != false) )
		{
		  
		  
			DisplayMessage("" + PromptArray["DrvExp.js_2257_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_2257_2"] + "...");

			var ExportResult = ExportGivenBackupDriverToServer( UserID , DeviceInfo )

			
			SaveDeviceInfoToArray(DeviceInfo , g_ExportedDeviceArray , g_ExportedDeviceRows )
			
			if ( ExportResult["Success"] )
			{
                FinishedPercent = 100
                PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
                PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
                ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_2269_1"] + ''
                DrvCert.UIRefresh()

                DisplayMessage( "" + PromptArray["DrvExp.js_2272_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_2272_2"] + "" )
                g_ExportedDeviceArray[ g_ExportedDeviceRows + ",22"] = true
                g_ExportedDeviceArray[ g_ExportedDeviceRows + ",23"] = ExportResult["Info"]
                g_ExportedSuccessDeviceRows ++
			}
			else
			{
                FinishedPercent = 100
                PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
                PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
                ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_2282_1"] + ''
                DrvCert.UIRefresh()

                DisplayMessage( "" + PromptArray["DrvExp.js_2285_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_2285_2"] + "(" + PromptArray["DrvExp.js_2285_3"] + ":" + ExportResult["Info"] + ")" )
                g_ExportedDeviceArray[ g_ExportedDeviceRows + ",22"] = false
                g_ExportedDeviceArray[ g_ExportedDeviceRows + ",23"] = "" + PromptArray["DrvExp.js_2287_1"] + ":" + ExportResult["Info"] + ""
			}
            g_ExportedDeviceRows ++
		}
        
        else if ( g_UserDrvDeviceInfoArray[i+",21"] == false )
        {
			
			SaveDeviceInfoToArray(DeviceInfo , g_NoExportDeviceArray , g_NoExportDeviceRows )
			
            g_NoExportDeviceRows ++
        }
		
		RunDriverExportToServerCloseProcess( DeviceInfo )
	}
    return true
}
































































































function RegUserHardwareInfo()
{
	
	

	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	
    
    
    

	
    var MACIDs				= GetNetCardInfo()
	var CPUInfo				= GetCPUInfo()
	
    

    
    DisplayMessage( "" + PromptArray["DrvExp.js_2419_1"] + "..." )
	var MainBoardInfo		= GetMainBoardInfo()
    
    DisplayMessage( "" + PromptArray["DrvExp.js_2422_1"] + ":"  + MainBoardInfo )
    
    DisplayMessage( "" + PromptArray["DrvExp.js_2424_1"] + "..." )
	var DiskInfo			= GetDiskInfo()
    
    DisplayMessage( "" + PromptArray["DrvExp.js_2427_1"] + ":"  + DiskInfo )
    
    
    
    
    DiskInfo = CheckAndModifyDiskInfo( DiskInfo )
    
    

	var SoapRequestXML = ""
    
	
    SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:RegUserHardwareInfo xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    
    
	
    SoapRequestXML += CPUInfo			+ "\n"
	SoapRequestXML += MACIDs			+ "\n"
    
	
	SoapRequestXML += MainBoardInfo		+ "\n"
	SoapRequestXML += DiskInfo			+ "\n"
	SoapRequestXML += "     </n:RegUserHardwareInfo>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"


    var RetRegUserInfo = new Array()
    var ErrorInfo = ""

    
    DisplayMessage( "" + PromptArray["DrvExp.js_2466_1"] + "..." )
    
	
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )
    

	
    
    if ( !ReturnXML )
	{
        if (!g_CanUserConnectToServer)
        {
            ErrorInfo = "" + PromptArray["DrvExp.js_2478_1"] + ""
            DisplayMessage( "" + PromptArray["DrvExp.js_2479_1"] + "," + PromptArray["DrvExp.js_2479_2"] + "" )
            
        }
        else
        {
            ErrorInfo = "" + PromptArray["DrvExp.js_2484_1"] + "" + ServerName.value + "" + PromptArray["DrvExp.js_2484_2"] + ""
            DisplayMessage( "" + PromptArray["DrvExp.js_2485_1"] + "\n" + PromptArray["DrvExp.js_2485_2"] + "" + ServerName.value + "" + PromptArray["DrvExp.js_2485_3"] + "," + PromptArray["DrvExp.js_2485_4"] + "\n" + SoapRequestXML)
        }
        RetRegUserInfo["Success"] = false
        RetRegUserInfo["Info"]    = ErrorInfo
        RetRegUserInfo["UserID"]  = ""
		return ( RetRegUserInfo )
	}

	ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )

	if (ErrorInfo != null) 
	{
        RetRegUserInfo["Success"] = false
        RetRegUserInfo["Info"]    = ErrorInfo
        RetRegUserInfo["UserID"]  = ""
        DisplayMessage( "" + PromptArray["DrvExp.js_2500_1"] + ":\n" + ErrorInfo )
		return ( RetRegUserInfo )
	}
	else
	{
        var UserID           = GetInfoByTagFromXml( ReturnXML, "UserID" )
        
        var UserType         = GetInfoByTagFromXml( ReturnXML, "RegType" )
        
        var DownloadPath     = GetInfoByTagFromXml( ReturnXML, "DownloadPath" )
        
        var HostSerialNumber = GetInfoByTagFromXml( ReturnXML, "HostSerialNumber" )
        
        var CaseID           = GetInfoByTagFromXml( ReturnXML, "CaseID" )

        RetRegUserInfo["Success"         ] = true
        RetRegUserInfo["Info"            ]    = "" + PromptArray["DrvExp.js_2516_1"] + ",UserID=" + UserID 
        RetRegUserInfo["UserID"          ]  = UserID
        
        RetRegUserInfo["UserType"        ]  = UserType
        
        RetRegUserInfo["DownloadPath"    ]  = DownloadPath
        
        RetRegUserInfo["HostSerialNumber"] = HostSerialNumber
        
        RetRegUserInfo["CaseID"          ] = CaseID
        
        
        DisplayMessage( "" + PromptArray["DrvExp.js_2528_1"] + ",UserID=" + UserID + ",CaseID=" + CaseID + ",Path=" + DownloadPath + ",S/N:" + HostSerialNumber )

        
        DisplayMessage("" + PromptArray["DrvExp.js_2531_1"] + "/" + PromptArray["DrvExp.js_2531_2"] + "/" + PromptArray["DrvExp.js_2531_3"] + "..." )
        Title.innerHTML = "<center><br>" + PromptArray["DrvExp.js_2532_1"] + "...<br></center>"
        DrvCert.UIRefresh()
        SubmitCaseInfoToServer( UserID , CaseID , GetOSInfo() , navigator.userAgent )

		return ( RetRegUserInfo )
	}

}


function ExportGivenBackupDriverToServer( UserID , DeviceInfo )
{
	
	
	
	
	
	
	
	
	
	
	
	
	
	

    var FinishedPercent = 0

    FinishedPercent = 10
    PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
    PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
    ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_2564_1"] + '...'
    DrvCert.UIRefresh()
    
	
	
    
    
    
	var BackupDriverInfo = GetGivenDeviceBackupDriverInfo( DeviceInfo )
    
	
	
	
	
	
	
	
    
    
    
    
    
    

    FinishedPercent = 20
    PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
    PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
    ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_2591_1"] + '...'
    DrvCert.UIRefresh()
    
    DisplayMessage( "20%" )
    
    var errorString = CheckGivenBackupDriverValidity( BackupDriverInfo )
    var RetInfo = new Array()
    if ( errorString )
    {
        FinishedPercent = 100
        PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
        PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
        ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_2601_1"] + '<br>' + errorString + ''
        DrvCert.UIRefresh()
        UploadUserErrorBackupDriverInfoToServer( UserID , BackupDriverInfo , errorString )

        RetInfo["Success"] = false
        RetInfo["Info"]    = errorString
        return (RetInfo)
    }

    FinishedPercent = 30
    PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
    PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
    ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_2613_1"] + '...'
    DrvCert.UIRefresh()
    
    DisplayMessage( "30%" )
	
	
	
    
	
    var DriverIDInfo = RegUserExportDriverItemEx( UserID , BackupDriverInfo )
    
    
    
    
    
    
    
    
	
	
	
	
	
	
	
    
    
    
    
    
    
    
    
    
    

    if ( !DriverIDInfo["Success"] )
    {
        RetInfo["Success"] = false
        RetInfo["Info"]    = DriverIDInfo["ErrorInfo"]
        return ( RetInfo )
    }
    
    if ( DriverIDInfo["DriverUploaded"]  == "false" )
    {
        
        
        
        
        var ExpResult = ExportDriverItemToServerEx( UserID , DriverIDInfo["DriverID"] , BackupDriverInfo )
        
        RetInfo["Success"] = ExpResult["Success"]
        RetInfo["Info"]    = ExpResult["Info"]
        return (RetInfo)
    }

    RetInfo["Success"] = true
    RetInfo["Info"]    = "" + PromptArray["DrvExp.js_2668_1"] + ""
return (RetInfo)
}
function GetGivenDeviceBackupDriverInfo( DeviceInfo )
{
    
    

    
	
	
	
	
	
	
	
	
	
	
	
	
	


	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

	
    var BackupDriverInfo = new Array()
    BackupDriverInfo["Success"] = false

	var DriverProvider = ""
    var BackupDriverStatus = DeviceInfo[7] 
	
	if ( BackupDriverStatus & 0x00000080 )
	{
		DriverProvider = "DownloadDrv"
	}
	
	else if ( BackupDriverStatus & 0x00000100 )
	{
		DriverProvider = "CDDrv"
	}
	
	else
	{
		DriverProvider = DeviceInfo[13]
	}

    
    
    
	var hKey = DrvCert.RegOpenKey( 2 , "SOFTWARE\\Walker\\MyDrivers\\" + DriverProvider )
    
    
	
	
    var ClassNameIndex     = 0
    var ClassName		= DrvCert.RegEnumKey( hKey , ClassNameIndex )
    while ( ClassName )
    {
        var hClassKey	= DrvCert.RegOpenKey( 2 , "SOFTWARE\\Walker\\MyDrivers\\" + DriverProvider + "\\" + ClassName )
        
        
        
        var InstanceKeyIndex = 0
        var InstanceKeyName = DrvCert.RegEnumKey( hClassKey , InstanceKeyIndex )
        while ( InstanceKeyName )
        {
            var CurRegKeyName = "SOFTWARE\\Walker\\MyDrivers\\" + DriverProvider + "\\" + ClassName + "\\" + InstanceKeyName
            var hInstanceKey  = DrvCert.RegOpenKey( 2 , CurRegKeyName )
            var MatchingDeviceID  = DrvCert.RegQueryValue( hInstanceKey , "HardwareID" )
            if ( MatchingDeviceID.toUpperCase() == DeviceInfo[10].toUpperCase())
            {
                var DrvDate = DrvCert.RegQueryValue( hInstanceKey , "DrvDate" )

                if ( !BackupDriverInfo["BackupDriverDate"] || 
                      ( Date.parse(BackupDriverInfo["BackupDriverDate"]) < Date.parse( DrvDate ) ) )
                {
                    BackupDriverInfo["MatchingDeviceID"]    = DrvCert.RegQueryValue( hInstanceKey , "HardwareID" )
                    BackupDriverInfo["DriverBackupPath"]    = DrvCert.RegQueryValue( hInstanceKey , "BackupBaseDir" )
                    BackupDriverInfo["BackupDriverStatus"]  = DrvCert.RegQueryValue( hInstanceKey , "BackupDriverStatus" )
                    BackupDriverInfo["DeviceDesc"]          = DrvCert.RegQueryValue( hInstanceKey , "DeviceDesc" )
                    BackupDriverInfo["BackupDriverDate"]    = DrvDate
                    BackupDriverInfo["BackupDriverVer"]     = DrvCert.RegQueryValue( hInstanceKey , "DrvVersion" )
                    BackupDriverInfo["MatchingDeviceID"]    = DrvCert.RegQueryValue( hInstanceKey , "HardwareID" )
                    BackupDriverInfo["HardwareIDCompaIDs"]  = DrvCert.RegQueryValue( hInstanceKey , "HardwareIDsCompatibleIDs" )
                    BackupDriverInfo["INFSectionName"]      = DrvCert.RegQueryValue( hInstanceKey , "InfSection" )
                    BackupDriverInfo["CATName"]             = DrvCert.RegQueryValue( hInstanceKey , "CatalogFileName" )
                    BackupDriverInfo["INFName"]             = ( BackupDriverInfo["CATName"] ) 
                                                                     ? BackupDriverInfo["CATName"].replace( /.cat$/ig , ".INF" )
                                                                     : DrvCert.RegQueryValue( hInstanceKey , "SystemInfName" )
                    BackupDriverInfo["RegPath"]             = CurRegKeyName
                    BackupDriverInfo["ClassName"]           = ClassName
                    BackupDriverInfo["Provider"]            = DriverProvider
                    BackupDriverInfo["Success"]             = true
                }
            }
            
            InstanceKeyIndex ++
            InstanceKeyName = DrvCert.RegEnumKey( hClassKey , InstanceKeyIndex )
            DrvCert.RegCloseKey( hInstanceKey )
        }

        ClassNameIndex ++
        ClassName   = DrvCert.RegEnumKey( hKey , ClassNameIndex )
        DrvCert.RegCloseKey( hClassKey )
    }
    DrvCert.RegCloseKey( hKey )
    
	
	
	
	
	
	
	
    
    
    
    
    
    
    return ( BackupDriverInfo )
}

function CheckGivenBackupDriverValidity( BackupDriverInfo )
{
    
	
	
	
	
	
	
	
    
    
    
    
    
    
    return CheckExportDriverValidity( BackupDriverInfo )
}
function UploadUserErrorBackupDriverInfoToServer( UserID , BackupDriverInfo  , errorString )
{
    
	
	
	
	
	
	
	
    
    
    
    
    
    
	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:UploadUserErrorBackupDriverInfo xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
	SoapRequestXML += GetOSInfo() + "\n"
    SoapRequestXML += "         <UserID>"               + UserID                                                + "</UserID>\n"
    SoapRequestXML += "         <RegPath>"              + XmlEncoding( BackupDriverInfo["RegPath"] )            + "</RegPath>\n"
    SoapRequestXML += "         <DeviceDesc>"           + XmlEncoding( BackupDriverInfo["DeviceDesc"] )         + "</DeviceDesc>\n"
    SoapRequestXML += "         <BackupDriverStatus>"   + XmlEncoding( BackupDriverInfo["BackupDriverStatus"] ) + "</BackupDriverStatus>\n"
    SoapRequestXML += "         <MatchingDeviceID>"     + XmlEncoding( BackupDriverInfo["MatchingDeviceID"] )   + "</MatchingDeviceID>\n"
    SoapRequestXML += "         <HardwareIDCompaIDs>"   + XmlEncoding( BackupDriverInfo["HardwareIDCompaIDs"] ) + "</HardwareIDCompaIDs>\n"
    SoapRequestXML += "         <BackupDriverDate>"     + XmlEncoding( BackupDriverInfo["BackupDriverDate"] )   + "</BackupDriverDate>\n"
    SoapRequestXML += "         <BackupDriverVer>"      + XmlEncoding( BackupDriverInfo["BackupDriverVer"] )    + "</BackupDriverVer>\n"
    SoapRequestXML += "         <DriverBackupPath>"     + XmlEncoding( BackupDriverInfo["DriverBackupPath"] )   + "</DriverBackupPath>\n"
    SoapRequestXML += "         <INFName>"              + XmlEncoding( BackupDriverInfo["INFName"] )            + "</INFName>\n"
    SoapRequestXML += "         <CATName>"              + XmlEncoding( BackupDriverInfo["CATName"] )            + "</CATName>\n"
    SoapRequestXML += "         <INFSectionName>"       + XmlEncoding( BackupDriverInfo["INFSectionName"] )     + "</INFSectionName>\n"
    SoapRequestXML += "         <ClassName>"            + XmlEncoding( BackupDriverInfo["ClassName"] )          + "</ClassName>\n"
    SoapRequestXML += "         <Provider>"             + XmlEncoding( BackupDriverInfo["Provider"] )           + "</Provider>\n"
    SoapRequestXML += "         <DriverBackupPath>"     + XmlEncoding( BackupDriverInfo["DriverBackupPath"] )   + "</DriverBackupPath>\n"
    SoapRequestXML += "         <ErrorString>"          + XmlEncoding( errorString )                            + "</ErrorString>\n"
    
    
    SoapRequestXML += "         <INFContent>\n"         + XmlEncoding( DrvCert.GetBASE64StringFromBinFile( BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"] ) ) + "</INFContent>\n"
    SoapRequestXML += "     </n:UploadUserErrorBackupDriverInfo>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

    
	
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
		alert( "" + PromptArray["DrvExp.js_2917_1"] + "" )
        DisplayMessage( "" + PromptArray["DrvExp.js_2918_1"] + "," + PromptArray["DrvExp.js_2918_2"] + ":\n" + SoapRequestXML )
		return ""
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
		
		return ""
	}
	else
	{
		return GetInfoByTagFromXml( ReturnXML, "DriverID" )
	}

}
function RegUserExportDriverItem( UserID , BackupDriverInfo )
{
    
	
	
	
	
	
	
	
    
    
    
    
    
    

    
    var DriverHashValueInBASE64 = ""
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    {
        var InfFileNameXml = DrvCert.FindFileInPath( BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"] )
        var InfFileName = GetXmlSingleNodeText( InfFileNameXml , "FileItem0" )
        if ( InfFileName )
        {
            
            var InfBASE64 = DrvCert.GetBASE64StringFromBinFile( BackupDriverInfo["DriverBackupPath"] + "\\" + 
                                                                     BackupDriverInfo["INFName"] )
            DriverHashValueInBASE64 = DrvCert.GetDataHash( InfBASE64 )
        }
    }

	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:RegUserExportDriverItem xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UserID>"               + UserID                                                + "</UserID>\n"
    SoapRequestXML += "         <RegPath>"              + XmlEncoding( BackupDriverInfo["RegPath"] )            + "</RegPath>\n"
    SoapRequestXML += "         <DeviceDesc>"           + XmlEncoding( BackupDriverInfo["DeviceDesc"] )         + "</DeviceDesc>\n"
    SoapRequestXML += "         <BackupDriverStatus>"   + XmlEncoding( BackupDriverInfo["BackupDriverStatus"] ) + "</BackupDriverStatus>\n"
    SoapRequestXML += "         <MatchingDeviceID>"     + XmlEncoding( BackupDriverInfo["MatchingDeviceID"] )   + "</MatchingDeviceID>\n"
    SoapRequestXML += "         <HardwareIDCompaIDs>"   + XmlEncoding( BackupDriverInfo["HardwareIDCompaIDs"] ) + "</HardwareIDCompaIDs>\n"
    SoapRequestXML += "         <BackupDriverDate>"     + XmlEncoding( BackupDriverInfo["BackupDriverDate"] )   + "</BackupDriverDate>\n"
    SoapRequestXML += "         <BackupDriverVer>"      + XmlEncoding( BackupDriverInfo["BackupDriverVer"] )    + "</BackupDriverVer>\n"

    SoapRequestXML += "         <INFName>"              + XmlEncoding( BackupDriverInfo["INFName"] )            + "</INFName>\n"
    SoapRequestXML += "         <CATName>"              + XmlEncoding( BackupDriverInfo["CATName"] )            + "</CATName>\n"
    SoapRequestXML += "         <INFSectionName>"       + XmlEncoding( BackupDriverInfo["INFSectionName"] )     + "</INFSectionName>\n"
    SoapRequestXML += "         <ClassName>"            + XmlEncoding( BackupDriverInfo["ClassName"] )          + "</ClassName>\n"
    SoapRequestXML += "         <Provider>"             + XmlEncoding( BackupDriverInfo["Provider"] )           + "</Provider>\n"

    SoapRequestXML += "         <DriverHash>"           + DriverHashValueInBASE64 + "</DriverHash>\n"
	SoapRequestXML += GetOSInfo() + "\n"
	SoapRequestXML += "     </n:RegUserExportDriverItem>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
		alert( "" + PromptArray["DrvExp.js_3027_1"] + "[" + BackupDriverInfo["DeviceDesc"] + "]" + PromptArray["DrvExp.js_3027_2"] + "" )
        DisplayMessage( "" + PromptArray["DrvExp.js_3028_1"] + "[" + BackupDriverInfo["DeviceDesc"] + "]" + PromptArray["DrvExp.js_3028_2"] + "\n" + PromptArray["DrvExp.js_3028_3"] + ":\n" + SoapRequestXML )
		return ""
	}

    var RetInfo = new Array()

    var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_3037_1"] + "[" + BackupDriverInfo["DeviceDesc"] + "]" + PromptArray["DrvExp.js_3037_2"] + ":\n" + ErrorInfo )
        RetInfo["Success"       ] = false
        RetInfo["DriverID"      ] = ""
        RetInfo["DriverUploaded"] = "Unknown"
        RetInfo["ErrorInfo"     ] = ErrorInfo
		return ( RetInfo )
	}
	else
	{
		var DriverID              = GetInfoByTagFromXml( ReturnXML, "DriverID" )
        var DriverUploaded        = GetInfoByTagFromXml( ReturnXML, "IsDriverUploaded" )
        RetInfo["Success"       ] = true
        RetInfo["DriverID"      ] = DriverID
        RetInfo["DriverUploaded"] = DriverUploaded
        RetInfo["ErrorInfo"     ] = ""
		return ( RetInfo )
	}
}

function ExportDriverItemToServer( UserID , DriverID , BackupDriverInfo )
{
    
	
	
	
	
	
	
	
    
    
    
    
    
    

    
    var CookieFlag = GetCookie( "DrvTransforMode" )
	if ( ( CookieFlag == "true") || !CookieFlag ) 
    {
        var RetInfo = UploadDriverByCGI( UserID , DriverID , BackupDriverInfo )
        return ( RetInfo )
    }
    else
    {
        var RetInfo = UploadDriverBySOAP( UserID , DriverID , BackupDriverInfo )
        return ( RetInfo )
    }
}
function UploadDriverByCGI( UserID , DriverID , BackupDriverInfo )
{
    
    
        	var MainBoardInfoXml	    = GetMainBoardInfo()
    
    
    
    
    
    
    
    
    
    
    
    
    
            var ComputerMfg             = GetInfoByTagFromXml( MainBoardInfoXml, "ComputerManufacturer" )
            var ComputerModel           = GetInfoByTagFromXml( MainBoardInfoXml, "ComputerModel" )
            var BaseBoardMfg            = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardManufacturer" )
            var BaseBoardProduct        = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardProduct" )
            var BaseBoardVersion        = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardVersion" )
            var BaseBoardSerialNumber   = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardSerialNumber" )
            var EncryptKey = DrvCert.GetDataHash( "e-Software.cn"   + 
                                                  ComputerMfg       + 
                                                  ComputerModel     + 
                                                  BaseBoardMfg      + 
                                                  BaseBoardProduct  +
                                                  BaseBoardVersion  + 
                                                  BaseBoardSerialNumber )
    
    
            var INFFileName   = BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"]
            
            
            
            var INFEncFileName= BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"].replace( /.inf$/gi,".Enc.Inf")
            
            
            DrvCert.CopyFile( INFFileName , INFEncFileName )

            FinishedPercent = 40
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_3131_1"] + '...'
            DrvCert.UIRefresh()
    
    
            var CabFileName = BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"].replace( /.inf$/gi,".UserDrv.Cab")
    
            DrvCert.DeleteFile( CabFileName )

    
            var PackDrvList = GetAllFileInfoInDir( BackupDriverInfo["DriverBackupPath"] , ""  )

            var CreateCabFlag = true
            CreateCabFlag |= DrvCert.CreateCab( CabFileName )
            for ( var i=0; i<PackDrvList["Rows"] ; i++ )
            {
                var RelativePathFileName = PackDrvList[i].substr( BackupDriverInfo["DriverBackupPath"].length + 1 ) 
                
                
                if ( PackDrvList[i].toUpperCase() != INFFileName.toUpperCase() )
                {
                    CreateCabFlag |= DrvCert.AddFileToCab( PackDrvList[i] , RelativePathFileName )
                }
            }
            CreateCabFlag |= DrvCert.FinishCab()
            DrvCert.DeleteFile( INFEncFileName )

            var RetInfo = new Array()
            RetInfo["Success"] = false
            RetInfo["Info"]    = ""

            FinishedPercent = 50
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_3164_1"] + '...'
            DrvCert.UIRefresh()
            var CabFileSize = DrvCert.GetFileSize( CabFileName )
    
            var StartResult = UploadCabFileContentToServerStart(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize)
            if ( StartResult)
            {
                
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3176_1"] + ":" + StartResult
                return ( RetInfo )
            }

        
        var URL = ServerName.value + SoapAspURL.value + "?Mode=UploadDrv"
                                                      + "&User="        + UserID 
                                                      + "&DriverID="    + DriverID
                                                      + "&DriverName="  + CabFileName

        var hHttpFile       = DrvCert.HttpOpenRequestToHandle( URL )
        if ( !hHttpFile ) 
        {
            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3189_1"] + "HttpOpenRequestToHandle(" +  URL + ")" + PromptArray["DrvExp.js_3189_2"] + ""
            return ( RetInfo )
        }
        
        
        
        
        
        var CabFileSizeInVariant = DrvCert.GetFileSizeToVariant( CabFileName )
        
        
        if ( !DrvCert.HttpWriteFile( hHttpFile , CabFileSizeInVariant , 1 ) )
        {
            
            DrvCert.HttpCloseRequest( hHttpFile )
            

            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3206_1"] + "HttpWriteFile(" +  hHttpFile + ")" + PromptArray["DrvExp.js_3206_2"] + "" + DrvCert.ErrorString
            return ( RetInfo )
        }

    
    try
    {
    

        var CabFileHandle = DrvCert.OpenFileForRead( CabFileName )
        var ReadFileSize  = CGI_UPLOAD_CAB_FILE_BUFFER_SIZE   
        var ReadedSize    = 0
        var FileBinData

        
        
        
        
        g_SkipExpCurDrvFlag = 0
        
        

        for ( ReadedSize = 0 ;  ReadedSize < CabFileSize ; ReadedSize += ReadFileSize )
        {
            FinishedPercent = 50 + Math.floor( 40*( ReadedSize / CabFileSize ) )
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '<div >' + PromptArray["DrvExp.js_3233_1"] + '...'
                                     + Math.floor( ReadedSize/1024 ) + 'k/' + Math.floor( CabFileSize/1024 ) + 'k'
                                     + '&nbsp;&nbsp;<a href="?" onclick="g_SkipExpCurDrvFlag=1;return false;">' + PromptArray["DrvExp.js_3235_1"] + '</a>'
                                     + '</div>'
            DrvCert.UIRefresh()

            
            
            
            
            
            
            
            
            
            if ( g_SkipExpCurDrvFlag )
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3251_1"] + ""
                return ( RetInfo )
            }
            
            

            
            
            
            
            
            

            FileBinData = DrvCert.ReadFileInBinary( CabFileHandle , ReadFileSize )
            
            if ( !DrvCert.HttpWriteFile( hHttpFile , FileBinData , 2 ) )
            {
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3268_1"] + "HttpWriteFile(" +  hHttpFile + ")" + PromptArray["DrvExp.js_3268_2"] + "" + DrvCert.ErrorString
                return ( RetInfo )
            }
            FileBinData = null

            CurFilePointer = ( ReadedSize > CabFileSize ) ? CabFileSize : ReadedSize
        }
        
        if ( !DrvCert.HttpWriteFile( hHttpFile , null , 3 ) )
        {
            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3278_1"] + "HttpWriteFile(" +  hHttpFile + ")" + PromptArray["DrvExp.js_3278_2"] + "" + DrvCert.ErrorString
            return ( RetInfo )
        }

        var TotalSize       = DrvCert.HttpQueryFileLength( hHttpFile )
        if ( !TotalSize )
        {
            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3285_1"] + "HttpQueryFileLength(" +  hHttpFile + ")" + PromptArray["DrvExp.js_3285_2"] + "" + DrvCert.ErrorString
            return ( RetInfo )
        }

        FinishedPercent = 92
        PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
        PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
        ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_3292_1"] + '...'
        DrvCert.UIRefresh()

        
        {
            var ReadSize        = CGI_DOWNLOAD_CAB_FILE_BUFFER_SIZE
            var FileBinContent  = true
            var HttpResponseFile= CabFileName + ".log"
            DrvCert.DeleteFile( HttpResponseFile )
            var ResponseFileHandle = DrvCert.OpenFileForWrite( HttpResponseFile )
            for (var ReadedSize = 0 ; ReadedSize < TotalSize ;  ReadedSize += ReadSize )
            {

                FileBinContent  = DrvCert.HttpReadFile( hHttpFile , ReadSize )
                DrvCert.AppendBinDataToFile( ResponseFileHandle , FileBinContent )
                FileBinContent = null
            }
            DrvCert.CloseFileForRead( ResponseFileHandle )
            
            var HttpResponseFileContent = DrvCert.GetStringFromFile( HttpResponseFile )
            
            DrvCert.DeleteFile( HttpResponseFile )
            if ( HttpResponseFileContent != "OK" )
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3317_1"] + ":" + HttpResponseFileContent
                return ( RetInfo )
            }
        }

    
    
    
    
    
    }
    finally
    {
        DrvCert.HttpCloseRequest( hHttpFile )
        DrvCert.CloseFileForRead( CabFileHandle )
    }
    
    




            FinishedPercent = 95
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_3342_1"] + '...'
            DrvCert.UIRefresh()
    
            var FinishResult = UploadCabFileContentToServerFinish(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize )
            if ( FinishResult)
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3353_1"] + ":" + FinishResult
                return ( RetInfo )
            }
    
            DrvCert.DeleteFile( CabFileName )


    RetInfo["Success"] = true
    RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3361_1"] + ""
    return ( RetInfo )
}
function UploadDriverBySOAP( UserID , DriverID , BackupDriverInfo )
{
    
    
        	var MainBoardInfoXml	    = GetMainBoardInfo()
    
    
    
    
    
    
    
    
    
    
    
    
    
            var ComputerMfg             = GetInfoByTagFromXml( MainBoardInfoXml, "ComputerManufacturer" )
            var ComputerModel           = GetInfoByTagFromXml( MainBoardInfoXml, "ComputerModel" )
            var BaseBoardMfg            = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardManufacturer" )
            var BaseBoardProduct        = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardProduct" )
            var BaseBoardVersion        = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardVersion" )
            var BaseBoardSerialNumber   = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardSerialNumber" )
            var EncryptKey = DrvCert.GetDataHash( "e-Software.cn"   + 
                                                  ComputerMfg       + 
                                                  ComputerModel     + 
                                                  BaseBoardMfg      + 
                                                  BaseBoardProduct  +
                                                  BaseBoardVersion  + 
                                                  BaseBoardSerialNumber )
    
    
            var INFFileName   = BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"]
            
            
            
            var INFEncFileName= BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"].replace( /.inf$/gi,".Enc.Inf")
            
            
            DrvCert.CopyFile( INFFileName , INFEncFileName )

            FinishedPercent = 40
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_3409_1"] + '...'
            DrvCert.UIRefresh()
    
    
            var CabFileName = BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"].replace( /.inf$/gi,".UserDrv.Cab")
    
            DrvCert.DeleteFile( CabFileName )

    
            var PackDrvList = GetAllFileInfoInDir( BackupDriverInfo["DriverBackupPath"] , ""  )

            var CreateCabFlag = true
            CreateCabFlag |= DrvCert.CreateCab( CabFileName )
            for ( var i=0; i<PackDrvList["Rows"] ; i++ )
            {
                var RelativePathFileName = PackDrvList[i].substr( BackupDriverInfo["DriverBackupPath"].length + 1 ) 
                
                
                if ( PackDrvList[i].toUpperCase() != INFFileName.toUpperCase() )
                {
                    CreateCabFlag |= DrvCert.AddFileToCab( PackDrvList[i] , RelativePathFileName )
                }
            }
            CreateCabFlag |= DrvCert.FinishCab()
            DrvCert.DeleteFile( INFEncFileName )

            var RetInfo = new Array()

            FinishedPercent = 50
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_3440_1"] + '...'
            DrvCert.UIRefresh()
            var CabFileSize = DrvCert.GetFileSize( CabFileName )
    
            var StartResult = UploadCabFileContentToServerStart(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize)
            if ( StartResult)
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3452_1"] + ":" + StartResult
                return ( RetInfo )
            }
    
    
            var CabFileHandle = DrvCert.OpenFileForRead( CabFileName )
            var ReadFileSize  = UPLOAD_CAB_FILE_BUFFER_SIZE   
            var ReadedSize    = 0
    
            
            
            
            g_SkipExpCurDrvFlag = 0
            do
            {
                FinishedPercent = 50 + Math.floor( 40*( ReadedSize / CabFileSize ) )
                PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
                PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
                ProcessingInfo.innerHTML = '<div >' + PromptArray["DrvExp.js_3470_1"] + '...'
                                         + Math.floor( ReadedSize/1024 ) + 'k/' + Math.floor( CabFileSize/1024 ) + 'k'
                                         + '&nbsp;&nbsp;<a href="?" onclick="g_SkipExpCurDrvFlag=1;return false;">' + PromptArray["DrvExp.js_3472_1"] + '</a>'
                                         + '</div>'
                DrvCert.UIRefresh()

                var ReadFileContentInBASE64 = DrvCert.ReadFileToBASE64String( CabFileHandle , ReadFileSize )
    
                if ( ReadFileContentInBASE64 )
                     var Result = UploadCabFileContentToServerRunning(   
                                                UserID , 
                                                DriverID , 
                                                CabFileName , 
                                                CabFileSize , 
                                                ReadFileContentInBASE64 )
                
                if ( Result )
                {
                    
                    DrvCert.CloseFileForRead( CabFileHandle )
                    DrvCert.DeleteFile( CabFileName )

                    RetInfo["Success"] = false
                    RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3493_1"] + ":" + Result
                    return ( RetInfo )
                }
                
                if ( g_SkipExpCurDrvFlag )
                {
                    
                    DrvCert.CloseFileForRead( CabFileHandle )
                    DrvCert.DeleteFile( CabFileName )

                    RetInfo["Success"] = false
                    RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3504_1"] + ""
                    return ( RetInfo )
                }

                ReadedSize += ReadFileSize
                if ( ReadedSize > CabFileSize )  ReadedSize = CabFileSize 
            }
    
    
    
            while ( ReadFileContentInBASE64 )
            DrvCert.CloseFileForRead( CabFileHandle )

            FinishedPercent = 95
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_3520_1"] + '...'
            DrvCert.UIRefresh()
    
            var FinishResult = UploadCabFileContentToServerFinish(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize )
            if ( FinishResult)
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3531_1"] + ":" + FinishResult
                return ( RetInfo )
            }
    
            DrvCert.DeleteFile( CabFileName )


    RetInfo["Success"] = true
    RetInfo["Info"]    = "" + PromptArray["DrvExp.js_3539_1"] + ""
    return ( RetInfo )
}

function GetAllFileInfoInDir( FilePath , RegExpressString )
{
    var FileInfo = new Array()
    FileInfo["Rows"] = 0

	var FileNameXml = DrvCert.FindFileInPath( FilePath + "\\*.*" )
	var FileName = GetXmlSingleNodeText( FileNameXml , "FileItem0" )

    var i       = 0

    while ( FileName )
    {
        var FileInfoInDir = GetAllFileInfoInDir( FilePath + "\\" + FileName , RegExpressString )
        
        if ( FileInfoInDir["Rows"] )
        {
            for (var j=0;j<FileInfoInDir["Rows"];j++)
            {
                FileInfo[FileInfo["Rows"]] = FileInfoInDir[j]
                FileInfo["Rows"] ++
            }
        }
        
        else
        {
            
            var re = new RegExp( RegExpressString ,"gi");  
            if ( FileName.search( re ) != -1 )
            {
                FileInfo[FileInfo["Rows"]]      = FilePath + "\\" + FileName
                FileInfo["Rows"] ++
            }
            
            {
            }
            
            var PathFileName = FilePath + "\\" + FileName
            
            
        }

        i++
        
        FileName            = GetXmlSingleNodeText( FileNameXml , "FileItem" + i )
    }

return ( FileInfo )











}
function UploadCabFileContentToServerStart(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize )
{
    var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:UploadCabFileContent xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UploadStatus>"         + "Start"                       + "</UploadStatus>\n"
    SoapRequestXML += "         <UserID>"               + UserID                        + "</UserID>\n"
    SoapRequestXML += "         <DriverID>"             + DriverID                      + "</DriverID>\n"
    SoapRequestXML += "         <CabFileName>"          + XmlEncoding( CabFileName )    + "</CabFileName>\n"
    SoapRequestXML += "         <CabFileSize>"          + CabFileSize                   + "</CabFileSize>\n"
    SoapRequestXML += "         <CabContent></CabContent>\n"
    SoapRequestXML += "     </n:UploadCabFileContent>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

    if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_3638_1"] + "," + PromptArray["DrvExp.js_3638_2"] + ":\n" + SoapRequestXML )
		return "" + PromptArray["DrvExp.js_3639_1"] + ""
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
		return ErrorInfo
	}
	else
	{
        var UploadResult = GetInfoByTagFromXml( ReturnXML, "Result" )
		return ( UploadResult == "Success" ) ? "" : UploadResult
	}
}
function UploadCabFileContentToServerRunning( 
                                        UserID , 
                                        DriverID , 
                                        CabFileName , 
                                        CabFileSize , 
                                        ReadFileContentInBASE64 )
{
    
    
    
    
    
    

    var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:UploadCabFileContent xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UploadStatus>"         + "Running"                     + "</UploadStatus>\n"
    SoapRequestXML += "         <UserID>"               + UserID                        + "</UserID>\n"
    SoapRequestXML += "         <DriverID>"             + DriverID                      + "</DriverID>\n"
    SoapRequestXML += "         <CabFileName>"          + XmlEncoding( CabFileName )    + "</CabFileName>\n"
    SoapRequestXML += "         <CabFileSize>"          + CabFileSize                   + "</CabFileSize>\n"
    SoapRequestXML += "         <CabContent>"           + ReadFileContentInBASE64       + "</CabContent>\n"
    SoapRequestXML += "     </n:UploadCabFileContent>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_3697_1"] + "," + PromptArray["DrvExp.js_3697_2"] + ":\n" + SoapRequestXML )
		return "" + PromptArray["DrvExp.js_3698_1"] + ""
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
		return ErrorInfo
	}
	else
	{
        var UploadResult = GetInfoByTagFromXml( ReturnXML, "Result" )
		return ( UploadResult == "Success" ) ? "" : UploadResult
	}

}
function UploadCabFileContentToServerFinish(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize )
{
    var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:UploadCabFileContent xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UploadStatus>"         + "Finish"                      + "</UploadStatus>\n"
    SoapRequestXML += "         <UserID>"               + UserID                        + "</UserID>\n"
    SoapRequestXML += "         <DriverID>"             + DriverID                      + "</DriverID>\n"
    SoapRequestXML += "         <CabFileName>"          + XmlEncoding( CabFileName )    + "</CabFileName>\n"
    SoapRequestXML += "         <CabFileSize>"          + CabFileSize                   + "</CabFileSize>\n"
    SoapRequestXML += "         <CabContent></CabContent>\n"
    SoapRequestXML += "     </n:UploadCabFileContent>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_3749_1"] + "," + PromptArray["DrvExp.js_3749_2"] + ":\n" + SoapRequestXML )
		return "" + PromptArray["DrvExp.js_3750_1"] + ""
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
		return ErrorInfo
	}
	else
	{
        var UploadResult = GetInfoByTagFromXml( ReturnXML, "Result" )
		return ( UploadResult == "Success" ) ? "" : UploadResult
	}
}
function DriverImportExportProcedure()
{
	
    
    
    
    
	

    DisplayMessage("" + PromptArray["DrvExp.js_3773_1"] + "...");
    
    
    
    ExportDriverToServer()
	DisplayMessage("" + PromptArray["DrvExp.js_3778_1"] + "");


    
    var BackupDeviceErrorRow  = g_UserSelectExpDrvNumber - g_ExportedSuccessDeviceRows 
	var ProcessResult = ''
                     + '<center>' + PromptArray["DrvExp.js_3784_1"] + '<br><br>'
                     + '<ul>'
                     + '<li>' + PromptArray["DrvExp.js_3786_1"] + ' ' + (g_MaxDeviceIndex) + ' ' + PromptArray["DrvExp.js_3786_2"] + ''
	if ( g_UserSelectExpDrvNumber ) 
        ProcessResult += '' + PromptArray["DrvExp.js_3788_1"] + ''+ g_UserSelectExpDrvNumber + '' + PromptArray["DrvExp.js_3788_2"] + ''
    if ( g_ExportedSuccessDeviceRows )
        ProcessResult += '' + PromptArray["DrvExp.js_3790_1"] + '' + g_ExportedSuccessDeviceRows + '' + PromptArray["DrvExp.js_3790_2"] + ''
    if ( BackupDeviceErrorRow )
        ProcessResult += '' + PromptArray["DrvExp.js_3792_1"] + '' + BackupDeviceErrorRow + '' + PromptArray["DrvExp.js_3792_2"] + ''

    var TotalExp = g_UserExportedDriverRows + g_ExportedSuccessDeviceRows
    if ( TotalExp )
                     + '' + PromptArray["DrvExp.js_3796_1"] + '' + TotalExp + '' + PromptArray["DrvExp.js_3796_2"] + ''
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    ProcessResult   += '。'
                     + '</li>'
					 + ''
					 + '</ul>'
                     + '</center>'

	Title.innerHTML = ProcessResult ;
    
    var AccountInfoArray = GetAccountInfoFromServer( g_SessionEmail )

	UserIDTag.innerHTML =   '<table>'
                          + '<tr>'
                          + '<td>' + PromptArray["DrvExp.js_3830_1"] + ':</td><td>' + g_UserID + '&nbsp;&nbsp;&nbsp;<br></td>'
                          + '</tr>'
                          + '<tr>'
                          + '<td>' + PromptArray["DrvExp.js_3833_1"] + ':</td><td>' + ( g_UserExportedDriverRows + g_ExportedSuccessDeviceRows ) + '&nbsp;&nbsp;&nbsp;<br></td>'
                          + '</tr>'
                          
                          + '<tr>'
                          + '<td>' + PromptArray["DrvExp.js_3837_1"] + ':</td><td align=left><span id=AmountValue>' + AccountInfoArray["Amount"] + '</span></td>'
                          + '</tr>'
                          
                          + '</table>'


    DeleteDeviceTable();
	CreateDeviceTable();
	oTableContainer.align="center"


    ListDriverExportedResult()

	oRow = document.createElement("TR");
	oCell = document.createElement("TD");
	oCell.colSpan= g_maxcols+1
	oCell.align = "center"
	oCell.innerHTML = "<br>"
                    
                    
	                
                    
					+ "<input type='button' value='" + PromptArray["DrvExp.js_3859_1"] + "' onclick='if ( this.value == \"" + PromptArray["DrvExp.js_3859_2"] + "  " + PromptArray["DrvExp.js_3859_3"] + "\" ) return false;window.open( \"Comment.htm\" );this.value=\"" + PromptArray["DrvExp.js_3859_4"] + "  " + PromptArray["DrvExp.js_3859_5"] + "\"'>"
	oRow.appendChild(oCell);
	g_oTBody0.appendChild(oRow);

    DisplayMessage(Title.innerText)
}
function GetUserExportedDriverRows()
{
    var Rows = 0
	for (var i=0; i<g_DevErrDeviceRows ; i++)
	{
        if ( g_DevErrDeviceInfoArray[i+",UserID"  ] == g_UserID ) Rows ++
	}
    
	for (var i=0; i<g_UserDrvDeviceRows ; i++)
	{
        if ( g_UserDrvDeviceInfoArray[i+",UserID"  ] == g_UserID ) Rows ++
    }
    return Rows

}


function UploadDriverToImportDeviceInfoToServer(        UserID , 
                                                        MatchingDriverUserID , 
                                                        MatchingDriverDriverID , 
                                                        DeviceInfo )
{
	
	
	
	
	
	
	
	
	
	
	
	
	
	               

    var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:UploadDriverToImportDeviceInfo xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UserID>"                   + UserID                        + "</UserID>\n"
    SoapRequestXML += "         <MatchingDriverUserID>"     + MatchingDriverUserID          + "</MatchingDriverUserID>\n"
    SoapRequestXML += "         <MatchingDriverDriverID>"   + MatchingDriverDriverID        + "</MatchingDriverDriverID>\n"
    SoapRequestXML += "         <DeviceIndex>"              + DeviceInfo[1]                 + "</DeviceIndex>\n"
    SoapRequestXML += "         <DeviceClassID>"            + DeviceInfo[2]                 + "</DeviceClassID>\n"
    SoapRequestXML += "         <DeviceClassType>"          + DeviceInfo[3]                 + "</DeviceClassType>\n"
    SoapRequestXML += "         <DeviceStatus>"             + DeviceInfo[4]                 + "</DeviceStatus>\n"
    SoapRequestXML += "         <DeviceProblem>"            + DeviceInfo[5]                 + "</DeviceProblem>\n"
    SoapRequestXML += "         <DeviceName>"               + XmlEncoding( DeviceInfo[6] )  + "</DeviceName>\n"
    SoapRequestXML += "         <BackupDriverStatus>"       + DeviceInfo[7]                 + "</BackupDriverStatus>\n"
    SoapRequestXML += "         <HardwareID>"               + XmlEncoding( DeviceInfo[8] )  + "</HardwareID>\n"
    SoapRequestXML += "         <CompatibleID>"             + XmlEncoding( DeviceInfo[9] )  + "</CompatibleID>\n"
    SoapRequestXML += "         <MatchingDeviceID>"         + XmlEncoding( DeviceInfo[10])  + "</MatchingDeviceID>\n"
    SoapRequestXML += "         <DriverDate>"               + XmlEncoding( DeviceInfo[11])  + "</DriverDate>\n"
    SoapRequestXML += "         <DriverVer>"                + XmlEncoding( DeviceInfo[12])  + "</DriverVer>\n"
    SoapRequestXML += "         <DriverProvider>"           + XmlEncoding( DeviceInfo[13])  + "</DriverProvider>\n"
    SoapRequestXML += "     </n:UploadDriverToImportDeviceInfo>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

    if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_3942_1"] + "," + PromptArray["DrvExp.js_3942_2"] + ":\n" + SoapRequestXML )
		return "" + PromptArray["DrvExp.js_3943_1"] + ""
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
		return ErrorInfo
	}
	else
	{
        var UploadResult = GetInfoByTagFromXml( ReturnXML, "Result" )
		return ( UploadResult == "Success" ) ? "" : UploadResult
	}
}







function UploadDriverImportedDeviceInfoToServer(  
                                            UserID , 
                                            MatchingDriverUserID , 
                                            MatchingDriverDriverID , 
                                            DeviceInfo )
{
	
	
	
	
	
	
	
	
	
	
	
	
	
	               

    var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:UploadDriverImportedDeviceInfo xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UserID>"                   + UserID                        + "</UserID>\n"
    SoapRequestXML += "         <MatchingDriverUserID>"     + MatchingDriverUserID          + "</MatchingDriverUserID>\n"
    SoapRequestXML += "         <MatchingDriverDriverID>"   + MatchingDriverDriverID        + "</MatchingDriverDriverID>\n"
    SoapRequestXML += "         <DeviceIndex>"              + DeviceInfo[1]                 + "</DeviceIndex>\n"
    SoapRequestXML += "         <DeviceClassID>"            + DeviceInfo[2]                 + "</DeviceClassID>\n"
    SoapRequestXML += "         <DeviceClassType>"          + DeviceInfo[3]                 + "</DeviceClassType>\n"
    SoapRequestXML += "         <DeviceStatus>"             + DeviceInfo[4]                 + "</DeviceStatus>\n"
    SoapRequestXML += "         <DeviceProblem>"            + DeviceInfo[5]                 + "</DeviceProblem>\n"
    SoapRequestXML += "         <DeviceName>"               + XmlEncoding( DeviceInfo[6] )  + "</DeviceName>\n"
    SoapRequestXML += "         <BackupDriverStatus>"       + DeviceInfo[7]                 + "</BackupDriverStatus>\n"
    SoapRequestXML += "         <HardwareID>"               + XmlEncoding( DeviceInfo[8] )  + "</HardwareID>\n"
    SoapRequestXML += "         <CompatibleID>"             + XmlEncoding( DeviceInfo[9] )  + "</CompatibleID>\n"
    SoapRequestXML += "         <MatchingDeviceID>"         + XmlEncoding( DeviceInfo[10])  + "</MatchingDeviceID>\n"
    SoapRequestXML += "         <DriverDate>"               + XmlEncoding( DeviceInfo[11])  + "</DriverDate>\n"
    SoapRequestXML += "         <DriverVer>"                + XmlEncoding( DeviceInfo[12])  + "</DriverVer>\n"
    SoapRequestXML += "         <DriverProvider>"           + XmlEncoding( DeviceInfo[13])  + "</DriverProvider>\n"
    SoapRequestXML += "     </n:UploadDriverImportedDeviceInfo>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4025_1"] + "," + PromptArray["DrvExp.js_4025_2"] + ":\n" + SoapRequestXML )
		return "" + PromptArray["DrvExp.js_4026_1"] + ""
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
		return ErrorInfo
	}
	else
	{
        var UploadResult = GetInfoByTagFromXml( ReturnXML, "Result" )
		return ( UploadResult == "Success" ) ? "" : UploadResult
	}
}

function GetDSPCertContent()
{
    var RetInfo = new Array()
    var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:GetDSPCertContent xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "     </n:GetDSPCertContent>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

    if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4068_1"] + "," + PromptArray["DrvExp.js_4068_2"] + ":\n" + SoapRequestXML )
        RetInfo["Success"] = false
        RetInfo["Info"]    = "" + PromptArray["DrvExp.js_4070_1"] + ""
		return ( RetInfo )
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
        RetInfo["Success"] = false
        RetInfo["Info"]    = ErrorInfo
		return ( RetInfo )
	}
	else
	{
        var Result = GetInfoByTagFromXml( ReturnXML, "Result" )
        RetInfo["Success"       ] = ( Result == "Success" ) ? true : false
        RetInfo["Info"          ] = ""
        RetInfo["DSPCert"       ] = GetInfoByTagFromXml( ReturnXML, "DSPCertContent" )
        RetInfo["VerifyData"    ] = GetInfoByTagFromXml( ReturnXML, "DSPServerTime" )
        RetInfo["VerifyValue"   ] = GetInfoByTagFromXml( ReturnXML, "DSPSignature" )
		return ( RetInfo )
	}
}


function CheckDSPCertValid()
{
    
    var DSPCertContent = GetDSPCertContent()
    if ( !DSPCertContent["Success"] )
    {
		DisplayMessage( "" + PromptArray["DrvExp.js_4100_1"] + ": " + DSPCertContent["Info"] );
		Title.innerHTML = "<br><center>" + PromptArray["DrvExp.js_4101_1"] + "<br>(" + DSPCertContent["Info"] + ")</center>"
		return false
    }
    

    
    var DSPCertContext      = DrvCert.OpenCertInPFX( DSPCertContent["DSPCert"]  )

    var CertNotBeforeString = DrvCert.GetCertNotBefore(  DSPCertContext ) 
    var CertNotAfterString  = DrvCert.GetCertNotAfter(   DSPCertContext )

    var CertNotBefore  = Date.parse( CertNotBeforeString )
    var CertNotAfter   = Date.parse( CertNotAfterString )

    
    var SubCACertContext    = DrvCert.OpenCertInX509( EDRIVERS_ROOT_CA_CERT_CONTEXT_IN_X509_BASE64 )
    var DSPCertValidFlag    = DrvCert.CheckDSPCertIssuedBySubCACert( DSPCertContext , SubCACertContext )
    if ( !DSPCertValidFlag )
    {
		DisplayMessage("" + PromptArray["DrvExp.js_4120_1"] + ":" + DrvCert.ErrorString )
		Title.innerHTML = "<br><center>" + PromptArray["DrvExp.js_4121_1"] + "</center>"
        DrvCert.CloseUserCert( DSPCertContext )
        DrvCert.CloseUserCert( SubCACertContext )
		return false
    }
    
    
	if (!DrvCert.VerifyStringByBASE64Sign( DSPCertContext , DSPCertContent["VerifyData"] , DSPCertContent["VerifyValue"] ))
	{
		DisplayMessage("" + PromptArray["DrvExp.js_4130_1"] + "" )
		Title.innerHTML = "<br><center>" + PromptArray["DrvExp.js_4131_1"] + "</center>"
        DrvCert.CloseUserCert( DSPCertContext )
        DrvCert.CloseUserCert( SubCACertContext )
		return false
	}

    DrvCert.CloseUserCert( DSPCertContext )
    DrvCert.CloseUserCert( SubCACertContext )


    
    var d = new Date()
    var CurTime = d.getTime()
    if (!( ( CertNotBefore <= CurTime ) && ( CurTime <= CertNotAfter ) ) )
    {
		DisplayMessage("" + PromptArray["DrvExp.js_4146_1"] + "(" + PromptArray["DrvExp.js_4146_2"] + "" + CertNotBeforeString + "" + PromptArray["DrvExp.js_4146_3"] + "" + CertNotAfterString + ")" )
		Title.innerHTML = "<br><center>" + PromptArray["DrvExp.js_4147_1"] + "<br>" + PromptArray["DrvExp.js_4147_2"] + "," + PromptArray["DrvExp.js_4147_3"] + "</center>"
		return false
    }

    return true
}

function GetDeviceListInfoToXml()
{

	var DeviceListInfo = g_DeviceInfo
	var DeviceNumber   = g_DeviceRows
	var DeviceName , HardwareID , CompatibleID, MatchingDeviceId
	var DriverDate , DriverVer , DriverProvider


	var Xml = "<DeviceList>\n"
	var CurDeviceInfo = new Array()
	var i
	for (i=0;i<DeviceNumber ;i++ )
	{
		ReadArrayToDeviceInfo( CurDeviceInfo , DeviceListInfo , i )

		DeviceName = CurDeviceInfo[6]
		
		
		DeviceName = DeviceName.replace(/(\&)/gi ,"&amp;");
		DeviceName = DeviceName.replace(/(\<)/gi ,"&lt;");
		DeviceName = DeviceName.replace(/(\>)/gi ,"&gt;");

		HardwareID = CurDeviceInfo[8]
		
		
		HardwareID = HardwareID.replace(/(\&)/gi ,"&amp;");
		HardwareID = HardwareID.replace(/(\<)/gi ,"&lt;");
		HardwareID = HardwareID.replace(/(\>)/gi ,"&gt;");

		CompatibleID = CurDeviceInfo[9]
		
		
		CompatibleID = CompatibleID.replace(/(\&)/gi ,"&amp;");
		CompatibleID = CompatibleID.replace(/(\<)/gi ,"&lt;");
		CompatibleID = CompatibleID.replace(/(\>)/gi ,"&gt;");

		MatchingDeviceId = CurDeviceInfo[10]
		
		
		MatchingDeviceId = MatchingDeviceId.replace(/(\&)/gi ,"&amp;");
		MatchingDeviceId = MatchingDeviceId.replace(/(\<)/gi ,"&lt;");
		MatchingDeviceId = MatchingDeviceId.replace(/(\>)/gi ,"&gt;");
		
		DriverDate = CurDeviceInfo[11]
		
		
		DriverDate = DriverDate.replace(/(\&)/gi ,"&amp;");
		DriverDate = DriverDate.replace(/(\<)/gi ,"&lt;");
		DriverDate = DriverDate.replace(/(\>)/gi ,"&gt;");

		DriverVer = CurDeviceInfo[12]
		
		
		DriverVer = DriverVer.replace(/(\&)/gi ,"&amp;");
		DriverVer = DriverVer.replace(/(\<)/gi ,"&lt;");
		DriverVer = DriverVer.replace(/(\>)/gi ,"&gt;");

		DriverProvider = CurDeviceInfo[13]
		
		
		DriverProvider = DriverProvider.replace(/(\&)/gi ,"&amp;");
		DriverProvider = DriverProvider.replace(/(\<)/gi ,"&lt;");
		DriverProvider = DriverProvider.replace(/(\>)/gi ,"&gt;");

		Xml += "\t<DeviceItem>\n"
		Xml += "\t\t<DeviceName>"			+ DeviceName		+ "</DeviceName>\n"
		Xml += "\t\t<DeviceIndex>"			+ CurDeviceInfo[1]	+ "</DeviceIndex>\n"
		Xml += "\t\t<DeviceClassID>"		+ CurDeviceInfo[2]	+ "</DeviceClassID>\n"
		Xml += "\t\t<DeviceClassType>"		+ CurDeviceInfo[3]	+ "</DeviceClassType>\n"
		Xml += "\t\t<DeviceStatus>"			+ CurDeviceInfo[4]	+ "</DeviceStatus>\n"
		Xml += "\t\t<DeviceProblem>"		+ CurDeviceInfo[5]	+ "</DeviceProblem>\n"
		Xml += "\t\t<HardwareID>"			+ HardwareID		+ "</HardwareID>\n"
		Xml += "\t\t<CompatibleID>"			+ CompatibleID		+ "</CompatibleID>\n"
		Xml += "\t\t<MatchingDeviceId>"		+ MatchingDeviceId	+ "</MatchingDeviceId>\n"
		Xml += "\t\t<DriverBackupStatus>"	+ CurDeviceInfo[7]	+ "</DriverBackupStatus>\n"
		Xml += "\t\t<DeviceRow>"			+ CurDeviceInfo[0]	+ "</DeviceRow>\n"
		Xml += "\t\t<DriverDate>"			+ DriverDate		+ "</DriverDate>\n"
		Xml += "\t\t<DriverVer>"			+ DriverVer			+ "</DriverVer>\n"
		Xml += "\t\t<DriverProvider>"		+ DriverProvider	+ "</DriverProvider>\n"
		Xml += "\t</DeviceItem>\n"
	}
	Xml += "</DeviceList>"
return (Xml)
}

function GetAllDeviceInfoToXml()
{

	var DeviceListInfo = g_DeviceInfo
	var DeviceNumber   = g_DeviceRows
	var DeviceName , HardwareID , CompatibleID, MatchingDeviceId
	var DriverDate , DriverVer , DriverProvider


	var Xml = "<DeviceList>\n"
	var CurDeviceInfo = new Array()
	var i
	for (i=0;i<DeviceNumber ;i++ )
	{
		ReadArrayToDeviceInfo( CurDeviceInfo , DeviceListInfo , i )

		DeviceName = CurDeviceInfo[6]
		
		
		DeviceName = DeviceName.replace(/(\&)/gi ,"&amp;");
		DeviceName = DeviceName.replace(/(\<)/gi ,"&lt;");
		DeviceName = DeviceName.replace(/(\>)/gi ,"&gt;");

		HardwareID = CurDeviceInfo[8]
		
		
		HardwareID = HardwareID.replace(/(\&)/gi ,"&amp;");
		HardwareID = HardwareID.replace(/(\<)/gi ,"&lt;");
		HardwareID = HardwareID.replace(/(\>)/gi ,"&gt;");

		CompatibleID = CurDeviceInfo[9]
		
		
		CompatibleID = CompatibleID.replace(/(\&)/gi ,"&amp;");
		CompatibleID = CompatibleID.replace(/(\<)/gi ,"&lt;");
		CompatibleID = CompatibleID.replace(/(\>)/gi ,"&gt;");

		MatchingDeviceId = CurDeviceInfo[10]
		
		
		MatchingDeviceId = MatchingDeviceId.replace(/(\&)/gi ,"&amp;");
		MatchingDeviceId = MatchingDeviceId.replace(/(\<)/gi ,"&lt;");
		MatchingDeviceId = MatchingDeviceId.replace(/(\>)/gi ,"&gt;");
		
		DriverDate = CurDeviceInfo[11]
		
		
		DriverDate = DriverDate.replace(/(\&)/gi ,"&amp;");
		DriverDate = DriverDate.replace(/(\<)/gi ,"&lt;");
		DriverDate = DriverDate.replace(/(\>)/gi ,"&gt;");

		DriverVer = CurDeviceInfo[12]
		
		
		DriverVer = DriverVer.replace(/(\&)/gi ,"&amp;");
		DriverVer = DriverVer.replace(/(\<)/gi ,"&lt;");
		DriverVer = DriverVer.replace(/(\>)/gi ,"&gt;");

		DriverProvider = CurDeviceInfo[13]
		
		
		DriverProvider = DriverProvider.replace(/(\&)/gi ,"&amp;");
		DriverProvider = DriverProvider.replace(/(\<)/gi ,"&lt;");
		DriverProvider = DriverProvider.replace(/(\>)/gi ,"&gt;");

		Xml += "\t<DeviceItem>\n"
		Xml += "\t\t<DeviceName>"			+ DeviceName		+ "</DeviceName>\n"
		Xml += "\t\t<DeviceIndex>"			+ CurDeviceInfo[1]	+ "</DeviceIndex>\n"
		Xml += "\t\t<DeviceClassID>"		+ CurDeviceInfo[2]	+ "</DeviceClassID>\n"
		Xml += "\t\t<DeviceClassType>"		+ CurDeviceInfo[3]	+ "</DeviceClassType>\n"
		Xml += "\t\t<DeviceStatus>"			+ CurDeviceInfo[4]	+ "</DeviceStatus>\n"
		Xml += "\t\t<DeviceProblem>"		+ CurDeviceInfo[5]	+ "</DeviceProblem>\n"
		Xml += "\t\t<HardwareID>"			+ HardwareID		+ "</HardwareID>\n"
		Xml += "\t\t<CompatibleID>"			+ CompatibleID		+ "</CompatibleID>\n"
		Xml += "\t\t<MatchingDeviceId>"		+ MatchingDeviceId	+ "</MatchingDeviceId>\n"
		Xml += "\t\t<DriverBackupStatus>"	+ CurDeviceInfo[7]	+ "</DriverBackupStatus>\n"
		Xml += "\t\t<DeviceRow>"			+ CurDeviceInfo[0]	+ "</DeviceRow>\n"
		Xml += "\t\t<DriverDate>"			+ DriverDate		+ "</DriverDate>\n"
		Xml += "\t\t<DriverVer>"			+ DriverVer			+ "</DriverVer>\n"
		Xml += "\t\t<DriverProvider>"		+ DriverProvider	+ "</DriverProvider>\n"
        
        if ( !CurDeviceInfo[5] && ( CurDeviceInfo[7] & 0x00080000 ) )
        {
            var SysPath = DrvCert.GetFolderPath( 36 )	
            var InfPathFileName = SysPath + "\\inf\\" + CurDeviceInfo[14]
            var InfContentInBASE64 = DrvCert.GetBASE64StringFromBinFile( InfPathFileName )
            var InfHash = DrvCert.GetDataHash( InfContentInBASE64 )
            Xml += "\t\t<InfHash>"          + InfHash                       + "</InfHash>\n"
        }
		Xml += "\t</DeviceItem>\n"
	}
	Xml += "</DeviceList>"
return (Xml)
}
function GetClientInfo()
{
    var ClientVersion   =""
    var OEMVendor       =""
    var Provider        =""
    var Language        =""
    
    
    
    var AccessMode      = g_DefaultLoader

    var hKey = DrvCert.RegOpenKey( 2 , "SOFTWARE\\Walker\\DrvInst")
    if (hKey)
    {
        ClientVersion = DrvCert.RegQueryValue( hKey , "Version" )
        DrvCert.RegCloseKey( hKey)
        hKey = null
    }

    hKey = DrvCert.RegOpenKey( 2 , "SOFTWARE\\Walker\\DrvInst\\Setup")
    if (hKey) 
    {
        Language  = CLIENT_LANGUAGE 
        OEMVendor = DrvCert.RegQueryValue( hKey , "OEMVendor" )
        Provider  = DrvCert.RegQueryValue( hKey , "Provider" )
        
  
        if ( !OEMVendor) OEMVendor  = ""
        if ( !Provider)  Provider   = ""

        DrvCert.RegCloseKey( hKey )
        hKey = null
    }

    var OSPlatform = GetInfoByTagFromXml( GetOSInfo() , "OSPlatform" )
    var RetInfo = ""
    
    RetInfo += "<ClientInfo>\n"
             + "  <Version>"      + XmlEncoding( ClientVersion )  + "</Version>\n"
             + "  <Vendor>"       + XmlEncoding( OEMVendor )      + "</Vendor>\n"
             + "  <Provider>"     + XmlEncoding( Provider )       + "</Provider>\n"
             + "  <Language>"     + XmlEncoding( Language )       + "</Language>\n"
             + "  <AccessMode>"   + XmlEncoding( AccessMode )     + "</AccessMode>\n"
             
             + "  <OSPlatform>"   + XmlEncoding( OSPlatform )     + "</OSPlatform>\n"
             + "</ClientInfo>\n"
   return ( RetInfo )
}

function RegUserDeviceInfoList( UserID )
{















































	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	var SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:RegUserDeviceInfo xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    
    
    
    
    SoapRequestXML += GetDeviceListInfoToXml()
    SoapRequestXML += "         <UserID>" + UserID + "</UserID>\n"
	SoapRequestXML += "     </n:RegUserDeviceInfo>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

    
    
    
    
    

	if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4467_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_4467_2"] + "\n" + PromptArray["DrvExp.js_4467_3"] + ":\n" + SoapRequestXML )
        RetInfo["Success"       ] = false
        RetInfo["ErrorInfo"     ] = "" + PromptArray["DrvExp.js_4469_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_4469_2"] + ""
		return ( RetInfo )
	}

    var RetInfo = new Array()

    var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if ( ErrorInfo ) 
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4478_1"] + ":\n" + ErrorInfo )
        RetInfo["Success"       ] = false
        RetInfo["ErrorInfo"     ] = ErrorInfo
		return ( RetInfo )
	}
	else
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4485_1"] + "" )
        var ResultString = GetInfoByTagFromXml( ReturnXML, "Result" )
        RetInfo["Success"       ] = ( ResultString == "Success" ) ? true : false
        RetInfo["ErrorInfo"     ] = ""
		return ( RetInfo )
	}
}
function RegUserDeviceInfo( UserID , DeviceInfo )
{
	
	
	
	
	
	
	
	
	
	
	
	
	


	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:RegUserDeviceInfo xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    
    
    
    
    SoapRequestXML += GetDeviceInfoToXml( DeviceInfo )
    SoapRequestXML += "         <UserID>" + UserID + "</UserID>\n"
	SoapRequestXML += "     </n:RegUserDeviceInfo>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4539_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_4539_2"] + "\n" + PromptArray["DrvExp.js_4539_3"] + ":\n" + SoapRequestXML )
        RetInfo["Success"       ] = false
        RetInfo["ErrorInfo"     ] = "" + PromptArray["DrvExp.js_4541_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_4541_2"] + ""
		return ( RetInfo )
	}

    var RetInfo = new Array()

    var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if ( ErrorInfo ) 
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4550_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_4550_2"] + ":\n" + ErrorInfo )
        RetInfo["Success"       ] = false
        RetInfo["ErrorInfo"     ] = ErrorInfo
		return ( RetInfo )
	}
	else
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4557_1"] + "[" + DeviceInfo[6] + "]" + PromptArray["DrvExp.js_4557_2"] + "" )
        var ResultString = GetInfoByTagFromXml( ReturnXML, "Result" )
        RetInfo["Success"       ] = ( ResultString == "Success" ) ? true : false
        RetInfo["ErrorInfo"     ] = ""
		return ( RetInfo )
	}

}
function GetDeviceInfoToXml( DeviceInfo )
{
	var Xml = "<DeviceList>"
	{
		DeviceName = DeviceInfo[6]
		
		
		DeviceName = DeviceName.replace(/(\&)/gi ,"&amp;");
		DeviceName = DeviceName.replace(/(\<)/gi ,"&lt;");
		DeviceName = DeviceName.replace(/(\>)/gi ,"&gt;");

		HardwareID = DeviceInfo[8]
		
		
		HardwareID = HardwareID.replace(/(\&)/gi ,"&amp;");
		HardwareID = HardwareID.replace(/(\<)/gi ,"&lt;");
		HardwareID = HardwareID.replace(/(\>)/gi ,"&gt;");

		CompatibleID = DeviceInfo[9]
		
		
		CompatibleID = CompatibleID.replace(/(\&)/gi ,"&amp;");
		CompatibleID = CompatibleID.replace(/(\<)/gi ,"&lt;");
		CompatibleID = CompatibleID.replace(/(\>)/gi ,"&gt;");

		MatchingDeviceId = DeviceInfo[10]
		
		
		MatchingDeviceId = MatchingDeviceId.replace(/(\&)/gi ,"&amp;");
		MatchingDeviceId = MatchingDeviceId.replace(/(\<)/gi ,"&lt;");
		MatchingDeviceId = MatchingDeviceId.replace(/(\>)/gi ,"&gt;");
		
		DriverDate = DeviceInfo[11]
		
		
		DriverDate = DriverDate.replace(/(\&)/gi ,"&amp;");
		DriverDate = DriverDate.replace(/(\<)/gi ,"&lt;");
		DriverDate = DriverDate.replace(/(\>)/gi ,"&gt;");

		DriverVer = DeviceInfo[12]
		
		
		DriverVer = DriverVer.replace(/(\&)/gi ,"&amp;");
		DriverVer = DriverVer.replace(/(\<)/gi ,"&lt;");
		DriverVer = DriverVer.replace(/(\>)/gi ,"&gt;");

		DriverProvider = DeviceInfo[13]
		
		
		DriverProvider = DriverProvider.replace(/(\&)/gi ,"&amp;");
		DriverProvider = DriverProvider.replace(/(\<)/gi ,"&lt;");
		DriverProvider = DriverProvider.replace(/(\>)/gi ,"&gt;");

		Xml += "\t<DeviceItem>\n"
		Xml += "\t\t<DeviceName>"			+ DeviceName		+ "</DeviceName>\n"
		Xml += "\t\t<DeviceIndex>"			+ DeviceInfo[1]	+ "</DeviceIndex>\n"
		Xml += "\t\t<DeviceClassID>"		+ DeviceInfo[2]	+ "</DeviceClassID>\n"
		Xml += "\t\t<DeviceClassType>"		+ DeviceInfo[3]	+ "</DeviceClassType>\n"
		Xml += "\t\t<DeviceStatus>"			+ DeviceInfo[4]	+ "</DeviceStatus>\n"
		Xml += "\t\t<DeviceProblem>"		+ DeviceInfo[5]	+ "</DeviceProblem>\n"
		Xml += "\t\t<HardwareID>"			+ HardwareID		+ "</HardwareID>\n"
		Xml += "\t\t<CompatibleID>"			+ CompatibleID		+ "</CompatibleID>\n"
		Xml += "\t\t<MatchingDeviceId>"		+ MatchingDeviceId	+ "</MatchingDeviceId>\n"
		Xml += "\t\t<DriverBackupStatus>"	+ DeviceInfo[7]	+ "</DriverBackupStatus>\n"
		Xml += "\t\t<DeviceRow>"			+ DeviceInfo[0]	+ "</DeviceRow>\n"
		Xml += "\t\t<DriverDate>"			+ DriverDate		+ "</DriverDate>\n"
		Xml += "\t\t<DriverVer>"			+ DriverVer			+ "</DriverVer>\n"
		Xml += "\t\t<DriverProvider>"		+ DriverProvider	+ "</DriverProvider>\n"
		Xml += "\t</DeviceItem>\n"
	}
	Xml += "</DeviceList>"
return (Xml)
}

function RegUserExportDriverItemEx( UserID , BackupDriverInfo )
{
    
	
	
	
	
	
	
	
    
    
    
    
    
    

    
    var RetInfo = new Array()
    var ErrorInfo = ""

    
    var DriverHashValueInBASE64 = ""
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    {
        var InfFileNameXml = DrvCert.FindFileInPath( BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"] )
        var InfFileName = GetXmlSingleNodeText( InfFileNameXml , "FileItem0" )
        if ( InfFileName )
        {
            
            var InfBASE64 = DrvCert.GetBASE64StringFromBinFile( BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"] )

            DriverHashValueInBASE64 = DrvCert.GetDataHash( InfBASE64 )
        }
        
        else
        {
            ErrorInfo          =  "" + PromptArray["DrvExp.js_4696_1"] + "[" + BackupDriverInfo["DeviceDesc"] + "]" + PromptArray["DrvExp.js_4696_2"] + ":\n" 
                               + "" + PromptArray["DrvExp.js_4697_1"] + "INF" + PromptArray["DrvExp.js_4697_2"] + " - " +BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"]
            DisplayMessage( ErrorInfo )
            RetInfo["Success"       ] = false
            RetInfo["DriverID"      ] = ""
            RetInfo["DriverUploaded"] = "Unknown"
            RetInfo["ErrorInfo"     ] = ErrorInfo
            return ( RetInfo )
        }
    }
    
    
    var InfHash = DrvCert.GetFileDataHash( BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"] ).replace( / /gi , "" )
    var CatFileInfo 
    if ( BackupDriverInfo["CATName"] ) 
    {
        CatFileInfo = GetCatInfo( BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["CATName"] )
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

        
        if ( CatFileInfo[ InfHash ] != undefined )
        {
            
            
            
            
            
            
            
            BackupDriverInfo["OrgINFName"] = CatFileInfo[ CatFileInfo[ InfHash ] + ",File" ]
            
            BackupDriverInfo["CatValidFlag"] = 1
        }
        else
        {
            BackupDriverInfo["OrgINFName"] = ""
            
            BackupDriverInfo["CatValidFlag"] = 0
        }
        
    }
    else
    {
        BackupDriverInfo["OrgINFName"] = ""
        
        BackupDriverInfo["CatValidFlag"] = 0
    }

	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:RegUserExportDriverItemEx xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UserID>"               + UserID                                                + "</UserID>\n"
    SoapRequestXML += "         <RegPath>"              + XmlEncoding( BackupDriverInfo["RegPath"] )            + "</RegPath>\n"
    SoapRequestXML += "         <DeviceDesc>"           + XmlEncoding( BackupDriverInfo["DeviceDesc"] )         + "</DeviceDesc>\n"
    SoapRequestXML += "         <BackupDriverStatus>"   + XmlEncoding( BackupDriverInfo["BackupDriverStatus"] ) + "</BackupDriverStatus>\n"
    SoapRequestXML += "         <MatchingDeviceID>"     + XmlEncoding( BackupDriverInfo["MatchingDeviceID"] )   + "</MatchingDeviceID>\n"
    SoapRequestXML += "         <HardwareIDCompaIDs>"   + XmlEncoding( BackupDriverInfo["HardwareIDCompaIDs"] ) + "</HardwareIDCompaIDs>\n"
    SoapRequestXML += "         <BackupDriverDate>"     + XmlEncoding( BackupDriverInfo["BackupDriverDate"] )   + "</BackupDriverDate>\n"
    SoapRequestXML += "         <BackupDriverVer>"      + XmlEncoding( BackupDriverInfo["BackupDriverVer"] )    + "</BackupDriverVer>\n"
    
    SoapRequestXML += "         <INFName>"              + XmlEncoding( BackupDriverInfo["INFName"] )            + "</INFName>\n"
    SoapRequestXML += "         <CATName>"              + XmlEncoding( BackupDriverInfo["CATName"] )            + "</CATName>\n"
    
    SoapRequestXML += "         <OrgINFName>"           + XmlEncoding( BackupDriverInfo["OrgINFName"] )         + "</OrgINFName>\n"
    SoapRequestXML += "         <CatValidFlag>"         + BackupDriverInfo["CatValidFlag"]                      + "</CatValidFlag>\n"
    
    SoapRequestXML += "         <INFSectionName>"       + XmlEncoding( BackupDriverInfo["INFSectionName"] )     + "</INFSectionName>\n"
    SoapRequestXML += "         <ClassName>"            + XmlEncoding( BackupDriverInfo["ClassName"] )          + "</ClassName>\n"
    SoapRequestXML += "         <Provider>"             + XmlEncoding( BackupDriverInfo["Provider"] )           + "</Provider>\n"
    SoapRequestXML += "         <DriverHash>"           + DriverHashValueInBASE64                               + "</DriverHash>\n"
	SoapRequestXML += GetOSInfo() + "\n"
	SoapRequestXML += "     </n:RegUserExportDriverItemEx>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
		alert( "" + PromptArray["DrvExp.js_4803_1"] + "[" + BackupDriverInfo["DeviceDesc"] + "]" + PromptArray["DrvExp.js_4803_2"] + "" )
        DisplayMessage( "" + PromptArray["DrvExp.js_4804_1"] + "[" + BackupDriverInfo["DeviceDesc"] + "]" + PromptArray["DrvExp.js_4804_2"] + "\n" + PromptArray["DrvExp.js_4804_3"] + ":\n" + SoapRequestXML )
		return ""
	}
    
    

    
    
    ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )

	if (ErrorInfo != null) 
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_4816_1"] + "[" + BackupDriverInfo["DeviceDesc"] + "]" + PromptArray["DrvExp.js_4816_2"] + ":\n" + ErrorInfo )
        RetInfo["Success"       ] = false
        RetInfo["DriverID"      ] = ""
        RetInfo["DriverUploaded"] = "Unknown"
        RetInfo["ErrorInfo"     ] = ErrorInfo
		return ( RetInfo )
	}
	else
	{
		var DriverID              = GetInfoByTagFromXml( ReturnXML, "DriverID" )
        var DriverUploaded        = GetInfoByTagFromXml( ReturnXML, "IsDriverUploaded" )
        RetInfo["Success"       ] = true
        RetInfo["DriverID"      ] = DriverID
        RetInfo["DriverUploaded"] = DriverUploaded
        RetInfo["ErrorInfo"     ] = ""
		return ( RetInfo )
	}
}

function ExportDriverItemToServerEx( UserID , DriverID , BackupDriverInfo )
{
    
	
	
	
	
	
	
	
    
    
    
    
    
    
    
    
    
    

    
    var CookieFlag = GetCookie( "DrvTransforMode" )
	if ( ( CookieFlag == "true") || !CookieFlag ) 
    {
        var RetInfo = UploadDriverByCGIEx( UserID , DriverID , BackupDriverInfo )
        return ( RetInfo )
    }
    else
    {
        var RetInfo = UploadDriverBySOAP( UserID , DriverID , BackupDriverInfo )
        return ( RetInfo )
    }
}
function UploadDriverByCGIEx( UserID , DriverID , BackupDriverInfo )
{
    
    
        	var MainBoardInfoXml	    = GetMainBoardInfo()
    
    
    
    
    
    
    
    
    
    
    
    
    
            var ComputerMfg             = GetInfoByTagFromXml( MainBoardInfoXml, "ComputerManufacturer" )
            var ComputerModel           = GetInfoByTagFromXml( MainBoardInfoXml, "ComputerModel" )
            var BaseBoardMfg            = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardManufacturer" )
            var BaseBoardProduct        = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardProduct" )
            var BaseBoardVersion        = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardVersion" )
            var BaseBoardSerialNumber   = GetInfoByTagFromXml( MainBoardInfoXml, "BaseBoardSerialNumber" )
            var EncryptKey = DrvCert.GetDataHash( "e-Software.cn"   + 
                                                  ComputerMfg       + 
                                                  ComputerModel     + 
                                                  BaseBoardMfg      + 
                                                  BaseBoardProduct  +
                                                  BaseBoardVersion  + 
                                                  BaseBoardSerialNumber )
    
    
            var INFFileName   = BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"]
            
            
            
            
            
            
            
            
            
            var INFEncFileName=     ( BackupDriverInfo["OrgINFName"] ) 
                                  ? BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["OrgINFName"].replace( /.inf$/gi,".Enc.Inf")
                                  : BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"].replace( /.inf$/gi,".Enc.Inf")
            
            
            
            DrvCert.CopyFile( INFFileName , INFEncFileName )

            FinishedPercent = 40
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_4923_1"] + '...'
            DrvCert.UIRefresh()
            
            DisplayMessage( "40%" )
    
    
            var CabFileName = BackupDriverInfo["DriverBackupPath"] + "\\" + BackupDriverInfo["INFName"].replace( /.inf$/gi,".UserDrv.Cab")
    
            DrvCert.DeleteFile( CabFileName )

    
            var PackDrvList = GetAllFileInfoInDir( BackupDriverInfo["DriverBackupPath"] , ""  )

            var CreateCabFlag = true
            CreateCabFlag |= DrvCert.CreateCab( CabFileName )
            for ( var i=0; i<PackDrvList["Rows"] ; i++ )
            {
                var RelativePathFileName = PackDrvList[i].substr( BackupDriverInfo["DriverBackupPath"].length + 1 ) 
                
                
                if ( PackDrvList[i].toUpperCase() != INFFileName.toUpperCase() )
                {
                    CreateCabFlag |= DrvCert.AddFileToCab( PackDrvList[i] , RelativePathFileName )
                }
            }
            CreateCabFlag |= DrvCert.FinishCab()
            DrvCert.DeleteFile( INFEncFileName )

            var RetInfo = new Array()
            RetInfo["Success"] = false
            RetInfo["Info"]    = ""

            FinishedPercent = 50
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_4956_1"] + '...'
            DrvCert.UIRefresh()
            
            DisplayMessage( "50%" )
            var CabFileSize = DrvCert.GetFileSize( CabFileName )
    
            var StartResult = UploadCabFileContentToServerStart(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize)
            if ( StartResult)
            {
                
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_4968_1"] + ":" + StartResult
                return ( RetInfo )
            }

        
        var URL = ServerName.value + SoapAspURL.value + "?Mode=UploadDrv"
                                                      + "&User="        + UserID 
                                                      + "&DriverID="    + DriverID
                                                      + "&DriverName="  + CabFileName

        var hHttpFile       = DrvCert.HttpOpenRequestToHandle( URL )
        if ( !hHttpFile ) 
        {
            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_4981_1"] + "HttpOpenRequestToHandle(" +  URL + ")" + PromptArray["DrvExp.js_4981_2"] + ""
            return ( RetInfo )
        }
        
        
        
        
        
        var CabFileSizeInVariant = DrvCert.GetFileSizeToVariant( CabFileName )
        
        
        if ( !DrvCert.HttpWriteFile( hHttpFile , CabFileSizeInVariant , 1 ) )
        {
            
            DrvCert.HttpCloseRequest( hHttpFile )
            

            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_4998_1"] + "HttpWriteFile(" +  hHttpFile + ")" + PromptArray["DrvExp.js_4998_2"] + "" + DrvCert.ErrorString
            return ( RetInfo )
        }

    
    try
    {
    

        var CabFileHandle = DrvCert.OpenFileForRead( CabFileName )
        var ReadFileSize  = CGI_UPLOAD_CAB_FILE_BUFFER_SIZE   
        var ReadedSize    = 0
        var FileBinData

        
        
        
        
        g_SkipExpCurDrvFlag = 0
        
        

        for ( ReadedSize = 0 ;  ReadedSize < CabFileSize ; ReadedSize += ReadFileSize )
        {
            FinishedPercent = 50 + Math.floor( 40*( ReadedSize / CabFileSize ) )
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '<div >' + PromptArray["DrvExp.js_5025_1"] + '...'
                                     + Math.floor( ReadedSize/1024 ) + 'k/' + Math.floor( CabFileSize/1024 ) + 'k'
                                     + '&nbsp;&nbsp;<a href="?" onclick="g_SkipExpCurDrvFlag=1;return false;">' + PromptArray["DrvExp.js_5027_1"] + '</a>'
                                     + '</div>'
            DrvCert.UIRefresh()
            
            DisplayMessage( FinishedPercent + "%" )

            
            
            
            
            
            
            
            
            
            if ( g_SkipExpCurDrvFlag )
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5043_1"] + ""
                return ( RetInfo )
            }
            
            

            
            
            
            
            
            

            FileBinData = DrvCert.ReadFileInBinary( CabFileHandle , ReadFileSize )
            
            if ( !DrvCert.HttpWriteFile( hHttpFile , FileBinData , 2 ) )
            {
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5060_1"] + "HttpWriteFile(" +  hHttpFile + ")" + PromptArray["DrvExp.js_5060_2"] + "" + DrvCert.ErrorString
                return ( RetInfo )
            }
            FileBinData = null

            CurFilePointer = ( ReadedSize > CabFileSize ) ? CabFileSize : ReadedSize
        }
        
        if ( !DrvCert.HttpWriteFile( hHttpFile , null , 3 ) )
        {
            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5070_1"] + "HttpWriteFile(" +  hHttpFile + ")" + PromptArray["DrvExp.js_5070_2"] + "" + DrvCert.ErrorString
            return ( RetInfo )
        }

        var TotalSize       = DrvCert.HttpQueryFileLength( hHttpFile )
        if ( !TotalSize )
        {
            RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5077_1"] + "HttpQueryFileLength(" +  hHttpFile + ")" + PromptArray["DrvExp.js_5077_2"] + "" + DrvCert.ErrorString
            return ( RetInfo )
        }

        FinishedPercent = 92
        PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
        PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
        ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_5084_1"] + '...'
        DrvCert.UIRefresh()
        
        DisplayMessage( "92%" )

        
        {
            var ReadSize        = CGI_DOWNLOAD_CAB_FILE_BUFFER_SIZE
            var FileBinContent  = true
            var HttpResponseFile= CabFileName + ".log"
            DrvCert.DeleteFile( HttpResponseFile )
            var ResponseFileHandle = DrvCert.OpenFileForWrite( HttpResponseFile )
            for (var ReadedSize = 0 ; ReadedSize < TotalSize ;  ReadedSize += ReadSize )
            {

                FileBinContent  = DrvCert.HttpReadFile( hHttpFile , ReadSize )
                DrvCert.AppendBinDataToFile( ResponseFileHandle , FileBinContent )
                FileBinContent = null
            }
            DrvCert.CloseFileForRead( ResponseFileHandle )
            
            var HttpResponseFileContent = DrvCert.GetStringFromFile( HttpResponseFile )
            
            DrvCert.DeleteFile( HttpResponseFile )
            if ( HttpResponseFileContent != "OK" )
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5109_1"] + ":" + HttpResponseFileContent
                return ( RetInfo )
            }
        }

    
    
    
    
    
    }
    finally
    {
        DrvCert.HttpCloseRequest( hHttpFile )
        DrvCert.CloseFileForRead( CabFileHandle )
    }
    
    




            FinishedPercent = 95
            PercentSubImg.width=PercentSubTbl.width*FinishedPercent/100
            PercentSubString.innerHTML='<center>' + FinishedPercent + '%</center>'
            ProcessingInfo.innerHTML = '' + PromptArray["DrvExp.js_5134_1"] + '...'
            DrvCert.UIRefresh()
            
            DisplayMessage( "95%" )
    
            var FinishResult = UploadCabFileContentToServerFinish(   
                                            UserID , 
                                            DriverID , 
                                            CabFileName ,
                                            CabFileSize )
            if ( FinishResult)
            {
                RetInfo["Success"] = false
                RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5145_1"] + ":" + FinishResult
                return ( RetInfo )
            }
    
            DrvCert.DeleteFile( CabFileName )


    RetInfo["Success"] = true
    RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5153_1"] + ""
    return ( RetInfo )
}

function ListDriverProtected()
{
	
	
    
    if ( g_UserExportedDriverRows )
	{
		var stock = new Array()

		oRow  = document.createElement("TR");
		oCell = document.createElement("TD");
		oCell.colSpan= g_maxcols
		oCell.align = "center"
        
		
        oCell.innerHTML = "<br>" + PromptArray["DrvExp.js_5172_1"] + "<br>" + PromptArray["DrvExp.js_5172_2"] + "<br><br>"
        
		oRow.appendChild(oCell);
		g_oTBody0.appendChild(oRow);

		for (var i=0; i<g_UserDrvDeviceRows ; i++)
		{
			ReadArrayToDeviceInfo(stock , g_UserDrvDeviceInfoArray , i)
			
			if ( g_UserDrvDeviceInfoArray[i+",20"] )
			{
				oRow = document.createElement("TR");
				g_oTBody0.appendChild(oRow);

				oCell = document.createElement("TD");
				oCell.align="right"
                
                
                oCell.innerHTML = ' '
                
                oRow.appendChild(oCell)

				TranslateDeviceInfoToArray(stock,g_UserDrvDeviceInfoArray, i ,i );

				for (j=g_mincols; j<g_maxcols; j++)
				{
					oCell = document.createElement("TD");
					(j==2)	? oCell.innerHTML = stock[7]
							: (j==6) ? oCell.innerHTML = stock[2]
									 : (j==7) ? oCell.innerHTML = stock[6]
											  : oCell.innerHTML = stock[j];
					
					oCell.vAlign	="top"; 
					(j==7) ? oCell.align = "left": oCell.align = "center";
					oRow.appendChild(oCell);
				}
			}
		}
        for (var i=0; i<g_DevErrDeviceRows ; i++)
        {
            ReadArrayToDeviceInfo( stock , g_DevErrDeviceInfoArray , i);
			
			if ( g_DevErrDeviceInfoArray[i+",20"] )
			{
				oRow = document.createElement("TR");
				g_oTBody0.appendChild(oRow);
				oCell = document.createElement("TD");
				oCell.align="right"
                oCell.innerHTML = ' '
                
                oRow.appendChild(oCell)

				TranslateDeviceInfoToArray(stock,g_DevErrDeviceInfoArray, i ,i );

				
                for (j=g_mincols; j<g_maxcols; j++)
				{
					oCell = document.createElement("TD");
                    (j==2)	? oCell.innerHTML = stock[7]
                        : (j==6) ? oCell.innerHTML = stock[2]
                            : (j==7) ? oCell.innerHTML = stock[6]
                                     : oCell.innerHTML = stock[j];
					
					oCell.vAlign	="top"; 
					(j==7) ? oCell.align = "left": oCell.align = "center";
					oRow.appendChild(oCell);
				}
			}
		}
	}
}

function GetDownloadDrive()
{
    
    
    
    var MaxSpaceLeftDrive = "C:" 
    var MaxSpaceLeft = 0
    var CurDriveFreeSpaceXml
    var CurDrive = ""
    var CurDriveFreeSpace = 0
    
    var LogicalDriveInfoXml = DrvCert.GetLogicalDriveInfo()
    var DriveName = ""
    var DriveType = ""
    var CurDrive  = ""
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
    xmlDoc.async = false
    xmlDoc.loadXML( LogicalDriveInfoXml )
    var objRowDataNode = xmlDoc.selectSingleNode("\/\/DriveInfo")
    if ( objRowDataNode )
    {
        var oNodeList = objRowDataNode.childNodes;
        for (var i=0;i<oNodeList.length ; i++)
        {
            DriveName = GetXmlSingleNodeText( oNodeList(i).xml , "DriveName" )
            DriveType = GetXmlSingleNodeText( oNodeList(i).xml , "DriveType" )
            if ( DriveType == "Fixed" )
            {
                CurDrive = DriveName.substring( 0 , 1 )
                
                
                
                
                if ( CurDrive == "C" || CurDrive == "c" ) continue
                CurDriveFreeSpaceXml = DrvCert.GetDiskFreeSpaceXml( CurDrive + ":" )
                CurDriveFreeSpace    = parseInt( GetXmlSingleNodeText( CurDriveFreeSpaceXml , "FreeBytes" ) )
                
                if ( CurDriveFreeSpace > MaxSpaceLeft )
                {
                    MaxSpaceLeft        = CurDriveFreeSpace
                    MaxSpaceLeftDrive   = CurDrive + ":"
                }
            }
        }
        xmlDoc = null
    }
return ( MaxSpaceLeftDrive )
}

function SubmitUserDownloadDriverPath( UserID , DownloadPath )
{
    var RetInfo = new Array()
    var SoapApplyURL = ServerName.value + SoapAspURL.value		

	var SoapRequestXML = ""
    
	
	SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:SetUserDownloadDriverPath xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "         <UserID>"           + UserID                        + "</UserID>\n"
    SoapRequestXML += "         <DownloadPath>"     + XmlEncoding( DownloadPath )   + "</DownloadPath>\n"
    SoapRequestXML += "     </n:SetUserDownloadDriverPath>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"

	
    
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )

	if (ReturnXML == null || ReturnXML == "")
	{
        DisplayMessage( "" + PromptArray["DrvExp.js_5322_1"] + "," + PromptArray["DrvExp.js_5322_2"] + ":\n" + SoapRequestXML )
        RetInfo["Success"] = false
        RetInfo["Info"]    = "" + PromptArray["DrvExp.js_5324_1"] + ""
		return ( RetInfo )
	}

	var ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )
	if (ErrorInfo != null) 
	{
        RetInfo["Success"] = false
        RetInfo["Info"]    = ErrorInfo
		return ( RetInfo )
	}
	else
	{
        var Result = GetInfoByTagFromXml( ReturnXML, "Result" )
        RetInfo["Success"       ] = ( Result == "Success" ) ? true : false
        RetInfo["Info"          ] = ""
		return ( RetInfo )
	}
}


function MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )
{
    var RespXml = ""
    var xmlhttp=false;
    
    
    
    
     try 
     {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     } 
     catch (e) 
     {
        try 
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (E) 
        {
            xmlhttp = false;
        }
     }
    
    
    
    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    
    
    if ( !xmlhttp ) 
    {
        
        
        DisplayMessage( "XMLHttpRequest open failed" ) 

        return ( null )
    }

    
    var Flag = GetCookie( "SoapRequestLogFlag" )

    try
    {
        

        
        
        
        

        

        xmlhttp.Open( "POST", "http:\/\/" + SoapApplyURL , false )
        
        
        xmlhttp.setRequestHeader("Content-Type", "text/xml-SOAP" )
        
        
        
        
        
        
        
        

        
        if ( Flag == "true" )
        {
            DrvInst.AppendStringToFileEnd( g_DrvInstLogFilePath , "\r\n" + GetLocalTime() + SoapRequestXML )
        }
        

        xmlhttp.send( SoapRequestXML )    
        
        
        
        
        
        
        
        RespXml = xmlhttp.responseXML





        
        
    }
    catch( err ) 
    {
        var errInfo = "XMLHttpRequest() error - " + err.description + " (0x" + err.number.toString(16) + ")"
        
        
        DisplayMessage( errInfo ) 
    }
    if (typeof(RespXml) == "object")
		RespXml = RespXml.xml

    
    if ( Flag == "true" )
    {
        DrvInst.AppendStringToFileEnd( g_DrvInstLogFilePath , "\r\n" + GetLocalTime() + RespXml )
    }

return ( RespXml )
}



	

		

		

		

		

		

		

		

		

		

		

		

	




function CheckAndModifyDiskInfo( DiskInfoXml )
{
    var NewDiskInfoXml  = ""
    NewDiskInfoXml     += "<DiskInfo>\n"

    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
    xmlDoc.async = false
    xmlDoc.loadXML( DiskInfoXml )

    
    
    
    var DiskModel           = ""
    var DiskSerialNumber    = ""
    
    
    

    
    var DiskType            = ""

    
    var DiskHeads           = ""
    var DiskSectorsPerTrack = ""
    var DiskSize            = ""

    var objRowDataNode = xmlDoc.selectSingleNode("\/\/DiskInfo")
    if ( objRowDataNode )
    {
        var oNodeList = objRowDataNode.childNodes;
        for (var i=0;i<oNodeList.length ; i++)
        {
        
            
            
            
            
            DiskModel           = XmlDencoding( GetXmlSingleNodeText( oNodeList(i).xml , "DiskModel" ) )
            DiskSerialNumber    = XmlDencoding( GetXmlSingleNodeText( oNodeList(i).xml , "DiskSerialNumber" ) )

            
            
            
            
            DiskType            = XmlDencoding( GetXmlSingleNodeText( oNodeList(i).xml , "DiskType" ) )
            

            
            DiskHeads           = XmlDencoding( GetXmlSingleNodeText( oNodeList(i).xml , "DiskHeads" ) )
            DiskSectorsPerTrack = XmlDencoding( GetXmlSingleNodeText( oNodeList(i).xml , "DiskSectorsPerTrack" ) )
            DiskSize            = XmlDencoding( GetXmlSingleNodeText( oNodeList(i).xml , "DiskSize" ) )

            
            
            if ( !DiskModel || !DiskSerialNumber || ( !DiskHeads || !DiskSectorsPerTrack.toString(10) || !DiskSize.toString(10) ) || !DiskType )
            {
                
            }
            
            else
            {
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                DiskType            = XmlDencoding( GetXmlSingleNodeText( oNodeList(i).xml , "DiskType" ) )
                
                if ( ( DiskType.toUpperCase().indexOf( "FIXED" ) != -1 ) && ( DiskType != "Fixed" ) )
                {
                    var DiskTypeXmlDoc = new ActiveXObject("Microsoft.XMLDOM")
                    DiskTypeXmlDoc.async = false
                    DiskTypeXmlDoc.loadXML( oNodeList(i).xml )

                    var DiskTypeobjNode = DiskTypeXmlDoc.selectSingleNode("\/\/DiskType" )
                    DiskTypeobjNode.text= "Fixed"
                    NewDiskInfoXml += DiskTypeXmlDoc.xml
                    DiskTypeXmlDoc = null
                }
                else
                {
                    NewDiskInfoXml += oNodeList(i).xml
                }
            }           
        
        }
    }
    else
    {
        
        xmlDoc = null
        return ( DiskInfoXml ) 
    }

    NewDiskInfoXml += "</DiskInfo>\n"

    xmlDoc = null

return ( NewDiskInfoXml )
}

function SubmitCaseInfoToServer( UserID , CaseID , OSInfoXml , BrowseInfo )
{

	var SoapApplyURL = ServerName.value + SoapAspURL.value		

	var SoapRequestXML = ""
    
	
    SoapRequestXML += '<?xml version="1.0" 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 += GetClientInfo()
	SoapRequestXML += "   </SOAP-ENV:Header>\n"
	SoapRequestXML += "   <SOAP-ENV:Body>\n"
	SoapRequestXML += "     <n:SubmitUserDeviceOSBrowseInfoLog xmlns:n=\"http:\/\/e-drivers.cn/soap/\">\n"
    SoapRequestXML += "     <UserID>"       + UserID + "</UserID>\n"
    SoapRequestXML += "     <CaseID>"       + CaseID + "</CaseID>\n"
    
    SoapRequestXML += "     <CaseStepStatus>DrvExp</CaseStepStatus>\n"
    
    SoapRequestXML += OSInfoXml             + "\n"
    SoapRequestXML += "     <BrowseInfo>"   + XmlEncoding( BrowseInfo ) + "</BrowseInfo>\n"
	SoapRequestXML += "     </n:SubmitUserDeviceOSBrowseInfoLog>\n"
	SoapRequestXML += "   </SOAP-ENV:Body>\n"
	SoapRequestXML += "</SOAP-ENV:Envelope>"


    var RetInfo = new Array()
    var ErrorInfo = ""

    
    DisplayMessage( "" + PromptArray["DrvExp.js_5646_1"] + "..." )
    
	
    var ReturnXML = MyXMLHttpRequest( SoapApplyURL , SoapRequestXML )
    

	
    
    if ( !ReturnXML )
	{
        {
            ErrorInfo = "" + PromptArray["DrvExp.js_5657_1"] + "" + ServerName.value + "" + PromptArray["DrvExp.js_5657_2"] + ""
            DisplayMessage( "" + PromptArray["DrvExp.js_5658_1"] + "\n" + PromptArray["DrvExp.js_5658_2"] + "" + ServerName.value + "" + PromptArray["DrvExp.js_5658_3"] + "," + PromptArray["DrvExp.js_5658_4"] + "\n" + SoapRequestXML)
        }
        RetInfo["Success"] = false
        RetInfo["Info"]    = ErrorInfo
        RetInfo["UserID"]  = ""
		return ( RetInfo )
	}

	ErrorInfo = GetInfoByTagFromXml( ReturnXML, SOAP_RET_ERROR_STRING_TAG )

	if (ErrorInfo != null) 
	{
        RetInfo["Success"] = false
        RetInfo["Info"]    = ErrorInfo
        RetInfo["UserID"]  = ""
        DisplayMessage( "" + PromptArray["DrvExp.js_5673_1"] + ":\n" + ErrorInfo )
		return ( RetInfo )
	}
	else
	{
        var UserID           = GetInfoByTagFromXml( ReturnXML, "UserID" )

        RetInfo["Success"         ]  = true
        RetInfo["Info"            ]  = "" + PromptArray["DrvExp.js_5681_1"] + "" 
        RetInfo["UserID"          ]  = UserID
        DisplayMessage( "" + PromptArray["DrvExp.js_5683_1"] + "" )
		return ( RetInfo )
	}
}

