var site = {
    /*    lang: "",*/
    HM: false,
    domready: function () {
        this.HM = new HistoryManager({
            serializeHash: function (o) {
                var res = "";
                Object.each(o, function (val, key) {
                    if (key == "empty")
                        return;
                    if (val == null)
                        return;
                    switch (typeOf(val)) {
                        case "string":
                        case "number":
                            res += "/" + key + "/" + val;
                            break;

                        default:
                            res += "/" + key + ":j/" + JSON.encode(val);
                            break;
                    };
                });

                return res;
            },
            deserializeHash: function (h) {
                var obj = {};
                if (!h) {
                    obj["empty"] = true;
                    return obj;
                }

                var objArr = h.replace(/^\//, "").split("/");
                var curKey = 0;
                if (objArr.length == 0 || objArr.length % 2 != 0)
                    return;
                while (curKey * 2 < objArr.length) {
                    var key = objArr[curKey * 2];
                    var val = objArr[curKey * 2 + 1];
                    obj[key] = val;
                    curKey += 1;
                }
                return obj;
            }
        });
        this.fireEvent('domready');
        this.HM.start();
    },
    addHistoryEvent: function (name, HMUID) {
        this.HM.addEvent(HMUID + ':changed', function (e) { site.call(name, { a: "history", v: e, HMUID: HMUID }); });
    },
    call: function (action, args) {
        this.fireEvent(action, args);
        return void (0);
    },
    toggle: function (containerId) {
        $(containerId)
            .setStyle("display",
                $(containerId).getStyle("display") == "block" ? "none" : "block"
            );
    }
};
Object.append(site, new Events());
window.addEvent("domready", function () { site.domready() });
