﻿var Global_CurrentChannel = null;
var SiteConfig = null;
var SiteMainMenu = null;
var MenuTypes = ["系统", "文档", "链接"];
var MenuEditorDivId = "";
var MainMenuDivId = "";
// 以后有新功能时，现在这里注册，会自动出现在子网站的配置当中
var SysDefaultMenu =
[
    {
        "Order": 1,
        "Title": "首页",
        "Type": "系统",
        "Url": "/subsite/default.aspx",
        "Visible": true,
        "Desc": "系统默认的首页"
    },
    {
        "Order": 2,
        "Title": "图库",
        "Type": "系统",
        "Url": "/subsite/albums.aspx",
        "Visible": true,
        "Desc": "网站的图库"
    },
    {
        "Order": 3,
        "Title": "名录",
        "Type": "系统",
        "Url": "/subsite/namelist.aspx",
        "Visible": true,
        "Desc": "自动生成的网站物种名录"
    },
    {
        "Order": 4,
        "Title": "物种树",
        "Type": "系统",
        "Url": "/subsite/sptree.aspx",
        "Visible": true,
        "Desc": "自动生成的网站物种树"
    },
    {
        "Order": 5,
        "Title": "论坛",
        "Type": "系统",
        "Url": "/subsite/forum.aspx",
        "Visible": true,
        "Desc": "网站论坛"
    },
    {
        "Order": 6,
        "Title": "关于我们",
        "Type": "系统",
        "Url": "/subsite/team.aspx",
        "Visible": true,
        "Desc": "网站的团队页面"
    },
    {
        "Order": 7,
        "Title": "管理",
        "Type": "系统",
        "Url": "/subsite/admin/default.aspx",
        "Visible": true,
        "Desc": "网站的管理页面"
    }
];

var MenuLoaded = false;

function GetChannel(cChannelName,config)
{
    for(var iCh=0;iCh<config.length;iCh++)
    {
        if (config[iCh].Name==cChannelName)
            return config[iCh];
    }
}

function GetWidget(name)
{
    for(var ich=0;ich<SiteConfig.length;ich++)
    {
        var Channel = SiteConfig[ich];
        for(var iw=0;iw<Channel.Widgets.length;iw++)
        {
            if (Channel.Widgets[iw].Name==name)
                return Channel.Widgets[iw];
        }
    }
}

function ShowWidget(widget,target)
{
    switch (widget.Class)
    {
        case "Flash":
            ShowFlash(widget,target)
            break;
        case "Feed":
            ShowFeed(widget,target);
            break;
        case "List":
            ShowList(widget,target);
            break;
        case "PhotoSlide":
            ShowPhotoSlide(widget,target);
            break;
        default:
            alert("Not Known Widget Class!");
    }
}

function ShowWidgetControlPanel(widget,controlPanel)
{
    switch (widget.Class)
    {
        case "Flash":
            ShowFlashControlPanel(widget,controlPanel)
            break;
        case "Feed":
            ShowFeedControlPanel(widget,controlPanel);
            break;
        case "List":
            ShowListControlPanel(widget,controlPanel);
            break;
        case "PhotoSlide":
            ShowPhotoSlideControlPanel(widget,controlPanel);
            break;
        default:
            alert("Not Known Widget Class!");
    }
}

function ShowFlashControlPanel(widget,target)
{
    ShowWidgetControl(widget,target);
}
function ShowFeedControlPanel(widget,target)
{
    ShowWidgetControl(widget,target);
}
function ShowListControlPanel(widget,target)
{
    var cHtml = "<div id='cp_"+ widget.Name +"' class='ControlPanel'>";
    cHtml += "自定义列表模块配置";
    cHtml += "<hr size='1' />";
    cHtml += "<label>名称：<input class='cp_textbox' id='cp_"+widget.Name+"_name' type='text' name='"+widget.Name+"_data' value='"+ widget.Name+"' readonly='readonly' /></label><br />";
    cHtml += "<label>标题：<input class='cp_textbox' id='cp_"+widget.Name+"_title' type='text' name='"+widget.Name+"_title' value='"+ widget.Title+"' /></label><br />";
    cHtml += "<label>内容：<textarea class='cp_editbox' style='height:150px;' id='cp_"+widget.Name+"_data' name='"+widget.Name+"_data'>";
    cHtml += List2String(widget.Data);
    cHtml += "</textarea></label><br />";
    cHtml += "<label>宽度：<input class='cp_textbox' id='cp_"+widget.Name+"_width' type='text' name='"+widget.Name+"_width' value='"+ widget.Width+ "'/></label><br />";
    cHtml += "<label>位置：<input class='cp_textbox' id='cp_"+widget.Name+"_target' type='text' name='"+widget.Name+"_target' value='"+widget.Target+"' /></label><br />";
    cHtml += "<label>列数：<input class='cp_textbox' id='cp_"+widget.Name+"_columns' type='text' name='"+widget.Name+"_columns' value='"+widget.Options.Column+"' /></label><br />";    
    cHtml += "<label>描述：<textarea class='cp_editbox' id='cp_"+widget.Name+"_desc' name='"+widget.Name+"_desc'>"+widget.Desc+"</textarea></label><br />";
    cHtml += "<hr size='1' />";
    cHtml += "<input type='button' value='删除' onclick=\"DeleteWidget('"+widget.Name+"');\"  />";
    cHtml += "<input type='button' value='应用' onclick=\"UpdateWidget('"+ widget.Class + "','"+widget.Name+"',$('#cp_"+widget.Name+"_title').val(),$('#cp_"+widget.Name+"_desc').val(),Str2List($('#cp_"+widget.Name+"_data').val()),$('#cp_"+widget.Name+"_width').val(),'',$('#cp_"+widget.Name+"_target').val(),{ Column:$('#cp_"+widget.Name+"_columns').val()});\"  />";
    cHtml += "</div>";
    $("#"+target).append(cHtml);
}
function ShowPhotoSlideControlPanel(widget,target)
{
    ShowWidgetControl(widget,target);
}
function ShowWidgetControl(widget,target)
{
    var cHtml = "<div id='cp_"+ widget.Name +"' class='ControlPanel'>";
    cHtml += widget.Class+ "模块配置";
    cHtml += "<hr size='1' />";
    cHtml += "<label>名称：<input class='cp_textbox' id='cp_"+widget.Name+"_name' type='text' name='"+widget.Name+"_data' value='"+ widget.Name+"' readonly='readonly' /></label><br />";
    cHtml += "<label>标题：<input class='cp_textbox' id='cp_"+widget.Name+"_title' type='text' name='"+widget.Name+"_title' value='"+ widget.Title+"' /></label><br />";
    cHtml += "<label>内容：<input class='cp_textbox' id='cp_"+widget.Name+"_data' type='text' name='"+widget.Name+"_data' value='"+ widget.Data+"' /></label><br />";
    cHtml += "<label>宽度：<input class='cp_textbox' id='cp_"+widget.Name+"_width' type='text' name='"+widget.Name+"_width' value='"+ widget.Width+ "'/></label><br />";
    cHtml += "<label>高度：<input class='cp_textbox' id='cp_"+widget.Name+"_height' type='text' name='"+widget.Name+"_width' value='"+widget.Height+"' /></label><br />";
    cHtml += "<label>位置：<input class='cp_textbox' id='cp_"+widget.Name+"_target' type='text' name='"+widget.Name+"_target' value='"+widget.Target+"' /></label><br />";
    cHtml += "<label>描述：<textarea class='cp_editbox' id='cp_"+widget.Name+"_desc' name='"+widget.Name+"_desc'>"+widget.Desc+"</textarea></label><br />";    
    cHtml += "<hr size='1' />";
    cHtml += "<input type='button' value='删除' onclick=\"DeleteWidget('"+widget.Name+"');\"  />";
    cHtml += "<input type='button' value='应用' onclick=\"UpdateWidget('"+ widget.Class + "','"+widget.Name+"',$('#cp_"+widget.Name+"_title').val(),$('#cp_"+widget.Name+"_desc').val(),$('#cp_"+widget.Name+"_data').val(),$('#cp_"+widget.Name+"_width').val(),$('#cp_"+widget.Name+"_height').val(),$('#cp_"+widget.Name+"_target').val());\"  />";
    cHtml += "</div>";
    $("#"+target).append(cHtml);
}


