﻿// JScript 文件

if(typeof(top.__setting)!="object") 
{ 
    top.__setting = {};
    top.__setting._values = new Array();
    top.__setting.getValue = function(AName, ADefault) { var v =this._values[AName]; if (! v) v = ADefault; return v;}
    top.__setting.setValue = function(AName, AValue) { this._values[AName] = AValue;}
    top.__setting.initValue = function(AName, AValue) {if (! this._values[AName]) this._values[AName] = AValue;}
};
var _setting = top.__setting;

var AllIMDlgs=_setting.getValue("All_IM_Dlg_Array",null);
if (AllIMDlgs==null)
{
    AllIMDlgs={};
    _setting.setValue("All_IM_Dlg_Array",AllIMDlgs);
}

var AllIMMsgSequence=_setting.getValue("All_IM_Msg_Sequence",null);
if (AllIMMsgSequence==null)
{
    AllIMMsgSequence={};
    _setting.setValue("All_IM_Msg_Sequence",AllIMMsgSequence);
}

var AllIMTalkMembers=_setting.getValue("All_IM_Talk_Members",null);
if (AllIMTalkMembers==null)
{
    AllIMTalkMembers={};
    _setting.setValue("All_IM_Talk_Members",AllIMTalkMembers);
}

var MMConfig = _setting.getValue("MessageManage_Config", null);
if (MMConfig == null)
{
    MMConfig = {};
    _setting.setValue("MessageManage_Config", MMConfig);

    MMConfig.LastRecvMsgID = 0;    //上次最后获取的消息的ＩＤ
    MMConfig.NeedRecvMsg = true;   //是否需要立即获得消息（上次消息获取是否成功）
    MMConfig.CurTimeCount = 0;     //消息延时累加器
    MMConfig.MaxTimeCount = 10;    //消息延时上界
    MMConfig.TimeStep = 5000;      //消息间隔
    MMConfig.TryGetMessageEnable = true;
    MMConfig.InitLoaded = false;
    MMConfig.StrongOpen = true;
    MMConfig.SetFocuse = true;
}

function InitPersonalManage(lrmID)
{
}

function InitPersonalManage2(userid, lrmID)
{
    if (userid == 0) return;
    
    top.currentUserID = userid;
    if (MMConfig.LastRecvMsgID > 0) return;
    
    MMConfig.LastRecvMsgID=lrmID;
    if (MMConfig.LastRecvMsgID==0){
        QDOA.Chat.QdChatManageAjax.GetInitPersonalManage(GetInitPersonalManageReturn);
       // alert('11if');
    }
    else{
        //alert('11else');
        MMConfig.InitLoaded=true;
    }
//   setTimeout("TryGetPersonalMessage()",10000);
}

function SetMessageInterval(aSecond)
{
    MMConfig.TimeStep = aSecond * 1000;
}

function GetInitPersonalManageReturn(r)
{
    //alert('GetInitPersonalManageReturn');
     var tempID=0;
     if (r&&r.value&&r.value!=null)
     {
	     tempID = parseInt(r.value,10);
	     if (tempID>0) MMConfig.LastRecvMsgID=tempID;
	 }
	 MMConfig.InitLoaded=true;
}

