﻿String.prototype.isEmpty = function(){return /^\s*$/.test(this);} 
String.prototype.Trim  = function(){return this.replace(/(^\s*)|(\s*$)/g, "");}
//var logon = false;
//if(!logon)
//    location.href = "login.htm";
var ERROR_MSG_CERT_NULL = "出错了！请重新选择签名证书";
var ERROR_MSG_TXT_NULL = "出错了！内容不能为空";
var ERROR_MSG_TXT_RESULT_NULL = "出错了！待验证数据不能为空！";
var ERROR_MSG_INCORRECT_SIGNED_FILE = "出错了！可能您没选择正确的签名过的文件（.p7s）!";
var ERROR_MSG_CONTENT_INCOMPLETE = "出错了！可能是您提供的内容不完整！";
var ERROR_MSG_WRONG_INFILE = "出错了！有可能是签名的数据格式不正确！";
var ERROR_MSG_WRONG_PASS = "您选择的签名证书密码不对或者类型不对，请重新选择！";
function CheckCertByRoot(cert,root)
{
	result = SZCAOcx.AxCheckByRootEx(cert, root);
	if (result)
	{
		return "该证书由指定根证签发";
	}
	else
	{
		return "该证书不由指定根证签发";
	}
}

function CheckCertByCrl(crl)
{
	var Sn = SZCAOcx.AxGetCertInfo("SN");

	result = SZCAOcx.AxCheckByCrlEx(Sn, crl);              
	if (!result)
	{
		return "该证书已过期";
	}
	else
	{
		return "该证书不在过期列表内";
	}
}
//用户选择证书登录

//选择签名证书
function GetSignCertificate()
{	
  	var result=SZCAOcx.AxSetKeyStore(); 
	if(result)
	{
  		return SZCAOcx.AxGetCertInfo("DN");
	}
	else
	{
		//alert(SZCAOcx.AxGetErrorCode());
		alert("请选择一个证书！");
		return "";
	}
}
function GetSignCertificateEx(cert)
{
    var pas=prompt("请输入密码");
  	var result=SZCAOcx.AxSetKeyEx(cert,pas); 
	if(result)
	{
  		return SZCAOcx.AxGetCertInfo("DN");
	}
	else
	{
		//alert(SZCAOcx.AxGetErrorCode());
		alert("您选择的签名文件有问题，有可能是输入的密码不对，请重新选择！");
		return "";
	}
  
}
//选择加密证书
function GetEncryptCertificate()
{
	SZCAOcx.AxInit();
  	var result=SZCAOcx.AxSetCertStore(); 
	if(result)
	{
  		return SZCAOcx.AxGetCertInfo("DN");
	}
	else
	{
		//alert(SZCAOcx.AxGetErrorCode());
		alert("请选择一个证书！");
		return "";
	}
}
function GetEncryptCertificateEx(cert)
{
  	var result=SZCAOcx.AxSetCertEx(cert); 	
	if(result)
	{
  		return SZCAOcx.AxGetCertInfo("DN");
	}
	else
	{
		//alert(SZCAOcx.AxGetErrorCode());
		alert("请选择正确的文件类型（.cer）");
		return "";
	}
}

//附原文的签名
function AttachSign(strData)
{
    var result = SZCAOcx.AxSign(strData);
    if(SZCAOcx.AxGetErrorCode()!="")
    {		
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert(ERROR_MSG_CERT_NULL);
		return "";
    }
    else
    {
    	return result;
    }
}
function AttachSign2()
{
    var result = SZCAOcx.AxSign2Final();
    if(SZCAOcx.AxGetErrorCode()!="")
    {		
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert(ERROR_MSG_WRONG_INFILE);
		return "";
    }
    else
    {
    	return result;
    }
}
function AttachSignEx(strData)
{
    var result = SZCAOcx.AxSignEx(strData,strData+".p7s");
    if(SZCAOcx.AxGetErrorCode()!="")
    {		
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert("出错了！有可能是您选择的签名证书或原文件有问题，请重新选择！");
		return "";
    }
    else
    {
    	return strData+".p7s";
    }
}
//验证附原文的数据签名
function VerifyAttachedSign(signedData)
{
	var result1,re;	
	result1=SZCAOcx.AxVerify(signedData);
	if(SZCAOcx.AxGetErrorCode()!="")
	{
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert("请先获得签名结果再验签！");
		re = "验证失败！<br/>";
	}
	else
	{
		re = "验证成功！"+getInfo() + "<br> 原文：" +result1;
	}
	return re;		
}
function VerifyAttachedSign2(signedData)
{
	var result1,re = "验证失败！";			
	result1=SZCAOcx.AxVerify(signedData);
	if(SZCAOcx.AxGetErrorCode()!="")
	{
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert(ERROR_MSG_TXT_RESULT_NULL);
	}
	else
	{
		re =GerCerInfo2() + "<br> 原文：" +result1;		
	}
	return re;		
}
function VerifyAttachedSignEx(signedData)
{
	var result1,re = "验证失败";			
	result1=SZCAOcx.AxVerifyEx(signedData,signedData+".new");
	if(SZCAOcx.AxGetErrorCode()!="")
	{
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert(ERROR_MSG_INCORRECT_SIGNED_FILE);
	}
	else
	{
		re =GerCerInfo() + "<br> 原文：" +signedData+".new";		
	}
	return re;		
}

