var WSDebug = {
	messages: [],
	windowname: "WhiteSmokeDebugWindow",
	logwindow: null,
	logwindowReady: false,
	log: function(mess, sender, level) {
		if (!level) level = 1;
		if (!sender) sender = "unknown";
		this.appendToLog(this.createMessage(sender, mess, level));
	},
	notice: function(mess, sender, level) {
		if (!level) level = 0;
		if (!sender) sender = "unknown";
		this.appendToLog(this.createMessage(sender, mess, level));
	},
	warning: function(mess, sender, level) {
		if (!level) level = 0;
		if (!sender) sender = "unknown";
		this.appendToLog(this.createMessage(sender, '<span class="warning">' + mess + '</span>', level));
	},
	createMessage: function(sender, message, level) {
		var d = new Date();
		var t = this.lpad(d.getHours(), "0", 2) + ":" + this.lpad(d.getMinutes(), "0", 2) + ":" + this.lpad(d.getSeconds(), "0", 2) + "." + this.lpad(d.getMilliseconds(), "0", 2);
		return {
			id: this.messages.length,
			sender: sender,
			message: message,
			level: level,
			timestamp: t
		};
	},
	lpad: function(str, chr, length) {
		str = str.toString();
		while (str.length < length) str = chr + str;
		return str;
	},
	openDebugWindow: function() {
		if (!this.logwindow) {
			var width = 500;
			var height = 400;
			var options = "";
			var url = whitesmokePlugin.baseURL + "/debug.htm";
			//var url = "";
			var win = this.windowname;
			var leftPos = (screen.availWidth - width) / 2;
			var topPos = (screen.availHeight - height) / 2;
			options += 'width=' + width + ',height=' + height + ',top=' + topPos + ',left=' + leftPos;
			this.logwindow = window.open(url, win, options);

			this.logwindow.document.body.innerHTML = "";
			
			var oTable = this.logwindow.document.createElement('table');
			oTable.id = 'debug_table';
			oTable.name  = 'debug_table';
			oTable.border = 1;
			/*
			oTable.setAttribute('id', "debug_table");
			oTable.setAttribute('name', "debug_table");
			oTable.setAttribute('border', "1");
			*/
			oTable.innerHTML = "<tr><th>id</th><th>sender</th><th>message</th><th>level</th><th>timestamp</th></tr>";
			this.logwindow.document.body.appendChild(oTable);
			
		} else {
			this.logwindow.focus();
		}
	},
	needOverrideWarning: function(m, s) {
		this.appendToLog(this.createMessage(s, "Method '" + m + "' of '" + s + "' needs to be overridden!!", 5));
		this.openDebugWindow();
	},
	appendToLog: function(m) {
		this.messages.push(m);
		this.showMessage(m);
		//if (this.logwindow && m.level > 0) this.logwindow.debug.showMessage(m);
	},
	showMessage: function(m) {
		//alert("this.messages.length " + this.messages.length + ", m.level = " + m.level + ", m.id = " + m.id);
		if (this.logwindow && m.level >= 0) { 
			var oElement = this.logwindow.document.createElement('tr');
			oElement.innerHTML = "<td>" + m.id + "</td><td>" + m.sender + "</td><td>" + m.message + "</td><td>" + m.level + "</td><td>" + m.timestamp + "</td>";
			var oTable = this.logwindow.document.getElementById('debug_table');
			var oTableBody = oTable.getElementsByTagName("tbody");
			if (oTableBody) {
				oTable = oTableBody[0];
			}
			//oTable.appendChild(oElement);
			oTable.innerHTML += "<td>" + m.id + "</td><td>" + m.sender + "</td><td>" + m.message + "</td><td>" + m.level + "</td><td>" + m.timestamp + "</td>";
			/*
			var oElement = this.logwindow.document.createElement('div');
			oElement.innerHTML = "id: " + m.id + ", sender: " + m.sender + ", message: " + m.message + ", level: " + m.level + ", timestamp: " + m.timestamp;
			oElement.innerHTML += "<HR>";
			this.logwindow.document.body.appendChild(oElement);
			//this.logwindow.document.getElementsByTagName('body')[0].appendChild(oElement);
			//alert(this.logwindow.document.getElementsByTagName('body')[0].innerHTML);
			*/
		}
	}
}
