/*********************************************************************/
/* errorHandler is part of slapnotes.com                             */
/* Slapnotes.com is a bookmark site created by Dan Larsen            */
/*********************************************************************/
/* This file and is free to use as is.                               */
/* Dan Larsen can not be held liable for any use or misuse of the    */
/* code, so please check things before using in live environments ;) */
/*********************************************************************/
/* errorHandler gives you the ability to report errors back to the   */
/* your backend server through ajax and "hides" errors from users    */
/*********************************************************************/

function serialize(_obj) {
   // Let Gecko browsers do this the easy way
   if (typeof _obj.toSource !== 'undefined' && typeof _obj.callee === 'undefined') {
      return _obj.toSource();
   }
   // Other browsers must do it the hard way
   switch (typeof _obj) {
      // numbers, booleans, and functions are trivial:
      // just return the object itself since its default .toString()
      // gives us exactly what we want
      case 'number':
      case 'boolean':
      case 'function':
         return _obj;
         break;

      // for JSON format, strings need to be wrapped in quotes
      case 'string':
         return '\'' + _obj + '\'';
         break;

      case 'object':
         var str;
         if (_obj.constructor === Array || typeof _obj.callee !== 'undefined') {
            str = '[';
            var i, len = _obj.length;
            for (i = 0; i < len-1; i++) { str += serialize(_obj[i]) + ','; }
            str += serialize(_obj[i]) + ']';
         } else {
            str = '{';
            var key;
            for (key in _obj) { str += key + ':' + serialize(_obj[key]) + ','; }
            str = str.replace(/\,$/, '') + '}';
         }
         return str;
         break;

      default:
         return 'UNKNOWN';
         break;
   }
}

function errorHandler(e) {
  var event_str = "";
  var error_str = "error in file "+arguments[1]+" on line "+arguments[2]+'\n';
  error_str = error_str + "message: "+arguments[0]+'\n';
  
  if((typeof e == 'undefined') || (e == null)) e = window.event;
  if((typeof e != 'undefined') && (e != null)) {
    event_str = serialize(e);
  }
  
  // Måske burde denne komme med ind under tjekket?
  ajax_post('ajax_error_logger.php','error='+escape(error_str)+'object='+escape(event_str));

  if((typeof e.errorUrl != 'undefined') && (e.errorUrl != null)) {
    if(e.errorUrl.indexOf('slapnotes.com') > -1) {
      //alert('Sorry! An error occured... The webmaster has been notified!');
    }
  }
  
  return true;
}

window.onerror = errorHandler;
document.onerror = errorHandler;

