﻿/*/////////////////////////////////////////////////////////////////////////////////////////////////////
  程序名：CnJsUbb    作者：郑运涛    版本：1.0原版    类型：自由代码    


                                        联系方式
联系：郑运涛
昵称：泣红亭
英文名：BennyZheng
Oicq：49812150 24717151
电话：0754-3598136（宿舍） 0661-7786679（家）
邮箱地址：Qihontin@21cn.com Achelove@21cn.com Achelove@163.com
联系地址：广东省汕头市汕头职业技术学院东湖校区（校本部）计算机系软件专业0301班
    
*////////////////////////////////////////////////////////////////////////////////////////////////////



////////////////////////////////////////////////////////////////////////////////////////////////////

//     CnJsUbb类定义了能够同时在客户端与服务端运行的代码，默认对象为 Ubb
	
////////////////////////////////////////////////////////////////////////////////////////////////////

//本类为CnJsUbb代码的基类，拥有最少的功能以及最高的兼容性。

function CnJsUbb ()
{   
    //ToUbb用于转化传入的字符串
    
    this.ToUbb = function (Str)
    {
        Str = this.CHtml(Str);
        Str = this.AllCode(Str);
        return Str;
    }
    
    //     方法名： CHtml (HtmlStr)
    //     参数说明： HtmlStr包含要消除超文件标记的字符串
    //     返回值： 转化好了的字符串
    //     方法功能：把超文本标记转换成相应的原义符
    
    this.CHtml = function (HtmlStr)
    {
		HtmlStr = new String(HtmlStr);
        HtmlStr = HtmlStr.replace(/</g,"&lt;");
        HtmlStr = HtmlStr.replace(/>/g,"&gt;");
        HtmlStr = HtmlStr.replace(/\"/g,"&quot;");
        HtmlStr = HtmlStr.replace(/\n/g,"<br>");
        HtmlStr = HtmlStr.replace(/ |	|　/g,"&nbsp;");
        this.IsCHtml = true;
        return HtmlStr;
    }
    
    //     方法名： AllCode (Str)
    //     参数说明： Str包含要转化为Html代码的字符串
    //     返回值： 转化好了的字符串
    //     方法功能：集中把源字符串使用Ubb规则转换成安全的Html代码，运行在客户端的代码
    
    this.AllCode = function (Str)
    {        
        //正则表达式对象
        var re=new RegExp();
        Str = new String(Str);
        
//---------------------------------------------------一般功能----------------------------------------------------------

        //转换邮箱
        re = /\[(?:邮箱|Email)=([\w|\.]{3,16}@[a-zA-Z0-9]{2,10}(?:\.[a-zA-Z]{2,5}){1,2})\]([^　\s]+?)\[\/(?:邮箱|Email)\]/img; 
        Str = Str.replace(re, "<a href=\"mailto:$1\" target=\"sendemail\">$2</a>");
        
        re = /\[(?:邮箱|Email)\]([\w|\.]{3,16}@[a-zA-Z0-9]{2,10}(?:\.[a-zA-Z]{2,5}){1,2})\[\/(?:邮箱|Email)\]/img; 
        Str = Str.replace(re, "<a href=\"mailto:$1\" target=\"sendemail\">$1</a>");
        
        //插入网址
        re = /\[(?:网址|Url)=((?:http|ftp|https|mms|rspt):\/\/[^　\s]+?)\](.+?)\[\/(?:网址|Url)\]/img;
        Str = Str.replace(re, "<a href=\"$1\" target=\"url\">$2</a>");
        
        re = /\[(?:网址|Url)\]((?:http|ftp|https|mms|rspt):\/\/(?:[^　\s]+?))\[\/(?:网址|Url)\]/igm;
        Str = Str.replace(re, "<a href=\"$1\" target=\"url\">$1</a>");
        
        re = /\[(?:网址|Url)=((?:\/|\.\/|\.\.\/)(?:[^　\s]+?))\](.+?)\[\/(?:网址|Url)\]/img;
        Str = Str.replace(re, "<a href=\"$1\" target=\"url\">$2</a>");
        
        re = /\[(?:网址|Url)=((?:[^　\s]+?))\](.+?)\[\/(?:网址|Url)\]/img;
        Str = Str.replace(re, "<a href=\"http:\/\/$1\" target=\"url\">$2</a>");
        
        re = /\[(?:网址|Url)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?))\[\/(?:网址|Url)\]/img;
        Str = Str.replace(re, "<a href=\"$1\" target=\"url\">$1</a>");
        
        re = /\[(?:网址|Url)\]((?:[^　\s]+?))\[\/(?:网址|Url)\]/img;
        Str = Str.replace(re, "<a href=\"http:\/\/$1\">$1</a>");
        
        //
        re = /\[(?:连接|link)=((?:http|ftp|https|mms|rspt):\/\/[^　\s]+?)\](.+?)\[\/(?:连接|link)\]/img;
        Str = Str.replace(re, "<a href=\"$1\">$2</a>");
        
        re = /\[(?:连接|link)\]((?:http|ftp|https|mms|rspt):\/\/(?:[^　\s]+?))\[\/(?:连接|link)\]/igm;
        Str = Str.replace(re, "<a href=\"$1\">$1</a>");
        
        re = /\[(?:连接|link)=((?:\/|\.\/|\.\.\/)(?:[^　\s]+?))\](.+?)\[\/(?:连接|link)\]/img;
        Str = Str.replace(re, "<a href=\"$1\">$2</a>");
        
        re = /\[(?:连接|link)=((?:[^　\s]+?))\](.+?)\[\/(?:连接|link)\]/img;
        Str = Str.replace(re, "<a href=\"http:\/\/$1\">$2</a>");
        
        re = /\[(?:连接|link)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?))\[\/(?:连接|link)\]/img;
        Str = Str.replace(re, "<a href=\"$1\">$1</a>");
        
        re = /\[(?:连接|link)\]((?:[^　\s]+?))\[\/(?:连接|link)\]/img;
        Str = Str.replace(re, "<a href=\"http:\/\/$1\">$1</a>");
        
        //插入图片
        re = /\[(?:img|图片)=((?:http|https|ftp):\/\/(?:[^　\s]+?\/[^　\s]+?\.(?:jpg|gif|png|bmp)))\](.+?)\[\/(?:img|图片)\]/img; 
        Str = Str.replace(re, "<a href=\"$1\" target=\"img\" title=\"$2\"><img src=\"$1\" border=0></a>");
        
        re = /\[(?:img|图片)\]((?:http|https|ftp):\/\/(?:[^　\s]+?\/[^　\s]+?\.(?:jpg|gif|png|bmp)))\[\/(?:img|图片)\]/igm;
        Str = Str.replace(re, "<a href=\"$1\" target=\"img\" title=\"$1\"><img src=\"$1\" border=0></a>");
        
        re = /\[(?:img|图片)=((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/[^　\s]+?\.(?:jpg|gif|png|bmp)))\](.+?)\[\/(?:img|图片)\]/img; 
        Str = Str.replace(re, "<a href=\"$1\" target=\"img\" title=\"$2\"><img src=\"$1\" border=0></a>");
        
        re = /\[(?:img|图片)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/[^　\s]+?\.(?:jpg|gif|png|bmp)))\[\/(?:img|图片)\]/igm;
        Str = Str.replace(re, "<a href=\"$1\" target=\"img\" title=\"$1\"><img src=\"$1\" border=0></a>");
        
        re = /\[(?:img|图片)=((?:[^　\s]+?\/[^　\s]+?\.(?:jpg|gif|png|bmp)))\](.+?)\[\/(?:img|图片)\]/img; 
        Str = Str.replace(re, "<a href=\"http://$1\" target=\"img\" title=\"$2\"><img src=\"http://$1\" border=0></a>");
        
        re = /\[(?:img|图片)\]((?:[^　\s]+?\/[^　\s]+?\.(?:jpg|gif|png|bmp)))\[\/(?:img|图片)\]/igm;
        Str = Str.replace(re, "<a href=\"http://$1\" target=\"img\" title=\"http://$1\"><img src=\"http://$1\" border=0></a>");

