﻿var IPData = "";
//ukey变量
var UseCom = "";
var user_sign_cert = "";
var user_enc_cert = "";
var KeyType = "";
//ukey接口

/******************************************************************************************
* 函数名称：GDCA_Finalize
* 创建作者：羊城    
* 创建日期：2008.4.17    
* 函数功能：结束GDCA控件，释放GDCA_Initialize中分配的全局资源（内存、信号量等）    
* 输入参数：i_Com      COM控件名称
* 输出参数：errorCode  COM控件返回的错误代码   
* 修改记录：
******************************************************************************************/
function GDCA_Finalize(i_Com) {
    try {
        var errorCode;               //COM控件返回的错误代码
        i_Com.GDCA_Finalize();       //释放资源
        errorCode = i_Com.GetError(); //检查函数是否成功运行，在函数运行结束后调用
        if (errorCode != 0)
            ;
    }
    catch (objError) {
        ;
    }
    return errorCode;
}

/******************************************************************************************
* 函数名称：GDCA_Logout
* 创建作者：羊城    
* 创建日期：2008.4.17    
* 函数功能：退出登录，并结束GDCA控件   
* 输入参数：i_Com    COM控件名称
* 输出参数：ret      COM控件返回代码   
* 修改记录：
******************************************************************************************/
function GDCA_Logout(i_Com) {
    var ret, errorCode;

    try {
        if (i_Com.GDCA_isLogin(2) == 0)     //判断有无登录
        {
            ret = i_Com.GDCA_Logout();      //退出登录
            errorCode = i_Com.GetError();   //检查上一函数是否成功运行
            if (errorCode != 0)              //退出登录失败
                ;
        }
    }
    catch (objError) {
        ;
    }
    finally {
        GDCAFinalize(i_Com);            //释放资源
    }
    return ret;
}

