/* client side js functions for encoding/decoding objects into linear strings Copyright Andrew Tridgell 2005 released under the GNU GPL Version 3 or later */ /* usage: enc = encodeObject(obj); obj = decodeObject(enc); The encoded format of the object is a string that is safe to use in URLs Note that only data elements are encoded, not functions */ function count_members(o) { var i, count = 0; for (i in o) { count++; } return count; } function encodeObject(o) { var i, r = count_members(o) + ":"; for (i in o) { var t = typeof(o[i]); if (t == 'object') { r = r + "" + i + ":" + t + ":" + encodeObject(o[i]); } else if (t == 'string') { var s = encodeURIComponent(o[i]).replace(/%/g,'#'); r = r + "" + i + ":" + t + ":" + s + ":"; } else if (t == 'boolean' || t == 'number') { r = r + "" + i + ":" + t + ":" + o[i] + ":"; } else if (t == 'undefined' || t == 'null') { r = r + "" + i + ":" + t + ":"; } else if (t != 'function') { alert("Unable to encode type " + t); } } return r; } function decodeObjectArray(a) { var o = new Object(); var i, count = a[a.i]; a.i++; for (i=0;i