//制作数字信封
function EnvelopData(strData)
{
    var result = SZCAOcx.AxEnvelop(strData);   
    if(SZCAOcx.AxGetErrorCode()!=0)
    {		
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert(ERROR_MSG_CONTENT_INCOMPLETE);
		return "";
    }
    else
    {
    	return result;
    }
}
function EnvelopDataEx(strData)
{
    var result = SZCAOcx.AxEnvelopEx(strData,strData+".p7n");  
    if(SZCAOcx.AxGetErrorCode()!=0)
    {		
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert("出错了！有可能您选择了不正确的证书或者没选文件！");
		return "";
    }
    else
    {
    	return strData+".p7n";
    }
}

//解密数字信封
function DecryptEnvelopData(encryptedData)
{
	var result = "验证成功！<br/>原文：";	
	SZCAOcx.AxSetKeyStore();
	result+=SZCAOcx.AxDecode(encryptedData);
	if(SZCAOcx.AxGetErrorCode()!=0)
	{
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert("出错了！有可能您选择的验证证书不正确，请重新选择！");
		result = "验证失败！";
	}
	return result;		
}
function DecryptEnvelopDataEx(encryptedData)
{
	var result;	
	SZCAOcx.AxSetKeyStore();
	SZCAOcx.AxDecodeEx(encryptedData,encryptedData+".new");
	if(SZCAOcx.AxGetErrorCode()!=0)
	{
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert("出错了！有可能您选择的解密证书不正确，请重新选择！");
		result = "解密失败！<br/>";
	}else{
		result = "解密成功！<br/>解密后文件："+encryptedData+".new";
	}
	return result;		
}

//获取证书信息
function GerCerInfo()
{
	return "验证成功。<br>"+
		"版本号： " + SZCAOcx.AxGetCertInfo("VER") + ";<br>" +
        "序列号： " + SZCAOcx.AxGetCertInfo("SN") + ";<br>" +
        "证书主题： " + SZCAOcx.AxGetCertInfo("DN") + ";<br>" +
        "有效起始日期： " + SZCAOcx.AxGetCertInfo("TIMEB") + ";<br>" +
        "有效终止日期： " + SZCAOcx.AxGetCertInfo("TIMEE") + ";<br>" +
        "颁发者主题： " + SZCAOcx.AxGetCertInfo("ISSUER") + ";<br>";	
}

function GerCerInfo2()
{
	var snList = SZCAOcx.AxGetSnList();;
	var sl=snList.split(";");
	var result="验证成功。<br>";
	for(i=0;i<sl.length;i++)
	{
		if(sl[i]=="")
		{
			continue;
		}
		result+="版本号： " + SZCAOcx.AxGetCertInfoBySn(sl[i],"VER") + ";<br>" +
        "序列号： " + SZCAOcx.AxGetCertInfoBySn(sl[i],"SN") + ";<br>" +
        "证书主题： " + SZCAOcx.AxGetCertInfoBySn(sl[i],"DN") + ";<br>" +
        "有效起始日期： " + SZCAOcx.AxGetCertInfoBySn(sl[i],"TIMEB") + ";<br>" +
        "有效终止日期： " + SZCAOcx.AxGetCertInfoBySn(sl[i],"TIMEE") + ";<br>" +
        "颁发者主题： " + SZCAOcx.AxGetCertInfoBySn(sl[i],"ISSUER") + ";<br><br>";
	}
	return result;
}