function TryGetPersonalMessage()
{ 
    //alert('111');
	 if(MMConfig.InitLoaded&&(MMConfig.NeedRecvMsg || MMConfig.CurTimeCount>=MMConfig.MaxTimeCount))
	 {
	        MMConfig.NeedRecvMsg = false;
	        MMConfig.CurTimeCount = 0;
	        QDOA.Chat.QdChatManageAjax.GetPersonalMessage(MMConfig.LastRecvMsgID,GetPersonalMessageReturn);
	       //alert('111if');
	 }
	 else
	 {
	        MMConfig.CurTimeCount +=1;
	        //alert('111else');
	 }	    
	 if (MMConfig.TryGetMessageEnable){
	     setTimeout("TryGetPersonalMessage()", MMConfig.TimeStep);	    
	    //alert('111settimeout');
	 }
}

        /// 消息协议
        /// 第一位:发送是否成功 1表示接收消息成功 0表示无新消息 -1表示Session丢失 其它表示消息接收失败
        /// 第二位:最大的消息ID
        /// 消息内容
        /// ----------------------------------------------------------------
        /// 第0位:消息ID                                                    |
        /// 第1位:消息窗口ID                                                |        
        /// 第2位:消息内容类型 普通消息/图片消息/发送文件消息/事件消息      |  0表示普通消息; 1表示图片消息; 2表示发送文件消息;负数表示事件消息,-1表示添加用户,-2表示用户退出
        /// 第3位:消息发送类型 系统消息/个人消息/会议室消息                 | -1表示系统消息; 0表示个人消息; i,大于1 表示ID为i的会议室的消息;-200系统通知消息;-201全系统的消息;
        /// 第4位:发信人                                                    |
        /// 第5位:消息发送时间                                              |
        /// 第6位:消息文本                                                  |    
        /// 第7位:消息HTML                                                  |
        /// 第8位:事件内容                                                  |
        /// 第9位:参加聊天的人的字符串                                      |
/// ----------------------------------------------------------------

//-------------消息接收器--------------------
//模拟委托，在来消息的时候触发绑定的事件方法。如：在线坐诊页面，来消息时需要把用户放入头像列表,而其他页面则不需要
function MsgReceiver()
{
    this.NotifyArray = new Array();
}
MsgReceiver.prototype = 
{
    Add : function(NotifyObject,MethodName)
    {
        this.NotifyArray[this.NotifyArray.length] = function()
        {
            MethodName.apply(NotifyObject, arguments);
        };
    }
    ,Delete : function(index)
    {
        this.NotifyArray.splice(index, 1);
    }
    , MsgComing: function()
    {
        for (var i = 0; i < this.NotifyArray.length; )
            this.NotifyArray[i++].apply(null, arguments);
    }
}
//-------------------------------------------

function AddUserNotify(aReloadIfNew)
{
    this.ReloadIfNew = aReloadIfNew;
}
AddUserNotify.prototype.DoNotify =function()
{
    //添加IM用户信息
    AddIdNickStatus(arguments[0], this.ReloadIfNew);
}
//绑定添加用户信息事件
var tempAddUserNotify = new AddUserNotify(false);
var GlobalMsgReceiver = new MsgReceiver();
GlobalMsgReceiver.Add(tempAddUserNotify, tempAddUserNotify.DoNotify);

