http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
指路网 IM
< language="javascript" src="lib/jquery.js">
< language="javascript" src="lib/util.js">
< language="javascript" src="lib/ajax-pushlet-client.js">
< language="javascript" >
var contents =new Array();//内容数组,二维。
var senders_array=new Array();
var currentAccountID=null;
var interval=new Array(); //定时闪烁用
var goodsID=new Array();
var fromID=null;
var msg_loaded=new Array(); //ajax的消息是否读取到
var msg_load_times=50;//加载次数限制。一次是100毫秒
var msg_load_timeout=null;//读取消息的settimeout
var goodsUrlPrefix="http://192.168.3.242:8080/c2cweb/shop/";//实际上线后需要手动更改
$(function(){
var p1=getPageParameter('senders', '');
var p2=getPageParameter('user','');
var en=getPageParameter('en','');
if(unicode(p1+'_'+p2)==en){
init(p1,p2);
}
else
{
alert('参数错误,请返回原地址重新请求!');
}
});
function init(senders,user)
{
currentAccountID=user;
goodsID[0]=getPageParameter('goodsID','');
fromID=goodsID[0];
if(senders && senders!='')
{
senders_array=senders.split(',');
create_chattab();
for(var i=0;i {
contents[i]=new Array();
//读取session 获取未读信息放入array。
msg_loaded[i]=false;
fill_contentsArray(i);
}
}
//启动聊天
enterChat(currentAccountID);
//绑定快捷键
bind_quick_key();
//关闭窗口时出发事件
$(window).unload(function(){leaveChat();});
//window.attachEvent('onunload',function(){leaveChat();});
//执行ajax_loaded后的事件。
do_loaded();
}
function do_loaded()
{
if(msg_loaded&&msg_loaded[0]==true)
{
fill_contentsHTML(0);
display_goods_info(0);
}
else if(msg_load_times>0)
{
msg_load_times--;
if(msg_load_timeout!=null)
clearTimeout(msg_load_timeout);
msg_load_timeout=setTimeout(function(){do_loaded();},50);
}
}
//创建各个聊天窗口
function create_chattab(senders)
{
var sa=senders_array;
var chatwin_tab=$('#chatwin_tab');
for(var i=0;i {
var maimai="买家";
if(goodsID[0]!='')
maimai="卖家";
var tabhtml="
- "+maimai+":"+sa[i]+" ";
- "+msgobj.sender+":("+msgobj.time+")
- "+content+" ";
- 卖家:"+sender+" ";
chatwin_tab.append(tabhtml);
}
//设置第一个为默认。
chatwin_tab.children().first().addClass("now");
}
function fill_contentsArray(contentsindex)
{
var sender=senders_array[contentsindex];
//$.get("msg?type=put&key="+sender+"&content=aaaaaaaa&sender=s&receiver=r&fromID=1&seller=s");
$.ajax({
type: "GET",
url: "msg",
data: "type=get&key="+sender,
success: function(msg){
msg_loaded[contentsindex]=true;//设置已经读取成功
if(msg&&msg!=null&&msg!=''){
var lists=jQuery.parseJSON(msg);
for(var i=0;i {
lists[i].content=decodeURI(lists[i].content);
contents[contentsindex][i]=lists[i];
//有的情况下才赋值。
if(lists[i].fromID)
goodsID[contentsindex]=lists[i].fromID;
}
}
},
error: function(msg){ msg_loaded[contentsindex]=true;}
});
/* var msgs=eval("[{'content':'aa"+contentsindex+"','fromID':'1','receiver':'1','sender':'1','time':'2011 06 20 17 57 46'},{'content':'aa','fromID':'1','receiver':'1','sender':'1','time':'2011 06 20 17 58 32'},{'content':'aa','fromID':'1','receiver':'1','sender':'1','time':'2011 06 20 17 58 33'}]");
for(var i=0;i {
contents[contentsindex][i]=msgs[i];
}
*/
}
//根据array填充div html
function fill_contentsHTML(contentsindex)
{
clear_chatcontent();
if(contents.length>0&&contents[contentsindex] && contents[contentsindex].length>0){
for(var j=0;j append_chatcontent(contents[contentsindex][j]);
}
}
}
//给内容div添加聊天内容
function append_chatcontent(msgobj)
{
var className='buyer-c';
if(msgobj &&msgobj.seller==currentAccountID)
className='seller-c';
var content=decodeURI(msgobj.content);
var ptn=/http:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/g;
var result=ptn.exec(content);
if(result && result[0])
content=content.replace(result[0],''+result[0]+'');
var contenthtml="
var chat_content=$('#chat_content');
chat_content.append(contenthtml);
}
function clear_chatcontent()
{
var chat_content=$('#chat_content');
chat_content.html("");
}
function change_sender(index)
{
var chatwin_tab=$('#chatwin_tab');
chatwin_tab.find("li").removeClass();
$("#tab_"+index).addClass("now");
//create_chatcontent(sender);
fill_contentsHTML(index);
for(var i=0;i {
if(interval[i]!=null){
clearInterval(interval[i]);
interval[i]=null;
}
}
document.title='';
display_goods_info(index);
}
function display_goods_info(index)
{
if(goodsID[index])
{
//这里执行调用右侧商品和订单显示。
//$('#txtgoodsname').html("传入商品ID为:"+goodsID[index]);
if(!fromID)
$("#iframe").attr("src",goodsUrlPrefix+"getSellerWebIm.action?goodsID="+goodsID[index]);
else
$("#iframe").attr("src",goodsUrlPrefix+"getBuyerWebIm.action?goodsID="+goodsID[index]);
}
}
function senders_exists(sender)
{
for(var i=0;i {
if(senders_array[i]!=null && senders_array[i]==sender)
return true;
}
return false;
}
function senders_index(sender)
{
for(var i=0;i {
if(senders_array[i]!=null && senders_array[i]==sender)
return i;
}
return -1;
}
function close_sender(index,sender)
{
//var chatwin_tab=$('#chatwin_tab');
//chatwin_tab.remove('#tab_'+index);
$('#tab_'+index).remove();
contents[index]=null;
senders_array[index]=null;
goodsID[index]=null;
if(contents.length>0)
{
fill_contentsHTML(0);
$("#tab_0").addClass("now");
}
}
function enterChat(currentAccountID){ p_join_listen(currentAccountID);}
function onJoinAck(event) {}
function onData(event) {
var action = event.get('action');
var receiver=event.get('receiver');
if (action == 'send' && receiver==currentAccountID)
{
var msg=event.get('msg');
var sender=event.get('sender');
var fromID=event.get('fromID');
if(msg!=null && msg!="" && sender!=null && sender!="")
{
var index=senders_index(sender);
if(index==-1)
{
var chatwin_tab=$('#chatwin_tab');
var i=chatwin_tab.find("li").length;
chatwin_tab.find("li").attr('class','');
var tabhtml="
chatwin_tab.append(tabhtml);
contents[i]=new Array();
senders_array[i]=sender;
var msgobj=new Object();
msgobj.sender=sender;
msgobj.receiver=receiver;
msgobj.content=decodeURI(msg).replace(/\&/g,'&');
msgobj.time=getdate();
msgobj.fromID=fromID;
contents[i][0]=msgobj;
goodsID[i]=fromID;
//没有其他任何窗口的情况下直接显示内容。
if(i==0){
append_chatcontent(msgobj);
$("#tab_0").attr('class',"now");
}
}
else if(index>-1){
//fill_contentsArray(index);
var i=contents[index].length;
var msgobj=new Object();
msgobj.sender=sender;
msgobj.receiver=receiver;
msgobj.content=decodeURI(msg).replace(/\&/g,'&');
msgobj.time=getdate();
msgobj.fromID=fromID;
contents[index][i]=msgobj;
goodsID[index]=fromID;
//fill_contentsHTML(index);
if($("#tab_"+index).attr('class')=='now')
{
append_chatcontent(msgobj);
}
else
{
if(interval[index])
clearInterval(interval[index]);
interval[index]=window.setInterval(function(){flashtab(index);}, 600);
}
}
}
}
else if(action == 'exit')
{
var index= jQuery.inArray(event.get('sender'), senders_array);
if(index>-1)
{
var i=contents[index].length;
var msgobj=new Object();
msgobj.sender=event.get('sender');
msgobj.receiver=currentAccountID;
msgobj.content=' 系统消息:'+msgobj.sender+'关闭了聊天窗口!';
msgobj.time=getdate();
contents[index][i]=msgobj;
if($("#tab_"+index).attr('class')=='now')
{
append_chatcontent(msgobj);
}
else
{
if(interval[index])
clearInterval(interval[index]);
interval[index]=window.setInterval(function(){flashtab(index);}, 600);
}
}
}
scrolldown();
}
function flashtab(index)
{
if($("#tab_"+index).attr('class')=='')
$("#tab_"+index).attr('class','flash');
else
$("#tab_"+index).attr('class','');
if(document.title=='')
document.title='您有新消息未读取!';
else
document.title='';
}
function leaveChat(){
try{
for(var i=0;i if(senders_array[i])
p_publish(senders_array[i], 'action', 'exit', 'sender', currentAccountID);
}
p_leave();
}
catch(e){}
}
function onNack(event) {
alert('negative response from server: ' + event.getEvent() + ' reason: ' + event.get('p_reason'));
}
function sendmsg(obj)
{
var sender=find_current_sender();
if(sender==null)
alert('请选择需要发送的对象!');
else{
//.replace(/<\/?[^>]*>/g,'')
var s=encodeURI(DBC2SBC(obj.val().replace(/<\/?[^>]*>/g,'').replace(/\n/g,'
'),0));
if(s&&obj.val().length<200){
p_publish(sender, 'action', 'send', 'sender', currentAccountID, 'msg',s,'receiver',sender);
obj.val("");
var msgobj=new Object();
msgobj.sender=currentAccountID;
msgobj.receiver=sender;
msgobj.content=s;
msgobj.time=getdate();
if(fromID)
msgobj.fromID=fromID;
var current_content=contents[senders_index(sender)];
current_content[current_content.length]=msgobj;
append_chatcontent(msgobj);
obj.focus();
scrolldown();
}
else
{alert('字符不能为空或者超过200字!');}
}
}
function DBC2SBC(str,flag) {
var i;
var result='';
if (str.length<=0) {return "";}
var strs=str.split("");
for(i=0;i {
if(/[\^\'\,\;\$\x22\!\(\)\[\]\"\|\#\&\%\+]+/.test(strs[i])){
str1=str.charCodeAt(i);
if(str1<125&&!flag)
result+=String.fromCharCode(str.charCodeAt(i)+65248);
else
result+=String.fromCharCode(str.charCodeAt(i)-65248);
}
else
result+=strs[i];
}
return result;
}
function find_current_sender()
{
var current_sender=null;
var chatwin_tab=$('#chatwin_tab');
var lis=chatwin_tab.find("li");
for(var i=0;i {
if( lis.eq(i).attr('class')=='now')
{
var index=lis.eq(i).attr('id').replace('tab_','');
return senders_array[index];
}
}
return current_sender;
}
function bind_quick_key(){
jQuery(document).keypress(function(e){
if(e.ctrlKey && e.which == 13 || e.which == 10) {
sendmsg($('#txtmsg'))
} else if (e.shiftKey && e.which==13 || e.which == 10) {
sendmsg($('#txtmsg'))
}
});
}
function scrolldown()
{
//移动滚动条到底部
var h=document.getElementById("chatDiv");
h.scrollTop=h.scrollHeight;
}
没有评论:
发表评论