2005年12月10日

 本系统内核采用了比较先进的XMLHTTP技术+XML文档对象模式(DOM)来实现分布式的计算或存储,服务器端以较通用的ASP技术作基础(这是一种非常适合少量数据快速传输处理的Web应用的模式,查看该技术的优越性,请点击这里)。具有速度快,高稳定性,占用系统资源少,支持超大容量用户,用户界面友好等特点。本聊天室具备了几乎目前国内较流行的聊天室的所有特点和功能:

【功能特点简介】

—————————————————
 真正分布式的计算处理和存储:
—————————————————

◆ 由于本系统采用了XML格式的数据传输,所以非常简单地实现了客户端的计算,判断,数据的存储,加工和转移。从这方面而言,即便是很多昂贵的聊天系统(做成独立于WEB-SERVER的那种)也只不过是由服务器端处理完毕"PUSH"到客户端而已。分布式的计算处理和存储大大减轻了服务器负担。

—————————————————
 服务器端简单智能化:
—————————————————

◆ 简单化:由于实现了客户端的计算和存储,服务器端工作方式变得非常简单。服务器存有少量数据,所有用户都来这里取数据,自己取走自己的仅此而已。而且不管是谈话,短信,还是系统信息都采用统一的格式。在客户端判断实现何种功能,是否显示,如何显示,是否提醒等。所以服务器处理相对简单。

◆ 智能化:系统根据用户数量动态占用内存,真正实现内存的自动释放,当房间为空时立即撤销与该房间有关的所有变量。所有空间用到了才申请,而不是可能用到即申请。也就是说如果在线人数为零。系统几乎不占用内存。

—————————————————
 数据传输量最小化:
—————————————————

◆ 网路仅传送谈话内容(其它为代号,缩写,数字等),尽可能地实现内容的本地还原。减少了传输负担,提高了传输速率及响应速度。

—————————————————
 绝对人性化的界面和设计:
—————————————————

◆ 本系统界面美观,默认的是非常漂亮的绿色视觉风格。而且启用了声效,到处体现着方便简洁和实用。这样的宗旨(拈手皆是,比如说谈话记录窗口的打印和保存按钮,您可以将比较精彩,有保留价值的谈话保存或打印出来,相信这一功能别的系统很少有的)。采用了大量的比较文明的(相对于其它聊天系统比较俗气的图库)贴图,表情,可自定义趣语,和颜色。相信合理的使用一定会让你们的谈话变得妙趣横生。

—————————————————
 独创性的收藏夹和讨论组:
—————————————————

◆ 非常有创意的收藏夹和讨论组。我相信这在别的系统中绝对是很少看到的。与QICQ类似,会员可以将喜欢的添入到收藏夹,不用再每次都在一长串的用户列表中寻找了,非常方便。另外,你有什么话题可以发起讨论组,大家来讨论一下,岂不妙哉!(讨论组将在专业版或更高版本中提供) 

—————————————————
 其它功能:
————————————————— 

◆ 其它常用的功能,比如说:支持头像,表情;用户查询,个人信息,短消息,屏蔽,状态,游戏,留言本,激活,自动掉线,投诉,意见,支持房间,在线踢人。。。。。。等等等等在此不一一列举。总之常用的基本上是全了。
 
 

【相关资料摘录】

—————————————————
 XML格式数据的特性:
—————————————————

◆ 本地计算和处理

  XML格式的数据发送给客户后,客户可以用应用软件解析数据并对数据进行编辑和处理。使用者可以用不同的方法处理数据,而不仅仅是显示它。XML文档对象模式(DOM)允许用脚本或其他编程语言处理数据。数据计算不需要回到服务器就能进行。分离使用者观看数据的界面,使用简单灵活开放的格式,可以给Web创建功能强大的应用软件,这些软件原来只能建立在高端数据库上。

◆ 粒状的数据更新

  通过XML,数据可以粒状地更新。每当一部分数据变化后,不需要重发整个结构化的数据。变化的元素必须从服务器发送给客户,变化的数据不需要刷新整个用户界面就能够显示出来。目前,只要一条数据变化了,整页都必须重建,这严重限制了服务器的升级性能。XML也允许加进其他数据,比如预测的温度。加入的信息能够流入存在的页面,不需要浏览器发一个新的页面。

----原作者:刘小东 

—————————————————
 其它相关资料:
—————————————————

◆ 我手头还有很多这方面的资料,比如说水木清华BBS的,MSDN的,动网的等。由于不是特别精炼在此不列那么多了。如果您感兴趣,可以和我联系。

   程序设计:高泽龙

   电子邮箱:zelonggao@163.com zelonggao@hotmail.com

      QQ:360501986

      手机:13466328244


软体作者保留所有权利!

只要能够实现双赢,我们可以以任何形式合作!

 
 
—————————————————
 表 示 感 谢:
—————————————————

  爸爸,妈妈 正是因为你们在家里辛勤劳作,我才能安心坐在这里工作,向您表示感谢!!!

  董进 很有才华,本产品的所有宣传LOGO都是他做的,从第二个聊天室起就帮助我

  JAZZ 新龙教育 ASP的讲师 我现在的合作伙伴

  聪辉 帮我做了主面板非常漂亮的花草的背景

  还有很多一直关心支持我的发展的朋友。感谢纪刚,宏涛的机子。感谢我们宿舍所有哥们儿对我的支持。感谢帮我挨批的危险下载了很多有用的资料的占杰。

  还有其它很多,恕我不能一一列举。向你们表示感谢!!