function GetPersonalMessageReturn(r)
{
//alert('GetPersonalMessageReturn');
//alert(r.value);
    //如果返回值为空或空串，不符合协议，直接返回。延时（MMConfig.MaxTimeCount 秒）后将再次发出申请。
    if(!r||r==null||r.value==null)
        return;

    //大类用char(29)隔开        
    var PMsgArray = r.value.split("\x1D");
    
    if (PMsgArray.length<=0) return;
    
    if (PMsgArray[0]!='-1' && PMsgArray[0]!='1')
    {
        //如果返回值第一位是0，表示没有新的消息
        if (PMsgArray[0]=='0')
        {
            MMConfig.NeedRecvMsg=true;     
        }    
        //如果返回值第一位是0，-1，1之外的其它值，说明接收错误，直接返回（等待延时）
        return;    
    }
    
    if (PMsgArray.length<2) return;    
    //如果返回值第一位是-1 表示Session丢失,跳到登陆页面
    if (PMsgArray[0]=='-1')
    {
        MMConfig.TryGetMessageEnable=false;
        top.document.location.href = PMsgArray[1];
        return;
    }
    
    //从这里开始进入正常接收流程   
    if (PMsgArray[0]=='0') return;
    
    var PMsgMaxID =0;
    
    var id = 0;
    
    try
    {
        MMConfig.NeedRecvMsg=true;
        PMsgMaxID = parseInt(PMsgArray[1],10);
        if (PMsgMaxID<=MMConfig.LastRecvMsgID) return;
        for (var i=PMsgArray.length-1;i>1;i--)
        {
            if (PMsgArray[i]&&PMsgArray[i]!="")
            {    
                //分析每条消息
                var PMsgFiledArray=PMsgArray[i].split("\x1C");
                var tempMsgID=parseInt(PMsgFiledArray[0],10);
                if (tempMsgID>MMConfig.LastRecvMsgID)
                {
                    //添加IM用户信息
                    //                    AddIdNickStatus(PMsgFiledArray[4], false);

                    //消息接收器
                    GlobalMsgReceiver.MsgComing(PMsgFiledArray[4]);
                   
                    
                    //显示聊天消息
                     id = PMsgFiledArray[1];
                     
                     if (PMsgFiledArray[1]==PMsgFiledArray[3])
                     {
                   
                        if(PMsgFiledArray[2]=="-301")
                        {
                            ReloadMembers(id);
                        }
                        else
                        {     
                            
                             
                            if(PMsgFiledArray[2]=="-400"||PMsgFiledArray[2]=="-401" || PMsgFiledArray[2]=="-402"||PMsgFiledArray[2]=="-403"||PMsgFiledArray[2]=="-404")
                            {
                                var topFrame = document.frames ? parent.document.frames['ChatFrame' + id] : parent.document.getElementById('ChatFrame' + id).contentWindow;
                                if (CheckChatRoomExist(id) && topFrame.isLoaded)  
                                {
                                   OpenChatRoomWindow(id,true);//true表示非消息弹出 
                                   AllIMMsgSequence[id].push(PMsgFiledArray);               
                                   transferMessageNew(id, PMsgFiledArray[0]); 
                                    
                                                                        
                                   
                                   var dlg = topFrame.Msg_DlgObj;            
                                   if(PMsgFiledArray[2]=="-400")
                                   {
                                       if(PMsgFiledArray[8])
                                       {
                                           var value = PMsgFiledArray[8].split('~');
                                           dlg.EditMeeting(value[0],value[1]);      
                                       }
                                   }
                                   else if(PMsgFiledArray[2]=="-401")
                                   {
                                       dlg.MeetingInfoZhuangTai.innerHTML = "状态;进行中";
                                       dlg.state = 1;
                                   }
                                   else if(PMsgFiledArray[2]=="-402")
                                   {
                                       dlg.MeetingInfoZhuangTai.innerHTML = "状态;暂停中";
                                       dlg.state = 3;
                                   }
                                   else if(PMsgFiledArray[2]=="-403")
                                   {
                                       dlg.MeetingInfoZhuangTai.innerHTML = "状态;已结束";
                                       dlg.state = 2;
                                   }
                                   else if(PMsgFiledArray[2]=="-404")
                                   {                                        
                                       dlg.MeetingInfoZhaoJi.innerHTML = "召集人:"+PMsgFiledArray[8];                                        
                                   }
                                }
                              }
                              else
                              {
                                OpenChatRoomWindow(id,true);//true表示非消息弹出
                                AllIMMsgSequence[id].push(PMsgFiledArray);
                                transferMessageNew(id, PMsgFiledArray[0]); 
                              }                              
                          }
                       }
                     else
                     {
                         if (PMsgFiledArray[2]=="-99" || PMsgFiledArray[2]=="-100") 
                         {
                            ChangeDlgId(id,PMsgFiledArray[8])
                            id=PMsgFiledArray[8];
                            
                            if(!AllIMTalkMembers[id])
                            {                            
                                AllIMTalkMembers[id]=new TalkMembers();
                                AllIMTalkMembers[id].TalkMembersInit(PMsgFiledArray[9]);
                                //AllIMTalkMembers[id].MyMembers=PMsgFiledArray[9].split("_");
                            }
                            if(!AllIMMsgSequence[id])
                            {                            
                                AllIMMsgSequence[id]=[];                            
                            }                        
                            
                            if(PMsgFiledArray[2]=="-100")
                            {
                                if (AllIMDlgs[id])
                                {
                                    AllIMDlgs[id].delAMember(PMsgFiledArray[4]);
                                }                            
                                AllIMTalkMembers[PMsgFiledArray[8]].delAMember(PMsgFiledArray[4]);            
                            }
                            else
                            {                        
                                AllIMTalkMembers[id].MyMembers=PMsgFiledArray[9].split("_");
                                if (AllIMDlgs[id])
                                {
                                    AllIMDlgs[id].updateMembers(AllIMTalkMembers[id].MyMembers);
                                } 
                            }
                            OpenChatWindowAndTransferMessage(id,PMsgFiledArray,PMsgArray[i],false,false);
                            
    //                        if (OpenChatWindowWeak(id,PMsgFiledArray[9],false)==0)    	            
    //    	                    transferMessageNew(id, PMsgArray[i]);                                                 
                         }
                         else
                         {
                            if (PMsgFiledArray[3]=="-200"||PMsgFiledArray[3]=="-201") 
                            {                                
//                                if(PMsgFiledArray[2]=="-405" )
//                                {
//                                    var value=PMsgFiledArray[8];
//                                    if (CheckChatRoomExist(value)&&parent.frames['ChatFrame'+value].isLoaded)  
//                                    {
//                                        alert("添加管理版面");
//                                    }
//                                }
                                OpenSysWindow(PMsgFiledArray,PMsgArray[i]);
                            }
                            else
                            {
//                                来消息，不激活
                                var setFocus = false;

                                OpenChatWindowAndTransferMessage(id, PMsgFiledArray, PMsgArray[i], setFocus, MMConfig.StrongOpen);
                            }
                            //OpenChatWindow(id,PMsgFiledArray[9],false);        	            
    	                    //transferMessageNew(id, PMsgArray[i]);                     
                        }   
                   } 	                
                }
            }
        }
        MMConfig.LastRecvMsgID = PMsgMaxID;
        //通知用户
        Notify(PMsgFiledArray[4]);

        //增加访问量信息
        if (Project && Project.UserStatisticsAjax)
            Project.UserStatisticsAjax.QueryIMUser(PMsgFiledArray[4]);
    }
    catch(e)
    {
        //alert(e);
        return;
    }
}

