function isObject(x) {
	if (x == null) return false; // (1)
	//return {}.toString.call(x) == "[object Object]"; // (2)
	return (typeof x == 'object')?true:false;
}

function deeper(obj,lvl,str) {
	if (!lvl) return 'MAXLEVEL='+lvl;
	if (obj == null) { return 'NULL'; }; // (1)
	var out='';
	var i;
	for(i in obj) {
		if (isObject(obj[i])) {
			out+="\n"+lvl+' '+str+i+"=>"+deeper(obj[i],lvl+1,"\t"+str+i+".");
		} else {
			if (obj[i] != null) {
				if (obj[i].toString().match(/^\s*function/ )) {
					out+="\n"+lvl+' '+str+i+"("+typeof obj[i]+"):"+"FUNCTION";
				} else {
					out+="\n"+lvl+' '+str+i+"("+typeof obj[i]+"):"+obj[i];
				};
			} else {
			out+="\n"+lvl+' '+str+i+":NULL";
			};
		};
	};
	return out;
};