—————————————————
 再 说 两 句:
—————————————————

◆ X 聊 运行剧快,占用资源贼少,非常Beautiful的一套聊天系统。

 
 

那是我的辉煌时代….是我曾经达到的一种高度。。


It’s my splendid times…

<%session("c_roomname")=null ‘销毁变量,此变量只在这里用一次%>
<script src="js/showset1.js"></script>
<script>
parent.initMsg(350,200,’message.htm’);//初始化message窗口
msgnum=0;
auto="";//自动回复为空
access=true;//可以接收信息
noreadmessage=0;//未读短信
ast=0;//已自动回复次数(autosendtime)
leave=false;//标识是否暂离
status="在线";//用户当前状态
</script>
<html>
<head>
<title>发言区</title>
<meta content="text/html; charset=gb2312" http-equiv="Content-Type">
</head>
<script>
var tmp0="$F对$T说:|表情|$F向$T微微一笑:|微笑|$F笑嘻嘻地对$T说:|嘻笑|$F冲$T傻乎乎的笑笑:|傻笑|$F对$T娇笑着:|娇笑|$F对着$T哈哈大笑:|大笑|$F看着$T,心头一阵狂喜:|狂喜|$F冲着$T狂笑不已:|狂笑|$F对$T奸笑着:|奸笑|$F咯咯一笑,很大方地对$T说:|大方|$F紧紧地握住$T的手:|握手|$F向$T挥了挥手:|挥手|$F耸耸肩,两手一摊:$T,|耸肩|$F无奈地耸耸肩:$T,|无奈|$F摸摸$T的头,细声安慰:|安慰|$F笑呵呵向$T一拱手:|拱手|$F很有礼貌地对$T作了一揖:|作揖|$F深深地鞠了一躬:$T,|鞠躬|$F不好意思地对$T说:|歉意|$F瞪大了眼睛,很讶异地看着$T:|讶异|$F大吃一惊:$T,|惊讶|$F茫然地看着$T:|茫然|$F一脸的迷茫:$T,|迷茫|$F颇感迷惑:$T,|迷惑|$F感到很是奇特:$T,|奇特|$F对$T潇洒地一甩头:|潇洒|$F惋惜地看着$T:|惋惜|$F对$T皱了皱眉:|皱眉|$F很遗憾地对$T说:|遗憾|$F大包大揽地向$T承诺:|承诺|$F抓抓头皮,还是不解:$T,|不解|$F提高嗓门,大声地对$T说:|大声|"
var tmp1="$F不解地问$T:|询问|$F向$T吐了吐舌头:|吐舌|$F非常自信地对$T说:|自信|$F向上天祈祷着,$T,|祈祷|$F向$T噘了噘嘴:|噘嘴|$F嘟着嘴对$T说:|嘟嘴|$F平静地对$T说:|平静|$F高兴地对$T说:|高兴|$F在$T耳边悄悄地说:|耳语|$F眯着小眼睛对$T说:|眯眼|$F眼波晶莹明亮地看着$T:|眼亮|$F幸福地看着$T:|幸福|$F很满足地对$T说:|满足|$F轻轻牵着$T的手,小声地说:|牵手|$F轻轻推了$T一下:|轻推|$F粘粘糊糊地向$T撒娇:|撒娇|$F对$T做了个鬼脸:|鬼脸|$F神秘兮兮地对$T说:|神秘|$F脸上泛起了红晕,低着头小声地对$T说:|脸红|$F低着头,玩弄着自己的手指,羞得满脸通红:$T,|害羞|$F小猫猫般地依偎在$T的怀中:|依偎|$F拍了拍$T那脏兮兮的小脸蛋:|拍脸|$F向$T抛去一个媚眼:|媚眼|$F恶狠狠地冲$T瞪着眼睛:|瞪眼|$F柔声地对$T说:|柔声|$F情意绵绵地望着$T说:|深情|$F温柔地抱住$T说:|拥抱|$F亲了亲$T的脸:|亲亲|$F恋恋不舍地拉着$T的衣角:|不舍|"
var tmp2="$F运足气一声断喝:$T!|断喝|$F幸灾乐祸地对$T说:|幸灾|$F露出无可奈何的表情:$T,|无奈|$F使劲敲敲自己脑门,看着$T:|拍脑|$F顾作沉思状:$T,|沉思|$F一付无辜的样子:$T,|无辜|$F感到非常无辜,$T:|不适|$F感觉很不舒服:$T,|不适|$F打个大哈欠:$T,|哈欠|$F口吐白沫,晕倒在地:$T,|白沫|$F感到无聊极了:$T,|无聊|$F看着$T,快要吐了:|想吐|$F一脸无赖泼皮样子:$T,|无赖|$F歪着看着$T,二球劲十足:|二球|$F双眼盯着$T,奴才嘴脸十足:|奴才|$F委屈地对$T说:|委屈|$F大感沮丧:$T,|沮丧|$F望着窗外细雨淅淅,不由得双眼朦胧:$T,|伤感|$F悲伤地对$T说:|悲伤|$F泪水在眼框里打着转:$T,|含泪|$F看着$T,快要哭了:|要哭|$F低低抽泣着:$T,|抽泣|$F一把将$T抱住,哭哭涕涕:|抱哭|$F想到伤心处,泪流如注:$T,|大哭|$F抱头放声大哭:$T,|痛哭|$F号淘大哭:$T,|大哭|$F对$T露出失望的表情:|失望|$F用眼角斜视$T,满脸俱是轻蔑不屑之色:|轻蔑|$F生气地对$T说:|生气|"
var tmp3="$F向$T提出强烈抗议:|抗议|$F对$T大声叫嚷:|叫嚷|$F对$T气愤地嚷道|气愤|$F怨毒地看着$T:|怨毒|$F一把甩掉$T的手,恶恨恨地说:|甩手|$F目光尽赤,冲$T怒不可恶地狂吼:|暴怒|$F打了$T老大一个耳括子:|耳光|$F不客气地猛揍$T一拳:|拳打|$F一脚踢在$T的屁股上:|脚踢"
var etmp=tmp0+tmp1+tmp2+tmp3;
var eV=etmp.split("|")
</script>
<script>
//输出下拉菜单项
function yy(s_value,s_name){document.write("<option value=’"+s_value+"’>"+s_name+"</option>")}
//窗口分屏的实现
function splitscreen(u){ 
    if (u==’0′) {parent.viewsay.frmMain.rows="*,100%";parent.viewsay.frmMain.cols="*";};   
    else if (u==’1′){parent.viewsay.frmMain.cols="*";parent.viewsay.frmMain.rows="50%,*";};   
    else {parent.viewsay.frmMain.rows="*";parent.viewsay.frmMain.cols="50%,*";};   
    document.forms[0].sscr.options[0].selected=true;document.forms[0].says.focus();}   
