// Error reporting
window.onerror =
  function(m,u,l) {
    if (Error._DEBUG) {
      var s = 'JavaScript error\n-----------------\nMessage: ' + m + '\nURL: ' + u + '\nLine: ' + l + '\n';
      var o = window.navigator;
      s += '\nNavigator:\n---------\n';
      for(var p in o)
        s += p + ': ' + o[p] + '\n';
      // Only send first message
      Error._DEBUG = false;
      Error.report(s);
      return true;
    }
    else
      return false;
  };

Error.report =
  function(s) {
    var xhr = new XHR(25000,1);
    // On abort
    xhr.onabort =
      function() {
        if (!this.retries)
          Error.display('A JavaScript error occured. We tried reporting it but failed. The error message is\n\n' + s);
      };
    // On response
    xhr.onreadystateloaded =
      function() {
        if (this.getResponseHeader('Application-status') == 'OK')
          Error.display('A JavaScript error occured and have been reported.\n\nWe apologize for the inconvenience.\n\nThe JSLab Team.')
        else
          Error.display('A JavaScript error occured. We tried reporting it but failed. The error message is\n\n' + s);
      };
    xhr.open('POST','http://www.jslab.dk/js.error.php',true);
    xhr.send(s);
  };

Error.display =
  function(s) {
    alert(s);
  };