/*
 * EwaDebug.js
 * permet d'afficher des messages sur la console si elle existe
 *
 * V1.0 : benoit montuelle (??/??/??) : main code
 * V1.1 : mathias delantes (19/10/10) : possibilité de ne pas avoir de filtre, test si debug existe, type de message (kind)
 *
 * EwaDebugEnabled = true / false : afficher ou pas les messages
 *
 * EwaDebugFilter = array("xxx", "yyy") : permet de filtrer les messages = si le messge contient xxx ou yyy alors il s'affiche
 * si EwaDebugFilter est vide alors tout s'affiche 
 *
 * si kind est précisé en argument alors on tache d'afficher ce type de message (warn, log, error, etc...)
 * base sur http://getfirebug.com/wiki/index.php/Console_API
 */
var EwaDebugEnabled = true;

// filtre les messages : ils doivent contenir :  ex : new Array('diaporama', 'rollover');
var EwaDebugFilter = new Array(); 

// alias pour plus de simplicité mais qui peut donc sauter si debug est déjà défini ailleurs
if(typeof debug == 'undefined') {
  var debug = function(msg, kind) {
  return EwaDebug(msg, kind);
  }
}

// main fonction EwaDebug()
var EwaDebug = function(msg, kind) {

  if(kind == undefined) {
    kind = "log";
  }
  
	if ($defined(msg)) {
	  if (msg == undefined || typeof msg.trim != 'function' || EwaDebugEnabled == false) {
		  return;
	  }
    
	  msg.trim();
	 
	   var allow = true;
    
    // si on doit filtrer les msgs
    if(EwaDebugFilter.length > 0) {
      var allow = false;
      EwaDebugFilter.each(function(ns, index) {
        if (msg.contains(ns)) {
          allow = true;
        }
      });
    }
    
	  if (allow && window.console) {
      var is_done = false;
      // quel type de message (basé sur firebug cf: http://getfirebug.com/wiki/index.php/Console_API)
      switch(kind) {
        case "debug":
          if(console.debug) { is_done = true; console.debug(msg); }
        break; 

        case "log":
          if(console.log) { is_done = true; console.log(msg); }
        break;
        
        case "info":
          if(console.info) { is_done = true; console.info(msg); }
        break; 

        case "error":
          if(console.error) { is_done = true; console.error(msg); }
        break; 
        
        case "warn":
          if(console.warn) { is_done = true; console.warn(msg); }
        break; 
        
        case "group":
          if(console.group) { is_done = true; console.group(msg); }
        break;  
        
        case "groupEnd":
          if(console.groupEnd) { is_done = true; console.groupEnd(msg); }
        break;
        
        case "time":
          if(console.time) { is_done = true; console.time(msg); }
        break;
        
        case "timeEnd":
          if(console.timeEnd) { is_done = true; console.timeEnd(msg); }
        break;          
        
        default:
          if(console.log) { is_done = true; console.log(msg); }
        break;
        
      }
      
      if(is_done == false) {
        console.log(msg);
      }
	  }
	}
}
