/* 
 * system.debug.js 
 * version 1.0.0
 * Copyright (C) Jason Mingl (Ratheous)
*/

if(typeof system != "object")
	var system = new Object;
if(typeof system.debug != "object")
	system.tools = new Object;

system.debug.enabled = true;
system.debug.events = new Array;

system.debug.event = function(message, type, ex_info)
{
	this.message = message;
	this.type = type;
	this.ex_info = ex_info;
	if(type == "error")
		this.code = "<div style='color: red; font-weight: bold; font-size: 9pt; text-align: left; padding: 2px;' title='" + ex_info + "'> &raquo; " + message + "</div>";
	if(type == "message" || !type)
		this.code = "<div style='color: blue; font-weight: bold; font-size: 8pt; text-align: left; padding: 2px 1px 2px 1px;' title='" + ex_info + "'> &raquo; " + message + "</div>";
	system.debug.events.push(this);
};

system.debug.trace = function(message, type, ex_info) 
{

	new system.debug.event(message, type, ex_info);

	if(system.debug.enabled)
		system.debug.display.show();
};

system.debug.status = function(message) 
{
	if(system.debug.display.statusbar != null)
		system.debug.display.statusbar.innerHTML = message;
};

system.debug.display = new Object;
system.debug.display.visible = false;
system.debug.display.frame = null;
system.debug.display.titlebar = null;
system.debug.display.container = null;
system.debug.display.statusbar = null;

system.debug.display.show = function()
{
	if(system.debug.display.frame == null)
	{
		var frame = document.createElement('table');
		frame.style.left = "10px";
		frame.style.top = "130px";
		frame.style.position = "absolute";
		frame.style.visibility = "visible";
		frame.cellPadding = "0";
		frame.cellSpacing = "0";
		frame.style.border = "1px solid black";
		
		var tr1 = document.createElement('tr');
		var tr2 = document.createElement('tr');
		var tr3 = document.createElement('tr');
		
		var th1 = document.createElement('th');
		th1.style.backgroundColor = "#FF9900";
		th1.style.color = "white";
		th1.style.fontWeight = "bold";
		th1.style.cursor = "move";
		th1.style.textAlign = "left";
		th1.style.borderBottom = "1px solid black";
		th1.style.padding = "2px;";
		th1.innerHTML = "Debug console";
		system.debug.display.titlebar = th1;
		
		var th2 = document.createElement('th');
		th2.style.backgroundColor = "black";
		th2.style.color = "white";
		th2.style.fontWeight = "bold";
		th2.style.fontSize = "9pt";
		th2.style.cursor = "pointer";
		th2.style.width = "60px";
		th2.innerHTML = "Close";
		
		var td1 = document.createElement('td');
		td1.colSpan = "2";
		
		var td2 = document.createElement('td');
		td2.style.backgroundColor = "black";
		td2.style.color = "white";
		td2.style.textAlign = "left";
		td2.colSpan = "2";
		td2.innerHTML = "Status";
		td2.style.padding = "2px;";
		td2.style.fontWeight = "bold";
		td2.style.fontSize = "9pt";
		system.debug.display.statusbar = td2;
		
		var div = document.createElement('div');
		div.style.width = "400px";
		div.style.height = "300px";
		div.style.overflow = "scroll";
		div.style.textAlign = "center";
		div.style.verticalAlign = "top";
		div.style.backgroundColor = "white";
		system.debug.display.container = div;
		
		document.body.insertBefore(frame, document.body.firstChild);
		frame.appendChild(tr1);
		frame.appendChild(tr2);
		frame.appendChild(tr3);
		tr1.appendChild(th1);
		tr1.appendChild(th2);
		tr2.appendChild(td1);
		tr3.appendChild(td2);
		td1.appendChild(div);
		
		system.debug.display.frame = frame;
		
		var mousedown = function(evt) 
		{ 
			system.debug.display.mouselock = "move"; 
			system.debug.display.mouse_rel_x = (evt.pageX - frame.style.left.replace(/px/, ""));
			system.debug.display.mouse_rel_y = (evt.pageY - frame.style.top.replace(/px/, ""));
			evt.stopPropagation();
			evt.preventDefault();
		}
		var mousemove = function(evt) 
		{ 
			if(system.debug.display.mouselock == "move") 
			{
				var x = frame.style.left.replace(/px/, "");
				var y = frame.style.top.replace(/px/, "");
				frame.style.left = (evt.pageX - system.debug.display.mouse_rel_x) + "px";
				frame.style.top = (evt.pageY - system.debug.display.mouse_rel_y) + "px";
				td2.innerHTML = "Window location: " + frame.style.left + " " + frame.style.top;
				evt.stopPropagation();
				evt.preventDefault();
			}
		}
		var mouseup = function() { system.debug.display.mouselock = false; }
		
		system.events.add(system.debug.display.titlebar, "mousedown", mousedown);
		system.events.add(system.debug.display.titlebar, "mousemove", mousemove);
		system.events.add(document.body, "mousemove", mousemove);
		system.events.add(system.debug.display.titlebar, "mouseup", mouseup);
		system.events.add(document.body, "mouseup", mouseup);
		system.events.add(th2, "click", system.debug.display.hide);
	}
	
	if(system.debug.events.length < 1)
	{
		system.debug.display.container.innerHTML = "Nothing to display";
		//system.debug.display.frame.style.visibility = "hidden";
	}
	else
	{
		var html = "";
		for(i = 0; i < system.debug.events.length; i++)
		{
			html += system.debug.events[i].code;
		}
		system.debug.display.container.innerHTML = html;
		
	}
};

system.debug.display.hide = function()
{
	if(system.debug.display.frame != null)
		system.debug.display.frame.style.visibility = "hidden";
}