var titleIntv;
var noSeeUserList = "";
var oldTitle = document.title;
var unread = false;
window.onfocus = function()
{
    //    alert("1");
    clearShanshuo();
}
window.onclick = function()
{
    clearShanshuo();
}
function clearShanshuo()
{
    if (unread)
    {
        document.title = oldTitle;
        clearInterval(titleIntv);
        noSeeUserList = "";
        unread = false;
    }
}
//来消息通知用户
function Notify(toUserID)
{
//    try
//    {
//        //winform方式
//        window.external.MessageComing(0);
////        alert("winform");
//    }
//    catch (e)
//    {
    //浏览器方式
        
        
    //激活浏览器
    if (window.document.hasFocus && !window.document.hasFocus())
    {
        //            alert("focus");
        if (noSeeUserList.indexOf("“" + AllUserArray[toUserID].NickName + "”", 0) < 0)
            noSeeUserList += "“" + AllUserArray[toUserID].NickName + "”";
        var not = noSeeUserList + "发来消息";
        var titles = ["◆消息通知◆", "◇消息通知◇"];
        var index = 0;
        clearInterval(titleIntv);
        titleIntv = setInterval(function() { document.title = titles[index] + not; index++; if (index > 1) index = 0; }, 300);
        unread = true;
    }
        // by swg, 2007-9-7: 播放消息声音
        var sndElement = top.document.getElementById("ChatRoomMessageSound");
        if (sndElement)
        {
            //            alert("sound");
            sndElement.src = "NewIMFrame/sound/CONTACT.WAV";
        }
        
//        alert("broswer");
        //    }
       
    }


