Log = function(enable){    
  
  var f_enable = enable;
  
  if(!f_enable)f_enable = false;    
  
  if(f_enable){            
    var hr = document.createElement('hr');
    document.body.appendChild(hr);      
  }
  /**
  * retorna un mensaje con la fecha de la palabra DEBUG y el mensaje 
  * enviado como parametro 
  */
  var getMessage = function(message){
    var date = new Date();
    var mess =  (date.getHours()<10?'0'+date.getHours():date.getHours())+':'
    mess +=  (date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes())+':'
    mess +=  (date.getSeconds()<10?'0'+date.getSeconds():date.getSeconds());
    mess += ' - DEBUG - '+message;
    return mess;
  }
  
  var recurJSON = function(data,bloque){    
      for (nobj in data ){
        if(!log.startWith(data[nobj],'function')){
          log.debug(bloque + ' ' + nobj + ' - ' + data[nobj]);
          if(data[nobj]+''== '[object Object]'){
            recurJSON(data[nobj],bloque+='---');
          }
        }
      }
    }
  return {         
    /**
    * si la funcion log esta habilitada adiciona una etiqueta div en la 
    * parte inferior de la pagina 
    */
    debug : function(log){
      if(f_enable){
        var div = document.createElement('div');
        div.appendChild(document.createTextNode(getMessage(log)));
        document.body.appendChild(div);
      }        
    },
    /**
    * mediante el parametro booleano 'enable'
    * habilita o deshabilita la funcionalidad del logueo 
    * de la clase
    */
    setEnable : function (enable){
      f_enable = enable;
      if(!f_enable)f_enable = false;    
    },
    /**
    * function de utilidad para comparar y averiguar si el 
    * st1 comieza con la cadena st2
    */
    startWith :  function(st1,st2){
      st1 = st1+'';
      st2 = st2+'';
      for(var i=0;i<st2.length;i++){
        if(st1.charAt(i) != st2.charAt(i))
          return false;
      }
      return true;
    },
    analizaJSON : function(data){
    if(data instanceof Array){
    	log.debug('is an Array ('+data.length+')')
    }
      for (nobj in data ){
        if(!log.startWith(data[nobj],'function')){
          log.debug(nobj + ' - '+ data[nobj]);                   
        }
      }
    },
    analizaJSONf : function(data){
    if(data instanceof Array){
    	log.debug('is an Array ('+data.length+')')
    }
      for (nobj in data ){
        if(log.startWith(data[nobj],'function')){
          log.debug(nobj + ' - '+ data[nobj]);                   
        }
      }
    },
    analizaTreeJSON : function(data){
      recurJSON(data,'');
    }
  };    
}
