﻿// JScript 文件
function showloginpop(ForwordUrl,lan, NewWindow)
{ 
    if(lan)
    {
    }
    else
    {
        lan='en_US';
    }

//保存登录成功后将要转入的页面URL
    if(ForwordUrl)
    {
        document.ForwordUrl = ForwordUrl;
    }
    else
    {
        document.ForwordUrl = null;
    }
    
    if(NewWindow)
    {
        document.NEWWINDOW = true;
    }
    else
    {
        document.NEWWINDOW = false;
    }

    setquicklogin(lan);
    
    jq(document).ready(function(){
        var loginpop = document.getElementById("loginpop");
        var loginiframe = document.getElementById("loginif");
        
        jq("html").attr("style", "overflow-x: hidden; overflow-y: hidden; ");
        
        loginpop.style.visibility = "visible";
	    loginiframe.style.visibility = "visible";
        
        var user = document.getElementById("poploginUser");
        user.focus();
        if(document.getElementsByTagName("object")){
           var obj =  document.getElementsByTagName("object");
           for(var i=0; i<obj.length; i++){
                obj[i].style.visibility = "hidden";
           }
       }
       else {}        
    });
}
function closeloginpop()
{
   jq(document).ready(function(){
       jq("html").attr("style", "overflow-x: auto; overflow-y: auto; ");
       if(document.getElementsByTagName("object")){
           var obj =  document.getElementsByTagName("object");
           for(var i=0; i<obj.length; i++){
                obj[i].style.visibility = "visible";
           }
       }
       else {}   
       
      try{

                jq("#loginpop").remove(); 
                jq("#loginif").remove(); 
        }
        catch(err)
        {


        }
 });
}

function poplogin(language)
{
    var user = document.getElementById("poploginUser");
    var pwd = document.getElementById("poploginPwd");
    var poploginerrorlabel = document.getElementById("poploginerrorlabel");
    var checkmem = document.getElementById("logremember");
    
    if(user.value == "")
    {
       poploginerrorlabel.innerHTML = language=="zh_CN"?"帐号不能为空":"Account number can not be empty";
       return false;
    }
    if(pwd.value == "")
    {
       poploginerrorlabel.innerHTML =language=="zh_CN"?"密码不能为空":"Password can not be empty";
       return false;
    }
    poploginerrorlabel.innerHTML = language=="zh_CN"?"登录中......":"Logging in...... ";
    var params = new Object();
    params.cmd = "login";
    params.type = document.getElementById("selectvalue").value;
    params.user = user.value;
    params.pwd = calcMD5(pwd.value);
    if(checkmem.checked)
    {
        params.ismem = "1";
    }
    ajax.get("AjaxService/doLogin.ashx", params,
   function(req) {
                var response = getResponseText(req);

                if(response == "")
                {
                   window.location = location.href;
                }
                else if(response == "err")
                {
                    poploginerrorlabel.innerHTML = language=="zh_CN"?"帐号或密码错误":"Account number or password error";
                }
                else if(response=="NoValidateMobile"){
                    poploginerrorlabel.innerHTML = language=="zh_CN"?"<span>手机未验证！</span>去<a style='color:#043577' href='MobileInfoWeb.aspx?param="+user.value+"'>验证</a>":"<span>Phone number is not verified！</span><a style='color:#043577' href='MobileInfoWeb.aspx?param="+user.value+"'>verified</a>";
                }
                else if(response=="NoValidateEmail"){
                    poploginerrorlabel.innerHTML = language=="zh_CN"?"<span>邮箱未验证！</span>去<a style='color:#043577' href='EmailInfoWeb.aspx?param="+user.value+"'>验证</a>":"<span>E-mail is not verified！</span><a style='color:#043577' href='EmailInfoWeb.aspx?param="+user.value+"'>verified</a>";
                }
                else
                {
                     closeloginpop();
                    //如果存在登录成功后需要转入的页面则转入该页面。
                    ExcuteResponse(response);
                    
                    jq(document).ready(function(){
                        setTimeout('ToIndex()', 1000); 
                     });
                }
            });
        }
            
            /*quicklogin 使用脚本*/

