function trim(str)
{
  while(str.charAt(0)==" ")
  {
    str=str.substr(1);
  }
  while(str.charAt(str.length-1)==" ")
  {
    str=str.substring(0,str.length-1);
  }
  return str;
}

function onPageLoad()
{
  document.loginform.username.focus();
//window.open("/agent.html","pop","toolbar=0,scrollbars=1,width=420,height=450")
}

function send()
{
  var username = document.loginform.username.value;
  username = trim(username);
  if(username == "")
  {
    alert("用户名不能为空，请输入用户名!")
    document.loginform.username.focus();
    return false;
  }
  var domainname = document.loginform.domainname.value;
  domainname = trim(domainname);
  if(domainname == "")
  {
    alert("邮箱域名不能为空，请输入邮箱域名!")
    document.loginform.domainname.focus();
    return false;
  }

  if(domainname.indexOf(".") == -1)
  {
    alert("邮箱域名不合法，请输入邮箱域名!")
    document.loginform.domainname.focus();
    return false;
  }

  document.loginform.domainname.value = domainname;

  var psw = document.loginform.psw.value;
  if(psw == "")
  {
    alert("密码不能为空，请输入密码！");
    document.loginform.psw.focus();
    return false;
  }
  document.loginform.user.value = username + '@' + domainname;


  do_sha1();
  //注释清空用户密码，因为这样会造成jes系统无法取得用户密码 luoyf modified
  //document.loginform.psw.value = "";

  //alert("psw hash: "+document.loginform.pass.value);

  //luoyf
  var luoaction = "/cgi-bin/websso/login.cgi";
  var acton_str = new String(luoaction);

  //var acton_str = new String(document.loginform.action);
  //alert(acton_str);

  var tmp_str1;
  var cur_action_domain;

  var re1 = /\/cgi-bin\/websso\/login.cgi/g;
  var re2 = /http:\/\//g;

  tmp_str1 = acton_str.replace(re1, "");
  //alert(tmp_str1);
  cur_action_domain = tmp_str1.replace(re2, "");
  //alert("cur_action_domain=" + cur_action_domain);

  //alert(cur_web_domain);
  var is_sina_domain;
  var search_ptr = /\.sina\.net/i;
  //luoyf
  var domain = document.domain;
  luocur_location = domain;
  //if ( domain=='mail.sina.net'||domain=='mail.sinanet.com' )
  // var luocur_location = "http://mailo.sina.net/";
  //else
  // var luocur_location = "http://mailxo.sina.net/";

  //var luocur_location = "http://mailo.sina.net/";
  var cur_location1 = new String(luocur_location);
  var cur_location = new String(document.location);
  //alert(cur_location);

  is_sina_domain = cur_location.search(search_ptr);
  //alert(is_sina_domain);

  if(is_sina_domain == -1)
  {
    //非从sina.net web登录用户
    //直接读取action url数据
    document.loginform.outurl.value = cur_location;//login out url
    document.loginform.curdomain.value = cur_action_domain;//mail serv
  }
  else
  {
    //从sina web服务器登录
    document.loginform.outurl.value = cur_location;
    document.loginform.curdomain.value = cur_location1;
  }
  //alert(document.loginform.curdomain.value);
  //alert(document.loginform.outurl.value);
  document.loginform.submit();
  return true
}

function wc(name,value){
  var e = new Date ();
  e.setTime (e.getTime() + (365*24*60*60*1000));
  e = e.toGMTString()
  document.cookie=name+"="+value+";path=/;expires="+e+";domain=mail.sina.net;"
//alert(document.cookie);
}

// convert a 32-bit value to a 8-char hex string
function cvt_hex( val )
{
  var str="";
  var i;
  var v;
  for( i=7; i>=0; i-- )
  {
    v = (val>>>(i*4))&0x0f;
    str += v.toString(16);
  }
  return str;
}

