var digitArray = new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');


function toHex(n)
{
  var result = ''
  var start = true;
  for (var i=32; i>0;)
  {
    i-=4;
    var digit = (n>>i) & 0xf;
    if (!start || digit != 0)
    {
      start = false;
      result += digitArray[digit];
    }
  }
  return (result==''?'0':result);
}



function pad(str, len, pad)
{
  var result = str;
  for (var i=str.length; i<len; i++)
  {
    result = pad + result;
  }
  return result;
}



function ntos(n)
{
  n = n.toString(16);
  if (n.length == 1) n = "0" + n;
  n = "%" + n;
  return unescape(n);
}


function encodeHex(str)
{
  var result = "";
  for (var i = 0; i < str.length; i++)
  {
    result += pad(toHex(str.charCodeAt(i)&0xff),2,'0');
  }
  return result;
}


function decodeHex(str)
{
  str = str.replace(new RegExp("s/[^0-9a-zA-Z]//g"));
  var result = "";
  var buf = "";
  for (var i=0; i<str.length; i++)
  {
    buf += str.charAt(i);
    if (buf.length == 2)
    {
      result += ntos(eval('0x'+buf));
      buf = "";
    }
  }
  return result;
}



