var accounts = {};
var mailboxTree;
var mailAccounts;
-if (typeof textMailAccounts != 'undefined')
- mailAccounts = textMailAccounts.evalJSON(true);
+if (typeof textMailAccounts != 'undefined') {
+ if (textMailAccounts.length > 0)
+ mailAccounts = textMailAccounts.evalJSON(true);
+ else
+ mailAccounts = new Array();
+}
-var currentMessages = new Array();
-var maxCachedMessages = 20;
-var cachedMessages = new Array();
-var currentMailbox = null;
-var currentMailboxType = "";
+var Mailer = {
+ currentMailbox: null,
+ currentMailboxType: "",
+ currentMessages: {},
+ maxCachedMessages: 20,
+ cachedMessages: new Array(),
+ foldersStateTimer: false
+};
var usersRightsWindowHeight = 320;
var usersRightsWindowWidth = 400;
markMailReadInWindow(window, msguid);
}
var msgWin = openMailComposeWindow(url, wId);
- if (msguid) {
- msgWin.messageId = msguid;
- msgWin.messageURL = ApplicationBaseURL + currentMailbox + "/" + msguid;
- }
msgWin.focus();
return false;
function onMessageDoubleClick(event) {
var action;
- if (currentMailboxType == "draft")
+ if (Mailer.currentMailboxType == "draft")
action = "edit";
else
action = "popupview";
function openAddressbook(sender) {
var urlstr;
-
- urlstr = ApplicationBaseURL + "/../Contacts/?popup=YES";
+
+ urlstr = ApplicationBaseURL + "../Contacts/?popup=YES";
var w = window.open(urlstr, "Addressbook",
"width=640,height=400,resizable=1,scrollbars=1,toolbar=0,"
+ "location=no,directories=0,status=0,menubar=0,copyhistory=0");
/* mail list DOM changes */
function markMailInWindow(win, msguid, markread) {
- var msgDiv;
-
- msgDiv = win.$("div_" + msguid);
- if (msgDiv) {
+ var row = win.$("row_" + msguid);
+ var subjectCell = win.$("div_" + msguid);
+ if (row && subjectCell) {
if (markread) {
- msgDiv.removeClassName("mailer_unreadmailsubject");
- msgDiv.addClassName("mailer_readmailsubject");
- msgDiv = win.$("unreaddiv_" + msguid);
- if (msgDiv)
- {
- msgDiv.setAttribute("class", "mailerUnreadIcon");
- msgDiv.setAttribute("id", "readdiv_" + msguid);
- msgDiv.setAttribute("src", ResourcesURL + "/icon_read.gif");
- msgDiv.setAttribute("onclick", "mailListMarkMessage(this,"
- + " 'markMessageUnread', " + msguid
- + ", false);"
- +" return false;");
- var title = msgDiv.getAttribute("title-markunread");
- if (title)
- msgDiv.setAttribute("title", title);
- }
+ row.removeClassName("mailer_unreadmail");
+ subjectCell.addClassName("mailer_readmailsubject");
+ var img = win.$("unreaddiv_" + msguid);
+ if (img) {
+ img.removeClassName("mailerUnreadIcon");
+ img.addClassName("mailerReadIcon");
+ img.setAttribute("id", "readdiv_" + msguid);
+ img.setAttribute("src", ResourcesURL + "/icon_read.gif");
+ var title = img.getAttribute("title-markunread");
+ if (title)
+ img.setAttribute("title", title);
+ }
}
else {
- msgDiv.removeClassName('mailer_readmailsubject');
- msgDiv.addClassName('mailer_unreadmailsubject');
- msgDiv = win.$("readdiv_" + msguid);
- if (msgDiv)
- {
- msgDiv.setAttribute("class", "mailerReadIcon");
- msgDiv.setAttribute("id", "unreaddiv_" + msguid);
- msgDiv.setAttribute("src", ResourcesURL + "/icon_unread.gif");
- msgDiv.setAttribute("onclick", "mailListMarkMessage(this,"
- + " 'markMessageRead', " + msguid
- + ", true);"
- +" return false;");
- var title = msgDiv.getAttribute("title-markread");
- if (title)
- msgDiv.setAttribute("title", title);
- }
+ row.addClassName("mailer_unreadmail");
+ subjectCell.removeClassName('mailer_readmailsubject');
+ var img = win.$("readdiv_" + msguid);
+ if (img) {
+ img.removeClassName("mailerReadIcon");
+ img.addClassName("mailerUnreadIcon");
+ img.setAttribute("id", "unreaddiv_" + msguid);
+ img.setAttribute("src", ResourcesURL + "/icon_unread.gif");
+ var title = img.getAttribute("title-markread");
+ if (title)
+ img.setAttribute("title", title);
+ }
}
return true;
}
/* mail list reply */
function openMessageWindowsForSelection(action, firstOnly) {
- if (document.body.hasClassName("popup"))
- win = openMessageWindow(window.messageId,
- window.messageURL + "/" + action);
+ if (document.body.hasClassName("popup")) {
+ var url = window.location.href;
+ var parts = url.split("/");
+ parts[parts.length-1] = action;
+ window.location.href = parts.join("/");
+ }
else {
var messageList = $("messageList");
var rows = messageList.getSelectedRowsId();
if (rows.length > 0) {
for (var i = 0; i < rows.length; i++) {
openMessageWindow(rows[i].substr(4),
- ApplicationBaseURL + currentMailbox
+ ApplicationBaseURL + Mailer.currentMailbox
+ "/" + rows[i].substr(4)
+ "/" + action);
if (firstOnly)
}
function mailListMarkMessage(event) {
- var http = createHTTPClient();
- var url = ApplicationBaseURL + currentMailbox + "/" + msguid + "/" + action;
+ var msguid = this.id.split('_')[1];
+ var action;
+ var markread;
+ if ($(this).hasClassName('mailerUnreadIcon')) {
+ action = 'markMessageRead';
+ markread = true;
+ }
+ else {
+ action = 'markMessageUnread';
+ markread = false;
+ }
+ var url = ApplicationBaseURL + Mailer.currentMailbox + "/" + msguid + "/" + action;
- if (http) {
- // TODO: add parameter to signal that we are only interested in OK
- http.open("POST", url, false /* not async */);
- http.send("");
- if (http.status != 200) {
- // TODO: refresh page?
- alert("Message Mark Failed: " + http.statusText);
- window.location.reload();
+ var data = { "window": window, "msguid": msguid, "markread": markread };
+ triggerAjaxRequest(url, mailListMarkMessageCallback, data);
+
+ preventDefault(event);
+ return false;
+}
+
+function mailListMarkMessageCallback(http) {
+ if (http.readyState == 4)
+ if (isHttpStatus204(http.status)) {
+ var data = http.callbackData;
+ markMailInWindow(data["window"], data["msguid"], data["markread"]);
}
else {
- markMailInWindow(window, msguid, markread);
+ alert("Message Mark Failed (" + http.status + "): " + http.statusText);
+ window.location.reload();
}
- }
- else {
- window.location.href = url;
- }
}
/* maillist row highlight */
/* bulk delete of messages */
function deleteSelectedMessages(sender) {
- var messageList = $("messageList");
- var rowIds = messageList.getSelectedRowsId();
-
- for (var i = 0; i < rowIds.length; i++) {
- var url, http;
- var rowId = rowIds[i].substr(4);
- var messageId = currentMailbox + "/" + rowId;
- url = ApplicationBaseURL + messageId + "/trash";
- deleteMessageRequestCount++;
- var data = { "id": rowId, "mailbox": currentMailbox, "messageId": messageId };
- triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
- }
-
- return false;
+ var messageList = $("messageList");
+ var rowIds = messageList.getSelectedRowsId();
+
+ if (rowIds.length > 0) {
+ for (var i = 0; i < rowIds.length; i++) {
+ var url;
+ var rowId = rowIds[i].substr(4);
+ var messageId = Mailer.currentMailbox + "/" + rowId;
+ url = ApplicationBaseURL + messageId + "/trash";
+ deleteMessageRequestCount++;
+ var data = { "id": rowId, "mailbox": Mailer.currentMailbox, "messageId": messageId };
+ triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
+ }
+ }
+ else
+ window.alert(labels["Please select a message."]);
+
+ return false;
}
function deleteSelectedMessagesCallback(http) {
if (isHttpStatus204(http.status)) {
var data = http.callbackData;
deleteCachedMessage(data["messageId"]);
- if (currentMailbox == data["mailbox"]) {
-
+ deleteMessageRequestCount--;
+ if (Mailer.currentMailbox == data["mailbox"]) {
var div = $('messageContent');
- if (currentMessages[currentMailbox] == data["id"]) {
+ if (Mailer.currentMessages[Mailer.currentMailbox] == data["id"]) {
div.update();
- currentMessages[currentMailbox] = null;
+ Mailer.currentMessages[Mailer.currentMailbox] = null;
}
var row = $("row_" + data["id"]);
+ var nextRow = row.next("tr");
+ if (!nextRow)
+ nextRow = row.previous("tr");
row.parentNode.removeChild(row);
// row.addClassName("deleted"); // when we'll offer "mark as deleted"
-
- deleteMessageRequestCount--;
+
+ if (deleteMessageRequestCount == 0) {
+ if (nextRow) {
+ Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4);
+ nextRow.select();
+ loadMessage(Mailer.currentMessages[Mailer.currentMailbox]);
+ }
+ }
}
}
}
log ("deleteSelectedMessagesCallback: problem during ajax request " + http.status);
}
+function deleteDraft(url) {
+ /* this is called by UIxMailEditor with window.opener */
+ new Ajax.Request(url, {
+ method: 'post',
+ onFailure: function(transport) {
+ log("draftDeleteCallback: problem during ajax request: " + transport.status);
+ }
+ });
+}
+
function moveMessages(rowIds, folder) {
var failCount = 0;
/* send AJAX request (synchronously) */
- var messageId = currentMailbox + "/" + rowIds[i];
+ var messageId = Mailer.currentMailbox + "/" + rowIds[i];
url = (ApplicationBaseURL + messageId
+ "/move?tofolder=" + folder);
http = createHTTPClient();
var row = $("row_" + rowIds[i]);
row.parentNode.removeChild(row);
deleteCachedMessage(messageId);
- if (currentMessages[currentMailbox] == rowIds[i]) {
+ if (Mailer.currentMessages[Mailer.currentMailbox] == rowIds[i]) {
var div = $('messageContent');
div.update();
- currentMessages[currentMailbox] = null;
+ Mailer.currentMessages[Mailer.currentMailbox] = null;
}
}
else /* request failed */
}
function onMenuDeleteMessage(event) {
- deleteSelectedMessages();
- preventDefault(event);
+ deleteSelectedMessages();
+ preventDefault(event);
+}
+
+function deleteMessage(url, id, mailbox, messageId) {
+ var data = { "id": id, "mailbox": mailbox, "messageId": messageId };
+ deleteMessageRequestCount++;
+ triggerAjaxRequest(url, deleteSelectedMessagesCallback, data);
+}
+
+function deleteMessageWithDelay(url, id, mailbox, messageId) {
+ /* this is called by UIxMailPopupView with window.opener */
+ setTimeout("deleteMessage('" +
+ url + "', '" +
+ id + "', '" +
+ mailbox + "', '" +
+ messageId + "')",
+ 50);
}
function onPrintCurrentMessage(event) {
$("searchValue").value = "";
initCriteria();
- currentMailboxType = this.parentNode.getAttribute("datatype");
- if (currentMailboxType == "account" || currentMailboxType == "additional") {
- currentMailbox = mailbox;
+ Mailer.currentMailboxType = this.parentNode.getAttribute("datatype");
+ if (Mailer.currentMailboxType == "account" || Mailer.currentMailboxType == "additional") {
+ Mailer.currentMailbox = mailbox;
$("messageContent").update();
var table = $("messageList");
var head = table.tHead;
function _onMailboxMenuAction(menuEntry, error, actionName) {
var targetMailbox = menuEntry.mailbox.fullName();
+ var messages = new Array();
- if (targetMailbox == currentMailbox)
+ if (targetMailbox == Mailer.currentMailbox)
window.alert(labels[error]);
else {
- var message;
if (document.menuTarget.tagName == "DIV")
- message = currentMessages[currentMailbox];
+ // Menu called from message content view
+ messages.push(Mailer.currentMessages[Mailer.currentMailbox]);
+ else if (Object.isArray(document.menuTarget))
+ // Menu called from multiple selection in messages list view
+ messages = $(document.menuTarget).collect(function(row) {
+ return row.getAttribute("id").substr(4);
+ });
else
- message = document.menuTarget.getAttribute("id").substr(4);
-
- var urlstr = (URLForFolderID(currentMailbox) + "/" + message
- + "/" + actionName + "?folder=" + targetMailbox);
- triggerAjaxRequest(urlstr, folderRefreshCallback, currentMailbox);
+ // Menu called from one selection in messages list view
+ messages.push(document.menuTarget.getAttribute("id").substr(4));
+
+ var url_prefix = URLForFolderID(Mailer.currentMailbox) + "/";
+ messages.each(function(msgid, i) {
+ var url = url_prefix + msgid + "/" + actionName
+ + "?folder=" + targetMailbox;
+ triggerAjaxRequest(url, folderRefreshCallback,
+ ((i == messages.size() - 1)?Mailer.currentMailbox:""));
+ });
}
}
}
function composeNewMessage() {
- var account = currentMailbox.split("/")[1];
+ var account = Mailer.currentMailbox.split("/")[1];
var url = ApplicationBaseURL + "/" + account + "/compose";
openMailComposeWindow(url);
}
function openMailbox(mailbox, reload, idx) {
- if (mailbox != currentMailbox || reload) {
- currentMailbox = mailbox;
+ if (mailbox != Mailer.currentMailbox || reload) {
+ Mailer.currentMailbox = mailbox;
var url = ApplicationBaseURL + encodeURI(mailbox) + "/view?noframe=1";
- var messageContent = $("messageContent");
- messageContent.update();
- lastClickedRow = null; // from generic.js
-
+
+ if (!reload || idx) {
+ var messageContent = $("messageContent");
+ messageContent.update();
+ lastClickedRow = -1; // from generic.js
+ }
+
var currentMessage;
+
if (!idx) {
- currentMessage = currentMessages[mailbox];
+ currentMessage = Mailer.currentMessages[mailbox];
if (currentMessage) {
- loadMessage(currentMessage);
url += '&pageforuid=' + currentMessage;
+ if (!reload)
+ loadMessage(currentMessage);
}
}
}
function openMailboxAtIndex(event) {
- openMailbox(currentMailbox, true, this.getAttribute("idx"));
+ openMailbox(Mailer.currentMailbox, true, this.getAttribute("idx"));
Event.stop(event);
}
if (http.readyState == 4
&& http.status == 200) {
- document.messageListAjaxRequest = null;
+ document.messageListAjaxRequest = null;
if (table) {
// Update table
var thead = table.tHead;
+ var addressHeaderCell = thead.rows[0].cells[3];
var tbody = table.tBodies[0];
var tmp = document.createElement('div');
$(tmp).update(http.responseText);
thead.rows[1].parentNode.replaceChild(tmp.firstChild.tHead.rows[1], thead.rows[1]);
+ addressHeaderCell.replaceChild(tmp.firstChild.tHead.rows[0].cells[3].lastChild,
+ addressHeaderCell.lastChild);
table.replaceChild(tmp.firstChild.tBodies[0], tbody);
}
else {
if (row) {
row.select();
lastClickedRow = row.rowIndex - $(row).up('table').down('thead').getElementsByTagName('tr').length;
- div.scrollTop = row.rowIndex * row.getHeight(); // scroll to selected message
+ var rowPosition = row.rowIndex * row.getHeight();
+ if ($(row).up('div').getHeight() > rowPosition)
+ rowPosition = 0;
+ div.scrollTop = rowPosition; // scroll to selected message
}
else
$("messageContent").update();
&& http.status == 200) {
var hasQuotas = false;
- var quotas = http.responseText.evalJSON(true);
- for (var i in quotas) {
- hasQuotas = true;
- break;
+ if (http.responseText.length > 0) {
+ var quotas = http.responseText.evalJSON(true);
+ for (var i in quotas) {
+ hasQuotas = true;
+ break;
+ }
}
-
+
if (hasQuotas) {
- var treePath = currentMailbox.split("/");
- var mbQuotas = quotas["/" + treePath[2]];
+ var treePath = Mailer.currentMailbox.split("/");
+ var quotasMB = new Array();
+ for (var i = 2; i < treePath.length; i++)
+ quotasMB.push(treePath[i].substr(6));
+ var mbQuotas = quotas["/" + quotasMB.join("/")];
var used = mbQuotas["usedSpace"];
var max = mbQuotas["maxQuota"];
var percents = (Math.round(used * 10000 / max) / 100);
function onMessageContextMenu(event) {
var menu = $('messageListMenu');
- Event.observe(menu, "hideMenu", onMessageContextMenuHide);
- popupMenu(event, "messageListMenu", this);
-
var topNode = $('messageList');
var selectedNodes = topNode.getSelectedRows();
- for (var i = 0; i < selectedNodes.length; i++)
- selectedNodes[i].deselect();
- topNode.menuSelectedRows = selectedNodes;
- topNode.menuSelectedEntry = this;
- this.select();
+
+ Event.observe(menu, "hideMenu", onMessageContextMenuHide);
+
+ if (selectedNodes.length > 1)
+ popupMenu(event, "messagesListMenu", selectedNodes);
+ else
+ popupMenu(event, "messageListMenu", this);
}
function onMessageContextMenuHide(event) {
var done = false;
var counter = 0;
- while (counter < cachedMessages.length
+ while (counter < Mailer.cachedMessages.length
&& !done)
- if (cachedMessages[counter]
- && cachedMessages[counter]['idx'] == messageId) {
- cachedMessages.splice(counter, 1);
+ if (Mailer.cachedMessages[counter]
+ && Mailer.cachedMessages[counter]['idx'] == messageId) {
+ Mailer.cachedMessages.splice(counter, 1);
done = true;
}
else
var message = null;
var counter = 0;
- while (counter < cachedMessages.length
+ while (counter < Mailer.cachedMessages.length
&& message == null)
- if (cachedMessages[counter]
- && cachedMessages[counter]['idx'] == currentMailbox + '/' + idx)
- message = cachedMessages[counter];
+ if (Mailer.cachedMessages[counter]
+ && Mailer.cachedMessages[counter]['idx'] == Mailer.currentMailbox + '/' + idx)
+ message = Mailer.cachedMessages[counter];
else
counter++;
var timeOldest = -1;
var counter = 0;
- if (cachedMessages.length < maxCachedMessages)
- oldest = cachedMessages.length;
+ if (Mailer.cachedMessages.length < Mailer.maxCachedMessages)
+ oldest = Mailer.cachedMessages.length;
else {
- while (cachedMessages[counter]) {
+ while (Mailer.cachedMessages[counter]) {
if (oldest == -1
- || cachedMessages[counter]['time'] < timeOldest) {
+ || Mailer.cachedMessages[counter]['time'] < timeOldest) {
oldest = counter;
- timeOldest = cachedMessages[counter]['time'];
+ timeOldest = Mailer.cachedMessages[counter]['time'];
}
counter++;
}
oldest = 0;
}
- cachedMessages[oldest] = cachedMessage;
+ Mailer.cachedMessages[oldest] = cachedMessage;
}
function onMessageSelectionChange() {
if (rows.length == 1) {
var idx = rows[0].substr(4);
-
- if (currentMessages[currentMailbox] != idx) {
- currentMessages[currentMailbox] = idx;
+ if (Mailer.currentMessages[Mailer.currentMailbox] != idx) {
+ Mailer.currentMessages[Mailer.currentMailbox] = idx;
loadMessage(idx);
}
}
var cachedMessage = getCachedMessage(idx);
+ markMailInWindow(window, idx, true);
if (cachedMessage == null) {
- var url = (ApplicationBaseURL + currentMailbox + "/"
+ var url = (ApplicationBaseURL + Mailer.currentMailbox + "/"
+ idx + "/view?noframe=1");
document.messageAjaxRequest
= triggerAjaxRequest(url, messageCallback, idx);
- markMailInWindow(window, idx, true);
} else {
var div = $('messageContent');
div.update(cachedMessage['text']);
var mailContentDiv = document.getElementsByClassName('mailer_mailcontent',
messageDiv)[0];
if (!document.body.hasClassName("popup"))
- Event.observe(mailContentDiv, "contextmenu",
- onMessageContentMenu.bindAsEventListener(mailContentDiv));
+ mailContentDiv.observe("contextmenu", onMessageContentMenu);
+
var anchors = messageDiv.getElementsByTagName('a');
for (var i = 0; i < anchors.length; i++)
if (anchors[i].href.substring(0,7) == "mailto:") {
- Event.observe(anchors[i], "click",
- onEmailAddressClick.bindAsEventListener(anchors[i]));
- Event.observe(anchors[i], "contextmenu",
- onEmailAddressClick.bindAsEventListener(anchors[i]));
+ $(anchors[i]).observe("click", onEmailTo);
+ $(anchors[i]).observe("contextmenu", onEmailAddressClick);
}
else
- Event.observe(anchors[i], "click",
- onMessageAnchorClick.bindAsEventListener(anchors[i]));
+ $(anchors[i]).observe("click", onMessageAnchorClick);
+
+ var images = messageDiv.getElementsByTagName('img');
+ for (var i = 0; i < images.length; i++)
+ $(images[i]).observe("contextmenu", onImageClick);
var editDraftButton = $("editDraftButton");
if (editDraftButton)
Event.observe(editDraftButton, "click",
onMessageEditDraft.bindAsEventListener(editDraftButton));
+
+ configureiCalLinksInMessage();
+}
+
+function configureiCalLinksInMessage() {
+ var buttons = { "iCalendarAccept": "accept",
+ "iCalendarDecline": "decline",
+ "iCalendarTentative": "tentative",
+ "iCalendarUpdateUserStatus": "updateUserStatus",
+ "iCalendarAddToCalendar": "addToCalendar",
+ "iCalendarDeleteFromCalendar": "deleteFromCalendar" };
+
+ for (var key in buttons) {
+ var button = $(key);
+ if (button) {
+ button.action = buttons[key];
+ Event.observe(button, "click",
+ onICalendarButtonClick.bindAsEventListener(button));
+ }
+ }
+}
+
+function onICalendarButtonClick(event) {
+ var link = $("iCalendarAttachment").value;
+ if (link) {
+ var urlstr = link + "/" + this.action;
+ triggerAjaxRequest(urlstr, ICalendarButtonCallback,
+ Mailer.currentMailbox + "/"
+ + Mailer.currentMessages[Mailer.currentMailbox]);
+ }
+ else
+ log("no link");
+}
+
+function ICalendarButtonCallback(http) {
+ if (http.readyState == 4)
+ if (isHttpStatus204(http.status)) {
+ var oldMsg = http.callbackData;
+ var msg = Mailer.currentMailbox + "/" + Mailer.currentMessages[Mailer.currentMailbox];
+ if (oldMsg == msg) {
+ deleteCachedMessage(oldMsg);
+ loadMessage(Mailer.currentMessages[Mailer.currentMailbox]);
+ }
+ }
+ else {
+ window.alert("received code: " + http.status);
+ }
}
function resizeMailContent() {
var headerTable = document.getElementsByClassName('mailer_fieldtable')[0];
var contentDiv = document.getElementsByClassName('mailer_mailcontent')[0];
- contentDiv.setStyle({ 'top': (Element.getHeight(headerTable) + headerTable.offsetTop) + 'px' });
+ contentDiv.setStyle({ 'top':
+ (Element.getHeight(headerTable) + headerTable.offsetTop) + 'px' });
}
function onMessageContentMenu(event) {
+ var element = getTarget(event);
+ if ((element.tagName == 'A' && element.href.substring(0,7) == "mailto:")
+ || element.tagName == 'IMG')
+ // Don't show the default contextual menu; let the click propagate to
+ // other observers
+ return true;
popupMenu(event, 'messageContentMenu', this);
}
function onEmailAddressClick(event) {
popupMenu(event, 'addressMenu', this);
+ preventDefault(event);
+ return false;
}
function onMessageAnchorClick(event) {
preventDefault(event);
}
+function onImageClick(event) {
+ popupMenu(event, 'imageMenu', this);
+ preventDefault(event);
+ return false;
+}
+
function messageCallback(http) {
var div = $('messageContent');
if (http.callbackData) {
var cachedMessage = new Array();
- cachedMessage['idx'] = currentMailbox + '/' + http.callbackData;
+ cachedMessage['idx'] = Mailer.currentMailbox + '/' + http.callbackData;
cachedMessage['time'] = (new Date()).getTime();
cachedMessage['text'] = http.responseText;
if (cachedMessage['text'].length < 30000)
var rows = messageList.getSelectedRowsId();
if (rows.length > 0) {
- var url = (ApplicationBaseURL + currentMailbox + "/"
+ var url = (ApplicationBaseURL + Mailer.currentMailbox + "/"
+ rows[0].substr(4) + "/viewsource");
openMailComposeWindow(url);
}
preventDefault(event);
}
+function saveImage(event) {
+ var img = document.menuTarget;
+ var url = img.getAttribute("src");
+ var urlAsAttachment = url.replace(/(\/[^\/]*)$/,"/asAttachment$1");
+
+ window.location.href = urlAsAttachment;
+}
+
/* contacts */
function newContactFromEmail(event) {
var mailto = document.menuTarget.innerHTML;
return false; /* stop following the link */
}
+function onEmailTo(event) {
+ openMailTo(this.innerHTML.strip());
+ preventDefault(event);
+ return false;
+}
+
function newEmailTo(sender) {
return openMailTo(document.menuTarget.innerHTML);
}
}
function onHeaderClick(event) {
+ if (TableKit.Resizable._onHandle)
+ return;
+
var headerId = this.getAttribute("id");
var newSortAttribute;
if (headerId == "subjectHeader")
}
function refreshCurrentFolder() {
- openMailbox(currentMailbox, true);
+ openMailbox(Mailer.currentMailbox, true);
}
function refreshFolderByType(type) {
- if (currentMailboxType == type)
+ if (Mailer.currentMailboxType == type)
refreshCurrentFolder();
}
if (data) {
var folder = this.parentNode.parentNode.getAttribute("dataname");
- if (folder != currentMailbox)
+ if (folder != Mailer.currentMailbox)
success = (moveMessages(data, folder) == 0);
}
else
success = false;
-
+
return success;
}
-
+
var plusSignEnter = function() {
var nodeNr = parseInt(this.id.substr(2));
if (!mailboxTree.aNodes[nodeNr]._io)
this.plusSignTimer = setTimeout("openPlusSign('" + nodeNr + "');", 1000);
}
-
+
var plusSignExit = function() {
if (this.plusSignTimer) {
clearTimeout(this.plusSignTimer);
Event.observe(cell, "dblclick", onMessageDoubleClick.bindAsEventListener(cell));
else if (j == 4) {
var img = cell.childNodesWithTag("img")[0];
- Event.observe(img, "click", mailListMarkMessage);
+ Event.observe(img, "click", mailListMarkMessage.bindAsEventListener(img));
}
}
}
}
function initMailer(event) {
- if (!document.body.hasClassName("popup")) {
+ if (!$(document.body).hasClassName("popup")) {
// initDnd();
initMailboxTree();
initMessageCheckTimer();
}
+
+ // Default sort options
+ sorting["attribute"] = "date";
+ sorting["ascending"] = false;
}
function initMessageCheckTimer() {
mailboxTree.pendingRequests = mailAccounts.length;
activeAjaxRequests += mailAccounts.length;
for (var i = 0; i < mailAccounts.length; i++) {
- var url = ApplicationBaseURL + "/" + mailAccounts[i] + "/mailboxes";
+ var url = ApplicationBaseURL + mailAccounts[i] + "/mailboxes";
triggerAjaxRequest(url, onLoadMailboxesCallback, mailAccounts[i]);
}
}
onFolderMenuClick.bindAsEventListener(nodes[i]));
if (!inboxFound
&& nodes[i].parentNode.getAttribute("datatype") == "inbox") {
+ Mailer.currentMailboxType = "inbox";
openInbox(nodes[i]);
inboxFound = true;
}
menu.appendChild(menuEntry);
var mailbox = accounts[mailAccounts[i]];
var newSubmenuId = generateMenuForMailbox(mailbox,
- key, mailboxActions[key]);
+ key, mailboxActions[key]);
submenuIds.push(newSubmenuId);
}
initMenu(menuDIV, submenuIds);
if (http.readyState == 4
&& http.status == 200) {
checkAjaxRequestsState();
- var newAccount = buildMailboxes(http.callbackData,
- http.responseText);
- accounts[http.callbackData] = newAccount;
- mailboxTree.addMailAccount(newAccount);
- mailboxTree.pendingRequests--;
- activeAjaxRequests--;
- if (!mailboxTree.pendingRequests) {
- updateMailboxTreeInPage();
- updateMailboxMenus();
- checkAjaxRequestsState();
+ if (http.responseText.length > 0) {
+ var newAccount = buildMailboxes(http.callbackData,
+ http.responseText);
+ accounts[http.callbackData] = newAccount;
+ mailboxTree.addMailAccount(newAccount);
+ mailboxTree.pendingRequests--;
+ activeAjaxRequests--;
+ if (!mailboxTree.pendingRequests) {
+ updateMailboxTreeInPage();
+ updateMailboxMenus();
+ checkAjaxRequestsState();
+ getFoldersState();
+ }
}
}
// var treeNodes = document.getElementsByClassName("dTreeNode", tree);
// var i = 0;
// while (i < treeNodes.length
- // && treeNodes[i].getAttribute("dataname") != currentMailbox)
+ // && treeNodes[i].getAttribute("dataname") != Mailer.currentMailbox)
// i++;
// if (i < treeNodes.length) {
// // log("found mailbox");
return account;
}
+function getFoldersState() {
+ if (mailAccounts.length > 0) {
+ var urlstr = ApplicationBaseURL + "foldersState";
+ triggerAjaxRequest(urlstr, getFoldersStateCallback);
+ }
+}
+
+function getFoldersStateCallback(http) {
+ if (http.readyState == 4
+ && http.status == 200) {
+ if (http.responseText.length > 0) {
+ // The response text is a JSOn representation
+ // of the folders that were left opened.
+ var data = http.responseText.evalJSON(true);
+ for (var i = 1; i < mailboxTree.aNodes.length; i++) {
+ if ($(data).indexOf(mailboxTree.aNodes[i].dataname) > 0)
+ // If the folder is found, open it
+ mailboxTree.o(i);
+ }
+ }
+ }
+ mailboxTree.autoSync();
+}
+
+function saveFoldersState() {
+ if (mailAccounts.length > 0) {
+ var foldersState = mailboxTree.getFoldersState();
+ var urlstr = ApplicationBaseURL + "saveFoldersState" + "?expandedFolders=" + foldersState;
+ triggerAjaxRequest(urlstr, saveFoldersStateCallback);
+ }
+}
+
+function saveFoldersStateCallback(http) {
+ if (http.readyState == 4
+ && isHttpStatus204(http.status)) {
+ log ("folders state saved");
+ }
+}
+
function onMenuCreateFolder(event) {
var name = window.prompt(labels["Name :"], "");
if (name && name.length > 0) {
var folderID = document.menuTarget.getAttribute("dataname");
- var urlstr = URLForFolderID(folderID) + "/createFolder?name=" + name; log ("create " + urlstr);
+ var urlstr = URLForFolderID(folderID) + "/createFolder?name=" + name;
triggerAjaxRequest(urlstr, folderOperationCallback);
}
}
var urlstr = URLForFolderID(folderID) + "/emptyTrash";
triggerAjaxRequest(urlstr, folderOperationCallback, folderID);
- if (folderID == currentMailbox) {
+ if (folderID == Mailer.currentMailbox) {
var div = $('messageContent');
for (var i = div.childNodes.length - 1; i > -1; i--)
div.removeChild(div.childNodes[i]);
refreshCurrentFolder();
}
- var msgID = currentMessages[folderID];
+ var msgID = Mailer.currentMessages[folderID];
if (msgID)
deleteCachedMessage(folderID + "/" + msgID);
}
window.alert(labels["You need to choose a non-virtual folder!"]);
else {
var folderID = document.menuTarget.getAttribute("dataname");
- var number = folderID.split("/").length;
- if (number > 3)
- window.alert(labels["You need to choose a root subfolder!"]);
- else {
- var urlstr = URLForFolderID(folderID) + "/setAs" + folder + "Folder";
- triggerAjaxRequest(urlstr, folderOperationCallback);
- }
+ var urlstr = URLForFolderID(folderID) + "/setAs" + folder + "Folder";
+ triggerAjaxRequest(urlstr, folderOperationCallback);
}
}
}
function onMenuLabelNone() {
- var rowId = document.menuTarget.getAttribute("id").substr(4);
- var messageId = currentMailbox + "/" + rowId;
- var urlstr = ApplicationBaseURL + messageId + "/removeAllLabels";
- triggerAjaxRequest(urlstr, messageFlagCallback,
- { mailbox: currentMailbox, msg: rowId, label: null } );
+ var messages = new Array();
+
+ if (document.menuTarget.tagName == "DIV")
+ // Menu called from message content view
+ messages.push(Mailer.currentMessages[Mailer.currentMailbox]);
+ else if (Object.isArray(document.menuTarget))
+ // Menu called from multiple selection in messages list view
+ $(document.menuTarget).collect(function(row) {
+ messages.push(row.getAttribute("id").substr(4));
+ });
+ else
+ // Menu called from one selection in messages list view
+ messages.push(document.menuTarget.getAttribute("id").substr(4));
+
+ var url = ApplicationBaseURL + Mailer.currentMailbox + "/";
+ messages.each(function(id) {
+ triggerAjaxRequest(url + id + "/removeAllLabels",
+ messageFlagCallback,
+ { mailbox: Mailer.currentMailbox, msg: id, label: null } );
+ });
}
function _onMenuLabelFlagX(flag) {
- var flags = document.menuTarget.getAttribute("labels").split(" ");
-
- var rowId = document.menuTarget.getAttribute("id").substr(4);
- var messageId = currentMailbox + "/" + rowId;
+ var messages = new Hash();
+
+ if (document.menuTarget.tagName == "DIV")
+ // Menu called from message content view
+ messages.set(Mailer.currentMessages[Mailer.currentMailbox],
+ $('tr#row_' + Mailer.currentMessages[Mailer.currentMailbox]).getAttribute("labels"));
+ else if (Object.isArray(document.menuTarget))
+ // Menu called from multiple selection in messages list view
+ $(document.menuTarget).collect(function(row) {
+ messages.set(row.getAttribute("id").substr(4),
+ row.getAttribute("labels"));
+ });
+ else
+ // Menu called from one selection in messages list view
+ messages.set(document.menuTarget.getAttribute("id").substr(4),
+ document.menuTarget.getAttribute("labels"));
+
+ var url = ApplicationBaseURL + Mailer.currentMailbox + "/";
+ messages.keys().each(function(id) {
+ var flags = messages.get(id).split(" ");
+ var operation = "add";
+
+ if (flags.indexOf("label" + flag) > -1)
+ operation = "remove";
- var operation = "add";
- if (flags.indexOf("label" + flag) > -1)
- operation = "remove";
- var urlstr = (ApplicationBaseURL + messageId
- + "/" + operation + "Label" + flag);
- triggerAjaxRequest(urlstr, messageFlagCallback,
- { mailbox: currentMailbox, msg: rowId,
- label: operation + flag } );
+ triggerAjaxRequest(url + id + "/" + operation + "Label" + flag,
+ messageFlagCallback,
+ { mailbox: Mailer.currentMailbox, msg: id,
+ label: operation + flag } );
+ });
}
function onMenuLabelFlag1() {
if (http.readyState == 4
&& isHttpStatus204(http.status)) {
var oldMailbox = http.callbackData;
- if (oldMailbox == currentMailbox)
+ if (oldMailbox == Mailer.currentMailbox)
refreshCurrentFolder();
}
else
if (http.readyState == 4
&& isHttpStatus204(http.status)) {
var data = http.callbackData;
- if (data["mailbox"] == currentMailbox) {
+ if (data["mailbox"] == Mailer.currentMailbox) {
var row = $("row_" + data["msg"]);
var operation = data["label"];
if (operation) {
"mark-menu", "-", null,
onMenuViewMessageSource, null,
null, onMenuDeleteMessage);
+ menus["messagesListMenu"] = new Array(onMenuForwardMessage,
+ "-", "moveMailboxMenu",
+ "copyMailboxMenu", "label-menu",
+ "mark-menu", "-",
+ null, null,
+ onMenuDeleteMessage);
+ menus["imageMenu"] = new Array(saveImage);
menus["messageContentMenu"] = new Array(onMenuReplyToSender,
onMenuReplyToAll,
onMenuForwardMessage,
return menus;
}
-addEvent(window, 'load', initMailer);
+FastInit.addOnLoad(initMailer);
function Mailbox(type, name) {
this.type = type;