var Debug = Class.create();

//Write yahoo logger files
function _writeFiles() 
{
    try {
        document.write("<scr"+"ipt type='text/javascript' src='"+"../../Resource/glweb_common_scripts/yui/0.12.2/yahoo-dom-event/yahoo-dom-event.js"+"'></scr"+"ipt>");
		document.write("<li"+"nk type='text/css' rel='stylesheet' href='"+"../../Resource/glweb_common_scripts/yui/0.12.2/logger/assets/logger.css"+"'></li"+"nk>");
		document.write("<scr"+"ipt type='text/javascript' src='"+"../../Resource/glweb_common_scripts/yui/0.12.2/logger/logger-min.js"+"'></scr"+"ipt>");
		
	} catch (e) {
	    alert("Debug._writeFiles error");		
	}
}

_writeFiles();


var _logReader = null;
Debug.prototype = {
    m_enabled : false,
    m_loggers : [],
    m_lastLogger : null,
    
    initialize : function(enabled, logdiv, top, right)
    {        
        if( enabled == true )
        {    
            try
            {
                // Instantiate a logreader 
	            _logReader = new YAHOO.widget.LogReader(logdiv,{top:top,right:right}); 	 
	            this.m_enabled = enabled;
	        }   
	        catch(e)
	        {
	            alert("initialize exception: " + e.message);
	        }
	    }
    },
    
    enabled : function()
    {
        if( typeof(Debug.ENABLED) == "undefined" )
        {
            return false;
        }
        return Debug.ENABLED;
    },
    
    addLogger : function(id, name)
    {
        if( !this.enabled() ) return;  
        if( id && name )
        {
            var logger = null;
            
            if( typeof YAHOO != "undefined")
            {                
                logger = new YAHOO.widget.LogWriter(name);
            }
            this.m_loggers.push( {id:id, name:name, logger:logger} );            
        }
        else
        {
            throw {message:"Invalid or missing arguments id and name."};
        }
    },
    
    log : function(id, message, level)
    {
        if( !this.enabled() ) return;
        if( this.m_enabled && typeof YAHOO != "undefined" )
        {       
            //find logger. Use "cached" logger if last. Otherwise retrieve from array.
            var logger = null;                
            if( this.m_lastLogger != null && this.m_lastLogger.id == id )
            {
                logger = this.m_lastLogger;
            }
            else
            {
                var length = this.m_loggers.length;
                
                for(var i=0; i<length; i++)
                {
                    logger = (this.m_loggers[i].id == id) ? this.m_loggers[i] : false;
                    if(logger) break;                
                }
                
                this.m_lastLogger = logger;                
            }
            
            if( logger != null )
            {
                //Initiate logger if not loaded
                if( logger.logger == null )
                {
                    logger.logger = new YAHOO.widget.LogWriter(logger.name);                    
                }
                logger.logger.log(message, level ? level : "info");
            }
            else
            {
                throw {message:"No logger known by id " + id};
            }
        }   
    },
    
    assert : function(id, bool, description)
    {
        if( !bool )
        {
            this.log(id, "ASSERTION FAILED: " + description, "error");
        }
    }
}
var wedebug = new Debug(false);

Event.observe(window, "load", 
    function()
    {
        var logdiv = $("logdiv");
        if(logdiv==null)
        {
            alert("no element named 'logdiv' available for logging.");
            Debug.ENABLED = false;
        }
        if( Debug.ENABLED )
        {
            wedebug.initialize(true, "logdiv", "10%", "10%");
        } 
    }
);
