/******************************************************************************
* ObjectDumper, a recursive object dumper
* Copyright 2006 Poly9 - http://poly9.com
* Questions, comments - objectDumperAtPolynineDotCom@poly9.com
*******************************************************************************

Description:
	ObjectDumper allows you to recursively dump any javascript object.

Usage:
	var dumper = new Poly9.ObjectDumper(document.getElementById('dbg'), true);
	dumper.dump(myComplexObject, 'myComplexObject');

Version History:
0.1 - initial release

*/

function Poly9() {}

Poly9.ObjectDumper = 
	function (_dbgWindow, appendMode) {
		this.dbgWindow = _dbgWindow;
		this.appendMode = appendMode?true:false;
	};
	
Poly9.ObjectDumper.prototype.dump = function(obj, name) {
		if (this.appendMode)
			this.dbgWindow.innerHTML += this.dumpStr(obj, name, 0);
		else
			this.dbgWindow.innerHTML = this.dumpStr(obj, name, 0);
	}
	
Poly9.ObjectDumper.prototype.dumpStr = function(obj, name, level) {
			var k;
			var str = '';
			if (!name) name = '';
			if (!level) level = 0;
			else if (level > 100) return '!!too much recursion!!';
			for(var i=0; i<level; i++) str += "\t";
			if (obj == null) {
				str += name + ' = null\n';	
				return str;
			}
			if (typeof(obj) != 'object')
			{
				if (typeof(obj) == 'string')
					str +=  name + '('+typeof(obj)+') = "' + obj.replace('<br>','\n') + '"\n';
				else
					str +=  name + '('+typeof(obj)+') = ' + obj + '\n';
			}
			else {
				str += name + '('+typeof(obj)+') = {\n';
				for(k in obj)			
					str += this.dumpStr(obj[k], k, level + 1);
				str += '\n';
				for(var i=0; i<level; i++) str += "\t";
				str += '}\n';
			}
			return str;
	}
