グループにしたアンカー部分をタブキーでフォーカスをループさせる

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>test</title>
<form action="#">
<p id="pp">
<a href="#">abc</a>
<a href="#">abc</a>
<a href="#">abc</a>
</p>
<p id="qq">
<a href="#">abc</a>
<a href="#">abc</a>
<a href="#">abc</a>
</p>
<p id="rr">
<a href="#">abc</a>
<a href="#">abc</a>
<a href="#">abc</a>
</p>
<p>a</p>
</form>
<script type="text/javascript">
//@cc_on

var Kurukuru = (function ( createListener, get, next ) {
  return function ( id ) {
    var listener = createListener( id, get, next );
  
    document.getElementById( id )./*@if( @_jscript ) attachEvent('on' + @else@*/ addEventListener(/*@end@*/
      'keydown', listener, true);
  };
})(
  function ( tid, get, next ) {
    return function (evt) {
      var e  = evt./*@if( @_jscript ) srcElement @else@*/ target /*@end@*/;
      var keyCode = evt./*@if( @_jscript ) keyCode @else@*/ which /*@end@*/;
      var shift   = evt.shiftKey;
      var p, c;
      
      if( 'A' !== e.nodeName ) return;
      
      if( !shift && keyCode == 9 ) {
        if( p = get( next( e ), 'id', tid ) ) return;
        evt./*@if( @_jscript ) returnValue = false @else@*/ preventDefault() /*@end@*/;
        (p = next( e.parentNode )) && p.focus();
      }
    };
  },

  function (node, type, val) {
    return node ? (val == node[type]) ? node: arguments.callee(node.parentNode, type, val): null;
  },
  
  function ( n ) {
    var e;

    while (n) {
      e = n.firstChild || n.nextSibling
      if (! e) {
        do {
          if ((n = n.parentNode) && n.nodeName == 'BODY') return null;
        } while (! (e = n.nextSibling))
      }
      n = e;
      if( 1 === n.nodeType && 'A' == n.nodeName ) return n;
    }
    return null;
  }

);


Kurukuru('pp');
Kurukuru('qq');
Kurukuru('rr');


</script>