//author:wenming
//多人加密
function multEncode(encodeData){
	var result = SZCAOcx.AxEnvelop2Final(encodeData);
	if(SZCAOcx.AxGetErrorCode()!="")
    {		
			//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
			alert("出错了！要求的信息填写不完整！");
			return "";
    }
    else
    {
    	if(result.isEmpty())
		    alert("请刷新本页！");
		return result;
    }
}
////author:wenming
//解密
function multDecode(decodeData){
	SZCAOcx.AxSetKeyStore();
	var result = SZCAOcx.AxDecode(decodeData);
	if(result.isEmpty())
	    result = "解密失败！请选择正确的解密证书和解密密文！";
	return result;
	}
//获得加密证书
function GetEncodeCertificate()
{
  	var result=SZCAOcx.AxSetCertStore(); 
	if(result)
	{
  		return SZCAOcx.AxGetCertInfo("DN");
	}
	else
	{
		//alert(SZCAOcx.AxGetErrorCode());
		alert("请选择一个证书");
		return "";
	}
}
////author:wenming
//文件加密
function multEncodeFile(infile,outfile){
	var result = SZCAOcx.AxEnvelop2FinalEx(infile,outfile);
	if(SZCAOcx.AxGetErrorCode()!="")
    {		
		alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		return "";
    }
    else
    {
    	return result;
    }
	}
////author:wenming
//文件解密
function multDecodeFile(infile,outfile){
	SZCAOcx.AxSetKeyStore();
	var result = SZCAOcx.AxDecodeEx(infile,outfile);
		return result;
	}

//多人文件签名
function MultSignEx(infile)
{
    var result = SZCAOcx.AxSign2FinalEx(infile+".p7s");
    if(SZCAOcx.AxGetErrorCode()!="")
    {		
		//alert("错误码："+SZCAOcx.AxGetErrorCode()+" 错误信息："+SZCAOcx.AxGetErrorMsg());
		alert(ERROR_MSG_WRONG_INFILE);
		return "";
    }
    else
    {
    	return infile+".p7s";
    }
}

//文件对称加密（数字信封）
function EncodeFileSymm(inFile,outFile,keyFile){
	var f = SZCAOcx.AxEnvelopSymmEx(inFile,outFile,keyFile);	
	if(f)
	{
		alert("加密成功");
		txtResultText1.value = outFile;
	    txtResultText2.value = keyFile;
	}else{
	    alert("加密失败");
	}
}
//文件对称解密
function DecodeFileSymm(infile,keyfile,outfile){
	var result=SZCAOcx.AxSetKeyStore(); 
	if(!result)
		{
			alert(SZCAOcx.AxGetErrorCode());
			return "";
		} 
	var f = SZCAOcx.AxDecodeSymmEx(infile,keyfile,outfile);
	if(f)
	  decodeFileResult.innerHTML = "解密成功.<p>原文文件："+outfile;
	else
	  decodeFileResult.innerHTML = "解密失败";
	}
//获取证书信息
function getInfo()
{
	return "<br>"+
		"版本号： " + SZCAOcx.AxGetCertInfo("VER") + ";<br>" +
        "序列号： " + SZCAOcx.AxGetCertInfo("SN") + ";<br>" +
        "证书主题： " + SZCAOcx.AxGetCertInfo("DN") + ";<br>" +
        "有效起始日期： " + SZCAOcx.AxGetCertInfo("TIMEB") + ";<br>" +
        "有效终止日期： " + SZCAOcx.AxGetCertInfo("TIMEE") + ";<br>" +
        "颁发者主题： " + SZCAOcx.AxGetCertInfo("ISSUER") + ";<br>";	
}
//选择证书登录
function CheckCertLogin(type){
	var isinit = SZCAOcx.AxInit();
	if(isinit){
		if(type)
		    SZCAOcx.AxSetCertFilterStr("#;SZCA;#;#;#;");
		var iskey = SZCAOcx.AxSetCertStore();
		if(iskey){
			var issuer =SZCAOcx.AxGetCertInfo("ISSUER");
			//alert(issuer);
			var CN = issuer.split(",");
			for(var i=0;i<CN.length;i++){
				if((CN[i].Trim()).toUpperCase()=="CN=SZCA"){
					login = true;
					return true;
					}
				if(i==(CN.length-1))
				    alert("不是SZCA颁发的证书！请重新选择！");
				}
		}else{
			if(type)
			    alert("您还没有SZCA颁发的证书！请先去SZCA申请证书！");
		}
	}
	return false;
}
//自动选择证书登录
function CheckLogin(){
	var isinit = SZCAOcx.AxInit();
	if(isinit){
		var rnum = SZCAOcx.AxSetCertFilterStr("#;SZCA;#;#;#;");
		var iskey = SZCAOcx.AxSetCertStore();
		}
	}