//从谈话记录中选择聊天对象
function towho(un){
document.say.T.value=un;
document.say.says.focus();return;}
//)悄悄话
function tosecret(){   
  if (document.forms[0].secret.checked!=true) {document.forms[0].secret.checked=true;}
  else{document.forms[0].secret.checked=false;}   
  document.forms[0].says.focus();}   
//滚屏的选中
function moveself(){   
  if (document.forms[0].as.checked!=true) {document.forms[0].as.checked=true;}
  else{document.forms[0].as.checked=false;}   
  document.forms[0].says.focus();}   
//上一句,下一句的控制处理
var pointer=1,poin=1,saysnum=25;
saystemp=new Array();
for (si = 1; si < saysnum; si++)
   { saystemp[si] ="";  }
function saylast(){
if (poin>saysnum){document.say.says.value=saystemp[saysnum];poin=saysnum;}else{if (poin>1){poin–;document.say.says.value=saystemp[poin];}} GetFocus();
}
function saynext(){
if (poin<saysnum && poin>=1 && saystemp[poin+1]!=""){poin++;document.say.says.value=saystemp[poin];}GetFocus();
}
function addone(what){
if (pointer<=saysnum){saystemp[pointer]=what;pointer++;}else{for (si=1;si<saysnum;si++)saystemp[si]=saystemp[si+1];saystemp[saysnum]=what;}poin=pointer;document.forms[0].subsay.disabled=1;ensay();nosaytime=1;return true;
}
//可以发言了
function ensay(){
var tid3=null;tid3=setTimeout(‘document.forms[0].subsay.disabled=0′,1000);}   
//状态的设置
function StatSet(sele){
 if (sele.value!=""){
  q=confirm("你真的要设置状态吗?");
  if (q!=0){
    st=sele.value;yes=false;
    if (st=="自定"){st2=prompt("请您输入合适的词语,不能超过8个字符!","自定义");
     if (st2!=null && st2!="自定义" && st2!="自定" && st2!="自" && st2!=""){st=st2;yes=true}}
    else yes=true
    if (yes==true)parent.ShowWin(300,200,’mystatus.asp?sta=’+st)}
 }
}
function ShowQpic(){//显示贴图 
 if (parent.listshow!=true) parent.change(1);
 window.open(‘pic.asp’,'list’);document.forms[0].says.focus();
}
function GetFocus(){//输入谈话内容的文本框获得焦点
document.forms[0].says.focus();}

///////////////////////////////////以下代码为谈话处理部分////////////////////////////////// 
</SCRIPT>

<script language="vbscript">
Function URLEncoding(vstrIn)
    strReturn = ""
    For i = 1 To Len(vstrIn)
        ThisChr = Mid(vStrIn,i,1)
        If Abs(Asc(ThisChr)) < &HFF Then
            strReturn = strReturn & ThisChr
        Else
            innerCode = Asc(ThisChr)
            If innerCode < 0 Then
                innerCode = innerCode + &H10000
            End If
            Hight8 = (innerCode  And &HFF00)\ &HFF
            Low8 = innerCode And &HFF
            strReturn = strReturn & "%" & Hex(Hight8) &  "%" & Hex(Low8)
        End If
    Next
    URLEncoding = strReturn
End Function

Function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn,i,1))
        If ThisCharCode < &H80 Then
            strReturn = strReturn & Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn,i+1,1))
            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            i = i + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function