//---------------------------------------------------文字功能----------------------------------------------------------
 
        //斜体
        re  = /\[(?:斜|I)\](.+?)\[\/(?:斜|I)\]/img; 
        Str = Str.replace(re,"<i>$1</i>");

        //粗体
        re  = /\[(?:粗|B)\](.+?)\[\/(?:粗|B)\]/igm;
        Str = Str.replace(re,"<strong>$1</strong>");

        //颜色
        re = /\[(?:COLOR|颜色)=([^　\s]{1,}?)\](.+?)\[\/(?:COLOR|颜色)\]/igm;
        Str = Str.replace(re, "<font color=\"$1\">$2</font>");
        
        //字号        
        re = /\[(?:Size|字号)=([1-4])\](.+?)\[\/(?:Size|字号)\]/img; 
        Str = Str.replace(re, "<font size=\"$1\">$2</font>");

        //字体
        re = /\[(?:face|字体)=(.{1,}?)\](.+?)\[\/(?:face|字体)\]/img;
        Str = Str.replace(re, "<font face=\"$1\">$2</font>");

        //大写字母
        re = /\[(?:upper|大写)\](.+?)\[\/(?:upper|大写)\]/img; 
        Str = Str.replace(re, "<span style=\"text-transform:uppercase;\">$1</span>");

        //首字大写
        re = /\[(?:capiti|首字大写)\](.+?)\[\/(?:capiti|首字大写)\]/img; 
        Str = Str.replace(re, "<span style=\"text-transform:capitalize;\">$1</span>");

        //小写
        re = /\[(?:lower|小写)\](.+?)\[\/(?:lower|小写)\]/img; 
        Str = Str.replace(re, "<span style=\"text-transform:lowercase;\">$1</span>");

        //删除线
        re = /\[(?:删除|del|delete)\](.+?)\[\/(?:删除|del|delete)\]/img; 
        Str = Str.replace(re, "<del>$1</del>");

        //上划线
        re = /\[(?:上划线|overline)\](.+?)\[\/(?:上划线|overline)\]/img; 
        Str = Str.replace(re, "<span style=\"text-decoration:overline\">$1</span>");
        
        //下划线
        re = /\[(?:下划线|underline)\](.+?)\[\/(?:下划线|underline)\]/img; 
        Str = Str.replace(re, "<span style=\"text-decoration:underline\">$1</span>");
        
        //按中排
        re = /\[(?:center|中间)\](.+?)\[\/(?:center|中间)\]/img; 
        Str = Str.replace(re, "<center>$1</center>");
        
        //竖排
        re = /\[(?:verti|竖排)\](.+?)\[\/(?:verti|竖排)\]/igm;
        Str = Str.replace(re, "<div style=\"layout-flow:vertical-ideographic;padding:10px;width:240px;\">$1</div>");
        
        //按右排
        re = /\[(?:RTL|按右排)\](.+?)\[\/(?:RTL|按右排)\]/img; 
        Str = Str.replace(re, "<span style=\"direction:rtl;unicode-bidi: bidi-ovErrMsgide;\">$1</span>");
        //飞行文字
        re = /\[(?:fly|飞行)\](.+?)\[\/(?:fly|飞行)\]/igm;
        Str = Str.replace(re, "<marquee width=90% behavior=alternate scrollamount=3>$1</marquee>");
        
        //移动文字
        re = /\[(?:move|移动)\](.+?)\[\/(?:move|移动)\]/igm;
        Str = Str.replace(re, "<marquee width=90% scrollamount=3>$1</marquee>");
                
        //阴影文字
        re = /\[(?:Shadow|阴影)=(\d+?%{0,1}),(.+?),(-{0,1}\d+%{0,1})\](.+?)\[\/(?:Shadow|阴影)\]/img; 
        Str = Str.replace(re, "<div style=\"width:$1;filter:shadow(color=$2, strength=$3)\">$4</div>");
        
        //加入程序代码
        re = /\[(?:code|代码)\](.+?)\[\/(?:code|代码)\]/img; 
        Str = Str.replace(re, "<div align=center><br><div align=left style=\"width:90%;vertical-align:top;\"><var><font color=#696969>$1</font></var></div></div><br>");
        
        //上标
        re = /\[(?:sup|上标)\](.+?)\[\/(?:sup|上标)\]/img; 
        Str = Str.replace(re, "<sup>$1</sup>");
        
        //下标
        re = /\[(?:sup|下标)\](.+?)\[\/(?:sub|下标)\]/img; 
        Str = Str.replace(re, "<sub>$1</sub>");
        
        //颠倒文字
        re = /\[(?:fliph|颠倒)\](.+?)\[\/(?:fliph|颠倒)\]/img; 
        Str = Str.replace(re, "<table style=\"FILTER: flipH\; width:100%\">$1</table>");
        
        //反转文字
        re = /\[(?:flipv|反转)\](.+?)\[\/(?:flipv|反转)\]/img; 
        Str = Str.replace(re, "<table style=\"FILTER: flipv\; width:100%\">$1</table>");
        
        //模糊效果
        re = /\[(?:Blur|模糊)=(\d+?%{0,1}),(\d+?%{0,1}),(\d+?%{0,1})\](.+?)\[\/(?:Blur|模糊)\]/img; 
        Str = Str.replace(re, "<table style=\"FILTER: blur(Add=$1, direction=$2, strength=$3);width:100%\">$4</table>");
        
        //透明效果
        re = /\[(?:Alpha|透明)=([0123]),(\d+?%{0,1}),(\d+?%{0,1})\](.+?)\[\/(?:Alpha|透明)\]/img; 
        Str = Str.replace(re, "<table style=\"FILTER: Alpha(opacity=$2,finishOpacity=$3,style=$1);width:100%\">$4</table>");
        
        //标题
        re = /\[(?:H|标题)=(1|2|3|4|5|6)\](.+?)\[\/(?:H|标题)\]/igm        
        Str = Str.replace(re, "<h$1>$2</h$1>");
        
