リンクを左ボタン長押しによって新規タブに開きたい

きっかけは、これ。
http://d.hatena.ne.jp/rikuba/20100403/1270228018

自分なりに書いてみた。やはりというか、イベントを外すのが面倒。

<!DOCTYPE html>
<title>リンクを左ボタン長押しによって新規タブに開きたい</title>

<style type="text/css">
</style>

<body>
<h1><a href="#">新しいページに移る</a></h1>
<script>
(function (wait) { //@cc_on
  var timer;

  var handler = function (evt/*EventObject*/) {
    var w, n;

    switch (evt.type) {
    case 'mousedown' :
      n = evt./*@if (1) srcElement @else@*/ target /*@end@*/;
      if ('A' === n.nodeName)
        timer = + new Date;
      break;

    case 'click' :
      n = evt./*@if (1) srcElement @else@*/ target /*@end@*/;
      if ('A' === n.nodeName) {
        if (wait < ((+ new Date) - timer)) {
          w = n.ownerDocument./*@if (1) parentWindow @else@*/ defaultView /*@end@*/.open (n.href);
          return evt./*@if (1) returnValue = false @else@*/ preventDefault () /*@end@*/;
        }
      }
      break;

    case 'unload' :
      document./*@if (1) detachEvent ('on' + @else@*/ removeEventListener (/*@end@*/
        'mousedown', handler, false);
      document./*@if (1) detachEvent ('on' + @else@*/ removeEventListener (/*@end@*/
        'click', handler, false);
      /*@if (1) attachEvent ('on'+ @else@*/ addEventListener (/*@end@*/
        'unload', handler, false);
      break;
    }
  };


  var init = function () {
    document./*@if (1) attachEvent ('on'+ @else@*/ addEventListener (/*@end@*/
      'mousedown', handler, false);
    document./*@if (1) attachEvent ('on'+ @else@*/ addEventListener (/*@end@*/
      'click', handler, false);
    /*@if (1) attachEvent ('on'+ @else@*/ addEventListener (/*@end@*/
      'unload', handler, false);
  };
  
  this.achorSwitcher = init;
})(500);

achorSwitcher ();

</script>