function ExcuteResponse(response)
{
    if(response)
    {
        jq(document).ready(function(){                   
                            
                            var rege=new RegExp(/(http[^\<"]+)(\")/g);
                            var arr=response.match(rege);
                            if(arr.length>0)
                            {
                                arr[0]=arr[0].replace('\"',"");
                                var script0=document.createElement("script");
                                script0.setAttribute('type','text/javascript');
                                script0.setAttribute('language','javascript');
                                script0.setAttribute('src',arr[0]);
                                document.body.appendChild(script0);
                            
                            }
                            if(arr.length>1)
                            {
                                 arr[1]=arr[1].replace('\"',"");
                                 var script1=document.createElement("script");
                                script1.setAttribute('type','text/javascript');
                                script1.setAttribute('language','javascript');
                                script1.setAttribute('src',arr[1]);
                                document.body.appendChild(script1);
                            }

        
        });
    }
}

 function ToIndex()
 {
    if(document.ForwordUrl)
    {  
       if(window.XMLHttpRequest)
       {
            window.location.replace(document.ForwordUrl);
       }
       else
       {
           if(document.NEWWINDOW)
            {
                document.NEWWINDOW = false;
                window.open(document.ForwordUrl, "_blank"); 
                window.location.reload();
            }
            else
            {
                window.location.replace(document.ForwordUrl);
            }
       }
    }
    else
    {
        window.location.reload();
    }
}

//logout
 function logout()
  {
    var params = new Object();
    params.cmd = "logout";
   ajax.get("AjaxService/doLogout.ashx", params,
   function(req) {
                    var response = getResponseText(req);
                    if(response && response !="err")
                    {                                
                            ExcuteResponse(response);
                            jq(document).ready(function(){
                            window.location="index.aspx";
                       });
                    }
                    else
                    {
                        window.location="index.aspx"
                    }
            });
  } 
  

             

function setquicklogin(lan)
{
    lan=nowlanguage;
    
    if(lan==null)
    {
        lan="en_US";
    }
    
    jq(document).ready(function(){
    
        if(document.getElementById("loginpop") == undefined)
        {
            var loginiframe = document.createElement("div");
	        loginiframe.setAttribute('name','BradIframe');
	        loginiframe.setAttribute('frameborder','0',0); 
	        loginiframe.id = "loginif";
            document.body.appendChild(loginiframe);
            
            var loginpop = document.createElement("div");
            loginpop.setAttribute("class", "pop_login_background");
            loginpop.className = "pop_login_background";
            loginpop.id = "loginpop";
            
            var contentHtml = [];
        
                if(lan=="en_US")
                {
                    contentHtml[contentHtml.length] = "<div class=\"pop_new_top\"><span class=\"pop_top_left\">Quick Login</span>";
                    contentHtml[contentHtml.length] = "<span class=\"pop_top_right\"><img src=\"App_Themes/White/default/images/pop_close.png\" width=\"12\" height=\"12\" ";
                    contentHtml[contentHtml.length] = " alt=\"close\" style=\"cursor:pointer; border:0;\" onclick=\"javascript:closeloginpop();\"/></span></div>";
                    contentHtml[contentHtml.length] = "<div class=\"pop_download_middle\"><div class=\"pop_login_content\"><table width=\"300\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
                    contentHtml[contentHtml.length] = "<tr><td valign = \"top\"><div id='divtype'  style='border:solid 1px #c0bfbf;width:85px;height:21px;clear:both;z-index:40;background-color:#ffffff;position:absolute'><input type='hidden' id='selectvalue' value='username' /> ";
	                contentHtml[contentHtml.length] = "<a class='selecttype' style=' width:15px;float:right; display:block' href='#' onblur='hidetypes(event);' onclick='javascript:showothers();'>";
	                contentHtml[contentHtml.length] = "<img height='18px' alt=\"close\" width='15px' src='App_Themes/White/default/images/downSelect.jpg'  /></a>";
	                if(window.navigator.userAgent.indexOf("MSIE")>=0){mobiltop="top";emailtop="top:40px;height:20px;";}else{mobiltop="margin-top";emailtop="";}
	                contentHtml[contentHtml.length] = "<a class='selecttype' id='login_username' style='float:left;text-decoration:none;color:#000000;'   onclick='hideandsetvalue(this.id)' onmouseover='jq(this).css(\"background-color\",\"#3379d2\");' onmouseout='jq(this).css(\"background-color\",\"#ffffff\");'  href='#'>UserName</a> ";
	                contentHtml[contentHtml.length] = "<a class='selecttype' id='login_mobile' style='display:none;text-decoration:none;color:#000000;"+mobiltop+":20px;height:20px;'  onclick='hideandsetvalue(this.id)'    href='#' onmouseover='jq(this).css(\"background-color\",\"#3379d2\");' onmouseout='jq(this).css(\"background-color\",\"#ffffff\");'>Mobile</a>";
                    contentHtml[contentHtml.length] = "<a class='selecttype' id='login_email' style='display:none;text-decoration:none;color:#000000;'  onmouseover='jq(this).css(\"background-color\",\"#3379d2\");' onmouseout='jq(this).css(\"background-color\",\"#ffffff\");'   onclick='hideandsetvalue(this.id)'  href='#'>Email</a>";
	                contentHtml[contentHtml.length] = "</div></td></tr><tr><td>";
                    contentHtml[contentHtml.length] = "<input tabindex='100' type='text' name='poploginUser' id='poploginUser'  onkeydown='loginpopKeyDownToPwd(event);' style='margin-left:0px;width:137px;'  />";
                    contentHtml[contentHtml.length] = "</td></tr><tr><td style='color:#000000'>Password：</td></tr><tr><td>";
                    contentHtml[contentHtml.length] = "<input tabindex='101' type='password' name='poploginPwd' id='poploginPwd'  onkeydown='loginpopKeyDown(event,\"en_US\");'  style='margin-left:0px;width:137px;'/>";
                    contentHtml[contentHtml.length] = "&nbsp;<a tabindex='106' href='#' onclick=\"window.open('getpassword.aspx');return false;\" target='_blank'";
                    contentHtml[contentHtml.length] = " onkeyup='loginpopKeyDownEnd(event);' onkeydown='loginpopKeyDownEnd(event);' class=\"span_q_blue span_q_underline\">Forgot password?</a>";
                    contentHtml[contentHtml.length] = "</td></tr><tr><td><input type=\"checkbox\" tabindex='102' id='logremember' name='remember' checked='true'  />&nbsp;<span class=\"span_q_blue\">Remember me</span></td>";
                    contentHtml[contentHtml.length] = "</tr><tr><td align=\"left\" style='height:40px;' valign='bottom'><span style='margin-right:0;'>";
                    contentHtml[contentHtml.length] = "<input  tabindex='103' type='button' value='Login'  title='Login' class=\"pop_new_login_button\" onclick='poplogin(\"en_US\");'style='cursor:pointer;' />";
                    contentHtml[contentHtml.length] = " </span><span>";
                    contentHtml[contentHtml.length] = "<a href='registerDefault.aspx' class='span_q_blue span_q_underline' >Free Register</a>";
                    contentHtml[contentHtml.length] = "</span></td></tr></table></div>";
                    contentHtml[contentHtml.length] = "<div style=\"color: red;text-align:center;\" id=\"poploginerrorlabel\"></div></div>";
                    
                  }else{
                    
                    contentHtml[contentHtml.length] = "<div class=\"pop_new_top\"><span class=\"pop_top_left\">快速登录</span>";
                    contentHtml[contentHtml.length] = "<span class=\"pop_top_right\"><img src=\"App_Themes/White/default/images/pop_close.png\" width=\"12\" height=\"12\" ";
                    contentHtml[contentHtml.length] = " alt=\"close\" style=\"cursor:pointer; border:0;\" onclick=\"javascript:closeloginpop();\"/></span></div>";
                    contentHtml[contentHtml.length] = "<div class=\"pop_download_middle\"><div class=\"pop_login_content\"><table width=\"300\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
                    contentHtml[contentHtml.length] = "<tr><td valign = \"top\"><div id='divtype'  style='border:solid 1px #c0bfbf;width:85px;height:18px;clear:both;z-index:40;background-color:#ffffff;position:absolute'>";
	                contentHtml[contentHtml.length] = "<a class='selecttype' id='login_username' style='float:left;'  onclick='hideandsetvalue(this.id)'  href='#'>UserName</a> ";
	                contentHtml[contentHtml.length] = "<a class='selecttype' style=' width:15px;float:right; display:block' href='#' onblur='hidetypes();' onclick='javascript:showothers();'>";
	                contentHtml[contentHtml.length] = "<img height='18px' alt=\"close\" width='15px' src='App_Themes/White/default/images/downSelect.jpg'  /></a><input type='hidden' id='selectvalue' value='username' /> ";
	                contentHtml[contentHtml.length] = "<a class='selecttype' id='login_mobile' style='display:none; '   onclick='hideandsetvalue(this.id)'    href='#'>Mobile</a>";
                    contentHtml[contentHtml.length] = "<a class='selecttype' id='login_email' style='display:none'   onclick='hideandsetvalue(this.id)'  href='#'>Email</a>";
	                contentHtml[contentHtml.length] = "</div></td></tr><tr><td>";
                    contentHtml[contentHtml.length] = "<input tabindex='100' type='text' name='poploginUser' id='poploginUser'  onkeydown='loginpopKeyDownToPwd(event);' style='margin-left:0px;width:137px;'  />";
                    contentHtml[contentHtml.length] = "</td></tr><tr><td>密码：</td></tr><tr><td>";
                    contentHtml[contentHtml.length] = "<input tabindex='101' type='password' name='poploginPwd' id='poploginPwd'  onkeydown='loginpopKeyDown(event,\"en_US\");'  style='margin-left:0px;width:137px;'/>";
                    contentHtml[contentHtml.length] = "&nbsp;<a tabindex='106' href='#' onclick=\"window.open('getpassword.aspx');return false;\" target='_blank'";
                    contentHtml[contentHtml.length] = " onkeyup='loginpopKeyDownEnd(event);' onkeydown='loginpopKeyDownEnd(event);' class=\"span_q_blue span_q_underline\">忘记密码？</a>";
                    contentHtml[contentHtml.length] = "</td></tr><tr><td><input type=\"checkbox\" tabindex='102' id='logremember' name='remember' checked='true'  /><span class=\"span_q_blue\">记住密码</span></td>";
                    contentHtml[contentHtml.length] = "</tr><tr><td align=\"left\" style='height:40px;' valign='bottom'><span style='margin-right:0;'>";
                    contentHtml[contentHtml.length] = "<input  tabindex='103' type='button' value='Login'  title='Login' class=\"pop_new_login_button\" onclick='poplogin(\"en_US\");'style='cursor:pointer;' />";
                    contentHtml[contentHtml.length] = " </span><span>";
                    contentHtml[contentHtml.length] = "<a href='registerDefault.aspx' class='span_q_blue span_q_underline' >免费注册</a>";
                    contentHtml[contentHtml.length] = "</span></td></tr></table></div>";
                    contentHtml[contentHtml.length] = "<div style=\"color: red;text-align:center;\" id=\"poploginerrorlabel\"></div></div>";
                    
                    }
            
            loginpop.innerHTML = contentHtml.join("");
	        document.body.appendChild(loginpop);
	    }
	  });
}


function loginpopKeyDownToPwd(ev)
{
        var ev = ev || window.event;
        var   gk=ev.keyCode;   
        if(gk == 13)
        {
           var pwd = document.getElementById("poploginPwd");
           pwd.focus();
        }    
}

function loginpopKeyDown(ev,language)
{
        var ev = ev || window.event;
        var   gk=ev.keyCode;   
        if(gk == 13)
        {
           poplogin(language);
        }
}


function showothers(){

    document.getElementById("login_mobile").style.display="block";
    document.getElementById("login_email").style.display="block";
    document.getElementById("login_username").style.display="block"; 
    document.getElementById("divtype").style.height="64px"; 
    
}
 
function hidetypes(e)
{  
    var Target = document.activeElement;
    
    if(navigator.appName.indexOf("Microsoft Internet Explorer") < 0)
    {   
       Target = e.explicitOriginalTarget.parentNode;
    }
    
    if(Target.id == "login_mobile" || Target.id == "login_email" || Target.id == "login_username")
    {
        hideandsetvalue(Target.id);
    }
    else
    {
        hideandsetvalue("login_username");
    }
}       
function hideandsetvalue(id){
    if(id=="login_username"){
     document.getElementById("login_mobile").style.display="none";
     document.getElementById("login_email").style.display="none";
     document.getElementById("selectvalue").value="username";
    }
    else if(id=="login_mobile"){
        document.getElementById("login_mobile").style.display="inline";
        document.getElementById("login_email").style.display="none";
        document.getElementById("login_username").style.display="none";
        document.getElementById("selectvalue").value="mobile";
    }
    else{
        document.getElementById("login_email").style.display="inline";
        document.getElementById("login_mobile").style.display="none";
        document.getElementById("login_username").style.display="none"; 
        document.getElementById("selectvalue").value="email";
    }
    document.getElementById("divtype").style.height="18px"; 
}

/****************************************************************************** 
*
* A JavaScript implementation of the RSA Data Security, Inc. MD5
* Message-Digest Algorithm.
*
* Copyright (C) Paul Johnston 1999. Distributed under the LGPL.
*****************************************************************************/
/* to convert strings to a list of ascii values */
var sAscii = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var sAscii = sAscii + "[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";

/* convert integer to hex string */
var sHex = "0123456789ABCDEF";
function hex(i)
{
  h = "";
  for(j = 0; j <= 3; j++)
  {
    h += sHex.charAt((i >> (j * 8 + 4)) & 0x0F) +
         sHex.charAt((i >> (j * 8)) & 0x0F);
  }
  return h;
}

/* add, handling overflows correctly */
function add(x, y)
{
  return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);
}

/* MD5 rounds functions */
function R1(A, B, C, D, X, S, T)
{
  q = add(add(A, (B & C) | (~B & D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R2(A, B, C, D, X, S, T)
{
  q = add(add(A, (B & D) | (C & ~D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R3(A, B, C, D, X, S, T)
{
  q = add(add(A, B ^ C ^ D), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

function R4(A, B, C, D, X, S, T)
{
  q = add(add(A, C ^ (B | ~D)), add(X, T));
  return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

/* main entry point */
function calcMD5(sInp) {

  /* Calculate length in machine words, including padding */
  wLen = (((sInp.length + 8) >> 6) + 1) << 4;
  var X = new Array(wLen);

  /* Convert string to array of words */
  j = 4;
  for (i = 0; (i * 4) < sInp.length; i++)
  {
    X[i] = 0;
    for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++)
    {
      X[i] += (sAscii.indexOf(sInp.charAt((i * 4) + j)) + 32) << (j * 8);
    }
  }

  /* Append padding bits and length */
  if (j == 4)
  {
    X[i++] = 0x80;
  }
  else
  {
    X[i - 1] += 0x80 << (j * 8);
  }
  for(; i < wLen; i++) { X[i] = 0; }
  X[wLen - 2] = sInp.length * 8;

  /* hard-coded initial values */
  a = 0x67452301;
  b = 0xefcdab89;
  c = 0x98badcfe;
  d = 0x10325476;

  /* Process each 16-word block in turn */
  for (i = 0; i < wLen; i += 16) {
    aO = a;
    bO = b;
    cO = c;
    dO = d;

    a = R1(a, b, c, d, X[i+ 0], 7 , 0xd76aa478);
    d = R1(d, a, b, c, X[i+ 1], 12, 0xe8c7b756);
    c = R1(c, d, a, b, X[i+ 2], 17, 0x242070db);
    b = R1(b, c, d, a, X[i+ 3], 22, 0xc1bdceee);
    a = R1(a, b, c, d, X[i+ 4], 7 , 0xf57c0faf);
    d = R1(d, a, b, c, X[i+ 5], 12, 0x4787c62a);
    c = R1(c, d, a, b, X[i+ 6], 17, 0xa8304613);
    b = R1(b, c, d, a, X[i+ 7], 22, 0xfd469501);
    a = R1(a, b, c, d, X[i+ 8], 7 , 0x698098d8);
    d = R1(d, a, b, c, X[i+ 9], 12, 0x8b44f7af);
    c = R1(c, d, a, b, X[i+10], 17, 0xffff5bb1);
    b = R1(b, c, d, a, X[i+11], 22, 0x895cd7be);
    a = R1(a, b, c, d, X[i+12], 7 , 0x6b901122);
    d = R1(d, a, b, c, X[i+13], 12, 0xfd987193);
    c = R1(c, d, a, b, X[i+14], 17, 0xa679438e);
    b = R1(b, c, d, a, X[i+15], 22, 0x49b40821);

    a = R2(a, b, c, d, X[i+ 1], 5 , 0xf61e2562);
    d = R2(d, a, b, c, X[i+ 6], 9 , 0xc040b340);
    c = R2(c, d, a, b, X[i+11], 14, 0x265e5a51);
    b = R2(b, c, d, a, X[i+ 0], 20, 0xe9b6c7aa);
    a = R2(a, b, c, d, X[i+ 5], 5 , 0xd62f105d);
    d = R2(d, a, b, c, X[i+10], 9 ,  0x2441453);
    c = R2(c, d, a, b, X[i+15], 14, 0xd8a1e681);
    b = R2(b, c, d, a, X[i+ 4], 20, 0xe7d3fbc8);
    a = R2(a, b, c, d, X[i+ 9], 5 , 0x21e1cde6);
    d = R2(d, a, b, c, X[i+14], 9 , 0xc33707d6);
    c = R2(c, d, a, b, X[i+ 3], 14, 0xf4d50d87);
    b = R2(b, c, d, a, X[i+ 8], 20, 0x455a14ed);
    a = R2(a, b, c, d, X[i+13], 5 , 0xa9e3e905);
    d = R2(d, a, b, c, X[i+ 2], 9 , 0xfcefa3f8);
    c = R2(c, d, a, b, X[i+ 7], 14, 0x676f02d9);
    b = R2(b, c, d, a, X[i+12], 20, 0x8d2a4c8a);

    a = R3(a, b, c, d, X[i+ 5], 4 , 0xfffa3942);
    d = R3(d, a, b, c, X[i+ 8], 11, 0x8771f681);
    c = R3(c, d, a, b, X[i+11], 16, 0x6d9d6122);
    b = R3(b, c, d, a, X[i+14], 23, 0xfde5380c);
    a = R3(a, b, c, d, X[i+ 1], 4 , 0xa4beea44);
    d = R3(d, a, b, c, X[i+ 4], 11, 0x4bdecfa9);
    c = R3(c, d, a, b, X[i+ 7], 16, 0xf6bb4b60);
    b = R3(b, c, d, a, X[i+10], 23, 0xbebfbc70);
    a = R3(a, b, c, d, X[i+13], 4 , 0x289b7ec6);
    d = R3(d, a, b, c, X[i+ 0], 11, 0xeaa127fa);
    c = R3(c, d, a, b, X[i+ 3], 16, 0xd4ef3085);
    b = R3(b, c, d, a, X[i+ 6], 23,  0x4881d05);
    a = R3(a, b, c, d, X[i+ 9], 4 , 0xd9d4d039);
    d = R3(d, a, b, c, X[i+12], 11, 0xe6db99e5);
    c = R3(c, d, a, b, X[i+15], 16, 0x1fa27cf8);
    b = R3(b, c, d, a, X[i+ 2], 23, 0xc4ac5665);

    a = R4(a, b, c, d, X[i+ 0], 6 , 0xf4292244);
    d = R4(d, a, b, c, X[i+ 7], 10, 0x432aff97);
    c = R4(c, d, a, b, X[i+14], 15, 0xab9423a7);
    b = R4(b, c, d, a, X[i+ 5], 21, 0xfc93a039);
    a = R4(a, b, c, d, X[i+12], 6 , 0x655b59c3);
    d = R4(d, a, b, c, X[i+ 3], 10, 0x8f0ccc92);
    c = R4(c, d, a, b, X[i+10], 15, 0xffeff47d);
    b = R4(b, c, d, a, X[i+ 1], 21, 0x85845dd1);
    a = R4(a, b, c, d, X[i+ 8], 6 , 0x6fa87e4f);
    d = R4(d, a, b, c, X[i+15], 10, 0xfe2ce6e0);
    c = R4(c, d, a, b, X[i+ 6], 15, 0xa3014314);
    b = R4(b, c, d, a, X[i+13], 21, 0x4e0811a1);
    a = R4(a, b, c, d, X[i+ 4], 6 , 0xf7537e82);
    d = R4(d, a, b, c, X[i+11], 10, 0xbd3af235);
    c = R4(c, d, a, b, X[i+ 2], 15, 0x2ad7d2bb);
    b = R4(b, c, d, a, X[i+ 9], 21, 0xeb86d391);

    a = add(a, aO);
    b = add(b, bO);
    c = add(c, cO);
    d = add(d, dO);
  }
  return hex(a) + hex(b) + hex(c) + hex(d);
}

