1 linha
24 KiB
JavaScript
1 linha
24 KiB
JavaScript
AjaxIM=function(b,d){if(this instanceof AjaxIM){var a=this;var c={pollServer:"",theme:"themes/default"};this.settings=$.extend(c,b);this.actions=$.extend({noop:this.settings.pollServer+"/app/noop",listen:this.settings.pollServer+"/app/listen",send:this.settings.pollServer+"/app/message",status:this.settings.pollServer+"/app/status",signoff:this.settings.pollServer+"/app/signoff"},d);a.socket=null;$.getScript(this.settings.pollServer+"/socket.io/socket.io.js",function(){a.socket=io(a.settings.pollServer);a.socket.on("client",function(f){f=$.extend(true,{},f);a.dispatchEvent(f)});var e={type:"hello",from:this.username,sessionID:cookies.get("sessionid")};a.sendEvent(e)});this.themeLoaded=false;if(this.settings.theme){if(typeof document.createStyleSheet=="function"){document.createStyleSheet(this.settings.theme+"/theme.css")}else{$("body").append('<link rel="stylesheet" href="'+this.settings.theme+'/theme.css" />')}$("<div>").appendTo("body").load(this.settings.theme+"/theme.html #imjs-bar, .imjs-tooltip",function(){a.themeLoaded=true;a.setup()})}else{this.themeLoaded=true;this.setup()}$(document).on("click",".imjs-chatbox",function(f){f.preventDefault();return false});$(document).on("click",".imjs-chatbox .imjs-minimize",function(){$(this).parents(".imjs-selected").click()});$(document).on("keydown",".imjs-chatbox .imjs-input",function(e){var f=$(this);if(e.keyCode==13){a.send(f.parents(".imjs-chatbox").data("username"),f.val())}}).on("keyup",".imjs-chatbox .imjs-input",function(e){if(e.keyCode==13){if(false){var f=$(this);a.send(f.parents(".imjs-chatbox").data("username"),f.val())}var f=$(this);f.val("");f.height(f.data("height"))}}).on("keypress",".imjs-chatbox .imjs-input",function(g){var f=$(this);f.height(0);if(true){f.height(0)}if(this.scrollHeight>f.height()||this.scrollHeight<f.height()){f.height(this.scrollHeight)}});$(document).on("click",".imjs-msglog",function(){var e=$(this).parents(".imjs-chatbox");e.find(".imjs-input").focus()});$(document).on("click",".imjs-friend",function(){var e=a._createChatbox($(this).data("friend"));if(e.parents(".imjs-tab").data("state")!="active"){e.parents(".imjs-tab").click();store.set(a.username+"-activeTab",$(this).data("friend"))}e.find(".imjs-input").focus();if(!(input=e.find(".imjs-input")).data("height")){if(!input.height()){input.height(16)}input.data("height",input.height())}});$(".imjs-scroll").css("display","none");$(document).on("click","#imjs-scroll-right",function(){var e=$(this).prevAll("#imjs-bar li.imjs-tab:hidden").filter(function(){return($(this).data("state")!="closed"&&$(this).prev("#imjs-bar li.imjs-tab:visible").length)}).not(".imjs-default").slice(-1).css("display","");if(e.length){$("#imjs-bar li.imjs-tab:visible").eq(0).css("display","none");$(this).html(parseInt($(this).html())-1);$("#imjs-scroll-left").html(parseInt($("#imjs-scroll-left").html())+1)}return false});$(document).on("click","#imjs-scroll-left",function(){var e=$(this).nextAll("#imjs-bar li.imjs-tab:hidden").filter(function(){return($(this).data("state")!="closed"&&$(this).next("#imjs-bar li.imjs-tab:visible").length)}).not(".imjs-default").slice(-1).css("display","");if(e.length){$("#imjs-bar li.imjs-tab:visible").slice(-1).css("display","none");$(this).html(parseInt($(this).html())-1);$("#imjs-scroll-right").html(parseInt($("#imjs-scroll-right").html())+1)}return false});$(document).on("click","#imjs-status-panel .imjs-button",function(){var e=this.id.split("-")[2];$("#imjs-away-message-text, #imjs-away-message-text-arrow").animate({opacity:(e=="away"?"show":"hide"),height:(e=="away"?"show":"hide")},50);$("#imjs-status-panel .imjs-button").removeClass("imjs-toggled");$(this).addClass("imjs-toggled");if(a.current_status[0]=="away"){a._last_status_message=$("#imjs-away-message-text").val()}$("#imjs-away-message-text").val(e=="away"?a._last_status_message||AjaxIM.l10n.defaultAway:"");a.status(e,$("#imjs-away-message-text").val());return false});$(document).on("keyup","#imjs-away-message-text",(function(){var e=null;return function(){if(e){clearTimeout(e)}e=setTimeout(function(){a._last_status_message=a.current_status[1]=$("#imjs-away-message-text").addClass("imjs-loading").val();a.status.apply(a,a.current_status)},250)}})());$(this).bind("changeStatusSuccessful changeStatusFailed",function(){$("#imjs-away-message-text").removeClass("imjs-loading")});$(document).on("click","#imjs-reconnect",function(){a.offline=false;store.remove(a.username+"-offline");$("#imjs-reconnect").hide();$(".imjs-input").attr("disabled",false);$("#imjs-status-panel .imjs-button").removeClass("imjs-toggled");$("#imjs-button-available").addClass("imjs-toggled");$(a.statuses).each(function(){$("#imjs-friends").removeClass("imjs-"+this)});$("#imjs-friends").addClass("imjs-available");$("#imjs-away-message-text, #imjs-away-message-text-arrow").css("display","none");a.current_status=["available",""];store.set(a.username+"-status",["available",""]);a.status("available","");a.storage();a.listen()});this.chats={};$(window).resize(function(){try{a._scrollers()}catch(f){}});this.onEvent("hello",this.onHello);this.onEvent("message",this.onMessage);this.onEvent("status",this.onStatus);this.onEvent("notice",this.onNotice);this.onEvent("goodbye",this.onGoodbye)}else{return AjaxIM.init(b)}};$.extend(AjaxIM.prototype,{setup:function(){var a=this;$(this).trigger("loadComplete");$(".imjs-scroll").css("display","none");this.initTabBar();this._scrollers();this.username=store.get("user");this._lastReconnect=0;if(this.username&&store.get(this.username+"-offline")==true){this.offline=true;setTimeout(function(){a._showReconnect()},0);return}if(this.username){this.storage()}setTimeout(function(){if(!a.socket){a.listen()}},2000)},storage:function(){var d=this,b=store.get(this.username+"-chats"),f=store.get(this.username+"-friends"),c=store.get(this.username+"-status")||["available",""];this.chatstore=b||{};this.friends={};this.current_status=c;if(f){$.each(f,function(h,i){d.addFriend(h,i.status,i.group)});$("#imjs-friends").removeClass("imjs-not-connected").addClass("imjs-"+c[0]);$("#imjs-button-"+c[0]).addClass("imjs-toggled");if(c[0]=="away"){setTimeout(function(){$("#imjs-away-message-text, #imjs-away-message-text-arrow").show()},250);$("#imjs-away-message-text").val(this.current_status[1])}}$.each(this.chatstore,function(k,i){if(!i.length){return}var h=d._createChatbox(k,true),j=h.find(".imjs-msglog").empty();h.data("lastDateStamp",null).css("display","none");if(typeof i=="string"){i=d.chatstore[k]=JSON.parse(i)}j.html(i.join(""));$(d).trigger("chatRestored",[k,h])});var a=store.get(this.username+"-activeTab");if(a&&a in this.chats){this.chats[a].parents(".imjs-tab").click();var e=this.chats[a].find(".imjs-msglog");e[0].scrollTop=e[0].scrollHeight}var g=$("#imjs-friends-panel .imjs-header");g.html(g.html().replace("{username}",this.username))},_clearSession:function(){var a=store.get("user");$.each(["friends","activeTab","chats","status","connected"],function(c,b){store.remove(a+"-"+b)});store.set("user","");this.chats={};this.friends={};this.chatstore={};this.current_status=["available",""];$(".imjs-tab").not(".imjs-tab.imjs-default").remove();$(".imjs-friend-group").not(".imjs-friend-group.imjs-default").remove();delete this.username},listen:function(){if(this.offline){return}var a=this;AjaxIM.get(this.actions.listen,{},function(b){if($.isArray(b)){$.each(b,function(c,d){a._parseMessage(d)})}else{if($.isPlainObject(b)){a._parseMessage(b)}}if(!a.socket){setTimeout(function(){a.listen()},0)}},function(b){a._notConnected();$(a).trigger("pollFailed",["not connected"]);a._reconnectIn=(a._lastReconnect<(new Date())-60000)?1000:Math.min(a._reconnectIn*2,16000);a._lastReconnect=new Date();if(!a.socket){setTimeout(function(){a.listen()},a._reconnectIn)}},this.actions.noop)},_parseMessage:function(a){this.triggerEvent(a)},onHello:function(b){var a=this;this._clearSession();this.username=b.username;this.current_status=["available",""];store.set("user",b.username);store.set(this.username+"-status",this.current_status);$("#imjs-friends").attr("class","imjs-available");$.each(b.friends,function(){var d;if(this.length==2){d=this}else{d=[this.toString(),["offline",""]]}a.addFriend(d[0],d[1],"Friends")});store.set(this.username+"-friends",this.friends);var c=$("#imjs-friends-panel .imjs-header");c.html(c.html().replace("{username}",this.username));$("#imjs-away-message-text, #imjs-away-message-text-arrow").hide();$("#imjs-status-panel .imjs-button").removeClass("imjs-toggled");$("#imjs-button-available").addClass("imjs-toggled")},onMessage:function(a){this.incoming(a.from,a.body)},onStatus:function(a){this._friendUpdate(a.from,a.status,a.message);this._storeFriends()},onNotice:function(a){},onGoodbye:function(a){this._notConnected()},incoming:function(d,c){var a=this._createChatbox(d),b=a.parents(".imjs-tab");if(!$("#imjs-bar .imjs-selected").length){b.click()}else{if(b.data("state")!="active"){this.notification(b)}}this._store(d,this._addMessage("b",a,d,c))},addFriend:function(h,c,g){var f="imjs-group-"+md5.hex(g);if(!(d=$("#"+f)).length){var d=$(".imjs-friend-group.imjs-default").clone().removeClass("imjs-default").attr("id",f).data("group",g).appendTo("#imjs-friends-list");var e=d.find(".imjs-friend-group-header");e.html(e.html().replace("{group}",g))}var b="imjs-friend-"+md5.hex(h+g);if(!$("#"+b).length){var a=d.find("ul li.imjs-default").clone().removeClass("imjs-default").addClass("imjs-"+c[0]).attr("id",b).data("friend",h).appendTo(d.find("ul"));a.html(a.html().replace("{username}",h).replace("{status}",c[1]));a.find(".imjs-friend-status").attr("title",c[1])}this.friends[h]={status:c,group:g};this._updateFriendCount();return this.friends[h]},_updateFriendCount:function(){var a=0;$.each(this.friends,function(b,c){if(c.status[0]!="offline"){a++}});$("#imjs-friends .imjs-tab-text span span").html(a)},_storeFriends:function(){store.set(this.username+"-friends",this.friends)},_createChatbox:function(h,d){var b=this,g="imjs-"+md5.hex(h);if(!(a=$("#"+g)).length){var c=this.addTab(h,"#"+g);var a=c.find(".imjs-chatbox");a.attr("id",g);var f=a.find(".imjs-msglog").empty();var e=a.find(".imjs-header");e.html(e.html().replace("{username}",h));if(!d){this._store(h,this._addDateStamp(a))}this.chats[h]=a;a.data("username",h);if(h in this.friends){status=this.friends[h].status;c.addClass("imjs-"+status)}setTimeout(function(){b._scrollers()},0)}else{if(a.parents(".imjs-tab").data("state")=="closed"){a.find(".imjs-msglog > *").addClass("imjs-msg-old");var c=a.parents(".imjs-tab");if(c.css("display")=="none"){c.css("display","").removeClass("imjs-selected").insertAfter("#imjs-scroll-left").data("state","minimized")}if(!d){this._store(h,this._addDateStamp(a))}if(!$("#imjs-bar .imjs-selected").length){c.click()}else{this.notification(c)}setTimeout(function(){b._scrollers()},0)}}return a},_addDateStamp:function(a,f){var e=$(a).find(".imjs-msglog");if(!f){f=(new Date()).getTime()}var c=$(".imjs-tab.imjs-default .imjs-chatbox .imjs-msglog .imjs-date").clone();var b=c.find(".imjs-msg-time");if(b.length){b.html(dateFormat(f,b.html()))}var g=c.find(".imjs-date-date");var d=dateFormat(f,g.html());if(a.data("lastDateStamp")!=d){if(g.length){g.html(dateFormat(f,g.html()))}a.data("lastDateStamp",d);c.appendTo(e);return{replace_last:false,html:jQuery("<div>").append(c.clone()).html()}}else{return{replace_last:false,html:""}}},_addError:function(a,d,f){var e=$(a).find(".imjs-msglog");var b=$(".imjs-tab.imjs-default .imjs-chatbox .imjs-msglog .imjs-error").clone();var c=b.find(".imjs-msg-time");if(c.length){if(!f){f=(new Date()).getTime()}c.html(dateFormat(f,c.html()))}b.find(".imjs-error-error").html(d);b.appendTo(e);e[0].scrollTop=e[0].scrollHeight;return{replace_last:false,html:jQuery("<div>").append(b.clone()).html()}},_addMessage:function(j,d,c,k,b){var e=d.find(".imjs-msglog > *:last-child");if(e.hasClass("imjs-msg-"+j)){var h=(e.hasClass("imjs-msg-"+j+"-container")?e:e.find(".imjs-msg-"+j+"-container"));var g=$(".imjs-tab.imjs-default .imjs-chatbox .imjs-msglog .imjs-msg-"+j+"-msg").clone().appendTo(h);g.html(g.html().replace("{username}",c))}else{if(!e.length||!e.hasClass("imjs-msg-"+j)){var a=$(".imjs-tab.imjs-default .imjs-chatbox .imjs-msg-"+j).clone().appendTo(d.find(".imjs-msglog"));a.html(a.html().replace("{username}",c));var g=a.find(".imjs-msg-"+j+"-msg")}}k=k.toString().replace(/</g,"<").replace(/>/g,">").replace(/(^|.*)\*([^*]+)\*(.*|$)/,"$1<strong>$2</strong>$3");k=k.replace(new RegExp("([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%[A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)","g"),'<a href="$1" target="_blank">$1</a>');g.html(g.html().replace("{message}",k));var f=g.find(".imjs-msg-time");if(!b){b=new Date()}if(typeof b!="string"){b=dateFormat(b,f.html())}f.html(b);var i=d.find(".imjs-msglog");i[0].scrollTop=i[0].scrollHeight;return{replace_last:!!h,html:jQuery("<div>").append(h?e.clone():a.clone()).html()}},_store:function(b,a){if(!a.html.length){return}if(!this.chatstore){this.chatstore={}}if(!(b in this.chatstore)){this.chatstore[b]=[]}else{if(this.chatstore[b].length>300){this.chatstore[b].shift()}}if(a.replace_last){this.chatstore[b].pop()}this.chatstore[b].push(a.html);store.set(this.username+"-chats",this.chatstore)},_friendUpdate:function(f,g,h){if(this.chats[f]){var c=this.chats[f].parents(".imjs-tab");var e="imjs-tab";if(c.data("state")=="active"){e+=" imjs-selected"}e+=" imjs-"+g;c.attr("class",e);var d=$(".imjs-tab.imjs-default .imjs-chatbox .imjs-msglog .imjs-date").clone();var b=d.find(".imjs-msg-time");if(b.length){b.html(dateFormat(b.html()))}var a=d.find(".imjs-date-date").html(AjaxIM.l10n["chat"+g.toUpperCase().slice(0,1)+g.slice(1)].replace(/%s/g,f));var j=this.chats[f].find(".imjs-msglog");d.appendTo(j);j[0].scrollTop=j[0].scrollHeight}if(!this.friends[f]){this.addFriend(f,[g,h],"Friends")}if(this.friends[f]){var i="imjs-friend-"+md5.hex(f+this.friends[f].group);$("#"+i).attr("class","imjs-friend imjs-"+g);$("#"+i).find(".imjs-friend-status").html(h).attr("status",h);if(g=="offline"){$("#"+i+":visible").slideUp();$("#"+i+":hidden").hide()}else{if(!$("#"+i+":visible").length){$("#"+i).slideDown()}}this.friends[f].status=[g,h];this._updateFriendCount()}},_notConnected:function(){$("#imjs-friends").addClass("imjs-not-connected").unbind("click",this.activateTab);if($("#imjs-friends").hasClass("imjs-selected")){this.activateTab($("#imjs-friends"))}},_showReconnect:function(){$("#imjs-reconnect").show()},send:function(d,a){if(!a){return}var b=this;if(this.chats[d]){this._store(d,this._addDateStamp(this.chats[d]));this._store(d,this._addMessage("a",this.chats[d],this.username,a))}$(this).trigger("sendingMessage",[d,a]);var c={type:"message",from:this.username,to:d,body:a};this.sendEvent(c,function(e){if(e._status.sent){$(b).trigger("sendMessageSuccessful",[d,a])}else{if(e.type=="error"){if(e.error=="not online"){$(b).trigger("sendMessageFailed",["offline",d,a])}else{$(b).trigger("sendMessageFailed",[e.error,d,a])}}}},function(e){b._notConnected();var e=b._addError(b.chats[d],"You are currently not connected or the server is not available. Please ensure that you are signed in and try again.");b._store(e);$(b).trigger("sendMessageFailed",["not connected",d,a])})},status:function(d,c){var a=this;if(!~this.statuses.indexOf(d)){return}$(this.statuses).each(function(){$("#imjs-friends").removeClass("imjs-"+this)});$("#imjs-friends").addClass("imjs-"+d);$(this).trigger("changingStatus",[d,c]);if(d=="offline"){a._notConnected();a._showReconnect();store.set(this.username+"-offline",true);a.offline=true;$(".imjs-input").attr("disabled",true);AjaxIM.post(this.actions.signoff,{},function(e){if(e.type=="success"){$(a).trigger("changeStatusSuccessful",[d,null])}},function(e){$(a).trigger("changeStatusFailed",["not connected",d,null])})}else{var b={type:"status",status:d,message:c};this.sendEvent(b,function(e){if(e._status.send){$(a).trigger("sendMessageSuccessful",[username,body])}else{if(e.type=="error"){if(e.error=="not online"){$(a).trigger("sendMessageFailed",["offline",username,body])}else{$(a).trigger("sendMessageFailed",[e.error,username,body])}}}},function(e){a._notConnected();var e=a._addError(a.chats[username],"You are currently not connected or the server is not available. Please ensure that you are signed in and try again.");a._store(e);$(a).trigger("sendMessageFailed",["not connected",username,body])})}},statuses:["offline","available","away"],initTabBar:function(){var a=this;$(document).on("click",".imjs-tab",function(){return a.activateTab.call(a,$(this))});$(document).on("click",".imjs-tab .imjs-close",function(){return a.closeTab.call(a,$(this))});$(document).click(function(b){if(~["imjs-friends"].indexOf(b.target.id)||$(b.target).parents("#imjs-friends").length){return}if($("#imjs-friends").data("state")=="active"){a.activateTab.call(a,$("#imjs-friends"))}else{if($("#imjs-status").data("state")=="active"){a.activateTab.call(a,$("#imjs-status"))}}});$("#imjs-friends").data("state","minimized").click(function(b){if(!$(this).hasClass("imjs-not-connected")&&b.target.id!="imjs-friends-panel"&&!$(b.target).parents("#imjs-friends-panel").length){a.activateTab.call(a,$(this))}}).mouseenter(function(){if($(this).hasClass("imjs-not-connected")){$(".imjs-tooltip").css("display","block").find("p").html(AjaxIM.l10n.notConnectedTip);var c=$(this).offset().left-$(".imjs-tooltip").outerWidth()+($(this).outerWidth()/2);var b=$(this).offset().top-$(".imjs-tooltip").outerHeight(true);$(".imjs-tooltip").css({left:c,top:b})}}).mouseleave(function(){if($(this).hasClass("imjs-not-connected")){$(".imjs-tooltip").css("display","")}});$("#imjs-friends-panel").css("display","none")},activateTab:function(d){var a=d.find(".imjs-chatbox")||false,b;if(d.data("state")!="active"){if(d.attr("id")!="imjs-friends"){$("#imjs-bar > li").not(d).not("#imjs-friends, .imjs-scroll, .imjs-default").add(d.attr("id")=="imjs-status"?"#imjs-friends":"").removeClass("imjs-selected").each(function(){var g=$(this);if(g.data("state")!="closed"){g.data("state","minimized");var e=g.find(".imjs-chatbox");if(e.length){e.css("display","none")}}})}else{$("#imjs-status").removeClass("imjs-selected").data("state","minimized").find(".imjs-chatbox").css("display","none")}if(a&&a.css("display")=="none"){a.css("display","")}d.addClass("imjs-selected").data("state","active");d.find(".imjs-notification").css("display","none").data("count",0);if(a&&(username=a.data("username"))){store.set(this.username+"-activeTab",username)}$(this).trigger("tabToggled",["activated",d])}else{d.removeClass("imjs-selected").data("state","minimized");if(a&&a.css("display")!="none"){a.css("display","none")}store.set(this.username+"-activeTab","");$(this).trigger("tabToggled",["minimized",d])}if(a){if((b=a.find(".imjs-input")).length&&!b.data("height")){b.height(0);if(b[0].scrollHeight>b.height()||b[0].scrollHeight<b.height()){b.height(b[0].scrollHeight)}if(!b.height()){b.height(16)}b.data("height",b.height())}try{var c=a.find(".imjs-msglog");c[0].scrollTop=c[0].scrollHeight}catch(f){}try{a.find(".imjs-input").focus()}catch(f){}}},closeTab:function(a){a=a.parents(".imjs-tab");a.css("display","none").removeClass("imjs-selected").data("state","closed");delete this.chatstore[a.find(".imjs-chatbox").data("username")];store.set(this.username+"-chats",this.chatstore);$(this).trigger("tabToggled",["closed",a]);this._scrollers();return false},addTab:function(a,d,c){var b=$(".imjs-tab.imjs-default").clone().insertAfter("#imjs-scroll-left");b.removeClass("imjs-default").attr("id","imjs-tab-"+md5.hex(a)).html(b.html().replace("{label}",a)).data("state","minimized");var e=b.find(".imjs-notification");e.css("display","none").data("count",0).data("default-text",e.html()).html(e.html().replace("{count}","0"));if(c===false){b.find(".imjs-close").eq(0).remove()}if(typeof d!="string"){b.find(".imjs-chatbox").remove();b.click(d)}return b},notification:function(c){var a=c.find(".imjs-notification");var b=a.data("count")+1;a.data("count",b).html(a.data("default-text").replace("{count}",b)).css("display","")},_scrollers:function(){var a=false;$("#imjs-scroll-left").nextAll(".imjs-tab").filter(function(){return $(this).data("state")!="closed"}).each(function(b,c){c=$(c).css("display","");var d=c.position();if(d.top>=$("#imjs-bar").height()||d.left<0||d.right>$(document).width()){$(".imjs-scroll").css("display","");c.css("display","none");a=true}});if(!a){$(".imjs-scroll").css("display","none")}if($("#imjs-scroll-left").css("display")!="none"&&$("#imjs-scroll-right").position().top>=$("#imjs-bar").height()){$("#imjs-bar li.imjs-tab:visible").slice(-1).css("display","none")}if($("#imjs-bar li.imjs-tab:visible").length){while($(".imjs-selected").css("display")=="none"){$("#imjs-scroll-right").click()}}this._scrollerIndex()},_scrollerIndex:function(){var a=$("#imjs-bar li.imjs-tab:visible").slice(-1).nextAll("#imjs-bar li.imjs-tab:hidden").not(".imjs-default").filter(function(){return $(this).data("state")!="closed"}).length;var b=$("#imjs-bar li.imjs-tab:visible").eq(0).prevAll("#imjs-bar li.imjs-tab:hidden").not(".imjs-default").filter(function(){return $(this).data("state")!="closed"}).length;$("#imjs-scroll-left").html(b);$("#imjs-scroll-right").html(a)},unconfirmedEvents:{},eventId:1,createEvent:function(){var a={};a.id=this.eventId++;this.unconfirmedEvents[a.id]=evt},sendEvent:function(e,f,a){e.id=this.eventId++;var b=$.extend({},e);b._status={successFunc:f,failureFunc:a};this.unconfirmedEvents[e.id]=b;if(this.socket){this.socket.emit("server",e)}else{var c=this;var d=null;switch(e.type){case"message":d=this.actions.send;break;case"status":d=this.actions.status;break;case"signoff":d=this.actions.signoff;break;default:break}AjaxIM.post(d,e,function(g){if(g){for(var h=0;h<g.length;++h){c.dispatchEvent(events[h])}}},function(g){if(c.unconfirmedEvents[e.id]){e=c.unconfirmedEvents[e.id];e._status["sent"]=false;c.dispatchEvent(e)}})}},dispatchEvent:function(a){if(a.id&&this.unconfirmedEvents[a.id]){a._status=$.extend({},this.unconfirmedEvents[a.id]["_status"],a._status);delete this.unconfirmedEvents[a.id];if(a._status["sent"]){a._status["successFunc"](a)}else{a._status["failureFunc"](a)}}else{this.triggerEvent(a)}},eventHandlers:{},onEvent:function(a,b){if(!this.eventHandlers[a]){this.eventHandlers[a]=[]}this.eventHandlers[a].push(b)},triggerEvent:function(a){if(this.eventHandlers[a.type]){for(var b=0;b<this.eventHandlers[a.type].length;++b){this.eventHandlers[a.type][b].call(this,a)}}}});AjaxIM.client=null;AjaxIM.init=function(a,b){if(!AjaxIM.client){AjaxIM.client=new AjaxIM(a,b)}return AjaxIM.client};AjaxIM.post=function(c,e,d,a,b){AjaxIM.request(c,"POST",e,d,a,b)};AjaxIM.get=function(c,e,d,a,b){AjaxIM.request(c,"GET",e,d,a,b)};AjaxIM.request=function(a,d,c,e,b,h){var g=["timeout","error","notmodified","parseerror"];if(typeof b!="function"){b=function(){}}var f=(a.substring(0,1)!=="/");var i=false;c.sessionid=cookies.get("sessionid");$.ajax({url:a,data:c,dataType:f?"jsonp":"json",type:d,cache:false,timeout:299000}).done(function(j){i=true;_dbg(JSON.stringify(j));e(j)}).fail(function(j,k){_dbg(k);b(k)});if(f){setTimeout(function(){var k=function(){if(!i){var l="error";_dbg(l);b(l)}};if(h){var j=function(){var l=false;var m={type:"noop"};$.ajax({url:h,data:m,dataType:"jsonp",type:d,cache:false,timeout:299000}).done(function(n){l=true;if(!i){setTimeout(j,3000)}}).fail(function(n,o){});setTimeout(function(){if(!l){k()}},3000)};j()}else{k()}},3000)}};AjaxIM.incoming=function(a){if(!AjaxIM.client){return false}if(a.length){AjaxIM.client._parseMessages(a)}};AjaxIM.eventID=1;AjaxIM._=function(a){if(a in AjaxIM.l10n){return AjaxIM.l10n[a]}return a};AjaxIM.l10n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],chatOffline:"%s signed off.",chatAvailable:"%s became available.",chatAway:"%s went away.",notConnected:"You are currently not connected or the server is not available. Please ensure that you are signed in and try again.",notConnectedTip:"You are currently not connected.",defaultAway:"I'm away."};AjaxIM.debug=true;function _dbg(a){if(AjaxIM.debug&&window.console){console.log(a)}}function uid(e){var a="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d="";for(var b=0;b<e;b++){d+=a.substr(0|Math.random()*a.length,1)}return d}; |