////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Logger Object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var ERROR = -2;
var WARNING = -1;
var DEBUG = 0;
var INFO = 1;

var LOG_ELEMENT_ID = "webwag_logger";

// Handles loggin
// 
var Logger = Class.create();
Logger.prototype = {

    ERROR: -2,
    WARNING: -1,
    DEBUG: 0,
    INFO: 1,

    // constructor
    initialize: function(level) {
        if (typeof(level) == 'undefined' || level == null) {
            this.level = this.DEBUG;
        } else {
            this.level = level;
        }
        this.length = 0;
        this.msg = [];
		this.outputs = {};
		this.hasRegisteredOutput = false;
    },
	
	register: function(output_id, level) {
		this.outputs[output_id] = {
			"level": level,
			"length": 0
		};
		this.hasRegisteredOutput = true;
	},
	
    // methods
    log: function(message, type) {
        message = "" + message;

        if (!type) {
            type = this.DEBUG;
        }

        this.msg[this.length++] = message;

        if (this.hasRegisteredOutput) {

            message = message.replace(new RegExp("\n", 'g'), "<br/>");

			details = "";
            if (widget.prefs) {
                details += "<br/><b>'" + widget.getTitle() + "' (" + widget.id + ") </b><br/><br/>";
				details += "<table>";
                for (var i in widget.prefs) {
                    if (widget.prefs[i].key) {
						details += "<tr>";
                        details += 	"<td>"+widget.prefs[i].key + " : </td><td>" + String(widget.prefs[i].value).encodeXML() + "</td>";
						details += "</tr>";
                    }
                }
				details += "</table>";
            }
               
			// add log to the different outputs
			for (var i in this.outputs) {
				var logElement = document.getElementById(i);
		        if (logElement && type < this.outputs[i].level + 1) {
					line = "";
	                //line += "<div class=\"log_line_"+(this.length % 2)+"\">";
	                line += "<div style=\"width:20px; float:left;\">";
	                line += "	<img src=\"" + WWG_STATIC + "/images/log/log_" + type + ".gif\" alt=\"\"/>";
	                line += "</div>";
	                line += "<div style=\"margin-left:20px;\" class=\"button\" onclick=\"Logger.toggleDetails('log_"+i+"_"+this.outputs[i].length+"');\">";
	                line += this.outputs[i].length + ":  " + message;
					line += "<div id=\"log_"+i+"_"+this.outputs[i].length+"\" style='display:none;'>";
					line += details;
					line += "</div>";
	                line += "</div>";
	
					var d = document.createElement("div");
					d.className = "log_line_" + (this.outputs[i].length % 2);
					d.innerHTML = line;
	                logElement.insertBefore(d, logElement.firstChild);
					
					this.outputs[i].length ++;
				}
			}
        }
    },

    clear: function(output_id) {
		if (!output_id) {
			output_id = LOG_ELEMENT_ID;
		}
        
		this.length = 0;
		if (this.outputs[output_id]) {
			this.outputs[output_id].length = 0;
		}

        var logElement = document.getElementById(output_id);
        if (logElement) {
            logElement.innerHTML = "";
        }
		
    }
    // End methods
    };

Logger.toggleDetails = function(elementName) {
    element = $(elementName);
    if (element) {
        if (element.style.display != 'none') {
            element.style.display = 'none';
        } else {
            element.style.display = '';
        }
    }
};

Logger.hideDetails = function(elementName) {
    element = document.getElementById(elementName);
    if (element) {
        element.style.display = 'none';
    }
};

var ___dbg_cnt = 0;

function debugEcho(txt) {
    var i = 0,
    z;
    if (!(debugMode&1))
        return;
    do {
        if (typeof console != "undefined" && console.log)
            console.log.apply(console, arguments);
        else {
            var dbg = document.getElementById('debug');
            if (!dbg)
                return;
            var div = document.createElement('div');
            if (typeof txt != "string") {
                /*if (typeof txt == "object")
			txt = Object.keys(txt); 
		else*/
                //txt = Object.inspect(txt);
                }
            div.appendChild(document.createTextNode(txt));
            z = String((this.___dbg_cnt++) & 1 << 2);
            div.style.backgroundColor = "#" + z + z + z;
            dbg.insertBefore(div, dbg.firstChild);

        }
        txt = arguments[++i];
    }
    while (txt);
}