var Login = {
  chlng: ""
};

Ext.onReady(function() {
  Login.readyHandle();
});

Login.readyHandle = function() {
  Login.init();
};

Login.init = function() {
  Ext.get("sub").on('click',Login.getRandom);
  //Ext.get("loginForm").dom.onkeypress = Login.pressKeyFunc;
};

Login.getRandom = function() {
  
  if( Login.checkForm() ) {
    var userType = Ext.get("userType").dom.value;
	  if( "ikeySys" == userType || "ikeyOrg" == userType|| "ikeydl" == userType|| "jiansheju" == userType) {
	    var url = CONTEXT_PATH + "/webuser/WebUser";
	    Ext.Ajax.request({
	      url: url,
	      method: "post",
	      params: "action=getRandom",
	      callback: function(options, success, response) {
				  if(!success) {
				    alert("服务器端运行出错");
				  } else {
				    var resultObj = Ext.decode(response.responseText);
				    if(!resultObj) {
				      alert("错误<br>"+response.responseText);
				    }else if (resultObj.success === true){
				      if( resultObj.strRandomClient ) {
				        //alert("随机数字符串："+resultObj.strRandomClient);
				        Login.chlng = resultObj.strRandomClient;
				        var returnInfo = Login.getSummary();
				        if( null != returnInfo ) {
				          Login.submitLogin(userType,returnInfo);
				        }
				      } else {
				        alert("登录失败！获取数据出错。");
				      }
				    }else{
				      alert("登录失败!\n"+resultObj.message);
				    }
				  }
				}
	    });
	  } else {
      Login.submitLogin("general",null);
	  }
	  
  }
};

/*
Login.getRandomCallback = function(options, success, response) {
  if(!success) {
    alert("服务器端运行出错");
  } else {
    var resultObj = Ext.decode(response.responseText);
    if(!resultObj) {
      alert("错误<br>"+response.responseText);
    }else if (resultObj.success === true){
      if( resultObj.strRandomClient ) {
        //alert("随机数字符串："+resultObj.strRandomClient);
        Login.chlng = resultObj.strRandomClient;
        var returnInfo = Login.getSummary();
        if( null != returnInfo ) {
          Login.submitLogin(userType,returnInfo);
        }
      } else {
        alert("登录失败！获取数据出错。");
      }
    }else{
      alert("登录失败!\n"+resultObj.message);
    }
  }
};
*/

Login.submitLogin = function(userType,resultObj) {
	var verifyImage = document.getElementById("verifyImage").value
  var params = "&verifyImage="+verifyImage+"&url="+location.href.replaceAll("&","*");
  if( "ikeySys" == userType || "ikeyOrg" == userType ||"ikeydl" == userType||"jiansheju" == userType) {
    if( resultObj && resultObj.iKeyDigest && resultObj.serialNumber ) {
	    //Ext.get("iKeyDigest").dom.value = iKeyDigest;
	    //Ext.get("serialNumber").dom.value = serialNumber;
	    var iKeyDigest = resultObj.iKeyDigest;
	    var serialNumber = resultObj.serialNumber;
	    var pwd = Ext.get("pwd").dom.value;
	    
	    params += "&pwd="+pwd+"&iKeyDigest="+iKeyDigest+"&serialNumber="+serialNumber;
	  } else {
	    alert("获取的IKey数据异常！");
	  }
  } else {
    var userName = Ext.get("userName").dom.value;
    var pwd = Ext.get("pwd").dom.value;
    
    params += "&userName="+userName+"&pwd="+pwd;
  }
  var url = CONTEXT_PATH + "/webuser/WebUser";
  Ext.Ajax.request({
    url: url,
    method: "post",
    params: "action=webLogin&userType="+userType+params,
    callback: Login.submitLoginCallback
  });
};

Login.submitLoginCallback = function(options,success,response){
  if (!success){
    alert("服务器端运行出错");
  }else{
    var resultObj = Ext.decode(response.responseText);
    if(!resultObj) {
      alert("错误<br>"+response.responseText);
    }else if (resultObj.success === true){
      if( resultObj.userType && (resultObj.userType == "ikeySys"||resultObj.userType == "ikeydl"|| resultObj.userType == "jiansheju")) {
        location = CONTEXT_PATH + "/ztbIndex.jsp";
      } else if( resultObj.userType && resultObj.userType == "ikeyOrg" || resultObj.userType == "general"  ) {
        location = CONTEXT_PATH + "/hnweb/UserLogin/my_index.jsp";
      }else {
        alert(resultObj.message);
      }
    }else{
      alert("登录失败!\n"+resultObj.message);
    }
  }
};

Login.pressKeyFunc = function() {
  //alert(event.keyCode)
  Login.getRandom();
  return false;
};

Login.checkForm = function(){
	if( document.getElementById("userType").value == "general" ) {
	  if( document.getElementById("userName").value.length == 0 ) {
	    alert("请输入用户名！");
	    document.getElementById("userName").focus();
	    return false;
	  }
	}
  
	if( document.getElementById("pwd").value.length == 0 ) {
	  alert("请输入密码！");
	  document.getElementById("pwd").focus();
	  return false;
	}
	
	if( document.getElementById("verifyImage").value.length == 0 ) {
	  alert("请输入验证码！");
	  document.getElementById("verifyImage").focus();
	  return false;
	}
	return true;
};

String.prototype.replaceAll  = function(s1,s2){    
  return this.replace(new RegExp(s1,"gm"),s2);    
}

Login.getSummary = function() {
  var libver, drvver, digest, bstr, iKeyDigest, result, sn;
  var summaryAndSN = {};
  //alert(iKeyClient);
  try {
    libver = iKeyClient.GetLibVersion().toString(16);
    drvver = iKeyClient.GetDriverVersion().toString(16);
    //bstr = iKeyClient.GetStringProperty();
    //alert(libver);
    //alert(drvver);
    try{
      result = iKeyClient.OpenDevice(1, "");
      iKeyClient.ChangeDir(0x200,0x22,"");
  
      sn = iKeyClient.GetStringProperty(0x07, 0, "");
      iKeyClient.OpenFile(0x40, 0x221);
      //alert("生成的客户端挑战码：" + chlng);
      //chlng = "119,42,51,104,52,68,155,181,126,47,71,0,134,47,71,0";
      digest = iKeyClient.HashToken(1, 0, Login.chlng);
      //alert("第一轮哈希运算结果 : "+digest);
      iKeyClient.CloseFile();
      iKeyClient.OpenFile(0x40, 0x222);
      iKeyDigest = iKeyClient.HashToken(1, 0, digest);
      //alert("第二轮哈希运算结果 : "+iKeyDigest);
      iKeyClient.CloseFile();
      iKeyClient.CloseDevice();
      
      summaryAndSN.iKeyDigest = iKeyDigest;
      summaryAndSN.serialNumber = sn;
      return summaryAndSN;
    } catch(e) {
      //alert(e.message);
      alert("iKey用户登录失败，请确认以下两项：\n1.是否有插入iKey设备。\n2.是否为该设备安装了驱动程序。\n如果以上两项均为是，仍然无法登录请联系本中心。");//(parseInt(e.number)).toString(16)
      iKeyClient.CloseDevice();
      return null;
    }
  } catch(e) {
    alert("iKey用户登录失败，服务器未安装相关控件。");
    return null;
  }
  
};
