var debugActive = false;
var debugBox = false;
var debugBegin = new Date();

var ie = (navigator.userAgent.indexOf('MSIE') != -1);
var opera = (navigator.userAgent.indexOf('Opera') != -1);

function debug(text, prio) {
	if (!debugActive) return true;
	if (opera || ie) {
		operaDebug(text, prio);
		return true;
	}

	if (!debugBox) {
		debugBox = window.open('about:blank', 'db', 'left=100,top=100,height=400,width=600,resizable=yes,scrollbars=yes');
		if (!debugBox) {
			// If popup was blocked.
			debugActive = false;
			return;
		}
		debugBox.identifier = "myDebugBox";
	} else {
		if (!debugBox.identifier) {
			debugBox.identifier = "myDebugBox";
			debugBox.document.write("<scr"+"ipt>document.title = 'Debug';</scr"+"ipt><style>pre { margin: 5px; }</style>");
		}
	}
	var now = new Date();
	var tstamp = (now - debugBegin)/1000;
	var tsstring = tstamp + '';
	var tslen = tsstring.length;
	var dot;
	if (tsstring.charAt(tslen - 4) != '.') {
		dot = tsstring.indexOf('.');
		switch(4 - tslen + dot) {
			case 1:
				tsstring += '0';
				break;
			case 2:
				if (dot == -1) {
					tsstring += '.0';
				}
				tsstring += '00';
				break;
		}
	}
	while (tsstring.length < 9) {
		tsstring = ' ' + tsstring;
	}
	debugBox.document.write('<pre><span style="color:#ccc;">' + tsstring + '</span> ' + text + '</pre>');
	debugBox.scrollBy(0, 1000);
	if (prio == 1) {
		alert(text);
	}
}

function inlineDebug(text, prio) {
	if (!debugActive) return true;
	if (opera || ie) {
		operaDebug(text, prio);
		return true;
	}

	if (!debugBox) {
		debugBox = cE('div');
		debugBox.id = "debug2";
		var debugLastLine = cE('div');

		var debugTextBox = cE('pre');
		debugTextBox.id = "d2textbox";

		debugBox.appendChild(debugTextBox);
		debugBox.onmouseover = function() { debugBox.scrollTop = debugTextBox.offsetHeight; }
		document.body.appendChild(debugBox);
	}
	var debugTextBox = el("d2textbox");

	var now = new Date();
	var tstamp = (now - debugBegin)/1000;
	var tsstring = tstamp + '';
	var tslen = tsstring.length;
	var dot;
	if (tsstring.charAt(tslen - 4) != '.') {
		dot = tsstring.indexOf('.');
		switch(4 - tslen + dot) {
			case 1:
				tsstring += '0';
				break;
			case 2:
				if (dot == -1) {
					tsstring += '.0';
				}
				tsstring += '00';
				break;
		}
	}
	while (tsstring.length < 9) {
		tsstring = ' ' + tsstring;
	}
	var msg = '<span style="color:#ccc;">' + tsstring + '</span> ' + text + '\n';
	debugTextBox.innerHTML += msg;
	debugTextBox.scrollTop += 1000;
	if (prio == 1) {
		alert(text);
	}
}

var q = 1;

function operaDebug(text, prio) {
	window.status = q++ + text;
	if (!debugBox) {
		debugBox = el('debugTA', 1);
	}
	if (!debugBox) {
		return false;
	}
	debugBox.value += text + "\n";
	// debugBox.scrollBy(0, 1000);
}

function debug_eval() {
	try {
		debug(eval(el('debugC').value));
	} catch (err) {
		debug("Huh?");
	}
	return false;
}

function print_r(arr, step) {
	var out = '';
	if (!step) step = 0;
	if (step == 0) out += '<pre>';
	var indent = '';
	for (var h = 0; h < step; h++) {
		indent += '\t';
	}
	for (item in arr) {
		out += indent + '['+item+'] = ';
		if (typeof arr[item] == 'object') {
			out += '(\n' + print_r(arr[item], step+1) + indent + ')\n';
		} else {
			out += arr[item] + '\n';
		}
	}
	if (step == 0) out += '</pre>';
	return out;
}

function undebug() {
	if (debugBox && debugBox.close) {
		debugBox.close();
	}
}
if (!window.addEventListener) {
	window.addEventListener = window.attachEvent;
}
// window.addEventListener('unload', undebug, false);
