function print_r(x, max, sMax, skipMethods, sep, l) { max = max || 10; sMax = sMax || 25; skipMethods = skipMethods || true; sep = sep || ' '; l = l || 0; if (l > max) return "[Stopped at " + l + " levels]\n"; var i, r = '', t = typeof x, tab = ''; if (x === null) r += "(null)\n"; else if (t == 'object') { l++; for (i = 0; i < l; i++) { tab += sep; } if (x && x.length) { t = 'array'; } r += '(' + t + ':' + l + ") :\n"; for (i in x) { if (!(typeof x[i] == 'function' && skipMethods)) { try { r += tab + '[' + i + '] : ' + print_r(x[i], max, sMax, skipMethods, sep, l); } catch (e) { return "[ERROR: " + e + "]\n"; } } } } else { var slen = ''; if (t == 'string') { slen = '[' + x.length + ']'; if (x.length > sMax) { x = x.substr(0, sMax) + '...'; } } if (!(t == 'function' && skipMethods)) { r += '(' + t + slen + ') ' + x + "\n"; } } return r; }