function ShowFlash(widget,target)
{
    var so = new SWFObject(widget.Data, widget.Name, widget.Width, widget.Height, "9", "#FFFFFF");  
    if (typeof widget.Target == "string" && widget.Target!='')
    {
        so.write(widget.Target);
    }
    else
    {
        $("#"+target).append("<div id='"+target+"_"+widget.Name+"_Container'></div>");
        so.write(target+"_"+widget.Name+"_Container");
    }
}


// cmd = web|edit|add
function ShowWebPanel(cmd)
{
    switch (cmd)
    {
        case "web":
        {
            $("#"+Global_CurrentChannel.WidgetsTarget).show();
            $("#"+Global_CurrentChannel.ControlPanel).hide();
            $("#"+Global_CurrentChannel.WidgetsListPanel).hide();
            break;
        }
        case "edit":
        {
            $("#"+Global_CurrentChannel.WidgetsTarget).hide();
            $("#"+Global_CurrentChannel.ControlPanel).show();
            $("#"+Global_CurrentChannel.WidgetsListPanel).hide();        
            break;
        }
        case "add":
        {
            $("#"+Global_CurrentChannel.WidgetsTarget).hide();
            $("#"+Global_CurrentChannel.ControlPanel).hide();
            $("#"+Global_CurrentChannel.WidgetsListPanel).show();
            break;       
        }
    }
}
function AddWidget()
{
    if (Global_CurrentChannel)
    {
        $("#"+Global_CurrentChannel.WidgetsListPanel).html("");
        ShowWebPanel("add");
        // 加载模块列表，提供给用户添加
        var cWidgetOption = "<div id='widgetSelector' class='ControlPanel'>";
        cWidgetOption += '<label>类型：';
		cWidgetOption += "<select name='widgetOpts_Name' id='widgetOpts_ID' style='width:300px;'>";
        cWidgetOption += "<option value='Feed'>聚合内容：博客等Rss、Atom源</option>";
        cWidgetOption += "<option value='Flash'>Flash动画</option>";
        cWidgetOption += "<option value='List'>自定列表：Web地址链接等</option>";
        cWidgetOption += "<option value='PhotoSlide'>图片幻灯：Media Rss源</option>";
        cWidgetOption += '</select></label><br /><br />';
		cWidgetOption += '<label>名称：<input type="text" name="Def_NewWidgetName" id="Def_NewWidgetName_ID" style="width:300px;" /></label>&nbsp;&nbsp;';
		cWidgetOption += '<span class="tipfont">名称(4-10个字母)</span>';
        cWidgetOption += '<br /><br /><input type="button" name="button" id="btnAddWidget" style="left:50px; width:100px;" value="添加" onclick="DefNewWidget()" />';
        cWidgetOption += '</div>';
        cWidgetOption += '<div id="newWidgetDefArea"></div>';
        
        $("#"+Global_CurrentChannel.WidgetsListPanel).html(cWidgetOption);

    }
}
// 添加新的模块
function DefNewWidget()
{
    var newWidgetClassName = $("#widgetOpts_ID").val();
	var newWidgetName = $("#Def_NewWidgetName_ID").val();
	//alert(newWidgetClassName+":"+newWidgetName);
	if (newWidgetName)
	{
		if (ExistsWidget(newWidgetName))
		{
			alert("指定的名称已经被占用，请重新命名！");
		}
		else
		{
			var newWidget = GetEmptyWidget(newWidgetClassName,newWidgetName);
			ShowWidgetControlPanel(newWidget,"newWidgetDefArea");
		}
	}
	else
	{
		alert("需要指定模块的名称！");
	}
}
// 判断指定名称的 Widget 是否存在
function ExistsWidget(cName)
{
    var widget = GetWidget(cName);
    if (widget)
	{
		return true;
	}
	else
	{
		return false;
	}
}
function GetEmptyWidget(cWidgetClass,cName)
{
	var emptyWidget = null;
    switch (cWidgetClass)
	{
		case "PhotoSlide":
		{
			emptyWidget = {
        	        Class:"PhotoSlide",
        	        Name:cName,
	                Title:"",
	                Desc:"",
                	Data:"",
        	        Width:"400",
	                Height:"300",
	                Target:"",
	                Options:{ }};
			break;
		}
		case "Flash":
		{
			emptyWidget = {
        	        Class:"Flash",
	                Name:cName,
	                Title:"",
	                Desc:"",
                	Data:"",
        	        Width:"1024",
	                Height:"120",
	                Target:"",
	                Options:{}};
			break;
		}
		case "List":
		{
			emptyWidget = {
            		Class:"List",
            		Name:cName,
            		Title:"",
            		Desc:"",
            		Data:[],
			        Width:"600",
			        Height:"",
			        Target:"",
			        Options:{ Column:"2" }};
			break;
		}
		case "Feed":
		{
			emptyWidget = {
                    Class:"Feed",
                    Name:cName,
                    Title:"",
	                Desc:"",
                    Data:"",
                    Width:"500",
                    Height:"",
                    Target:"",
                    Options:{} };
			break;
		}
	}
	return emptyWidget;
}