</script>
<script language="javascript">
var Me="<%=session("c_username")%>";
var Ts=new oS();
function oS()
{this.F="";
 this.T="";
 this.E="";
 this.W="0";
 this.sC="";
 this.cL="";
 this.nC="";
 this.Send=sendMsg;
}
parent.store.SetLTime();//更新上次发言时间
function sendshortmsg(to,says){
 var fm=document.say;
 if (to!=Me){
 Ts.F=Me;
 Ts.T=to;
 Ts.E=fm.userface.selectedIndex;
 Ts.sC=says;
 Ts.cL=fm.sayscolor.value;
 Ts.nC=fm.namecolor.value;
 Ts.W="0";
 Ts.Send();parent.store.SetLTime();if(auto==""){alert("操作执行成功!");parent.store.SetMessageSpan();}}
}
function autosend(to,says){
 var fm=document.say;
 if (to!=Me){
 Ts.F=Me;
 Ts.T=to;
 Ts.E=fm.userface.selectedIndex;
 Ts.sC=says;
 Ts.cL=fm.sayscolor.value;
 Ts.nC=fm.namecolor.value;
 Ts.W="0";
 Ts.Send();ast++;if (ast > parent.store.leave_answer) parent.ExitNormal("leave_out");//如果用户自动回复句数超过系统设定,退出(且是暂离的退出)
 }
}

