// dbg.js 
//		:: generic debug utilities
//		@(#)dbg.js	1.1.2.4 10:11:58 08/31/01

var UNDEF = 'undefined';

var dbgBool = true;
var dbgWin = null;
var dbgdoc = null;

function dbgOn() { dbgBool = true; }
function dbgOff() { dbgBool = false; dbgdoc=null; }

function dbgao(obj) { dbg(dumpAppObj(obj)); }

function dbgCreateWindow()
{
	var spec = 'width=400,height=400,scrollbars=yes,resizable=yes';

	if (document.all) target="DEBUG_IE";
	else              target="DEBUG_NN";

	dbgWin = window.open('',target,spec);
	if (typeof(dbgWin) == UNDEF) {
		alert('sorry - problems starting trace window');
	}
	else {
		dbgdoc = dbgWin.document;
		dbgdoc.open();
		dbgdoc.write("<html><title>*Log</title>");
		dbgdoc.write("<table><tr><td width=400> &nbsp; &nbsp; </table>");
	}
	
}


function dbg(txt)
{

	if (!dbgBool)  return;
	if (dbgdoc == null) dbgCreateWindow();

	if (typeof(txt)=='object') 
		txt = '<font size=-1><pre>' + dumpObj(txt) + '</pre></font>';

	if (dbgWin && dbgWin.open && !dbgWin.closed) dbgdoc.write(txt );
		
}



function dumpObj(obj,rbool,indent)
{
	if (typeof rbool == UNDEF){ rbool = ''; indent='';}
	if (typeof obj != "object") return 'dmpObj - '
		+ typeof(obj) + ' ( ' + obj + ' )\n  NOT AN OBJECT ??';

	var msg = "" ; var d = "";
	for (var x in obj){
		msg += d + indent  + " - " + x ; d="\n<br>";

		try {
		if (typeof(obj[x]) == "function"){msg += ': function'; continue; }
		var t = typeof(obj[x]);

		if (document.aaa){
		if (x.indexOf('HTML') >= 0){ msg + ': ...'; continue; }
		if (x.indexOf('drawSpec') >= 0){ msg + ': ...'; continue; }
		//if (x.indexOf('innerText') >= 0){ msg + ': ...'; continue; }
		//if (x.indexOf('outerText') >= 0){ msg + ': ...'; continue; }
		if (t=='unknown'){ msg += ': **unknown**'; continue; }
		}

		//if (t==UNDEF){ msg += ': UNDEFINED'; continue; }
		//if (t=='object'){ msg += ': OBJECT'; continue; }
		//msg += ": " + typeof(obj[x]);  d = "\n";

		if ( (t=='object') && (rbool=="r")) {
			msg += ':' +  dumpObj(obj[x],rbool,indent + '   ');
		}
		else {
			msg +=  ": " + obj[x]; d = "\n";
		}


		//if (x == "layers") {
		//	for (y in obj[x]) msg += "\n - - - layer: " + y;
		//}

		}
		catch(e){
			msg += 'NOT AVAILABLE';
		}

	}
	return msg;
}


function ao(obj,txt)
{
	if (typeof txt == UNDEF) txt = "no.title?";
	var msg = txt + dumpObj(obj);
	alert(msg);
	return;
}



function dumpHtml(win)
{
	var cum = win.document.outerHTML;
	cum = jsReplace(cum,'<','&lt;');
	dbg( '\n<hr>' + cum + '\n<hr>\n');
}



function dbgao(obj) { dbg(dumpAppObj(obj)); }
function dumpAppObj(obj,indent)
{
	return dumpAppObjR(obj,indent,0)
}

function dumpAppObjR(obj,indent,rcnt)
{
	if (rcnt > 8 ){
//dbg('<li><font color=red>rcnt=</font>' + rcnt);
	return '<font color=red>oo</font>';
	}
	if (typeof indent == UNDEF){ indent='\n<br>';}
	if (typeof( obj ) != "object"){ 
//dbg('<li><font color=red>non-object passed to dumpAppObR</font>');
//dbg('<li><font color=red>typeof is</font>' + typeof(obj));
		return 'dmpObj - '
		+ typeof(obj) + ' ( ' + obj + ' )\n  NOT AN OBJECT ??';
	}

	var msg = "" ; var d = "";
	for (x in obj){
		
		try {
		msg += d + indent  + " - " + x ; 	//d="\n<br>";

		if (typeof(obj[x]) == "function"){
			// msg += ': function'; 
			continue; }
		var t = typeof(obj[x]);

		if (t=='object') {
//dbg(msg);  dbg('<li>x=' +x+ ' t=' +t);
			msg += ':' +  dumpAppObjR(obj[x],indent + ' .  ', rcnt+1 );
		}
		else {
			msg +=  ": '" + obj[x] + "'"; //d = "\n";

		}
		}
		catch(e){
			msg += ' R.NOT.AVAILABLE';
		}

	}
	return msg;
}

