//ajax默认值
$.ajaxSetup({
            scriptCharset:"utf-8",//在使用getScript的时候,获取的js文件,按照utf-8的编码来获取
            ifModified:false,//=true时,表示每次都获取最新的,false的时候,只有数据修改过了才获取新的,否则使用缓存
            //  cache: false//不使用cache,可以获取最新的数据,但是效率低下,因为jquery是在url后面加入了时间戳,每次都是一个新的url
            cache: true
        });


//初始化
var modulesPath = "/cms/modules/"
var proxyName = "/cmsData/myapp.cmsdata.dao"
var defaultPublicParams        //获取默认的公共的参数数组
var defaultModulesParam


$(function() {

   // loadCheck();//判断页面是否加载完成
    //获取模板
    $.get(cmsFilePath+jsp_template+ "view.html", "", function(template) {
        $("#container").html(template)     //加载模板

    //获取默认的公共的参数数组,只需要加载一次
    $.getJSON(modulesPath + "publicParams.json", "", function(rtn) {
        defaultPublicParams = rtn

        $.getJSON(modulesPath + "modules.json", "", function(rtn1) {
            defaultModulesParam = rtn1
            loadModules()
        })
    })
    })

})

//加载所有模块
function loadModules() {
    $("div[module]").each(function() {
        var moduleDiv = this
        setTimeout(function() {
            loadModule(moduleDiv) //使用setTimeout可以使用异步执行loadModule,来提高显示体验
        }, 0)
    })
}

function getSelfParams(moduleName){
    var selfParams
    if(defaultModulesParam){
        var ok=false;
        for(var i=0;i<defaultModulesParam.length;i++){
            var modules=defaultModulesParam[i].modules;
            for(var j=0;j<modules.length;j++){
                var m=modules[j]
                if(m.key==moduleName){
                    selfParams=m.params
                    ok=true;
                    break;
                }
            }
            if(ok)break;
        }
    }
    return selfParams;
}


//加载某个模块 ,如果reloadHtml=true,表示必须重新加载,如果=false或为空,就根据内容是否存在来判断,如果有内容则不加载
function loadModule(moduleDiv, reloadHtml) {
    var module = JSON.parse($(moduleDiv).attr("module")) //写法要求必须标准,比较严格,比如名称也必须要""
    var pureModuleDiv = $(moduleDiv);
    //  var module = eval("(" + $(moduleDiv).attr("module") + ")")  //  支持以前的写法,相对 松
    var moduleName = module.name
    var moduleParams = module.params

    //获取默认的自己的参数数组
    //$.getJSON(modulesPath + moduleName + "/params.json", "",
    //        function(defaultSelfParams) {
        var defaultSelfParams=getSelfParams(moduleName);
//        var d = defaultPublicParams.slice(0)    //克隆数组
        var defaultParams = $.merge(defaultSelfParams, defaultPublicParams)//需要把公共的参数和各个模块的参数进行合并(所有的默认参数)
        // ,$.merge(param1,param2),param1会被修改的 所以公共参数必须放到后面,或者使用数组克隆 ,
        // 如果个体参数中有和公共参数重名的话,就会出现,参数的值一直是公共参数的默认值
        defaultParams = getParamObj_ByParamArray(defaultParams)   //把参数数组组合成一个参数对象(提取出key  value)
        moduleParams = $.extend(defaultParams, moduleParams)     //合并所有的参数(对象),并且使用设置的参数覆盖原有的默认参数,所以modulePrames必须在后面

        setModuleNewClass(moduleDiv, moduleParams)//设置模块的新的Class
        reloadHtml = getReloadHtml(moduleDiv, reloadHtml)
        if (reloadHtml) {
            moduleDiv = load9g(moduleDiv, moduleParams)  //加载9宫格
        }

        setTimeout(function() {
            //getConditions(moduleParams, function(condition) {
                evalModule(moduleDiv, moduleName, moduleParams, reloadHtml, pureModuleDiv)   //如果reloadHtml为false,这里面也不会加载任何东西,所以传递过去的moduelDiv,虽然不是9g的内部,其实也无所谓,不过担心,调用的功能js会出现什么问题
            //});
        }, 0);

    //})

}

//设置模块的新的Class   //设置模块id  ,容易重复,但是设置class,重复也不怕
function setModuleNewClass(moduleDiv, moduleParams) {
    if (moduleParams.newClass != null && moduleParams.newClass.length > 0) {
        $(moduleDiv).addClass(moduleParams.newClass)
    }
}

// 判断是否需要重新加载
function getReloadHtml(moduleDiv, reloadHtml) {
    //如果=false或为空,就根据内容是否存在来判断,如果有内容则不加载
    if (reloadHtml == null || ! reloadHtml) {
        if ($.trim($(moduleDiv).html()).length == 0) {             //如果没有内容,则重新生成
            reloadHtml = true
        }
    }
    if (reloadHtml) {
//        $(moduleDiv).html("加载中...")
    }
    return reloadHtml
}