//检查文件类型
function CheckFile(compValue,type){
	var sufix = compValue.substring(compValue.lastIndexOf("."));
	var t = type.split(";");
	for(var i=0;i<(t.length-1);i++){
		if(t[i]==sufix)
		    return true;
		else{
			if(i==(t.length-2)){
				alert("请选择正确文件类型("+type+")");
				//component.value = "";
		        //component.focus();
		        return false;
				}
			else
			    continue;
			}
		}
	return true;
}
//检查输入有效性
function validateInput(inArray,inName,typeArray){
	var name = inName.split(";");
//	var count = 0;
	for(var i=0;i<inArray.length;i++){
		if(inArray[i].isEmpty()){
			alert(name[i]+"不能为空，请先设定"+name[i]+"值");
			return false;
		}else{
			if(!(typeArray[i].isEmpty())){
				var isRightFile = CheckFile(inArray[i],typeArray[i]);
				if(!isRightFile){
					return false
				}else{
					continue;	
				}
			}
		}
	}
	return true;
}
//检查输入是否为空
function checkInput(inArray,inName){
	var name = inName.split(";");
	for(var i=0;i<inArray.length;i++){
		if(inArray[i].isEmpty()){
			alert(name[i]+"不能为空，请先设定正确的"+name[i]+"值");
			return false;
			}
		}
	return true;
	}
//清理
function ImaClear(comp,type){
	switch(type){
		case 0:comp.value = "";
		       break;
		case 1:comp.innerHTML = "";
		       break;
		default:alert("没定义!");
		} 
	}
//保存文件
function save(path){
	var snL = SZCAOcx.AxGetSnList();
	var array = snL.split(";");
	var f = SZCAOcx.AxSaveCerts(path);
	return f;
}
//调试方法
function debug(startTime,endTime){
	var flag = true;
	if(flag){
		alert("用去时间： 约"+(endTime-startTime)/1000+"秒");	
		}
}
//检查用户
function checkUser(){
	if(true)
	    logon = true;
	}
function CaTitle(CaTile,type)
{
    var codetype = type + "=";
     CaTile = CaTile.substring(CaTile.indexOf(codetype),CaTile.length);
     CaTile = CaTile.substring(codetype.length, CaTile.indexOf(","));
    return CaTile;
}
//加密的话，用'EC;....' ;
//strFilter := 'SV;#;建设局;#;1.2.86.11.7.7550201:Organizational;';
function SetCertFilter(AKeyType,AUsage)
{
  var strFilter;
  var strUsage;
  //这个是专用模板的证书,只要是1.2.86.11.7.7550201:Personal这种类型,都是SZJS的
  switch (AUsage)
  {
    case 0:
        strUsage="SC";
        break;
    case 1:
        strUsage="EC";
  }

  switch (AKeyType)
  {
    case 1:
        strFilter = ";SZCA;#;#;1.2.86.11.7.7550201:Organizational";
        break;
    case 2:
        strFilter = ";SZCA;#;#;1.2.86.11.7.7550201:Business";
        break;
    case 3://1+2  1-机构证书， 2-业务证书 两种组合
        strFilter = ";SZCA;#;#;1.2.86.11.7.7550201:i";      //组合的，待做
        break;
    case 4:
        strFilter = ";SZCA;#;#;1.2.86.11.7.7550201:Personal";
        break;
    default:
        strFilter = ";SZCA;#;#;1.2.86.11.7.7550202:SZJS";
  }

  strFilter = strUsage + strFilter;
  var SZCAOcx = document.getElementById("SZCAOcx");
  SZCAOcx.AxSetCertFilterStr(strFilter );
}

/**选择签名证书
**dateTime:2008/8/18 18:20
**param: 
**return: 字符串
**description:选择一个签名证书，若成功，返回证书DN信息，若失败，返回空("")。
*/
function GetKeyInfo() 
{
    var result = SZCAOcx.AxSetKeyStore();
    if (!result)
    {
        return "";
    }
    else 
    {
        var cert_Dn = SZCAOcx.AxGetCertInfo("DN") ;
        var signInfo = AttachSign("LoginCheck");
        if ( signInfo != "")
        {
            return cert_Dn;
        }
        else 
        {
         return "";
        }
    }
}
function OnLogin()
{  
   try
   {
      SZCAOcx.AxInit();
	   //过滤CA证书
	  SetCertFilter(3,0);
	 //检查成功，您的环境符合要求
	 document.getElementById("ctl00_cph_context_Login1_hfCertTitle").value= GetKeyInfo();
    }
   catch(e)
    {
      alert("没有安装CA动程序，请下载安装");
    }
}
