if (Object.prototype.toSource) { function toSource(o) { return o.toSource(); } } else { function toSource(o) { switch(typeof o) { case "object": if (o instanceof Array) { var result = []; for (var i = 0, l = o.length; i < l; ++i) { result.push(toSource(o[i])); } return "[" + result.join(",") + "]"; } else { var result = []; for (var prop in o) { result.push(prop + ":" + toSource(o[prop])); } } return "{" + result.join(",") + "}"; break; case "string": return '"' + o + '"'; break; default: return o.toString(); } } }