var Messaging = {checkRoster : false,currentChatBox : null,initialized : false,inputCount : 1,mainDiv : null,msgQueue : new Array(),userId : null,windowCount : 0,zIndex : 1,chat : function(msgObj) {if (!msgObj && Messaging.msgQueue.length == 0) return; var msg = msgObj || Messaging.msgQueue.shift();var chatBox = $("msg-chat-box" + msg.toId);if (!chatBox) {var url = themeDisplay.getPathMain() + "/messaging/action?cmd=chatbox" +"&toId=" + msg.toId +"&toName=" + encodeURIComponent(msg.toName) +"&top=" + (msg.top || 15 * this.windowCount) +"&left=" + (msg.left || 15 * this.windowCount++) +"&zIndex=" + (ZINDEX.CHAT_BOX + this.zIndex++);if (msg.status && msg.status == "unavailable") {url += "&addUser=1";}if (msg.messages) {url += "&messages=" + encodeURIComponent(msg.messages);}AjaxUtil.request(url, {returnArgs: msg,onComplete: function(xmlHttpReq, returnArgs) {var chatBox = Messaging.createChatBox(xmlHttpReq.responseText);Messaging.populateChatBox(chatBox, returnArgs);jQuery('.chat-cont').resizable({transparent: true,maxHeight: 380,maxWidth: 530,minHeight: 200,minWidth: 250,handles: "all",resize: function(e, ui){var chatArea = jQuery('.chat-talk', this).get(0);chatArea.scrollTop = chatArea.scrollHeight;},alsoResize: {'.chat-talk': ['width', 'height'],'.chat-body': ['height'],'.chat-input': ['width'],'.nick-bar': ['width'],'.chat-top-left': ['width']								}});}});}else {this.populateChatBox(chatBox, msg);}},populateChatBox : function(chatBox, msg) {var typeArea = document.getElementsByClassName("msg-type-area", chatBox)[0];var chatArea = document.getElementsByClassName("msg-chat-area", chatBox)[0];if (msg.body != null) {var name = msg.toName.split(/[ ,.-]/);var initials = "";for (var i = 0; i < name.length; i++) {initials += name[i].charAt(0);}//ss chatArea.innerHTML += "<span style='color: #FF0000'>" + initials + ": </span>" + msg.body + "<br/>";chatArea.innerHTML += "<span class='chat-msg chat-msg-other'><span class='chat-msg-nick chat-msg-nick-other'>" + initials + ": </span><span>" + msg.body + "</span></span>";}this.saveCookie();chatArea.scrollTop = chatArea.scrollHeight;typeArea.focus();if (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();}}},createChatBox: function(boxHTML) {var chatDiv = document.createElement("div");chatDiv.innerHTML = boxHTML;var chatBox = document.getElementsByClassName("msg-chat-box", chatDiv)[0];var chatTop = document.getElementsByClassName("chat-top", chatBox)[0];Drag.makeDraggable(chatBox, chatTop);chatBox.onDragEnd = function() { Messaging.saveCookie(); };// Coloca o chat no topo do viewport do usuario.chatBox.style.top  = document.body.scrollTop;chatBox.style.left = document.body.scrollLeft;// seta o focus para o typeAreajQuery(chatBox).click(function(){jQuery(this).find(".msg-type-area").focus();})chatDiv.removeChild(chatBox);this.mainDiv.appendChild(chatBox);return chatBox;},error : function() {alert("User does not exist");},init : function(userId) {var body = document.getElementsByTagName("body")[0];var mainDiv = $("messaging-main-div");this.userId = userId;if (mainDiv == null) {mainDiv = document.createElement("div");mainDiv.id = "messaging-main-div";Element.setStyle(mainDiv, {left: 0,position: "absolute",textAlign: "left",top: 0,width: "100%",zIndex: ZINDEX.CHAT_BOX});body.insertBefore(mainDiv, body.childNodes[0]);}this.mainDiv = mainDiv;var msgJSON = Cookie.read(this.userId + "_chats");if (msgJSON) {var chatArray = $J(decodeURIComponent(msgJSON));chatArray.each(function(item){Messaging.msgQueue.push(item);});Messaging.chat();}this.initialized = true;Messaging.getChats();},maximizeChat : function(id) {var chatBox = $(id);var widthDiv = document.getElementsByClassName("msg-chat-box-width")[0];var chatArea = document.getElementsByClassName("msg-chat-area")[0];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 = $(id);var widthDiv = document.getElementsByClassName("msg-chat-box-width")[0];var chatArea = document.getElementsByClassName("msg-chat-area")[0];widthDiv.style.width = 250 + "px";chatArea.style.height = 100 + "px";},removeChat : function(id) {var chatBox = $(id);Element.remove(chatBox);this.saveCookie();},saveCookie : function() {var chatList = document.getElementsByClassName("msg-chat-box", this.mainDiv);var chatArray = new Array();var chatArrayJSON = "";chatList.each(function(item){var msgObj = new Object();//msgObj.toName = document.getElementsByClassName("msg-to-name", item)[0].innerHTML;msgObj.toName = jQuery(item).find(".msg-to-name").html();//msgObj.toId = document.getElementsByClassName("msg-to-input-id", item)[0].value;msgObj.toId = jQuery(item).find(".msg-to-input-id").val();msgObj.top = parseInt(jQuery(item).css("top"), 10);msgObj.left = parseInt(jQuery(item).css("left"), 10);//msgObj.messages = document.getElementsByClassName("msg-chat-area", item)[0].innerHTML;var messages = jQuery(item).find(".msg-chat-area").html();if (messages) msgObj.messages = messages.replace(/[\n\r]/g, " ");if (!msgObj.toName || !msgObj.toId) return;chatArray.push(msgObj);chatArrayJSON = "[{messages: '"+msgObj.messages+"', toName: '"+msgObj.toName+"', toId: '"+msgObj.toId+"', top: '"+msgObj.top+"', left: '"+msgObj.left+"'}]";Messaging.json = chatArrayJSON;})Cookie.create(this.userId + "_chats", encodeURIComponent( chatArrayJSON ), 99);},sendChat : function(obj, e) {var keycode;var chatBox = jQuery(obj).parents(".msg-chat-box").get(0);if (window.event) keycode = window.event.keyCode;else if (e) keycode = e.which;else return;if (keycode == 13) {Messaging.doSendChat(chatBox)}},doSendChat: function(chatBox){var toInput;var toAddr;var typeArea;var chatArea;var query = "cmd=sendChat";var inputList = jQuery(chatBox).find("input");inputList.each(function(){if (jQuery(this).attr("class") != "") {if (jQuery(this).hasClass("msg-to-input-id"))  toInput = jQuery(this);if (jQuery(this).hasClass("msg-to-input-addr"))  toAddr = jQuery(this);if (jQuery(this).hasClass("msg-type-area"))  typeArea = jQuery(this);}});if (typeArea.val() == "") 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];}var msg = Messaging.breakMsg(typeArea.val())query += "&text=" + encodeURIComponent(msg);if (toAddr != null) {query += "&tempId=" + toInput.val() + "&toAddr=" + toAddr.val();}else {query += "&toId=" + toInput.val();}loadPage(themeDisplay.getPathMain() + "/messaging/action", query, Messaging.sendChatReturn);//chatArea.innerHTML += "<span style='color: #0000FF'>Eu: </span>" + typeArea.val() + "<br/>";chatArea.innerHTML += "<span class='chat-msg chat-msg-me'><span class='chat-msg-nick'>Eu: </span><span class='chat-msg-body'>" + msg + "</span></span>";chatArea.scrollTop = chatArea.scrollHeight;typeArea.val("");Messaging.saveCookie();},sendChatReturn : function(xmlHttpReq) {var msg = eval("(" + xmlHttpReq.responseText + ")");if (msg.status == "success") {Messaging.populateChatBox(msg);}else {Messaging.error();}},breakMsg : function(str, r) {r = r || 15;var t = str.length, out = "";for (var i = 0; i < Math.ceil(t/r); i++)out = [ out, [str.slice(i*r, i*r+r), i*r+r >= t ? "" : "<wbr/>"].join("") ].join("");return out;	}}var MessagingRoster = {debug:false,highlightColor : "",lastSelected : null,addEntry : function(userId) {var url;if (userId) {url = "/chat/ServletChatRoster?cmd=addEntry&userId=" + userId;}else {var email = jQuery("#addUsers .list-item-selected .addUsers-email").html();url = "/chat/ServletChatRoster?cmd=addEntry&email=" + email;}AjaxUtil.request(url, {onComplete: MessagingRoster.addEntryReturn});},addEntryReturn : function(xmlHttpReq) {MessagingRoster.search();try {var msg = eval("(" + xmlHttpReq.responseText + ")");if (msg.status == "failure") {alert("No such user exists");}else {var rosterDiv = jQuery(".chat-list-body");if (rosterDiv) {var entries = jQuery(".portlet-chat-roster-entry");var userId = msg.user;var userExists = entries.each(function() {return jQuery(this).attr("userId") == userId;});if (!userExists || entries.length == 0) {var mapaTemp;if(msg.info)mapaTemp = msg.info;var entryRow = MessagingRoster.createEntryRow(msg.user, msg.name, false, mapaTemp);rosterDiv.find("#offline-group").append(entryRow);rosterDiv.css({visibility: "visible"});	}MessagingRoster.hide();}}}catch (err) {}},notAcceptEntry : function(userId) {MessagingRoster.deleteFunction(userId);},createEntryRow : function (userId, userName, online, mapaInfo) {try{var ondblclick="";if(online && mapaInfo && mapaInfo.inscricao &&mapaInfo.inscricao == "inscrito"){			ondblclick = "Messaging.chat({toId: '"+userId+"', toName: '"+userName+"'});";}var tempDiv = jQuery("<div userId='"+userId+"' username='"+userName+"' ondblclick=\""+ondblclick+"\" onclick='MessagingRoster.onEntryClick(this);' class='portlet-chat-roster-entry chat-list-item' userName='"+userName+"'></div>");//var src = themeDisplay.getPathThemeImage() + "/chat/user_offline.gif";//if (online)//src = themeDisplay.getPathThemeImage() + "/chat/user_online.gif";//chat-list-item-imgvar tempImg = jQuery("<div class='chat-list-item-img'></div>");var tempImgDiv = tempImg.append("<div class='chat-list-item-img-div'></div>");if (online)tempImgDiv.addClass("chat-status-img-online");elsetempImgDiv.addClass("chat-status-img-offline");var tempNick = jQuery("<span onselectstart='return false;' class='chat-list-item-msg'><span class='chat-list-item-nick'>"+userName+"</span></span>");jQuery(tempDiv).append(tempImg);jQuery(tempDiv).append(tempNick);if(MessagingRoster.debug === true && online && mapaInfo && mapaInfo.inscricao && jQuery('#iddebug').get(0))jQuery('#iddebug').get(0).innerHTML += "<BR>>>>>>Informações: " + userName +  " | " + mapaInfo.inscricao;if(mapaInfo && mapaInfo.inscricao){if (mapaInfo.inscricao == "pedido_inscricao") {var comunicar = jQuery("<span class='messagingroster-messages'>"+MessagingRoster.messages.wishToComunicate+"</span>");var accept = jQuery("<a style='padding-left: 8px; font-style: normal;' onclick=\"MessagingRoster.decideAddOrDelete('"+userId+"', '"+userName+"','accept')\">Aceitar</a> / <a onclick=\"MessagingRoster.decideAddOrDelete('"+userId+"', '"+userName+"','false')\">Recusar</a>").css({}).appendTo(comunicar);jQuery(tempNick).append(comunicar);}if(mapaInfo.inscricao == "pedido_inscricao_nao_recebido"){var comunicar = jQuery("<span class='messagingroster-messages'>"+MessagingRoster.messages.inviteNotReceivedYet+"</span>");jQuery(tempNick).append(comunicar);}if(mapaInfo.inscricao == "nao_inscrito"){jQuery(tempNick).append("<span class='messagingroster-messages'>"+MessagingRoster.messages.inviteReceived+"</span>");}//if(online == false && mapaInfo.inscricao == "inscrito"){			//	jQuery(tempNick).append(MessagingRoster.messages.offline);//}}return tempDiv.get(0);}catch(err){alert(err);}},decideAddOrDelete : function(userId, userName, decision){/*if(confirm(MessagingRoster.messages.wishAddUser + " \""+userName+"\" " + MessagingRoster.messages.toYourContactsList) === true){MessagingRoster.addEntry(userId);}else{if(confirm(MessagingRoster.messages.wishKeepUserInvite + " \""+userName+"\" " + MessagingRoster.messages.toDecideAtOtherMoment) === false){MessagingRoster.notAcceptEntry(userId);MessagingRoster.getEntries();}}*/if (decision == "accept")MessagingRoster.addEntry(userId);else {if( confirm(MessagingRoster.messages.refuseInviteConfirmation) === true ){MessagingRoster.notAcceptEntry(userId);MessagingRoster.getEntries();}}},deleteEntries : function () {if (MessagingRoster.lastSelected) {var userId = jQuery(MessagingRoster.lastSelected).attr('userId'); var lastSelected = MessagingRoster.lastSelected;lastSelected.parentNode.removeChild(lastSelected);MessagingRoster.lastSelected = null;MessagingRoster.deleteFunction(userId);}},deleteFunction: function(userId){loadPage("/chat/ServletChatRoster", "cmd=deleteEntries&entries=" + userId, MessagingRoster.deleteEntriesReturn);},deleteEntriesReturn : function (xmlHttpReq) {try {var msg = eval("(" + xmlHttpReq.responseText + ")");MessagingRoster.search();}catch (err) {}},getEntries : function() {var url = "/chat/ServletChatRoster?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(".chat-list-body");var onlineDiv = jQuery('#online-group');var offlineDiv = jQuery('#offline-group');if (rosterDiv != null) {//rosterDiv.find(".chat-list-group-cont").html("");//onlineDiv.html("");//offlineDiv.html("");}else {Messaging.checkRoster = false;return;}if (jQuery('#chat-search-input').val()) return;onlineDiv.empty();offlineDiv.empty();for (var i = 0; i < roster.length; i++) {var entry = roster[i];var mapaInfo;var online = entry.status == "available";if(entry.info)mapaInfo = entry.info;var tempDiv = MessagingRoster.createEntryRow(entry.user, entry.name, online, mapaInfo);var adiv = (online ? onlineDiv : offlineDiv);adiv.append(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 (div) {if (MessagingRoster.lastSelected != null) {//MessagingRoster.lastSelected.style.backgroundColor = "transparent";}//div.style.backgroundColor = MessagingRoster.highlightColor;// HighlightjQuery(".chat-list-item").removeClass("list-item-selected");jQuery(div).addClass("list-item-selected");MessagingRoster.lastSelected = div;/***	Durante x segundos o ReverseAjax nao pode submeter nenhuma requisição *	ao o servidor para dar tempo ao usuário de acionar alguma funcao do usuário*	clicado na lista*/ReverseAjax.canUpdate = false;setTimeout("MessagingRoster.onEntryClickTimeExpire()", 8000); },onEntryClickTimeExpire: function(){/***	Após os x segundos passados o ReverseAjax pode, novamente, submeter requisições*	ao o servidor*/ReverseAjax.canUpdate = true;},onEntryLinkClick : function () {var parent = this.parentNode;Messaging.chat({toId: parent.userId, toName: parent.userName});},toggleEmail : function() {emailDiv = $("portlet-chat-roster-email-div");if (emailDiv.style.display == "none") {MessagingRoster.show();}else {MessagingRoster.hide();}},show : function(){emailDiv = $("portlet-chat-roster-email-div");emailDiv.style.display = "block";emailInput = $("portlet-chat-roster-email");emailInput.value = "";emailInput.focus();},hide : function(){emailDiv = $("portlet-chat-roster-email-div");emailDiv.style.display = "none";}}MessagingRoster.messages = {wishToComunicate : " Deseja se comunicar com você",inviteReceived : " Recebeu o seu convite (Em espera de aprovação)",inviteNotReceivedYet : " Ainda não recebeu seu convite",wishAddUser: " Deseja adicionar o usuário",toYourContactsList : " à sua lista de contatos?",wishKeepUserInvite: " Deseja manter o convite do usuário",toDecideAtOtherMoment: " para decidir em outro momento?",refuseInviteConfirmation: "Tem certeza que deseja recusar este convite?",offline: " (Desconectado)"}
