﻿/// <reference path="packageLoader.js"/>
/// <reference path="jquery-1.5.min.js"/>
/// <reference path="layout.js"/>
/// <reference path="gadgetProxy.js"/>
/// <reference path="tools.js"/>
/// <reference path="menuRander.js"/>
/// <reference path="analytics.js"/>
var displayManager = (function () {
    var loadedGadgets = {};
    var functionKeyClickedCallBack = [];
    $(function () {
        function loadContent(hash) {
            var subBookmark = ""
            var spindex = hash.indexOf(':');
            if (spindex > 0) {
                subBookmark = hash.slice(hash.indexOf(':') + 1);
                hash = hash.substring(0, spindex);
            }
            if (loadedGadgets[hash]) {
                menuRander.hide();
                for (var key in loadedGadgets) {
                    if (loadedGadgets[key]) {
                        if (key == hash) {
                            loadedGadgets[key].set({ visible: true });
                            loadedGadgets[key].loadBookmark(subBookmark);
                        }
                        else {
                            loadedGadgets[key].set({ visible: false });
                        }
                    }
                }
            }
            else {
                for (var key in loadedGadgets) {
                    if (loadedGadgets[key])
                        loadedGadgets[key].set({ visible: false });
                }
                var gadget = packageLoader.getGadget(hash);
                if (gadget) {
                    analytics.trackAction("" + gadget.title + "(" + gadget.groupKey + ")");
                    menuRander.hide();
                    var gadgetElement = $("<iframe id='main_content_" + hash + "'/>");
                    gadgetElement.css({
                        width: "100%",
                        height: "100%",
                        border: "0 none transparent",
                        frameborder: "0",
                        //'-moz-border-radius': '12px',
                        'border-radius': '12px'
                    });
                    var gadgetLayer = gadgetProxy.activeGadget(hash);
                    gadgetLayer.onSetBookmark(function (bookmark) {
                        if (subBookmark != bookmark) {
                            $.history.load(hash + (bookmark ? ":" + bookmark : ""));
                        }
                    });
                    loadedGadgets[hash] = gadgetLayer;
                    gadgetLayer.set({
                        targetEle: gadgetElement,
                        visible: true
                    });
                    if (!!gadget.redirectURL) {
                        gadgetElement.attr('src', gadget.redirectURL);
                    }
                    else {
                        if (!!gadget.preComplite) {
                            gadgetElement.attr('src', "deployment/" + gadget.deployPath + "/content.htm?id=" + hash);
                        }
                        else {
                            if (!!!tools.getUrlVars().nogadgetloader) {
                                gadgetElement.attr('src', "gadgetLoader?gurl=" + encodeURIComponent(gadget.url) + "&id=" + encodeURIComponent(hash));
                            }
                            else {
                                gadgetElement.attr('src', "gadgetContainer.htm");
                                gadgetElement.each(function () {
                                    this.onload = function () {
                                        this.contentWindow.gadget = gadgetProxy.getGadgetProxy(hash);
                                        if (this.contentWindow.bindBody) {
                                            this.contentWindow.bindBody(packageLoader.getGadget(hash).content);
                                        }
                                        else {
                                            function retry() {
                                                if (this.contentWindow.bindBody) {
                                                    this.contentWindow.bindBody(packageLoader.getGadget(hash).content);
                                                }
                                                else {
                                                    setTimeout(retry, 300);
                                                }
                                            }
                                            setTimeout(retry, 300);
                                        }
                                    };
                                });
                            }
                        }
                    }
                    gadgetLayer.loadBookmark(subBookmark);
                }
                else {
                    menuRander.show();
                }
            }
        }
        packageLoader.ready(function () {
            $.history.init(loadContent);
        });

        function createNavbar() {
            var targetElement = $("<div style='height:28px;width:100%;margin: 0;left:0; padding: 0;position: absolute;top:0;font-size:12px;font-family:Helvetica Neue,Arial,Helvetica,'Liberation Sans',FreeSans,sans-serif;' border=\"0\"></div>");
            (function CreateHeader() {
                var table = $("<table style='position: absolute;left:0;top:0;width:100%;padding:8px;' border=\"0\" cellspacing=\"0\" cellpadding=\"0\"></table>");
                var tr = $("<tr border='0'></tr>");
                var td = $("<td class='td1' align='left' nowrap='nowrap' border='0' style='text-align:left;vertical-align:text-bottom;'></td>");
                $("<a style='padding-left:10px;font-size:12px;' href='#menu'>回首頁</a>").click(function (e) {

                    var url = $(this).attr('href');

                    //chrome裡用點中鍵不處理，讓他自己開新視窗
                    if (url && !(jQuery.browser.safari && e.button == 1)) {
                        url = url.replace(/^.*#/, '');
                        jQuery.history.load(url);
                        return false;
                    }
                }).appendTo(td);
                td.appendTo(tr);
                var td2 = $("<td class='td2' align='right' nowrap='nowrap' border='0' style='text-align:right;vertical-align:text-bottom;font-size:12px;'></td>");
                //                if (tools.getUrlVars().showDevTool) {
                //                    $("<a style='padding-right:10px;font-size:12px;' href='javascript:void(0)'>開發工具</a>").click(function () {
                //                        window.open("devtool.htm");
                //                        return false;
                //                    }).appendTo(td2);
                //                }
                $("<a class='loading' style='padding-right:10px;font-size:12px;'>loading...</a>").appendTo(td2);
                $("<a style='padding-right:10px;font-size:12px;' href='javascript:void(0)'>登出</a>").click(function () {
                    auth.logout();
                    return false;
                }).appendTo(td2);
                td2.appendTo(tr);
                table.appendTo(targetElement);
                tr.appendTo(table);

                layout.setNavigationBar(targetElement);
            })();
            (function CreateFooter() {
                var functionKey = "";
                var footerElement = $("<div style='width:100%;vertical-align:text-bottom;text-align:center;color:silver;font-size:12px;cursor:default;height:18px;'></div>");
                var blod = $("<b>copyright @ </b>");
                var i = $("<a>i</a>");
                var s = $("<a>s</a>");
                var c = $("<a>c</a>");
                var h = $("<a>h</a>");
                var o1 = $("<a>o</a>");
                var o2 = $("<a>o</a>");
                var l = $("<a>l</a>");
                i.appendTo(blod);
                s.appendTo(blod);
                c.appendTo(blod);
                h.appendTo(blod);
                o1.appendTo(blod);
                o2.appendTo(blod);
                l.appendTo(blod);
                blod.appendTo(footerElement);
                layout.setFooterBar(footerElement);


                i.click(
                    function () {
                        functionKey = "i";
                        for (var i = 0; i < functionKeyClickedCallBack.length; i++) {
                            functionKeyClickedCallBack[i](functionKey);
                        }
                    }
                ).hover(
                    function () {
                        $(this).text($(this).text().toUpperCase());
                    },
                    function () {
                        $(this).text($(this).text().toLocaleLowerCase());
                    }
                );
                $([s, c, h, o1, o2, l]).each(function (index, item) {
                    item.click(
                        function () {
                            functionKey += item.text().toLocaleLowerCase();
                            for (var i = 0; i < functionKeyClickedCallBack.length; i++) {
                                functionKeyClickedCallBack[i](functionKey);
                            }
                        }
                    ).hover(
                        function () {
                            $(this).text($(this).text().toUpperCase());
                        },
                        function () {
                            $(this).text($(this).text().toLocaleLowerCase());
                        }
                    );
                });
            })();
            var greeningConnection = auth.connectTo("http://web.ischool.com.tw/service/shared/user");
            greeningConnection.ready(function () {
                var userInfo = greeningConnection.getUserInfo();
                (function ArrangeUserInfo() {
                    if (userInfo && userInfo.Property) {
                        for (var i = 0; i < userInfo.Property.length; i++) {
                            userInfo[userInfo.Property[i].Name] = userInfo.Property[i]['@text'];
                        }
                    }
                })();
                targetElement.find(".loading").remove();
                (function IsHostLogin() {
                    if (userInfo.LoginType && userInfo.LoginType.replace(/^\s+|\s+$/g, '').toUpperCase() == "HOSTED") {//來個修改密碼吧，Hosted認證終於有可以讓openid認證忌妒的功能了!!
                        var f = $(
                        "<div style='display:none;position:absolute;top:28px;right:30px;z-index:65532;padding: 10px;border-radius: 10px;-moz-border-radius: 10px;border: 1px outset orange;background-color: silver;background: #EEE url(css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png) repeat-x 50% 0%;'>"
                        + "<table style='font-size: 12px;font-style: normal;font-variant: normal;font-weight: normal;'>"
                        + "<tr><td>輸入原密碼</td><td><input type='password' id='currentpw' /></td></tr>"
                        + "<tr><td>輸入新密碼</td><td><input type='password' id='newpw' /></td></tr>"
                        + "<tr><td>確認新密碼</td><td><input type='password' id='checkpw' /></td></tr>"
                        + "<tr><td colspan='2' align='right'><a class='todo' href='javascript:void(0);' style='margin-right:8px;'>確認</a><a class='nottodo' href='javascript:void(0);' style='margin-right:8px;'>取消</a></td></tr>"
                        + "</table>"
                        + "</div>");
                        var currentpw = f.find("#currentpw");
                        var newpw = f.find("#newpw");
                        var checkpw = f.find("#checkpw");
                        var submit = f.find(".todo");
                        var cancel = f.find(".nottodo");
                        cancel.click(function () {
                            currentpw.val("");
                            newpw.val("");
                            checkpw.val("");
                            f.hide();
                        });
                        submit.click(function () {
                            if (newpw.val() != checkpw.val()) {
                                alert("確認密碼與新密碼不相同。");
                            }
                            else {
                                if (newpw.val().length < 4) {
                                    alert("密碼必須超過4個字。");
                                }
                                else {
                                    var conn = dsutil.creatConnection("http://web.ischool.com.tw/service/shared/user", "" + userInfo.UserName, currentpw.val());
                                    conn.OnError(function (req, error) {
                                        if (error.loginError)
                                            alert("密碼錯誤。");
                                        else {
                                            alert("發生未知的錯誤。");
                                        }
                                    });
                                    conn.send({
                                        service: 'ChangeMyPassword'
                                    , autoRetry: true
                                    , body: {
                                        Request: {
                                            NewPassword: newpw.val()
                                        }
                                    }
                                    , result: function (resp, errorInfo) {
                                        if (errorInfo == null) {
                                            currentpw.val("");
                                            newpw.val("");
                                            checkpw.val("");
                                            f.hide();
                                            alert("密碼已變更。");
                                        }
                                    }
                                    });
                                }
                            }
                        });
                        f.appendTo($("body"));
                        $("<a style='padding-right:10px;font-size:12px;' href='javascript:void(0)'>修改密碼</a>").click(function () {
                            f.show();
                        }).prependTo(targetElement.find(".td2"));
                    }
                })();
                $("<a style='padding-right:10px;font-size:12px;'>" + (userInfo.FirstName ? (userInfo.FirstName + "(" + userInfo.UserName + ")") : userInfo.UserName) + "</a>").prependTo(targetElement.find(".td2"));
                greeningConnection.send({
                    service: 'GetMyDomainInfo',
                    result: function (resp, errorInfo, XMLHttpRequest) {
                        if (resp) {
                            document.title = "ischool web" + ((resp.DomainInfo && resp.DomainInfo.Caption) ? "(" + resp.DomainInfo.Caption + ")" : "");
                            (function IsHostLogin() {
                                if (userInfo.LoginType && userInfo.LoginType.replace(/^\s+|\s+$/g, '').toUpperCase() == "GOOGLE") {
                                    $("<a target='_blank' style='padding-left:10px;font-size:12px;' href='https://mail.google.com/a/" + resp.DomainInfo.DomainName + "/'>郵件</a>").appendTo(targetElement.find(".td1"));
                                    $("<a target='_blank' style='padding-left:10px;font-size:12px;' href='https://www.google.com/calendar/hosted/" + resp.DomainInfo.DomainName + "/'>日曆</a>").appendTo(targetElement.find(".td1"));
                                    $("<a target='_blank' style='padding-left:10px;font-size:12px;' href='https://docs.google.com/a/" + resp.DomainInfo.DomainName + "/'>文件</a>").appendTo(targetElement.find(".td1"));
                                    $("<a target='_blank' style='padding-left:10px;font-size:12px;' href='https://sites.google.com/a/" + resp.DomainInfo.DomainName + "/'>協作平台</a>").appendTo(targetElement.find(".td1"));
                                }
                            })();
                        }
                        else {
                            //                            alert('GetMyDomainInfo Error!!');
                        }
                    }
                });
            });
        }
        auth.onLogin(createNavbar);
        auth.onLogout(function () {
            layout.setNavigationBar($("<div />"));
            layout.setFooterBar($("<div />"));
            for (var key in loadedGadgets) {
                if (loadedGadgets[key]) {
                    gadgetProxy.removeGadgetLayer(key);
                }
            }
            loadedGadgets = {};
        });
    });
    var devTool = null;
    functionKeyClickedCallBack.push(function (key) {
        if (key == "ilh") {
            if (devTool && !devTool.closed) {
                devTool.focus();
            }
            else {
                devTool = window.open("devtool.htm", "devtool", "width=900,height=650,location=no,menubar=no,toolbar=no,status=no,directories=no");
            }
        }
    });
    return {
        isGadgetLoaded: function (id) {
            return (!!loadedGadgets[id]);
        },
        refreshGadget: function (id) {
            var status = gadgetProxy.checkLeave(id);
            if (status == "" || confirm(status + "\n重新載入將會清楚所有狀態，\n是否確定要重新載入?")) {
                gadgetProxy.removeGadgetLayer(id);
                loadedGadgets[id] = null;
                return true;
            }
            else {
                return false;
            }
        } //,
        //        functionKeyClicked: function (callback) {
        //            if (callback) {
        //                functionKeyClickedCallBack.push(callback);
        //            }
        //        }
    };
} ());
//$.ready(function () {
//    packageLoader.ready(function () {
//       
//        $.history.init(loadContent);
//    })
//});
