/********************************************
* a very simple logger for jQuery/firebug
* usage:
* 
* var l = new logger("get_html_page");
* l.log("bla", "x", "y"-+);
*********************************************/

var log_levels = {
  debug: false,
  log: true,
  info: false,
  warn: true,
  error: true
};

var userAgent = navigator.userAgent.toLowerCase();
var browser_version  = (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1];
var browser_support = {
    /* borrowed from jquery */
	version: browser_version,
	version_major: parseInt(browser_version,10),
	safari: /webkit/.test( userAgent ),
	opera: /opera/.test( userAgent ),
	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

var logger = window.logger || function(domain){
  if (!domain){ domain = "unknown"; }
   
  var log = function(level, args){
    if (typeof log_levels[level] !=="undefined" && 
      log_levels[level] && 
      typeof console !== "undefined" && 
      typeof console[level] !=="undefined"
    ){      
      // alert(args[0].length);
      var log_args = [domain].concat([].concat(args));

          if (
              (browser_support.msie && browser_support.version_major === 8) ||
              browser_support.safari
          ){
              log_args = args;
              // safari + ie8 special
              console.log(domain + ':' + level + ':' + log_args.length);
              var log_arg;
              for (var i=0; i<log_args.length; i++){
                  log_arg = log_args[i];
                  try{
                      /*
                      note: apply does not yet work in IE8
                         console[level].apply(console,[log_arg]);
                      */
                      console[level](log_arg);
                  } catch(err){}

              }
          } else {
              try{
                  console[level].apply(console,log_args); 
              } catch(err){}
          }      
    }
  };
  // public methods
  return {
    debug: function(){
      log('debug', arguments);
    },
    log: function(){
      log('log', arguments);
    },
    info: function(){
      log('info', arguments);     
    },
    warn: function(){
      log('warn', arguments);
    },
    error: function(){
      log('error', arguments);      
    }
  };
};