function checksays()
{
 if (document.say.says.value=="") {alert("您总得说点什么吧!");return false;}
 var fm=document.say;
 var sC=fm.says.value;
 if (sC.indexOf("$system")>-1){alert("内容包含系统保留字符$system,发送失败!");return false;}
 var F=Me
 var T=fm.T.value;
 var E=fm.userface.selectedIndex;
 var W="0"
 var cL=fm.sayscolor.value;
 var nC=fm.namecolor.value;
 fm.says.value="";
 fm.says.focus();
 addone(sC);//将新内容填入输入历史记录
 Ts.F=F;
 Ts.T=T;
 Ts.E=E;
 Ts.sC=sC;
 Ts.cL=cL;
 Ts.nC=nC;
 Ts.W=W;
 setTimeout("Ts.Send();",20);
 delete(F);delete(sC);delete(fm);delete(cL);delete(T);delete(E);delete(nC);
 return false;
}
function outputsays(localobject){
          //alert("outputsays被执行!有新内容要显示")
          if (access==false) return;//免扰状态,不接收信息
          var oDom=localobject;
    var aryF=oDom.documentElement.selectNodes("F");
    var aryT=oDom.documentElement.selectNodes("T");
    var arysC=oDom.documentElement.selectNodes("sC");
    var arycL=oDom.documentElement.selectNodes("cL");
    var arynC=oDom.documentElement.selectNodes("nC");
    var aryE=oDom.documentElement.selectNodes("E");
    var user_change=oDom.documentElement.selectNodes("user_change");
    var tmpHtml="";
    var img="";
    lengt=aryF.length;
    if (user_change.length>0 && parent.listshow){
    parent.list.location.reload();
    parent.list.location.href="userlist.asp";
    } 
    for(var i=0;i<lengt;i++){
     sctext=arysC(i).text;
     action="「动作」"
     system=false;
     secret=false;
     kick=false;
     //对于屏蔽的对象,跳过不做任何处理
     sfname=parent.store.filtername;
     if (sfname==null) sfname="";
     if (sfname.indexOf("$")!=-1){
         filtered=false;
      filtername=sfname.split("$");
      for (k=1 ;k<=filtername.length; k++){
      if (aryF(i).text== filtername[k]) filtered=true;}
      if (filtered==true) continue;}
     //短信的处理
     if (sctext.substring(0,14)=="$shortmessage$"){
      if (aryT(i).text==Me){
          //alert("有你的msg,input页面正在处理中!");
       now= new Date()
       var hours=now.getHours()
       var minutes=now.getMinutes()
       var seconds=now.getSeconds()
       if (eval(hours) <10) {hours="0"+hours}
       if (eval(minutes) < 10) {minutes="0"+minutes}
       if (seconds < 10) {seconds="0"+seconds}
       now = hours+":"+minutes+":"+seconds
       msgcontents=rp2(sctext,"$shortmessage$" ," ")
       msgnum++;
       if (auto!=""){//如果现在暂离
        sendshortmsg(aryF(i).text,"$shortmessage$" +auto);
        if (aryF(i).text!=Me) noreadmessage++;
        continue;//如果暂离则自动回复之后开始处理下一句
       }
       instr="<table width=100% border=0 align=center cellpadding=5 cellspacing=0 bordercolor=’#'><tr><td>发信人:"+aryF(i).text+"</td><td>收到时间:"+now+"</td></tr><tr><td colspan=2>短信内容:"+msgcontents+"</td></tr></table>"       
       parent.AddMsg(instr);
       if (parent.store.popmsg==true && auto=="")//如果设定当有新消息来时即弹出窗口 
       parent.ShowMsg();
       else
       noreadmessage++;//如果不自动弹出窗口,则未读短信加1
       //不管是否读,都要响起音乐提示
       parent.other.document.write("<bgsound src=’sound/ring.mid’ loop=’10′><body>正在播放音乐</body>")
       continue;
      }
      if (aryF(i).text!=Me){
       continue;}
      else{
       sctext=rp2(sctext,"$shortmessage$" ,"$F发短信给$T成功。内容如下:")
      }
      //system=true;      
     }
     //系统短信的处理
     if (sctext.substring(0,20)=="$systemshortmessage$"){
      if (sctext.substring(0,24)=="$systemshortmessage$kick") kick=true
      if (aryT(i).text==Me){
          //暂时不弹出提示信息,因为无大的价值!
       //alert("系统信息到,请查看!");
       if (kick)
       {msgcontents=rp2(sctext,"$systemshortmessage$kick" ," ");
       if (parent.sysshowed==true) parent.CloseSys();parent.ShowSys(400,300,’kicked.asp?msg=’+msgcontents);continue;}
       now= new Date()
       var hours=now.getHours()
       var minutes=now.getMinutes()
       var seconds=now.getSeconds()
       if (eval(hours) <10) {hours="0"+hours}
       if (eval(minutes) < 10) {minutes="0"+minutes}
       if (seconds < 10) {seconds="0"+seconds}
       now = hours+":"+minutes+":"+seconds
       msgcontents=rp2(sctext,"$systemshortmessage$warning" ," ");
       msgcontents=rp2(msgcontents,"$systemshortmessage$info" ," ");
       msgnum++;
       if (leave==true){//如果现在暂离
        if (aryF(i).text!=Me) noreadmessage++;
        continue;//如果暂离则开始处理下一句
       }
       instr="<table width=100% border=0 align=center cellpadding=5 cellspacing=0 bordercolor=’#'><tr><td><b>发信人:版主</b></td><td><b>收到时间:</b>"+now+"</td></tr><tr><td colspan=2><b>系统信息:</b>"+msgcontents+"</td></tr></table>"       
       parent.AddMsg(instr);
       parent.ShowMsg();
       continue;
      }
      else{
       sctext=rp2(sctext,"$systemshortmessage$warning" ,"版主向$T发出警告。内容如下:");
       sctext=rp2(sctext,"$systemshortmessage$info" ,"版主向$T发出信息。内容如下:");
       sctext=rp2(sctext,"$systemshortmessage$kick" ,"版主将$T赶出了房间。原因是:");
       system=true;
       action="〖版主工作通报〗"
      }
     }
     //系统信息的处理
     if (sctext.substring(0,12)=="$systeminfo$"){
      //alert("有系统信息到,input页面正在处理中!");
      if (sctext.indexOf("$F")>-1)
       sctext=rp2(sctext,"$systeminfo$" ,"")
      else
       sctext=rp2(sctext,"$systeminfo$" ,"$F")
      action="〖系统信息〗"
      system=true;
     }
     //如果是私聊
     if (sctext.substring(0,8)=="$secret$"){
      //alert("这是一句私聊");
       sctext=rp2(sctext,"$secret$" ,"")
       secret=true;
     }
     //对贴图的处理
     if (sctext.indexOf("[IMG]")>-1 && sctext.indexOf("[/IMG]")>-1){sctext=rp2(sctext,"[IMG]","<img src=qpic/");sctext=rp2(sctext,"[/Img]",".gif>");}
     if (sctext.indexOf("[img]")>-1 && sctext.indexOf("[/img]")>-1){sctext=rp2(sctext,"[img]","<img src=qpic/");sctext=rp2(sctext,"[/img]",".gif>");}
     if (!(sctext.indexOf("$F")>-1) && !(sctext.indexOf("$T")>-1)){//如果不是动作(有表情)
     tmpHtml="<font style=\’color:"+arycL(i).text+"\’>"+document.say.userface.options[aryE(i).text].value+rp2(sctext,"{^amp]","&")+"</font><br>";}
     else{//对动作的处理(无表情)
     tmpHtml=action+"<font style=\’color:"+arycL(i).text+"\’>"+rp2(sctext,"{^amp]","&")+"</font><br>";}
     tmpHtml=rp2(tmpHtml,"$F","<strong><a href=\"javascript:parent.parent.input.towho(‘"+aryF(i).text+"’);\">"+"<font color="+arynC(i).text+">"+aryF(i).text+"</font></a></strong>");
     tmpHtml=rp2(tmpHtml,"$T","<strong><a href=\"javascript:parent.parent.input.towho(‘"+aryT(i).text+"’);\">"+aryT(i).text+"</a></strong>");
     if ((aryF(i).text==Me || aryT(i).text==Me) && system==false)
     { parent.viewsay.my.Ly.innerHTML+=tmpHtml; }
      else
      {if (secret==false)parent.viewsay.pub.Ly.innerHTML+=tmpHtml; }
     if (aryF(i).text!=Me && aryT(i).text==Me && system==false && auto!="")
     autosend(aryF(i).text,auto);
   }// end for
   
   delete(aryF);delete(aryT);delete(arysC);delete(arycL);delete(arynC);
   delete(oDom);delete(user_change);delete(tmpHtml);delete(img);

}
function sendMsg()
{ if (this.T=="" && this.F=="") {alert("你要对谁说?");return;}
         cRld=1;
 sCtemp= this.sC;
 if (document.say.secret.value==true) sCtemp+="$secret$";
    var sS="F="+code(this.F)+"&T="+code(this.T)+"&sC="+code(sCtemp)+"&cL="+this.cL+"&E="+this.E+"&nC="+this.nC;
       sS=URLEncoding(sS)
        var oSend=new ActiveXObject("Microsoft.XMLHTTP");
        oSend.open("POST","say.asp",false);
        oSend.setRequestHeader("Content-Length",sS.length); 
        oSend.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");//没有这句就玩不转拉
        oSend.send(sS);
       var oDom=new ActiveXObject("Microsoft.XMLDOM");
        oDom.async=false;
        body=bytes2BSTR(oSend.responseBody);
        oDom.loadXML(body);
     if(oDom.parseError.errorCode != 0)
       {
  
   //4-24 18:22最新修改 当自己发言时出错
   //为了容错 小的错误不至于引起整个系统的失败
   alert("对不起,input页面->SendMsg()函数发生错误!\n\n请向我们反馈这些信息,谢谢!");
   //parent.ShowWin(300,200,"xmlparseerror.htm");
  

    //——————————————————–这段是后来加上的
 parent.store.SetLTime();//更新上次发言时间
 delete(aryF);delete(aryT);delete(arysC);delete(arycL);delete(arynC);delete(aryE);
 delete(oDom)
 delete(oSend)
 delete(tmpHtml)
    //——————————————————–这段是后来加上的

         return }
      else
   {
        outputsays(oDom);}
 parent.store.SetLTime();//更新上次发言时间
 delete(aryF);delete(aryT);delete(arysC);delete(arycL);delete(arynC);delete(aryE);
 delete(oDom)
 delete(oSend)
 delete(tmpHtml)
}
function code(Str)
{var A = new RegExp("’","gi")
var B = new RegExp("\"","gi")
Str = Str.replace(/&/gi,"&amp;")
Str = Str.replace(/</gi,"&lt;")
Str = Str.replace(/>/gi,"&gt;")
Str = Str.replace(B,"&quot;")
Str = Str.replace(/&/gi,"{^amp]")
delete(A)
delete(B)
return(Str)
}
function rp2(Str,Fs,Is)
{while (Str.indexOf(Fs)!=-1)
Str = Str.replace(Fs,Is)
delete(A);
return(Str)
}
var tCok;
cRld=-10;//预置为9,这样进入信息会比较及时的显示出来
function Clock(){
  cRld++;
  if (cRld>14){cRld=1;GetXmlData();}
  setTimeout("Clock()",1000);
}  
function GetXmlData() //这就是刷新用户XML数据的函数
{
 if (access==true){
  //alert("正在自动搜索新数据!!!");
  var oRDom=new ActiveXObject("Microsoft.XMLDOM");
     oRDom.async=false;
  var Path="reload.asp";
  oRDom.load(Path)
    if(oRDom.parseError.errorCode != 0)
      {
  
   //4-24 18:22最新修改 当搜索新数据的时候出错
   //为了容错 小的错误不至于引起整个系统的失败
   alert("对不起,input页面 GetXMLData()函数发生错误!\n\n请向我们反馈这些信息,谢谢!");
   //parent.ShowWin(300,200,"xmlparseerror.htm");

  

    //——————————————————–这段是后来加上的
   delete(ORDom);delete(Path);  
    //——————————————————–这段是后来加上的


       return }
    else
   {
       outputsays(oRDom);}
   delete(ORDom);delete(Path);  
  }
}
</script>
<body topmargin=2 leftmargin=0 onfocus="document.forms[0].says.focus()" onkeydown="javascript://if(event.keyCode==13 && event.ctrlKey){checksays();}" background="PIC/wood_main_bg.gif" >
<table height="100%" width="100%" >
  <tr>
    <td>
      <form method="post" onsubmit="return(checksays())" name="say">
        <table align="center" height="100%" width="100%" cellspacing="0">
          <tr>
            <td nowrap>
              <input name="id" type="hidden" value=0><input name="oldsays" type="hidden"><input name="oldact" type="hidden"><input name="istitle" type="hidden"><input name="oldtowho" type="hidden">你<label for="secret" title="悄悄话儿悄悄说" style="color:#F200F2">悄悄</label><input type="checkbox" id="secret" name="secret" value="True" accesskey="s" onclick="document.forms[0].says.focus();">对     <input
  type=text size=4 maxlength=10 name="T" value="大家" title="">说<input type="text" name="says" size="40" maxlength="250">
              <input type="button" name="Button" value="&lt;&lt;" onclick="javascript:saylast();" style="width:18px;"><input type="button" name="Button" value="&gt;&gt;" onclick="javascript:saynext();" style="width:18px;"><input name="subsay" type="submit" title="提交发言" value="发言" style="width:35px;"><!–
     <input name="cl" type="button" value="重置" onClick="javascript:document.forms[0].says.value=”;" style="width:35px;">–><input type="button" name="Submit2" value="清屏" onClick="javascript:parent.clearview();" style="width:35px;"><input name="cl" type="button" value="点歌" onClick="parent.ShowWin(230,400,’songlist.asp’)" style="width:35px;"><input name="yx" type="button" value="游戏" onClick="parent.ShowWin0(400,230,’play.asp’)" style="width:35px;"><input name="button" type="button" value="退出" onClick="parent.ExitNormal(”);" style="width:35px;">
          <tr>
            <td>话
              <select name="sayscolor" onchange="document.say.says.style.color=this.options[this.selectedIndex].value;GetFocus()"><script>function xx(c_code,c_name){document.write("<option style=’BACKGROUND-COLOR:"+c_code+";COLOR:"+c_code+"’ value=’"+c_code+"’>"+c_name+"</option>")}    
  function xxx(def){if (def==1){xx("#000088","深蓝");xx("#ff0000","亮红");}else{xx("#ff0000","亮红");xx("#000088","深蓝");}xx("#000000","黑色");xx("#0088ff","海蓝");xx("#0000ff","亮蓝");    
  xx("#888800","黄绿");xx("#008888","蓝绿");xx("#008800","橄榄");    
  xx("#8888ff","淡紫");xx("#aa00cc","紫色");xx("#8800ff","蓝紫");xx("#888888","灰色");    
  xx("#ccaa00","土黄");xx("#ff8800","金黄");xx("#cc3366","暗红");xx("#ff00ff","紫红");    
  xx("#ee9966","粉红");xx("#6699ee","天蓝");xx("#3366cc","蓝黑");}xxx(1);</script>    
  </select>名<select name="namecolor" id="namecolor" onchange="document.say.T.style.color=this.options[this.selectedIndex].value;GetFocus()">
