var base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var cipher = "Z18cXdRO2Vx9UgHfS7Crm.Qwk6P4lMYoLp3KqyI_GathWuFvjEsDnBzATJe5@b0iN";

function base64_encode(decStr) {
  decStr = escape(decStr);  //line add for chinese char
  var bits, dual, i = 0, encOut = '';
  while (decStr.length >= i + 3) {
    bits =
      (decStr.charCodeAt(i++) & 0xff) <<16 |
      (decStr.charCodeAt(i++) & 0xff) <<8  |
      decStr.charCodeAt(i++) & 0xff;
    encOut +=
      base64s.charAt((bits & 0x00fc0000) >>18) +
      base64s.charAt((bits & 0x0003f000) >>12) +
      base64s.charAt((bits & 0x00000fc0) >> 6) +
      base64s.charAt((bits & 0x0000003f));
  }
  if (decStr.length -i > 0 && decStr.length -i < 3) {
    dual = Boolean(decStr.length -i -1);
    bits =
      ((decStr.charCodeAt(i++) & 0xff) <<16) |
      (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
    encOut +=
      base64s.charAt((bits & 0x00fc0000) >>18) +
      base64s.charAt((bits & 0x0003f000) >>12) +
      (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') + '=';
  }
  return encOut
}

function base64_decode(encStr) {
  var bits, decOut = '', i = 0;
  for (; i<encStr.length; i += 4) {
    bits =
      (base64s.indexOf(encStr.charAt(i))    & 0xff) <<18 |
      (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 |
      (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 |
      base64s.indexOf(encStr.charAt(i +3)) & 0xff;
    decOut += String.fromCharCode(
        (bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
  }
  if (encStr.charCodeAt(i -2) == 61)
    undecOut = decOut.substring(0, decOut.length -2);
  else if (encStr.charCodeAt(i -1) == 61)
    undecOut = decOut.substring(0, decOut.length -1);
  else undecOut = decOut;
  return unescape(undecOut);  //line add for chinese
}

function munge(str) {
  var shift = str.length;
  var encoded = "";
  str = str.toLowerCase();
  for (j = 0; j < str.length; ++j) {
    if (cipher.indexOf(str.charAt(j)) == -1 ) {
      encoded += str.charAt(j);
    } else {
      encoded += cipher.charAt((cipher.indexOf(str.charAt(j)) + shift) % cipher.length);
    }
  }
  return encoded;
}

function demunge(str) {
  var shift = str.length;
  var decoded = "";
  var ltr;
  for (i = 0; i < str.length; ++i) {
    if (cipher.indexOf(str.charAt(i)) == -1) {
      ltr = str.charAt(i);
      decoded += (ltr);
    } else {
      ltr = (cipher.indexOf(str.charAt(i)) - shift + cipher.length) % cipher.length;
      decoded += (cipher.charAt(ltr));
    }
  }
  return decoded;
}

function clear_form(formName, inputName) {
  formName.elements[inputName].value ="";
}

function a(x) {
  /*
  document.write("<a hr"+"ef=\"ma"+"ilto:");
  document.write(base64_decode(x));
  document.write("\">");
  document.write(base64_decode(x));
  document.write("</a>");
  */
  document.write("<a hr"+"ef=\"ma"+"ilto:");
  document.write(demunge(x));
  document.write("\">");
  document.write(demunge(x));
  document.write("</a>");
}

