	//只往页面插入一次object信息
	var ca_init = false;
	//全局变量
	var SystemWorkPath,ServerEncCert,ServerSignCert,SignCertPath,SignCertSN,ClientEncCert,ClientSignCert,keyPassword;
//----------------------------------------------------------------------------------------------	
	//往页面插入object信息
	function writeOcx( doc ){
		doc.body.innerHTML = doc.body.innerHTML + 
				  '<OBJECT id="JIT_Control" style="LEFT: 0px; WIDTH: 1px; TOP: 0px; HEIGHT: 1px"'+
				  ' height="1" width="1" classid="clsid:F1FDD7D2-0192-4F66-A015-4FC6235E8B74"'+
				  '	CODEBASE="JITSecurityTool.cab#version=1,0,0,8">'+
				  '</OBJECT>'+
				  '<OBJECT id="Cert" style="LEFT: 0px; WIDTH: 1px; TOP: 0px; HEIGHT: 1px"'+
				  '	height="1" width="1" classid="clsid:7310E883-AA56-4724-89EE-C2DECB736949"'+
				  ' CODEBASE="ServerCertTest.cab#version=1,0,0,1">'+
				  '</OBJECT>';
		ca_init = true;
	}
//----------------------------------------------------------------------------------------------	
	//设置密码
	function setKeyPassword( keyPass ){
		keyPassword=keyPass;
	}

	//得到密码
	function getKeyPassword(){

		//if(!ca_init)
		//	writeOcx( document );

		//return prompt('请输入EKey的密码',"");
		return keyPassword;
	}
//----------------------------------------------------------------------------------------------
	//错误提示
	function getError( nRet ){
		var err;
		switch(nRet)
		{
			case 50 : err="系统路径已经初始化，该错误可忽略！"; break;

			case -1001 : err="证书路径参数格式错误"; break;
			case -4100 : err="证书没有开通应用或者应用文件已损坏或软盘、EKEY没有插好"; break;
			case -4001 : err="证书未到应用期或系统时间设置错误"; break;
			case -4002 : err="证书没有开通相关应用"; break;
			case -4003 : err="证书的安全应用已过期或系统时间设置错误"; break;
			case -4004 : err="证书与其配置文件不匹配"; break;
			case 51 : err="证书已过期或系统时间设置错误"; break;
			case -9018 : err="没有找到证书"; break;
			case -9005 : err="证书密码错误或证书不完整"; break;
			case -1003 : err="EKEY未插好"; break;
			case -9003 : err="不能访问加密设备"; break;
			case -5101 : err="不能实例化EKEY证书"; break;

			case -9009 : err="CRL不完整"; break;
			case -9012 : err="证书链不完整"; break;
			case -9014 : err="根证书无效"; break;
			case -9021 : err="私钥不存在"; break;
			case -9022 : err="算法和密钥不匹配"; break;
			case -9026 : err="证书和算法不匹配"; break;
			case -9027 : err="签名失败"; break;
			case -9028 : err="验证签名失败"; break;
			case -9029 : err="加密失败"; break;
			case -9030 : err="解密失败"; break;
			case -9043 : err="配置文件不存在"; break;
			default : err="未知的错误"; break;
		}
		return err;
	}
//----------------------------------------------------------------------------------------------
	//初始化环境
	function init()
	{
		var nRet,flag;
		nRet = document.JIT_Control.initcontrol();
		if(nRet!=0 && nRet!=50)
		{
			alert("初始化环境失败！");
			alert(getError(nRet));
			flag=false;
		} 
		else
		{
		  alert("初始化环境成功！");
		  flag=true;
		}
		return flag;
	}
//----------------------------------------------------------------------------------------------
	//初始化服务器方证书
	function initServerCert()
	{
		var nRet,flag;
		SystemWorkPath = document.JIT_Control.getworkpath();//获取系统路径	
		nRet=document.JIT_Control.readSingleCert("FILE://"+SystemWorkPath+"\\ServerCertTest.cer",0,"11111111");//初始化服务器端证书
		if(nRet!=0)
		{
			alert("初始化服务器方证书失败！");
			alert(getError(nRet));
			flag=false;
		} 
		else
		{
 			alert("初始化服务器方证书成功！");
			ServerEncCert = document.JIT_Control.getcryptcert();//获取服务器端加密证书
			ServerSignCert = document.JIT_Control.getsigncert();//获取服务器端签名证书
			flag=true;
		}
		return flag;
	}