// return a hex value LSB first
function lsb_hex( val )
{
  var str="";
  var i;
  var vh;
  var vl;

  for( i=0; i<=6; i+=2 )
  {
    vh = (val>>>(i*4+4))&0x0f;
    vl = (val>>>(i*4))&0x0f;
    str += vh.toString(16) + vl.toString(16);
  }
  return str;
}

// rotate left circular
function rotate_left( n, s )
{
  var t4 = ( n<<s ) | (n>>>(32-s));
  return t4;
}

// calculate the hash
function do_sha1()
{
  var blockstart; // which block of words from the dataare we using now?
  var i, j;
  var W = new Array(80);
  // initial constants
  var H0 = 0x67452301;
  var H1 = 0xEFCDAB89;
  var H2 = 0x98BADCFE;
  var H3 = 0x10325476;
  var H4 = 0xC3D2E1F0;
  // working variables
  var A, B, C, D, E;
  var temp;
  // get message to hash
  var msg = document.loginform.psw.value;

  // note current length
  var msg_len = msg.length;

  // convert to a 32-bit word array
  var word_array = new Array();
  for( i=0; i<msg_len-3; i+=4 )
  {
    // convert 4 bytes to a word
    j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
    msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
    word_array.push( j );
  }

  // handle final bits, add beginning of padding: 1 bit, then 0 bits
  switch( msg_len % 4 )
  {
    case 0:
      // text length was a multiple of 4 bytes, start padding
      i = 0x080000000; // 4 bytes padding
      break;

    case 1:
      // one byte of text left
      i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000; // 3 bytes padding
      break;

    case 2:
      // two bytes of text left
      i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16
      | 0x08000; // 2 bytes padding
      break;

    case 3:
      // three bytes of text left
      i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16
      | msg.charCodeAt(msg_len-1)<<8 | 0x80; // 1 byte padding
      break;

    default:
      window.alert("Something went weird in the switch!")
      return;
  }

  // handle the end of the text and beginning of the padding
  word_array.push( i );

  // pad to 448 bits (mod 512 bits) = 14 words (mod 16 words)
  while( (word_array.length % 16) != 14 )
    word_array.push( 0 );

  // add 64-bit message length (in bits)
  word_array.push( msg_len>>>29 );
  word_array.push( (msg_len<<3)&0x0ffffffff );

  // Process each 16-word block.
  for ( blockstart=0; blockstart<word_array.length; blockstart+=16 )
  {
    // create entries in W array
    for( i=0; i<16; i++ )
      W[i] = word_array[blockstart+i];
    for( i=16; i<=79; i++ )
      W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);

    // copy state
    A = H0;
    B = H1;
    C = H2;
    D = H3;
    E = H4;

    // update state variables
    for( i= 0; i<=19; i++ )
    {
      temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;

      // update state
      E = D;
      D = C;
      C = rotate_left(B,30);
      B = A;
      A = temp;
    }

    for( i=20; i<=39; i++ )
    {
      temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;

      // update state
      E = D;
      D = C;
      C = rotate_left(B,30);
      B = A;
      A = temp;
    }

    for( i=40; i<=59; i++ )
    {
      temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;

      // update state
      E = D;
      D = C;
      C = rotate_left(B,30);
      B = A;
      A = temp;
    }

    for( i=60; i<=79; i++ )
    {
      temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6CA62C1D6) & 0x0ffffffff;
      // update state
      E = D;
      D = C;
      C = rotate_left(B,30);
      B = A;
      A = temp;
    }
    H0 = (H0 + A) & 0x0ffffffff;
    H1 = (H1 + B) & 0x0ffffffff;
    H2 = (H2 + C) & 0x0ffffffff;
    H3 = (H3 + D) & 0x0ffffffff;
    H4 = (H4 + E) & 0x0ffffffff;
  } // of loop on i
  // process output
  document.loginform.pass.value = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2)
  + cvt_hex(H3) + cvt_hex(H4);
}