はまじさんのChrome keyでhit a hintもどき

http://d.hatena.ne.jp/shinichiro_h/20090818#1250532101

色々足りない.けれど,これ以上サイズの大きいスクリプトが,なぜか動かないので,これ以上いじれない.
はまじさんに直してもらう(か,解決方法を聞く)

公開しちゃえば誰かが直してくれるだろうと思ったら
サイズの大きいスクリプトが"Request-URI Too Large"とでてuploadできない.
ので,はまじさんに直してもらう

しかし,はまじさんがいない

var hah=document._hah;
if(!hah){
hah=document._hah=new Object;
hah.isShown=false;
addEventHandler();
}
var digitChars = "HJKLYUIO";
toggleHitAHint();
function addEventHandler() {
  document.body.addEventListener(
    'keydown',
    function(event) {
      if (hah.isShown) {
        var key = event.keyCode;
        if (key==13) {
      document.getElementById('_hah_' + hah.typedText)._hah_link.focus();
      toggleHitAHint();
    } else if (key>=65&&key<=90) {
          var ch = String.fromCharCode(0x41+key-65);
          if (document.getElementById('_hah_' + hah.typedText + ch)) {
        setHaHColor(hah.typedText, '#dfe');
        hah.typedText += ch;
        setHaHColor(hah.typedText, 'red');
      }
          cancelEvent(event); 
        }
      }
    }
  );
}
function getPos(elem) {
  var rect = elem.getBoundingClientRect();
  return {top:rect.top + document.body.scrollTop,
          left:rect.left + document.body.scrollLeft};
}
function myDigit(d) {
  var len = digitChars.length;
  var retval = '';
  while(d >= 0) {
    retval = digitChars[d%len] + retval;
    d = Math.floor(d/len)-1;
  }
  return retval;
}
function cancelEvent(event) {
  event.returnValue = false;
  event.cancelBubble= true;
}
function toggleHitAHint() {
  if (hah.isShown) {
    while(1) {
      var elems = document.getElementsByClassName('_hah');
      if (elems.length == 0) break;
      var e = elems[0];
      var parent = e.parentNode;
      parent.removeChild(e);
    }
  } else {
    hah.typedText = '';
    var n = 0;
    var nodes = document.links;
    for (var i = 0; i < nodes.length; i++ ) {
      var node = nodes[i];
      var pos = getPos(node);
      var e = document.createElement('div');
      var text = myDigit(n)
      e.innerHTML = text;
      e.setAttribute('class', '_hah');
      e._hah_link = node;
      e.setAttribute('id', '_hah_' + text);
      e.setAttribute('style', 'position:absolute;background-color:#cddeee;border: solid 1px #9bbdbe;z-index:100;color:black;font-weight:normal;font-size:10px;letter-spacing:0.2em;padding:0.25em 0.25em;' +
             'top:' + pos.top + 'px;left:' + pos.left + 'px;');
      document.body.appendChild(e);
      n++;
    }
  }
  hah.isShown ^= 1;
}
function setHaHColor(text, color) {
  var e = document.getElementById('_hah_' + text);
  if(e) e.style.backgroundColor = color;
}

お名前: