﻿var PageManager = { Category: { Page: "Detail.html", NeedRedirect: true, Redirect: function(params) { PageManager.Redirect("Category", params); } },
    PlayList: { Page: "Dossier.html", NeedRedirect: true, Redirect: function(params) { PageManager.Redirect("PlayList", params); } },
    Mediathek: { Page: "Mediathek.html", NeedRedirect: true, Redirect: function(params) { PageManager.Redirect("Mediathek", params); } },
    Home: { Page: "/", Redirect: function(params) { PageManager.Redirect("Home", params); } },
    Redirect: function(name, params) {
        var sendPs = "";
        if (params && params != true) {
            for (key in params)
                sendPs += (sendPs.length != 0 ? "|" : "#") + (PageManager.ParamNames.Url[key] || key) + "=" + params[key];
        } else if (params)
            sendPs = location.hash || location.search;
        location.href = PageManager[name].Page + sendPs;
    },
    CurrentHash: null,
    LastHash: "",
    Params: {},
    SetShare: function() {
        var shares = document.getElementsByName("share");
        var toshare = location.href;
        if (toshare.indexOf("#") != -1) toshare = toshare.substring(0, toshare.indexOf("#"));
        if (toshare.indexOf("?") != -1) toshare = toshare.substring(0, toshare.indexOf("?"));
        if (PageManager.CurrentHash) toshare += PageManager.CurrentHash;
        toshare = escape(toshare);
        for (var i = 0; i < shares.length; i++) {
            if (!shares[i].template) shares[i].template = shares[i].href;
            shares[i].href = shares[i].template + toshare;
        }
    },
    AddToHistory: function(params) {
        if (PageManager.IsPageLoading) {
            PageManager.IsPageLoading = false;
            return;
        }
        var newLocation = PageManager.GetHash(params);
        if (PageManager.CurrentHash != newLocation) {
            PageManager.ParamsChanging = true;
            PageManager.LastHash = newLocation;
            PageManager.CurrentHash = newLocation;
            PageManager.WriteHistory(false);
            PageManager.ParamsChanging = false;
        }
    },
    ForceRefresh: function() {
        location.replace("?__t=" + new Date().getTime() + (PageManager.CurrentHash || ""));
    },
    GoToTop: function() {
        PageManager.ParamsChanging = true;
        if (document.documentMode && document.documentMode >= 8)
            scroll(0, 0);
        else {
            location.replace("#top");
            location.replace(PageManager.LastHash);
        }
        PageManager.ParamsChanging = false;
    },
    ReplaceHash: function(params) {
        var newLocation = PageManager.GetHash(params);
        PageManager.ParamsChanging = true;
        PageManager.LastHash = newLocation;
        PageManager.CurrentHash = newLocation;
        document.location.replace(newLocation);
        PageManager.ParamsChanging = false;
    },
    GetHash: function(params) {
        var newHash = "";
        for (var key in params)
            newHash += (newHash == 0 ? "#" : "|") + (PageManager.ParamNames.Url[key] || key) + "=" + params[key];
        return newHash;
    },
    WriteHistory: function(init, replace) {
        if (document.documentMode && document.documentMode < 8) {
            if (!PageManager.HistoryIframe) {
                document.body.appendChild(PageManager.HistoryIframe = document.createElement("IFRAME"));
                PageManager.HistoryIframe.style.display = "none";
            }
            var doc = PageManager.HistoryIframe.contentWindow.document;
            doc.open();
            doc.write('<html><body><div id="state">' + PageManager.LastHash + '</div></body></html>');
            doc.close();
        }
        if (!init) {
            if (replace) location.replace(PageManager.CurrentHash);
            else location.href = PageManager.CurrentHash;
        }
        PageManager.SetShare();
    },
    IsHistoryChanged: function() {
        if (PageManager.ParamsChanging) return false;
        if (PageManager.HistoryIframe) {
            var currentHash = PageManager.HistoryIframe.contentWindow.document.getElementById("state").innerHTML;
            if (PageManager.LastHash != currentHash) {
                location.href = currentHash;
                return true;
            }
            return false;
        }
        else
            return PageManager.LastHash != location.hash;
    },
    HistoryIframe: null,
    ParamNames: { Url: { category: "c", videoid: "v", search: "s", plid: "p", autoplay: "a" }, Param: { c: "category", v: "videoid", s: "search", p: "plid", a: "autoplay"} },
    SetParamsFromLink: function() {
        PageManager.Params = {};
        var sep = location.hash.length > 1 ? "|" : "&";
        var searchStr = location.hash.length > 1 ? location.hash : location.search;
        PageManager.CurrentHash = location.hash.length > 1 ? location.hash : "";
        var setHash = !PageManager.CurrentHash;
        PageManager.LastHash = location.hash;
        if (searchStr.length > 1) {
            var paramsArr = searchStr.substring(1).split(sep);
            for (var i = 0; i < paramsArr.length; i++) {
                var paramArr = paramsArr[i].split("=");
                if (paramArr.length > 1 && paramArr[0] != "__t") {
                    if (paramArr.length > 2) paramArr[1] = paramsArr.slice(1).join("=");
                    paramArr[0] = paramArr[0].toLowerCase();
                    PageManager.Params[PageManager.ParamNames.Param[paramArr[0]] || paramArr[0]] = paramArr[1];
                    if (setHash)
                        PageManager.CurrentHash += (PageManager.CurrentHash.length == 0 ? "#" : "|") + (PageManager.ParamNames.Url[paramArr[0]] || paramArr[0]) + "=" + paramArr[1];
                }
            }
        }
        if (PageManager.Params.category) PageManager.Params.category = eval(PageManager.Params.category);
        if (PageManager.Params.plid) PageManager.Params.plid = eval(PageManager.Params.plid);
    },
    OnLoad: function() {
        if (location.hash || location.search)
            PageManager.SetParamsFromLink();
        onLoadObj.push("PageManager.WriteHistory(true)");
        PageManager.Listen();
    },
    IsPageLoading: true,
    ListenTimer: null,
    ParamsChanging: false,
    Listen: function() {
        if (PageManager.IsHistoryChanged()) {
            PageManager.SetParamsFromLink();
            PageManager.IsPageLoading = true;
            if (PageManager.HistoryChanged != null) PageManager.HistoryChanged();
        }
        PageManager.ListenTimer = window.setTimeout("PageManager.Listen()", 200);
    },
    HistoryChanged: null
};
PageManager.OnLoad();