function UpdateWidget(widgetClass,widgetName,title,desc,data,width,height,target,options)
{
    //alert("Save Flash!"+ widgetName+","+title+","+desc+","+data+","+width+","+height+","+target+",options:"+options.Column);
    var widget = GetWidget(widgetName);
    if (widget)
    {
        widget.Title = title;
        widget.Data = data;
        widget.Desc = desc;
        widget.Height = height;
        widget.Width = width;
        widget.Target = target;
        widget.Options = options;
        alert("模块已经更新！");
    }
	else
	{
		var newWidget = GetEmptyWidget(widgetClass,widgetName);
		if (newWidget)
		{
			newWidget.Title = title;
			newWidget.Data = data;
			newWidget.Desc = desc;
			newWidget.Height = height;
			newWidget.Width = width;
			newWidget.Target = target;
			newWidget.Options = options;
			
			if (Global_CurrentChannel)
			{
				Global_CurrentChannel.Widgets.push(newWidget);
				alert("新模块添加成功！");
			}
			else
			{
				alert("当前频道没有指定，无法添加新模块！");
			}
		}
		else
		{
			alert("保存新模块定义出错！请检查给定的模块类型和名称");
		}
	}
}
function DeleteWidget(widgetName)
{
    $("#cp_"+widgetName).hide();
	var Channel = GetChannelByWidgetName(widgetName);
    //alert(Channel.Widgets.length);
    for(var i=0;i<Channel.Widgets.length;i++)
    {
        if (Channel.Widgets[i].Name==widgetName)
        {
            Channel.Widgets.splice(i,1);
            //alert(Channel.Widgets.length);
        }
    }
}
function GetChannelByWidgetName(widgetName)
{
    for(var i=0;i<SiteConfig.length;i++)
    {
        var Channel = SiteConfig[i];
        for(var j=0;j<Channel.Widgets.length;j++)
        {
            if (Channel.Widgets[j].Name==widgetName)
                return Channel;
        }
    }
}

function ShowFeed(widget,target)
{
    var feed = new google.feeds.Feed(widget.Data);      
    feed.load(function(result) 
    {        
        if (!result.error) 
        {      
            var entryHtml = "<div id='"+target+"_"+widget.Name+"_ReaderHeader' class='RssReaderTitleDiv' style='width:"+widget.Width+";'>";
			entryHtml += "<span class='RssReaderTitle'>"+widget.Title+"</span><br />";
			entryHtml += "<span class='RssDesc'>"+widget.Desc+"</span><br />";
			entryHtml += "</div>";
			
            for (var i = 0; i < result.feed.entries.length; i++) 
            {            
                var entry = result.feed.entries[i];   
                entryHtml += "<div class='RssDoc' style='width:"+ widget.Width +";'>";
                entryHtml += "<div class='RssTitleStyle'><a href='"+ entry.link+"' target='_blank'>"+entry.title+"</a></div>";
                entryHtml += "<span class='RssAuthorStyle'>"+result.feed.author +"</span>";
                entryHtml += "<span class='RssPubDateStyle'>"+entry.publishedDate+"</span>";
                entryHtml += "<hr class='RssTitleBottomLine' />";
                entryHtml += "<div class='RssDescStyle'>"+entry.content+"</div>";
                entryHtml += "</div>";       
            }
            if (typeof widget.Target == "string" && widget.Target!='')
            {
                $("#"+widget.Target).append(entryHtml);
            }
            else
            {
                $("#"+target).append("<div id='"+target+"_"+widget.Name+"_Container'></div>");
                $("#"+target+"_"+widget.Name+"_Container").append(entryHtml);        
            }
        }      
     });               
}

function ShowPhotoSlide(widget,target) 
{
    var options = 
    {
        displayTime:2000, 
        transistionTime:600, 
        scaleImages:true,
        fullControlPanel :true,
        fullControlPanelSmallIcons : true,
        linkTarget : google.feeds.LINK_TARGET_BLANK
    };
    
    if (typeof widget.Target == "string" && widget.Target!='')
    {
        $("#"+widget.Target).css("width",widget.Width+"px");
        $("#"+widget.Target).css("height",widget.Height+"px");
        var ss = new GFslideShow(widget.Data,widget.Target, options);
    }
    else
    {
        var NewContainer = target+"_"+widget.Name+"_Container";
        $("#"+target).append("<div id='"+NewContainer+"' style='width:"+ widget.Width +"px;height:"+ widget.Height +"px;'>Loading Slide ......</div>");
        $("#"+NewContainer).css("width",widget.Width+"px");
        $("#"+NewContainer).css("height",widget.Height+"px");
        var ss = new GFslideShow(widget.Data,NewContainer, options);
    }
}