//加载九宫格
function generalMore(moduleParams, moduleDiv, id) {
    var more = $(moduleDiv).find(".more");
    if (more.length == 0) {
        more = $('<a href="" class="title" style="float:right;margin-right:4px;display:block;clear:both"></a>');
        if (moduleParams.morePosition == "top") {
            $(moduleDiv).prepend(more);
        } else {
            $(moduleDiv).append(more);
//            $(moduleDiv).css("margin-bottom","0")
            more.after("<div class='clearfloat'></div>")
        }
    }
    if (moduleParams.hasMore) {
        more.html(moduleParams.moreText);
        var moreUrl;
        moduleParams.moreUrl != '' && (moreUrl = moduleParams.moreUrl);
        var moreurl = (moreUrl || "nodePage.jsp");
        if (moreurl.indexOf('?id') < 0)
            moreurl += "?id=" + id;
        more.attr("href", moreurl)
        more.attr("target", "_blank")
        if (moduleParams.otherQuery) {
            var wd = getParameterByUrl("wd") || "";
            more.attr("href", "searchPage.jsp?wd=" + wd + "&id=" + id + "&whereQuery=" + encodeURI(moduleParams.otherQuery) + "&orderSql=" + encodeURI(moduleParams.orderSql))
        }
    }
    else {
        more.remove();
//             $(moduleDiv).find("tfoot").hide()
    }
}
function load9g(moduleDiv, moduleParams) {
    var id = moduleParams.nodeId;
    id == -1 && (id = getParameterByUrl("id"));
    var div9g = $("<div class='div_9g'></div>");
    if (moduleParams.isShow9g) {
        var t9g = $('<table border="0" cellpadding="0" cellspacing="0" class="g9">'
                + '<thead><tr><td class="hl"></td><td class="hc"><a href="" target="_blank" class="title"></a></td><td class="hr"></td></tr></thead>'
                + '<tbody><tr><td class="bl"></td><td class="bc"></td><td class="br"></td></tr></tbody>'
                + '<tfoot><tr><td class="fl"></td><td class="fc"><a href="" target="_blank" class="more"></a></td><td class="fr"></td></tr></tfoot></table>')
        $(moduleDiv).html(div9g.html(t9g));
        $(moduleDiv).append("<div class='clearfloat'></div> ");

        if (!moduleParams.hasTitle)
            t9g.find('thead').css("display", "none");
        if (!moduleParams.hasMore)
            t9g.find('tfoot>.fc').css("display", "none");
        if (moduleParams.morePosition == "top") { //more的位置
            $(moduleDiv).find(".more").appendTo($(moduleDiv).find(".hc"))
        }
        if (moduleParams.title == '' && id) {
//            $(moduleDiv).find(".more").attr("href", "nodePage.jsp?id=" + id)
            if (isContentPage())
                $.post(proxyName + "/Dao_T_Content/getRowsById.fn", "id=" + id + "&fieldNames=f_id,f_title", function(rtnData) {
                    var rtn = JSON.parse(rtnData)
                    var name = rtn[0][1]
                    $(moduleDiv).find(".title").html(name) //获取内容的名称
                })
            else
                $.post(proxyName + "/Dao_T_Node/getRowsById.fn", "id=" + id + "&fieldNames=f_id,f_name", function(rtnData) {
                    var rtn = JSON.parse(rtnData)
                    var name = rtn[0][1]
                    $(moduleDiv).find(".title").html(name) //获取节点的名称
                })
        } //else
//        $(moduleDiv).find(".title").html(moduleParams.title)
        if ($.trim(moduleParams.moreUrl).length > 0) {
            $(moduleDiv).find(".title").html(moduleParams.title).attr("href", moduleParams.moreUrl)
        } else {
            $(moduleDiv).find(".title").html(moduleParams.title).attr("href", "nodePage.jsp?id=" + id)
        }

        generalMore(moduleParams, moduleDiv, id);

        return $(".bc", moduleDiv)
    } else {
        div9g.appendTo(moduleDiv);
        generalMore(moduleParams, moduleDiv, id);
        return div9g;
    }

}


//加载模块
function evalModule(moduleDiv, moduleName, moduleParams, reloadHtml, pureDiv) {
    //     $.getScript(modulesPath + moduleName + "/script.js?_rd="+Math.random(), function() {
    //$.getScript(modulesPath + moduleName + "/script.js", function() {
        eval(moduleName)(moduleDiv, moduleParams, reloadHtml, pureDiv)    //执行模块函数(加载模块)
    //})
}


//把一个参数数组转化为一个参数对象(提取key value)
function getParamObj_ByParamArray(defaultParams) {
    var params = {}
    $.each(defaultParams, function() {
        $.each(this.params, function() {
            var key = this.key
            var value = this.defaultValue
            params[key] = value
        })
    })
    return params
}

//判断页面是否加载完成
function loadCheck() {
//    var bool = parent.document.frames['frame'].document.readyState == 'complete';
    var bool = window.document.readyState == 'complete';
    if (!bool) {
        setTimeout('loadCheck()', 1);
    } else {
        alert('completed!');
    }
}