//---------------------------------------------------多媒体标签--------------------------------------------------------
		//(?:\/|\.\/|\.\.\/)
        //背景音乐
        re = /\[(?:sound|背景音乐)=((?:http|https|ftp|mms|rspt):\/\/[^　\s]+?\/[^　\s]+?\.(?:mid|wav|mp3){1})\]/img; 
        Str = Str.replace(re, "<bgsound src=\"$1\" loop=\"-1\">");
        
        re = /\[(?:sound|背景音乐)=((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.(?:mid|wav|mp3){1})\]/img; 
        Str = Str.replace(re, "<bgsound src=\"$1\" loop=\"-1\">");
        
        re = /\[(?:sound|背景音乐)=((?:[^　\s]+?\/)*?[^　\s]+?\.(?:mid|wav|mp3){1})\]/img; 
        Str = Str.replace(re, "<bgsound src=\"http://$1\" loop=\"-1\">");
        
        //音流，使用Windows Media Player播放
        re = /\[(?:Music|wma|音乐|音频)\]((?:http|https|ftp|mms|rspt):\/\/[^　\s]+?\/[^　\s]+?\.(?:mp3|mid|wav|mpg|mp2|mpeg|wma))\[\/(?:Music|wma|音乐|音频)\]/igm;
        s = "<object align=middle classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=300 height=70>"
            +"<param name=ShowStatusBar value=-1>"
            +"<param name=Filename value=\"$1\">"
            +"<embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,09,1121 flename=mp src=\"$1\" width=300 height=70></embed>"
            +"</object>";
        Str = Str.replace(re, s);
        
        re = /\[(?:Music|wma|音乐|音频)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.(?:mp3|mid|wav|mpg|mp2|mpeg|wma))\[\/(?:Music|wma|音乐|音频)\]/igm;
        s = "<object align=middle classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=300 height=70>"
            +"<param name=ShowStatusBar value=-1>"
            +"<param name=Filename value=\"$1\">"
            +"<embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,09,1121 flename=mp src=\"$1\" width=300 height=70></embed>"
            +"</object>";
        Str = Str.replace(re, s);
        
        re = /\[(?:Music|wma|音乐|音频)\]((?:[^　\s]+?\/)*?[^　\s]+?\.(?:mp3|mid|wav|mpg|mp2|mpeg|wma))\[\/(?:Music|wma|音乐|音频)\]/igm;
        s = "<object align=middle classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=300 height=70>"
            +"<param name=ShowStatusBar value=-1>"
            +"<param name=Filename value=\"http://$1\">"
            +"<embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,09,1121 flename=mp src=\"http://$1\" width=300 height=70></embed>"
            +"</object>";
        Str = Str.replace(re, s);
        
        //视频，使用Windows Media Player播放
        re = /\[(?:Music|Movie|wma|音乐|视频|mp)\]((?:http|https|ftp|mms|rspt):\/\/[^　\s]+?\/[^　\s]+?\.(?:mp3|mid|wav|mpg|mp2|mpeg|asf|avi|wma))\[\/(?:MMusic|Movie|wma|音乐|视频|mp)\]/igm;
        s = "<object align=middle classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=400 height=300>"
            + "<param name=ShowStatusBar value=-1>"
            +"<param name=Filename value=$1>"
            +"<embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,09,1121 flename=mp src=$1 width=300 height=70></embed>"
            +"</object>";
        Str = Str.replace(re, s);
        
        re = /\[(?:Music|Movie|wma|音乐|视频|mp)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\/[^　\s]+?\.(?:mp3|mid|wav|mpg|mp2|mpeg|asf|avi|wma))\[\/(?:MMusic|Movie|wma|音乐|视频|mp)\]/igm;
        s = "<object align=middle classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=400 height=300>"
            + "<param name=ShowStatusBar value=-1>"
            +"<param name=Filename value=\"$1\">"
            +"<embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,09,1121 flename=mp src=\"$1\" width=300 height=70></embed>"
            +"</object>";
        Str = Str.replace(re, s);
        
        re = /\[(?:Music|Movie|wma|音乐|视频|mp)\]((?:[^　\s]+?\/)*?[^　\s]+?\.(?:mp3|mid|wav|mpg|mp2|mpeg|asf|avi|wma))\[\/(?:MMusic|Movie|wma|音乐|视频|mp)\]/igm;
        s = "<object align=middle classid=CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 class=OBJECT id=MediaPlayer width=400 height=300>"
            + "<param name=ShowStatusBar value=-1>"
            +"<param name=Filename value=\"http://$1\">"
            +"<embed type=application/x-oleobject codebase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,09,1121 flename=mp src=\"http://$1\" width=300 height=70></embed>"
            +"</object>";
        Str = Str.replace(re, s);
        
        //音流，使用RealPlayer播放
        var re = /\[(?:Music|rm|ra|音乐|音频)\]((?:http|https|ftp|mms|rspt):\/\/[^　\s]+?\/[^　\s]+?\.(?:rm|ram|mp3|mid|wav|mpg|mp2|mpeg))\[\/(?:Music|rm|ra|音乐|音频)\]/igm;
        s = "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAOCX\" width=\"300\" height=\"70\">"
            + "<param name=\"_ExtentX\" value=\"6694\">"
            + "<param name=\"_ExtentY\" value=\"1588\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"0\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"SRC\" value=\"$1\" ref>"
            + "<param name=\"CONTROLS\" value=\"StatusBar,ControlPanel\">"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "<embed src=\"$1\" width=\"320\" autostart=\"true\" height=\"70\">"
            + "</object>";
        Str= Str.replace(re, s);
        
        var re = /\[(?:Music|rm|ra|音乐|音频)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.(?:rm|ram|mp3|mid|wav|mpg|mp2|mpeg))\[\/(?:Music|rm|ra|音乐|音频)\]/igm;
        s = "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAOCX\" width=\"300\" height=\"70\">"
            + "<param name=\"_ExtentX\" value=\"6694\">"
            + "<param name=\"_ExtentY\" value=\"1588\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"0\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"SRC\" value=\"$1\" ref>"
            + "<param name=\"CONTROLS\" value=\"StatusBar,ControlPanel\">"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "<embed src=\"$1\" width=\"320\" autostart=\"true\" height=\"70\">"
            + "</object>";
        Str= Str.replace(re, s);
        
        var re = /\[(?:Music|rm|ra|音乐|音频)\](?:([^　\s]+?\/)*?[^　\s]+?\.(?:rm|ram|mp3|mid|wav|mpg|mp2|mpeg))\[\/(?:Music|rm|ra|音乐|音频)\]/igm;
        s = "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAOCX\" width=\"300\" height=\"70\">"
            + "<param name=\"_ExtentX\" value=\"6694\">"
            + "<param name=\"_ExtentY\" value=\"1588\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"0\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"SRC\" value=\"http://$1\" ref>"
            + "<param name=\"CONTROLS\" value=\"StatusBar,ControlPanel\">"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "<embed src=\"http://$1\" width=\"320\" autostart=\"true\" height=\"70\">"
            + "</object>";
        Str= Str.replace(re, s);
        
        //视频，使用RealPlayer播放
        re = /\[(?:Music|Movie|rm|ra|音乐|视频)\]((?:http|https|ftp|mms|rspt):\/\/[^　\s]+?\/[^　\s]+?\.(?:rm|ram|mp3|mid|wav|mpg|mp2|mpeg|asf|avi))\[\/(?:Music|Movie|rm|ra|音乐|视频)\]/igm;
        s = "<div style=\"width\:400\;height\:20\;text-align\:right\;\"><a href=# onMouseDown=\"eval\(document.RAOCX.SetFullScreen\(\)\)\">[全屏显示]</a></div>"
			+ "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAOCX\" width=\"500\" height=\"400\">"
            + "<param name=\"_ExtentX\" value=\"12726\">"
            + "<param name=\"_ExtentY\" value=\"8520\">"
			+ "<param name=\"CONTROLS\" value=\"ImageWindow\">"
			+ "<param name=\"CONSOLE\" value=\"_master\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"0\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "</object><br/>"
			+ "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAO\" width=\"500\" height=\"30\">"
            + "<param name=\"_ExtentX\" value=\"18256\">"
            + "<param name=\"_ExtentY\" value=\"794\">"
			+ "<param name=\"CONTROLS\" value=\"ControlPanel\">"
			+ "<param name=\"CONSOLE\" value=\"_master\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"-1\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"SRC\" value=\"$1\" ref>"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "</object>";
        Str = Str.replace(re, s);
        
        re = /\[(?:Music|Movie|rm|ra|音乐|视频)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.(?:rm|ram|mp3|mid|wav|mpg|mp2|mpeg|asf|avi))\[\/(?:Music|Movie|rm|ra|音乐|视频)\]/igm;
        s = "<div style=\"width\:400\;height\:20\;text-align\:right\;\"><a href=# onMouseDown=\"eval\(document.RAOCX.SetFullScreen\(\)\)\">[全屏显示]</a></div>"
			+ "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAOCX\" width=\"500\" height=\"400\">"
            + "<param name=\"_ExtentX\" value=\"12726\">"
            + "<param name=\"_ExtentY\" value=\"8520\">"
			+ "<param name=\"CONTROLS\" value=\"ImageWindow\">"
			+ "<param name=\"CONSOLE\" value=\"_master\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"0\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "</object><br/>"
			+ "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAO\" width=\"500\" height=\"30\">"
            + "<param name=\"_ExtentX\" value=\"18256\">"
            + "<param name=\"_ExtentY\" value=\"794\">"
			+ "<param name=\"CONTROLS\" value=\"ControlPanel\">"
			+ "<param name=\"CONSOLE\" value=\"_master\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"-1\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"SRC\" value=\"$1\" ref>"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "</object>";
        Str = Str.replace(re, s);
        
        re = /\[(?:Music|Movie|rm|ra|音乐|视频)\]((?:[^　\s]+?\/)*?[^　\s]+?\.(?:rm|ram|mp3|mid|wav|mpg|mp2|mpeg|asf|avi))\[\/(?:Music|Movie|rm|ra|音乐|视频)\]/igm;
        s = "<div style=\"width\:400\;height\:20\;text-align\:right\;\"><a href=# onMouseDown=\"eval\(document.RAOCX.SetFullScreen\(\)\)\">[全屏显示]</a></div>"
			+ "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAOCX\" width=\"500\" height=\"400\">"
            + "<param name=\"_ExtentX\" value=\"12726\">"
            + "<param name=\"_ExtentY\" value=\"8520\">"
			+ "<param name=\"CONTROLS\" value=\"ImageWindow\">"
			+ "<param name=\"CONSOLE\" value=\"_master\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"0\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "</object><br/>"
			+ "<object classid=\"clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA\" id=\"RAO\" width=\"500\" height=\"30\">"
            + "<param name=\"_ExtentX\" value=\"18256\">"
            + "<param name=\"_ExtentY\" value=\"794\">"
			+ "<param name=\"CONTROLS\" value=\"ControlPanel\">"
			+ "<param name=\"CONSOLE\" value=\"_master\">"
            + "<param name=\"SHUFFLE\" value=\"0\">"
            + "<param name=\"PREFETCH\" value=\"0\">"
            + "<param name=\"AUTOSTART\" value=\"-1\">"
            + "<param name=\"NOLABELS\" value=\"0\">"
            + "<param name=\"SRC\" value=\"$1\" ref>"
            + "<param name=\"LOOP\" value=\"0\">"
            + "<param name=\"NUMLOOP\" value=\"0\">"
            + "<param name=\"CENTER\" value=\"0\">"
            + "<param name=\"MAINTAINASPECT\" value=\"0\">"
            + "<param name=\"BACKGROUNDCOLOR\" value=\"#000000\">"
            + "</object>";
        Str = Str.replace(re, s);
        
        //flash动画
        re = /\[(?:flash|swf|动画)\]((?:http|https|ftp|mms|rspt):\/\/[^　\s]+?\/[^　\s]+?\.swf)\[\/(?:flash|swf|动画)\]/igm;
        s = "<div><a href=\"$1\" TARGET=_blank title=\"点击开新窗口欣赏该FLASH动画!\">[全屏欣赏]</a><br>"
            + "<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=500 height=400 align=center>"
            + "<PARAM NAME=movie VALUE=&quot;$1/&quot;>"
            + "<PARAM NAME=quality VALUE=high>"
            + "<embed src=\"$1\" quality=high pluginspage=\'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\' type=\'application/x-shockwave-flash\' width=500 height=400>$1</embed>"
            + "</OBJECT></div>";
        Str = Str.replace(re, s);
        
        re = /\[(?:flash|swf|动画)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.swf)\[\/(?:flash|swf|动画)\]/igm;
        s = "<div><a href=\"$1\" TARGET=_blank title=\"点击开新窗口欣赏该FLASH动画!\">[全屏欣赏]</a><br>"
            + "<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=500 height=400 align=center>"
            + "<PARAM NAME=movie VALUE=&quot;$1/&quot;>"
            + "<PARAM NAME=quality VALUE=high>"
            + "<embed src=\"$1\" quality=high pluginspage=\'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\' type=\'application/x-shockwave-flash\' width=500 height=400>$1</embed>"
            + "</OBJECT></div>";
        Str = Str.replace(re, s);
        
        re = /\[(?:flash|swf|动画)\]((?:[^　\s]+?\/)*?[^　\s]+?\.swf)\[\/(?:flash|swf|动画)\]/igm;
        s = "<div><a href=\"http://$1\" TARGET=_blank title=\"点击开新窗口欣赏该FLASH动画!\">[全屏欣赏]</a><br>"
            + "<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=500 height=400 align=center>"
            + "<PARAM NAME=movie VALUE=&quot;http:/$1/&quot;>"
            + "<PARAM NAME=quality VALUE=high>"
            + "<embed src=\"http://$1\" quality=high pluginspage=\'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\' type=\'application/x-shockwave-flash\' width=500 height=400>http://$1</embed>"
            + "</OBJECT></div>";
        Str = Str.replace(re, s);
        
        re = /\[(?:flash|swf|动画)=(\d+),(\d+)\]((?:http|https|ftp|mms|rspt):\/\/[^　\s]+?\/[^　\s]+?\.swf)\[\/(?:flash|swf|动画)\]/igm;
        s = "<div><a href=\"$3\" TARGET=_blank title=\"点击开新窗口欣赏该FLASH动画!\">[全屏欣赏]</a><br>"
            + "<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=$1 height=$2 align=center>"
            + "<PARAM NAME=movie VALUE=&quot;$3/&quot;>"
            + "<PARAM NAME=quality VALUE=high>"
            + "<embed src=\"$3\" quality=high pluginspage=\'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\' type=\'application/x-shockwave-flash\' width=$1 height=$2>$3</embed>"
            +  "</OBJECT></div>";
        Str = Str.replace(re, s);
        
        re = /\[(?:flash|swf|动画)=(\d+),(\d+)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.swf)\[\/(?:flash|swf|动画)\]/igm;
        s = "<div><a href=\"$3\" TARGET=_blank title=\"点击开新窗口欣赏该FLASH动画!\">[全屏欣赏]</a><br>"
            + "<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=$1 height=$2 align=center>"
            + "<PARAM NAME=movie VALUE=&quot;$3/&quot;>"
            + "<PARAM NAME=quality VALUE=high>"
            + "<embed src=\"$3\" quality=high pluginspage=\'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\' type=\'application/x-shockwave-flash\' width=$1 height=$2>$3</embed>"
            +  "</OBJECT></div>";
        Str = Str.replace(re, s);
        
        re = /\[(?:flash|swf|动画)=(\d+),(\d+)\]((?:[^　\s]+?\/)*?[^　\s]+?\.swf)\[\/(?:flash|swf|动画)\]/igm;
        s = "<div><a href=\"http://$3\" TARGET=_blank title=\"点击开新窗口欣赏该FLASH动画!\">[全屏欣赏]</a><br>"
            + "<OBJECT codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 width=$1 height=$2 align=center>"
            + "<PARAM NAME=movie VALUE=&quot;http:/$3/&quot;>"
            + "<PARAM NAME=quality VALUE=high>"
            + "<embed src=\"http://$3\" quality=high pluginspage=\'http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\' type=\'application/x-shockwave-flash\' width=$1 height=$2>http://$3</embed>"
            +  "</OBJECT></div>";
        Str = Str.replace(re, s);
        
        //底片效果
        re = /\[(?:invert|底片)\]((?:http|ftp|https):\/\/[^　\s]+\/[^　\s]+?\.(?:jpg|gif|png|bmp))\[\/(?:invert|底片)\]/img; 
        Str = Str.replace(re, "<a href=\"$1\" target=img title=底片效果><img src=\"$1\" style=\"FILTER: invert\" border=0></a>");
        
        re = /\[(?:invert|底片)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.(?:jpg|gif|png|bmp))\[\/(?:invert|底片)\]/img; 
        Str = Str.replace(re, "<a href=\"$1\" target=img title=底片效果><img src=\"$1\" style=\"FILTER: invert\" border=0></a>");
        
        re = /\[(?:invert|底片)\]((?:[^　\s]+?\/)*?[^　\s]+?\.(?:jpg|gif|png|bmp))\[\/(?:invert|底片)\]/img; 
        Str = Str.replace(re, "<a href=\"http://$1\" target=img title=底片效果><img src=\"http://$1\" style=\"FILTER: invert\" border=0></a>");
        
        //曝光效果
        re = /\[(?:xray|曝光)\]((?:http|ftp|https):\/\/[^　\s]+\/[^　\s]+?\.(?:jpg|gif|png|bmp))\[\/(?:xray|曝光)\]/img; 
        Str = Str.replace(re, "<a href=\"$1\" target=img title=曝光效果><img src=\"$1\" style=\"FILTER: xray\" border=0></a>");
        
        re = /\[(?:xray|曝光)\]((?:\/|\.\/|\.\.\/)(?:[^　\s]+?\/)*?[^　\s]+?\.(?:jpg|gif|png|bmp))\[\/(?:xray|曝光)\]/img; 
        Str = Str.replace(re, "<a href=\"$1\" target=img title=曝光效果><img src=\"$1\" style=\"FILTER: xray\" border=0></a>");
        
        re = /\[(?:xray|曝光)\]((?:[^　\s]+?\/)*?[^　\s]+?\.(?:jpg|gif|png|bmp))\[\/(?:xray|曝光)\]/img; 
        Str = Str.replace(re, "<a href=\"http://$1\" target=img title=曝光效果><img src=\"http://$1\" style=\"FILTER: xray\" border=0></a>");
                
        return Str;
    }
}

