function accessKeyListener(event)
{
  if (event.shiftKey || event.ctrlKey || event.metaKey || event.altKey)
    return;
    
  
  var t = event.target.tagName.toLowerCase();
  if (t == "input" || t == "textarea" || t == "select")
    return;

  var s = String.fromCharCode(event.charCode);
  if (!s)
    return;

  var a, b;
  for (var i = 0; a = document.links[i]; ++i) {
    b = a.getAttribute("accesskey");
    if (b != null && b.toLowerCase() == s.toLowerCase()) {
      a.focus();
      location.href = a.href;
    }
  }
  for (var i = 0; a = document.getElementsByTagName("input")[i]; ++i) {
    b = a.getAttribute("accesskey");
    if (b != null && b.toLowerCase() == s.toLowerCase()) {
      a.select();
      event.preventDefault(); // cancel typing (needed for safari but not for firefox)
    }
  }
}

function escKeyListener(event)
{
  if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey)
    return;

  if (event.keyCode == 27) { // DOM_VK_ESCAPE
    var t = event.target.tagName.toLowerCase();
    if (t == "input" || t == "textarea" || t == "select") {
      event.target.blur();
      event.preventDefault();
    }
  }
}

if (window.addEventListener) {
  window.addEventListener("keypress", accessKeyListener, false);
  window.addEventListener("keydown", escKeyListener, false);
}

