/*
Dubug Win - For debugging.
--
Written by Ivik Injerd
*/

var dbgwin;
var debug_mode = false;

// When something bad happens.
function throwError(message){
	if (debug_mode) alert(message);
}
debugWin = function(text,raw,color) {
	if (!debug_mode) return false;
	if (typeof text == 'object'){
		text = debugObj(text,true);
		raw = true;
	}else if (typeof text != 'string'){
		text = text.toString();
	}
	dbgwin = window.open(null,"dbgwin","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width=800, height=600, top=30, left=200");
	if (color != undefined){
		var pre = '<div style="border:10px solid '+color
		 +'" onDblClick="if(confirm(\'Do you want to clear output?\'))document.body.innerHTML=\'\';">'+(raw?'':'<tt>');
		var post = (raw?'':'</tt>')+'</div>';
	}else{
		var pre = ''; var post = '';
	}
	if (raw == true){
		dbgwin.document.write(pre+text+post);
	}else{
		dbgwin.document.write(pre+text.replace(/&/gi, '&amp;').replace(/</gi, '&lt;').replace(/>/gi, '&gt;')+post);
	}
	// Scroll to bottom:
	var dh=dbgwin.document.body.scrollHeight;
	var ch=dbgwin.document.body.clientHeight;
	if(dh>ch){
		var moveme=dh-ch;
		dbgwin.window.scrollTo(0,moveme);
	}
}
debugObj = function(obj,nested) {
	var objStr = '<ul>';
	for (prop in obj) {
		var val = obj[prop].toString();
		val = val.replace(/&/gi, '&amp;').replace(/</gi, '&lt;').replace(/>/gi, '&gt;');
		objStr += '<li><em>'+typeof(obj[prop])+'</em> <strong>'+prop+'</strong> = <tt>'+val+'</tt>';
		if (typeof(obj[prop]) == 'object') {
			objStr += this.debugObj(obj[prop],true);
		}
		objStr += '</li>';
	}
	objStr += '</ul>';
	if (nested != true){
		debugWin(objStr,true);
	}
	return objStr;
}
