﻿var Global_CurrentChannel = null;
var SiteConfig = null;

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 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("当前没有配置内容需要保存！");
    }
}