﻿/// <reference path="tools.js"/>
/// <reference path="xml2json.js"/>
/// <reference path="dsnsLookup.js"/>
/// <reference path="authentication.js"/>
/// <reference path="jquery-1.5.min.js"/>
/// <reference path="log.js"/>

var packageLoader = (function () {
    var gadgetLookup = {};
    var ready = false;
    var urlReady = false;
    var urlPackage = {};

    var gadgetGroup = {};

    var personalReady = false;
    var personalPackage = {};

    var dynamicReady = false;
    var dynamicPackage = {};

    var readyCallBack = [];

    var result = {
        packages: [],
        getGadget: function (id) {
            return gadgetLookup[id];
        },
        ready: function (fn) {
            readyCallBack.push(fn);
            if (ready) {
                fn();
            }
        }
    };
    function raiseReady() {
        if (ready) {
            for (var i = 0; i < readyCallBack.length; i++) {
                readyCallBack[i]();
            }
        }
    }
    function margePackages() {
        if (urlReady && personalReady && dynamicReady) {
            result.packages = [];
            gadgetLookup = {};
            var packageMapping = {};
            var allGadgets = [];
            function marge() {
                this.title = this.title || '';
                this.icon = this.icon || 'http://l.yimg.com/a/i/nt/ic/ut/univ/ybangch16_1.gif';
                if (packageMapping[this.title])
                    var package = packageMapping[this.title];
                else {
                    var package = {
                        title: this.title,
                        icon: this.icon,
                        gadgets: []
                    };
                    packageMapping[this.title] = package;
                    result.packages.push(package);
                }
                var paramsTemplate = {};
                var applicationTemplate = "";
                if (this.Params) {
                    if (this.Params["@"] && this.Params["@"].push) {
                        for (var i = 0; i < this.Params["@"].length; i++) {
                            if (this.Params["@"][i] == "application") {
                                applicationTemplate = this.Params.application;
                                break;
                            }
                        }
                    }
                    $(this.Params.Param).each(function () {
                        paramsTemplate['' + this.name] = this['@text'] || "";
                    });
                }
                if (this.Gadgets && this.Gadgets.Gadget) {
                    $(this.Gadgets.Gadget).each(function (index, item) {
                        //#region Gadget基本內容
                        this.title = this.title || "";
                        this.url = this.url || "";
                        this.icon = this.icon || "";
                        this.id = this.id || "";
                        this.deployPath = this.deployPath || "";
                        this.groupKey = this.deployPath || this.url;
                        this.hint = "";
                        var application = applicationTemplate;
                        var p = this.Params;
                        var params = {};
                        for (var key in paramsTemplate) {
                            params[key] = paramsTemplate[key];
                        }
                        if (p) {
                            if (p["@"] && p["@"].push()) {
                                for (var i = 0; i < p["@"].length; i++) {
                                    if (p["@"][i] == "application") {
                                        application = p.Application;
                                        break;
                                    }
                                }
                            }
                            $(p.Param).each(function () {
                                params['' + this.name] = this['@text'] || "";
                            });
                        }
                        this.Params = undefined;
                        this.params = params;
                        this.application = application;
                        //#region this.setExterior 
                        //FOR MenuRander
                        var exteriorChangedCallBack = [];
                        function exteriorChanged(config) {
                            item.title = config.title || item.title;
                            item.icon = config.icon || item.icon;
                            item.hint = config.hint;
                            for (var i = 0; i < exteriorChangedCallBack.length; i++) {
                                exteriorChangedCallBack[i]();
                            }
                        }
                        this.setExterior = function (config) { exteriorChanged(config); };
                        this.onExteriorChanged = function (fn) { if (fn) exteriorChangedCallBack.push(fn); };
                        //#endregion
                        //#endregion
                        if (!gadgetGroup[this.groupKey]) {
                            gadgetGroup[this.groupKey] = [];
                        }
                        gadgetGroup[this.groupKey].push(this);
                        this.getGroup = function () {
                            return gadgetGroup[this.groupKey];
                        };
                        allGadgets.push(this);
                        package.gadgets.push(this);
                    });
                }
            }
            if (dynamicPackage.Packages)
                $(dynamicPackage.Packages.Package).each(marge);
            if (personalPackage.Packages)
                $(personalPackage.Packages.Package).each(marge);
            if (urlPackage.Packages)
                $(urlPackage.Packages.Package).each(marge);

            var loadingCount = allGadgets.length;
            var applicationCount = 0;
            var applicationDictionation = {};
            function complite() {
                //#region 對Gadget的ID進行unq編碼，並加入至gadgetLookup
                for (var pname in packageMapping) {
                    var package = packageMapping[pname];
                    $(package.gadgets).each(function () {
                        this.id = this.id || "" + package.title + "-" + this.title;
                        this.id = this.id.replace(":", "");
                        var index = 0;
                        while (gadgetLookup[this.id + (index == 0 ? "" : ("-" + index))]) {
                            index++;
                        }
                        this.id = this.id + (index == 0 ? "" : ("-" + index));
                        gadgetLookup[this.id] = this;
                    });
                }
                //#endregion
                ready = true;
                raiseReady();
            }

            function getByURL(targetGadget) {
                targetGadget.preComplite = false;
                if (window.XDomainRequest) {
                    //#region 使用XDR，For IE
                    var xdr = new XDomainRequest();
                    xdr.onerror = xdr.ontimeout = function () {
                        loadingCount--;
                        targetGadget.title = targetGadget.title || "";
                        targetGadget.description = targetGadget.description || "";
                        targetGadget.author = targetGadget.author || "";
                        targetGadget.author_email = targetGadget.author_email || "";
                        targetGadget.thumbnail = targetGadget.thumbnail || "";
                        if (applicationCount == 0 && loadingCount == 0) {
                            complite()
                        }
                    };
                    xdr.onprogress = function () { };
                    xdr.onload = function () {
                        try {
                            var module = xml2json.parser(xdr.responseText).Module || {};
                            var modulePrefs = module.ModulePrefs || {};
                            targetGadget.title = targetGadget.title || "";
                            targetGadget.description = targetGadget.description || "";
                            targetGadget.author = targetGadget.author || "";
                            targetGadget.author_email = targetGadget.author_email || "";
                            targetGadget.thumbnail = targetGadget.thumbnail || "";
                            if (modulePrefs["@"] && modulePrefs["@"].push()) {
                                for (var i = 0; i < modulePrefs["@"].length; i++) {
                                    if (modulePrefs["@"][i] == "title") {
                                        targetGadget.title = targetGadget.title || modulePrefs.title; //如果在package.xml有另外描述則以package的內容優先
                                    }
                                    if (modulePrefs["@"][i] == "description") {
                                        targetGadget.description = modulePrefs.description;
                                    }
                                    if (modulePrefs["@"][i] == "author") {
                                        targetGadget.author = modulePrefs.author;
                                    }
                                    if (modulePrefs["@"][i] == "author_email") {
                                        targetGadget.author_email = modulePrefs.author_email;
                                    }
                                    if (modulePrefs["@"][i] == "thumbnail") {
                                        targetGadget.thumbnail = modulePrefs.thumbnail;
                                    }
                                    if (modulePrefs["@"][i] == "popupURL") {
                                        targetGadget.popupURL = modulePrefs.popupURL;
                                    }
                                    if (modulePrefs["@"][i] == "redirectURL") {
                                        targetGadget.redirectURL = modulePrefs.redirectURL;
                                    }
                                }
                            }
                            if (modulePrefs.Icon) {
                                //'data:image/gif;base64,"+stu.Photo+"'
                                //  <Icon mode="base64" type="image/png">base64 encoded data</Icon>
                                if (modulePrefs.Icon["@"]) {
                                    targetGadget.icon = "data:" + (modulePrefs.Icon.type || "image/png") + ";" + (modulePrefs.Icon.mode || "image/png") + "," + modulePrefs.Icon["@text"];
                                }
                                else
                                    targetGadget.icon = modulePrefs.Icon;
                            }
                            targetGadget.content = (module.Content && module.Content['@text']) ? (module.Content['@text']) : (module.Content || "");
                            targetGadget.preload = (module.Preload && module.Preload['@text']) ? (module.Preload['@text']) : (module.Preload || "");
                        }
                        catch (exc) { }
                        loadingCount--;
                        if (applicationCount == 0 && loadingCount == 0) {
                            complite()
                        }
                    };
                    xdr.open("GET", targetGadget.url);
                    xdr.send();
                    //#endregion
                }
                else {
                    //#region 使用標準ajax物件
                    try {
                        $.ajax({
                            //                    url: "domainProxy?url=" + encodeURIComponent(targetGadget.url),
                            url: targetGadget.url,
                            crossDomain: true,
                            success: function (data, textStatus, XMLHttpRequest) {
                                try {
                                    var module = xml2json.parser(XMLHttpRequest.responseText).Module || {};
                                    var modulePrefs = module.ModulePrefs || {};
                                    targetGadget.title = targetGadget.title || "";
                                    targetGadget.description = targetGadget.description || "";
                                    targetGadget.author = targetGadget.author || "";
                                    targetGadget.author_email = targetGadget.author_email || "";
                                    targetGadget.thumbnail = targetGadget.thumbnail || "";
                                    if (modulePrefs["@"] && modulePrefs["@"].push()) {
                                        for (var i = 0; i < modulePrefs["@"].length; i++) {
                                            if (modulePrefs["@"][i] == "title") {
                                                targetGadget.title = targetGadget.title || modulePrefs.title; //如果在package.xml有另外描述則以package的內容優先
                                            }
                                            if (modulePrefs["@"][i] == "description") {
                                                targetGadget.description = modulePrefs.description;
                                            }
                                            if (modulePrefs["@"][i] == "author") {
                                                targetGadget.author = modulePrefs.author;
                                            }
                                            if (modulePrefs["@"][i] == "author_email") {
                                                targetGadget.author_email = modulePrefs.author_email;
                                            }
                                            if (modulePrefs["@"][i] == "thumbnail") {
                                                targetGadget.thumbnail = modulePrefs.thumbnail;
                                            }
                                            if (modulePrefs["@"][i] == "popupURL") {
                                                targetGadget.popupURL = modulePrefs.popupURL;
                                            }
                                            if (modulePrefs["@"][i] == "redirectURL") {
                                                targetGadget.redirectURL = modulePrefs.redirectURL;
                                            }
                                        }
                                    }
                                    if (modulePrefs.Icon) {
                                        //'data:image/gif;base64,"+stu.Photo+"'
                                        //  <Icon mode="base64" type="image/png">base64 encoded data</Icon>
                                        if (modulePrefs.Icon["@"]) {
                                            targetGadget.icon = "data:" + (modulePrefs.Icon.type || "image/png") + ";" + (modulePrefs.Icon.mode || "image/png") + "," + modulePrefs.Icon["@text"];
                                        }
                                        else
                                            targetGadget.icon = modulePrefs.Icon;
                                    }
                                    targetGadget.content = (module.Content && module.Content['@text']) ? (module.Content['@text']) : (module.Content || "");
                                    targetGadget.preload = (module.Preload && module.Preload['@text']) ? (module.Preload['@text']) : (module.Preload || "");
                                }
                                catch (exc) { }
                                loadingCount--;
                                if (applicationCount == 0 && loadingCount == 0) {
                                    complite()
                                }
                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                loadingCount--;
                                targetGadget.title = targetGadget.title || "";
                                targetGadget.description = targetGadget.description || "";
                                targetGadget.author = targetGadget.author || "";
                                targetGadget.author_email = targetGadget.author_email || "";
                                targetGadget.thumbnail = targetGadget.thumbnail || "";
                                if (applicationCount == 0 && loadingCount == 0) {
                                    complite()
                                }
                            }
                        });
                    }
                    catch (err) {
                        loadingCount--;
                        targetGadget.title = targetGadget.title || "";
                        targetGadget.description = targetGadget.description || "";
                        targetGadget.author = targetGadget.author || "";
                        targetGadget.author_email = targetGadget.author_email || "";
                        targetGadget.thumbnail = targetGadget.thumbnail || "";
                        if (applicationCount == 0 && loadingCount == 0) {
                            complite()
                        }
                    }
                    //#endregion
                }
            }
            function getByDeployPath(targetGadget) {
                try {
                    $.ajax({
                        //                    url: "domainProxy?url=" + encodeURIComponent(targetGadget.url),
                        url: "deployment/" + targetGadget.deployPath + "/description.xml",
                        success: function (data, textStatus, XMLHttpRequest) {
                            try {
                                var module = xml2json.parser(XMLHttpRequest.responseText).Module || {};
                                var modulePrefs = module.ModulePrefs || {};
                                targetGadget.title = targetGadget.title || "";
                                targetGadget.description = targetGadget.description || "";
                                targetGadget.author = targetGadget.author || "";
                                targetGadget.author_email = targetGadget.author_email || "";
                                targetGadget.thumbnail = targetGadget.thumbnail || "";
                                if (modulePrefs["@"] && modulePrefs["@"].push()) {
                                    for (var i = 0; i < modulePrefs["@"].length; i++) {
                                        if (modulePrefs["@"][i] == "title") {
                                            targetGadget.title = targetGadget.title || modulePrefs.title; //如果在package.xml有另外描述則以package的內容優先
                                        }
                                        if (modulePrefs["@"][i] == "description") {
                                            targetGadget.description = modulePrefs.description;
                                        }
                                        if (modulePrefs["@"][i] == "author") {
                                            targetGadget.author = modulePrefs.author;
                                        }
                                        if (modulePrefs["@"][i] == "author_email") {
                                            targetGadget.author_email = modulePrefs.author_email;
                                        }
                                        if (modulePrefs["@"][i] == "thumbnail") {
                                            targetGadget.thumbnail = modulePrefs.thumbnail;
                                        }
                                        if (modulePrefs["@"][i] == "popupURL") {
                                            targetGadget.popupURL = modulePrefs.popupURL;
                                        }
                                        if (modulePrefs["@"][i] == "redirectURL") {
                                            targetGadget.redirectURL = modulePrefs.redirectURL;
                                        }
                                    }
                                }
                                if (modulePrefs.Icon) {
                                    //'data:image/gif;base64,"+stu.Photo+"'
                                    //  <Icon mode="base64" type="image/png">base64 encoded data</Icon>
                                    if (modulePrefs.Icon["@"]) {
                                        targetGadget.icon = "data:" + (modulePrefs.Icon.type || "image/png") + ";" + (modulePrefs.Icon.mode || "image/png") + "," + modulePrefs.Icon["@text"];
                                    }
                                    else
                                        targetGadget.icon = "deployment/" + targetGadget.deployPath + "/" + modulePrefs.Icon;
                                }
                                targetGadget.preComplite = true;
                                loadingCount--;
                                if (applicationCount == 0 && loadingCount == 0) {
                                    complite()
                                }
                            }
                            catch (exc) {
                                loadingCount--;
                                targetGadget.title = (targetGadget.title || "") + "描述檔載入失敗。";
                                targetGadget.description = targetGadget.description || "";
                                targetGadget.author = targetGadget.author || "";
                                targetGadget.author_email = targetGadget.author_email || "";
                                targetGadget.thumbnail = targetGadget.thumbnail || "";
                                if (applicationCount == 0 && loadingCount == 0) {
                                    complite()
                                }
                            }
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            loadingCount--;
                            targetGadget.title = (targetGadget.title || "") + "無法取得描述檔。";
                            targetGadget.description = targetGadget.description || "";
                            targetGadget.author = targetGadget.author || "";
                            targetGadget.author_email = targetGadget.author_email || "";
                            targetGadget.thumbnail = targetGadget.thumbnail || "";
                            if (applicationCount == 0 && loadingCount == 0) {
                                complite()
                            }
                        }
                    });
                }
                catch (err) {
                    loadingCount--;
                    targetGadget.title = (targetGadget.title || "") + "無法取得描述檔。";
                    targetGadget.description = targetGadget.description || "";
                    targetGadget.author = targetGadget.author || "";
                    targetGadget.author_email = targetGadget.author_email || "";
                    targetGadget.thumbnail = targetGadget.thumbnail || "";
                    if (applicationCount == 0 && loadingCount == 0) {
                        complite()
                    }
                }
            }

            $(allGadgets).each(function (index, targetGadget) {
                if (targetGadget.deployPath)
                    getByDeployPath(targetGadget);
                else
                    getByURL(targetGadget);

            });
            for (var i = 0; i < allGadgets.length; i++) {
                var targetGadget = allGadgets[i];
                var targetApplication = targetGadget.application;
                if (targetApplication) {
                    if (!applicationDictionation[targetApplication]) {
                        applicationCount++;
                        applicationDictionation[targetApplication] = [];
                    }
                    applicationDictionation[targetApplication].push(targetGadget);
                }
            }
            function lookupAndReplace(application) {
                dsutil.dsnsLookup(application).complite(function (lookupResult) {
                    for (var i = 0; i < applicationDictionation[application].length; i++) {
                        applicationDictionation[application][i].application = lookupResult;
                    }
                    applicationCount--;
                    if (applicationCount == 0 && loadingCount == 0) {
                        complite()
                    }
                });
            }
            if (applicationCount > 0) {
                for (var app in applicationDictionation) {
                    lookupAndReplace(app);
                }
            }
            else if (loadingCount == 0) {
                complite()
            }
        }
    }
    $(function () {
        var urlParams = tools.getUrlVars();

        if (urlParams.package) {
            var loditem = {
                title: 'GetURLPackage:loading',
                url: "" + urlParams.package,
                textStatus: "unknow",
                errorThrown: "unknow"
            };
            log.logRequest(loditem);
            if (window.XDomainRequest) {
                //#region 使用XDR，ForIE
                loditem.provider = "xdr";
                var xdr = new XDomainRequest();
                xdr.onerror = xdr.ontimeout = function () {
                    loditem.title = 'GetURLPackage:error';
                    urlReady = true;
                    margePackages();
                };
                xdr.onprogress = function () { };
                xdr.onload = function () {
                    var result = xml2json.parser(xdr.responseText);
                    loditem.title = 'GetURLPackage:success';
                    loditem.result = result;
                    urlPackage = result;
                    urlReady = true;
                    margePackages();
                };
                xdr.open("GET", targeturl);
                xdr.send();
                //#endregion
            }
            else {
                //#region 使用標準ajax物件
                try {
                    $.ajax({
                        url: urlParams.package,
                        crossDomain: true,
                        success: function (data, textStatus, XMLHttpRequest) {
                            urlPackage = xml2json.parser(XMLHttpRequest.responseText);
                            loditem.title = 'GetURLPackage:success';
                            loditem.result = urlPackage;
                            urlReady = true;
                            margePackages();
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            //alert(textStatus);
                            loditem.title = 'GetURLPackage:error';
                            loditem.textStatus = textStatus;
                            loditem.errorThrown = errorThrown;
                            urlReady = true;
                            margePackages();
                        }
                    });
                }
                catch (err) {
                    loditem.title = 'GetURLPackage:error';
                    loditem.err = err;
                    urlReady = true;
                    margePackages();
                }
                //#endregion
            }
        }
        else {
            urlReady = true;
        }
    });
    function getPersonalPackage() {
        personalReady = false;
        personalPackage = {};
        var conn = auth.connectTo("http://web.ischool.com.tw/service/shared/user");
        conn.send({
            service: 'GetMyPersonalPackage',
            result: function (resp, errorInfo, XMLHttpRequest) {
                if (resp || resp == "") {
                    personalPackage = resp;
                }
                else {
                    alert('GetMyPersonalPackage Faild!!');
                }
                personalReady = true;
                margePackages();
            }
        });
    }
    function getDynamicPackage() {
        dynamicReady = false;
        dynamicPackage = { Packages: { Package: []} }; // dynamicPackage.Packages.Package
        var conn = auth.connectTo("http://web.ischool.com.tw/service/shared/user");
        conn.send({
            service: 'GetMyDomainInfo',
            result: function (resp, errorInfo, XMLHttpRequest) {
                if (resp || resp == "") {
                    var urllist = [];
                    var userID = conn.getUserInfo().UserName;
                    function getPackageContent() {
                        if (urllist.length > 0) {
                            var urlPackageMapping = {};
                            var processedCount = 0;
                            $(urllist).each(function (index, targeturl) {
                                var loditem = {
                                    title: 'GetDynamicPackage:loading',
                                    url: "" + targeturl,
                                    textStatus: "unknow",
                                    errorThrown: "unknow"
                                };
                                log.logRequest(loditem);
                                //                            var targeturl = this;
                                if (window.XDomainRequest) {
                                    loditem.provider = "xdr";
                                    var xdr = new XDomainRequest();
                                    xdr.onerror = xdr.ontimeout = function () {
                                        loditem.title = 'GetDynamicPackage:error';
                                        alert('getDynamicPackage Faild!!(GetUrlPackage faild)\n' + targeturl);
                                        processedCount++;
                                        if (processedCount == urllist.length) {
                                            for (var i = 0; i < urllist.length; i++) {
                                                $(urlPackageMapping[urllist[i]]).each(function () {
                                                    dynamicPackage.Packages.Package.push(this);
                                                });
                                            }
                                            dynamicReady = true;
                                            margePackages();
                                        }
                                    };
                                    xdr.onprogress = function () { };
                                    xdr.onload = function () {
                                        var result = xml2json.parser(xdr.responseText);
                                        loditem.title = 'GetDynamicPackage:success';
                                        loditem.result = result;
                                        if (result.Packages && result.Packages.Package) {
                                            urlPackageMapping[targeturl] = result.Packages.Package;
                                        }
                                        processedCount++;
                                        if (processedCount == urllist.length) {
                                            for (var i = 0; i < urllist.length; i++) {
                                                $(urlPackageMapping[urllist[i]]).each(function () {
                                                    dynamicPackage.Packages.Package.push(this);
                                                });
                                            }
                                            dynamicReady = true;
                                            margePackages();
                                        }
                                    };
                                    xdr.open("GET", targeturl);
                                    xdr.send();
                                }
                                else {
                                    try {
                                        $.ajax({
                                            //                                url: "domainProxy?url=" + encodeURIComponent(targeturl),
                                            url: targeturl,
                                            crossDomain: true,
                                            success: function (data, textStatus, XMLHttpRequest) {
                                                var result = xml2json.parser(XMLHttpRequest.responseText);
                                                loditem.title = 'GetDynamicPackage:success';
                                                loditem.result = result;
                                                if (result.Packages && result.Packages.Package) {
                                                    urlPackageMapping[targeturl] = result.Packages.Package;
                                                    //                                        $(result.Packages.Package).each(function () {
                                                    //                                            dynamicPackage.Packages.Package.push(this);
                                                    //                                        });
                                                }
                                                processedCount++;
                                                if (processedCount == urllist.length) {
                                                    for (var i = 0; i < urllist.length; i++) {
                                                        $(urlPackageMapping[urllist[i]]).each(function () {
                                                            dynamicPackage.Packages.Package.push(this);
                                                        });
                                                    }
                                                    dynamicReady = true;
                                                    margePackages();
                                                }
                                            },
                                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                                //                                        log.logRequest({
                                                //                                            title: 'GetDynamicPackage:error',
                                                //                                            url: "" + targeturl,
                                                //                                            textStatus: textStatus,
                                                //                                            errorThrown: errorThrown
                                                //                                        });
                                                loditem.title = 'GetDynamicPackage:error';
                                                loditem.textStatus = textStatus;
                                                loditem.errorThrown = errorThrown;
                                                alert('getDynamicPackage Faild!!(GetUrlPackage faild)\n' + targeturl);
                                                processedCount++;
                                                if (processedCount == urllist.length) {
                                                    for (var i = 0; i < urllist.length; i++) {
                                                        $(urlPackageMapping[urllist[i]]).each(function () {
                                                            dynamicPackage.Packages.Package.push(this);
                                                        });
                                                    }
                                                    dynamicReady = true;
                                                    margePackages();
                                                }
                                            }
                                        });
                                    }
                                    catch (err) {
                                        loditem.title = 'GetDynamicPackage:error';
                                        loditem.err = err;
                                        processedCount++;
                                        if (processedCount == urllist.length) {
                                            for (var i = 0; i < urllist.length; i++) {
                                                $(urlPackageMapping[urllist[i]]).each(function () {
                                                    dynamicPackage.Packages.Package.push(this);
                                                });
                                            }
                                            dynamicReady = true;
                                            margePackages();
                                        }
                                    }
                                }
                            });
                        }
                        else {
                            dynamicReady = true;
                            margePackages();
                        }
                    }

                    var apurlcount = 0;
                    if (resp.DomainInfo && resp.DomainInfo.APUrl && resp.DomainInfo.APUrl.url) {
                        //#region 如果有APUrl以APUrl的Package為主
                        if ($.isArray(resp.DomainInfo.APUrl.url)) {
                            for (var i = 0; i < resp.DomainInfo.APUrl.url.length; i++) {
                                apurlcount++;
                                dsutil.dsnsLookup(resp.DomainInfo.APUrl.url[i]).complite(function (url) {
                                    urllist.push(url.replace(/\/$/g, '') + "/dynpkg/package.list?rsptype=xmlcontent&parser=onelayer&content=UserID:" + userID);
                                    apurlcount--;
                                    if (apurlcount == 0)
                                        getPackageContent();
                                });
                            }
                        }
                        else {
                            dsutil.dsnsLookup(resp.DomainInfo.APUrl.url).complite(function (url) {
                                urllist.push(url.replace(/\/$/g, '') + "/dynpkg/package.list?rsptype=xmlcontent&parser=onelayer&content=UserID:" + userID);
                                getPackageContent();
                            });
                        }
                        //#endregion
                    }
                    else {
                        //#region 沒有APUrl才使用DynamicPackage，以支援資料未同步升級的情況
                        if (resp.DomainInfo && resp.DomainInfo.DynamicPackage && resp.DomainInfo.DynamicPackage.url) {
                            if ($.isArray(resp.DomainInfo.DynamicPackage.url)) {
                                for (var i = 0; i < resp.DomainInfo.DynamicPackage.url.length; i++) {
                                    urllist.push(resp.DomainInfo.DynamicPackage.url[i].replace("{UserID}", userID));
                                }
                            }
                            else {
                                urllist.push(resp.DomainInfo.DynamicPackage.url.replace("{UserID}", userID));
                            }
                            getPackageContent();
                        }
                        //#endregion
                    }
                }
                else {
                    alert('getDynamicPackage Faild!!(GetMyDomainInfo faild)');
                    dynamicReady = true;
                    margePackages();
                }
            }
        });
    }
    auth.onLogin(function () {
        personalReady = false;
        dynamicReady = false;
        getPersonalPackage();
        getDynamicPackage();
    });
    return result;
} ());
