var EXANIMO = EXANIMO || {};
(function () {
    EXANIMO.managers = EXANIMO.managers || {};
    var _1 = false;
    var _2;
    var _3;
    var _4;
    var _5;
    var _6 = false;
    var _7 = "EXANIMO-managers-StateManager-iFrame";
    var _e;

    function _self() {
        return EXANIMO.managers.StateManager;
    }
    var _9 = navigator.appName.indexOf("Microsoft Internet") != -1 ? "IFRAME" : navigator.userAgent.indexOf("Safari") != -1 ? "LINK" : "HASH";

    function _getStateID() {
        return document.location.href.split("#")[1] || _self().defaultStateID;
    }
    function _getSWF() {
        var _a = ["object", "embed"];
        for (var i = 0; i < _a.length; i++) {
            var a = document.getElementsByTagName(_a[i]);
            for (var j = 0; j < a.length; j++) {
                if (a[j].dispatchStateChangeEvents) {
                    return a[j];
                }
            }
        }
    }
    function _dispatchEvent(_e, _f) {
        _e = _e || _self().defaultStateID;
        if (!_4) {
            _e = {
                id: _e
            };
            var f;
            if (f = _self().onstatechange) {
                _e.type = "stateChange";
                f(_e);
            }
            if (_f) {
                if (f = _self().onstateset) {
                    _e.type = "stateSet";
                    f(_e);
                }
            } else {
                if (f = _self().onstaterevisit) {
                    _e.type = "stateRevisit";
                    f(_e);
                }
            }
            _e = null;
        } else {
            if (!_f) {
                _4.dispatchStateChangeEvents(_e);
            }
        }
    }
    var _11 = (function () {
        switch (_9) {
        case "HASH":
            return function (_12) {
                document.location.hash = _12 == _self().defaultStateID ? "#" : _12;
                _5 = _12;
            };
        case "IFRAME":
            return function (_13) {
                _6 = true;
                var _14 = document.getElementById(_7);
                frames[_7].document.open();
                frames[_7].document.write("<script>parent.document.location.hash = \"" + (_13 == _self().defaultStateID ? "#" : _13) + "\"; /* Wait for IE to impose its title before setting ours. */ setTimeout( function(){ parent.EXANIMO.managers.StateManager._updateIFrame(\"" + _13 + "\"); }, 0);</script>");
                frames[_7].document.close();
            };
        case "LINK":
            return function (_15) {
                _6 = true;
                var a = document.createElement("a");
                a.setAttribute("href", _15 == _self().defaultStateID ? "#" : "#" + _15);
                var evt = document.createEvent("MouseEvents");
                evt.initEvent("click", true, true);
                a.dispatchEvent(evt);
                document.location.EXANIMO.managers.StateManager.stateList.push(_15);
            };
        }
    })();
    EXANIMO.managers.StateManager = {
        CHECK_RATE: 100,
        onstatechange: null,
        onstateset: null,
        onstaterevisit: null,
        DEFAULT_STATE: "defaultState",
        defaultStateID: "defaultState",
        initialize: function (swf) {
            if (_1) {
                return;
            }
            _1 = true;
            _4 = swf == true ? _getSWF() : swf;
            switch (_9) {
            case "HASH":
                _5 = _getStateID() == _self().defaultStateID ? _self().defaultStateID : null;
                var _19 = function () {
                    var _1a = _getStateID();
                    if (_1a != _5) {
                        _5 = _1a;
                        _dispatchEvent(_1a);
                    }
                };
                _2 = setInterval(_19, _self().CHECK_RATE);
                break;
            case "IFRAME":
                _6 = true;
                var _1b = document.createElement("iframe");
                _1b.setAttribute("src", "about:blank");
                _1b.setAttribute("name", _7);
                _1b.setAttribute("id", _7);
                _1b.style.visibility = "hidden";
                _1b.style.width = "0";
                _1b.style.height = "0";
                _1b.style.position = "absolute";
                _1b.style.overflow = "hidden";
                document.body.appendChild(_1b);
                var _1c = _getStateID();
                if (_1c != _self().defaultStateID) {
                    setTimeout(function () {
                        _dispatchEvent(_1c);
                    }, 0);
                }
                frames[_7].document.open();
                if (_1c) {
                    frames[_7].document.write("<script>parent.document.location.hash = \"" + (_1c == _self().defaultStateID ? "" : _1c) + "\"; parent.EXANIMO.managers.StateManager._updateIFrame(\"" + _1c + "\");</script>");
                } else {
                    frames[_7].document.write("<script>parent.document.location.hash = \"\"; parent.EXANIMO.managers.StateManager._updateIFrame();</script>");
                }
                frames[_7].document.close();
                break;
            case "LINK":
                document.location.EXANIMO = document.location.EXANIMO || {};
                document.location.EXANIMO.managers = document.location.EXANIMO.managers || {};
                document.location.EXANIMO.managers.StateManager = document.location.EXANIMO.managers.StateManager || {};
                var loc = document.location.EXANIMO.managers.StateManager;
                window.onunload = function () {
                    loc.oldHistoryLength = -1;
                };
                if (loc.deepLink && loc.deepLink != _self().defaultStateID) {
                    loc.oldHistoryLength = -1;
                    loc.deepLink = null;
                }
                if (typeof loc.stateList == "undefined") {
                    loc.stateList = [_getStateID() || _self().defaultStateID];
                    loc.deepLink = loc.stateList[0];
                    loc.offset = history.length - 1;
                    while (loc.offset) {
                        loc.stateList.unshift(null);
                        loc.offset--;
                    }
                    delete loc.offset;
                    loc.oldHistoryLength = document.location.hash ? -1 : history.length;
                }
                var _1e = function () {
                    var loc = document.location.EXANIMO.managers.StateManager;
                    if (_6) {
                        _6 = false;
                        loc.oldHistoryLength = history.length;
                        return;
                    }
                    if (history.length != loc.oldHistoryLength) {
                        var _20 = loc.stateList[history.length - 1];
                        _dispatchEvent(_20);
                        loc.oldHistoryLength = history.length;
                    }
                };
                _2 = setInterval(_1e, _self().CHECK_RATE);
                break;
            }
        }, setState: function (_21, _22) {
            if (_22) {
                _self().setTitle(_22);
            }
            if (_e) {
                return;
            }
            _11(_21);
            _dispatchEvent(_21, true);
        }, setTitle: function (_23) {
            //window.document.title = _23 || " ";
        }, _updateIFrame: function (_24) {
            if (!_6) {
                _dispatchEvent(_24);
            }
            _6 = false;
        }
    };
})();
