var Messaging = {checkRoster : false,currentChatBox : null,initialized : false,inputCount : 1,mainDiv : null,msgQueue : [],userId : null,windowCount : 0,zIndex : 1,chat : function(msgObj) {if (!msgObj && Messaging.msgQueue.length == 0) return;var msg = msgObj || Messaging.msgQueue.shift();var toDivId = msg.toId.replace(/\./g, "_");var chatBox = jQuery("#msg-chat-box_" + toDivId)[0];if (!chatBox) {var contents ="<div class='msg-chat-box' id='msg-chat-box_" + toDivId + "'>" +"<input class='msg-to-input-id' type=hidden value='" + msg.toId + "' />" +"<div class='msg-chat-area textarea' style='overflow: auto; height: 100px'>" +(msg.messages || "") +"</div>" +"<input class='msg-type-area' style='width: 90%; margin-top: 5px' tabIndex=1 type='text' onKeyPress='Messaging.sendChat(this, event)' />" +"</div>";chatBox = Liferay.Popup({title: msg.toName,message: contents,noCenter: true,width: 300,onClose: function() { Messaging.saveCookie(); }});if (msg.status && msg.status == "unavailable") {jQuery(chatBox).append("<img src='" + themeDisplay.getPathThemeImages() + "/chat/add_user.png' " +"style='cursor: pointer; margin-top: 2px' " +"onclick=\"MessagingRoster.addEntry('" + msg.toId + "'); jQuery(this).remove()\"" +"/>");}Messaging.populateChatBox(chatBox, msg);if (msg.top != null && msg.left != null) {jQuery(chatBox).parents(".popup:first").css({top: msg.top + "px",left: msg.left + "px"});}else {var count = Liferay.Popup.count();jQuery(chatBox).parents(".popup:first").css({top: (count * 10) + "px",left: (count * 10) + "px"});}}else {this.populateChatBox(chatBox, msg);}},populateChatBox : function(chatBox, msg) {var typeArea = jQuery.getOne(".msg-type-area", chatBox);var chatArea = jQuery.getOne(".msg-chat-area", chatBox);if (msg.body != null) {var name = msg.toName.split(/[ ,.-]/);var initials = "";for (var i = 0; i < name.length; i++) {initials += name[i].charAt(0);}chatArea.innerHTML += "<span style='color: #FF0000'>" + initials + ": </span>" + msg.body + "<br/>";this.saveCookie();}chatArea.scrollTop = chatArea.scrollHeight;typeArea.focus();if (Liferay.Browser.is_ie) {// need double focus for IEtypeArea.focus();}Messaging.chat();},getChats : function() {var url = themeDisplay.getPathMain() + "/messaging/action?cmd=getChats";AjaxUtil.request(url, {onComplete: function(xmlHttpReq) {var msg = eval("(" + xmlHttpReq.responseText + ")");Messaging.getChatsReturn(msg);}});},getChatsReturn : function(msg) {var status = msg.status;if (status == "success") {var chatMsg = msg.chat;if (chatMsg && chatMsg.length > 0) {for (var i = 0; i < chatMsg.length; i++) {// swap "from" and "to"var tmpName = chatMsg[i].fromName;var tmpId = chatMsg[i].fromId;chatMsg[i].fromName = chatMsg[i].toName;chatMsg[i].fromId = chatMsg[i].toId;chatMsg[i].toName = tmpName;chatMsg[i].toId = tmpId;Messaging.msgQueue.push(chatMsg[i]);}Messaging.chat();window.focus();}}},error : function() {alert("User does not exist");},init : function(userId) {var body = document.getElementsByTagName("body")[0];this.userId = userId;var msgJSON = jQuery.cookie(this.userId + "_chats");if (msgJSON) {var chatArray = eval("(" + msgJSON + ")");for (var i = 0; i < chatArray.length; i++) {Messaging.msgQueue.push(chatArray[i]);}Messaging.chat();}this.initialized = true;Messaging.getChats();},maximizeChat : function(id) {var chatBox = jQuery.getOne(id);var widthDiv = jQuery.getOne(".msg-chat-box-width");var chatArea = jQuery.getOne(".msg-chat-area");chatBox.style.left = Viewport.scroll().x + "px";chatBox.style.top = Viewport.scroll().y + "px";widthDiv.style.width = (Viewport.frame().x - 30) + "px";chatArea.style.height = (Viewport.frame().y - 100) + "px";},minimizeChat : function(id) {var chatBox = jQuery.getOne(id);var widthDiv = jQuery.getOne(".msg-chat-box-width");var chatArea = jQuery.getOne(".msg-chat-area");widthDiv.style.width = 250 + "px";chatArea.style.height = 100 + "px";},removeChat : function(id) {var chatBox = jQuery.getOne(id);Element.remove(chatBox);this.saveCookie();},saveCookie : function() {var chatList = jQuery(".msg-chat-box");var jsonString = "[";chatList.each(function(i){var item = this;var popup = jQuery(item).parents(".popup:first");jsonString += "{"+ "toName:\"" + popup.find(".popup-title")[0].innerHTML + "\","+ "toId:\"" +jQuery(".msg-to-input-id", item)[0].value + "\","+ "top:" + parseInt(popup.css("top")) + ","+ "left:" + parseInt(popup.css("left")) + ","+ "messages:\"" + Liferay.Util.toJSONString(jQuery(".msg-chat-area", item)[0].innerHTML) + "\"}";if (i < chatList.length - 1) {jsonString += ",";}});jsonString += "]";jQuery.cookie(this.userId + "_chats", jsonString);},sendChat : function(obj, e) {var keycode;var chatBox = obj.parentNode;var toInput;var toAddr;var typeArea;var chatArea;var query = "cmd=sendChat";if (window.event) keycode = window.event.keyCode;else if (e) keycode = e.which;else return;if (keycode == 13) {var inputList = chatBox.getElementsByTagName("input");for (var i = 0; i < inputList.length ; i++) {if (inputList[i].className) {if (inputList[i].className.match("msg-to-input-id")) toInput = inputList[i];if (inputList[i].className.match("msg-to-input-addr")) toAddr = inputList[i];if (inputList[i].className.match("msg-type-area")) typeArea = inputList[i];}}if (typeArea.value == "") return;var divList = chatBox.getElementsByTagName("div");for (var i = 0; i < divList.length ; i++) {if (divList[i].className && divList[i].className.match("msg-chat-area")) chatArea = divList[i];}query += "&text=" + encodeURIComponent(typeArea.value);if (toAddr != null) {query += "&tempId=" + toInput.value + "&toAddr=" + toAddr.value;}else {query += "&toId=" + toInput.value;}loadPage(themeDisplay.getPathMain() + "/messaging/action", query, Messaging.sendChatReturn);chatArea.innerHTML += "<span style='color: #0000FF'>Me: </span>" + typeArea.value + "<br/>";chatArea.scrollTop = chatArea.scrollHeight;typeArea.value = "";Messaging.saveCookie();}},sendChatReturn : function(xmlHttpReq) {var msg = eval("(" + xmlHttpReq.responseText + ")");if (msg.status == "success") {Messaging.populateChatBox(msg);}else {Messaging.error();}}};var MessagingRoster = {highlightColor : "",lastSelected : null,addEntry : function(userId) {var url;if (userId) {url = themeDisplay.getPathMain() + "/chat/roster?cmd=addEntry&userId=" + userId;}else {var email = jQuery.getOne("#portlet-chat-roster-email").value;url = themeDisplay.getPathMain() + "/chat/roster?cmd=addEntry&email=" + email}AjaxUtil.request(url, {onComplete: MessagingRoster.addEntryReturn});},addEntryReturn : function(xmlHttpReq) {try {var msg = eval("(" + xmlHttpReq.responseText + ")");if (msg.status == "failure") {alert("No such user exists");}else {var rosterDiv = jQuery.getOne("#portlet-chat-roster-list");if (rosterDiv) {var entries = jQuery(".portlet-chat-roster-entry", rosterDiv);var userId = msg.user;var userExists = entries.filter(function(i){return(this.userId == userId);});if (userExists.length != 0) {var entryRow = MessagingRoster.createEntryRow(msg.user, msg.name);rosterDiv.appendChild(entryRow);}MessagingRoster.toggleEmail();}}}catch (err) {}},createEntryRow : function (userId, userName, online) {var tempDiv = document.createElement("div");var tempImg = document.createElement("img");var tempLink = document.createElement("a");tempImg.align = "absmiddle";tempImg.style.marginRight = "5px";if (online) {tempImg.src = themeDisplay.getPathThemeImages() + "/chat/user_online.png";}else {tempImg.src = themeDisplay.getPathThemeImages() + "/chat/user_offline.png";}tempLink.innerHTML = userName;tempLink.href = "javascript: void(0)";tempLink.onclick = MessagingRoster.onEntryLinkClick;tempDiv.appendChild(tempImg);tempDiv.appendChild(tempLink);tempDiv.onclick = MessagingRoster.onEntryClick;tempDiv.userId = userId;tempDiv.userName = userName;tempDiv.style.cursor = "pointer";tempDiv.className = "portlet-chat-roster-entry";return tempDiv;},deleteEntries : function () {if (MessagingRoster.lastSelected) {var userId = MessagingRoster.lastSelected.userId;var lastSelected = MessagingRoster.lastSelected;lastSelected.parentNode.removeChild(lastSelected);MessagingRoster.lastSelected = null;loadPage(themeDisplay.getPathMain() + "/chat/roster", "cmd=deleteEntries&entries=" + userId, MessagingRoster.deleteEntriesReturn);}},deleteEntriesReturn : function (xmlHttpReq) {try {var msg = eval("(" + xmlHttpReq.responseText + ")");}catch (err) {}},getEntries : function() {var url = themeDisplay.getPathMain() + "/chat/roster?cmd=getEntries";AjaxUtil.request(url, {onComplete: function(xmlHttpReq) {var msg = eval("(" + xmlHttpReq.responseText + ")");MessagingRoster.getEntriesReturn(msg);}});},getEntriesReturn : function(msg) {MessagingRoster.updateEntries(msg.roster);},updateEntries : function(roster) {var rosterDiv = jQuery.getOne("#portlet-chat-roster-list");if (rosterDiv != null) {rosterDiv.innerHTML = "";}else {Messaging.checkRoster = false;return;}for (var i = 0; i < roster.length; i++) {var entry = roster[i];var tempDiv =MessagingRoster.createEntryRow(entry.user,entry.name,entry.status == "available");rosterDiv.appendChild(tempDiv);}},onEmailKeypress : function (obj, event) {var keyCode;if (window.event) keyCode = window.event.keyCode;else if (event) keyCode = event.which;else return;if (keyCode == 13) {MessagingRoster.addEntry();}},onEntryClick : function () {if (MessagingRoster.lastSelected != null) {MessagingRoster.lastSelected.style.backgroundColor = "transparent";}this.style.backgroundColor = MessagingRoster.highlightColor;MessagingRoster.lastSelected = this;},onEntryLinkClick : function () {var parent = this.parentNode;Messaging.chat({toId: parent.userId, toName: parent.userName});},toggleEmail : function() {var emailDiv = jQuery.getOne("#portlet-chat-roster-email-div");if (emailDiv.style.display == "none") {emailDiv.style.display = "block";emailInput = jQuery.getOne("#portlet-chat-roster-email");emailInput.value = "";emailInput.focus();}else {emailDiv.style.display = "none";}}};