function List2String(list)
{
    var str = "";
    for(var i=0;i<list.length;i++)
    {
        str += list[i].Title+"|"+list[i].Data+"\n";
    }
    return str;
}
function Str2List(str)
{
    var result = "";
    var list = str.split("\n");
    for(var i=0;i<list.length;i++)
    {
        if (result!="")
            result +=",";
        result += '{ Title:"'+list[i].substring(0,list[i].indexOf("|"))+'",Data:"'+list[i].substring(list[i].indexOf("|")+1) + '" }';
    }
    
    return  eval("[" + result + "]");
}
function ShowList(widget,target)
{
    var cHtml = "";
    cHtml += "<table border='0' class='MyList' style='width:"+ widget.Width +";'>";
    cHtml += "<tr><td colspan='"+widget.Options.Column+"' class='ListHead'>"+ widget.Title + "</td></tr>";
    var iCol = 0;
    var Column = parseInt(widget.Options.Column);
    for(var i=0;i<widget.Data.length;i++)
    {
        var item = widget.Data[i];
        if (iCol==0)
        {
            cHtml += "<tr>";
        }
        cHtml += "<td class='ListItem'><a href='"+ item.Data + "' target='_Blank' Col='"+(iCol+1)+"'>"+item.Title+"</a></td>";
        iCol ++;
        
        if (iCol >= Column)
        {
            cHtml += "</tr>";
            iCol=0;
        }
    }
    cHtml += "</table>";
    
    if (typeof widget.Target == "string" && widget.Target!='')
    {
        $("#"+widget.Target).html(cHtml);
    }
    else
    {
        var NewContainer = target+"_"+widget.Name+"_Container";
        $("#"+target).append("<div id='"+NewContainer+"' style='width:"+ widget.Width +"px;height:"+ widget.Height +"px;'>Loading Slide ......</div>");
        $("#"+NewContainer).html(cHtml);
    }
}

function LoadMainMenu(cSitedId,showDiv)
{
    if (SiteMainMenu)
    {
        ShowMainMenu(showDiv);
    }
    else
    {
        if (cSitedId)
        {
            $.getScript("/AjaxServer/Server.ashx?service=subsite&method=getjsmenu&siteid=" + cSitedId,
                function()
                {
                    ShowMainMenu(showDiv);
                })
        }
        else
        {
            //alert("应该指定网站的ID！");
            return;
        }
    }
}

function ShowAdminControlPanel(panel)
{
    if (site.CurrentUserRole == "Admin")
        $("#" + panel).show();
    else
        $("#" + panel).hide();
}

function LoadMenuEditor(cSitedId,showDiv,editorDiv)
{
    if (showDiv)
        MainMenuDivId = showDiv;
    if (SiteMainMenu)
    {
        ShowMainMenu(showDiv);
        ShowMenuEditor(editorDiv);
    }
    else
    {
        if (cSitedId)
        {
            $.getScript("/AjaxServer/Server.ashx?service=subsite&method=getjsmenu&siteid=" + cSitedId,
                function()
                {
                    ShowMainMenu(showDiv);
                    ShowMenuEditor(editorDiv);
                })
        }
        else
        {
            //alert("应该指定网站的ID！");
            return;
        }
    }
}

function ShowMainMenu(target)
{
    if (SiteMainMenu)
    {
        MenuLoaded = true;
        
        MainMenuDivId = target;
        var cHtml = "";
        SiteMainMenu.sort(MenuSort);
        for (var i = 0; i < SiteMainMenu.length; i++)
        {
            var Menu = SiteMainMenu[i];
            if (!Menu.Visible)
                continue;
            cHtml += ((cHtml!="")?"|":"")+MenuItem2Html(Menu);
        }
        // TODO: SysDefaultMenu 来对当前的菜单对照检查一下，发现缺失的系统菜单，应该自动添加到菜单当中
        $("#" + target).html(cHtml);

        if (typeof AfterMenuLoadFunction == "function")
        {
            AfterMenuLoadFunction();
        }
    }
}

function MenuItem2Html(Menu)
{
    var html = "";
    switch(Menu.Type)
    {
        case "系统":
            html = "<a href='"+Menu.Url+"?siteid=" + site.Id+"' target='_self' class='MenuItem'>"+Menu.Title+"</a>";
            break;
        case "文档":
            html = "<a href='/subsite/Doc.aspx?m="+Menu.Order+"&siteid=" + site.Id+"' target='_self' class='MenuItem'>"+Menu.Title+"</a>";
            break;
        case "链接":
            html = "<a href='"+Menu.Url+"' target='_blank' class='MenuItem'>"+Menu.Title+"</a>";
            break;
        case "文档分类":
            html = "<a href='/subsite/Docat.aspx?m="+Menu.Order+"&siteid=" + site.Id+"' target='_self' class='MenuItem'>"+Menu.Title+"</a>";
            break;
        case "Web聚合":
            html = "<a href='/subsite/mashup.aspx?m="+Menu.Order+"&siteid=" + site.Id+"' target='_self' class='MenuItem'>"+Menu.Title+"</a>";
            break;
        default:
            break;
    }
    return html;
}

function IsUrlInMenus(url,menus)
{
    for(var i=0;i<menus.length;i++)
    {
        if (url.toLowerCase() == menus[i].Url.toLowerCase())
            return true;
    }
    return false;
}