//-----------------------------------------------兼容代码结束-----------------------------------------------------------



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//CnJsUbb_Server类继承自CnJsUbb类，定义了只能够在服务端运行的代码，默认对象为 SUbb

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function CnJsUbb_Server()
{
   
    //重写ToUbb函数以实现完整的服务端功能
    this.ToUbb = function (Str)
    {
    	Str = this.CHtml(Str);
        Str = this.Server(Str);        
        return Str;
    }
    
    //     方法名： Server (Str)
    //     参数说明： Str包含未经过集中系统处理的字符串
    //     返回值： 转化好了的字符串
    //     方法功能： 集中处理系统标签，把[SysTem|系统=标签名]转化为相关代码
    //     特别说明：有些功能其实在客户端也可以运行，比如[system=服务器日]，但运行结果却是用户电脑上的日期，
    //     而且语法也是属于服务器专用语法，如果归于客户端符合有违初衷，因此把它归类于服务器专用符合。
    this.Server = function (Str)
    {
        //这里是服务器专用需要的变量
        var t = new Date();
        var re = new RegExp();
        var s = new String();
        Str = new String(Str);
        Str = this.AllCode(Str);
//---------------------------------------------------浏览信息功能-------------------------------------------------
        
        //客户端所用系统
        re = /\[(?:System|系统)=(?:OSType|系统类型)\]/igm;
        s = "<"+"script language=javascript>"
            + "if(document.all){"
            + "var str=window.navigator.appVersion;"
            + "str=str.replace(/^.*(Windows.+?);.*$/igm,\"$1\");"
            + "document.write(str);"
            + "}else{"
            + "document.write(window.navigator.oscpu);"
            +"}<"+"/script>";
        Str = Str.replace(re, s);
        
        //客户端所用浏览器名
        re = /\[(?:System|系统)=(?:AppName|浏览器)\]/igm;
        s = "<"+"script language=javascript>document.write(window.navigator.appName);<"+"/script>";        
        Str = Str.replace(re, s);
        
        //客户端所用系统语言
        re = /\[(?:System|系统)=(?:Lang|语言)\]/igm;
        s = "<"+"script language=javascript>if(document.all){document.write(window.navigator.userLanguage);}else{document.write(window.navigator.language);}<"+"/script>";        
        Str = Str.replace(re, s);
        
        //客户端所用浏览器默认编码
        re = /\[(?:System|系统)=(?:Code|编码)\]/igm;
        s = "<"+"script language=javascript>if(document.all){document.write(window.document.defaultCharset);}else{document.write(window.document.characterSet);}<"+"/script>";        
        Str = Str.replace(re, s);
        
        //客户端所用浏览器版本
        re = /\[(?:System|系统)=(?:AppVer|版本)\]/igm;
        s = "<"+"script language=javascript>"
            + "if(document.all){"
            + "var str=window.navigator.userAgent;"
            + "str=str.replace(/.*MSIE (.*?);.*$/igm,\"$1\");"
            + "document.write(str);"
            + "}else{"
            + "var str=window.navigator.userAgent;"
            + "str=str.replace(/.*rv:(.*)\\).*/igm,\"$1\");"
            + "document.write(str);"
            +"}<"+"/script>";
        Str = Str.replace(re, s);
        
        //主机名
        re = /\[(?:System|系统)=(?:HostName|主机名)\]/igm;
        s = "<"+"script language=javascript>document.write(window.location.hostname);<"+"/script>";
        Str = Str.replace(re, s);
        
        //网址
        re = /\[(?:System|系统)=(?:Url|网址)\]/igm;
        s = "<"+"script language=javascript>document.write(window.location);<"+"/script>";
        Str = Str.replace(re, s);
        
        //协议
        re = /\[(?:System|系统)=(?:Proto|协议)\]/igm;
        s = "<"+"script language=javascript>document.write((window.location.protocol).substr(0,(window.location.protocol).length-1));<"+"/script>";        
        Str = Str.replace(re, s);

        //客户端所用系统位数
        re = /\[(?:System|系统)=(?:OSByte|系统位数)\]/igm;
        s = "<"+"script language=javascript>document.write(window.navigator.platform);<"+"/script>";        
        Str = Str.replace(re, s);

//---------------------------------------------------屏幕功能-------------------------------------------------
        //屏幕可用高度
        re = /\[(?:System|系统)=(?:AHeight|屏幕可用高度)\]/igm;
        s = "<"+"script language=javascript>document.write(window.screen.availHeight);<"+"/script>";        
        Str = Str.replace(re, s);
        
        //屏幕高度
        re = /\[(?:System|系统)=(?:Height|屏幕高度)\]/igm;
        s = "<"+"script language=javascript>document.write(window.screen.height);<"+"/script>";        
        Str = Str.replace(re, s);
        
        //屏幕可用宽度
        re = /\[(?:System|系统)=(?:AWidth|屏幕可用宽度)\]/igm;
        s = "<"+"script language=javascript>document.write(window.screen.availWidth);<"+"/script>";        
        Str = Str.replace(re, s);
        
        //屏幕宽度
        re = /\[(?:System|系统)=(?:Width|屏幕宽度)\]/igm;
        s = "<"+"script language=javascript>document.write(window.screen.width);<"+"/script>";        
        Str = Str.replace(re, s);
        
        //窗口横座标
        re = /\[(?:System|系统)=(?:X|横座标)\]/igm;
        s = "<"+"script language=javascript>if(document.all){document.write(window.screenLeft);}else{document.write(window.screenX);}<"+"/script>";        
        Str = Str.replace(re, s);
        
        //窗口竖座标
        re = /\[(?:System|系统)=(?:Y|竖座标)\]/igm;
        s = "<"+"script language=javascript>if(document.all){document.write(window.screenTop);}else{document.write(window.screenY);}<"+"/script>";        
        Str = Str.replace(re, s);
        
        //显示器颜色位数
        re = /\[(?:System|系统)=(?:Depth|颜色位数)\]/igm;
        s = "<"+"script language=javascript>document.write(window.screen.colorDepth);<"+"/script>";        
        Str = Str.replace(re, s);
        
//---------------------------------------------------时间功能-------------------------------------------------

        //客户端年
        re = /\[(?:System|系统)=(?:Year|年)\]/igm;
        s = "<"+"script language=javascript>document.write(new Date().getFullYear());<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端年
        re = /\[(?:System|系统)=(?:SYear|服务器年)\]/igm;
        s = "<"+"script language=javascript>document.write(\""+(t.getFullYear())+"\");<"+"/script>";
        Str = Str.replace(re, s);
        
        //客户端月
        re = /\[(?:System|系统)=(?:Month|月)\]/igm;
        s = "<"+"script language=javascript>document.write(new Date().getMonth()+1);<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端月
        re = /\[(?:System|系统)=(?:SMonth|服务器月)\]/igm;
        s = "<"+"script language=javascript>document.write(\""+(t.getMonth()+1)+"\");<"+"/script>";        
        Str = Str.replace(re, s);
        
        //客户端日
        re = /\[(?:System|系统)=(?:Date|日)\]/igm;
        s = "<"+"script language=javascript>document.write(new Date().getDate());<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端日
        re = /\[(?:System|系统)=(?:SDate|服务器日)\]/igm;
        s = t.getDate();
        Str = Str.replace(re, s);
        
        //客户端时
        re = /\[(?:System|系统)=(?:Hour|时)\]/igm;
        s = "<"+"script language=javascript>document.write(new Date().getHours());<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端时
        re = /\[(?:System|系统)=(?:SHour|服务器时)\]/igm;
        s = t.getHours();        
        Str = Str.replace(re, s);
        
        //客户端分
        re = /\[(?:System|系统)=(?:Minute|分)\]/igm;
        s = "<"+"script language=javascript>document.write(new Date().getMinutes());<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端分
        re = /\[(?:System|系统)=(?:SMinute|服务器分)\]/igm;
        s = t.getMinutes();        
        Str = Str.replace(re, s);
        
        //客户端秒
        re = /\[(?:System|系统)=(?:Second|秒)\]/igm;
        s = "<"+"script language=javascript>document.write(new Date().getSeconds());<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端秒
        re = /\[(?:System|系统)=(?:SSecond|服务器秒)\]/igm;
        s = t.getSeconds();        
        Str = Str.replace(re, s);
        
        //客户端本地时间
        re = /\[(?:System|系统)=(?:Time|本地时间)\]/igm;
        s = "<"+"script language=javascript>document.write(new Date().toLocaleString());<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端本地时间
        re = /\[(?:System|系统)=(?:STime|服务器本地时间)\]/igm;
        s = t.toLocaleString();        
        Str = Str.replace(re, s);
        
        //客户端星期
        re = /\[(?:System|系统)=(?:SDay|星期)\]/igm;
        s = "<"+"script language=javascript>"
            + "var xq=\"\";"
            + "var t=new Date();"
            + "switch(t.getDay()){"
            + "case 0:xq = \"天\"; break;"
            + "case 1:xq = \"一\"; break;"
            + "case 2:xq = \"二\"; break;"
            + "case 3:xq = \"三\"; break;"
            + "case 4:xq = \"四\"; break;"
            + "case 5:xq = \"五\"; break;"
            + "default:xq = \"六\";"
            + "}"
            + "xq=\"星期\"+xq;"
            + "document.write(xq);"
            + "<"+"/script>";        
        Str = Str.replace(re, s);
        
        //服务器端星期        
        var xq="";
        switch(t.getDay()){
            case 0:
                xq = "天";  break;
            case 1:
                xq = "一"; break;
            case 2:
                xq = "二"; break;
            case 3:
                xq = "三"; break;
            case 4:
                xq = "四"; break;
            case 5:
                xq = "五"; break;
            default:
                xq = "六";
        }

        re = /\[(?:System|系统)=(?:SDay|服务器星期)\]/igm;
        s = "星期"+xq+"";
        Str = Str.replace(re, s);
        
        return Str;
    }
}

