FIRSTCLASS.apps.Global = {
init: function () {
FIRSTCLASS.util.DataSource.registerGlobalDataListener(FIRSTCLASS.apps.Global.listener);
this.chat.init();
},
listener: {
onHeaderData: function (key, contents) {
//debugger;
if (key == "session") {
//FIRSTCLASS.session.vkeys.push(contents.vkey);
if (FIRSTCLASS.session.updates.chatfolder < contents.updates.chatfolder) {
FIRSTCLASS.apps.Global.chat._chatfolderds.fetchNewRows(false);
}
FIRSTCLASS.session.updates.chatfolder = contents.updates.chatfolder;
}
/*if (key == "chats") {
for (var i in contents) {
FIRSTCLASS.apps.Global.chat.parseChatChannel(contents[i]);
}
}*/
if (key == "mypeople") {
FIRSTCLASS.apps.Global.chat.updateOverlay();
}
},
filter: function (key) {
switch (key) {
case "session":
case "chats":
case "mypeople":
return true;
default:
return false;
}
}
},
resizeEvent: function() {
var viewport = FIRSTCLASS.ui.Dom.getViewportBounds();
var overlay = false;
if (false && FIRSTCLASS.apps.Global.chat._mainoverlaydiv) {
overlay = FIRSTCLASS.apps.Global.chat._mainoverlaydiv;
} else if (FIRSTCLASS.apps.Global.chat._overlaydiv) {
overlay = FIRSTCLASS.apps.Global.chat._overlaydiv;
}
if (overlay) {
YAHOO.util.Dom.setStyle(FIRSTCLASS.apps.Global.chat._mainoverlaydiv, 'width', "" + viewport.wd + "px");
if (FIRSTCLASS.apps.Global.chat._mainoverlaydiv.firstChild) {
YAHOO.util.Dom.setStyle(FIRSTCLASS.apps.Global.chat._mainoverlaydiv.firstChild, 'width', "" + viewport.wd + "px");
}
YAHOO.util.Dom.setStyle(overlay, 'width', "" + (viewport.wd - (17*2)) + "px");
if(overlay.firstChild) {
YAHOO.util.Dom.setStyle(overlay.firstChild, 'width', "" + (viewport.wd - (17*2)) + "px");
}
}
if (overlay) {
FIRSTCLASS.apps.Global.chat.updateOverlays();
}
},
chat: {
container: false,
_initialized: false,
_enabled: true,
init: function () {
if (this._initialized) {
return;
}
this._chatfolderds = new FIRSTCLASS.util.DataSource(
{
name: "Chats",
globalDataListener: {key:"chats"},
itemrequest: false,
containerBaseUrl: FIRSTCLASS.lang.ensureSlashUrl(FIRSTCLASS.session.baseURL) + "__Open-Item/MyIMFolders/"
});
YAHOO.widget.Overlay.VIEWPORT_OFFSET = 0;
var overlaydiv = document.createElement("div");
overlaydiv.id = 'chatoverlay';
this._overlaydiv = overlaydiv;
document.body.appendChild(overlaydiv);
var html = [];
var viewport = FIRSTCLASS.ui.Dom.getViewportBounds();
html.push("
");
var index = 0;
if (chat.messages.length > 10) {
index = chat.messages.length - 10;
}
lastcid = -1;
for (i = index; i < chat.messages.length; i++) {
row = chat.messages[i];
html.push(getRowHTML(row, lastcid, chat));
lastcid = row.creatorcid;
count++;
if (row.isNewChat) {
row.isNewChat = false;
isNewChat = true;
}
}
/* if (chat.chatchannel) {
for (var i in chat.chatchannel.participants) {
if (chat.chatchannel.participants[i].icon.icon == 9803) {
html.push("
" + chat.chatchannel.participants[i].name + " is typing
");
}
}
}*/
html.push("
");
chat.overlay.setBody(html.join(""));
}
var actuallyShow = true;
var chat = false;
for (var i in this.currentChats) {
chat = this.currentChats[i];
if (!chat.minimized) {
actuallyShow = false;
}
}
if (actuallyShow) {
var isSafe = true;
if (FIRSTCLASS.session.getActiveApplication() && FIRSTCLASS.session.getActiveApplication().isSafeToNavigate) {
isSafe = FIRSTCLASS.session.getActiveApplication().isSafeToNavigate();
}
if (!isSafe) {
actuallyShow = false;
}
}
if (actuallyShow && ((hasunread || doShow) && this._enabled)) {
if (chat.minimized) {
if (chat.overlay) {
chat.overlay.render(document.body);
}
if (actuallyShow) {
this.showChat(chat.messageid);
}
// chat.overlay.show();
}
var chatbody = $('fcChatBody'+chat.messageid);
chatbody.scrollTop = chatbody.scrollHeight;
chat.minimized = false;
}
if (!chat.timeout) {
chat.timeout = window.setTimeout(function () {
FIRSTCLASS.apps.Global.chat.updateChatChannel(chat);
chat.timeout = false;
}, 1000);
}
if (bringToTop && wasminimized) {
this._manager.bringToTop(chat.overlay);
}
if (isNewChat) {
this.showChat(chat.messageid);
var form = $("fcChatReply"+chat.messageid);
var bd = form.elements['BODY']
window.setTimeout(function() {
bd.disabled = false;
bd.value = "";
bd.focus();bd.focus();bd.select();bd.focus();
}, 30);
}
},
openChat: function (cid, name) {
var chat = false;
for (var i in this.currentChats) {
chat = this.currentChats[i];
if (chat.nparticipants == 2) {
for (var j in chat.participants) {
if (j == cid) {
/* open this chat */
this.showChat(chat.messageid);
return;
}
}
}
}
this.doNewChat(cid, name);
},
doNewChat: function (cid, name) {
var date = new Date();
var participants = {};
participants[FIRSTCLASS.session.user.cid] = {name:FIRSTCLASS.session.user.name};
participants[cid] = {name:name};
var vrow = {
status: {
unread: 1,
outgoing: 1
},
typedef: {
objtype: 0
},
"creatorcid": cid,
"name": name,
"col8063": "",
"expandedPreview": "",
chatparticipants: {
},
parsedDate: date,
uri: "__FCXIM_" + cid,
threadid: "CID"+cid,
messageid: "CID"+cid,
justsent: true,
isNewChat: true
};
vrow.chatparticipants = participants;
FIRSTCLASS.apps.Global.chat.listener.onRow(vrow, true, true);
FIRSTCLASS.apps.Global.chat.listener.fillFinished();
},
updateChatFolderID: function (chat, newfolderid) {
// do something
if (chat.messageid == newfolderid) {
return;
} else {
var offset = [0,0];
var oldfid = chat.messageid;
chat.messages.splice(0,1);
chat.messageid = newfolderid;
chat.oldthreadid = oldfid;
chat.redrawbodycompletely = true;
this.currentChats[newfolderid] = chat;
this.currentChats[oldfid] = false;
delete this.currentChats[oldfid];
this.updateOverlay();
this.updateOverlayForChat(chat);
var oldform = chat.overlay.footer.firstChild.firstChild;
if (oldform) {
oldform.id = 'fcChatReply'+newfolderid;
}
chat.overlay.cfg.setProperty("context", [$('fcChatAnchor'+chat.messageid), 'bl', 'tl', ['beforeShow', 'windowResize', 'windowScroll', 'changeBody', 'render'], offset]);
//chat.overlay.render(document.body);
var input = FIRSTCLASS.ui.Dom.getChildByClassName("fcInlineReplyInput", chat.overlay.footer.firstChild);
if (input) {
input.setAttribute('fcattrs', newfolderid);
} else {
debugger;
}
}
},
minimizeChat: function (messageid, nofetch) {
var chat = this.currentChats[messageid];
if (messageid == "mypeople") {
chat = this._mypeople;
nofetch = true;
}
if (chat) {
if (chat.minimized) {
return;
}
if (chat.messages) {
chat.dataSource.toggleUnreadRows(chat.messages);
}
//chat.messages = false;
chat.minimized = true;
if (chat.overlay) {
chat.overlay.hide();
}
/*if (!nofetch) {
this._chatfolderds.fetchRowsByThread(threadid);
}*/
}
this.updateOverlay();
/*if (chat.overlay) {
chat.overlay.hide();
}*/
},
toggleChat: function (messageid) {
var chat = this.currentChats[messageid];
if (messageid == "mypeople") {
chat = this._mypeople;
}
if (chat) {
if (chat.minimized) {
this.showChat(messageid);
} else {
this.minimizeChat(messageid);
//this.closeChat(threadid);
}
}
},
showWindow: function (overlay, chat) {
for (var i in this.currentChats) {
if (this.currentChats[i] != chat) {
this.minimizeChat(this.currentChats[i].messageid, true);
}
}
this._mypeople.overlay.hide();
this._mypeople.minimized = true;
YAHOO.util.Dom.removeClass('fcChatOverlayPeople', 'visible');
YAHOO.util.Dom.addClass('fcChatOverlayPeople', 'minimized');
/* if (chat) {
var offset = [0,0];
var anchor = $('fcChatAnchor'+chat.messageid);
overlay.cfg.setProperty("context", [anchor, 'bl', 'tl', ['beforeShow', 'windowResize', 'windowScroll', 'changeBody', 'render'], offset]);
}*/
/*if (chat) {
var xy = [0,0];
var anchor = $('fcChatAnchor'+chat.messageid);
var axy = YAHOO.util.Dom.getXY(anchor);
xy[0] = axy[0];
xy[1] = axy[1]-349;
overlay.cfg.setProperty("xy", xy);
}*/
overlay.show();
overlay.render(document.body);
if (YAHOO.env.ua.ie) {
YAHOO.util.Dom.setStyle(overlay.element.parentNode, 'position', "");
YAHOO.util.Dom.setStyle(overlay.element, 'position', "");
}
this._manager.bringToTop(overlay);
},
showChat: function (chatid) {
if (chatid == "mypeople") {
this.showWindow(this._mypeople.overlay);
this._mypeople.minimized = false;
YAHOO.util.Dom.addClass('fcChatOverlayPeople', 'visible');
YAHOO.util.Dom.removeClass('fcChatOverlayPeople', 'minimized');
this._mypeople.overlay.render(document.body);
} else {
var chat = this.currentChats[chatid];
if (chat) {
this.disable();
if (chat.messages || chatid.indexOf("CID") === 0) {
this.updateOverlayForChat(chat, true);
// this._chatfolderds.fetchRowsByThread(threadid);
} else {
chat.showOnNextUpdate = true;
// this._chatfolderds.fetchRowsByThread(threadid);
}
if (chatid.indexOf("CID") < 0) {
//this._chatfolderds.fetchRowsByThread(threadid);
}
this.enable();
//this._manager.hideAll();
chat.minimized = false;
this.updateOverlay();
this.showWindow(chat.overlay, chat);
if (chat.messages) {
chat.dataSource.toggleUnreadRows(chat.messages);
}
var chatbody = $('fcChatBody'+chat.messageid);
chatbody.scrollTop = chatbody.scrollHeight;
var anchor = $('fcChatAnchor'+chat.messageid);
YAHOO.util.Dom.removeClass(anchor, 'highlight');
var form = $('fcChatReply'+chatid);
if (form) {
var bd = form.elements['BODY']
window.setTimeout(function() {
bd.disabled = false;
bd.focus();bd.focus();bd.select();bd.focus();
}, 30);
}
this.updateChatAttrs(chatid, {open: true});
}
}
},
closeChat: function (chatid) {
var chat = this.currentChats[chatid];
this.minimizeChat(chatid, true);
// this.updateChatAttrs(chatid, {open: false}); // no longer place closed chats into cold storage
this.currentChats[chatid] = false;
delete this.currentChats[chatid];
this.updateOverlay();
this._manager.remove(chat.overlay);
chat.overlay.destroy();
/*chat.overlay.element.innerHTML = "";
var div = document.createElement("div");
FIRSTCLASS.ui.Dom.reparentNode(chat.overlay.element, div);
div.innerHTML = "";*/
},
updateChatAttrs: function(chatid, attrs) {
var chat = this.currentChats[chatid];
var bAttrs = 0;
if (attrs.open) {
bAttrs = FIRSTCLASS.lang.binary.OR(bAttrs,0x001);
}
this._chatfolderds.updateFieldData(chat.row, [{id:8133, type:"LONG", value:bAttrs}]);
},
hideOverlay: function () {
this.currentNewChats = [];
YAHOO.util.Dom.setStyle(this._overlaydiv, 'display', 'none');
//this._overlay.hide();
},
sortfunc: function (row1, row2) {
if (row1.parsedDate > row2.parsedDate) {
return 1;
} else if (row1.parsedDate == row2.parsedDate) {
return 0;
} else {
return -1;
}
},
scrollCurrentChatToBottom: function() {
var chat = false;
for (var i in this.currentChats) {
chat = this.currentChats[i];
if (!chat.minimized && chat.overlay && chat.overlay.element) {
var body = FIRSTCLASS.ui.Dom.getChildByIdName('fcChatBody'+chat.messageid, chat.overlay.element);
body.scrollTop = body.scrollHeight;
}
}
},
parseChatChannel: function (chatchannel) {
return;
var chat = false;
var found = false;
for (var i in this.currentChats) {
chat = this.currentChats[i];
for (var j in chat.participants) {
if (chat.participants[j] == chatchannel.from) {
found = true;
break;
} else {
chat = false;
}
}
if (found) {
break;
}
}
if (chat) {
/* found the chat to match with this channel */
if (!chat.chatchannel) {
FIRSTCLASS.util.net.doAsyncGet({action:chatchannel.aurl, callbacks:this.chatChannelCallbacks});
}
chat.chatchannel = chatchannel;
this.updateOverlayForChat(chat);
}
},
updateChatChannel: function (chat) {
if (chat.chatchannel) {
FIRSTCLASS.util.net.doAsyncGet({action:chat.chatchannel.durl,callbacks:this.chatChannelCallbacks});
}
},
chatChannelCallbacks: {
success: function (response) {
var obj = false;
try {
obj = response.responseJSON;
if (!obj) {
throw "JSON parse failed";
}
} catch(e) {
//debugger;
}
if (obj) {
FIRSTCLASS.apps.Global.chat.parseChatChannel(obj);
}
},
failure: function (response) {
// do nothing for now
}
},
sendReply: function (chatid) {
var form = $('fcChatReply'+chatid);
if (form) {
if (form.elements["BODY"].value != "") {
var bd = form.elements["BODY"].value;
form.elements["BODY"].blur();
form.elements["BODY"].disabled = true;
FIRSTCLASS.apps.Global.chat.inlinereplycallbacks._form = form;
var date = new Date();
var vrow = {
status: {
unread: 0,
outgoing: 1
},
"creatorcid": FIRSTCLASS.session.user.cid,
"name": FIRSTCLASS.session.user.name,
"col8063": FIRSTCLASS.util.expandHashTags(FIRSTCLASS.lang.mlesc(form.elements["BODY"].value).parseURLS(23,23).replace(/\n/g,"