function ShowMenuEditor(target)
{
    if (SiteMainMenu)
    {
        MenuEditorDivId = target;
        var cHtml = "<table><thead><tr><th>顺序</th><th>标题</th><th>类型</th><th>参数</th><th>显示</th><th>说明</th><th>操作</th></tr></thead><tbody id='MenuList'>";

        // 负责添加不在当前菜单上的系统定义的菜单项目，供用户选用
        for (var i = 0; i < SysDefaultMenu.length; i++)
        {
            if (!IsUrlInMenus(SysDefaultMenu[i].Url, SiteMainMenu))
            {
                var menu = SysDefaultMenu[i];
                menu.Order = 100 + i;
                menu.Visible = false;
                SiteMainMenu.push(menu);
            }
        }
        SiteMainMenu.sort(MenuSort);

        for (var i = 0; i < SiteMainMenu.length; i++)
        {
            var Menu = SiteMainMenu[i];
            cHtml += MenuItem2WebCtrol(Menu,i);
        }
        
        cHtml += "</tbody></table>";
        cHtml += "<br /><input type='button' style='margin-left:20px;' name='BtnUpdateMenu' id='BtnUpdateMenu' value='新栏目' onclick='$(\"#newMenuEditor\").toggle();' />";
        cHtml += '<input id="BtnSaveMenu" type="button" value="保存栏目定义" onclick="SaveMenu(site.Id);" />';

        var TypeOpt = "<select id='type_new' name='type_new' class='type_edit' onchange='showMenuTypeEditor(this);'><option value=''>请选择...</option>";
            for(var j=0;j<MenuTypes.length;j++)
            {
                if (MenuTypes[j]=="系统")
                    continue;
                TypeOpt += "<option value='"+MenuTypes[j]+"'>"+MenuTypes[j]+"</option>";
            }
            TypeOpt +="</select>";
        
        cHtml += "<table id='newMenuEditor' style='display:none;'><tbody><tr><td>";
        cHtml += "<table class='menueditor_new' cellpadding='0' cellspacing='0' border='1'>"+
                    "<tr><td class='lab_fldname' style='width:40px;'>类型</td><td>" + TypeOpt + "</td><td id='desctxt_type' class='lab_desc'>栏目类型</td></tr>" +
                    "<tr><td class='lab_fldname'>顺序</td><td><input type='text' id='order_new' name='order_new' value='' class='order_edit' /></td><td id='desctxt_order' class='lab_desc'>新添栏目在网站主菜单中的顺序</td></tr>" +
                    "<tr><td class='lab_fldname'>可见</td><td><input type='checkbox' id='visible_new' name='visible_new' checked='checked' /></td><td id='desctxt_visible' class='lab_desc'>是否在主菜单上显示</td></tr>" +
                    "<tr><td class='lab_fldname'>标题</td><td><input type='text' id='title_new' name='title_new' value='' class='edit_new' /></td><td id='desctxt_title' class='lab_desc'>新添栏目显示名称</td></tr>" +
                    "<tr><td class='lab_fldname'>说明</td><td><input type='text' id='desc_new' name='desc_new' value='' class='edit_new' /><td id='desctxt_desc' class='lab_desc'>栏目的说明性文字，可选填</td></tr>" +
                    "<tr id='newMenuEditor_RowPara'><td class='lab_fldname'>参数</td><td><textarea id='url_new' name='url_new' class='edit_new'></textarea></td><td id='desctxt_para' class='lab_desc'>栏目参数</td></tr>" +
                    "</table><br /><input type='button' style='margin-left:20px;' name='BtnUpdateMenu' id='BtnUpdateMenu' value='添加到栏目列表' onclick='AddMenu();' />";
                    
        cHtml += "</td><td valign='top' align='left' width='300'><div id='newMenuTypeUsage' style='display:none;'></div></td></tr></tbody></table>";
        $("#" + target).html(cHtml);
    }
}

function ChangeSiteMenuObject()
{
    if (SiteMainMenu)
    {
        for(var i=0;i<SiteMainMenu.length;i++)
        {
            var menu = new Object();
            menu.Order = parseInt($("#order_"+i).val());
            menu.Type = $("#type_"+i).val();
            menu.Title = $("#title_"+i).val();
            menu.Url = $("#url_"+i).val();
            menu.Desc = $("#desc_"+i).val();
            menu.Visible = $("#visible_"+i).attr("checked");     
            if (ValidMenuItem(menu))
            {
                SiteMainMenu[i].Order = menu.Order;
                SiteMainMenu[i].Type = menu.Type;
                SiteMainMenu[i].Title = menu.Title;
                SiteMainMenu[i].Url = menu.Url;
                SiteMainMenu[i].Desc = menu.Desc;
                SiteMainMenu[i].Visible = menu.Visible;
            }
            else
            {
                alert("第"+(i+1)+"行的栏目设置有问题，无法正确保存！将恢复原来的值。");
            }
        }
        
    }
}

function MenuItem2WebCtrol(Menu,i)
{
    if (!SiteMainMenu || !Menu)
    {
        alert("菜单项不存在！");
        return "";
    }
    var TypeOpt = "<select id='type_"+i+"' name='type_"+i+"' class='type_edit'";
    if (Menu.Type=="系统")
    {
        TypeOpt += " disabled='disabled'>";
        TypeOpt += "<option value='系统' selected='selected'>系统</option>";
    }
    else
    {
        TypeOpt += ">";
        for(var j=0;j<MenuTypes.length;j++)
        {
            if (MenuTypes[j]=="系统")
                continue;
            TypeOpt += "<option value='"+MenuTypes[j]+"' "+ ((MenuTypes[j]==Menu.Type)?"selected='selected'":"")+">"+MenuTypes[j]+"</option>";
        }
    }
    TypeOpt +="</select>";
        
    var MenuHtml = "<tr><td><input type='text' id='order_"+i+"' name='order_"+i+"' value='"+Menu.Order+"' class='order_edit' /></td>"+
            "<td><input type='text' id='title_"+i+"' name='title_"+i+"' value='"+Menu.Title+"' class='title_edit' /></td>"+
            "<td>"+TypeOpt+"</td>"+
            "<td><textarea id='url_"+i+"' name='url_"+i+"' class='url_edit'"+ ((Menu.Type=='系统')?"disabled='disabled'":"") +" style='height:18px;' onfocus='$(this).css(\"height\",\"50px\");' onblur='$(this).css(\"height\",\"18px\");'>"+Menu.Url+"</textarea></td>"+
            "<td><input type='checkbox' id='visible_"+i+"' name='visible_"+i+"' "+ (Menu.Visible?"checked='checked'":"") +" /></td>"+
            "<td><input type='text' id='desc_" + i + "' name='desc_" + i + "' value='" + Menu.Desc + "' class='desc_edit'" + ((Menu.Type == '系统') ? "disabled='disabled'" : "") + " /></td>" +
            "<td style='padding:10px;'><img src='/images/delete.png' style='cursor:pointer' alt='删除菜单项' title='删除菜单项' onclick='deleteMenuItem(" + i + ");'></td>" +
            "</tr>";
    return MenuHtml;
}

