/* Logger, by David A. Rush
   Copyright (C) 2009 Wyoming Department of Transportation
   Implements a logging system, dependent on Firebug's console.log() function, similar to Java's log4j.
 */

function Logger() {
  this.logLevel=this.logLevels.info;
}

Logger.prototype.logLevels = {'none':0, 'fatal':1, 'error':2, 'warning':3, 'info':4, 'debug':5, 'trace':6};
Logger.levels = {'none':0, 'fatal':1, 'error':2, 'warning':3, 'info':4, 'debug':5, 'trace':6};
Logger.prototype.foo = 'bar';

Logger.prototype.setLevel = function(n) {
  this.logLevel = n;
}

Logger.prototype.simpleTime = function(d) {
  var t = d.getHours()+':';
  // console.log('A: t='+t);
  var m = d.getMinutes();
  if (m<10) {
    t = t+'0';
  }
  t = t+m+':';
  // console.log('B: t='+t);
  var s = d.getSeconds();
  if (s<10) {
    s = t+'0';
  }
  t = t+s+'.';
  // console.log('C: t='+t);
  var ms=d.getTime()%1000;
  if (ms<100) {
    t = t+'0';
    if (ms<10) {
      t = t+'0';
    }
  }
  t = t+ms;
  // console.log('D: t='+t);
  return t;
}

Logger.prototype.log = function(level,msg) {
  if (level<=this.logLevel) {
    var d = new Date();
    var t = this.simpleTime(d);
    if (level>=this.logLevels.warning) {
      console.log(t+', '+level+': '+msg);
    } else {
      console.error(t+', '+level+': '+msg);
    }
  }
}

Logger.prototype.fatal   = function(msg) { this.log(this.logLevels.fatal,msg); }
Logger.prototype.error   = function(msg) { this.log(this.logLevels.error,msg); }
Logger.prototype.warning = function(msg) { this.log(this.logLevels.warning,msg); }
Logger.prototype.info    = function(msg) { this.log(this.logLevels.info,msg); }
Logger.prototype.debug   = function(msg) { this.log(this.logLevels.debug,msg); }
Logger.prototype.trace   = function(msg) { this.log(this.logLevels.trace,msg); }

Logger.prototype.testLog = function() {
  // this.log(this.logLevels.none,'None');
  this.log(this.logLevels.fatal,'Fatal');
  this.log(this.logLevels.error,'Error');
  this.log(this.logLevels.warning,'Warning');
  this.log(this.logLevels.info,'Info');
  this.log(this.logLevels.debug,'Debug');
  this.log(this.logLevels.trace,'Trace');
}