function verys() {
    var GDCACom;                       //GDCACOM控件
    var DeviceType;                     //密码设备类型
    var errorCode = -1;                 //COM控件返回的错误代码
    var ReadOutSignCert;                //读出的用户签名证书
    var ReadOutEncCert;                 //读出的用户加密证书
    var ReadOutKeyIdEnCode;             //读出的唯一标识符（未解码）
    var ReadOutKeyId;                   //读出的唯一标识符
    var user_pin = $("#userpw").val(); //密码设备PIN码


    /*****************************************************************************************
    第一步：动态加载GDCA的COM控件
    *****************************************************************************************/
    try {
        //安装客户端中间件和设备驱动后可以在注册表里查询Atl_com.Gdca已经注册，
        //Atl_com.Gdca为GDCAUSBkey的COM接口
        GDCACom = new ActiveXObject("Atl_com.Gdca");
        //alert("3.0控件创建成功！");
    }
    catch (objError) {
        ;
        //ReadCert();
        return false;
    }

    /*****************************************************************************************
    第二步：初始化GDCA的COM控件
    其分步骤如下：
    1、判断密码设备和注册表信息是否安装正常
    2、设置密码设备类型
    3、初始化COM控件
    *****************************************************************************************/

    try {
        DeviceType = GDCACom.GDCA_GetDevicType();   //获取客户端密码设备设备类型

        switch (parseInt(DeviceType)) {
            case -1: ;
                break;
            case -2: ;
                break;
            case -3: ;
                break;
            default:
                //设置密码设备类型，具体设置详见gdca_device.ini的配置信息，gdca_device.ini在安装包中有
                GDCACom.GDCA_SetDeviceType(DeviceType);
                errorCode = GDCACom.GetError(); //检查函数是否成功运行，在函数运行结束后调用
                if (errorCode != 0) {
                    ;
                    return errorCode;
                }

                //初始化接口所需要的全局资源（内存、信号量等），如果初始化成功，返回值为0
                GDCACom.GDCA_Initialize();
                errorCode = GDCACom.GetError(); //检查函数是否成功运行，在函数运行结束后调用
                if (errorCode != 0) {
                    ;
                    return errorCode;
                }
                break;
        }
    }
    catch (objError) {
        ;
        GDCA_Finalize(GDCACom);         /*释放密码设备接口资源*/
        return false;
    }
    //  	alert("测试控件初始化，读取密码设备标签内容：" + GDCACom.GDCA_ReadLabel("CA_CERT",9));

    /*****************************************************************************************
    第三步：用户登录
    *****************************************************************************************/

    try {
        if (user_pin == null || user_pin == '') {
            ;
            $("#userpw").focus();
            return false;
        }

        GDCACom.GDCA_Login(2, user_pin); //客户端密码设备登录
        errorCode = GDCACom.GetError(); //检查函数是否成功运行，在函数运行结束后调用
        if (errorCode != 0) {
            ;
            GDCA_Logout(GDCACom);     //释放GDCA_Initialize中分配的全局资源
            return false;
        }
    }
    catch (objError) {
        ;
        GDCA_Logout(GDCACom);         /*释放密码设备接口资源*/
        return false;
    }

    /*****************************************************************************************
    第四步：读取用户密码设备（USBKey）的用户证书
    用户证书包括：
    1、签名证书
    2、加密证书
    *****************************************************************************************/

    try {
        //读取用户签名证书，保存在ReadOutSignCert中
        ReadOutSignCert = GDCACom.GDCA_ReadLabel("LAB_USERCERT_SIG", 7);
        errorCode = GDCACom.GetError(); //检查函数是否成功运行，在函数运行结束后调用
        //证书读取失败
        if (errorCode != 0) {
            ;
            //退出登录
            GDCA_Logout(GDCACom);
            return false;
        }
    }
    catch (objError) {
        ;
        GDCA_Logout(GDCACom);          /*释放密码设备接口资源*/
        return false;
    }
    //alert("ReadOutSignCert==== " + ReadOutSignCert);

    try {
        //读取用户加密证书，保存在ReadOutEncCert中
        ReadOutEncCert = GDCACom.GDCA_ReadLabel("LAB_USERCERT_ENC", 8);
        errorCode = GDCACom.GetError();  //检查函数是否成功运行，在函数运行结束后调用
        //证书读取失败
        if (errorCode != 0) {
            ;
            //退出登录
            GDCA_Logout(GDCACom);
            return false;
        }
    }
    catch (objError) {
        ;
        GDCA_Logout(GDCACom);         /*释放密码设备接口资源*/
        return false;
    }
    //alert("ReadOutEncCert==== " + ReadOutEncCert);

    /*****************************************************************************************
    第五步：判断签名证书的证书时间的有效性（判断证书是否过期）
    注：此处直接调用GDCASecure.js文件里的GDCAGetCerTime函数，因为GDCAGetCerTime实现太长
    *****************************************************************************************/

    try {
        errorCode = GDCAGetCerTime(GDCACom, 2, ReadOutSignCert);
        if (errorCode != 0) {
            ;
            return errorCode;
        }
    }
    catch (objError) {
        ;
        GDCA_Logout(GDCACom);         /*释放密码设备接口资源*/
        return false;
    }

    /*****************************************************************************************
    将JS的参数保存在form里传递给服务器端
    *****************************************************************************************/
    user_sign_cert = ReadOutSignCert; //用户签名证书
    user_enc_cert = ReadOutEncCert;   //用户加密证书
    KeyType = 2;                      //KEY类型 

    //	alert("ReadOutSignCert==="+form1.user_sign_cert.value);

    /*
    alert("用户签名证书: " + form1.user_sign_cert.value);
    alert("用户加密证书：" + form1.user_enc_cert.value);
    alert("密码设备类型：" + DeviceType);
    alert("KEY类型: " + form1.KeyType.value);
    */
}
try
{
    $.ajax({
        type: 'post',
        url: '/web/newgb/action/CheckLogin.ashx',
        dataType: 'text',
        ifModified: true,
        data: 'command=getIP',
        timeout: 15000,
        async: true,
        beforeSend: function(XMLHttpRequest) {

        },
        success: function(msg) {

            IPData = msg;
        },
        error: function(data) {

            alert('获取IP地址失败');
        }

    })
}
catch(e)
{
}
function User_type()
//登陆类型
{

    if ($('input[name=rdo_login_type]:checked').val() == "2") {
        $("#user_tr").hide();
        $("#psw_td").html('证书密码：');
    }
    else {
        $("#user_tr").show();
        $("#psw_td").html('密&nbsp;&nbsp;&nbsp; 码：');
    }
}
function CheckLogin()
{
	var res=0;
    $.ajax({
        type: 'post',
        url: '/web/newgb/action/CheckLogin.ashx',
        dataType: 'text',
        ifModified: true,
        data: 'command=CheckLoginYoN',
        timeout: 5000,
        async: false,
        beforeSend: function(XMLHttpRequest) {
	
        },
        success: function(msg) {
 res=msg;
 	return res;
        },
        error: function(data) {
	
        }

    })
return res;
}