function AddMenu()
{
    ChangeSiteMenuObject();
    
    var newMenuItem = new Object();
    newMenuItem.Order = parseInt($("#order_new").val());
    newMenuItem.Type = $("#type_new").val();
    newMenuItem.Title = $("#title_new").val();
    newMenuItem.Url = $("#url_new").val();
    newMenuItem.Desc = $("#desc_new").val();
    newMenuItem.Visible = $("#visible_new").attr("checked");
    if (ValidMenuItem(newMenuItem))
    {
        SiteMainMenu.push(newMenuItem);
        ReloadMenu();
    }
    else
    {
        alert("栏目的定义信息不符合要求，请检查！");
    }
}

function ReloadMenu()
{
    if (MenuEditorDivId)
    {
        ShowMainMenu(MainMenuDivId);
        ShowMenuEditor(MenuEditorDivId);
    }
    else
    {
        alert("异常错误：栏目列表的显示区未定义！请联系网站管理员。");
    }
}

function ValidMenuItem(menu)
{
    if (menu)
    {
        if (menu.Order == NaN)
            return false;
        if (!menu.Title)
            return false;
        if (!menu.Type)
            return false;
        // 这里添加针对 Type 类型检查的 Url 参数的代码
        return true;
    }
    return false;
}

function deleteMenuItem(i)
{
    ChangeSiteMenuObject();
    if (SiteMainMenu[i].Type=="系统")
    {
        alert("系统类型的栏目无法删除，你可以选择不显示它。");
        return;
    }
    if (confirm("要删除“"+SiteMainMenu[i].Title+"”栏目吗?"))
    {
        SiteMainMenu.splice(i,1);
        ReloadMenu();
    }
}

function showMenuTypeEditor(sele)
{
    var UsageDivId = "#newMenuTypeUsage";
    var ParaControl = "#newMenuEditor_RowPara";
    var ParaExplainLabel = "#desctxt_para";
    switch ($(sele).val())
    {
        case "文档":
            $(UsageDivId).html("系统将自动创建栏目的文档，供管理员编辑。").show();
            $(ParaControl).hide();
            break;
        case "文档分类":
            $(UsageDivId).html("请在参数中输入关键词（关键词以|分隔），系统会自动将本站内类别等于关键词的文章聚合到栏目内。").show();
            $(ParaControl).show();
            $(ParaExplainLabel).text("关键词列表，以|分隔。例如：生态位理论|中性理论");
            break;
        case "Web聚合":
            $(UsageDivId).html("请在参数中输入Rss或Atom网址（网址以|分隔），系统会自动聚合文章，显示在栏目内。Rss知识请参考：http://zh.wikipedia.org/zh-cn/Rss 或 http://baike.baidu.com/view/1644.htm").show();
            $(ParaControl).show();
            $(ParaExplainLabel).text("Rss或Atom网址，以|分隔。形如：http://a.cn/a.rss|http://b.cn/b.xml");
            break;
        case "链接":
            $(UsageDivId).html("请在参数中一个网址，菜单项将成为超链接。").show();
            $(ParaControl).show();
            $(ParaExplainLabel).text("任何一个可以访问的网址，如：http://www.planta.cn");
            break;
        default:
            $(UsageDivId).hide();
            $(ParaControl).hide();
            break;
    }
}

// 菜单项排序函数
function MenuSort(menuItem1,menuItem2)
{
	if (menuItem1.Order > menuItem2.Order)
		return 1;
	else if (menuItem1.Order < menuItem2.Order)
		return -1;
	else
		return 0;
}

function LoadMenuDoc(m,viewer,listViewer)
{
    if (SiteMainMenu)
    {
        var menu = GetMenuItemByOrder(m);
        if (menu == null)
        {
            alert("没有找到指定的网站栏目！");
            return;
        }
        else
        {
            LoadSiteDocByCategory(site.Id, menu.Title,viewer,listViewer,true);
        }
    }
    else
    {
        alert("系统异常！系统栏目没有找到！");
    }
}

function LoadDoc(cDocId,viewer)
{
 $.ajax({
   type: "POST",
   url: "/AjaxServer/server.ashx?service=article&method=get",
   data: "id="+cDocId,
   dataType: "json",
   success: function(data)
   {
       if (IsDocObject(data))
       {
           ShowDoc(data, viewer);
       }
   },
   error: function() { MsgBox("服务异常，无法取得文档信息！请您稍后再试。"); }  
 });
}

/* 夹在文档，并且加载其同类别的文档列表 */
function LoadDocAndList(cDocId, viewer, listViewer)
{
    $.ajax({
        type: "POST",
        url: "/AjaxServer/server.ashx?service=article&method=get",
        data: "id=" + cDocId,
        dataType: "json",
        success: function(data)
        {
            if (IsDocObject(data))
            {
                ShowDoc(data, viewer);
                LoadSiteDocByCategory(site.Id, data.Category, viewer, listViewer, false);
            }
        },
        error: function() { MsgBox("服务异常，无法取得文档信息！请您稍后再试。"); }
    });
}

function LoadSiteDocByCategory(siteid, cate, viewer, listViewer, autoSelectDoc2Show)
{
    $.ajax({
        type: "POST",
        url: "/AjaxServer/server.ashx?service=article&method=getlistbytarget&rnd=" + Math.random(),
        data: { AppName: "SiteDoc", AppEntryId: siteid, Category: cate },
        dataType: "json",
        success: function(data)
        {
            // 如果没有文章，且当前用户有编辑权限，则显示编辑器；
            if (typeof data != "object")
            {
                alert("异常错误，无法取得网站的文档服务！");
                return;
            }
            if (IsJSONMsg(data))
            {
                //showDebuginfo("LoadSiteDocByCategory:", "data is JSONMsg Format!");
                MsgBox(data.message);
            }

            showDebuginfo("LoadSiteDocByCategory:", "site.CurrentUserRole=" + site.CurrentUserRole + " IsDocObject(data)=" + ((IsDocObject(data)) ? "Yes" : "No"));

            if (data.length >= 1)
            {
                // 如果有多于一篇的文档：显示区左右分栏，右边显示文章列表，左边显示文章
                ShowDocList(data, listViewer);

                if (autoSelectDoc2Show)
                {
                    // 查找栏目首页文档，如没有，找最后一篇。找到后显示
                    var doc = SelectDocFromList(data);
                    if (IsDocObject(doc))
                    {
                        ShowDoc(doc, viewer);
                    }
                    else
                    {
                        showDebuginfo("LoadSiteDocByCategory:", "自动选择文档失败！");
                    }
                }
            }
            else
            {
                if (!IsDocObject(data) && (site.CurrentUserRole == "Admin"))
                {
                    LoadDocEditor(viewer);
                    StartNewArticle();

                    alert("自动新建栏目内的默认文档！");

                    // 显示编辑器，允许创建文档
                    SetTarget("MenuDefaultDoc", cate);
                    SetCategory(cate);
                    SetCategoryEditable(false);
                }
            }


        },
        error: function()
        {
            // 显示无文档的情况的界面
            alert("服务端异常！");
        }
    });    
}

