// Инициализируем таблицу перевода
var trans = [];
for (var i = 0x410; i <= 0x44F; i++)
  trans[i] = i - 0x350; // А-Яа-я
trans[0x401] = 0xA8;    // Ё
trans[0x451] = 0xB8;    // ё

window.escapeUTF8 = function(str) {
  str = '' + str;
  var ret = [];
  for (var i = 0; i < str.length; i++) {
    var n = str.charCodeAt(i);
    if (typeof trans[n] != 'undefined')
      n = trans[n];
    if (n <= 0xFF)
      ret.push(n);
  }
  return window.escape(String.fromCharCode.apply(null, ret));
}

function string2hex(s) {
  var res = '';
  for (var i=0, n; i<s.length; i++) {
    n = s.charCodeAt(i).toString(16).toUpperCase();
    while (n.length < 3) n = '0' + n;
    res += n;
  }
  return res;
}
function hex2string(h) {
  var res = '';
  for (var i=0; i<h.length; i=i+3) {
    res += String.fromCharCode('0x'+h.slice(i,i+3));
  }
  return res;
}