//----------------------------------------------------------------------------------------------
	//初始化客户方证书
	function initClientCert(keyPassword){
		var nRet;
		var flag=false;
		nRet = document.JIT_Control.whichDevice();//判断证书介质及证书类型
		switch (nRet)
		{
	   		case -1 :  
	      			nRet =  document.JIT_Control.readSingleCert("",3,keyPassword);//文件格式单证证书
	      			if(nRet!=0)
	      			{
	           			alert("初始化客户方证书失败！");
					alert(getError(nRet));
					flag=false;
	           		}   
	      			else
	           		{
	           			alert("初始化客户方证书成功！");
	       	   			SignCertPath = document.JIT_Control.getSingleCertPath();
					flag=true;
	       	 		}
	       	 		break; 
	   		case 0 : 										    
	      			nRet = document.JIT_Control.readcert("FILE://A:\\Encrypt.pfx",3,keyPassword,"FILE://A:\\Sign.pfx",3,keyPassword);//文件格式双证证//书 
	      			if(nRet!=0)
	      			{
	           			alert("初始化客户方证书失败！");
					alert(getError(nRet));
					flag=false;
	           		}   
	     			else
	           		{
	           			alert("初始化客户方证书成功！");
	           			SignCertPath = "FILE://A:\\Sign.pfx";
					flag=true;
	      			}
	      			break; 
	   		case 1 : 										
	   		case 2 : 
	   		case 3 :
	      			nRet =  document.JIT_Control.readcert("USBCSP://.2CER",3,keyPassword,"USBCSP://.2CER",3,keyPassword);//EKEY双证证书
	      			if(nRet!=0)
	      			{
	           			alert("初始化客户方证书失败！");
					alert(getError(nRet));
					flag=false;
	           		}   
	           		else
	           		{
	           			alert("初始化客户方证书成功！");
	           			SignCertPath = "USBCSP://.2CER";
					flag=true;
	      			}
	      			break; 
	  		default : 
				//alert(getError(nRet));
	      			alert("对不起，没有找到EKEY");
				flag=false;
		}     
		if (flag){
		 	SignCertSN = document.JIT_Control.SignCertSN();//获取客户端签名证书序列号
			ClientEncCert =  document.JIT_Control.getcryptcert();//获取客户端加密证书
			ClientSignCert = document.JIT_Control.getsigncert();//获取客户端签名证书
		}
		return flag;
	}
//----------------------------------------------------------------------------------------------
	//得到根据参数数组和客户端Key的密码得到加密后的数据数组以及客户端签名证书和客户端和加密证书
	function getcryptTextWithPkcs7(plain,keyPassword){
		var crypttext = new Array(plain.length+3);

		if(init()){
			//-----------------------------------------------------------------
			if(initServerCert()){
				//-----------------------------------------------------------------
				if(initClientCert(keyPassword)){
					//-----------------------------------------------------------------
					var i;
					var flag=false;
					for(i=0;i<plain.length;i++)
					{
						nRet = document.JIT_Control.encryptsign(SignCertPath,keyPassword,ServerEncCert,plain[i]);
						//利用所获得证书包装数字信封;
						//"USBCSP://.2CER"，利用客户端证书签名								//ServerEncCert，利用服务器端证书加密
						//plain,明文做参数传入						
						if(nRet!=0)
						{
							alert("产生pkcs7数字信封失败！");
							alert(getError(nRet));
							flag=false;
						}
						else
						{
							alert("产生pkcs7数字信封成功！");
							flag=true;
							crypttext[i] = document.JIT_Control.getconten();//获得密文的Base64码
						}			
					}				
					crypttext[i]=ClientSignCert;
					crypttext[i+1]=ClientEncCert;
					crypttext[i+2]="1";
				}
			}
		}	
		return crypttext;
	}
//------------------以上是在客户端调用函数中使用的函数----------------------------

//******************以下是客户端调用函数******************************************
	//得到加密数据
	function getEncDate(plain){
		var keyPassword=getKeyPassword();
		if(keyPassword==undefined){
			return null;
		}else{
			var crypttext=getcryptTextWithPkcs7(plain,keyPassword);	
			return crypttext;
		}
	}
	//得到加密数据和序列号
	function getSubmitArray(plain){
		var keyPassword=getKeyPassword();
		if(keyPassword==undefined){
			return null;
		}else{
			var crypttext=getcryptTextWithPkcs7(plain,keyPassword);

			crypttext[crypttext.length++]=SignCertSN;
			return crypttext;
		}
	}