// JavaScript Document

var __debugger__enabled = false;
var __debugger__inited = false;
var __debugger__bpcount = 0;
var __debugger__minimized = false;
var __debugger__stack = [];
var __debugger__msgstack = [];

function __debugger__addBP() {
	if(__debugger__enabled) { 
		if(!__debugger__inited) __debugger__init();
		__debugger__bpcount++;
		var fstack = __debugger__getStack(__debugger__addBP.caller);
		__debugger__stack.push(fstack);
		__debugger__ui_mountstack(__debugger__stack[__debugger__stack.length-1]);
	}
}

function __debugger__addMsg(message, info) {
	if(__debugger__enabled) {
		if(!__debugger__inited) __debugger__init();
		__debugger__msgstack.push([message, info]);
		var el = document.getElementById("__debugger__dmessages");
		var stel = document.createElement("div");
		stel.number = __debugger__msgstack.length-1;
		stel.style.padding = "1px 2px 1px 2px";
		stel.onclick = __debugger__showMsg;
		stel.innerHTML = __debugger__msgstack.length + ": " + message;
		el.appendChild(stel);
		document.getElementById("__debugger__dmessages_main").scrollTop = document.getElementById("__debugger__dmessages_main").scrollHeight;
	}
}
function __debugger__showMsg() {
	__debugger__tools_set_tarea(__debugger__msgstack[this.number][1]);
}

function __debugger__ui_mountstack(st, bpname) {
	bpname = (bpname) ? " ("+bpname+")" : "";
	var el = document.getElementById("__debugger__dstacktrace");
	var html = "<div id=\"__debugger__dbp_"+__debugger__bpcount+"\" style=\"font-family:Arial;font-size:11px;font-weight:bold;cursor:pointer;background:#EEEEEE;width:100%;\" onclick=\"__debugger__swapHide('__debugger__dbpinfo_"+__debugger__bpcount+"');\">&nbsp;+ BP: " +  __debugger__bpcount + bpname + "</div>";
	html += "<div id=\"__debugger__dbpinfo_"+__debugger__bpcount+"\">";
	for(var i=0; i<st.length; i++) {
		html += "<div style=\"padding-left:15px;\" title=\"" + st[i].toString() + "\">Function [" + Number(st.length-i) + "]</div>";
		if(st[i].arguments.length>0) {
			//alert(st[i].arguments[0]);
			for(var j=0; j<arguments.length; j++) {
				html += "<div style=\"padding-left:25px;\" title=\"" + st[i].arguments[j].toString() + "\">Argument [" + j + "]</div>";
			}
			//html += "<div style=\"padding-left:25px;\" title=\"" + st[i].toString() + "\">Argument [" + Number(st.length-i) + "]</div>";
		}
	}
	html += "</div>";
	var stel = document.createElement("div");
	stel.innerHTML = html;
	el.appendChild(stel);
}

function __debugger__getStack(fn) {
	var stack = [];
	do {
		stack.push(fn);
		fn = fn.caller;
	} while(fn);
	return stack;
}

function __debugger__init() {
	__debugger__buildWindow();
	__debugger__inited = true;
}

function __debugger__buildWindow() {
	var e = document.createElement("div");
	document.body.appendChild(e);
	e.setAttribute("id", "__debugger__window");
	e.style.position = "absolute";
	e.style.border = "1px solid #000000";
	e.style.width = "300px";
	e.style.height = "auto";
	e.style.top = "40px";
	e.style.left = "20px";
	var html = "<div id=\"__debugger__topbar\" style=\"width:100%;height:20px;background:#000000;color:#FFFFFF;font-family:Arial;font-size:12px;font-weight:bold;\" onmousedown=\"__debugger__startdrag();\"><span style=\"float:left;font:inherit;margin:2px 0 0 10px;\">Script debugger</span><span style=\"float:right;font:inherit;margin:2px 10px 0 0;width:30px;\"><div style=\"float:left;padding-top:3px;cursor:pointer;\" onclick=\"__debugger__minimize();\">&mdash;</div><div style=\"float:right;cursor:pointer;\" onclick=\"__debugger__hide();\">x</span></div></div>";
	html += "<div id=\"__debugger__content\" style=\"height:auto;background:#FFFFFF;\">";
		html += "<div id=\"__debugger__tools_main\" style=\"width:100%;height:150px;\">";
			html += "<div id=\"__debugger__tools_dtarea\" style=\"width:100%;height:100%;\"><textarea id=\"__debugger__tools_tarea\" style=\"width:95%;margin-top:5px;\" rows=\"8\"></textarea></div>";
		html += "</div>";
		html += "<div id=\"__debugger__dstacktrace_main\" style=\"width:100%;height:100px;overflow-y:scroll;border-top:1px solid #000000;text-align:left;\"><div id=\"__debugger__dstacktrace\"></div></div>";
		html += "<div id=\"__debugger__dmessages_main\" style=\"width:100%;height:70px;overflow-y:scroll;border-top:1px solid #000000;text-align:left;\"><div id=\"__debugger__dmessages\"></div></div>";
	html += "</div>";
	html += "<div id=\"__debugger__statusbar\" style=\"width:100%;height:14px;background:#CCCCCC;color:#000000;font-family:Tahoma;font-size:10px;font-weight:normal;text-align:left;\"><span style=\"margin:0 0 0 5px;font:inherit;\">BPs: <span id=\"__debugger__sbpnumber\"></span></span></div>";
	e.innerHTML = html;
}

function __debugger__startdrag(e) {
	if(e==null) e = window.event;
	var el = document.getElementById("__debugger__window");
	el.tx = (el.style.left!="") ? parseInt(el.style.left) : el.offsetLeft;
	el.ty = (el.style.top!="") ? parseInt(el.style.top) : el.offsetTop;
	el.x = null;
	el.y = null;
	document.onmousemove = __debugger__drag;
	document.onmouseup = __debugger__stopdrag;
}
function __debugger__stopdrag() {
	document.onmousemove = null;
	document.onmouseup = null;
}
function __debugger__drag(e) {
	if(e==null) e = window.event;
	var el = document.getElementById("__debugger__window");
	if(!el.x) {
		el.x = e.clientX;
		el.y = e.clientY;
	}
	el.style.left = el.tx + e.clientX - el.x;
	el.style.top = el.ty + e.clientY - el.y;
}

function __debugger__minimize() {
	document.getElementById("__debugger__content").style.display = (__debugger__minimized) ? "" : "none";
	document.getElementById("__debugger__statusbar").style.display = (__debugger__minimized) ? "" : "none";
	__debugger__minimized = (__debugger__minimized) ? false : true;
}

function __debugger__hide() {
	document.getElementById("__debugger__window").style.display = "none";
}
function __debugger__show() {
	if(!__debugger__inited) __debugger__init();
	document.getElementById("__debugger__window").style.display = "";
}

function __debugger__swapHide(id) {
	document.getElementById(id).style.display = (document.getElementById(id).style.display=="none") ? "" : "none";
}

function __debugger__switchTools(tool) {
	document.getElementById("__debugger__tools_dtarea").style.display = "none";
	document.getElementById("__debugger__tools_d"+tool).style.display = "";
}

function __debugger__tools_set_tarea(text) {
	__debugger__switchTools("tarea");
	document.getElementById("__debugger__tools_tarea").value = text;
}