<script>xxx(2);</script></select><select name="userface" onchange="GetFocus()">
<script language="Javascript">
for(var iF=0;iF<eV.length;iF+=2)
{document.writeln("<option value=\""+eV[iF]+"\">"+eV[iF+1]);
}
</script></select>    
  <select name="addsign" onchange="document.say.says.value=this.options[this.selectedIndex].value;GetFocus()"><script>    
    yy("","趣语");yy("","—-");yy("$F热情地向在场的所有人打招呼。","招呼");yy("$F留恋地说道:“世上没有不散的宴席,我先走一步了,大家保重。”","离开");    
    yy("$F口吐白沫,咕咚一声,栽倒在地。","晕倒");yy("$F心中默默念道:“由爱故生忧,由爱故生怖;若离于爱者,无忧亦无怖。”","默念");    
    yy("$F歪着头憧憬地向往:“如果不上班又有工资,又没有老板管,那不知道该有多好。”","憧憬");yy("$F俏脸生春,妙目含情,只看得大家心慌意乱。","含情");    
    yy("$F负手而立,凝望远山。只觉得天下英雄舍我其谁。","英雄");yy("$F低下头,嫣然一笑,露出颊上浅浅的梨涡,害羞地脸红了起来!","害羞");    
    yy("$F热泪盈眶地说:“好,好,好!”","同意");yy("$F自言自语道:“今儿个不知该到谁家蹭饭去了……”","蹭饭");    
    yy("$F说道:“乖乖不得了,在下的老板来了,没功夫聊了。回见!”","老板");yy("$F急得象热锅上的蚂蚁,不停地大叫:“快点!快点!怎么比猪还慢?!”","太慢");    
    yy("$F一屁股坐在地上发起呆来。","发呆");yy("$F眉开眼笑地想:人都说打是疼,骂是爱,人家会不会,这个这个……","臭美");    
    yy("$F看着大家有说有笑,转而向隅,竭力想回忆起些什么。","回想");yy("$F看着镜中日益消瘦的脸庞自怨自艾,“唉,我好命苦!”","命苦");    
    yy("$F一脸的迷茫,不知道周围发生了什么事。","迷茫");yy("","—-");yy("$F向着$T大叫:“欢迎,欢迎,热烈欢迎!”","欢迎");    
    yy("$F热情地向$T打招呼,并递上一杯香浓Coffee和一杯清香的茶,自己选哦。","饮料");yy("$F对$T举杯道:“朋友,你今天又要走,干了这杯酒!”","送别");    
    yy("$F用一根树枝捅了捅$T的鼻子:“醒醒呀,快醒醒。”","醒醒");yy("$F觉得$T妹妹真是好可爱哟!","可爱");    
    yy("$F看着$T,心想:现在的小孩真厉害……","厉害");yy("$F蹑手蹑脚地溜到$T背后,掏出一把大锤子,嘿嘿……","偷偷");    
    yy("$F对着$T狠狠的一锤当头敲下,微笑道:“$T,你给我发呆去吧!”","锤子");yy("$F从天上召来一道闪电把$T化为一堆灰烬。","灰烬");    
    yy("$F结结巴巴地跟$T道歉:“实在是对不住,我下次再也不敢了。”","道歉");yy("$F见$T不怀好意,连忙抓起电话:114,119,120,122,96315 … 心想:“警察叔叔怎么还不来呀?”","求助");    
    yy("$F和$T正邪恶地笑着,八成同时想到什么坏事头上。","坏事");yy("$F对$T小声嘀咕着:“君子报仇,十年不晚,五年后再来找你。”","报仇");    
    yy("$F看都不看$T一眼,哼了一声,高高的把头扬了起来……不理你……","不理");yy("$F看着$T偷偷直乐,幸灾乐祸地想:活该。","活该");    
    yy("$F痴痴地望着$T的身影,不禁呆了……","痴痴");yy("$F笑呵呵地对$T抱拳打揖:“久仰阁下大名,如雷灌耳,今日相见,三生有幸!”","久仰");    
    yy("$F拍了拍$T的头道:“$T乖,一会ㄦ给你买棒棒冰。”","听话");yy("$F不怀好意地绕着$T打转,嘴巴里不知在嘀咕些什么。","打转");    
    yy("$F向$T摇摇食指,“小朋友,不可以这样喔!”","不许");</script></select>
              <select name="textimg" onchange="document.say.says.value=this.options[this.selectedIndex].value;GetFocus()">
 <script language="javascript">   
  yy("","图片短语");yy("","========");  
  yy("$F拿出一张钞票,对$T说:陪我聊!![img]DONGZ/01[/img]","找人陪聊")  
  yy("$F哭着说:你可要对我负责呀!呜— [img]DONGZ/02[/img]","对我负责")  
  yy("$F大叫:气死我了!呀!呀!呀![img]DONGZ/03[/img]","气死我啦")  
  yy("$F挥舞着双拳,越战越勇[img]DONGZ/026[/img]","越战越勇") 
  yy("$F说:不行!我坚决反对![img]DONGZ/08[/img]","坚决反对") 
  yy("$F鼓掌![img]DONGZ/06[/img]","鼓掌") 
  yy("$F说:嗨!大家好!![img]DONGZ/05[/img]","嗨!你好") 
  yy("$F对$T说:让我为你高歌一曲![img]DONGZ/09[/img]","高歌一曲")
  yy("$F对$T说:不要呀![img]DONGZ/010[/img]","不要呀")
  yy("$F对$T说:让你尝尝“九阴真经”我的厉害![img]DONGZ/025[/img]","九阴真经")
  yy("$F说:我踢、我踢、我踢死你![img]DONGZ/023[/img]","我踢死你")
  yy("$F说:看我扁你![img]DONGZ/027[/img]","扁你")
  yy("$F说:抽死你![img]DONGZ/028[/img]","抽你")
  yy("$F:[img]DONGZ/031[/img]","坏笑")
  yy("$F说:放马过来!![img]DONGZ/033[/img]","放马过来")
  yy("$F抱住$T:[img]DONGZ/053[/img]","拥抱")
  yy("$F:[img]DONGZ/037[/img]","吓死你")
  yy("$F说:朋友,干杯![img]DONGZ/038[/img]","干杯")
  yy("$F捧着鲜花送给$T:[img]DONGZ/042[/img]","送玫瑰")
  yy("$F说:没搞错吧!!!![img]DONGZ/044[/img]","惊讶")
  yy("$F:[img]DONGZ/045[/img]","吞云吐雾")
  yy("$F对大家说:我们拉勾,就不许反悔了。[img]DONGZ/050[/img]","拉勾")
  yy("$F我晕!我倒![img]DONGZ/056[/img]","我倒")
  yy("$F痛痛快快拉了一泡,大叫:好爽!好爽![img]DONGZ/070[/img]","好爽")
  yy("$F吐的满地都是[img]DONGZ/086[/img]","吐吐吐")
  yy("$F说:求求您老人家了!![img]DONGZ/065[/img]","求你了")
  yy("$F说:小的一点心意,请笑纳!![img]DONGZ/061[/img]","送礼")
  yy("$F伤心的哭了起来!![img]DONGZ/069[/img]","求你了")
  yy("$F扇了$T无数个耳光!![img]DONGZ/011[/img]","扇耳光")
  yy("$F:[img]DONGZ/012[/img]","哈哈哈")
  yy("$F:我好难过啊!![img]DONGZ/013[/img]","伤心")
  yy("$F:光着身子跑了过来!![img]DONGZ/017[/img]","裸奔")
  yy("快来看$F的走光照片喽!![img]DONGZ/020[/img]","走光")
  yy("$F说:咋的了,哥们,让人煮啦?!![img]DONGZ/078[/img]","被人煮了")
  yy("$F吐着舌头?!![img]DONGZ/058[/img]","吐舌头")
  yy("$F对$T说祝:你生日快乐?!![img]DONGZ/071[/img]","生日快乐")
 </script>    
              </select>
              <select name="zt" onchange="StatSet(this)">    
<script>yy("","状态");yy("默认","恢复");yy("暂离","暂离");yy("免扰","免扰");yy("忙碌","忙碌");yy("孤独","孤独");yy("高兴","高兴");yy("烦恼","烦恼");yy("自定","自定");</script></select>    
<select name="sscr" onchange="splitscreen(this.value)">    
<script>yy("","分屏");yy("0","—-");yy("1","水平");yy("2","垂直");yy("0","不分");</script></select>
              <input accesskey="a" type="checkbox" id="as" name="as" checked onclick="parent.viewsay.pub.scrollit();parent.viewsay.my.scrollit();document.say.says.focus();">
              <label for="as" title="“激活/禁止”对话区自动滚屏(Alt+A)!" style="color:#F200F2">滚屏</label> 
              <INPUT type="button" name="Submit4" value="短信息" onclick="parent.ShowMsg()" style="width:42px;"><input type="button" name="Submit3" value="存点" onClick="" style="width:34px;"><input type="button" name="Submit3" value="帖图" onClick="ShowQpic()" style="width:34px;">
             
            </td>
          </tr></table>
      </FORM></table>
<script> 
GetXmlData();
Clock();                       
</script>       
</body></html>