var site = {
    HM: false,
    domready: function () {
        this.HM = new HistoryManager({
            serializeHash: function (a) {
                var b = "";
                Object.each(a, function (e, c) {
                    switch (typeOf(e)) {
                        case "object":
                            b += "/" + c + "/";
                            var d = [];
                            if (Object.keys(e).length != 0) {
                                Object.each(e, function (g, f) {
                                    if (f != "") {
                                        if (g == true) { d.push(f) }
                                        else { d.push(f + ":" + g) }
                                    }
                                })
                            }
                            b += d.join(",");
                            break;
                        case "string":
                            b += "/" + c + ":s/" + e;
                            break;
                        default:
                            b += "/" + c + ":j/" + JSON.encode(e);
                            break
                    }
                });
                return b
            },
            deserializeHash: function (g) {
                var i = g.replace(/^\//, "").split("/");
                var a = {};
                var f = 0;
                if (i.length == 0 || i.length % 2 != 0) { return; }
                while (f * 2 < i.length) {
                    var b = i[f * 2];
                    var c = i[f * 2 + 1];
                    if (b.contains(":j")) {
                        a[b.replace(/\:j$/, "")] = JSON.decode(decodeURIComponent(c))
                    } else if (b.contains(":s")) {
                        a[b.replace(/\:s$/, "")] = decodeURIComponent(c);
                    } else {
                        var d = c.split(",");
                        var e = {};
                        var curKey;
                        d.each(function (h) {
                            if (h != "") {
                                if (h.contains(":")) {
                                    curKey = h.split(":")[0];
                                    e[curKey] = [h.split(":")[1]];
                                } else {
                                    e[curKey].push(h);
                                }
                            }
                        }); if (b != "") { a[b] = e }
                    } f++
                } return a
            }
        });
        this.fireEvent("domready");
        this.HM.start();

    },
    addHistoryEvent: function (a, b) {
        this.HM.addEvent(b + ":changed", function (c) {
            site.call(a, { a: "history", v: c, HMUID: b })
        })
    },
    call: function (b, a) {
        this.fireEvent(b, a);
        return void (0);
    }
};
Object.append(site, new Events());
