/**
 * @author: Anatolij Rau
 * @copyright: Anatolij Rau
 * @access: 2009-10-07
 * @version: 0.2.3
 */
function debugClass() {
	this.padding_symbol = '    ';
	this.limit = 2;
	this.print_tag_keys = new Array('tagName', 'id', 'name', 'title', 'type', 'value');
	
	/**
	 * Print Object information (WARNING: Do not use TAG Here)
	 * If object have tags function wil switch to print_tag
	 * @param Object print_var (Object)
	 * @param BOOL no_print (false == return String)
	 * @param INT level (Private)
	 * @return String
	 */
	this.print_r = function (print_var, no_print, level) {
		if (!no_print) no_print = false;
		if (!level) level = 1;
		var level_padding = '';
		for (var n = 0; n<=level; n++) level_padding += this.padding_symbol;
		
		var output = ''+print_var+'\n';
		
		if (typeof print_var == 'object' || typeof print_var == 'array')
		for (i in print_var) {
			if (
				(typeof print_var[i] == 'object' 
				|| typeof print_var[i] == 'array')
				&& level < this.limit
			) {
				if (print_var[i] && print_var[i].tagName) {
					output += level_padding+this.print_tag(print_var[i], true, level+1);
				}
				else {
					output += level_padding+'['+i+']='+print_var[i]+'\n';
					output += level_padding+this.print_r(print_var[i], true, level+1);
				}
			} else {
				output += level_padding+'['+i+']='+print_var[i]+'\n';
			}
		}
		if (no_print) return output;
		else alert(output);
	};
	
	/**
	 * Print tag information (defined as this.print_tag_keys)
	 * @param Object print_var (Tag object)
	 * @param BOOL no_print (false == return String)
	 * @param INT level (Private)
	 * @return String
	 */
	this.print_tag = function(print_var, no_print, level) {
		if (!no_print) no_print = false;
		if (!level) level = 1;
		var level_padding = '';
		for (var n = 0; n<=level; n++) level_padding += this.padding_symbol;
		
		var output = ''+print_var+'\n';
		
		for (var i in this.print_tag_keys) {
			var key = this.print_tag_keys[i];
			output += level_padding+'['+key+']='+print_var[key]+'\n';
			if (level < this.limit && print_var[key].childNodes) {
				for (var j = 0; j < print_var[key].childNodes.length; j++) {
					output += level_padding+this.print_tag(print_var[key], true, level+1);
				}
			}
		}
		
		// Output
		if (!no_print) alert(output);
		return output;
	};
}

var debugObj = new debugClass();