function LoadSiteDocByTarget(siteid,cate,target,targetRecId,viewer)
{
    $.ajax({
        type: "POST",
        url: "/AjaxServer/server.ashx?service=article&method=getlistbytarget&rnd=" + Math.random(),
        data: { AppName: "SiteDoc", AppEntryId: siteid, Category: cate, Target: target, TargetRecId: targetRecId },
        dataType: "json",
        success: function(data)
        {
            // 如果没有文章，且当前用户有编辑权限，则显示编辑器；
            if (typeof data != "object")
            {
                alert("异常错误，无法取得网站的文档服务！");
                return;
            }
            if (IsJSONMsg(data))
            {
                MsgBox(data.message);
            }

            if (!IsDocObject(data) && (site.CurrentUserRole == "Admin"))
            {
                // 显示编辑器，允许创建文档
                LoadDocEditor(viewer);
                
                SetTarget(target, targetRecId);
                SetCategory(cate);
                SetCategoryEditable(false);
                showDebuginfo("LoadSiteDocByTarget--StartNewArticle(cId)", "cId=" + cId);
                StartNewArticle();
            }
            if (data.length >= 1)
            {
                // 查找栏目首页文档，如没有，找最后一篇。找到后显示
                var doc = data[0];

                // 如果有多于一篇的文档：显示区左右分栏，右边显示文章列表，左边显示文章
                if (data.length > 1)
                {
                    alert(data.length);
                }

                if (IsDocObject(doc))
                {
                    ShowDoc(data[0], viewer);
                }
            }
        },
        error: function()
        {
            // 显示无文档的情况的界面
            alert("服务端异常！");
        }
    });
}

function ShowDocList(data, listViewer)
{
    if (data.length < 1)
    {
        $("#" + listViewer).html("暂时没有文档！");
        return;
    }

    var cHtml = "";
    for (var i = 0; i < data.length; i++)
    {
        if (IsDocObject(data[i]))
        {
            if (!data[i].HasDeleted)
               cHtml += "<a href='/subsite/doc.aspx?doc=" + data[i].Id + "&siteid="+ site.Id +"' class='sitedoclistitem'>" + data[i].Title + "</a><br />";
        }
    }
    $("#" + listViewer).html(cHtml);
}
/* 从文档列表当中选择一片文档 */
function SelectDocFromList(data)
{
    if (data.length < 1)
        return null;
    var doc = null;
    for (var i = 0; i < data.length; i++)
    {
        if (IsDocObject(data[i]) && !data[i].HasDeleted)
        {
            if (doc == null)
            {
                doc = data[i];
                if (doc.Target == "MenuDefaultDoc")
                {
                    break;
                }
            }
            else
            {
                // 应该比较一番：从时间上；如果有多个 MenuDefaultDoc 怎么办？
            }
        }
    }
    return doc;
}

/*
创建新文档
*/
function StartNewArticle()
{
    getGUIDFromServer(PrepareNewDoc, CannotCreateNewDoc);
}

function PrepareNewDoc(cDocId)
{
    if (IsNotEmptyString(cDocId))
    {
        //alert("取得新的Blog ID:"+cDocId);
        ClearContent();
        SetDocId(cDocId);
        EditDoc();
    }
    else
    {
        MsgBox("没有取得有效的文档ID，服务不可用。请您稍后再试！");
    }

    return true;
}

function SaveDoc(doc)
{
    //alert(JSON.stringify(doc));
    if (!ValidDoc(doc))
        return false;
        
    $.post("/AjaxServer/server.ashx?service=article&method=post",
	       doc,
	       function(jsonMsg) {
	           try {
	               var data = eval("(" + jsonMsg + ")");
	               if (IsJSONMsg(data)) {
	                   ShowMsg(data.message);
	                   showDebuginfo("SaveDoc",data.debug);
	                   if (data.status == "ok") {
	                       location.reload(true);
	                   }
	               }
	           }
	           catch (oException) {
	               ShowMsg("服务返回异常错误！");
	           }
	           return false;
	       }
	       );
}



/*
删除当前文档
*/
function DeleteDoc(cId)
{
    if (confirm("您确认要删除文档吗？"))
    {
        $.getJSON("/AjaxServer/server.ashx?service=article&method=delete", { Id: cId }, function(data)
        {
            if (IsJSONMsg(data))
            {
                ShowMsg(data.message);
                if (data.status == "ok")
                {
                    location.reload(true);
                }
                return;
            }
            else
            {
                showDebuginfo("DeleteDoc", "返回的消息不是 JSONMsg！");
            }
        });
    }
}

/*
删除当前打开的文档
*/
function DeleteCurrentDoc()
{
    var cId = $("#Id").val();
    if (typeof cId == "string")
    {
        DeleteDoc(cId);
        return;
    }
    alert("当前没有指定文档，没有删除任何资料！");
}


function CannotCreateNewDoc()
{
    MsgBox("新建文档服务不可用：服务目前不可用，无法创建新文档！");
}

function ShowDoc(doc, viewer)
{
    if (IsDocObject(doc))
    {
        LoadDocContent(viewer, doc);
    }
    else
    {
        alert("文档格式不对！无法显示");
    }
}

