Liferay.Mail = { init: function(params) { var instance = this; instance.namespace = params.namespace; instance._synchronizeInterval = params.synchronizeInterval; // Commonly used jQuery expressions instance.accountContainerDiv = jQuery('#' + instance.namespace + 'account-container'); instance.accountSelectionSelect = jQuery('#' + instance.namespace + 'account-selection'); instance.composeMailLink = jQuery('#' + instance.namespace + 'compose-mail'); instance.configurationPromptDiv = jQuery('#' + instance.namespace + 'configuration-prompt'); instance.emailContainerDiv = jQuery('#' + instance.namespace + 'email-container'); instance.folderDiv = jQuery('#' + instance.namespace + 'folder'); instance.foldersDiv = jQuery('#' + instance.namespace + 'folders'); instance.folderControlsDeleteButton = jQuery('.folder-controls .delete'); instance.folderControlsNewestLink = jQuery('.folder-controls .newest'); instance.folderControlsNewerLink = jQuery('.folder-controls .newer'); instance.folderControlsOlderLink = jQuery('.folder-controls .older'); instance.folderControlsOldestLink = jQuery('.folder-controls .oldest'); instance.folderControlsSelectAction = jQuery('.folder-controls .select-actions'); instance.folderControlsSelectAllLink = jQuery('.folder-controls .select-all'); instance.folderControlsSelectNoneLink = jQuery('.folder-controls .select-none'); instance.folderControlsSelectReadLink = jQuery('.folder-controls .select-read'); instance.folderControlsSelectUnreadLink = jQuery('.folder-controls .select-unread'); instance.messageControlsBackLink = jQuery('.message-controls .back'); instance.messageControlsDiv = jQuery('.message-controls'); instance.messageControlsNewerLink = jQuery('.message-controls .newer'); instance.messageControlsOlderLink = jQuery('.message-controls .older'); instance.messageControlsStatus = jQuery('.message-controls .status'); instance.messageDiv = jQuery('#' + instance.namespace + 'message'); instance.messageListTable = jQuery('#' + instance.namespace + 'message-list'); instance.messageOptionsDiv = jQuery('#' + instance.namespace + 'messageOptions'); instance.messageOptionsRespondDivs = jQuery('#' + instance.namespace + 'reply,#' + instance.namespace + 'reply-all,#' + instance.namespace + 'forward'); instance.messageReadDiv = jQuery('#' + instance.namespace + 'messageRead'); instance.messageSendDiv = jQuery('#' + instance.namespace + 'messageSend'); instance.messageSendDiscardButton = jQuery('#' + instance.namespace + 'messageSend .discard'); instance.messageSendSaveButton = jQuery('#' + instance.namespace + 'messageSend .save'); instance.messageSendSendButton = jQuery('#' + instance.namespace + 'messageSend .send'); instance.searchButton = jQuery('#' + instance.namespace + 'search-button'); instance.searchTextInput = jQuery('#' + instance.namespace + 'search-text'); instance.sendAttachmentsFile = jQuery('#' + instance.namespace + 'sendAttachments'); instance.sendBccInput = jQuery('#' + instance.namespace + 'sendBcc'); instance.sendBodyEditor = params.sendBodyEditor; instance.sendBodySpan = jQuery('.send-body-span'); instance.sendBodyHidden = jQuery('#' + instance.namespace + 'sendBody'); instance.sendCcInput = jQuery('#' + instance.namespace + 'sendCc'); instance.sendDraftMessageUidHidden = jQuery('#' + instance.namespace + 'sendDraftMessageUid'); instance.sendEmailAddressHidden = jQuery('#' + instance.namespace + 'sendEmailAddress'); instance.sendFolderNameHidden = jQuery('#' + instance.namespace + 'sendFolderName'); instance.sendForm = jQuery('#' + instance.namespace + 'fm'); instance.sendFromSelect = jQuery('#' + instance.namespace + 'sendFrom'); instance.sendMessageHidden = jQuery('#' + instance.namespace + 'sendMessage'); instance.sendMessageTypeHidden = jQuery('#' + instance.namespace + 'sendMessageType'); instance.sendMessageUidHidden = jQuery('#' + instance.namespace + 'sendMessageUid'); instance.sendSubjectInput = jQuery('#' + instance.namespace + 'sendSubject'); instance.sendToInput = jQuery('#' + instance.namespace + 'sendTo'); instance.statusSpan = jQuery('#' + instance.namespace + 'status'); instance.readBodySpan = jQuery('#' + instance.namespace + 'read-body'); instance.readCcSpan = jQuery('#' + instance.namespace + 'read-cc'); instance.readDateSpan = jQuery('#' + instance.namespace + 'read-date'); instance.readFromSpan = jQuery('#' + instance.namespace + 'read-from'); instance.readMailedBySpan = jQuery('#' + instance.namespace + 'read-mailed-by'); instance.readReplyToSpan = jQuery('#' + instance.namespace + 'read-reply-to'); instance.readSubjectSpan = jQuery('#' + instance.namespace + 'read-subject'); instance.readToSpan = jQuery('#' + instance.namespace + 'read-to'); // Init methods instance._messagesPerPage = params.messagesPerPage; instance._assignEvents(); instance.loadAccounts(); }, clearIncomingMessage: function() { var instance = this; instance.setCurrentMessage(''); instance.readFromSpan.html(''); instance.readReplyToSpan.html(''); instance.readToSpan.html(''); instance.readDateSpan.html(''); instance.readSubjectSpan.html(''); instance.readMailedBySpan.html(''); instance.readBodySpan.html(''); }, clearMessages: function() { var instance = this; instance.setTotalPages(0); instance.setTotalMessages(0); instance.clearStatus(); if ((instance.getCurrentFolderName() == '') || instance.getCurrentFolderName() == null) { instance.messageListTable.html('' + Liferay.Language.get('you-have-successfully-added-a-new-email-account') + ''); } else { instance.messageListTable.html('' + Liferay.Language.get('no-messages-found') + ''); } instance.refreshMessageHandler(); instance.refreshFolderControls(); }, clearOutgoingMessage: function() { var instance = this; instance.messageOptionsRespondDivs.removeClass('selected-response-type results-header'); instance.sendBccInput.val(''); instance.sendBodySpan.hide(); instance.sendCcInput.val(''); instance.sendDraftMessageUidHidden.val(''); instance.sendEmailAddressHidden.val(''); instance.sendFolderNameHidden.val(''); instance.sendFromSelect.val(''); instance.sendSubjectInput.val(''); instance.sendToInput.val(''); instance.sendMessageTypeHidden.val(''); instance.sendMessageUidHidden.val(''); }, clearStatus: function() { var instance = this; instance.setStatus(''); instance.statusSpan.hide(); }, deleteMessages: function(messageUids, preMessage, success) { var instance = this; // Get JSON instance.setStatus(preMessage); jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/messages_delete_by_uid', data: { emailAddress: instance.getCurrentEmailAddress(), folderName: instance.getCurrentFolderName(), messageUids: messageUids }, dataType: 'json', success: success, type: 'POST' } ); }, getCurrentEmailAddress: function() { var instance = this; return instance._currentEmailAddress; }, getCurrentFolder: function() { var instance = this; if ((instance._jsonFolders == null) || (instance._jsonFolders == '')) { return null; } for (i = 0; i < instance._jsonFolders.length; i++) { var folder = instance._jsonFolders[i]; if (folder.fullName == instance.getCurrentFolderName()) { return folder; } } return null; }, getCurrentFolderName: function() { var instance = this; return instance._currentFolderName; }, getCurrentMessage: function() { var instance = this; return instance._currentMessage; }, getCurrentMessageUid: function() { var instance = this; return instance.getCurrentMessage().uid; }, getCurrentPageNumber: function() { var instance = this; return instance._currentPageNumber; }, getFirstMessageNumOnPage: function() { var instance = this; return (instance.getCurrentPageNumber() - 1) * instance.getMessagesPerPage() + 1; }, getLastMessageNumOnPage: function() { var instance = this; if (instance.getTotalPages() == instance.getCurrentPageNumber()) { return instance.getTotalMessages(); } else { return (instance.getCurrentPageNumber()) * instance.getMessagesPerPage(); } }, getMessageResponseType: function() { var instance = this; return instance._messageResponseType; }, getMessagesPerPage: function() { var instance = this; return instance._messagesPerPage; }, getSelectedMessageUids: function() { var instance = this; var checkedBoxes = jQuery('.message-checkbox:checked'); var messageUids = ''; jQuery.each(checkedBoxes, function() { messageUids += jQuery(this).parents('.message:first').attr('messageuid') + ','; }); return messageUids; }, getTotalMessages: function() { var instance = this; return instance._totalMessages; }, getTotalPages: function() { var instance = this; return instance._totalPages; }, getView: function() { var instance = this; return instance._currentView; }, isAccountInitialized: function(emailAddress) { var instance = this; for (i = 0; i < instance._accounts.length; i++) { var account = instance._accounts[i]; var tempEmailAddress = account.emailAddress; if (tempEmailAddress == emailAddress) { return account.initialized; } } return false; }, isSearchMode: function() { return _isSearchMode; }, loadAccounts: function() { var instance = this; instance.setStatus(Liferay.Language.get('loading-accounts')); jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/accounts', dataType: 'json', success: function(jsonAccounts) { instance.loadJsonAccounts(jsonAccounts); }, type: 'POST' } ); }, loadFolders: function(emailAddress, silentUpdate) { var instance = this; // Set account id instance.setCurrentEmailAddress(emailAddress); // Get JSON if (!silentUpdate) { instance.setStatus(Liferay.Language.get('loading-folders')); } jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/folders', data: { emailAddress: emailAddress }, dataType: 'json', success: function(jsonFolders) { instance.loadJsonFolders(jsonFolders, silentUpdate); if (!silentUpdate) { instance.accountSelectionSelect.val(emailAddress); instance.sendFromSelect.val(emailAddress); } }, type: 'POST' } ); }, loadJsonAccounts: function(jsonAccounts) { var instance = this; instance.clearStatus(); // Prompt user to setup accounts if none are configured if (jsonAccounts.accounts.length == 0) { instance.setView('viewAccountConfiguration'); jQuery('.has-accounts').hide(); jQuery('.has-no-accounts').show(); return false; } else { jQuery('.has-accounts').show(); jQuery('.has-no-accounts').hide(); } instance._accounts = jsonAccounts.accounts; // Parse JSON var htmlAccountList = ''; var firstEmailAddress = jsonAccounts.accounts[0].emailAddress; for (i = 0; i < jsonAccounts.accounts.length; i++) { var account = jsonAccounts.accounts[i]; var tempEmailAddress = account.emailAddress; htmlAccountList += ''; // Auto update accounts instance.sendUpdateMessage(tempEmailAddress, false); } // Inject HTML instance.accountSelectionSelect.html(htmlAccountList); instance.sendFromSelect.html(htmlAccountList); // Refresh folder handlers instance.setCurrentEmailAddress(firstEmailAddress); instance.loadFolders(firstEmailAddress, false); }, loadJsonFolders: function(jsonFolders, silentUpdate) { var instance = this; if (!silentUpdate) { instance.clearStatus(); } // Save folders in variable if ((jsonFolders != null) && (jsonFolders != '')) { instance._jsonFolders = jsonFolders.folders; } // Parse JSON var htmlFolderList = ''; for (i = 0; i < jsonFolders.folders.length; i++) { var folder = jsonFolders.folders[i]; var fullName = folder.fullName; var name = folder.name; var htmlFolder = '
' + name + '
'; if (fullName.toLowerCase() == "inbox") { htmlFolderList = htmlFolder + '
' + htmlFolderList; } else { htmlFolderList = htmlFolderList + htmlFolder; } } // Add status message if account is not fully initialized if (!instance.isAccountInitialized(instance.getCurrentEmailAddress())) { htmlFolderList = htmlFolderList + '
' + Liferay.Language.get('loading-folders') + '
'; // Refresh folders setTimeout('Liferay.Mail.loadFolders(Liferay.Mail.getCurrentEmailAddress(), true)', 10000); } // Inject HTML instance.foldersDiv.html(htmlFolderList); // Refresh style for selected folder if (instance.getView() == 'composeMessage') { jQuery('.folder').removeClass('folder-selected results-header'); instance.composeMailLink.addClass('folder-selected results-header'); } else { jQuery(".folder[folderName='" + instance.getCurrentFolderName() + "']").addClass('folder-selected results-header'); instance.composeMailLink.removeClass('folder-selected results-header'); } // Refresh folder handlers instance.refreshFolderHandler(); if (!silentUpdate) { instance.clearMessages(); instance.setView('viewFolder'); jQuery('.folder:first').click(); } }, loadJsonMessage: function(jsonMessage) { var instance = this; instance.setCurrentMessage(jsonMessage); instance.clearStatus(); // Parse JSON object var msg = jsonMessage; var msgUid = msg.uid; var msgFrom = msg.from; var msgTo = msg.to; var msgCc = msg.cc; var msgBcc = msg.bcc; var msgSubject = msg.subject; var msgBodyPreview = msg.bodyPreview; var msgBody = msg.body; var msgDate = msg.date; // Add links to attachments var msgAttachments = msg.attachments; if (msgAttachments != null) { if (msgAttachments.length > 0) { msgBody += '

' + msgAttachments.length + ' attachments
'; } var draftsFolder = instance.getCurrentFolderName().toLowerCase().indexOf('drafts') != -1; if (true) { // Inject HTML instance.readFromSpan.html(msgFrom); instance.readReplyToSpan.html('-'); instance.readToSpan.html(msgTo); instance.readCcSpan.html(msgCc); instance.readDateSpan.html(msgDate); instance.readSubjectSpan.html(msgSubject); instance.readMailedBySpan.html('-'); instance.readBodySpan.html(msgBody); // Update other HTML jQuery('.message-controls .folder-name').html(instance.getCurrentFolderName()); instance.setView('viewMessage'); // Update message navigation instance.refreshMessageControlsNavigation(); // Update read status instance.setMessageFlags(msgUid, 'seen', 'true', false); } else { // Load draft instance.setView('composeMessage'); instance.sendBccInput.val(msgBcc); instance.sendBodyEditor.setHTML(msgBody); instance.sendCcInput.val(msgCc); instance.sendDraftMessageUidHidden.val(msgUid); instance.sendFromSelect.val(msgFrom); instance.sendSubjectInput.val(msgSubject); instance.sendToInput.val(msgTo); } }, loadJsonMessages: function(jsonMessages) { var instance = this; instance.setTotalPages(jsonMessages.pageCount); instance.setTotalMessages(jsonMessages.messageCount); instance.clearStatus(); // Parse JSON var htmlMessageList = ''; if (jsonMessages.messages.length == 0) { if (instance.getCurrentPageNumber() == 1) { htmlMessageList += '' + Liferay.Language.get('no-messages-found') + ''; } else { htmlMessageList += '' + Liferay.Language.get('x-of-the-emails-in-this-folder-have-been-downloaded', [instance.getCurrentFolder().percentageDownloaded]) + ''; } } else { for (i = (jsonMessages.messages.length - 1); i >= 0; i--) { var msg = jsonMessages.messages[i]; if (msg.flags.seen) { htmlMessageList += ''; } else { htmlMessageList += ''; } htmlMessageList += '
'; htmlMessageList += '
' + msg.from + '
'; htmlMessageList += '
' + msg.subject + ' - ' + msg.bodyPreview + '
'; htmlMessageList += '
' + msg.date + '
'; htmlMessageList += ''; } } // Inject HTML instance.messageListTable.html(htmlMessageList); // Refresh html and event handlers instance.refreshMessageHandler(); instance.refreshFolderControls(); instance.setView('viewFolder'); }, loadMessageRelativeToUid: function(messageUid, offset) { var instance = this; // Get JSON var searchStringVal = ''; if (instance.isSearchMode()) { searchStringVal = instance.searchTextInput.val(); } instance.setStatus(Liferay.Language.get('loading-message')); jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/message_relative_to_uid', data: { emailAddress: instance.getCurrentEmailAddress(), folderName: instance.getCurrentFolderName(), messageUid: messageUid, offset: offset, searchString: searchStringVal }, dataType: 'json', success: function(jsonMessage) { if (jsonMessage != null) { instance.loadJsonMessage(jsonMessage); } }, type: 'POST' } ); }, loadMessagesByPage: function(folderName, pageNumber) { var instance = this; // Set folder and page number instance.setCurrentPageNumber(pageNumber); instance.setCurrentFolderByName(folderName); var emailAddress = instance.getCurrentEmailAddress(); // Get JSON instance.setStatus(Liferay.Language.get('loading-messages')); jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/messages_by_page', data: { emailAddress: instance.getCurrentEmailAddress(), folderName: folderName, pageNumber: pageNumber, messagesPerPage: instance.getMessagesPerPage() }, dataType: 'json', success: function(jsonMessages) { instance.loadJsonMessages(jsonMessages); }, type: 'POST' } ); }, loadMessagesBySearch: function(folderName, pageNumber, searchString) { var instance = this; // Set folder and page number instance.setCurrentPageNumber(pageNumber); instance.setCurrentFolderByName(folderName); // Get JSON instance.setStatus(Liferay.Language.get('loading-messages')); jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/messages_by_search', data: { emailAddress: instance.getCurrentEmailAddress(), folderName: folderName, pageNumber: pageNumber, messagesPerPage: instance.getMessagesPerPage(), searchString: searchString }, dataType: 'json', success: function(jsonMessages) { instance.loadJsonMessages(jsonMessages); }, type: 'POST' } ); }, refreshFolderControls: function() { var instance = this; // Folder Navigation instance.folderControlsNewestLink.css('display', 'inline'); instance.folderControlsNewerLink.css('display', 'inline'); instance.folderControlsOlderLink.css('display', 'inline'); instance.folderControlsOldestLink.css('display', 'inline'); if (instance.getTotalPages() == 0) { // No pages instance.folderControlsNewestLink.hide(); instance.folderControlsNewerLink.hide(); instance.folderControlsOlderLink.hide(); instance.folderControlsOldestLink.hide(); // Update page range count status jQuery('.folder-controls .status').html(''); } else { // On first page if (instance.getCurrentPageNumber() == 1) { instance.folderControlsNewestLink.hide(); instance.folderControlsNewerLink.hide(); } // On second page if (instance.getCurrentPageNumber() == 2) { instance.folderControlsNewestLink.hide(); } // On second to last page if (instance.getCurrentPageNumber() == instance.getTotalPages() - 1) { instance.folderControlsOldestLink.hide(); } // On last page if (instance.getCurrentPageNumber() == instance.getTotalPages()) { instance.folderControlsOlderLink.hide(); instance.folderControlsOldestLink.hide(); } // Update page range count status jQuery('.folder-controls .status').html('' + instance.getFirstMessageNumOnPage() + ' - ' + instance.getLastMessageNumOnPage() + ' of ' + instance.getTotalMessages() + ''); } // Folder Options instance.folderControlsSelectAction.val('none'); }, refreshFolderHandler: function() { var instance = this; jQuery('.folder').click(function () { var folderClicked = jQuery(this); var folderName = folderClicked.attr('folderName'); // Load message list instance.setSearchMode(false); instance.loadMessagesByPage(folderName, 1); // Show message list instance.setView('viewFolder'); // Reset and set backgrounds jQuery('.folder').removeClass('folder-selected results-header'); instance.composeMailLink.removeClass('folder-selected results-header'); folderClicked.addClass('folder-selected results-header'); return false; }); }, refreshMessageControlsNavigation: function() { var instance = this; instance.messageControlsNewerLink.css('display', 'inline'); instance.messageControlsOlderLink.css('display', 'inline'); // If on first message if (instance.getCurrentMessage().messageNumber == instance.getTotalMessages()) { instance.messageControlsNewerLink.hide(); instance.messageControlsOlderLink.css('display', 'inline'); } // If on last message if (instance.getCurrentMessage().messageNumber == 1) { instance.messageControlsNewerLink.css('display', 'inline'); instance.messageControlsOlderLink.hide(); } // Update page count status var msgNumberDisplayed = parseInt(instance.getTotalMessages()) - parseInt(instance.getCurrentMessage().messageNumber) + 1; instance.messageControlsStatus.html('' + msgNumberDisplayed + ' of ' + instance.getTotalMessages() + ''); }, refreshMessageHandler: function() { var instance = this; jQuery('.message td:not(:first-child)').click(function () { // Load message var messageUid = jQuery(this).parent('.message:first').attr('messageUid'); instance.loadMessageRelativeToUid(messageUid, 0); // Show message instance.setView('viewMessage'); return false; }); }, saveOrSendMessage: function(send) { var instance = this; // Set flag to determine whether to save or send the message if (send) { instance.sendMessageHidden.val('true'); } else { instance.sendMessageHidden.val('false'); } var fromEmailAddress = instance.sendFromSelect.val(); var folderNameVal = ''; var messageUidVal = 0; if (instance.getMessageResponseType() != 'new') { folderNameVal = instance.getCurrentFolderName(); messageUidVal = instance.getCurrentMessageUid(); } instance.sendBodyHidden.val(instance.sendBodyEditor.getHTML()); instance.sendEmailAddressHidden.val(fromEmailAddress); instance.sendFolderNameHidden.val(folderNameVal); instance.sendMessageTypeHidden.val(instance.getMessageResponseType()); instance.sendMessageUidHidden.val(messageUidVal); instance.sendForm.submit(); instance.clearStatus(); }, sendUpdateMessage: function(emailAccount, loadMessages) { var instance = this; if (loadMessages) { instance.setStatus(Liferay.Language.get('getting-new-mail')); } jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/synchronize_account', data: { emailAddress: emailAccount }, dataType: 'json', success: function(jsonAccounts) { // If looking at a folder, auto update data if (instance.getView() == 'viewFolder') { // Automatically update folder listing instance.loadFolders(instance.getCurrentEmailAddress(), true); if (instance.getCurrentFolderName() == null) { jQuery('.folder:first').click(); } } if (loadMessages) { instance.loadMessagesByPage(instance.getCurrentFolderName(), instance.getCurrentPageNumber()); instance.clearStatus(); } else { setTimeout('Liferay.Mail.sendUpdateMessage(\'' + emailAccount + '\', false)', instance._synchronizeInterval * 60000); } }, type: 'POST' } ); }, setCurrentEmailAddress: function(emailAddress) { var instance = this; instance._currentEmailAddress = emailAddress; }, setCurrentFolderByName: function(folderName) { var instance = this; instance._currentFolderName = folderName; }, setCurrentMessage: function(jsonMessage) { var instance = this; instance._currentMessage = jsonMessage; }, setCurrentPageNumber: function(pageNumber) { var instance = this; instance._currentPageNumber = pageNumber; }, setMessageFlags: function(messageUids, flag, value, reloadMessages) { var instance = this; jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/flag_messages', data: { emailAddress: instance.getCurrentEmailAddress(), folderName: instance.getCurrentFolderName(), messageUids: messageUids, flag: flag, value: value }, dataType: 'json', success: function(jsonSuccess) { if (reloadMessages) { instance.loadMessagesByPage(instance.getCurrentFolderName(), instance.getCurrentPageNumber()); } instance.clearStatus(); }, type: 'POST' } ); }, setMessageResponseType: function(responseType) { var instance = this; // Possible values include: 'reply', 'forward' and 'new' instance._messageResponseType = responseType; }, setSearchMode: function(isSearchMode) { _isSearchMode = isSearchMode; }, setStatus: function(message) { var instance = this; instance.statusSpan.css('display', 'inline'); instance.statusSpan.html(message); }, setTotalMessages: function(totalMessages) { var instance = this; instance._totalMessages = totalMessages; }, setTotalPages: function(totalPages) { var instance = this; instance._totalPages = totalPages; }, setView: function(viewMode) { var instance = this; instance._currentView = viewMode; // Hide everything instance.configurationPromptDiv.hide(); instance.folderDiv.hide(); instance.messageDiv.hide(); instance.messageControlsDiv.hide(); instance.messageReadDiv.hide(); instance.messageOptionsDiv.hide(); instance.messageSendDiv.hide(); // Show desired windows if (viewMode == 'viewAccountConfiguration') { instance.accountContainerDiv.hide(); instance.configurationPromptDiv.show(); instance.emailContainerDiv.hide(); } else { instance.accountContainerDiv.show(); instance.emailContainerDiv.show(); if (viewMode == 'viewFolder') { instance.clearIncomingMessage(); instance.folderDiv.show(); } else { instance.clearOutgoingMessage(); instance.messageDiv.show(); jQuery('#' + instance.namespace + 'message-options td').css('background-color', '#F7F7F7'); if (viewMode == 'viewMessage') { instance.messageControlsDiv.show(); instance.messageReadDiv.show(); instance.messageOptionsDiv.show(); } else if (viewMode == 'replyOrForwardMessage') { instance.messageControlsDiv.show(); instance.messageReadDiv.show(); instance.messageOptionsDiv.show(); instance.messageSendDiv.show(); } else if (viewMode == 'composeMessage') { instance.clearOutgoingMessage(); instance.messageSendDiv.show(); try { instance.sendBodySpan.show(); //instance.sendBodyEditor.setHTML(''); } catch (ex) { } } } } }, _assignEvents: function() { var instance = this; instance.accountSelectionSelect.change(function() { var newEmailAddress = jQuery(this).val(); instance.loadFolders(newEmailAddress, false); }); instance.composeMailLink.click(function() { instance.setView('composeMessage'); instance.setMessageResponseType('new'); instance.sendBodyEditor.setHTML(''); instance.setCurrentMessage(''); // Reset and set backgrounds jQuery('.folder').removeClass('folder-selected results-header'); instance.composeMailLink.addClass('folder-selected results-header'); return false; }); instance.folderControlsDeleteButton.click(function() { var messageUids = instance.getSelectedMessageUids(); var preMessage = Liferay.Language.get('deleting-messages'); instance.deleteMessages( messageUids, preMessage, function(jsonResult) { instance.sendUpdateMessage(instance.getCurrentEmailAddress(), true); instance.setStatus(Liferay.Language.get('messages-have-been-deleted')); } ); }); instance.folderControlsNewerLink.click(function() { var pageNumber = parseInt(instance.getCurrentPageNumber()) - 1; if (instance.isSearchMode()) { instance.loadMessagesBySearch(instance.getCurrentFolderName(), pageNumber, instance.searchTextInput.val()); } else { instance.loadMessagesByPage(instance.getCurrentFolderName(), pageNumber); } return false; }); instance.folderControlsNewestLink.click(function() { var pageNumber = 1; if (instance.isSearchMode()) { instance.loadMessagesBySearch(instance.getCurrentFolderName(), pageNumber, instance.searchTextInput.val()); } else { instance.loadMessagesByPage(instance.getCurrentFolderName(), pageNumber); } return false; }); instance.folderControlsOlderLink.click(function() { var pageNumber = parseInt(instance.getCurrentPageNumber()) + 1; if (instance.isSearchMode()) { instance.loadMessagesBySearch(instance.getCurrentFolderName(), pageNumber, instance.searchTextInput.val()); } else { instance.loadMessagesByPage(instance.getCurrentFolderName(), pageNumber); } return false; }); instance.folderControlsOldestLink.click(function() { var pageNumber = parseInt(instance.getTotalPages()); if (instance.isSearchMode()) { instance.loadMessagesBySearch(instance.getCurrentFolderName(), pageNumber, instance.searchTextInput.val()); } else { instance.loadMessagesByPage(instance.getCurrentFolderName(), pageNumber); } return false; }); instance.folderControlsSelectAction.change(function() { // Do nothing if action not recognized var option = (instance.folderControlsSelectAction.val()).split(","); var flag = option[0]; var value = option[1]; if (flag == '') { instance.refreshFolderControls(); return false; } // Do nothing if no messages are selected var messageUids = instance.getSelectedMessageUids(); if (messageUids == '') { instance.refreshFolderControls(); instance.setStatus(Liferay.Language.get('no-messages-selected')); return false; } // Do selected folder action if (flag == 'seen') { if (value == 'true') { instance.setStatus(Liferay.Language.get('marking-messages-as-read')); } else { instance.setStatus(Liferay.Language.get('marking-messages-as-unread')); } instance.setMessageFlags(messageUids, flag, value, true); } }); instance.folderControlsSelectAllLink.click(function() { jQuery('.message-checkbox').attr('checked', 'true'); return false; }); instance.folderControlsSelectNoneLink.click(function() { jQuery('.message-checkbox').attr('checked', ''); return false; }); instance.folderControlsSelectReadLink.click(function() { jQuery('.read .message-checkbox').attr('checked', 'true'); jQuery('.unread .message-checkbox').attr('checked', ''); return false; }); instance.folderControlsSelectUnreadLink.click(function() { jQuery('.read .message-checkbox').attr('checked', ''); jQuery('.unread .message-checkbox').attr('checked', 'true'); return false; }); instance.messageControlsBackLink.click(function() { instance.loadMessagesByPage(instance.getCurrentFolderName(), instance.getCurrentPageNumber()); return false; }); instance.messageControlsNewerLink.click(function() { instance.setView('viewMessage'); instance.loadMessageRelativeToUid(parseInt(instance.getCurrentMessageUid()), 1); return false; }); instance.messageControlsOlderLink.click(function() { instance.setView('viewMessage'); instance.loadMessageRelativeToUid(parseInt(instance.getCurrentMessageUid()), -1); return false; }); instance.messageOptionsRespondDivs.click(function () { // Show message send instance.setView('replyOrForwardMessage'); instance.messageOptionsRespondDivs.removeClass('selected-response-type results-header'); jQuery(this).addClass('selected-response-type results-header'); // Load default values for response message based on original message var msg = instance.getCurrentMessage(); var msgUid = msg.uid; var msgFrom = msg.from; var msgTo = msg.to; var msgCc = msg.cc; var msgSubject = msg.subject; var msgBody = msg.body; var msgDate = msg.date; // Has message been changed? var messageModified = false; if (jQuery(this).attr('responseType') == 'forward') { // Forward instance.setMessageResponseType('forward'); instance.sendSubjectInput.val('Fwd: ' + msgSubject); // Load appropriate response message if (!messageModified) { var fwdHeader = '

---------- Forwarded message ----------
'; fwdHeader += 'From: ' + msgFrom + '
'; fwdHeader += 'Date: ' + msgDate + '
'; fwdHeader += 'Subject: ' + msgSubject + '
'; fwdHeader += 'To: ' + msgTo + '

'; instance.sendBodySpan.show(); instance.sendBodyEditor.setHTML(fwdHeader + msgBody); } } else { // Reply instance.setMessageResponseType('reply'); instance.sendSubjectInput.attr('value', 'Re: ' + msgSubject); if (jQuery(this).attr('responseType') == 'reply') { instance.sendToInput.attr('value', msgFrom); } else if (jQuery(this).attr('responseType') == 'reply-all') { instance.sendToInput.attr('value', msgFrom); instance.sendCcInput.attr('value', msgTo + ',' + msgCc); } else { alert('Unknown Message Response Type. Reply? Reply All? Forward?'); } // Load appropriate response message if (!messageModified) { var replyHeader = '

On ' + msgDate + ', <' + msgFrom + '> wrote:

'; instance.sendBodySpan.show(); instance.sendBodyEditor.setHTML(replyHeader + msgBody); } } }); instance.messageSendDiscardButton.click(function() { if (instance.sendDraftMessageUidHidden.val() != '') { var messageUids = instance.sendDraftMessageUidHidden.val(); var preMessage = Liferay.Language.get('discarding-draft'); instance.deleteMessages( messageUids, preMessage, function(jsonResult) { instance.sendUpdateMessage(instance.getCurrentEmailAddress(), true); instance.setStatus(Liferay.Language.get('draft-has-been-discarded')); } ); } if ((instance.getCurrentMessage() == null) || instance.getCurrentMessage() == '') { jQuery('.folder:first').click(); } else { instance.setView('viewMessage'); } instance.setStatus(Liferay.Language.get('your-message-was-discarded')); }); instance.sendForm.submit(function() { /* var options = { beforeSubmit: function(formData, jqForm, options) { // validate message and return false if not valid return true; }, dataType: 'json', iframe: true, success: function(responseText, statusText) { instance.setView('viewFolder'); instance.setStatus(Liferay.Language.get('the-email-was-sent-successfully')); } }; instance.sendForm.ajaxSubmit(options); return false; */ }); instance.messageSendSaveButton.click(function() { instance.setStatus(Liferay.Language.get('saving-message')); instance.saveOrSendMessage(false); }); instance.messageSendSendButton.click(function() { instance.setStatus(Liferay.Language.get('sending-message')); instance.saveOrSendMessage(true); }); instance.searchButton.click(function() { instance.setSearchMode(true); instance.loadMessagesBySearch(instance.getCurrentFolderName(), 1, instance.searchTextInput.val()); }); }, _currentEmailAddress: null, _currentFolderName: null, _currentMessage: null, _currentPageNumber: null, _currentView: 'viewFolder', _isSearchMode: false, _accounts: null, _messagesPerPage: 0, _messageResponseType: null, _totalMessages: null, _totalPages: null, _synchronizeInterval: null, _jsonFolders: {}, _jsonMessages: {}, _jsonMessage: {} } Liferay.MailConfiguration = { init: function(params) { var instance = this; // Commonly used jQuery expressions instance.accountsConfigurationDiv = jQuery('.accounts-configuration'); instance.currentMailAccountsDiv = jQuery('.current-mail-accounts'); instance.preconfiguredMailAccountsDiv = jQuery('.preconfigured-mail-accounts'); instance.preconfiguredMailAccounts = params.preconfiguredMailAccounts; instance.loadJSONAccountsConfiguration(); }, appendJSONAccountConfigurationHTML: function(htmlElement, jsonAccount, newAccount) { var instance = this; jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/account_configuration', async: false, data: { description: jsonAccount.description, emailAddress: jsonAccount.emailAddress, emailAddressSameAsUsername: jsonAccount.emailAddressSameAsUsername, mailInHostName: jsonAccount.mailInHostName, mailInPort: jsonAccount.mailInPort, mailInSecure: jsonAccount.mailInSecure, mailOutHostName: jsonAccount.mailOutHostName, mailOutPort: jsonAccount.mailOutPort, mailOutSecure: jsonAccount.mailOutSecure, newAccount: newAccount, password: jsonAccount.password, preconfigured: jsonAccount.preconfigured, title: jsonAccount.title, username: jsonAccount.username }, dataType: 'html', success: function(accountConfigurationHTML) { htmlElement.append(accountConfigurationHTML); }, type: 'POST' } ); }, saveAccountConfiguration: function (emailAddressValue, mailInHostNameValue, mailInPortValue, mailInSecureValue, mailOutHostNameValue, mailOutPortValue, mailOutSecureValue, passwordValue, usernameValue) { var instance = this; jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/update_account', data: { emailAddress: emailAddressValue, mailInHostName: mailInHostNameValue, mailInPort: mailInPortValue, mailInSecure: mailInSecureValue, mailOutHostName: mailOutHostNameValue, mailOutPort: mailOutPortValue, mailOutSecure: mailOutSecureValue, password: passwordValue, username: usernameValue }, dataType: 'json', success: function(success) { instance.loadJSONAccountsConfiguration(); instance.sendMessage('success', 'you-have-successfully-added-a-new-email-account'); }, type: 'POST' } ); }, loadJSONAccountsConfiguration: function () { var instance = this; instance.preconfiguredMailAccountsDiv.html(""); instance.currentMailAccountsDiv.html(""); var defaultJSONAccounts = instance.preconfiguredMailAccounts; for (i = 0; i < defaultJSONAccounts.accounts.length; i++) { var account = defaultJSONAccounts.accounts[i]; instance.appendJSONAccountConfigurationHTML(instance.preconfiguredMailAccountsDiv, account, true); } jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/accounts', dataType: 'json', success: function(jsonAccounts) { if (jsonAccounts.accounts.length == 0) { jQuery('.accounts-configuration .current-accounts-container').hide(); } else { for (i = 0; i < jsonAccounts.accounts.length; i++) { var account = jsonAccounts.accounts[i]; instance.appendJSONAccountConfigurationHTML(instance.currentMailAccountsDiv, account, false); } jQuery('.accounts-configuration .current-accounts-container').show(); } instance.refreshAccountEvents(); }, type: 'POST' } ); }, refreshAccountEvents: function () { var instance = this; jQuery('.cancel-account').click(function() { instance.loadJSONAccountsConfiguration(); return false; }); jQuery('.delete-account').click(function() { var accountTable = jQuery(this).parents('.account:first'); // Get JSON jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/delete_account', data: { emailAddress: accountTable.find('.email-address:first').val() }, dataType: 'json', success: function(success) { instance.loadJSONAccountsConfiguration(); }, type: 'POST' } ); return false; }); jQuery('.save-account').click(function() { instance.sendMessage('info', 'saving-account-settings'); var accountTable = jQuery(this).parents('.account:first'); // Get JSON var emailAddressValue = accountTable.find('.email-address:first').val(); var emailAddressSameAsUsernameValue = accountTable.find('.email-address-same-as-username:first').val(); var mailInHostNameValue = accountTable.find('.in-hostname:first').val(); var mailInPortValue = accountTable.find('.in-port:first').val(); var mailInSecureValue = false; var mailOutHostNameValue = accountTable.find('.out-hostname:first').val(); var mailOutPortValue = accountTable.find('.out-port:first').val(); var mailOutSecureValue = false; if (accountTable.find('.in-secure:first').attr('checked')) { mailInSecureValue = true; } else if ((accountTable.find('.in-secure:first').attr('type') == 'hidden') && (accountTable.find('.in-secure:first').val())) { mailInSecureValue = true; } if (accountTable.find('.out-secure:first').attr('checked')) { mailOutSecureValue = true; } else if ((accountTable.find('.out-secure:first').attr('type') == 'hidden') && (accountTable.find('.out-secure:first').val())) { mailOutSecureValue = true; } var passwordValue = accountTable.find('.password:first').val(); var usernameValue = accountTable.find('.username:first').val(); if (emailAddressSameAsUsernameValue =='true') { emailAddressValue = usernameValue; } // Test account configuration jQuery.ajax( { url: themeDisplay.getLayoutURL() + '/-/mail/test_account', data: { emailAddress: emailAddressValue, mailInHostName: mailInHostNameValue, mailInPort: mailInPortValue, mailInSecure: mailInSecureValue, mailOutHostName: mailOutHostNameValue, mailOutPort: mailOutPortValue, mailOutSecure: mailOutSecureValue, password: passwordValue, username: usernameValue }, dataType: 'json', success: function(result) { if (result.incoming && result.outgoing) { instance.saveAccountConfiguration(emailAddressValue, mailInHostNameValue, mailInPortValue, mailInSecureValue, mailOutHostNameValue, mailOutPortValue, mailOutSecureValue, passwordValue, usernameValue); } else if (!result.outgoing && !result.incoming) { instance.sendMessage('error', 'you-have-failed-to-connect-to-the-imap-and-smtp-server'); } else if (!result.outgoing) { instance.sendMessage('error', 'you-have-successfully-connected-to-the-imap-server-but-failed-to-connect-to-the-smtp-server'); } else if (!result.incoming) { instance.sendMessage('error', 'you-have-failed-to-connect-to-the-imap-server-but-successfully-connected-to-the-smtp-server'); } }, type: 'POST' } ); return false; }); jQuery('.account').find('.title').click(function(){ jQuery(this).parents('.account:first').find('.details').toggle(); return false; }); jQuery('.details').hide(); }, sendMessage: function(type, key) { var instance = this; var msgType = 'portlet-msg-error'; if (type == 'success') { msgType = 'portlet-msg-success'; } else if (type == 'info') { msgType = 'portlet-msg-info'; } var message = Liferay.Language.get(key); var currentMsg = jQuery('.lfr-message-response'); if (currentMsg.length) { currentMsg.html(message); currentMsg.removeClass('portlet-msg-success').removeClass('portlet-msg-info').removeClass('portlet-msg-error'); currentMsg.addClass(msgType); currentMsg.fadeIn('fast'); } else { currentMsg = jQuery('
' + message + '
'); instance.accountsConfigurationDiv.prepend(currentMsg); } var fadeOutTimeout = setTimeout( function() { currentMsg.fadeOut('slow'); clearTimeout(fadeOutTimeout); }, 15000 ); } }