(function (self) { /* * TODO, lots of concatenation (slow in js) */ var spacing = " "; function getType(obj) { var type = typeof obj; if (obj instanceof Array) { return 'array'; } else if (type == 'string') { return 'string'; } else if (type == 'boolean') { return 'boolean'; } else if (type == 'number') { return 'number'; } else if (type == 'undefined' || obj === null) { return 'null'; } else { return 'hash'; } } function convert(obj, ret) { var type = getType(obj); switch(type) { case 'array': convertArray(obj, ret); break; case 'hash': convertHash(obj, ret); break; case 'string': convertString(obj, ret); break; case 'null': ret.push('null'); break; case 'number': ret.push(obj.toString()); break; case 'boolean': ret.push(obj ? 'true' : 'false'); break; } } function convertArray(obj, ret) { for (var i=0; i