function GetMenuItemByOrder(order)
{
    if (SiteMainMenu)
    {
        for (var i = 0; i < SiteMainMenu.length; i++)
        {
            if (SiteMainMenu[i].Order == order)
                return SiteMainMenu[i];
        }
    }
    return null;
}

///////////////////////////////////////////////////////////

function StartWeb(cSitedId,page)
{
    var bConfigOk = false;
    if (SiteConfig)
    { 
        bConfigOk = true;
        RenderPage(page);
    }
    else
    {
       if (cSitedId)
       {
            $.getScript("/AjaxServer/Server.ashx?service=subsite&method=getjsconfig&siteid="+cSitedId,
                function(){
                    bConfigOk = true;
                    RenderPage(page);
                })
        }
        else
        {
            //alert("应该指定网站的ID！");
            return;
        }
    }
}

function RenderPage(page)
{
    var CurrChannel=GetChannel(page,SiteConfig);
    Global_CurrentChannel = CurrChannel;
    if (CurrChannel){
        if (site.CurrentUserRole=="Admin")
        {
            // 添加管理员工具面板
            $("#AdminControls").remove();
            $("#"+CurrChannel.WidgetsTarget).before(GetAdminControl(page));
            // 在子站的菜单导航栏内添加“页面自定义”菜单项
            $("#SiteLocation #Location #ShowHideAdminControls").remove();
            $("#SiteLocation #Location").append("<span id='ShowHideAdminControls' onclick='ShowHideAdminCtrol()' style='margin-left:30px; padding-left:18px;cursor:pointer;background-image:url(/images/edit.gif); background-repeat:no-repeat;'>页面自定义</span>");
        }
        
        $("#"+CurrChannel.WidgetsTarget).html(CurrChannel.Template);
        $("#"+CurrChannel.WidgetsTarget).show();
        $("#"+CurrChannel.ControlPanel).hide();
        for(var iWidget=0; iWidget<CurrChannel.Widgets.length; iWidget++) {
            ShowWidget(CurrChannel.Widgets[iWidget],CurrChannel.WidgetsTarget); }
        ShowPage(page);
    }
}

// 显示管理员配置工具
function GetAdminControl(page)
{
    var cHtml = '<div id="AdminControls" style="display:none;">';
    cHtml += '<img src="/images/tweakui.gif" style="margin-left:30px; margin-right:20px;" />';
    cHtml += '<input id="Button1" type="button" value="修改" onclick="ShowConfigPanel(\''+page+'\');" />';
    //cHtml += '<input id="Button2" type="button" value="显示网页" onclick="ShowPage(\''+page+'\');" />';
    cHtml += '<input id="Button3" type="button" value="预览" onclick="StartWeb(site.Id,\''+page+'\');" />';
    cHtml += '<input id="Button4" type="button" value="保存" onclick="SaveConfig(site.Id);" />';
    cHtml += '<input id="Button5" type="button" value="添加" onclick="AddWidget();" />';
    cHtml += '<img src="/images/close.gif" alt="Close" style="margin-left:50px;cursor:pointer;" onclick="HideAdminCtrol()" />';
    cHtml += '</div>';
    return cHtml;
}

function HideAdminCtrol()
{
    $("#AdminControls").hide();
}

function ShowHideAdminCtrol()
{
    $("#AdminControls").toggle();
}

function ShowConfigPanel(page)
{
    if (SiteConfig)
    {
        var CurrChannel=GetChannel(page,SiteConfig);
        if (CurrChannel)
        {
            ShowWebPanel("edit");
            // 清空配置面板区域
            $("#"+CurrChannel.ControlPanel).html("");
            
            // 显示当前页的框架配置面板
            var cTemplateCp = "<div id='div_cp_"+ CurrChannel.Name +"' class='ControlPanel'>";
            cTemplateCp += "<label>页面布局框架</label><br />";
            cTemplateCp += "<textarea class='' id='cp_"+CurrChannel.Name+"_Template' name='cp_"+CurrChannel.Name+"_Template' class='cp_editbox' style='width:400px;height:200px;'>"+CurrChannel.Template+"</textarea><br />";
            cTemplateCp += "<input type='button' value='应用' onclick=\"UpdateTemplate('"+CurrChannel.Name+"',$('#cp_"+CurrChannel.Name+"_Template').val());\" />";
            cTemplateCp += "</div>";
            
            $("#"+CurrChannel.ControlPanel).html(cTemplateCp);
            
            // 循环显示配置文件当中的模块
            for(var iWidget=0; iWidget<CurrChannel.Widgets.length; iWidget++)
            {
                ShowWidgetControlPanel(CurrChannel.Widgets[iWidget],CurrChannel.ControlPanel);
            }
        }   
    }
    else
    {
        alert("Not Find Site Config!");
    }
}

function UpdateTemplate(channelName,cTemplate)
{
    var CurrChannel=GetChannel(channelName,SiteConfig);
    CurrChannel.Template = cTemplate;
}

function ShowPage(page)
{
    if (SiteConfig)
    {
        var CurrChannel=GetChannel(page,SiteConfig);
        if (CurrChannel)
        {
            ShowWebPanel("web");
        }   
    }
    else
    {
        alert("Not Find Site Config!");
    }
}

function GetConfigString()
{
    return JSON.stringify(SiteConfig);
}

// 将当前的配置保存为 cSiteId 网站的配置
function SaveConfig(cSiteId)
{
    if (SiteConfig)
    {
        $.post("/AjaxServer/Server.ashx?service=subsite&method=setjsconfig", 
            {siteid:cSiteId,config:GetConfigString() }, 
            function(data){ ShowJSONMsg(data);} ); 
    }
    else
    {
        alert("当前没有配置内容需要保存！");
    }
}

function SaveMenu(cSiteId)
{
    ChangeSiteMenuObject();
    if (SiteMainMenu)
    {
        $.post("/AjaxServer/Server.ashx?service=subsite&method=setjsmenu",
            { siteid: cSiteId, menu: JSON.stringify(SiteMainMenu) },
            function (data) {
                //alert(data);
                ShowJSONMsg(data);
                ReloadMenu();
            }
            ); 
    }
    else
    {
        alert("当前没有栏目内容需要保存！");
    }
}