function UserLogin(username, psw, login_type, successCallback, errorCallback) {
    var res = 0;
    var ip = '';
    try
    {
        ip = IPData;
    }
    catch(e)
    {
    }
	$.ajax({
	    type: 'post',
	    url: '/web/newgb/action/CheckLogin.ashx',
	    dataType: 'text',
	    ifModified: true,
	    data: 'command=UserLogin' + '&uid=' + escape(username) + '&upw=' + escape(psw) + '&login_type=' + login_type + '&ip=' +ip,
	    timeout: 15000,
	    async: true,
	    beforeSend: function(XMLHttpRequest) {

	    },
	    success: function(msg) {
	       
	        successCallback(msg);
	    },
	    error: function(data) {

	        errorCallback();
	    }

	})
}
function UserLogin_ukey(psw, login_type, keyid,KeyType, successCallback, errorCallback) {
    var res = 0;
    $.ajax({
        type: 'post',
        url: '/web/newgb/action/CheckLogin.ashx',
        dataType: 'text',
        ifModified: true,
        data: 'command=UserLogin' + '&upw=' + psw + '&login_type=' + login_type + '&keyid=' + keyid + '&KeyType=' + KeyType,
        timeout: 15000,
        async: true,
        beforeSend: function(XMLHttpRequest) {

        },
        success: function(msg) {

            successCallback(msg);
        },
        error: function(data) {

            errorCallback();
        }

    })
}
function Get_MY_Name(callback)
//取用户名称
{
	var res='';
	$.ajax({
	    type: 'post',
	    url: '/web/newgb/action/CheckLogin.ashx',
	    dataType: 'text',
	    ifModified: true,
	    data: 'command=My_Username',
	    timeout: 15000,
	    async: true,
	    beforeSend: function(XMLHttpRequest) {

	    },
	    success: function(msg) {
	    callback(msg)
	    },
	    error: function(data) {
	    }

	})
	return res;
}
function UserLogin_out() {
    var res = 1;
    $.ajax({
        type: 'post',
        url: '/web/newgb/action/CheckLogin.ashx',
        dataType: 'text',
        ifModified: true,
        data: 'command=UserLogin_out',
        timeout: 15000,
        async: true,
        beforeSend: function(XMLHttpRequest) {

        },
        success: function(msg) {
            res = msg;
        },
        error: function(data) {
            res = 1;
        }

    })
    return res;
}
function GetCompany_type(callback) {
    var res = '';
    $.ajax({
        type: 'post',
        url: '/web/newgb/action/CheckLogin.ashx',
        dataType: 'text',
        ifModified: true,
        data: 'command=My_Company_type',
        timeout: 15000,
        async: true,
        beforeSend: function(XMLHttpRequest) {

        },
        success: function(msg) {
            callback(msg)
        },
        error: function(data) {
        }

    })
    return res;
}