//在这里同时继承下了CnJsUbb类
CnJsUbb_Server.prototype=new CnJsUbb();

//---------------------------------------------------服务器专用结束-------------------------------------------------

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//CnJsUbb_Client类继承自CnJsUbb类，定义了只能够在客户端运行的代码，默认对象为 CUbb

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function CnJsUbb_Client()
{
    //重写ToUbb函数以实现完整的服务端功能
    this.ToUbb = function (Str)
    {
    	Str = this.CHtml(Str);
        Str = this.Client(Str);
        
        return Str;
    }
    
    //对传入字符串或者对象进行CnJsUbb转换
    
    this.ToItem = function (src)
    {
    	var type = typeof(src);
    	
		if (type == "string")
		{
			return this.Client(src);
		}
		else if (type == "object")
		{
			if(src.innerHTML)
			{
				src.innerHTML=this.Client(src.innerHTML);
				return src.innerHTML;
			}
		}
		else
		{
			return this.ToItem(window.document.body);
		}
    }
    
    //     方法名： Client (Str)
    //     参数说明： Str包含未经过集中系统处理的字符串
    //     返回值： 转化好了的字符串
    //     方法功能： 集中处理系统标签，把[Client|客户=标签名]转化为相关代码
    this.Client = function (Str)
    {
//---------------------------------------------------浏览信息功能-------------------------------------------------
        //这里是客户端专用需要的变量
        var t = new Date();
        var re = new RegExp();
        var s = new String();
        var res = new RegExp();
        Str = new String(Str);
        var IsIe = document.all != null;
        
        Str = this.AllCode(Str);
        
        //当前系统的类型
        re = /\[(?:Client|浏览)=(?:OSType|系统类型)\]/igm;
        if(IsIe)
        {
        	s = window.navigator.appVersion;
        	res = /.*(Windows.+?);.*/igm;
        	s=s.replace(res, "$1");
        }
        else
        {
        	s = window.navigator.oscpu;
        }
        Str = Str.replace(re, s);
        
        //当前浏览器的名称
        re = /\[(?:Client|浏览)=(?:AppName|浏览器)\]/igm;
       	s = window.navigator.appName;
        Str = Str.replace(re, s);
        
        //当前系统语言
        re = /\[(?:Client|浏览)=(?:Lang|语言)\]/igm;
        if (IsIe)
        {
        	s = window.navigator.userLanguage;
        }
        else
        {
        	s = window.navigator.language;
        }
        Str = Str.replace(re, s);
        
        //当前浏览器默认编码
        re = /\[(?:Client|浏览)=(?:Code|编码)\]/igm;
        if (IsIe)
        {
        	s = window.document.defaultCharset;
        }
        else
        {
        	s = window.document.characterSet;
        }
        Str = Str.replace(re, s);
        
        //当前浏览器版本
        re = /\[(?:Client|浏览)=(?:AppVer|版本)\]/igm;
        s = window.navigator.userAgent;
        if(IsIe)
        {
        	res = /.*MSIE (.*?);.*$/igm;
        }
        else
        {
        	res = /.*rv:(.*)\).*/igm;
        }
        s=s.replace(res,"$1");
        Str=Str.replace(re,s);
        
        //主机名
        re = /\[(?:Client|浏览)=(?:HostName|主机名)\]/igm;
        Str = Str.replace(re, window.location.hostname);
        
        //网址
        re = /\[(?:Client|浏览)=(?:Url|网址)\]/igm;
        Str = Str.replace(re, window.location);
        
        //协议
        re = /\[(?:Client|浏览)=(?:Proto|协议)\]/igm;
        Str = Str.replace(re, (window.location.protocol).substr(0,(window.location.protocol).length-1));
        
        //所用系统位数
        re = /\[(?:Client|浏览)=(?:OSByte|系统位数)\]/igm;
        Str = Str.replace(re, window.navigator.platform);
        
//---------------------------------------------------屏幕功能-------------------------------------------------
               
        //屏幕可用高度
        re = /\[(?:Client|浏览)=(?:AHeight|屏幕可用高度)\]/igm;
        Str = Str.replace(re, window.screen.availHeight);
        
        //屏幕高度
        re = /\[(?:Client|浏览)=(?:Height|屏幕高度)\]/igm;
        Str = Str.replace(re, window.screen.height);
        
        //屏幕可用宽度
        re = /\[(?:Client|浏览)=(?:AWidth|屏幕可用宽度)\]/igm;
        Str = Str.replace(re, window.screen.availWidth);
        
        //屏幕宽度
        re = /\[(?:Client|浏览)=(?:Width|屏幕宽度)\]/igm;
        Str = Str.replace(re, window.screen.width);
        
        //窗口横座标
        re = /\[(?:Client|浏览)=(?:X|横座标)\]/igm;
        if(IsIe)
        {
        	s = window.screenLeft;
        }
        else
        {
        	s = window.screenX;
        }
        Str = Str.replace(re, s);
        
        //窗口竖座标
        re = /\[(?:Client|浏览)=(?:Y|竖座标)\]/igm;
        if(IsIe)
        {
        	s = window.screenTop;
        }
        else
        {
        	s = window.screenY;
        }
        Str = Str.replace(re, s);
        
        //显示器颜色位数
        re = /\[(?:Client|浏览)=(?:Depth|颜色位数)\]/igm;
        Str = Str.replace(re, window.screen.colorDepth);
        
//---------------------------------------------------时间功能-------------------------------------------------

        //年
        re = /\[(?:Client|浏览)=(?:Year|年)\]/igm;
        Str = Str.replace(re, t.getFullYear());
        
        //月
        re = /\[(?:Client|浏览)=(?:Month|月)\]/igm;
        Str = Str.replace(re, t.getMonth()+1);
        
        //日
        re = /\[(?:Client|浏览)=(?:Date|日)\]/igm;
        Str = Str.replace(re, t.getDate());
        
        //时
        re = /\[(?:Client|浏览)=(?:Hour|时)\]/igm;
        Str = Str.replace(re, t.getHours());
        
        //分
        re = /\[(?:Client|浏览)=(?:Minute|分)\]/igm;
        Str = Str.replace(re, t.getMinutes());
        
        //秒
        re = /\[(?:Client|浏览)=(?:Second|秒)\]/igm;
        Str = Str.replace(re, t.getSeconds());
        
        //本地时间
        re = /\[(?:Client|浏览)=(?:Time|本地时间)\]/igm;
        Str = Str.replace(re, t.toLocaleString());
        
        //星期
        var xq="";
        re = /\[(?:Client|浏览)=(?:Day|星期)\]/igm;
        switch(t.getDay()){
            case 0:
                xq = "天";  break;
            case 1:
                xq = "一"; break;
            case 2:
                xq = "二"; break;
            case 3:
                xq = "三"; break;
            case 4:
                xq = "四"; break;
            case 5:
                xq = "五"; break;
            default:
                xq = "六";
        }
        xq="星期"+xq;
	    Str = Str.replace(re, xq);
	    
        return Str;
    }
}
CnJsUbb_Client.prototype=new CnJsUbb();


//--------------------------------------------以下为各种附加变量以及函数定义----------------------------------------


//定义一个默认的CnJsUbb对象，可以在页面里使用Ubb来访问，一般是调用Ubb.ToUbb来实现标签转换
var Ubb=new CnJsUbb();

//定义一个默认的CnJsUbb_Server对象，可以在页面里使用SUbb来访问，一般是调用SUbb.ToUbb来实现标签转换
var SUbb=new CnJsUbb_Server();

//定义一个默认的CnJsUbb_Client对象，可以在页面里使用CUbb来访问，一般是调用CUbb.ToUbb来实现标签转换
var CUbb=new CnJsUbb_Client();