var lastmsg = "";

function Logger(isDebug){
 if (isDebug) {
  this.tracers = new Object();
  this.setTrace = Logger_setTrace;
  this._noOp = Logger_noOp;
  this.unsetTrace = Logger_unsetTrace;
  this.showAllEvents = Logger_showAllEvents;
  this.showAll = false;
 }
}

function Logger_showAllEvents(_showAll){
 this.showAll = _showAll;
}

function Logger_setTrace(type, activate){
 if (activate) {
  this.tracer[type] = this._doTrace;
 }
 else {
  this.tracer[type] = this._noOp;
 }
}

function Logger_noOp(type, msg, xparam){ lastmsg = msg; return msg; }

function Logger_unsetTrace(type){
 this.tracer[type] = null;
}

function Logger_trace(type){
 traceFunction = this[type];
 if (!traceFunction) return;
 traceFunction(type, msg, xparam);
}

function Logger_doTrace(type, msg, xparam){
 var showmessage = false;
 var showtype = true;
 
 switch (type) {
  case "strings":
   showmessage = true;
  break;
  case "stringsCC":
   showmessage = true;
  break;
  case "YahooWebResultDatasource":
   showmessage = true;
  break;
  case "SearchEngine":
   showmessage = true;
  break;
  case "SuggestionController":
   showmessage = true;
  break;
  case "OverlayContainer":
   showmessage = true;
  break;
  case "flashplayer":
   showmessage = false;
  break;
  case "dom":
   showmessage = false;
  break;
  case "web":
   showmessage = false;
  break;
  case "blog":
   showmessage = false;
  break;
  case "news":
   showmessage = false;
  break;
  case "image":
   showmessage = false;
  break;
  case "video":
   showmessage = false;
  break;
  case "podcast":
   showmessage = false;
  break;
  case "media":
   showmessage = false;
  break;
  case "unit":
   showmessage = false;
  break;
  case "unitsub":
   showmessage = false;
  break;
  case "cache":
   showmessage = false;
  break;
  case "item":
   showmessage = false;
  break;
  case "tab":
  case "tabs":
   showmessage = false;
  break;
  case "tabprev":
   showmessage = false;
  break;
  case "undo":
   showmessage = false;
  break;
  case "bmbeg":
   showmessage = false;
  break;
  case "display":
   showmessage = false;
  break;
  case "displaylist":
   showmessage = false;
  break;
  case "local":
   showmessage = false;
  break;
  case "fini":
   showmessage = false;
  break;
  case "image_prv":
   showmessage = false;
  break;
  case "flash":
   showmessage = false;
  break;
  case "string":
   showmessage = false;
  break;
  case "xmlconvert":
   showmessage = false;
  break;
  case "xmlhttp":
   showmessage = false;
  break;
  case "wi":
   showmessage = false;
  break;
  case "callback":
   showmessage = false;
  break;
  case "json":
   showmessage = false;
  break;
  case "ads":
   showmessage = true;
  break;
  case "always":
   showmessage = true;
  break;
  case "important":
   showmessage = true;
  break;
  case "pagi":
  case "pagination":
   showmessage = false;
  break;
  case "error":
  case "ERROR":
   showmessage = true;
  break;
  default:
   //case of the message coming through as a type 
   showmessage = false;
   break;
 }
 
 if (this.showAll) {
  showmessage = true;
 }
 if (xparam == "important") {
  msg = "\n \n" + msg + "\n \n";
 }
 if (msg != null) {
  if (showmessage || xparam == "force") {
   var messagetext = ""
   if (showtype && type) {
    messagetext += type + "#> ";
   }
   if (typeof(msg) == "string") {
    messagetext += msg
    if (xparam == "force") {
     messagetext += " (forced)";
    }
    if (ie_debug != null) {
     //          ie_debug.document.write("<pre>"+messagetext+"<\/pre>");
     ie_debug.document.write(encodeHTML(messagetext) + "<br>");
    }
    else {
//     console.debug(messagetext);
    }
   }
   else {
    if (ie_debug != null) {
     messagetext += msg
     if (xparam == "force") {
      messagetext += " (forced)";
     }
     //          ie_debug.document.write("<pre>"+messagetext+msg+"<\/pre>");
     ie_debug.document.write(encodeHTML(messagetext) + "<br>");
    }
    else {
//     console.debug(messagetext+"\n"+showException(msg));
    }
   }
  }
 }
 return showmessage;
}


var trace = Logger_noOp;
var showAllEvents = Logger_noOp;

if (djConfig.isDebug) {
 var ie_debug = null;
 var _isIE = (navigator.userAgent.indexOf("MSIE") != -1)
 if (_isIE) {
  var browser_version = parseInt(navigator.userAgent.charAt(navigator.userAgent.indexOf("MSIE") + 5))
 }
 if (_isIE && djConfig.isDebug) {
  djConfig.isDebug = false
  ie_debug = window.open("ie_debug.html", "ie_debug", "status=0,menubar=0,resizable=1,width=350,height=750,scrollbars=1,addressbar=0");
  try {
   ie_debug.moveTo(0, 1610);
  } catch (e) {
   //alert("logger " + showException(e, false));
  }
 };
 
 trace = Logger_doTrace;
 showAllEvents = Logger_showAllEvents;
}

