diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index ad96d3969..2041b68b3 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -7,293 +7,292 @@ var usersRightsWindowHeight = 200; var usersRightsWindowWidth = 450; var Contact = { - currentAddressBook: null, - currentContact: null, - deleteContactsRequestCount: null + currentAddressBook: null, + currentContact: null, + deleteContactsRequestCount: null }; function validateEditorInput(sender) { - var errortext = ""; - var field; + var errortext = ""; + var field; - field = document.pageform.subject; - if (field.value == "") - errortext = errortext + labels.error_missingsubject + "\n"; + field = document.pageform.subject; + if (field.value == "") + errortext = errortext + labels.error_missingsubject + "\n"; - if (!hasRecipients()) - errortext = errortext + labels.error_missingrecipients + "\n"; + if (!hasRecipients()) + errortext = errortext + labels.error_missingrecipients + "\n"; - if (errortext.length > 0) { - alert(labels.error_validationfailed + ":\n" - + errortext); - return false; - } - return true; + if (errortext.length > 0) { + alert(labels.error_validationfailed + ":\n" + + errortext); + return false; + } + return true; } function openContactsFolder(contactsFolder, reload, idx) { - if ((contactsFolder && contactsFolder != Contact.currentAddressBook) - || reload) { - Contact.currentAddressBook = contactsFolder; - var url = URLForFolderID(Contact.currentAddressBook) + - "/view?noframe=1"; + if ((contactsFolder && contactsFolder != Contact.currentAddressBook) + || reload) { + Contact.currentAddressBook = contactsFolder; + var url = URLForFolderID(Contact.currentAddressBook) + + "/view?noframe=1"; - var searchValue = search["value"]; - if (searchValue && searchValue.length > 0) - url += ("&search=" + search["criteria"] - + "&value=" + escape(searchValue.utf8encode())); - var sortAttribute = sorting["attribute"]; - if (sortAttribute && sortAttribute.length > 0) - url += ("&sort=" + sorting["attribute"] - + "&asc=" + sorting["ascending"]); + var searchValue = search["value"]; + if (searchValue && searchValue.length > 0) + url += ("&search=" + search["criteria"] + + "&value=" + escape(searchValue.utf8encode())); + var sortAttribute = sorting["attribute"]; + if (sortAttribute && sortAttribute.length > 0) + url += ("&sort=" + sorting["attribute"] + + "&asc=" + sorting["ascending"]); - var selection; - if (idx) { - selection = [idx]; - } - else if (contactsFolder == Contact.currentAddressBook) { - var contactsList = $("contactsList"); - if (contactsList) - selection = contactsList.getSelectedRowsId(); - // else - // window.alert("no contactsList"); - } - else - selection = null; + var selection; + if (idx) { + selection = [idx]; + } + else if (contactsFolder == Contact.currentAddressBook) { + var contactsList = $("contactsList"); + if (contactsList) + selection = contactsList.getSelectedRowsId(); + // else + // window.alert("no contactsList"); + } + else + selection = null; - if (document.contactsListAjaxRequest) { - document.contactsListAjaxRequest.aborted = true; - document.contactsListAjaxRequest.abort(); + if (document.contactsListAjaxRequest) { + document.contactsListAjaxRequest.aborted = true; + document.contactsListAjaxRequest.abort(); + } + document.contactsListAjaxRequest + = triggerAjaxRequest(url, contactsListCallback, selection); } - document.contactsListAjaxRequest - = triggerAjaxRequest(url, contactsListCallback, selection); - } } function openContactsFolderAtIndex(element) { - var idx = element.getAttribute("idx"); - var url = URLForFolderID(Contact.currentAddressBook) + "/view?noframe=1&idx=" + idx; + var idx = element.getAttribute("idx"); + var url = URLForFolderID(Contact.currentAddressBook) + "/view?noframe=1&idx=" + idx; - if (document.contactsListAjaxRequest) { - document.contactsListAjaxRequest.aborted = true; - document.contactsListAjaxRequest.abort(); - } - document.contactsListAjaxRequest - = triggerAjaxRequest(url, contactsListCallback); + if (document.contactsListAjaxRequest) { + document.contactsListAjaxRequest.aborted = true; + document.contactsListAjaxRequest.abort(); + } + document.contactsListAjaxRequest + = triggerAjaxRequest(url, contactsListCallback); } function contactsListCallback(http) { - if (http.readyState == 4) { - if (http.status == 200) { - document.contactsListAjaxRequest = null; - - var div = $("contactsListContent"); - var table = $("contactsList"); - if (table) { - // Update table - var data = http.responseText; - var html = data.replace(/^(.*\n)*.*( 0) { - var sortHeader; - if (sorting["attribute"] == "c_cn") - sortHeader = $("nameHeader"); - else if (sorting["attribute"] == "c_mail") - sortHeader = $("mailHeader"); - else if (sorting["attribute"] == "c_screenname") - sortHeader = $("screenNameHeader"); - else if (sorting["attribute"] == "c_o") - sortHeader = $("orgHeader"); - else if (sorting["attribute"] == "c_telephonenumber") - sortHeader = $("phoneHeader"); - else - sortHeader = null; - - if (sortHeader) { - var sortImages = $(table.tHead).select(".sortImage"); - $(sortImages).each(function(item) { - item.remove(); - }); + if (http.readyState == 4) { + if (http.status == 200) { + document.contactsListAjaxRequest = null; - var sortImage = createElement("img", "messageSortImage", "sortImage"); - sortHeader.insertBefore(sortImage, sortHeader.firstChild); - if (sorting["ascending"]) - sortImage.src = ResourcesURL + "/title_sortdown_12x12.png"; - else - sortImage.src = ResourcesURL + "/title_sortup_12x12.png"; - } - } - - var selected = http.callbackData; - if (selected) { - for (var i = 0; i < selected.length; i++) { - var row = $(selected[i]); - if (row) { - var rowPosition = row.rowIndex * row.getHeight(); - if (div.getHeight() < rowPosition) - div.scrollTop = rowPosition; // scroll to selected contact - row.selectElement(); - } - } - } + var div = $("contactsListContent"); + var table = $("contactsList"); + if (table) { + // Update table + var data = http.responseText; + var html = data.replace(/^(.*\n)*.*( 0) { + var sortHeader; + if (sorting["attribute"] == "c_cn") + sortHeader = $("nameHeader"); + else if (sorting["attribute"] == "c_mail") + sortHeader = $("mailHeader"); + else if (sorting["attribute"] == "c_screenname") + sortHeader = $("screenNameHeader"); + else if (sorting["attribute"] == "c_o") + sortHeader = $("orgHeader"); + else if (sorting["attribute"] == "c_telephonenumber") + sortHeader = $("phoneHeader"); + else + sortHeader = null; + + if (sortHeader) { + var sortImages = $(table.tHead).select(".sortImage"); + $(sortImages).each(function(item) { + item.remove(); + }); + + var sortImage = createElement("img", "messageSortImage", "sortImage"); + sortHeader.insertBefore(sortImage, sortHeader.firstChild); + if (sorting["ascending"]) + sortImage.src = ResourcesURL + "/title_sortdown_12x12.png"; + else + sortImage.src = ResourcesURL + "/title_sortup_12x12.png"; + } + } + + var selected = http.callbackData; + if (selected) { + for (var i = 0; i < selected.length; i++) { + var row = $(selected[i]); + if (row) { + var rowPosition = row.rowIndex * row.getHeight(); + if (div.getHeight() < rowPosition) + div.scrollTop = rowPosition; // scroll to selected contact + row.selectElement(); + } + } + } + } + else { + var table = $("contactsList"); + if (table) { + var sortImages = $(table.tHead).select(".sortImage"); + $(sortImages).each(function(item) { + item.remove(); + }); + var tBody = $(table.tBodies[0]); + var length = tBody.rows.length; + for (var i = length - 1; i > -1; i--) + tBody.removeChild(tBody.rows[i]); + } + } } - else { - var table = $("contactsList"); - if (table) { - var sortImages = $(table.tHead).select(".sortImage"); - $(sortImages).each(function(item) { - item.remove(); - }); - var tBody = $(table.tBodies[0]); - var length = tBody.rows.length; - for (var i = length - 1; i > -1; i--) - tBody.removeChild(tBody.rows[i]); - } - } - } - else - log ("ajax problem 1: status = " + http.status); + else + log ("ajax problem 1: status = " + http.status); } function onContactContextMenu(event) { - var contactsList = $("contactsList"); - var menu = $("contactMenu"); - menu.observe("hideMenu", onContactContextMenuHide); - if (contactsList) - popupMenu(event, "contactMenu", contactsList.getSelectedRows()); + var contactsList = $("contactsList"); + var menu = $("contactMenu"); + menu.observe("hideMenu", onContactContextMenuHide); + if (contactsList) + popupMenu(event, "contactMenu", contactsList.getSelectedRows()); } function onContactContextMenuHide(event) { - var topNode = $("contactsList"); + var topNode = $("contactsList"); - if (topNode.menuSelectedEntry) { - $(topNode.menuSelectedEntry).deselect(); - topNode.menuSelectedEntry = null; - } - if (topNode.menuSelectedRows) { - var nodes = topNode.menuSelectedRows; - for (var i = 0; i < nodes.length; i++) - $(nodes[i]).selectElement(); - topNode.menuSelectedRows = null; - } + if (topNode.menuSelectedEntry) { + $(topNode.menuSelectedEntry).deselect(); + topNode.menuSelectedEntry = null; + } + if (topNode.menuSelectedRows) { + var nodes = topNode.menuSelectedRows; + for (var i = 0; i < nodes.length; i++) + $(nodes[i]).selectElement(); + topNode.menuSelectedRows = null; + } } function onFolderMenuHide(event) { - var topNode = $('d'); + var topNode = $('d'); - if (topNode.menuSelectedEntry) { - topNode.menuSelectedEntry.deselect(); - topNode.menuSelectedEntry = null; - } - if (topNode.selectedEntry) - topNode.selectedEntry.selectElement(); + if (topNode.menuSelectedEntry) { + topNode.menuSelectedEntry.deselect(); + topNode.menuSelectedEntry = null; + } + if (topNode.selectedEntry) + topNode.selectedEntry.selectElement(); } function _onContactMenuAction(folderItem, action, refresh) { - var selectedFolders = $("contactFolders").getSelectedNodes(); - var folderId = $(folderItem).readAttribute("folderId").substring(1); - if (Object.isArray(document.menuTarget) && selectedFolders.length > 0) { - var selectedFolderId = $(selectedFolders[0]).readAttribute("id"); - var contactIds = $(document.menuTarget).collect(function(row) { - return row.getAttribute("id"); - }); + var selectedFolders = $("contactFolders").getSelectedNodes(); + var folderId = $(folderItem).readAttribute("folderId").substring(1); + if (Object.isArray(document.menuTarget) && selectedFolders.length > 0) { + var selectedFolderId = $(selectedFolders[0]).readAttribute("id"); + var contactIds = $(document.menuTarget).collect(function(row) { + return row.getAttribute("id"); + }); - var url = ApplicationBaseURL + selectedFolderId + "/" + action - + "?folder=" + folderId + "&uid=" - + contactIds.join("&uid="); + var url = ApplicationBaseURL + selectedFolderId + "/" + action + + "?folder=" + folderId + "&uid=" + + contactIds.join("&uid="); - if (refresh) - triggerAjaxRequest(url, actionContactCallback, selectedFolderId); - else - triggerAjaxRequest(url, actionContactCallback); - } + if (refresh) + triggerAjaxRequest(url, actionContactCallback, selectedFolderId); + else + triggerAjaxRequest(url, actionContactCallback); + } } function onContactMenuCopy(event) { - _onContactMenuAction(this, "copy", false); + _onContactMenuAction(this, "copy", false); } function onContactMenuMove(event) { - _onContactMenuAction(this, "move", true); + _onContactMenuAction(this, "move", true); } function actionContactCallback(http) { - if (http.readyState == 4) - if (isHttpStatus204(http.status)) { - var refreshFolderId = http.callbackData; - if (refreshFolderId) - openContactsFolder(refreshFolderId, true); - } - else { - var html = new Element("div").update(http.responseText); - var error = html.select("p").first().firstChild.nodeValue.trim(); - log("actionContactCallback failed: error " + http.status + " (" + error + ")"); - if (parseInt(http.status) == 403) - window.alert(clabels["You don't have the required privileges to perform the operation."]); - else if (error) - window.alert(labels[error]); - refreshCurrentFolder(); - } + if (http.readyState == 4) + if (isHttpStatus204(http.status)) { + var refreshFolderId = http.callbackData; + if (refreshFolderId) + openContactsFolder(refreshFolderId, true); + } + else { + var html = new Element("div").update(http.responseText); + var error = html.select("p").first().firstChild.nodeValue.trim(); + log("actionContactCallback failed: error " + http.status + " (" + error + ")"); + if (parseInt(http.status) == 403) + window.alert(clabels["You don't have the required privileges to perform the operation."]); + else if (error) + window.alert(labels[error]); + refreshCurrentFolder(); + } } function loadContact(idx) { - if (document.contactAjaxRequest) { - document.contactAjaxRequest.aborted = true; - document.contactAjaxRequest.abort(); - } + if (document.contactAjaxRequest) { + document.contactAjaxRequest.aborted = true; + document.contactAjaxRequest.abort(); + } - if (cachedContacts[Contact.currentAddressBook + "/" + idx]) { - var div = $('contactView'); - Contact.currentContact = idx; - div.innerHTML = cachedContacts[Contact.currentAddressBook + "/" + idx]; - } - else { - var url = (URLForFolderID(Contact.currentAddressBook) - + "/" + idx + "/view?noframe=1"); - document.contactAjaxRequest - = triggerAjaxRequest(url, contactLoadCallback, idx); - } + if (cachedContacts[Contact.currentAddressBook + "/" + idx]) { + var div = $('contactView'); + Contact.currentContact = idx; + div.innerHTML = cachedContacts[Contact.currentAddressBook + "/" + idx]; + } + else { + var url = (URLForFolderID(Contact.currentAddressBook) + + "/" + idx + "/view?noframe=1"); + document.contactAjaxRequest + = triggerAjaxRequest(url, contactLoadCallback, idx); + } } function contactLoadCallback(http) { - var div = $('contactView'); + var div = $('contactView'); - if (http.readyState == 4 - && http.status == 200) { - document.contactAjaxRequest = null; - var content = http.responseText; - cachedContacts[Contact.currentAddressBook + "/" + http.callbackData] = content; - Contact.currentContact = http.callbackData; - div.innerHTML = content; - } - else { - log ("ajax problem 2: " + http.status); - refreshCurrentFolder(); - } + if (http.readyState == 4 + && http.status == 200) { + document.contactAjaxRequest = null; + var content = http.responseText; + cachedContacts[Contact.currentAddressBook + "/" + http.callbackData] = content; + Contact.currentContact = http.callbackData; + div.innerHTML = content; + } + else { + log ("ajax problem 2: " + http.status); + refreshCurrentFolder(); + } } var rowSelectionCount = 0; @@ -301,879 +300,880 @@ var rowSelectionCount = 0; validateControls(); function showElement(e, shouldShow) { - e.style.display = shouldShow ? "" : "none"; + e.style.display = shouldShow ? "" : "none"; } function enableElement(e, shouldEnable) { - if(!e) - return; - if(shouldEnable) { - if(e.hasAttribute("disabled")) - e.removeAttribute("disabled"); - } - else { - e.setAttribute("disabled", "1"); - } + if(!e) + return; + if(shouldEnable) { + if(e.hasAttribute("disabled")) + e.removeAttribute("disabled"); + } + else { + e.setAttribute("disabled", "1"); + } } function validateControls() { - var e = $("moveto"); - this.enableElement(e, rowSelectionCount > 0); + var e = $("moveto"); + this.enableElement(e, rowSelectionCount > 0); } function moveTo(uri) { - alert("MoveTo: " + uri); + alert("MoveTo: " + uri); } /* contact menu entries */ function onContactRowDblClick(event) { - var cname = this.getAttribute('id'); + var cname = this.getAttribute('id'); - openContactWindow(URLForFolderID(Contact.currentAddressBook) - + "/" + cname + "/edit", cname); + openContactWindow(URLForFolderID(Contact.currentAddressBook) + + "/" + cname + "/edit", cname); - return false; + return false; } function onContactSelectionChange(event) { - var rows = this.getSelectedRowsId(); + var rows = this.getSelectedRowsId(); - if (rows.length == 1) { - var node = $(rows[0]); - loadContact(node.getAttribute('id')); - } - else if (rows.length > 1) { - $('contactView').update(); - Contact.currentContact = null; - } + if (rows.length == 1) { + var node = $(rows[0]); + loadContact(node.getAttribute('id')); + } + else if (rows.length > 1) { + $('contactView').update(); + Contact.currentContact = null; + } } function onMenuEditContact(event) { - onToolbarEditSelectedContacts(event); + onToolbarEditSelectedContacts(event); } function onMenuWriteToContact(event) { - onToolbarWriteToSelectedContacts(event); + onToolbarWriteToSelectedContacts(event); - if (document.body.hasClassName("popup")) - window.close(); + if (document.body.hasClassName("popup")) + window.close(); } function onMenuAIMContact(event) { - var contactRow = $(document.menuTarget.getAttribute('id')); - var aimCell = contactRow.down('td', 2); + var contactRow = $(document.menuTarget.getAttribute('id')); + var aimCell = contactRow.down('td', 2); - window.location.href = "aim:goim?ScreenName=" + aimCell.firstChild.nodeValue; + window.location.href = "aim:goim?ScreenName=" + aimCell.firstChild.nodeValue; } function onMenuDeleteContact(event) { - onToolbarDeleteSelectedContacts(event); + onToolbarDeleteSelectedContacts(event); } function onToolbarEditSelectedContacts(event) { - var contactsList = $('contactsList'); - var rows = contactsList.getSelectedRowsId(); + var contactsList = $('contactsList'); + var rows = contactsList.getSelectedRowsId(); + + if (rows.length == 0) { + window.alert(labels["Please select a contact."]); + return false; + } + + for (var i = 0; i < rows.length; i++) { + openContactWindow(URLForFolderID(Contact.currentAddressBook) + + "/" + rows[i] + "/edit", rows[i]); + } - if (rows.length == 0) { - window.alert(labels["Please select a contact."]); return false; - } - - for (var i = 0; i < rows.length; i++) { - openContactWindow(URLForFolderID(Contact.currentAddressBook) - + "/" + rows[i] + "/edit", rows[i]); - } - - return false; } function onToolbarWriteToSelectedContacts(event) { - var contactsList = $('contactsList'); - var rows = contactsList.getSelectedRowsId(); - var rowsWithEmail = 0; + var contactsList = $('contactsList'); + var rows = contactsList.getSelectedRowsId(); + var rowsWithEmail = 0; - if (rows.length == 0) { - openMailComposeWindow(ApplicationBaseURL + "Mail/compose"); - return false; - } + if (rows.length == 0) { + openMailComposeWindow(ApplicationBaseURL + "Mail/compose"); + return false; + } - openMailComposeWindow(ApplicationBaseURL + "../Mail/compose" - + "?folder=" + Contact.currentAddressBook.substring(1) - + "&uid=" + rows.join("&uid=")); + openMailComposeWindow(ApplicationBaseURL + "../Mail/compose" + + "?folder=" + Contact.currentAddressBook.substring(1) + + "&uid=" + rows.join("&uid=")); - if (document.body.hasClassName("popup")) - window.close(); + if (document.body.hasClassName("popup")) + window.close(); - return false; + return false; } function onToolbarDeleteSelectedContacts(event) { - var contactsList = $('contactsList'); - var rows = contactsList.getSelectedRowsId(); + var contactsList = $('contactsList'); + var rows = contactsList.getSelectedRowsId(); - if (rows.length) { - var label = labels["Are you sure you want to delete the selected contacts?"]; - if (window.confirm(label)) { - for (var i = 0; i < rows.length; i++) { - delete cachedContacts[Contact.currentAddressBook + "/" + rows[i]]; - var urlstr = (URLForFolderID(Contact.currentAddressBook) + "/" - + rows[i] + "/delete"); - Contact.deleteContactsRequestCount++; - triggerAjaxRequest(urlstr, onContactDeleteEventCallback, - rows[i]); - } + if (rows.length) { + var label = labels["Are you sure you want to delete the selected contacts?"]; + if (window.confirm(label)) { + for (var i = 0; i < rows.length; i++) { + delete cachedContacts[Contact.currentAddressBook + "/" + rows[i]]; + var urlstr = (URLForFolderID(Contact.currentAddressBook) + "/" + + rows[i] + "/delete"); + Contact.deleteContactsRequestCount++; + triggerAjaxRequest(urlstr, onContactDeleteEventCallback, + rows[i]); + } + } + } + else { + window.alert(labels["Please select a contact."]); } - } - else { - window.alert(labels["Please select a contact."]); - } - return false; + return false; } function onContactDeleteEventCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - var row = $(http.callbackData); - if (Contact.currentContact == http.callbackData) { - $("contactView").update(); - Contact.currentContact = null; - } - Contact.deleteContactsRequestCount--; - if (Contact.deleteContactsRequestCount == 0) { - var nextRow = row.next("tr"); - if (!nextRow) - nextRow = row.previous("tr"); - if (nextRow) { - Contact.currentContact = nextRow.getAttribute("id"); - nextRow.selectElement(); - loadContact(Contact.currentContact); - } - } - row.parentNode.removeChild(row); + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + var row = $(http.callbackData); + if (Contact.currentContact == http.callbackData) { + $("contactView").update(); + Contact.currentContact = null; + } + Contact.deleteContactsRequestCount--; + if (Contact.deleteContactsRequestCount == 0) { + var nextRow = row.next("tr"); + if (!nextRow) + nextRow = row.previous("tr"); + if (nextRow) { + Contact.currentContact = nextRow.getAttribute("id"); + nextRow.selectElement(); + loadContact(Contact.currentContact); + } + } + row.parentNode.removeChild(row); + } + else if (parseInt(http.status) == 403) { + var row = $(http.callbackData); + var displayName = row.down("TD.displayName").firstChild.nodeValue.trim(); + Contact.deleteContactsRequestCount--; + window.alert(labels["You cannot delete the card of \"%{0}\"."].formatted(displayName)); + } } - else if (parseInt(http.status) == 403) { - var row = $(http.callbackData); - var displayName = row.down("TD.displayName").firstChild.nodeValue.trim(); - Contact.deleteContactsRequestCount--; - window.alert(labels["You cannot delete the card of \"%{0}\"."].formatted(displayName)); - } - } } function newEmailTo(sender) { - var mailto = sanitizeMailTo(sender.parentNode.parentNode.menuTarget.innerHTML); + var mailto = sanitizeMailTo(sender.parentNode.parentNode.menuTarget.innerHTML); - if (mailto.length > 0) - openMailComposeWindow("compose?mailto=" + mailto); + if (mailto.length > 0) + openMailComposeWindow("compose?mailto=" + mailto); - return false; /* stop following the link */ + return false; /* stop following the link */ } function onHeaderClick(event) { - var headerId = this.getAttribute("id"); - var newSortAttribute; - if (headerId == "nameHeader") - newSortAttribute = "c_cn"; - else if (headerId == "mailHeader") - newSortAttribute = "c_mail"; - else if (headerId == "screenNameHeader") - newSortAttribute = "c_screenname"; - else if (headerId == "orgHeader") - newSortAttribute = "c_o"; - else if (headerId == "phoneHeader") - newSortAttribute = "c_telephonenumber"; + var headerId = this.getAttribute("id"); + var newSortAttribute; + if (headerId == "nameHeader") + newSortAttribute = "c_cn"; + else if (headerId == "mailHeader") + newSortAttribute = "c_mail"; + else if (headerId == "screenNameHeader") + newSortAttribute = "c_screenname"; + else if (headerId == "orgHeader") + newSortAttribute = "c_o"; + else if (headerId == "phoneHeader") + newSortAttribute = "c_telephonenumber"; - if (sorting["attribute"] == newSortAttribute) - sorting["ascending"] = !sorting["ascending"]; - else { - sorting["attribute"] = newSortAttribute; - sorting["ascending"] = true; - } + if (sorting["attribute"] == newSortAttribute) + sorting["ascending"] = !sorting["ascending"]; + else { + sorting["attribute"] = newSortAttribute; + sorting["ascending"] = true; + } - refreshCurrentFolder(); + refreshCurrentFolder(); - Event.stop(event); + Event.stop(event); } function newContact(sender) { - openContactWindow(URLForFolderID(Contact.currentAddressBook) + "/newcontact"); + openContactWindow(URLForFolderID(Contact.currentAddressBook) + "/newcontact"); - return false; /* stop following the link */ + return false; /* stop following the link */ } function onFolderSelectionChange(event) { - var folderList = $("contactFolders"); - var nodes = folderList.getSelectedNodes(); + var folderList = $("contactFolders"); + var nodes = folderList.getSelectedNodes(); - if (event) { - var node = getTarget(event); - if (node.tagName == 'UL') - return; - } + if (event) { + var node = getTarget(event); + if (node.tagName == 'UL') + return; + } - $("contactView").update(); - Contact.currentContact = null; + $("contactView").update(); + Contact.currentContact = null; - if (nodes[0].hasClassName("denied")) { - var div = $("contactsListContent"); - div.update(); - } - else { - search = {}; - $("searchValue").value = ""; - initCriteria(); - openContactsFolder(nodes[0].getAttribute("id")); - } + if (nodes[0].hasClassName("denied")) { + var div = $("contactsListContent"); + div.update(); + } + else { + search = {}; + $("searchValue").value = ""; + initCriteria(); + openContactsFolder(nodes[0].getAttribute("id")); + } } function refreshCurrentFolder() { - openContactsFolder(Contact.currentAddressBook, true); + openContactsFolder(Contact.currentAddressBook, true); } function onConfirmContactSelection(event) { - var tag = this.getAttribute("name"); - var folderLi = $(Contact.currentAddressBook); - var currentAddressBookName = folderLi.innerHTML; - var selectorList = null; - var initialValues = null; + var tag = this.getAttribute("name"); + var folderLi = $(Contact.currentAddressBook); + var currentAddressBookName = folderLi.innerHTML; + var selectorList = null; + var initialValues = null; - var contactsList = $("contactsList"); - var rows = contactsList.getSelectedRows(); - for (i = 0; i < rows.length; i++) { - var cid = rows[i].getAttribute("id"); - var cname = '' + rows[i].getAttribute("contactname"); - var email = '' + rows[i].cells[1].innerHTML; + var contactsList = $("contactsList"); + var rows = contactsList.getSelectedRows(); + for (i = 0; i < rows.length; i++) { + var cid = rows[i].getAttribute("id"); + var cname = '' + rows[i].getAttribute("contactname"); + var email = '' + rows[i].cells[1].innerHTML; - window.opener.addContact(tag, currentAddressBookName + '/' + cname, - cid, cname, email); - } + window.opener.addContact(tag, currentAddressBookName + '/' + cname, + cid, cname, email); + } - preventDefault(event); + preventDefault(event); } function refreshContacts(cname) { - openContactsFolder(Contact.currentAddressBook, true, cname); - delete cachedContacts[Contact.currentAddressBook + "/" + cname]; - loadContact(cname); + openContactsFolder(Contact.currentAddressBook, true, cname); + delete cachedContacts[Contact.currentAddressBook + "/" + cname]; + loadContact(cname); - return false; + return false; } function onAddressBookNew(event) { - createFolder(window.prompt(labels["Name of the Address Book"], ""), - appendAddressBook); - preventDefault(event); + createFolder(window.prompt(labels["Name of the Address Book"], ""), + appendAddressBook); + preventDefault(event); } function appendAddressBook(name, folder) { - var owner; - var result = true; + var owner; + var result = true; - if (folder) { - owner = getSubscribedFolderOwner(folder); - folder = accessToSubscribedFolder(folder); - } - else - folder = "/" + name; + if (folder) { + owner = getSubscribedFolderOwner(folder); + folder = accessToSubscribedFolder(folder); + } + else + folder = "/" + name; - if (!owner) - owner = UserLogin; + if (!owner) + owner = UserLogin; - if ($(folder)) - result = false; - else { - var contactFolders = $("contactFolders"); - var items = contactFolders.childNodesWithTag("li"); - var li = document.createElement("li"); - li = Element.extend(li); + if ($(folder)) + result = false; + else { + var contactFolders = $("contactFolders"); + var items = contactFolders.childNodesWithTag("li"); + var li = document.createElement("li"); + li = Element.extend(li); - // Add the calendar to the proper place - var i = getListIndexForFolder(items, owner, name); - if (i != items.length) // User is subscribed to other calendars of the same owner - contactFolders.insertBefore(li, items[i]); - else - contactFolders.appendChild(li); + // Add the calendar to the proper place + var i = getListIndexForFolder(items, owner, name); + if (i != items.length) // User is subscribed to other calendars of the same owner + contactFolders.insertBefore(li, items[i]); + else + contactFolders.appendChild(li); - li.setAttribute("id", folder); - li.setAttribute("owner", owner); - li.addClassName("local"); - li.appendChild(document.createTextNode(name - .replace("<", "<", "g") - .replace(">", ">", "g"))); - setEventsOnAddressBook(li); - updateAddressBooksMenus(); - configureDragAndDrop (); - } + li.setAttribute("id", folder); + li.setAttribute("owner", owner); + li.addClassName("local"); + li.appendChild(document.createTextNode(name + .replace("<", "<", "g") + .replace(">", ">", "g"))); + setEventsOnAddressBook(li); + updateAddressBooksMenus(); + configureDroppables(); + } - return result; + return result; } function newUserFolderCallback(folderData) { - var folder = $(folderData["folder"]); - if (!folder) - appendAddressBook(folderData["folderName"], folderData["folder"]); + var folder = $(folderData["folder"]); + if (!folder) + appendAddressBook(folderData["folderName"], folderData["folder"]); } function onAddressBookAdd(event) { - openUserFolderSelector(newUserFolderCallback, "contact"); + openUserFolderSelector(newUserFolderCallback, "contact"); - preventDefault(event); + preventDefault(event); } function onFolderUnsubscribeCB(folderId) { - var node = $(folderId); - node.parentNode.removeChild(node); - var personal = $("/personal"); - personal.selectElement(); - onFolderSelectionChange(); + var node = $(folderId); + node.parentNode.removeChild(node); + var personal = $("/personal"); + personal.selectElement(); + onFolderSelectionChange(); } function onAddressBookRemove(event) { - var selector = $("contactFolders"); - var nodes = selector.getSelectedNodes(); - if (nodes.length > 0) { - var node = $(nodes[0]); - node.deselect(); - var owner = node.getAttribute("owner"); - if (owner == "nobody") { - var label = labels["You cannot remove nor unsubscribe from a public addressbook."]; - window.alert(label); + var selector = $("contactFolders"); + var nodes = selector.getSelectedNodes(); + if (nodes.length > 0) { + var node = $(nodes[0]); + node.deselect(); + var owner = node.getAttribute("owner"); + if (owner == "nobody") { + var label = labels["You cannot remove nor unsubscribe from a public addressbook."]; + window.alert(label); + } + else if (owner == UserLogin) { + var folderIdElements = node.getAttribute("id").split(":"); + var abId = folderIdElements[0].substr(1); + deletePersonalAddressBook(abId); + var personal = $("/personal"); + personal.selectElement(); + onFolderSelectionChange(); + } + else { + var folderId = node.getAttribute("id"); + unsubscribeFromFolder(folderId, owner, onFolderUnsubscribeCB, folderId); + } } - else if (owner == UserLogin) { - var folderIdElements = node.getAttribute("id").split(":"); - var abId = folderIdElements[0].substr(1); - deletePersonalAddressBook(abId); - var personal = $("/personal"); - personal.selectElement(); - onFolderSelectionChange(); - } - else { - var folderId = node.getAttribute("id"); - unsubscribeFromFolder(folderId, owner, onFolderUnsubscribeCB, folderId); - } - } - preventDefault(event); + preventDefault(event); } function deletePersonalAddressBook(folderId) { - if (folderId == "personal") { - var label = labels["You cannot remove nor unsubscribe from your personal addressbook."]; - window.alert(label); - } - else { - var label - = labels["Are you sure you want to delete the selected address book?"]; - if (window.confirm(label)) { - if (document.deletePersonalABAjaxRequest) { - document.deletePersonalABAjaxRequest.aborted = true; - document.deletePersonalABAjaxRequest.abort(); - } - var url = ApplicationBaseURL + folderId + "/delete"; - document.deletePersonalABAjaxRequest - = triggerAjaxRequest(url, deletePersonalAddressBookCallback, - folderId); - } - } + if (folderId == "personal") { + var label = labels["You cannot remove nor unsubscribe from your personal addressbook."]; + window.alert(label); + } + else { + var label + = labels["Are you sure you want to delete the selected address book?"]; + if (window.confirm(label)) { + if (document.deletePersonalABAjaxRequest) { + document.deletePersonalABAjaxRequest.aborted = true; + document.deletePersonalABAjaxRequest.abort(); + } + var url = ApplicationBaseURL + folderId + "/delete"; + document.deletePersonalABAjaxRequest + = triggerAjaxRequest(url, deletePersonalAddressBookCallback, + folderId); + } + } } function deletePersonalAddressBookCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - var ul = $("contactFolders"); + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + var ul = $("contactFolders"); - var children = ul.childNodesWithTag("li"); - var i = 0; - var done = false; - while (!done && i < children.length) { - var currentFolderId = children[i].getAttribute("id").substr(1); - if (currentFolderId == http.callbackData) { - ul.removeChild(children[i]); - done = true; - } - else - i++; - } + var children = ul.childNodesWithTag("li"); + var i = 0; + var done = false; + while (!done && i < children.length) { + var currentFolderId = children[i].getAttribute("id").substr(1); + if (currentFolderId == http.callbackData) { + ul.removeChild(children[i]); + done = true; + } + else + i++; + } + } + document.deletePersonalABAjaxRequest = null; } - document.deletePersonalABAjaxRequest = null; - } - else - log ("ajax problem 5: " + http.status); + else + log ("ajax problem 5: " + http.status); } function configureDragHandles() { - var handle = $("dragHandle"); - if (handle) { - handle.addInterface(SOGoDragHandlesInterface); - handle.leftBlock=$("contactFoldersList"); - handle.rightBlock=$("rightPanel"); - handle.leftMargin = 100; - } + var handle = $("dragHandle"); + if (handle) { + handle.addInterface(SOGoDragHandlesInterface); + handle.leftBlock = $("contactFoldersList"); + handle.rightBlock = $("rightPanel"); + handle.leftMargin = 100; + } - handle = $("rightDragHandle"); - if (handle) { - handle.addInterface(SOGoDragHandlesInterface); - handle.upperBlock=$("contactsListContent"); - handle.lowerBlock=$("contactView"); - } + handle = $("rightDragHandle"); + if (handle) { + handle.addInterface(SOGoDragHandlesInterface); + handle.upperBlock = $("contactsListContent"); + handle.lowerBlock = $("contactView"); + } } function lookupDeniedFolders() { - var list = $("contactFolders").childNodesWithTag("li"); - for (var i = 0; i < list.length; i++) { - var folderID = list[i].getAttribute("id"); - var url = URLForFolderID(folderID) + "/canAccessContent"; - triggerAjaxRequest(url, deniedFoldersLookupCallback, folderID); - } + var list = $("contactFolders").childNodesWithTag("li"); + for (var i = 0; i < list.length; i++) { + var folderID = list[i].getAttribute("id"); + var url = URLForFolderID(folderID) + "/canAccessContent"; + triggerAjaxRequest(url, deniedFoldersLookupCallback, folderID); + } } function deniedFoldersLookupCallback(http) { - if (http.readyState == 4) { - var denied = ! isHttpStatus204(http.status); - var entry = $(http.callbackData); - if (denied) - entry.addClassName("denied"); - else - entry.removeClassName("denied"); - } + if (http.readyState == 4) { + var denied = ! isHttpStatus204(http.status); + var entry = $(http.callbackData); + if (denied) + entry.addClassName("denied"); + else + entry.removeClassName("denied"); + } } function configureAbToolbar() { - var toolbar = $("abToolbar"); - if (toolbar) { - var links = toolbar.childNodesWithTag("a"); - $(links[0]).observe("click", onAddressBookNew); - $(links[1]).observe("click", onAddressBookAdd); - $(links[2]).observe("click", onAddressBookRemove); - } + var toolbar = $("abToolbar"); + if (toolbar) { + var links = toolbar.childNodesWithTag("a"); + $(links[0]).observe("click", onAddressBookNew); + $(links[1]).observe("click", onAddressBookAdd); + $(links[2]).observe("click", onAddressBookRemove); + } } function configureAddressBooks() { - var contactFolders = $("contactFolders"); - if (contactFolders) { - contactFolders.observe("mousedown", listRowMouseDownHandler); - contactFolders.observe("click", onFolderSelectionChange); - contactFolders.attachMenu("contactFoldersMenu"); - var lis = contactFolders.childNodesWithTag("li"); - for (var i = 0; i < lis.length; i++) - setEventsOnAddressBook(lis[i]); + var contactFolders = $("contactFolders"); + if (contactFolders) { + contactFolders.observe("mousedown", listRowMouseDownHandler); + contactFolders.observe("click", onFolderSelectionChange); + contactFolders.attachMenu("contactFoldersMenu"); + var lis = contactFolders.childNodesWithTag("li"); + for (var i = 0; i < lis.length; i++) + setEventsOnAddressBook(lis[i]); - lookupDeniedFolders(); - - var personalFolder = $("/personal"); - personalFolder.selectElement(); - openContactsFolder("/personal"); - } + lookupDeniedFolders(); + configureDroppables(); + + var personalFolder = $("/personal"); + personalFolder.selectElement(); + openContactsFolder("/personal"); + } } function onAddressBookMenuPrepareVisibility() { - var selectedFolder = $("contactFolders").getSelectedNodes()[0]; - if (selectedFolder) { - var selectedFolderId = selectedFolder.readAttribute("id"); - $(this).select("li").each(function(menuEntry) { - if (menuEntry.readAttribute("folderId") == selectedFolderId) - menuEntry.addClassName("disabled"); - else - menuEntry.removeClassName("disabled"); - }); - } + var selectedFolder = $("contactFolders").getSelectedNodes()[0]; + if (selectedFolder) { + var selectedFolderId = selectedFolder.readAttribute("id"); + $(this).select("li").each(function(menuEntry) { + if (menuEntry.readAttribute("folderId") == selectedFolderId) + menuEntry.addClassName("disabled"); + else + menuEntry.removeClassName("disabled"); + }); + } - return true; + return true; } function updateAddressBooksMenus() { - var contactFoldersList = $("contactFolders"); - if (contactFoldersList) { - var pageContent = $("pageContent"); - var contactFolders = contactFoldersList.select("li"); - var contactActions = new Hash({ move: onContactMenuMove, - copy: onContactMenuCopy }); - var actions = contactActions.keys(); - for (var j = 0; j < actions.size(); j++) { - var key = actions[j]; - var callbacks = new Array(); - var menuId = key + "ContactMenu"; - var menuDIV = $(menuId); - if (menuDIV) - menuDIV.parentNode.removeChild(menuDIV); + var contactFoldersList = $("contactFolders"); + if (contactFoldersList) { + var pageContent = $("pageContent"); + var contactFolders = contactFoldersList.select("li"); + var contactActions = new Hash({ move: onContactMenuMove, + copy: onContactMenuCopy }); + var actions = contactActions.keys(); + for (var j = 0; j < actions.size(); j++) { + var key = actions[j]; + var callbacks = new Array(); + var menuId = key + "ContactMenu"; + var menuDIV = $(menuId); + if (menuDIV) + menuDIV.parentNode.removeChild(menuDIV); - menuDIV = document.createElement("div"); - pageContent.appendChild(menuDIV); + menuDIV = document.createElement("div"); + pageContent.appendChild(menuDIV); - var menu = document.createElement("ul"); - menuDIV.appendChild(menu); + var menu = document.createElement("ul"); + menuDIV.appendChild(menu); - $(menuDIV).addClassName("menu"); - menuDIV.setAttribute("id", menuId); + $(menuDIV).addClassName("menu"); + menuDIV.setAttribute("id", menuId); - var submenuIds = new Array(); - for (var i = 0; i < contactFolders.length; i++) { - if (contactFolders[i].hasClassName("local")) { - var menuEntry = new Element("li", - { folderId: contactFolders[i].readAttribute("id"), - owner: contactFolders[i].readAttribute("owner") } - ).update(contactFolders[i].innerHTML); - menu.appendChild(menuEntry); - callbacks.push(contactActions.get(key)); - } - } - menuDIV.prepareVisibility = onAddressBookMenuPrepareVisibility; - initMenu(menuDIV, callbacks); - } - } + var submenuIds = new Array(); + for (var i = 0; i < contactFolders.length; i++) { + if (contactFolders[i].hasClassName("local")) { + var menuEntry = new Element("li", + { folderId: contactFolders[i].readAttribute("id"), + owner: contactFolders[i].readAttribute("owner") } + ).update(contactFolders[i].innerHTML); + menu.appendChild(menuEntry); + callbacks.push(contactActions.get(key)); + } + } + menuDIV.prepareVisibility = onAddressBookMenuPrepareVisibility; + initMenu(menuDIV, callbacks); + } + } } function setEventsOnAddressBook(folder) { - var node = $(folder); + var node = $(folder); - node.observe("mousedown", listRowMouseDownHandler); - node.observe("click", onRowClick); - node.observe("dblclick", onAddressBookModify); + node.observe("mousedown", listRowMouseDownHandler); + node.observe("click", onRowClick); + node.observe("dblclick", onAddressBookModify); } function onAddressBookModify(event) { - var folders = $("contactFolders"); - var selected = folders.getSelectedNodes()[0]; + var folders = $("contactFolders"); + var selected = folders.getSelectedNodes()[0]; - if (UserLogin == selected.getAttribute("owner")) { - var currentName = selected.innerHTML; - var newName = window.prompt(labels["Address Book Name"], - currentName); - if (newName && newName.length > 0 - && newName != currentName) { - var url = (URLForFolderID(selected.getAttribute("id")) - + "/renameFolder?name=" + escape(newName.utf8encode())); - triggerAjaxRequest(url, folderRenameCallback, - {node: selected, name: newName}); - } - } else - window.alert(clabels["Unable to rename that folder!"]); + if (UserLogin == selected.getAttribute("owner")) { + var currentName = selected.innerHTML; + var newName = window.prompt(labels["Address Book Name"], + currentName); + if (newName && newName.length > 0 + && newName != currentName) { + var url = (URLForFolderID(selected.getAttribute("id")) + + "/renameFolder?name=" + escape(newName.utf8encode())); + triggerAjaxRequest(url, folderRenameCallback, + {node: selected, name: newName}); + } + } else + window.alert(clabels["Unable to rename that folder!"]); } function folderRenameCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - var dict = http.callbackData; - dict["node"].innerHTML = dict["name"]; + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + var dict = http.callbackData; + dict["node"].innerHTML = dict["name"]; + } } - } } function onMenuSharing(event) { - if ($(this).hasClassName("disabled")) - return; + if ($(this).hasClassName("disabled")) + return; - var folders = $("contactFolders"); - var selected = folders.getSelectedNodes()[0]; - var owner = selected.getAttribute("owner"); - if (owner == "nobody") - window.alert(clabels["The user rights cannot be" - + " edited for this object!"]); - else { - var title = this.innerHTML; - var url = URLForFolderID(selected.getAttribute("id")); + var folders = $("contactFolders"); + var selected = folders.getSelectedNodes()[0]; + var owner = selected.getAttribute("owner"); + if (owner == "nobody") + window.alert(clabels["The user rights cannot be" + + " edited for this object!"]); + else { + var title = this.innerHTML; + var url = URLForFolderID(selected.getAttribute("id")); - openAclWindow(url + "/acls", title); - } + openAclWindow(url + "/acls", title); + } } function onAddressBooksMenuPrepareVisibility() { - var folders = $("contactFolders"); - var selected = folders.getSelectedNodes(); + var folders = $("contactFolders"); + var selected = folders.getSelectedNodes(); - if (selected.length > 0) { - var folderOwner = selected[0].getAttribute("owner"); + if (selected.length > 0) { + var folderOwner = selected[0].getAttribute("owner"); - var menu = $("contactFoldersMenu").down("ul");; - var listElements = menu.childNodesWithTag("li"); - var modifyOption = $(listElements[0]); - var removeOption = $(listElements[5]); - var sharingOption = $(listElements[listElements.length - 1]); + var menu = $("contactFoldersMenu").down("ul");; + var listElements = menu.childNodesWithTag("li"); + var modifyOption = $(listElements[0]); + var removeOption = $(listElements[5]); + var sharingOption = $(listElements[listElements.length - 1]); - // Disable the "Sharing" and "Modify" options when address book - // is not owned by user - if (folderOwner == UserLogin || IsSuperUser) { - modifyOption.removeClassName("disabled"); - sharingOption.removeClassName("disabled"); - } - else { - modifyOption.addClassName("disabled"); - sharingOption.addClassName("disabled"); + // Disable the "Sharing" and "Modify" options when address book + // is not owned by user + if (folderOwner == UserLogin || IsSuperUser) { + modifyOption.removeClassName("disabled"); + sharingOption.removeClassName("disabled"); + } + else { + modifyOption.addClassName("disabled"); + sharingOption.addClassName("disabled"); + } + + // Disable the "remove" option when address book is public + if (folderOwner == "nobody") + removeOption.addClassName("disabled"); + else + removeOption.removeClassName("disabled"); + + return true; } - // Disable the "remove" option when address book is public - if (folderOwner == "nobody") - removeOption.addClassName("disabled"); - else - removeOption.removeClassName("disabled"); - - return true; - } - - return false; + return false; } function onContactMenuPrepareVisibility() { - var contactRows = document.menuTarget; - var selectedFolder = $("contactFolders").getSelectedNodes().first(); - var options = { write: false, - aim: false }; + var contactRows = document.menuTarget; + var selectedFolder = $("contactFolders").getSelectedNodes().first(); + var options = { write: false, + aim: false }; - var elements = $(this).down("ul").childElements(); - var writeOption = elements[2]; - var aimOption = elements[3]; - var deleteOption = elements[5]; - var moveOption = elements[7]; + var elements = $(this).down("ul").childElements(); + var writeOption = elements[2]; + var aimOption = elements[3]; + var deleteOption = elements[5]; + var moveOption = elements[7]; - $A(contactRows).each(function(contactRow) { - var cells = contactRow.getElementsByTagName('td'); - var emailCell = cells[1]; - options.write |= (emailCell.firstChild != null); - var aimCell = cells[2]; - options.aim |= (aimCell.firstChild != null); - }); + $A(contactRows).each(function(contactRow) { + var cells = contactRow.getElementsByTagName('td'); + var emailCell = cells[1]; + options.write |= (emailCell.firstChild != null); + var aimCell = cells[2]; + options.aim |= (aimCell.firstChild != null); + }); - if (options.write) - writeOption.removeClassName("disabled"); - else - writeOption.addClassName("disabled"); - if (options.aim) - aimOption.removeClassName("disabled"); - else - aimOption.addClassName("disabled"); + if (options.write) + writeOption.removeClassName("disabled"); + else + writeOption.addClassName("disabled"); + if (options.aim) + aimOption.removeClassName("disabled"); + else + aimOption.addClassName("disabled"); - if ($(selectedFolder).hasClassName("remote")) { - // Remote address books are always read-only - deleteOption.addClassName("disabled"); - moveOption.addClassName("disabled"); - } - else { - deleteOption.removeClassName("disabled"); - moveOption.removeClassName("disabled"); - } + if ($(selectedFolder).hasClassName("remote")) { + // Remote address books are always read-only + deleteOption.addClassName("disabled"); + moveOption.addClassName("disabled"); + } + else { + deleteOption.removeClassName("disabled"); + moveOption.removeClassName("disabled"); + } - return true; + return true; } function getMenus() { - var menus = {}; - menus["contactFoldersMenu"] = new Array(onAddressBookModify, "-", newContact, - null, "-", onAddressBookRemove, "-", - onMenuSharing); - menus["contactMenu"] = new Array(onMenuEditContact, "-", - onMenuWriteToContact, onMenuAIMContact, - "-", onMenuDeleteContact, "-", - "moveContactMenu", "copyContactMenu"); - menus["searchMenu"] = new Array(setSearchCriteria); + var menus = {}; + menus["contactFoldersMenu"] = new Array(onAddressBookModify, "-", newContact, + null, "-", onAddressBookRemove, "-", + onMenuSharing); + menus["contactMenu"] = new Array(onMenuEditContact, "-", + onMenuWriteToContact, onMenuAIMContact, + "-", onMenuDeleteContact, "-", + "moveContactMenu", "copyContactMenu"); + menus["searchMenu"] = new Array(setSearchCriteria); - var contactFoldersMenu = $("contactFoldersMenu"); - if (contactFoldersMenu) - contactFoldersMenu.prepareVisibility = onAddressBooksMenuPrepareVisibility; - var contactMenu = $("contactMenu"); - if (contactMenu) - contactMenu.prepareVisibility = onContactMenuPrepareVisibility; + var contactFoldersMenu = $("contactFoldersMenu"); + if (contactFoldersMenu) + contactFoldersMenu.prepareVisibility = onAddressBooksMenuPrepareVisibility; + var contactMenu = $("contactMenu"); + if (contactMenu) + contactMenu.prepareVisibility = onContactMenuPrepareVisibility; - return menus; + return menus; } function configureSelectionButtons() { - var container = $("contactSelectionButtons"); - if (container) { - var buttons = container.select("input"); - for (var i = 0; i < buttons.length; i++) - $(buttons[i]).observe("click", onConfirmContactSelection); - } + var container = $("contactSelectionButtons"); + if (container) { + var buttons = container.select("input"); + for (var i = 0; i < buttons.length; i++) + $(buttons[i]).observe("click", onConfirmContactSelection); + } } function onWindowResize(event) { - var handle = $("dragHandle"); - if (handle) - handle.adjust(); - handle = $("rightDragHandle"); - if (handle) - handle.adjust(); + var handle = $("dragHandle"); + if (handle) + handle.adjust(); + handle = $("rightDragHandle"); + if (handle) + handle.adjust(); } function onDocumentKeydown(event) { - var target = Event.element(event); - if (target.tagName != "INPUT") - if (event.keyCode == Event.KEY_DELETE || - event.keyCode == Event.KEY_BACKSPACE && isMac()) { - onToolbarDeleteSelectedContacts(); - Event.stop(event); - } - else if (event.keyCode == Event.KEY_DOWN || - event.keyCode == Event.KEY_UP) { - if (Contact.currentContact) { - var row = $(Contact.currentContact); - var nextRow; - if (event.keyCode == Event.KEY_DOWN) - nextRow = row.next("tr"); - else - nextRow = row.previous("tr"); - if (nextRow) { - row.up().deselectAll(); + var target = Event.element(event); + if (target.tagName != "INPUT") + if (event.keyCode == Event.KEY_DELETE || + event.keyCode == Event.KEY_BACKSPACE && isMac()) { + onToolbarDeleteSelectedContacts(); + Event.stop(event); + } + else if (event.keyCode == Event.KEY_DOWN || + event.keyCode == Event.KEY_UP) { + if (Contact.currentContact) { + var row = $(Contact.currentContact); + var nextRow; + if (event.keyCode == Event.KEY_DOWN) + nextRow = row.next("tr"); + else + nextRow = row.previous("tr"); + if (nextRow) { + row.up().deselectAll(); - // Adjust the scollbar - var viewPort = $("contactsListContent"); - var divDimensions = viewPort.getDimensions(); - var rowScrollOffset = nextRow.cumulativeScrollOffset(); - var rowPosition = nextRow.positionedOffset(); - var divBottom = divDimensions.height + rowScrollOffset.top; - var rowBottom = rowPosition.top + nextRow.getHeight(); + // Adjust the scollbar + var viewPort = $("contactsListContent"); + var divDimensions = viewPort.getDimensions(); + var rowScrollOffset = nextRow.cumulativeScrollOffset(); + var rowPosition = nextRow.positionedOffset(); + var divBottom = divDimensions.height + rowScrollOffset.top; + var rowBottom = rowPosition.top + nextRow.getHeight(); - if (divBottom < rowBottom) - viewPort.scrollTop += rowBottom - divBottom; - else if (rowScrollOffset.top > rowPosition.top) - viewPort.scrollTop -= rowScrollOffset.top - rowPosition.top; + if (divBottom < rowBottom) + viewPort.scrollTop += rowBottom - divBottom; + else if (rowScrollOffset.top > rowPosition.top) + viewPort.scrollTop -= rowScrollOffset.top - rowPosition.top; - // Select and load the next message - nextRow.selectElement(); - loadContact(nextRow.readAttribute("id")); - } - Event.stop(event); - } - } + // Select and load the next message + nextRow.selectElement(); + loadContact(nextRow.readAttribute("id")); + } + Event.stop(event); + } + } } function initContacts(event) { - if ($(document.body).hasClassName("popup")) - configureSelectionButtons(); - else if (Prototype.Browser.Gecko) - Event.observe(document, "keypress", onDocumentKeydown); // for FF2 - else - Event.observe(document, "keydown", onDocumentKeydown); - configureAbToolbar(); - configureAddressBooks(); - updateAddressBooksMenus(); - // initDnd(); + if ($(document.body).hasClassName("popup")) + configureSelectionButtons(); + else if (Prototype.Browser.Gecko) + Event.observe(document, "keypress", onDocumentKeydown); // for FF2 + else + Event.observe(document, "keydown", onDocumentKeydown); + configureAbToolbar(); + configureAddressBooks(); + updateAddressBooksMenus(); - var table = $("contactsList"); - if (table) { - // Initialize contacts table - table.multiselect = true; - table.observe("mousedown", onContactSelectionChange); - configureSortableTableHeaders(table); - TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true}); - } + var table = $("contactsList"); + if (table) { + // Initialize contacts table + table.multiselect = true; + table.observe("mousedown", onContactSelectionChange); + configureSortableTableHeaders(table); + TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true}); + } - onWindowResize.defer(); - Event.observe(window, "resize", onWindowResize); + onWindowResize.defer(); + Event.observe(window, "resize", onWindowResize); - // Default sort options - sorting["attribute"] = "c_cn"; - sorting["ascending"] = true; + // Default sort options + sorting["attribute"] = "c_cn"; + sorting["ascending"] = true; } -function configureDragAndDrop () { - Droppables.empty (); - Draggables.empty (); - var mainElement = new Element ("div", {id: "dragDropVisual"}); - document.body.appendChild(mainElement); - mainElement.absolutize (); - mainElement.style.display = "none"; - - new Draggable ("dragDropVisual", - { - handle: "contactsList", - onStart: startDragging, - onEnd: stopDragging, - onDrag: whileDragging, - scroll: window - }); - - var drops = $$("ul#contactFolders li"); - drops.each (function (drop) { - if (!drop.hasClassName ("remote")) - Droppables.add (drop.id, - { - hoverclass: "genericHoverClass", - onDrop: dropAction - }); - }); +function configureDraggables() { + var mainElement = $("dragDropVisual"); + Draggables.empty (); + + if (mainElement == null) { + mainElement = new Element ("div", {id: "dragDropVisual"}); + document.body.appendChild(mainElement); + mainElement.absolutize (); + } + mainElement.hide(); + + new Draggable ("dragDropVisual", + { handle: "contactsList", + onStart: startDragging, + onEnd: stopDragging, + onDrag: whileDragging, + scroll: window + }); +} +function configureDroppables() { + var drops = $$("ul#contactFolders li"); + + Droppables.empty (); + drops.each (function (drop) { + if (!drop.hasClassName ("remote")) + Droppables.add (drop.id, + { hoverclass: "genericHoverClass", + onDrop: dropAction + }); + }); } function currentFolderIsRemote () { - rc = false; - var selectedFolders = $("contactFolders").getSelectedNodes(); - if (selectedFolders.length > 0) { - var fromObject = $(selectedFolders[0]); - rc = fromObject.hasClassName ("remote"); - } - return rc; + rc = false; + var selectedFolders = $("contactFolders").getSelectedNodes(); + if (selectedFolders.length > 0) { + var fromObject = $(selectedFolders[0]); + rc = fromObject.hasClassName ("remote"); + } + return rc; } function containsVLF (ids) { - var rc = false; + var rc = false; - for (var i=0; i < ids.length; i++) - if (ids[i].match ("\.vlf$") == ".vlf") - rc = true; + for (var i=0; i < ids.length; i++) + if (ids[i].match ("\.vlf$") == ".vlf") + rc = true; - return rc; + return rc; } function startDragging (itm, e) { - var target = Event.element(e); - if (target.up().up().tagName != "TBODY") - return false; - - var handle = $("dragDropVisual"); - var contacts = $('contactsList').getSelectedRowsId(); - var count = contacts.length; - - if (!containsVLF (contacts)) { - handle.style.display = "block"; - handle.update (count); - if (e.shiftKey || currentFolderIsRemote ()) - handle.addClassName ("copy"); - } + var target = Event.element(e); + if (target.up().up().tagName != "TBODY") + return false; + + var handle = $("dragDropVisual"); + var contacts = $('contactsList').getSelectedRowsId(); + var count = contacts.length; + + if (!containsVLF (contacts)) { + handle.show(); + handle.update (count); + if (e.shiftKey || currentFolderIsRemote ()) + handle.addClassName ("copy"); + } } function whileDragging (itm, e) { - var handle = $("dragDropVisual"); - if (e.shiftKey || currentFolderIsRemote ()) - handle.addClassName ("copy"); - else if (handle.hasClassName ("copy")) - handle.removeClassName ("copy"); + var handle = $("dragDropVisual"); + if (e.shiftKey || currentFolderIsRemote ()) + handle.addClassName ("copy"); + else if (handle.hasClassName ("copy")) + handle.removeClassName ("copy"); } function stopDragging () { - var handle = $("dragDropVisual"); - handle.style.display = "none"; - if (handle.hasClassName ("copy")) - handle.removeClassName ("copy"); + var handle = $("dragDropVisual"); + handle.hide(); + if (handle.hasClassName ("copy")) + handle.removeClassName ("copy"); } function dropAction (dropped, zone, e) { - var action = "move"; - if ($("dragDropVisual").hasClassName ("copy")) - action = "copy"; - dropSelectedContacts (action, zone.id.substr (1)); - - if (action != "copy") { - var div = $('contactView'); - div.innerHTML = ""; - } + var action = "move"; + if ($("dragDropVisual").hasClassName ("copy")) + action = "copy"; + else + $('contactView').update(); + dropSelectedContacts (action, zone.id.substr (1)); } function dropSelectedContacts (action, toId) { - var selectedFolders = $("contactFolders").getSelectedNodes(); - if (selectedFolders.length > 0) { - var contactIds = $('contactsList').getSelectedRowsId(); - if (!containsVLF (contactIds)) { - var fromId = $(selectedFolders[0]).id; - if (!currentFolderIsRemote () || action != "move") { - var url = ApplicationBaseURL + fromId + "/" + action - + "?folder=" + toId + "&uid=" - + contactIds.join("&uid="); + var selectedFolders = $("contactFolders").getSelectedNodes(); + if (selectedFolders.length > 0) { + var contactIds = $('contactsList').getSelectedRowsId(); + if (!containsVLF (contactIds)) { + var fromId = $(selectedFolders[0]).id; + if (!currentFolderIsRemote () || action != "move") { + var url = ApplicationBaseURL + fromId + "/" + action + + "?folder=" + toId + "&uid=" + + contactIds.join("&uid="); - triggerAjaxRequest(url, actionContactCallback, fromId); - } + triggerAjaxRequest(url, actionContactCallback, fromId); + } + } } - } } diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 0a7aa53b4..eef774594 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -5,29 +5,29 @@ var accounts = {}; var mailboxTree; var mailAccounts; if (typeof textMailAccounts != 'undefined') { - if (textMailAccounts.length > 0) - mailAccounts = textMailAccounts.evalJSON(true); - else - mailAccounts = new Array(); - } + if (textMailAccounts.length > 0) + mailAccounts = textMailAccounts.evalJSON(true); + else + mailAccounts = new Array(); +} var defaultColumnsOrder; if (typeof textDefaultColumnsOrder != 'undefined') { - if (textDefaultColumnsOrder.length > 0) - defaultColumnsOrder = textDefaultColumnsOrder.evalJSON(true); - else - defaultColumnsOrder = new Array(); - } + if (textDefaultColumnsOrder.length > 0) + defaultColumnsOrder = textDefaultColumnsOrder.evalJSON(true); + else + defaultColumnsOrder = new Array(); +} var Mailer = { - currentMailbox: null, - currentMailboxType: "", - currentMessages: {}, - maxCachedMessages: 20, - cachedMessages: new Array(), - foldersStateTimer: false, - popups: new Array(), - quotas: null + currentMailbox: null, + currentMailboxType: "", + currentMessages: {}, + maxCachedMessages: 20, + cachedMessages: new Array(), + foldersStateTimer: false, + popups: new Array(), + quotas: null }; var usersRightsWindowHeight = 320; @@ -40,193 +40,193 @@ var deleteMessageRequestCount = 0; var messageCheckTimer; /* We need to override this method since it is adapted to GCS-based folder - references, which we do not use here */ + references, which we do not use here */ function URLForFolderID(folderID) { - var url = ApplicationBaseURL + encodeURI(folderID); + var url = ApplicationBaseURL + encodeURI(folderID); - if (url[url.length-1] == '/') - url = url.substr(0, url.length-1); + if (url[url.length-1] == '/') + url = url.substr(0, url.length-1); - return url; + return url; } /* mail list */ function openMessageWindow(msguid, url) { - var wId = ''; - if (msguid) { - wId += "SOGo_msg" + msguid; - markMailReadInWindow(window, msguid); - } - var msgWin = openMailComposeWindow(url, wId); - msgWin.messageUID = msguid; - msgWin.focus(); - Mailer.popups.push(msgWin); + var wId = ''; + if (msguid) { + wId += "SOGo_msg" + msguid; + markMailReadInWindow(window, msguid); + } + var msgWin = openMailComposeWindow(url, wId); + msgWin.messageUID = msguid; + msgWin.focus(); + Mailer.popups.push(msgWin); - return false; + return false; } function onMessageDoubleClick(event) { - var action; + var action; - if (Mailer.currentMailboxType == "draft") - action = "edit"; - else - action = "popupview"; + if (Mailer.currentMailboxType == "draft") + action = "edit"; + else + action = "popupview"; - return openMessageWindowsForSelection(action, true); + return openMessageWindowsForSelection(action, true); } function toggleMailSelect(sender) { - var row; - row = $(sender.name); - row.className = sender.checked ? "tableview_selected" : "tableview"; + var row; + row = $(sender.name); + row.className = sender.checked ? "tableview_selected" : "tableview"; } function openAddressbook(sender) { - var urlstr; + var urlstr; - 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"); - w.focus(); + 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"); + w.focus(); - return false; + return false; } function onMenuSharing(event) { - var folderID = document.menuTarget.getAttribute("dataname"); - var type = document.menuTarget.getAttribute("datatype"); + var folderID = document.menuTarget.getAttribute("dataname"); + var type = document.menuTarget.getAttribute("datatype"); - if (type == "additional") - window.alert(clabels["The user rights cannot be" - + " edited for this object!"]); - else { - var urlstr = URLForFolderID(folderID) + "/acls"; - openAclWindow(urlstr); - } + if (type == "additional") + window.alert(clabels["The user rights cannot be" + + " edited for this object!"]); + else { + var urlstr = URLForFolderID(folderID) + "/acls"; + openAclWindow(urlstr); + } } /* mail list DOM changes */ function markMailInWindow(win, msguid, markread) { - var row = win.$("row_" + msguid); - var subjectCell = win.$("div_" + msguid); - var unseenCount = 0; + var row = win.$("row_" + msguid); + var subjectCell = win.$("div_" + msguid); + var unseenCount = 0; - if (row && subjectCell) { - if (markread) { - if (row.hasClassName("mailer_unreadmail")) { - 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); - } - unseenCount = -1; - } - } - else { - if (!row.hasClassName("mailer_unreadmail")) { - 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); - } - unseenCount = 1; - } + if (row && subjectCell) { + if (markread) { + if (row.hasClassName("mailer_unreadmail")) { + 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); + } + unseenCount = -1; + } + } + else { + if (!row.hasClassName("mailer_unreadmail")) { + 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); + } + unseenCount = 1; + } + } } - } - if (unseenCount != 0) { - /* Update unseen count only if it's the inbox */ - for (var i = 0; i < mailboxTree.aNodes.length; i++) - if (mailboxTree.aNodes[i].datatype == "inbox") break; - if (i != mailboxTree.aNodes.length && Mailer.currentMailbox == mailboxTree.aNodes[i].dataname) - updateStatusFolders(unseenCount, true); - } + if (unseenCount != 0) { + /* Update unseen count only if it's the inbox */ + for (var i = 0; i < mailboxTree.aNodes.length; i++) + if (mailboxTree.aNodes[i].datatype == "inbox") break; + if (i != mailboxTree.aNodes.length && Mailer.currentMailbox == mailboxTree.aNodes[i].dataname) + updateStatusFolders(unseenCount, true); + } - return (unseenCount != 0); + return (unseenCount != 0); } function markMailReadInWindow(win, msguid) { - /* this is called by UIxMailView with window.opener */ - return markMailInWindow(win, msguid, true); + /* this is called by UIxMailView with window.opener */ + return markMailInWindow(win, msguid, true); } /* mail list reply */ function openMessageWindowsForSelection(action, firstOnly) { - 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(Mailer.currentMailbox + "/" + rows[i].substr(4), - ApplicationBaseURL + encodeURI(Mailer.currentMailbox) - + "/" + rows[i].substr(4) - + "/" + action); - if (firstOnly) - break; - } - } else { - window.alert(labels["Please select a message."]); + 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(Mailer.currentMailbox + "/" + rows[i].substr(4), + ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + + "/" + rows[i].substr(4) + + "/" + action); + if (firstOnly) + break; + } + } else { + window.alert(labels["Please select a message."]); + } } - } - return false; + return false; } function mailListMarkMessage(event) { - 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 + encodeURI(Mailer.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 + encodeURI(Mailer.currentMailbox) + "/" + msguid + "/" + action; - var data = { "window": window, "msguid": msguid, "markread": markread }; - triggerAjaxRequest(url, mailListMarkMessageCallback, data); + var data = { "window": window, "msguid": msguid, "markread": markread }; + triggerAjaxRequest(url, mailListMarkMessageCallback, data); - preventDefault(event); - return false; + preventDefault(event); + return false; } function mailListMarkMessageCallback(http) { - if (isHttpStatus204(http.status)) { - var data = http.callbackData; - markMailInWindow(data["window"], data["msguid"], data["markread"]); - } - else { - alert("Message Mark Failed (" + http.status + "): " + http.statusText); - window.location.reload(); - } + if (isHttpStatus204(http.status)) { + var data = http.callbackData; + markMailInWindow(data["window"], data["msguid"], data["markread"]); + } + else { + alert("Message Mark Failed (" + http.status + "): " + http.statusText); + window.location.reload(); + } } /* maillist row highlight */ @@ -234,888 +234,896 @@ function mailListMarkMessageCallback(http) { var oldMaillistHighlight = null; // to remember deleted/selected style function ml_highlight(sender) { - oldMaillistHighlight = sender.className; - if (oldMaillistHighlight == "tableview_highlight") - oldMaillistHighlight = null; - sender.className = "tableview_highlight"; + oldMaillistHighlight = sender.className; + if (oldMaillistHighlight == "tableview_highlight") + oldMaillistHighlight = null; + sender.className = "tableview_highlight"; } function ml_lowlight(sender) { - if (oldMaillistHighlight) { - sender.className = oldMaillistHighlight; - oldMaillistHighlight = null; - } - else - sender.className = "tableview"; + if (oldMaillistHighlight) { + sender.className = oldMaillistHighlight; + oldMaillistHighlight = null; + } + else + sender.className = "tableview"; } function onUnload(event) { - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/expunge"; + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/expunge"; - new Ajax.Request(url, { - asynchronous: false, - method: 'get', - onFailure: function(transport) { - log("Can't expunge current folder: " + transport.status); - } - }); + new Ajax.Request(url, { + asynchronous: false, + method: 'get', + onFailure: function(transport) { + log("Can't expunge current folder: " + transport.status); + } + }); - return true; + return true; } function onDocumentKeydown(event) { - var target = Event.element(event); - if (target.tagName != "INPUT") - if (event.keyCode == Event.KEY_DELETE || - event.keyCode == Event.KEY_BACKSPACE && isMac()) { - deleteSelectedMessages(); - Event.stop(event); - } - else if (event.keyCode == Event.KEY_DOWN || - event.keyCode == Event.KEY_UP) { - if (Mailer.currentMessages[Mailer.currentMailbox]) { - var row = $("row_" + Mailer.currentMessages[Mailer.currentMailbox]); - var nextRow; - if (event.keyCode == Event.KEY_DOWN) - nextRow = row.next("tr"); - else - nextRow = row.previous("tr"); - if (nextRow) { - Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4); - row.up().deselectAll(); + var target = Event.element(event); + if (target.tagName != "INPUT") + if (event.keyCode == Event.KEY_DELETE || + event.keyCode == Event.KEY_BACKSPACE && isMac()) { + deleteSelectedMessages(); + Event.stop(event); + } + else if (event.keyCode == Event.KEY_DOWN || + event.keyCode == Event.KEY_UP) { + if (Mailer.currentMessages[Mailer.currentMailbox]) { + var row = $("row_" + Mailer.currentMessages[Mailer.currentMailbox]); + var nextRow; + if (event.keyCode == Event.KEY_DOWN) + nextRow = row.next("tr"); + else + nextRow = row.previous("tr"); + if (nextRow) { + Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4); + row.up().deselectAll(); - // Adjust the scollbar - var viewPort = $("mailboxContent"); - var divDimensions = viewPort.getDimensions(); - var rowScrollOffset = nextRow.cumulativeScrollOffset(); - var rowPosition = nextRow.positionedOffset(); - var divBottom = divDimensions.height + rowScrollOffset.top; - var rowBottom = rowPosition.top + nextRow.getHeight(); + // Adjust the scollbar + var viewPort = $("mailboxContent"); + var divDimensions = viewPort.getDimensions(); + var rowScrollOffset = nextRow.cumulativeScrollOffset(); + var rowPosition = nextRow.positionedOffset(); + var divBottom = divDimensions.height + rowScrollOffset.top; + var rowBottom = rowPosition.top + nextRow.getHeight(); - if (divBottom < rowBottom) - viewPort.scrollTop += rowBottom - divBottom; - else if (rowScrollOffset.top > rowPosition.top) - viewPort.scrollTop -= rowScrollOffset.top - rowPosition.top; + if (divBottom < rowBottom) + viewPort.scrollTop += rowBottom - divBottom; + else if (rowScrollOffset.top > rowPosition.top) + viewPort.scrollTop -= rowScrollOffset.top - rowPosition.top; - // Select and load the next message - nextRow.selectElement(); - loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); - } - Event.stop(event); - } - } + // Select and load the next message + nextRow.selectElement(); + loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); + } + Event.stop(event); + } + } } /* bulk delete of messages */ function deleteSelectedMessages(sender) { - var messageList = $("messageList").down("TBODY"); - var rows = messageList.getSelectedNodes(); - var uids = new Array(); // message IDs - var paths = new Array(); // row IDs + var messageList = $("messageList").down("TBODY"); + var rows = messageList.getSelectedNodes(); + var uids = new Array(); // message IDs + var paths = new Array(); // row IDs - if (rows.length > 0) { - for (var i = 0; i < rows.length; i++) { - var uid = rows[i].readAttribute("id").substr(4); - var path = Mailer.currentMailbox + "/" + uid; - deleteMessageRequestCount++; - rows[i].hide(); - uids.push(uid); - paths.push(path); + if (rows.length > 0) { + for (var i = 0; i < rows.length; i++) { + var uid = rows[i].readAttribute("id").substr(4); + var path = Mailer.currentMailbox + "/" + uid; + deleteMessageRequestCount++; + rows[i].hide(); + uids.push(uid); + paths.push(path); + } + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/batchDelete"; + var parameters = "uid=" + uids.join(","); + var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths }; + triggerAjaxRequest(url, deleteSelectedMessagesCallback, data, parameters, + { "Content-type": "application/x-www-form-urlencoded" }); } - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/batchDelete"; - var parameters = "uid=" + uids.join(","); - var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths }; - triggerAjaxRequest(url, deleteSelectedMessagesCallback, data, parameters, - { "Content-type": "application/x-www-form-urlencoded" }); - } - else - window.alert(labels["Please select a message."]); + else + window.alert(labels["Please select a message."]); - return false; + return false; } function deleteSelectedMessagesCallback(http) { - if (isHttpStatus204(http.status)) { - var data = http.callbackData; - for (var i = 0; i < data["path"].length; i++) { - deleteCachedMessage(data["path"][i]); - deleteMessageRequestCount--; - if (Mailer.currentMailbox == data["mailbox"]) { - var div = $('messageContent'); - if (Mailer.currentMessages[Mailer.currentMailbox] == data["id"][i]) { - div.update(); - Mailer.currentMessages[Mailer.currentMailbox] = null; - } - var row = $("row_" + data["id"][i]); - if (deleteMessageRequestCount == 0) { - var nextRow = row.next("tr"); - if (!nextRow) - nextRow = row.previous("tr"); - // row.addClassName("deleted"); // when we'll offer "mark as deleted" - if (nextRow) { - Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4); - nextRow.selectElement(); - loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); - } - else { - div.update(); - } - refreshCurrentFolder(); - } - row.parentNode.removeChild(row); - } - } - } - else - log ("deleteSelectedMessagesCallback: problem during ajax request " + http.status); + if (isHttpStatus204(http.status)) { + var data = http.callbackData; + for (var i = 0; i < data["path"].length; i++) { + deleteCachedMessage(data["path"][i]); + deleteMessageRequestCount--; + if (Mailer.currentMailbox == data["mailbox"]) { + var div = $('messageContent'); + if (Mailer.currentMessages[Mailer.currentMailbox] == data["id"][i]) { + div.update(); + Mailer.currentMessages[Mailer.currentMailbox] = null; + } + var row = $("row_" + data["id"][i]); + if (deleteMessageRequestCount == 0) { + var nextRow = row.next("tr"); + if (!nextRow) + nextRow = row.previous("tr"); + // row.addClassName("deleted"); // when we'll offer "mark as deleted" + if (nextRow) { + Mailer.currentMessages[Mailer.currentMailbox] = nextRow.getAttribute("id").substr(4); + nextRow.selectElement(); + loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); + } + else { + div.update(); + } + refreshCurrentFolder(); + } + row.parentNode.removeChild(row); + } + } + } + else + log ("deleteSelectedMessagesCallback: problem during ajax request " + http.status); } function onMenuDeleteMessage(event) { - deleteSelectedMessages(); - preventDefault(event); + deleteSelectedMessages(); + preventDefault(event); } function deleteMessage(url, id, mailbox, messageId) { - var data = { "id": new Array(id), "mailbox": mailbox, "path": new Array(messageId) }; - var parameters = "uid=" + id; - deleteMessageRequestCount++; - triggerAjaxRequest(url, deleteSelectedMessagesCallback, data, parameters, - { "Content-type": "application/x-www-form-urlencoded" }); + var data = { "id": new Array(id), "mailbox": mailbox, "path": new Array(messageId) }; + var parameters = "uid=" + id; + deleteMessageRequestCount++; + triggerAjaxRequest(url, deleteSelectedMessagesCallback, data, parameters, + { "Content-type": "application/x-www-form-urlencoded" }); } function deleteMessageWithDelay(url, id, mailbox, messageId) { - /* this is called by UIxMailPopupView with window.opener */ - var row = $("row_" + id); - if (row) row.hide(); - setTimeout("deleteMessage('" + - url + "', '" + - id + "', '" + - mailbox + "', '" + - messageId + "')", - 50); + /* this is called by UIxMailPopupView with window.opener */ + var row = $("row_" + id); + if (row) row.hide(); + setTimeout("deleteMessage('" + + url + "', '" + + id + "', '" + + mailbox + "', '" + + messageId + "')", + 50); } function onPrintCurrentMessage(event) { - var rowIds = $("messageList").getSelectedRowsId(); - if (rowIds.length == 0) { - window.alert(labels["Please select a message to print."]); - } - else if (rowIds.length > 1) { - window.alert(labels["Please select only one message to print."]); - } - else - window.print(); + var rowIds = $("messageList").getSelectedRowsId(); + if (rowIds.length == 0) { + window.alert(labels["Please select a message to print."]); + } + else if (rowIds.length > 1) { + window.alert(labels["Please select only one message to print."]); + } + else + window.print(); - preventDefault(event); + preventDefault(event); } function onMailboxTreeItemClick(event) { - var topNode = $("mailboxTree"); - var mailbox = this.parentNode.getAttribute("dataname"); - if (topNode.selectedEntry) - topNode.selectedEntry.deselect(); - this.selectElement(); - topNode.selectedEntry = this; + var topNode = $("mailboxTree"); + var mailbox = this.parentNode.getAttribute("dataname"); + if (topNode.selectedEntry) + topNode.selectedEntry.deselect(); + this.selectElement(); + topNode.selectedEntry = this; - search = {}; - sorting = {}; - $("searchValue").value = ""; - initCriteria(); + search = {}; + sorting = {}; + $("searchValue").value = ""; + initCriteria(); - 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; - var body = table.tBodies[0]; - for (var i = body.rows.length; i > 0; i--) - body.deleteRow(i-1); - if (head.rows[1]) - head.rows[1].firstChild.update(); - } - else - openMailbox(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; + var body = table.tBodies[0]; + for (var i = body.rows.length; i > 0; i--) + body.deleteRow(i-1); + if (head.rows[1]) + head.rows[1].firstChild.update(); + } + else + openMailbox(mailbox); - Event.stop(event); + Event.stop(event); } function onMailboxMenuMove(event) { - var targetMailbox; - var messageList = $("messageList").down("TBODY"); - var rows = messageList.getSelectedNodes(); - var uids = new Array(); // message IDs - var paths = new Array(); // row IDs - - if (this.tagName == 'LI') // from contextual menu - targetMailbox = this.mailbox.fullName(); - else // from DnD - targetMailbox = this.readAttribute("dataname"); + var targetMailbox; + var messageList = $("messageList").down("TBODY"); + var rows = messageList.getSelectedNodes(); + var uids = new Array(); // message IDs + var paths = new Array(); // row IDs + + Mailer.currentMessages[Mailer.currentMailbox] = null; + $('messageContent').update(); - for (var i = 0; i < rows.length; i++) { - var uid = rows[i].readAttribute("id").substr(4); - var path = Mailer.currentMailbox + "/" + uid; - rows[i].hide(); - uids.push(uid); - paths.push(path); - } - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/moveMessages"; - var parameters = "uid=" + uids.join(",") + "&folder=" + targetMailbox; - var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths, "folder": targetMailbox, "refresh": true }; - triggerAjaxRequest(url, folderRefreshCallback, data, parameters, - { "Content-type": "application/x-www-form-urlencoded" }); + if (this.tagName == 'LI') // from contextual menu + targetMailbox = this.mailbox.fullName(); + else // from DnD + targetMailbox = this.readAttribute("dataname"); - return false; + for (var i = 0; i < rows.length; i++) { + var uid = rows[i].readAttribute("id").substr(4); + var path = Mailer.currentMailbox + "/" + uid; + rows[i].hide(); + uids.push(uid); + paths.push(path); + for (var j = 0; j < Mailer.popups.length; j++) + if (Mailer.popups[j].messageUID == path) { + Mailer.popups[j].close(); + break; + } + } + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/moveMessages"; + var parameters = "uid=" + uids.join(",") + "&folder=" + targetMailbox; + var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths, "folder": targetMailbox, "refresh": true }; + triggerAjaxRequest(url, folderRefreshCallback, data, parameters, + { "Content-type": "application/x-www-form-urlencoded" }); + + return false; } function onMailboxMenuCopy(event) { - var targetMailbox; - var messageList = $("messageList").down("TBODY"); - var rows = messageList.getSelectedNodes(); - var uids = new Array(); // message IDs - var paths = new Array(); // row IDs + var targetMailbox; + var messageList = $("messageList").down("TBODY"); + var rows = messageList.getSelectedNodes(); + var uids = new Array(); // message IDs + var paths = new Array(); // row IDs - if (this.tagName == 'LI') // from contextual menu - targetMailbox = this.mailbox.fullName(); - else // from DnD - targetMailbox = this.readAttribute("dataname"); + if (this.tagName == 'LI') // from contextual menu + targetMailbox = this.mailbox.fullName(); + else // from DnD + targetMailbox = this.readAttribute("dataname"); - for (var i = 0; i < rows.length; i++) { - var uid = rows[i].readAttribute("id").substr(4); - var path = Mailer.currentMailbox + "/" + uid; - uids.push(uid); - paths.push(path); - } - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/copyMessages"; - var parameters = "uid=" + uids.join(",") + "&folder=" + targetMailbox; - var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths, "folder": targetMailbox, "refresh": false }; - triggerAjaxRequest(url, folderRefreshCallback, data, parameters, - { "Content-type": "application/x-www-form-urlencoded" }); + for (var i = 0; i < rows.length; i++) { + var uid = rows[i].readAttribute("id").substr(4); + var path = Mailer.currentMailbox + "/" + uid; + uids.push(uid); + paths.push(path); + } + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/copyMessages"; + var parameters = "uid=" + uids.join(",") + "&folder=" + targetMailbox; + var data = { "id": uids, "mailbox": Mailer.currentMailbox, "path": paths, "folder": targetMailbox, "refresh": false }; + triggerAjaxRequest(url, folderRefreshCallback, data, parameters, + { "Content-type": "application/x-www-form-urlencoded" }); - return false; + return false; } function refreshMailbox() { - var topWindow = getTopWindow(); - if (topWindow) - topWindow.refreshCurrentFolder(); + var topWindow = getTopWindow(); + if (topWindow) + topWindow.refreshCurrentFolder(); - return false; + return false; } function onComposeMessage() { - var topWindow = getTopWindow(); - if (topWindow) - topWindow.composeNewMessage(); + var topWindow = getTopWindow(); + if (topWindow) + topWindow.composeNewMessage(); - return false; + return false; } function composeNewMessage() { - var account = Mailer.currentMailbox.split("/")[1]; - var url = ApplicationBaseURL + "/" + encodeURI(account) + "/compose"; - openMailComposeWindow(url); + var account = Mailer.currentMailbox.split("/")[1]; + var url = ApplicationBaseURL + "/" + encodeURI(account) + "/compose"; + openMailComposeWindow(url); } function openMailbox(mailbox, reload, idx, updateStatus) { - if (mailbox != Mailer.currentMailbox || reload) { - Mailer.currentMailbox = mailbox; - var url = ApplicationBaseURL + encodeURI(mailbox) + "/view?noframe=1"; + if (mailbox != Mailer.currentMailbox || reload) { + Mailer.currentMailbox = mailbox; + var url = ApplicationBaseURL + encodeURI(mailbox) + "/view?noframe=1"; - if (!reload || idx) { - var messageContent = $("messageContent"); - messageContent.update(); - lastClickedRow = -1; // from generic.js + if (!reload || idx) { + var messageContent = $("messageContent"); + messageContent.update(); + lastClickedRow = -1; // from generic.js + } + + var currentMessage; + + if (!idx) { + currentMessage = Mailer.currentMessages[mailbox]; + if (currentMessage) { + url += '&pageforuid=' + currentMessage; + if (!reload) + loadMessage(currentMessage); + } + } + + var searchValue = search["value"]; + if (searchValue && searchValue.length > 0) + url += ("&search=" + search["criteria"] + + "&value=" + escape(searchValue.utf8encode())); + var sortAttribute = sorting["attribute"]; + if (sortAttribute && sortAttribute.length > 0) + url += ("&sort=" + sorting["attribute"] + + "&asc=" + sorting["ascending"]); + if (idx) + url += "&idx=" + idx; + + if (document.messageListAjaxRequest) { + document.messageListAjaxRequest.aborted = true; + document.messageListAjaxRequest.abort(); + } + + var mailboxContent = $("mailboxContent"); + if (mailboxContent.getStyle('visibility') == "hidden") { + mailboxContent.setStyle({ visibility: "visible" }); + var rightDragHandle = $("rightDragHandle"); + rightDragHandle.setStyle({ visibility: "visible" }); + messageContent.setStyle({ top: (rightDragHandle.offsetTop + + rightDragHandle.offsetHeight + + 'px') }); + } + document.messageListAjaxRequest + = triggerAjaxRequest(url, messageListCallback, + currentMessage); + + if (updateStatus != false) + getStatusFolders(); } - - var currentMessage; - - if (!idx) { - currentMessage = Mailer.currentMessages[mailbox]; - if (currentMessage) { - url += '&pageforuid=' + currentMessage; - if (!reload) - loadMessage(currentMessage); - } - } - - var searchValue = search["value"]; - if (searchValue && searchValue.length > 0) - url += ("&search=" + search["criteria"] - + "&value=" + escape(searchValue.utf8encode())); - var sortAttribute = sorting["attribute"]; - if (sortAttribute && sortAttribute.length > 0) - url += ("&sort=" + sorting["attribute"] - + "&asc=" + sorting["ascending"]); - if (idx) - url += "&idx=" + idx; - - if (document.messageListAjaxRequest) { - document.messageListAjaxRequest.aborted = true; - document.messageListAjaxRequest.abort(); - } - - var mailboxContent = $("mailboxContent"); - if (mailboxContent.getStyle('visibility') == "hidden") { - mailboxContent.setStyle({ visibility: "visible" }); - var rightDragHandle = $("rightDragHandle"); - rightDragHandle.setStyle({ visibility: "visible" }); - messageContent.setStyle({ top: (rightDragHandle.offsetTop - + rightDragHandle.offsetHeight - + 'px') }); - } - document.messageListAjaxRequest - = triggerAjaxRequest(url, messageListCallback, - currentMessage); - - if (updateStatus != false) - getStatusFolders(); - } } function openMailboxAtIndex(event) { - openMailbox(Mailer.currentMailbox, true, this.getAttribute("idx")); + openMailbox(Mailer.currentMailbox, true, this.getAttribute("idx")); - Event.stop(event); + Event.stop(event); } function messageListCallback(http) { - var div = $('mailboxContent'); - var table = $('messageList'); + var div = $('mailboxContent'); + var table = $('messageList'); - var columnsOrder = UserSettings["SOGoMailListViewColumnsOrder"]; - if ( typeof(columnsOrder) == "undefined" ) { - columnsOrder = defaultColumnsOrder; - } - var addrIndex = 3; - for(var i=0; i div.getHeight()) + div.scrollTop = rowPosition; // scroll to selected message + } + else + $("messageContent").update(); + } + else + div.scrollTop = 0; + + if (sorting["attribute"] && sorting["attribute"].length > 0) { + var sortHeader = $(sorting["attribute"] + "Header"); + + if (sortHeader) { + var sortImages = $(table.tHead).select(".sortImage"); + $(sortImages).each(function(item) { + item.remove(); + }); + + var sortImage = createElement("img", "messageSortImage", "sortImage"); + sortHeader.insertBefore(sortImage, sortHeader.firstChild); + if (sorting["ascending"]) + sortImage.src = ResourcesURL + "/title_sortdown_12x12.png"; + else + sortImage.src = ResourcesURL + "/title_sortup_12x12.png"; + } + } } else { - // Add table - div.update(http.responseText); - table = $('messageList'); - configureMessageListEvents(table); - TableKit.Resizable.init(table, {'trueResize' : true, 'keepWidth' : true}); + var data = http.responseText; + var msg = data.replace(/^(.*\n)*.*

((.*\n)*.*)<\/p>(.*\n)*.*$/, "$2"); + log("messageListCallback: problem during ajax request (readyState = " + http.readyState + ", status = " + http.status + ", response = " + msg + ")"); } - configureDragAndDrop (); - configureMessageListBodyEvents(table); - - var selected = http.callbackData; - if (selected) { - var row = $("row_" + selected); - if (row) { - row.selectElement(); - lastClickedRow = row.rowIndex - $(row).up('table').down('thead').getElementsByTagName('tr').length; - var rowPosition = row.rowIndex * row.getHeight(); - if (rowPosition > div.getHeight()) - div.scrollTop = rowPosition; // scroll to selected message - } - else - $("messageContent").update(); - } - else - div.scrollTop = 0; - - if (sorting["attribute"] && sorting["attribute"].length > 0) { - var sortHeader = $(sorting["attribute"] + "Header"); - - if (sortHeader) { - var sortImages = $(table.tHead).select(".sortImage"); - $(sortImages).each(function(item) { - item.remove(); - }); - - var sortImage = createElement("img", "messageSortImage", "sortImage"); - sortHeader.insertBefore(sortImage, sortHeader.firstChild); - if (sorting["ascending"]) - sortImage.src = ResourcesURL + "/title_sortdown_12x12.png"; - else - sortImage.src = ResourcesURL + "/title_sortup_12x12.png"; - } - } - } - else { - var data = http.responseText; - var msg = data.replace(/^(.*\n)*.*

((.*\n)*.*)<\/p>(.*\n)*.*$/, "$2"); - log("messageListCallback: problem during ajax request (readyState = " + http.readyState + ", status = " + http.status + ", response = " + msg + ")"); - } } function getStatusFolders() { - var account = Mailer.currentMailbox.split("/")[1]; - var url = ApplicationBaseURL + encodeURI(account) + '/statusFolders'; - if (document.statusFoldersAjaxRequest) { - document.statusFoldersAjaxRequest.aborted = true; - document.statusFoldersAjaxRequest.abort(); - } - document.statusFoldersAjaxRequest = triggerAjaxRequest(url, statusFoldersCallback); + var account = Mailer.currentMailbox.split("/")[1]; + var url = ApplicationBaseURL + encodeURI(account) + '/statusFolders'; + if (document.statusFoldersAjaxRequest) { + document.statusFoldersAjaxRequest.aborted = true; + document.statusFoldersAjaxRequest.abort(); + } + document.statusFoldersAjaxRequest = triggerAjaxRequest(url, statusFoldersCallback); } function statusFoldersCallback(http) { - var div = $('mailboxContent'); - var table = $('messageList'); + var div = $('mailboxContent'); + var table = $('messageList'); - if (http.status == 200) { - document.statusFoldersAjaxRequest = null; - var data = http.responseText.evalJSON(true); - updateStatusFolders(data.unseen, false); - } + if (http.status == 200) { + document.statusFoldersAjaxRequest = null; + var data = http.responseText.evalJSON(true); + updateStatusFolders(data.unseen, false); + } } function updateStatusFolders(count, isDelta) { - var span = $("unseenCount"); - var counter = null; + var span = $("unseenCount"); + var counter = null; - if (span) - counter = span.select("SPAN").first(); + if (span) + counter = span.select("SPAN").first(); - if (counter && span) { - if (typeof count == "undefined") - count = parseInt(counter.innerHTML); - else if (isDelta) - count += parseInt(counter.innerHTML); - counter.update(count); + if (counter && span) { + if (typeof count == "undefined") + count = parseInt(counter.innerHTML); + else if (isDelta) + count += parseInt(counter.innerHTML); + counter.update(count); if (count > 0) { - span.setStyle({ display: "inline" }); - span.up("SPAN").addClassName("unseen"); + span.setStyle({ display: "inline" }); + span.up("SPAN").addClassName("unseen"); } - else { - span.setStyle({ display: "none" }); - span.up("SPAN").removeClassName("unseen"); - } - } + else { + span.setStyle({ display: "none" }); + span.up("SPAN").removeClassName("unseen"); + } + } } function onMessageContextMenu(event) { - var menu = $('messageListMenu'); - var topNode = $('messageList'); - var selectedNodes = topNode.getSelectedRows(); + var menu = $('messageListMenu'); + var topNode = $('messageList'); + var selectedNodes = topNode.getSelectedRows(); - menu.observe("hideMenu", onMessageContextMenuHide); + menu.observe("hideMenu", onMessageContextMenuHide); - if (selectedNodes.length > 1) - popupMenu(event, "messagesListMenu", selectedNodes); - else - popupMenu(event, "messageListMenu", this); + if (selectedNodes.length > 1) + popupMenu(event, "messagesListMenu", selectedNodes); + else + popupMenu(event, "messageListMenu", this); } function onMessageContextMenuHide(event) { - var topNode = $('messageList'); + var topNode = $('messageList'); - if (topNode.menuSelectedEntry) { - topNode.menuSelectedEntry.deselect(); - topNode.menuSelectedEntry = null; - } - if (topNode.menuSelectedRows) { - var nodes = topNode.menuSelectedRows; - for (var i = 0; i < nodes.length; i++) - nodes[i].selectElement(); - topNode.menuSelectedRows = null; - } + if (topNode.menuSelectedEntry) { + topNode.menuSelectedEntry.deselect(); + topNode.menuSelectedEntry = null; + } + if (topNode.menuSelectedRows) { + var nodes = topNode.menuSelectedRows; + for (var i = 0; i < nodes.length; i++) + nodes[i].selectElement(); + topNode.menuSelectedRows = null; + } } function onFolderMenuClick(event) { - var onhide, menuName; + var onhide, menuName; - var menutype = this.parentNode.getAttribute("datatype"); - if (menutype) { - if (menutype == "inbox") { - menuName = "inboxIconMenu"; - } else if (menutype == "account") { - menuName = "accountIconMenu"; - } else if (menutype == "trash") { - menuName = "trashIconMenu"; + var menutype = this.parentNode.getAttribute("datatype"); + if (menutype) { + if (menutype == "inbox") { + menuName = "inboxIconMenu"; + } else if (menutype == "account") { + menuName = "accountIconMenu"; + } else if (menutype == "trash") { + menuName = "trashIconMenu"; + } else { + menuName = "mailboxIconMenu"; + } } else { - menuName = "mailboxIconMenu"; + menuName = "mailboxIconMenu"; } - } else { - menuName = "mailboxIconMenu"; - } - var menu = $(menuName); - menu.observe("hideMenu", onFolderMenuHide); - popupMenu(event, menuName, this.parentNode); + var menu = $(menuName); + menu.observe("hideMenu", onFolderMenuHide); + popupMenu(event, menuName, this.parentNode); - var topNode = $("mailboxTree"); - if (topNode.selectedEntry) - topNode.selectedEntry.deselect(); - if (topNode.menuSelectedEntry) - topNode.menuSelectedEntry.deselect(); - topNode.menuSelectedEntry = this; - this.selectElement(); + var topNode = $("mailboxTree"); + if (topNode.selectedEntry) + topNode.selectedEntry.deselect(); + if (topNode.menuSelectedEntry) + topNode.menuSelectedEntry.deselect(); + topNode.menuSelectedEntry = this; + this.selectElement(); - preventDefault(event); + preventDefault(event); } function onFolderMenuHide(event) { - var topNode = $("mailboxTree"); + var topNode = $("mailboxTree"); - if (topNode.menuSelectedEntry) { - topNode.menuSelectedEntry.deselect(); - topNode.menuSelectedEntry = null; - } - if (topNode.selectedEntry) - topNode.selectedEntry.selectElement(); + if (topNode.menuSelectedEntry) { + topNode.menuSelectedEntry.deselect(); + topNode.menuSelectedEntry = null; + } + if (topNode.selectedEntry) + topNode.selectedEntry.selectElement(); } function deleteCachedMessage(messageId) { - var done = false; - var counter = 0; + var done = false; + var counter = 0; - while (counter < Mailer.cachedMessages.length - && !done) - if (Mailer.cachedMessages[counter] - && Mailer.cachedMessages[counter]['idx'] == messageId) { - Mailer.cachedMessages.splice(counter, 1); - done = true; - } - else - counter++; + while (counter < Mailer.cachedMessages.length + && !done) + if (Mailer.cachedMessages[counter] + && Mailer.cachedMessages[counter]['idx'] == messageId) { + Mailer.cachedMessages.splice(counter, 1); + done = true; + } + else + counter++; } function getCachedMessage(idx) { - var message = null; - var counter = 0; + var message = null; + var counter = 0; - while (counter < Mailer.cachedMessages.length - && message == null) - if (Mailer.cachedMessages[counter] - && Mailer.cachedMessages[counter]['idx'] == Mailer.currentMailbox + '/' + idx) - message = Mailer.cachedMessages[counter]; - else - counter++; + while (counter < Mailer.cachedMessages.length + && message == null) + if (Mailer.cachedMessages[counter] + && Mailer.cachedMessages[counter]['idx'] == Mailer.currentMailbox + '/' + idx) + message = Mailer.cachedMessages[counter]; + else + counter++; - return message; + return message; } function storeCachedMessage(cachedMessage) { - var oldest = -1; - var timeOldest = -1; - var counter = 0; + var oldest = -1; + var timeOldest = -1; + var counter = 0; - if (Mailer.cachedMessages.length < Mailer.maxCachedMessages) - oldest = Mailer.cachedMessages.length; - else { - while (Mailer.cachedMessages[counter]) { - if (oldest == -1 - || Mailer.cachedMessages[counter]['time'] < timeOldest) { - oldest = counter; - timeOldest = Mailer.cachedMessages[counter]['time']; - } - counter++; + if (Mailer.cachedMessages.length < Mailer.maxCachedMessages) + oldest = Mailer.cachedMessages.length; + else { + while (Mailer.cachedMessages[counter]) { + if (oldest == -1 + || Mailer.cachedMessages[counter]['time'] < timeOldest) { + oldest = counter; + timeOldest = Mailer.cachedMessages[counter]['time']; + } + counter++; + } + + if (oldest == -1) + oldest = 0; } - if (oldest == -1) - oldest = 0; - } - - Mailer.cachedMessages[oldest] = cachedMessage; + Mailer.cachedMessages[oldest] = cachedMessage; } function onMessageSelectionChange() { - var rows = this.getSelectedRowsId(); + var rows = this.getSelectedRowsId(); - if (rows.length == 1) { - var idx = rows[0].substr(4); - if (Mailer.currentMessages[Mailer.currentMailbox] != idx) { - Mailer.currentMessages[Mailer.currentMailbox] = idx; - loadMessage(idx); + if (rows.length == 1) { + var idx = rows[0].substr(4); + if (Mailer.currentMessages[Mailer.currentMailbox] != idx) { + Mailer.currentMessages[Mailer.currentMailbox] = idx; + loadMessage(idx); + } } - } - else if (rows.length > 1) - $('messageContent').update(); + else if (rows.length > 1) + $('messageContent').update(); } function loadMessage(idx) { - if (document.messageAjaxRequest) { - document.messageAjaxRequest.aborted = true; - document.messageAjaxRequest.abort(); - } + if (document.messageAjaxRequest) { + document.messageAjaxRequest.aborted = true; + document.messageAjaxRequest.abort(); + } - var div = $('messageContent'); - var cachedMessage = getCachedMessage(idx); - var row = $("row_" + idx); - var seenStateChanged = row && row.hasClassName('mailer_unreadmail'); - if (cachedMessage == null) { - var url = (ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" - + idx + "/view?noframe=1"); - div.update(); - document.messageAjaxRequest = triggerAjaxRequest(url, messageCallback, idx); - markMailInWindow(window, idx, true); - } - else { - div.update(cachedMessage['text']); - cachedMessage['time'] = (new Date()).getTime(); - document.messageAjaxRequest = null; - configureLinksInMessage(); - resizeMailContent(); - if (seenStateChanged) { - // Mark message as read on server - var img = row.select("IMG.mailerUnreadIcon").first(); - var fcnMarkRead = mailListMarkMessage.bind(img); - fcnMarkRead(); - } - } + var div = $('messageContent'); + var cachedMessage = getCachedMessage(idx); + var row = $("row_" + idx); + var seenStateChanged = row && row.hasClassName('mailer_unreadmail'); + if (cachedMessage == null) { + var url = (ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" + + idx + "/view?noframe=1"); + div.update(); + document.messageAjaxRequest = triggerAjaxRequest(url, messageCallback, idx); + markMailInWindow(window, idx, true); + } + else { + div.update(cachedMessage['text']); + cachedMessage['time'] = (new Date()).getTime(); + document.messageAjaxRequest = null; + configureLinksInMessage(); + resizeMailContent(); + if (seenStateChanged) { + // Mark message as read on server + var img = row.select("IMG.mailerUnreadIcon").first(); + var fcnMarkRead = mailListMarkMessage.bind(img); + fcnMarkRead(); + } + } - configureLoadImagesButton(); + configureLoadImagesButton(); } function configureLoadImagesButton() { - // We show/hide the "Load Images" button - var loadImagesButton = $("loadImagesButton"); - var displayLoadImages = $("displayLoadImages"); + // We show/hide the "Load Images" button + var loadImagesButton = $("loadImagesButton"); + var displayLoadImages = $("displayLoadImages"); - if (typeof(loadImagesButton) == "undefined" || - loadImagesButton == null ) { - return; - } - if (typeof(displayLoadImages) == "undefined" || - displayLoadImages == null || - displayLoadImages.value == 0) { - loadImagesButton.setStyle({ display: 'none' }); - } + if (typeof(loadImagesButton) == "undefined" || + loadImagesButton == null ) { + return; + } + if (typeof(displayLoadImages) == "undefined" || + displayLoadImages == null || + displayLoadImages.value == 0) { + loadImagesButton.setStyle({ display: 'none' }); + } } function configureLinksInMessage() { - var messageDiv = $('messageContent'); - var mailContentDiv = document.getElementsByClassName('mailer_mailcontent', - messageDiv)[0]; - if (!$(document.body).hasClassName("popup")) - mailContentDiv.observe("contextmenu", onMessageContentMenu); + var messageDiv = $('messageContent'); + var mailContentDiv = document.getElementsByClassName('mailer_mailcontent', + messageDiv)[0]; + if (!$(document.body).hasClassName("popup")) + 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:") { - $(anchors[i]).observe("click", onEmailTo); - $(anchors[i]).observe("contextmenu", onEmailAddressClick); - } - else - $(anchors[i]).observe("click", onMessageAnchorClick); + var anchors = messageDiv.getElementsByTagName('a'); + for (var i = 0; i < anchors.length; i++) + if (anchors[i].href.substring(0,7) == "mailto:") { + $(anchors[i]).observe("click", onEmailTo); + $(anchors[i]).observe("contextmenu", onEmailAddressClick); + } + else + $(anchors[i]).observe("click", onMessageAnchorClick); - var attachments = messageDiv.select ("DIV.linked_attachment_body"); - for (var i = 0; i < attachments.length; i++) - $(attachments[i]).observe("contextmenu", onAttachmentClick); + var attachments = messageDiv.select ("DIV.linked_attachment_body"); + for (var i = 0; i < attachments.length; i++) + $(attachments[i]).observe("contextmenu", onAttachmentClick); - var images = messageDiv.select("IMG.mailer_imagecontent"); - for (var i = 0; i < images.length; i++) - $(images[i]).observe("contextmenu", onImageClick); + var images = messageDiv.select("IMG.mailer_imagecontent"); + for (var i = 0; i < images.length; i++) + $(images[i]).observe("contextmenu", onImageClick); - var editDraftButton = $("editDraftButton"); - if (editDraftButton) - editDraftButton.observe("click", - onMessageEditDraft.bindAsEventListener(editDraftButton)); + var editDraftButton = $("editDraftButton"); + if (editDraftButton) + editDraftButton.observe("click", + onMessageEditDraft.bindAsEventListener(editDraftButton)); - var loadImagesButton = $("loadImagesButton"); - if (loadImagesButton) - loadImagesButton.observe("click", - onMessageLoadImages.bindAsEventListener(loadImagesButton)); + var loadImagesButton = $("loadImagesButton"); + if (loadImagesButton) + loadImagesButton.observe("click", + onMessageLoadImages.bindAsEventListener(loadImagesButton)); - configureiCalLinksInMessage(); + configureiCalLinksInMessage(); } function configureiCalLinksInMessage() { - var buttons = { "iCalendarAccept": "accept", - "iCalendarDecline": "decline", - "iCalendarTentative": "tentative", - "iCalendarUpdateUserStatus": "updateUserStatus", - "iCalendarAddToCalendar": "addToCalendar", - "iCalendarDeleteFromCalendar": "deleteFromCalendar" }; + 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]; - button.observe("click", - onICalendarButtonClick.bindAsEventListener(button)); + for (var key in buttons) { + var button = $(key); + if (button) { + button.action = buttons[key]; + button.observe("click", + onICalendarButtonClick.bindAsEventListener(button)); + } } - } } function onICalendarButtonClick(event) { - var link = $("iCalendarAttachment").value; - if (link) { - var urlstr = link + "/" + this.action; - var currentMsg; - currentMsg = Mailer.currentMailbox + "/" - + Mailer.currentMessages[Mailer.currentMailbox]; - triggerAjaxRequest(urlstr, ICalendarButtonCallback, currentMsg); - } - else - log("no link"); + var link = $("iCalendarAttachment").value; + if (link) { + var urlstr = link + "/" + this.action; + var currentMsg; + currentMsg = Mailer.currentMailbox + "/" + + Mailer.currentMessages[Mailer.currentMailbox]; + triggerAjaxRequest(urlstr, ICalendarButtonCallback, currentMsg); + } + else + log("no link"); } function ICalendarButtonCallback(http) { - if (isHttpStatus204(http.status)) { - var oldMsg = http.callbackData; - var msg = Mailer.currentMailbox + "/" + Mailer.currentMessages[Mailer.currentMailbox]; - deleteCachedMessage(oldMsg); - if (oldMsg == msg) { - loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); + if (isHttpStatus204(http.status)) { + var oldMsg = http.callbackData; + var msg = Mailer.currentMailbox + "/" + Mailer.currentMessages[Mailer.currentMailbox]; + deleteCachedMessage(oldMsg); + if (oldMsg == msg) { + loadMessage(Mailer.currentMessages[Mailer.currentMailbox]); + } + for (var i = 0; i < Mailer.popups.length; i++) + if (Mailer.popups[i].messageUID == oldMsg) { + Mailer.popups[i].location.reload(); + break; + } } - for (var i = 0; i < Mailer.popups.length; i++) - if (Mailer.popups[i].messageUID == oldMsg) { - Mailer.popups[i].location.reload(); - break; - } - } - else - window.alert("received code: " + http.status); + else + window.alert("received code: " + http.status); } function resizeMailContent() { - var headerTable = document.getElementsByClassName('mailer_fieldtable')[0]; - var contentDiv = document.getElementsByClassName('mailer_mailcontent')[0]; + 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' }); - // Show expand buttons if necessary - var spans = $$("TABLE TR.mailer_fieldrow TD.mailer_fieldvalue SPAN"); - spans.each(function(span) { - var row = span.up("TR"); - if (span.getWidth() > row.getWidth()) { - var cell = row.select("TD.mailer_fieldname").first(); - var link = cell.down("img"); - link.show(); - link.observe("click", toggleDisplayHeader); - } - }); + // Show expand buttons if necessary + var spans = $$("TABLE TR.mailer_fieldrow TD.mailer_fieldvalue SPAN"); + spans.each(function(span) { + var row = span.up("TR"); + if (span.getWidth() > row.getWidth()) { + var cell = row.select("TD.mailer_fieldname").first(); + var link = cell.down("img"); + link.show(); + link.observe("click", toggleDisplayHeader); + } + }); } function toggleDisplayHeader(event) { - var row = this.up("TR"); - var span = row.down("SPAN"); + var row = this.up("TR"); + var span = row.down("SPAN"); - if (this.hasClassName("collapse")) { - this.writeAttribute("src", ResourcesURL + '/minus.png'); - this.writeAttribute("class", "expand"); - span.writeAttribute("class", "expand"); - } - else { - this.writeAttribute("src", ResourcesURL + '/plus.png'); - this.writeAttribute("class", "collapse"); - span.writeAttribute("class", "collapse"); - } - resizeMailContent(); + if (this.hasClassName("collapse")) { + this.writeAttribute("src", ResourcesURL + '/minus.png'); + this.writeAttribute("class", "expand"); + span.writeAttribute("class", "expand"); + } + else { + this.writeAttribute("src", ResourcesURL + '/plus.png'); + this.writeAttribute("class", "collapse"); + span.writeAttribute("class", "collapse"); + } + resizeMailContent(); - preventDefault(event); - return false; + preventDefault(event); + return false; } 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); + 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 onMessageEditDraft(event) { - return openMessageWindowsForSelection("edit", true); + return openMessageWindowsForSelection("edit", true); } function onMessageLoadImages(event) { - var msguid = Mailer.currentMessages[Mailer.currentMailbox]; - var url = (ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" - + msguid + "/view?noframe=1&unsafe=1"); - document.messageAjaxRequest - = triggerAjaxRequest(url, messageCallback, msguid); + var msguid = Mailer.currentMessages[Mailer.currentMailbox]; + var url = (ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" + + msguid + "/view?noframe=1&unsafe=1"); + document.messageAjaxRequest + = triggerAjaxRequest(url, messageCallback, msguid); } function onEmailAddressClick(event) { - popupMenu(event, 'addressMenu', this); - preventDefault(event); - return false; + popupMenu(event, 'addressMenu', this); + preventDefault(event); + return false; } function onMessageAnchorClick(event) { - window.open(this.href); - preventDefault(event); + window.open(this.href); + preventDefault(event); } function onImageClick(event) { - popupMenu(event, 'imageMenu', this); - preventDefault(event); - return false; + popupMenu(event, 'imageMenu', this); + preventDefault(event); + return false; } function onAttachmentClick (event) { - popupMenu (event, 'attachmentMenu', this); - preventDefault (event); - return false; + popupMenu (event, 'attachmentMenu', this); + preventDefault (event); + return false; } function messageCallback(http) { - var div = $('messageContent'); + var div = $('messageContent'); - if (http.status == 200) { - document.messageAjaxRequest = null; - div.update(http.responseText); - configureLinksInMessage(); - resizeMailContent(); - configureLoadImagesButton(); + if (http.status == 200) { + document.messageAjaxRequest = null; + div.update(http.responseText); + configureLinksInMessage(); + resizeMailContent(); + configureLoadImagesButton(); - if (http.callbackData) { - var cachedMessage = new Array(); - cachedMessage['idx'] = Mailer.currentMailbox + '/' + http.callbackData; - cachedMessage['time'] = (new Date()).getTime(); - cachedMessage['text'] = http.responseText; - if (cachedMessage['text'].length < 30000) - storeCachedMessage(cachedMessage); + if (http.callbackData) { + var cachedMessage = new Array(); + cachedMessage['idx'] = Mailer.currentMailbox + '/' + http.callbackData; + cachedMessage['time'] = (new Date()).getTime(); + cachedMessage['text'] = http.responseText; + if (cachedMessage['text'].length < 30000) + storeCachedMessage(cachedMessage); + } } - } - else - log("messageCallback: problem during ajax request: " + http.status); + else + log("messageCallback: problem during ajax request: " + http.status); } function processMailboxMenuAction(mailbox) { - var currentNode, upperNode; - var mailboxName; - var action; + var currentNode, upperNode; + var mailboxName; + var action; - mailboxName = mailbox.getAttribute('mailboxname'); - currentNode = mailbox; - upperNode = null; + mailboxName = mailbox.getAttribute('mailboxname'); + currentNode = mailbox; + upperNode = null; - while (currentNode - && !currentNode.hasAttribute('mailboxaction')) - currentNode = currentNode.parentNode.parentNode.parentMenuItem; + while (currentNode + && !currentNode.hasAttribute('mailboxaction')) + currentNode = currentNode.parentNode.parentNode.parentMenuItem; - if (currentNode) - { - action = currentNode.getAttribute('mailboxaction'); - // var rows = collectSelectedRows(); - // var rString = rows.join(', '); - // alert("performing '" + action + "' on " + rString - // + " to " + mailboxName); - } + if (currentNode) + { + action = currentNode.getAttribute('mailboxaction'); + // var rows = collectSelectedRows(); + // var rString = rows.join(', '); + // alert("performing '" + action + "' on " + rString + // + " to " + mailboxName); + } } var rowSelectionCount = 0; @@ -1123,263 +1131,263 @@ var rowSelectionCount = 0; validateControls(); function showElement(e, shouldShow) { - e.style.display = shouldShow ? "" : "none"; + e.style.display = shouldShow ? "" : "none"; } function enableElement(e, shouldEnable) { - if(!e) - return; - if(shouldEnable) { - if(e.hasAttribute("disabled")) - e.removeAttribute("disabled"); - } - else { - e.setAttribute("disabled", "1"); - } + if(!e) + return; + if(shouldEnable) { + if(e.hasAttribute("disabled")) + e.removeAttribute("disabled"); + } + else { + e.setAttribute("disabled", "1"); + } } function validateControls() { - var e = $("moveto"); - this.enableElement(e, rowSelectionCount > 0); + var e = $("moveto"); + this.enableElement(e, rowSelectionCount > 0); } function moveTo(uri) { - alert("MoveTo: " + uri); + alert("MoveTo: " + uri); } /* message menu entries */ function onMenuOpenMessage(event) { - return openMessageWindowsForSelection('popupview'); + return openMessageWindowsForSelection('popupview'); } function onMenuReplyToSender(event) { - return openMessageWindowsForSelection('reply'); + return openMessageWindowsForSelection('reply'); } function onMenuReplyToAll(event) { - return openMessageWindowsForSelection('replyall'); + return openMessageWindowsForSelection('replyall'); } function onMenuForwardMessage(event) { - return openMessageWindowsForSelection('forward'); + return openMessageWindowsForSelection('forward'); } function onMenuViewMessageSource(event) { - var messageList = $("messageList"); - var rows = messageList.getSelectedRowsId(); + var messageList = $("messageList"); + var rows = messageList.getSelectedRowsId(); - if (rows.length > 0) { - var url = (ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" - + rows[0].substr(4) + "/viewsource"); - openMailComposeWindow(url); - } + if (rows.length > 0) { + var url = (ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/" + + rows[0].substr(4) + "/viewsource"); + openMailComposeWindow(url); + } - preventDefault(event); + preventDefault(event); } function saveImage(event) { - var img = document.menuTarget; - var url = img.getAttribute("src"); - var urlAsAttachment = url.replace(/(\/[^\/]*)$/,"/asAttachment$1"); + var img = document.menuTarget; + var url = img.getAttribute("src"); + var urlAsAttachment = url.replace(/(\/[^\/]*)$/,"/asAttachment$1"); - window.location.href = urlAsAttachment; + window.location.href = urlAsAttachment; } function saveAttachment(event) { - var div = document.menuTarget; - var link = div.select ("a").first (); - var url = link.getAttribute("href"); - var urlAsAttachment = url.replace(/(\/[^\/]*)$/,"/asAttachment$1"); + var div = document.menuTarget; + var link = div.select ("a").first (); + var url = link.getAttribute("href"); + var urlAsAttachment = url.replace(/(\/[^\/]*)$/,"/asAttachment$1"); - window.location.href = urlAsAttachment; + window.location.href = urlAsAttachment; } /* contacts */ function newContactFromEmail(event) { - var mailto = document.menuTarget.innerHTML; + var mailto = document.menuTarget.innerHTML; - var email = extractEmailAddress(mailto); - var c_name = extractEmailName(mailto); - if (email.length > 0) { - var url = (UserFolderURL + "Contacts/personal/newcontact?contactEmail=" - + encodeURI(email)); - if (c_name) - url += "&contactFN=" + c_name; - openContactWindow(url); - } + var email = extractEmailAddress(mailto); + var c_name = extractEmailName(mailto); + if (email.length > 0) { + var url = (UserFolderURL + "Contacts/personal/newcontact?contactEmail=" + + encodeURI(email)); + if (c_name) + url += "&contactFN=" + c_name; + openContactWindow(url); + } - return false; /* stop following the link */ + return false; /* stop following the link */ } function onEmailTo(event) { - openMailTo(this.innerHTML.strip()); - Event.stop(event); - return false; + openMailTo(this.innerHTML.strip()); + Event.stop(event); + return false; } function newEmailTo(sender) { - return openMailTo(document.menuTarget.innerHTML); + return openMailTo(document.menuTarget.innerHTML); } function expandUpperTree(node) { - var currentNode = node.parentNode; + var currentNode = node.parentNode; - while (currentNode.className != "dtree") { - if (currentNode.className == 'clip') { - var id = currentNode.getAttribute("id"); - var number = parseInt(id.substr(2)); - if (number > 0) { - var cn = mailboxTree.aNodes[number]; - mailboxTree.nodeStatus(1, number, cn._ls); - } + while (currentNode.className != "dtree") { + if (currentNode.className == 'clip') { + var id = currentNode.getAttribute("id"); + var number = parseInt(id.substr(2)); + if (number > 0) { + var cn = mailboxTree.aNodes[number]; + mailboxTree.nodeStatus(1, number, cn._ls); + } + } + currentNode = currentNode.parentNode; } - currentNode = currentNode.parentNode; - } } function onHeaderClick(event) { - if (TableKit.Resizable._onHandle) - return; + if (TableKit.Resizable._onHandle) + return; - var headerId = this.getAttribute("id"); - var newSortAttribute; - if (headerId == "subjectHeader") - newSortAttribute = "subject"; - else if (headerId == "fromHeader") - newSortAttribute = "from"; - else if (headerId == "toHeader") - newSortAttribute = "to"; - else if (headerId == "dateHeader") - newSortAttribute = "date"; - else if (headerId == "sizeHeader") - newSortAttribute = "size"; - else - newSortAttribute = "arrival"; + var headerId = this.getAttribute("id"); + var newSortAttribute; + if (headerId == "subjectHeader") + newSortAttribute = "subject"; + else if (headerId == "fromHeader") + newSortAttribute = "from"; + else if (headerId == "toHeader") + newSortAttribute = "to"; + else if (headerId == "dateHeader") + newSortAttribute = "date"; + else if (headerId == "sizeHeader") + newSortAttribute = "size"; + else + newSortAttribute = "arrival"; - if (sorting["attribute"] == newSortAttribute) - sorting["ascending"] = !sorting["ascending"]; - else { - sorting["attribute"] = newSortAttribute; - sorting["ascending"] = true; - } - refreshCurrentFolder(); + if (sorting["attribute"] == newSortAttribute) + sorting["ascending"] = !sorting["ascending"]; + else { + sorting["attribute"] = newSortAttribute; + sorting["ascending"] = true; + } + refreshCurrentFolder(); - Event.stop(event); + Event.stop(event); } function refreshCurrentFolder() { - openMailbox(Mailer.currentMailbox, true); + openMailbox(Mailer.currentMailbox, true); } /* a model for a futur refactoring of the sortable table headers mechanism */ function configureMessageListEvents(table) { - if (table) { - table.multiselect = true; - // Each body row can load a message - table.observe("mousedown", onMessageSelectionChange); - // Sortable columns - configureSortableTableHeaders(table); - } + if (table) { + table.multiselect = true; + // Each body row can load a message + table.observe("mousedown", onMessageSelectionChange); + // Sortable columns + configureSortableTableHeaders(table); + } } function configureMessageListBodyEvents(table) { - if (table) { - // Page navigation - var cell = table.tHead.rows[1].cells[0]; - if ($(cell).hasClassName("tbtv_navcell")) { - var anchors = $(cell).childNodesWithTag("a"); - for (var i = 0; i < anchors.length; i++) - $(anchors[i]).observe("click", openMailboxAtIndex); - } + if (table) { + // Page navigation + var cell = table.tHead.rows[1].cells[0]; + if ($(cell).hasClassName("tbtv_navcell")) { + var anchors = $(cell).childNodesWithTag("a"); + for (var i = 0; i < anchors.length; i++) + $(anchors[i]).observe("click", openMailboxAtIndex); + } - rows = table.tBodies[0].rows; - for (var i = 0; i < rows.length; i++) { - var row = $(rows[i]); - row.observe("mousedown", onRowClick); - row.observe("selectstart", listRowMouseDownHandler); - row.observe("contextmenu", onMessageContextMenu); + rows = table.tBodies[0].rows; + for (var i = 0; i < rows.length; i++) { + var row = $(rows[i]); + row.observe("mousedown", onRowClick); + row.observe("selectstart", listRowMouseDownHandler); + row.observe("contextmenu", onMessageContextMenu); - //row.dndTypes = function() { return new Array("mailRow"); }; - //row.dndGhost = messageListGhost; - //row.dndDataForType = messageListData; - //document.DNDManager.registerSource(row); - // Correspondances index <> nom de la colonne - // 0 => Invisible - // 1 => Attachment - // 2 => Subject - // 3 => From - // 4 => Unread - // 5 => Date - // 6 => Priority - var columnsOrder = UserSettings["SOGoMailListViewColumnsOrder"]; - if ( typeof(columnsOrder) == "undefined" ) { - columnsOrder = defaultColumnsOrder; - } - for (var j = 0; j < row.cells.length; j++) { - var cell = $(row.cells[j]); - var cellType = columnsOrder[j]; - cell.observe("mousedown", listRowMouseDownHandler); - if (cellType == "Subject" || cellType == "From" || cellType == "To" || cellType == "Date") - cell.observe("dblclick", onMessageDoubleClick.bindAsEventListener(cell)); - else if (cellType == "Unread") { - var img = $(cell.childNodesWithTag("img")[0]); - img.observe("click", mailListMarkMessage.bindAsEventListener(img)); - } - } - } - } + //row.dndTypes = function() { return new Array("mailRow"); }; + //row.dndGhost = messageListGhost; + //row.dndDataForType = messageListData; + //document.DNDManager.registerSource(row); + // Correspondances index <> nom de la colonne + // 0 => Invisible + // 1 => Attachment + // 2 => Subject + // 3 => From + // 4 => Unread + // 5 => Date + // 6 => Priority + var columnsOrder = UserSettings["SOGoMailListViewColumnsOrder"]; + if ( typeof(columnsOrder) == "undefined" ) { + columnsOrder = defaultColumnsOrder; + } + for (var j = 0; j < row.cells.length; j++) { + var cell = $(row.cells[j]); + var cellType = columnsOrder[j]; + cell.observe("mousedown", listRowMouseDownHandler); + if (cellType == "Subject" || cellType == "From" || cellType == "To" || cellType == "Date") + cell.observe("dblclick", onMessageDoubleClick.bindAsEventListener(cell)); + else if (cellType == "Unread") { + var img = $(cell.childNodesWithTag("img")[0]); + img.observe("click", mailListMarkMessage.bindAsEventListener(img)); + } + } + } + } } function configureDragHandles() { - var handle = $("verticalDragHandle"); - if (handle) { - handle.addInterface(SOGoDragHandlesInterface); - handle.leftMargin = 50; - handle.leftBlock=$("leftPanel"); - handle.rightBlock=$("rightPanel"); - } + var handle = $("verticalDragHandle"); + if (handle) { + handle.addInterface(SOGoDragHandlesInterface); + handle.leftMargin = 50; + handle.leftBlock=$("leftPanel"); + handle.rightBlock=$("rightPanel"); + } - handle = $("rightDragHandle"); - if (handle) { - handle.addInterface(SOGoDragHandlesInterface); - handle.upperBlock=$("mailboxContent"); - handle.lowerBlock=$("messageContent"); - } + handle = $("rightDragHandle"); + if (handle) { + handle.addInterface(SOGoDragHandlesInterface); + handle.upperBlock=$("mailboxContent"); + handle.lowerBlock=$("messageContent"); + } } function onWindowResize(event) { - var handle = $("verticalDragHandle"); - if (handle) - handle.adjust(); - handle = $("rightDragHandle"); - if (handle) - handle.adjust(); + var handle = $("verticalDragHandle"); + if (handle) + handle.adjust(); + handle = $("rightDragHandle"); + if (handle) + handle.adjust(); } /* dnd */ function initDnd() { - // log("MailerUI initDnd"); + // log("MailerUI initDnd"); - var tree = $("mailboxTree"); - if (tree) { - var images = tree.getElementsByTagName("img"); - for (var i = 0; i < images.length; i++) { - if (images[i].id[0] == 'j') { - images[i].dndAcceptType = mailboxSpanAcceptType; - images[i].dndEnter = plusSignEnter; - images[i].dndExit = plusSignExit; - document.DNDManager.registerDestination(images[i]); - } + var tree = $("mailboxTree"); + if (tree) { + var images = tree.getElementsByTagName("img"); + for (var i = 0; i < images.length; i++) { + if (images[i].id[0] == 'j') { + images[i].dndAcceptType = mailboxSpanAcceptType; + images[i].dndEnter = plusSignEnter; + images[i].dndExit = plusSignExit; + document.DNDManager.registerDestination(images[i]); + } + } + var nodes = document.getElementsByClassName("nodeName", tree); + for (var i = 0; i < nodes.length; i++) { + nodes[i].dndAcceptType = mailboxSpanAcceptType; + nodes[i].dndEnter = mailboxSpanEnter; + nodes[i].dndExit = mailboxSpanExit; + nodes[i].dndDrop = mailboxSpanDrop; + document.DNDManager.registerDestination(nodes[i]); + } } - var nodes = document.getElementsByClassName("nodeName", tree); - for (var i = 0; i < nodes.length; i++) { - nodes[i].dndAcceptType = mailboxSpanAcceptType; - nodes[i].dndEnter = mailboxSpanEnter; - nodes[i].dndExit = mailboxSpanExit; - nodes[i].dndDrop = mailboxSpanDrop; - document.DNDManager.registerDestination(nodes[i]); - } - } } /* stub */ @@ -1388,834 +1396,839 @@ function refreshContacts() { } function openInbox(node) { - var done = false; - openMailbox(node.parentNode.getAttribute("dataname"), null, null, false); - var tree = $("mailboxTree"); - tree.selectedEntry = node; - node.selectElement(); - mailboxTree.o(1); + var done = false; + openMailbox(node.parentNode.getAttribute("dataname"), null, null, false); + var tree = $("mailboxTree"); + tree.selectedEntry = node; + node.selectElement(); + mailboxTree.o(1); } function initMailer(event) { - if (!$(document.body).hasClassName("popup")) { - //initDnd(); - initMailboxTree(); - initMessageCheckTimer(); + if (!$(document.body).hasClassName("popup")) { + //initDnd(); + initMailboxTree(); + initMessageCheckTimer(); - if (Prototype.Browser.Gecko) - Event.observe(document, "keypress", onDocumentKeydown); // for FF2 - else - Event.observe(document, "keydown", onDocumentKeydown); + if (Prototype.Browser.Gecko) + Event.observe(document, "keypress", onDocumentKeydown); // for FF2 + else + Event.observe(document, "keydown", onDocumentKeydown); - /* Perform an expunge when leaving the webmail */ - if (isSafari()) { - $('calendarBannerLink').observe("click", onUnload); - $('contactsBannerLink').observe("click", onUnload); - $('logoff').observe("click", onUnload); - } - else - Event.observe(window, "beforeunload", onUnload); - } + /* Perform an expunge when leaving the webmail */ + if (isSafari()) { + $('calendarBannerLink').observe("click", onUnload); + $('contactsBannerLink').observe("click", onUnload); + $('logoff').observe("click", onUnload); + } + else + Event.observe(window, "beforeunload", onUnload); + } - onWindowResize.defer(); - Event.observe(window, "resize", onWindowResize); + onWindowResize.defer(); + Event.observe(window, "resize", onWindowResize); - // Default sort options - sorting["attribute"] = "date"; - sorting["ascending"] = false; + // Default sort options + sorting["attribute"] = "date"; + sorting["ascending"] = false; } function initMessageCheckTimer() { - var messageCheck = UserDefaults["MessageCheck"]; - if (messageCheck && messageCheck != "manually") { - var interval; - if (messageCheck == "once_per_hour") - interval = 3600; - else if (messageCheck == "every_minute") - interval = 60; - else { - interval = parseInt(messageCheck.substr(6)) * 60; + var messageCheck = UserDefaults["MessageCheck"]; + if (messageCheck && messageCheck != "manually") { + var interval; + if (messageCheck == "once_per_hour") + interval = 3600; + else if (messageCheck == "every_minute") + interval = 60; + else { + interval = parseInt(messageCheck.substr(6)) * 60; + } + messageCheckTimer = window.setInterval(onMessageCheckCallback, + interval * 1000); } - messageCheckTimer = window.setInterval(onMessageCheckCallback, - interval * 1000); - } } function onMessageCheckCallback(event) { - refreshMailbox(); + refreshMailbox(); } function initMailboxTree() { - var node = $("mailboxTree"); - if (node) - node.parentNode.removeChild(node); - mailboxTree = new dTree("mailboxTree"); - mailboxTree.config.folderLinks = true; - mailboxTree.config.hideRoot = true; + var node = $("mailboxTree"); + if (node) + node.parentNode.removeChild(node); + mailboxTree = new dTree("mailboxTree"); + mailboxTree.config.folderLinks = true; + mailboxTree.config.hideRoot = true; - mailboxTree.icon.root = ResourcesURL + "/tbtv_account_17x17.gif"; - mailboxTree.icon.folder = ResourcesURL + "/tbtv_leaf_corner_17x17.png"; - mailboxTree.icon.folderOpen = ResourcesURL + "/tbtv_leaf_corner_17x17.png"; - mailboxTree.icon.node = ResourcesURL + "/tbtv_leaf_corner_17x17.png"; - mailboxTree.icon.line = ResourcesURL + "/tbtv_line_17x17.gif"; - mailboxTree.icon.join = ResourcesURL + "/tbtv_junction_17x17.gif"; - mailboxTree.icon.joinBottom = ResourcesURL + "/tbtv_corner_17x17.gif"; - mailboxTree.icon.plus = ResourcesURL + "/tbtv_plus_17x17.gif"; - mailboxTree.icon.plusBottom = ResourcesURL + "/tbtv_corner_plus_17x17.gif"; - mailboxTree.icon.minus = ResourcesURL + "/tbtv_minus_17x17.gif"; - mailboxTree.icon.minusBottom = ResourcesURL + "/tbtv_corner_minus_17x17.gif"; - mailboxTree.icon.nlPlus = ResourcesURL + "/tbtv_corner_plus_17x17.gif"; - mailboxTree.icon.nlMinus = ResourcesURL + "/tbtv_corner_minus_17x17.gif"; - mailboxTree.icon.empty = ResourcesURL + "/empty.gif"; + mailboxTree.icon.root = ResourcesURL + "/tbtv_account_17x17.gif"; + mailboxTree.icon.folder = ResourcesURL + "/tbtv_leaf_corner_17x17.png"; + mailboxTree.icon.folderOpen = ResourcesURL + "/tbtv_leaf_corner_17x17.png"; + mailboxTree.icon.node = ResourcesURL + "/tbtv_leaf_corner_17x17.png"; + mailboxTree.icon.line = ResourcesURL + "/tbtv_line_17x17.gif"; + mailboxTree.icon.join = ResourcesURL + "/tbtv_junction_17x17.gif"; + mailboxTree.icon.joinBottom = ResourcesURL + "/tbtv_corner_17x17.gif"; + mailboxTree.icon.plus = ResourcesURL + "/tbtv_plus_17x17.gif"; + mailboxTree.icon.plusBottom = ResourcesURL + "/tbtv_corner_plus_17x17.gif"; + mailboxTree.icon.minus = ResourcesURL + "/tbtv_minus_17x17.gif"; + mailboxTree.icon.minusBottom = ResourcesURL + "/tbtv_corner_minus_17x17.gif"; + mailboxTree.icon.nlPlus = ResourcesURL + "/tbtv_corner_plus_17x17.gif"; + mailboxTree.icon.nlMinus = ResourcesURL + "/tbtv_corner_minus_17x17.gif"; + mailboxTree.icon.empty = ResourcesURL + "/empty.gif"; - mailboxTree.add(0, -1, ''); + mailboxTree.add(0, -1, ''); - mailboxTree.pendingRequests = mailAccounts.length; - activeAjaxRequests += mailAccounts.length; - for (var i = 0; i < mailAccounts.length; i++) { - var url = ApplicationBaseURL + encodeURI(mailAccounts[i]) + "/mailboxes"; - triggerAjaxRequest(url, onLoadMailboxesCallback, mailAccounts[i]); - } + mailboxTree.pendingRequests = mailAccounts.length; + activeAjaxRequests += mailAccounts.length; + for (var i = 0; i < mailAccounts.length; i++) { + var url = ApplicationBaseURL + encodeURI(mailAccounts[i]) + "/mailboxes"; + triggerAjaxRequest(url, onLoadMailboxesCallback, mailAccounts[i]); + } } function updateMailboxTreeInPage() { - var treeContent = $("folderTreeContent"); - treeContent.update(mailboxTree); + var treeContent = $("folderTreeContent"); + treeContent.update(mailboxTree); - var inboxFound = false; - var tree = $("mailboxTree"); - var nodes = document.getElementsByClassName("node", tree); - for (i = 0; i < nodes.length; i++) { - nodes[i].observe("click", - onMailboxTreeItemClick.bindAsEventListener(nodes[i])); - nodes[i].observe("contextmenu", - onFolderMenuClick.bindAsEventListener(nodes[i])); - if (!inboxFound - && nodes[i].parentNode.getAttribute("datatype") == "inbox") { - Mailer.currentMailboxType = "inbox"; - openInbox(nodes[i]); - inboxFound = true; + var inboxFound = false; + var tree = $("mailboxTree"); + var nodes = document.getElementsByClassName("node", tree); + for (i = 0; i < nodes.length; i++) { + nodes[i].observe("click", + onMailboxTreeItemClick.bindAsEventListener(nodes[i])); + nodes[i].observe("contextmenu", + onFolderMenuClick.bindAsEventListener(nodes[i])); + if (!inboxFound + && nodes[i].parentNode.getAttribute("datatype") == "inbox") { + Mailer.currentMailboxType = "inbox"; + openInbox(nodes[i]); + inboxFound = true; + } } - } - if (Mailer.quotas && parseInt(Mailer.quotas.maxQuota) > 0) { - // Build quota indicator, show values in MB - var percents = (Math.round(Mailer.quotas.usedSpace * 10000 - / Mailer.quotas.maxQuota) - / 100); - var level = (percents > 85)? "alert" : (percents > 70)? "warn" : "ok"; - var format = labels["quotasFormat"]; - var text = format.formatted(percents, - Math.round(Mailer.quotas.maxQuota/10.24)/100); - var quotaDiv = new Element('div', { 'class': 'quota', 'info': text }); - var levelDiv = new Element('div', { 'class': 'level' }); - var valueDiv = new Element('div', { 'class': 'value ' + level, 'style': 'width: ' + ((percents > 100)?100:percents) + '%' }); - var marksDiv = new Element('div', { 'class': 'marks' }); - var textP = new Element('p').update(text); - marksDiv.insert(new Element('div')); - marksDiv.insert(new Element('div')); - marksDiv.insert(new Element('div')); - levelDiv.insert(valueDiv); - levelDiv.insert(marksDiv); - levelDiv.insert(textP); - quotaDiv.insert(levelDiv); + if (Mailer.quotas && parseInt(Mailer.quotas.maxQuota) > 0) { + // Build quota indicator, show values in MB + var percents = (Math.round(Mailer.quotas.usedSpace * 10000 + / Mailer.quotas.maxQuota) + / 100); + var level = (percents > 85)? "alert" : (percents > 70)? "warn" : "ok"; + var format = labels["quotasFormat"]; + var text = format.formatted(percents, + Math.round(Mailer.quotas.maxQuota/10.24)/100); + var quotaDiv = new Element('div', { 'class': 'quota', 'info': text }); + var levelDiv = new Element('div', { 'class': 'level' }); + var valueDiv = new Element('div', { 'class': 'value ' + level, 'style': 'width: ' + ((percents > 100)?100:percents) + '%' }); + var marksDiv = new Element('div', { 'class': 'marks' }); + var textP = new Element('p').update(text); + marksDiv.insert(new Element('div')); + marksDiv.insert(new Element('div')); + marksDiv.insert(new Element('div')); + levelDiv.insert(valueDiv); + levelDiv.insert(marksDiv); + levelDiv.insert(textP); + quotaDiv.insert(levelDiv); - treeContent.insertBefore(quotaDiv, tree); - } + treeContent.insertBefore(quotaDiv, tree); + } } function mailboxMenuNode(type, name) { - var newNode = document.createElement("li"); - var icon = MailerUIdTreeExtension.folderIcons[type]; - if (!icon) - icon = "tbtv_leaf_corner_17x17.png"; - var image = document.createElement("img"); - image.src = ResourcesURL + "/" + icon; - newNode.appendChild(image); - var displayName = MailerUIdTreeExtension.folderNames[type]; - if (!displayName) - displayName = name; - newNode.appendChild(document.createTextNode(" " + displayName)); + var newNode = document.createElement("li"); + var icon = MailerUIdTreeExtension.folderIcons[type]; + if (!icon) + icon = "tbtv_leaf_corner_17x17.png"; + var image = document.createElement("img"); + image.src = ResourcesURL + "/" + icon; + newNode.appendChild(image); + var displayName = MailerUIdTreeExtension.folderNames[type]; + if (!displayName) + displayName = name; + newNode.appendChild(document.createTextNode(" " + displayName)); - return newNode; + return newNode; } function generateMenuForMailbox(mailbox, prefix, callback) { - var menuDIV = document.createElement("div"); - $(menuDIV).addClassName("menu"); - var menuID = prefix + "Submenu"; - var previousMenuDIV = $(menuID); - if (previousMenuDIV) - previousMenuDIV.parentNode.removeChild(previousMenuDIV); - menuDIV.setAttribute("id", menuID); - var menu = document.createElement("ul"); - menu.style.cssFloat="left"; - menu.style.styleFloat="left"; - menuDIV.appendChild(menu); - pageContent.appendChild(menuDIV); + var menuDIV = document.createElement("div"); + $(menuDIV).addClassName("menu"); + var menuID = prefix + "Submenu"; + var previousMenuDIV = $(menuID); + if (previousMenuDIV) + previousMenuDIV.parentNode.removeChild(previousMenuDIV); + menuDIV.setAttribute("id", menuID); + var menu = document.createElement("ul"); + menu.style.cssFloat="left"; + menu.style.styleFloat="left"; + menuDIV.appendChild(menu); + pageContent.appendChild(menuDIV); - var windowHeight = 0; - if ( typeof(window.innerHeight) != "undefined" && window.innerHeight != 0 ) { - windowHeight = window.innerHeight; - } - else { - windowHeight = document.body.clientHeight; - } - var offset = 70; - if ( navigator.appVersion.indexOf("Safari") >= 0 ) { - offset = 140; - } - - var callbacks = new Array(); - if (mailbox.type != "account") { - var newNode = document.createElement("li"); - newNode.mailbox = mailbox; - newNode.appendChild(document.createTextNode(labels["This Folder"])); - menu.appendChild(newNode); - menu.appendChild(document.createElement("li")); - callbacks.push(callback); - callbacks.push("-"); - } - - var submenuCount = 0; - var newNode; - for (var i = 0; i < mailbox.children.length; i++) { - if ( menu.offsetHeight > windowHeight-offset ) { - var menuWidth = parseInt(menu.offsetWidth) + 15 - menuWidth = menuWidth + "px"; - menu.style.width = menuWidth; - menu = document.createElement("ul"); - menu.style.cssFloat="left"; - menu.style.styleFloat="left"; - menuDIV.appendChild(menu); - } - var child = mailbox.children[i]; - newNode = mailboxMenuNode(child.type, child.name); - newNode.style.width = "auto"; - menu.appendChild(newNode); - if (child.children.length > 0) { - var newPrefix = prefix + submenuCount; - var newSubmenuId = generateMenuForMailbox(child, newPrefix, callback); - callbacks.push(newSubmenuId); - submenuCount++; + var windowHeight = 0; + if ( typeof(window.innerHeight) != "undefined" && window.innerHeight != 0 ) { + windowHeight = window.innerHeight; } else { - newNode.mailbox = child; - callbacks.push(callback); + windowHeight = document.body.clientHeight; + } + var offset = 70; + if ( navigator.appVersion.indexOf("Safari") >= 0 ) { + offset = 140; } - } - var menuWidth = parseInt(menu.offsetWidth) + 15 - menuWidth = menuWidth + "px"; - menu.style.width = menuWidth; - - - initMenu(menuDIV, callbacks); - return menuDIV.getAttribute("id"); + var callbacks = new Array(); + if (mailbox.type != "account") { + var newNode = document.createElement("li"); + newNode.mailbox = mailbox; + newNode.appendChild(document.createTextNode(labels["This Folder"])); + menu.appendChild(newNode); + menu.appendChild(document.createElement("li")); + callbacks.push(callback); + callbacks.push("-"); + } + + var submenuCount = 0; + var newNode; + for (var i = 0; i < mailbox.children.length; i++) { + if ( menu.offsetHeight > windowHeight-offset ) { + var menuWidth = parseInt(menu.offsetWidth) + 15 + menuWidth = menuWidth + "px"; + menu.style.width = menuWidth; + menu = document.createElement("ul"); + menu.style.cssFloat="left"; + menu.style.styleFloat="left"; + menuDIV.appendChild(menu); + } + var child = mailbox.children[i]; + newNode = mailboxMenuNode(child.type, child.name); + newNode.style.width = "auto"; + menu.appendChild(newNode); + if (child.children.length > 0) { + var newPrefix = prefix + submenuCount; + var newSubmenuId = generateMenuForMailbox(child, newPrefix, callback); + callbacks.push(newSubmenuId); + submenuCount++; + } + else { + newNode.mailbox = child; + callbacks.push(callback); + } + } + var menuWidth = parseInt(menu.offsetWidth) + 15 + menuWidth = menuWidth + "px"; + menu.style.width = menuWidth; + + + initMenu(menuDIV, callbacks); + + return menuDIV.getAttribute("id"); } function updateMailboxMenus() { - var mailboxActions = { move: onMailboxMenuMove, - copy: onMailboxMenuCopy }; + var mailboxActions = { move: onMailboxMenuMove, + copy: onMailboxMenuCopy }; - for (key in mailboxActions) { - var menuId = key + "MailboxMenu"; - var menuDIV = $(menuId); - if (menuDIV) - menuDIV.parentNode.removeChild(menuDIV); + for (key in mailboxActions) { + var menuId = key + "MailboxMenu"; + var menuDIV = $(menuId); + if (menuDIV) + menuDIV.parentNode.removeChild(menuDIV); - menuDIV = document.createElement("div"); - pageContent = $("pageContent"); - pageContent.appendChild(menuDIV); + menuDIV = document.createElement("div"); + pageContent = $("pageContent"); + pageContent.appendChild(menuDIV); - var menu = document.createElement("ul"); - menuDIV.appendChild(menu); + var menu = document.createElement("ul"); + menuDIV.appendChild(menu); - $(menuDIV).addClassName("menu"); - menuDIV.setAttribute("id", menuId); + $(menuDIV).addClassName("menu"); + menuDIV.setAttribute("id", menuId); - var submenuIds = new Array(); - for (var i = 0; i < mailAccounts.length; i++) { - var menuEntry = mailboxMenuNode("account", mailAccounts[i]); - menu.appendChild(menuEntry); - var mailbox = accounts[mailAccounts[i]]; - var newSubmenuId = generateMenuForMailbox(mailbox, - key, mailboxActions[key]); - submenuIds.push(newSubmenuId); + var submenuIds = new Array(); + for (var i = 0; i < mailAccounts.length; i++) { + var menuEntry = mailboxMenuNode("account", mailAccounts[i]); + menu.appendChild(menuEntry); + var mailbox = accounts[mailAccounts[i]]; + var newSubmenuId = generateMenuForMailbox(mailbox, + key, mailboxActions[key]); + submenuIds.push(newSubmenuId); + } + initMenu(menuDIV, submenuIds); } - initMenu(menuDIV, submenuIds); - } } function onLoadMailboxesCallback(http) { - if (http.status == 200) { - 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(); - updateStatusFolders(); - configureDragAndDrop (); - } + if (http.status == 200) { + 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(); + updateStatusFolders(); + configureDroppables(); + } + } + else + log ("onLoadMailboxesCallback " + http.status); } - else - log ("onLoadMailboxesCallback " + http.status); - } - // var tree = $("mailboxTree"); - // var treeNodes = document.getElementsByClassName("dTreeNode", tree); - // var i = 0; - // while (i < treeNodes.length - // && treeNodes[i].getAttribute("dataname") != Mailer.currentMailbox) - // i++; - // if (i < treeNodes.length) { - // // log("found mailbox"); - // var links = document.getElementsByClassName("node", treeNodes[i]); - // if (tree.selectedEntry) - // tree.selectedEntry.deselect(); - // links[0].selectElement(); - // tree.selectedEntry = links[0]; - // expandUpperTree(links[0]); - // } + // var tree = $("mailboxTree"); + // var treeNodes = document.getElementsByClassName("dTreeNode", tree); + // var i = 0; + // while (i < treeNodes.length + // && treeNodes[i].getAttribute("dataname") != Mailer.currentMailbox) + // i++; + // if (i < treeNodes.length) { + // // log("found mailbox"); + // var links = document.getElementsByClassName("node", treeNodes[i]); + // if (tree.selectedEntry) + // tree.selectedEntry.deselect(); + // links[0].selectElement(); + // tree.selectedEntry = links[0]; + // expandUpperTree(links[0]); + // } } function buildMailboxes(accountName, encoded) { - var account = new Mailbox("account", accountName); - var accountIndex = mailAccounts.indexOf(accountName); - var data = encoded.evalJSON(true); - var mailboxes = data.mailboxes; - var unseen = (data.status? data.status.unseen : 0); + var account = new Mailbox("account", accountName); + var accountIndex = mailAccounts.indexOf(accountName); + var data = encoded.evalJSON(true); + var mailboxes = data.mailboxes; + var unseen = (data.status? data.status.unseen : 0); - if (data.quotas) - Mailer.quotas = data.quotas; + if (data.quotas) + Mailer.quotas = data.quotas; - for (var i = 0; i < mailboxes.length; i++) { - var currentNode = account; - var names = mailboxes[i].path.split("/"); - for (var j = 1; j < (names.length - 1); j++) { - var node = currentNode.findMailboxByName(names[j]); - if (!node) { - node = new Mailbox("additional", names[j]); - currentNode.addMailbox(node); - } - currentNode = node; + for (var i = 0; i < mailboxes.length; i++) { + var currentNode = account; + var names = mailboxes[i].path.split("/"); + for (var j = 1; j < (names.length - 1); j++) { + var node = currentNode.findMailboxByName(names[j]); + if (!node) { + node = new Mailbox("additional", names[j]); + currentNode.addMailbox(node); + } + currentNode = node; + } + var basename = names[names.length-1]; + var leaf = currentNode.findMailboxByName(basename); + if (leaf) + leaf.type = mailboxes[i].type; + else { + if (mailboxes[i].type == 'inbox') + leaf = new Mailbox(mailboxes[i].type, basename, unseen); + else + leaf = new Mailbox(mailboxes[i].type, basename); + currentNode.addMailbox(leaf); + } } - var basename = names[names.length-1]; - var leaf = currentNode.findMailboxByName(basename); - if (leaf) - leaf.type = mailboxes[i].type; - else { - if (mailboxes[i].type == 'inbox') - leaf = new Mailbox(mailboxes[i].type, basename, unseen); - else - leaf = new Mailbox(mailboxes[i].type, basename); - currentNode.addMailbox(leaf); - } - } - return account; + return account; } function getFoldersState() { - if (mailAccounts.length > 0) { - var urlstr = ApplicationBaseURL + "foldersState"; - triggerAjaxRequest(urlstr, getFoldersStateCallback); - } + if (mailAccounts.length > 0) { + var urlstr = ApplicationBaseURL + "foldersState"; + triggerAjaxRequest(urlstr, getFoldersStateCallback); + } } function getFoldersStateCallback(http) { - if (http.status == 200) { - if (http.responseText.length > 0) { - // The response text is a JSON array - // 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); - } + if (http.status == 200) { + if (http.responseText.length > 0) { + // The response text is a JSON array + // 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(); } - mailboxTree.autoSync(); - } } function saveFoldersState() { - if (mailAccounts.length > 0) { - var foldersState = mailboxTree.getFoldersState(); - var urlstr = ApplicationBaseURL + "saveFoldersState"; - var parameters = "expandedFolders=" + foldersState; - triggerAjaxRequest(urlstr, saveFoldersStateCallback, null, parameters, - { "Content-type": "application/x-www-form-urlencoded" }); - } + if (mailAccounts.length > 0) { + var foldersState = mailboxTree.getFoldersState(); + var urlstr = ApplicationBaseURL + "saveFoldersState"; + var parameters = "expandedFolders=" + foldersState; + triggerAjaxRequest(urlstr, saveFoldersStateCallback, null, parameters, + { "Content-type": "application/x-www-form-urlencoded" }); + } } function saveFoldersStateCallback(http) { - if (isHttpStatus204(http.status)) { - log ("folders state saved"); - } + if (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=" + encodeURIComponent(name); - var errorLabel = labels["The folder with name \"%{0}\" could not be created."]; - triggerAjaxRequest(urlstr, folderOperationCallback, - errorLabel.formatted(name)); - } + var name = window.prompt(labels["Name :"], ""); + if (name && name.length > 0) { + var folderID = document.menuTarget.getAttribute("dataname"); + var urlstr = URLForFolderID(folderID) + "/createFolder?name=" + encodeURIComponent(name); + var errorLabel = labels["The folder with name \"%{0}\" could not be created."]; + triggerAjaxRequest(urlstr, folderOperationCallback, + errorLabel.formatted(name)); + } } function onMenuRenameFolder(event) { - var name = window.prompt(labels["Enter the new name of your folder :"], - ""); - if (name && name.length > 0) { - var folderID = document.menuTarget.getAttribute("dataname"); - var urlstr = URLForFolderID(folderID) + "/renameFolder?name=" + name; - var errorLabel = labels["This folder could not be renamed to \"%{0}\"."]; - triggerAjaxRequest(urlstr, folderOperationCallback, - errorLabel.formatted(name)); - } + var name = window.prompt(labels["Enter the new name of your folder :"], + ""); + if (name && name.length > 0) { + var folderID = document.menuTarget.getAttribute("dataname"); + var urlstr = URLForFolderID(folderID) + "/renameFolder?name=" + name; + var errorLabel = labels["This folder could not be renamed to \"%{0}\"."]; + triggerAjaxRequest(urlstr, folderOperationCallback, + errorLabel.formatted(name)); + } } function onMenuDeleteFolder(event) { - var answer = window.confirm(labels["Do you really want to move this folder into the trash ?"]); - if (answer) { - var folderID = document.menuTarget.getAttribute("dataname"); - var urlstr = URLForFolderID(folderID) + "/delete"; - var errorLabel = labels["The folder could not be deleted."]; - triggerAjaxRequest(urlstr, folderOperationCallback, errorLabel); - } + var answer = window.confirm(labels["Do you really want to move this folder into the trash ?"]); + if (answer) { + var folderID = document.menuTarget.getAttribute("dataname"); + var urlstr = URLForFolderID(folderID) + "/delete"; + var errorLabel = labels["The folder could not be deleted."]; + triggerAjaxRequest(urlstr, folderOperationCallback, errorLabel); + } } function onMenuExpungeFolder(event) { - var folderID = document.menuTarget.getAttribute("dataname"); - var urlstr = URLForFolderID(folderID) + "/expunge"; - triggerAjaxRequest(urlstr, folderRefreshCallback, { "mailbox": folderID, "refresh": false }); + var folderID = document.menuTarget.getAttribute("dataname"); + var urlstr = URLForFolderID(folderID) + "/expunge"; + triggerAjaxRequest(urlstr, folderRefreshCallback, { "mailbox": folderID, "refresh": false }); } function onMenuEmptyTrash(event) { - var folderID = document.menuTarget.getAttribute("dataname"); - var urlstr = URLForFolderID(folderID) + "/emptyTrash"; - var errorLabel = labels["The trash could not be emptied."]; - triggerAjaxRequest(urlstr, folderOperationCallback, errorLabel); + var folderID = document.menuTarget.getAttribute("dataname"); + var urlstr = URLForFolderID(folderID) + "/emptyTrash"; + var errorLabel = labels["The trash could not be emptied."]; + triggerAjaxRequest(urlstr, folderOperationCallback, errorLabel); - 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 = Mailer.currentMessages[folderID]; - if (msgID) - deleteCachedMessage(folderID + "/" + msgID); + 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 = Mailer.currentMessages[folderID]; + if (msgID) + deleteCachedMessage(folderID + "/" + msgID); } function _onMenuChangeToXXXFolder(event, folder) { - var type = document.menuTarget.getAttribute("datatype"); - if (type == "additional") - window.alert(labels["You need to choose a non-virtual folder!"]); - else { - var folderID = document.menuTarget.getAttribute("dataname"); - var urlstr = URLForFolderID(folderID) + "/setAs" + folder + "Folder"; - var errorLabel = labels["The folder functionality could not be changed."]; - triggerAjaxRequest(urlstr, folderOperationCallback, errorLabel); - } + var type = document.menuTarget.getAttribute("datatype"); + if (type == "additional") + window.alert(labels["You need to choose a non-virtual folder!"]); + else { + var folderID = document.menuTarget.getAttribute("dataname"); + var urlstr = URLForFolderID(folderID) + "/setAs" + folder + "Folder"; + var errorLabel = labels["The folder functionality could not be changed."]; + triggerAjaxRequest(urlstr, folderOperationCallback, errorLabel); + } } function onMenuChangeToDraftsFolder(event) { - return _onMenuChangeToXXXFolder(event, "Drafts"); + return _onMenuChangeToXXXFolder(event, "Drafts"); } function onMenuChangeToSentFolder(event) { - return _onMenuChangeToXXXFolder(event, "Sent"); + return _onMenuChangeToXXXFolder(event, "Sent"); } function onMenuChangeToTrashFolder(event) { - return _onMenuChangeToXXXFolder(event, "Trash"); + return _onMenuChangeToXXXFolder(event, "Trash"); } function onMenuLabelNone() { - var messages = new Array(); + 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)); + 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 + encodeURI(Mailer.currentMailbox) + "/"; - messages.each(function(id) { - triggerAjaxRequest(url + id + "/removeAllLabels", - messageFlagCallback, - { mailbox: Mailer.currentMailbox, msg: id, label: null } ); - }); + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"; + messages.each(function(id) { + triggerAjaxRequest(url + id + "/removeAllLabels", + messageFlagCallback, + { mailbox: Mailer.currentMailbox, msg: id, label: null } ); + }); } function _onMenuLabelFlagX(flag) { - var messages = new Hash(); + var messages = new Hash(); - if (document.menuTarget.tagName == "DIV") - // Menu called from message content view - messages.set(Mailer.currentMessages[Mailer.currentMailbox], - $('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")); + if (document.menuTarget.tagName == "DIV") + // Menu called from message content view + messages.set(Mailer.currentMessages[Mailer.currentMailbox], + $('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 + encodeURI(Mailer.currentMailbox) + "/"; - messages.keys().each(function(id) { - var flags = messages.get(id).split(" "); - var operation = "add"; + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/"; + messages.keys().each(function(id) { + var flags = messages.get(id).split(" "); + var operation = "add"; - if (flags.indexOf("label" + flag) > -1) - operation = "remove"; + if (flags.indexOf("label" + flag) > -1) + operation = "remove"; - triggerAjaxRequest(url + id + "/" + operation + "Label" + flag, - messageFlagCallback, - { mailbox: Mailer.currentMailbox, msg: id, - label: operation + flag } ); - }); + triggerAjaxRequest(url + id + "/" + operation + "Label" + flag, + messageFlagCallback, + { mailbox: Mailer.currentMailbox, msg: id, + label: operation + flag } ); + }); } function onMenuLabelFlag1() { - _onMenuLabelFlagX(1); + _onMenuLabelFlagX(1); } function onMenuLabelFlag2() { - _onMenuLabelFlagX(2); + _onMenuLabelFlagX(2); } function onMenuLabelFlag3() { - _onMenuLabelFlagX(3); + _onMenuLabelFlagX(3); } function onMenuLabelFlag4() { - _onMenuLabelFlagX(4); + _onMenuLabelFlagX(4); } function onMenuLabelFlag5() { - _onMenuLabelFlagX(5); + _onMenuLabelFlagX(5); } function folderOperationCallback(http) { - if (http.readyState == 4 - && isHttpStatus204(http.status)) - initMailboxTree(); - else - window.alert(http.callbackData); + if (http.readyState == 4 + && isHttpStatus204(http.status)) + initMailboxTree(); + else + window.alert(http.callbackData); } function folderRefreshCallback(http) { - if (http.readyState == 4 - && isHttpStatus204(http.status)) { - var oldMailbox = http.callbackData.mailbox; - if (http.callbackData.refresh - && oldMailbox == Mailer.currentMailbox) - refreshCurrentFolder(); - } - else { - if (http.callbackData.id) { - // Display hidden rows from move operation - var s = http.callbackData.id + ""; - var uids = s.split(","); - for (var i = 0; i < uids.length; i++) { - var row = $("row_" + uids[i]); - row.show(); - } - } - window.alert(labels["Operation failed"]); - } + if (http.readyState == 4 + && isHttpStatus204(http.status)) { + var oldMailbox = http.callbackData.mailbox; + if (http.callbackData.refresh + && oldMailbox == Mailer.currentMailbox) + refreshCurrentFolder(); + } + else { + if (http.callbackData.id) { + // Display hidden rows from move operation + var s = http.callbackData.id + ""; + var uids = s.split(","); + for (var i = 0; i < uids.length; i++) { + var row = $("row_" + uids[i]); + row.show(); + } + } + window.alert(labels["Operation failed"]); + } } function messageFlagCallback(http) { - if (http.readyState == 4 - && isHttpStatus204(http.status)) { - var data = http.callbackData; - if (data["mailbox"] == Mailer.currentMailbox) { - var row = $("row_" + data["msg"]); - var operation = data["label"]; - if (operation) { - var labels = row.getAttribute("labels"); - var flags; - if (labels.length > 0) - flags = labels.split(" "); - else - flags = new Array(); - if (operation.substr(0, 3) == "add") - flags.push("label" + operation.substr(3)); - else { - var flag = "label" + operation.substr(6); - var idx = flags.indexOf(flag); - flags.splice(idx, 1); - } - row.writeAttribute("labels", flags.join(" ")); - row.toggleClassName("_selected"); - row.toggleClassName("_selected"); - } - else - row.writeAttribute("labels", ""); + if (http.readyState == 4 + && isHttpStatus204(http.status)) { + var data = http.callbackData; + if (data["mailbox"] == Mailer.currentMailbox) { + var row = $("row_" + data["msg"]); + var operation = data["label"]; + if (operation) { + var labels = row.getAttribute("labels"); + var flags; + if (labels.length > 0) + flags = labels.split(" "); + else + flags = new Array(); + if (operation.substr(0, 3) == "add") + flags.push("label" + operation.substr(3)); + else { + var flag = "label" + operation.substr(6); + var idx = flags.indexOf(flag); + flags.splice(idx, 1); + } + row.writeAttribute("labels", flags.join(" ")); + row.toggleClassName("_selected"); + row.toggleClassName("_selected"); + } + else + row.writeAttribute("labels", ""); + } } - } } function onLabelMenuPrepareVisibility() { - var messageList = $("messageList"); - var flags = {}; + var messageList = $("messageList"); + var flags = {}; - if (messageList) { - var rows = messageList.getSelectedRows(); - for (var i = 0; i < rows.length; i++) { - $w(rows[i].getAttribute("labels")).each(function(flag) { - flags[flag] = true; - }); + if (messageList) { + var rows = messageList.getSelectedRows(); + for (var i = 0; i < rows.length; i++) { + $w(rows[i].getAttribute("labels")).each(function(flag) { + flags[flag] = true; + }); + } } - } - var lis = this.childNodesWithTag("ul")[0].childNodesWithTag("li") - var isFlagged = false; - for (var i = 1; i < 6; i++) { - if (flags["label" + i]) { - isFlagged = true; - lis[1 + i].addClassName("_chosen"); + var lis = this.childNodesWithTag("ul")[0].childNodesWithTag("li") + var isFlagged = false; + for (var i = 1; i < 6; i++) { + if (flags["label" + i]) { + isFlagged = true; + lis[1 + i].addClassName("_chosen"); + } + else + lis[1 + i].removeClassName("_chosen"); } + if (isFlagged) + lis[0].removeClassName("_chosen"); else - lis[1 + i].removeClassName("_chosen"); - } - if (isFlagged) - lis[0].removeClassName("_chosen"); - else - lis[0].addClassName("_chosen"); + lis[0].addClassName("_chosen"); } function saveAs(event) { - var messageList = $("messageList").down("TBODY"); - var rows = messageList.getSelectedNodes(); - var uids = new Array(); // message IDs - var paths = new Array(); // row IDs + var messageList = $("messageList").down("TBODY"); + var rows = messageList.getSelectedNodes(); + var uids = new Array(); // message IDs + var paths = new Array(); // row IDs - if (rows.length > 0) { - for (var i = 0; i < rows.length; i++) { - var uid = rows[i].readAttribute("id").substr(4); - var path = Mailer.currentMailbox + "/" + uid; - uids.push(uid); - paths.push(path); + if (rows.length > 0) { + for (var i = 0; i < rows.length; i++) { + var uid = rows[i].readAttribute("id").substr(4); + var path = Mailer.currentMailbox + "/" + uid; + uids.push(uid); + paths.push(path); + } + var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/saveMessages"; + window.open(url+"?id="+uids+"&uid="+uids+"&mailbox="+Mailer.currentMailbox+"&path="+paths); } - var url = ApplicationBaseURL + encodeURI(Mailer.currentMailbox) + "/saveMessages"; - window.open(url+"?id="+uids+"&uid="+uids+"&mailbox="+Mailer.currentMailbox+"&path="+paths); - } - else - window.alert(labels["Please select a message."]); + else + window.alert(labels["Please select a message."]); - return false; + return false; } function getMenus() { - var menus = {} - menus["accountIconMenu"] = new Array(null, null, onMenuCreateFolder, null, - null, null); - menus["inboxIconMenu"] = new Array(null, null, null, "-", null, - onMenuCreateFolder, onMenuExpungeFolder, - "-", null, - onMenuSharing); - menus["trashIconMenu"] = new Array(null, null, null, "-", null, - onMenuCreateFolder, onMenuExpungeFolder, - onMenuEmptyTrash, "-", null, - onMenuSharing); - menus["mailboxIconMenu"] = new Array(null, null, null, "-", null, - onMenuCreateFolder, - onMenuRenameFolder, - onMenuExpungeFolder, - onMenuDeleteFolder, - "folderTypeMenu", - "-", null, - onMenuSharing); - menus["addressMenu"] = new Array(newContactFromEmail, newEmailTo, null); - menus["messageListMenu"] = new Array(onMenuOpenMessage, "-", - onMenuReplyToSender, - onMenuReplyToAll, - onMenuForwardMessage, null, - "-", "moveMailboxMenu", - "copyMailboxMenu", "label-menu", - "mark-menu", "-", saveAs, - onMenuViewMessageSource, null, - null, onMenuDeleteMessage); - menus["messagesListMenu"] = new Array(onMenuForwardMessage, - "-", "moveMailboxMenu", - "copyMailboxMenu", "label-menu", - "mark-menu", "-", - saveAs, null, - onMenuDeleteMessage); - menus["imageMenu"] = new Array(saveImage); - menus["attachmentMenu"] = new Array (saveAttachment); - menus["messageContentMenu"] = new Array(onMenuReplyToSender, - onMenuReplyToAll, - onMenuForwardMessage, - null, "moveMailboxMenu", - "copyMailboxMenu", - "-", "label-menu", "mark-menu", - "-", - saveAs, onMenuViewMessageSource, - null, onPrintCurrentMessage, - onMenuDeleteMessage); - menus["folderTypeMenu"] = new Array(onMenuChangeToSentFolder, - onMenuChangeToDraftsFolder, - onMenuChangeToTrashFolder); + var menus = {} + menus["accountIconMenu"] = new Array(null, null, onMenuCreateFolder, null, + null, null); + menus["inboxIconMenu"] = new Array(null, null, null, "-", null, + onMenuCreateFolder, onMenuExpungeFolder, + "-", null, + onMenuSharing); + menus["trashIconMenu"] = new Array(null, null, null, "-", null, + onMenuCreateFolder, onMenuExpungeFolder, + onMenuEmptyTrash, "-", null, + onMenuSharing); + menus["mailboxIconMenu"] = new Array(null, null, null, "-", null, + onMenuCreateFolder, + onMenuRenameFolder, + onMenuExpungeFolder, + onMenuDeleteFolder, + "folderTypeMenu", + "-", null, + onMenuSharing); + menus["addressMenu"] = new Array(newContactFromEmail, newEmailTo, null); + menus["messageListMenu"] = new Array(onMenuOpenMessage, "-", + onMenuReplyToSender, + onMenuReplyToAll, + onMenuForwardMessage, null, + "-", "moveMailboxMenu", + "copyMailboxMenu", "label-menu", + "mark-menu", "-", saveAs, + onMenuViewMessageSource, null, + null, onMenuDeleteMessage); + menus["messagesListMenu"] = new Array(onMenuForwardMessage, + "-", "moveMailboxMenu", + "copyMailboxMenu", "label-menu", + "mark-menu", "-", + saveAs, null, + onMenuDeleteMessage); + menus["imageMenu"] = new Array(saveImage); + menus["attachmentMenu"] = new Array (saveAttachment); + menus["messageContentMenu"] = new Array(onMenuReplyToSender, + onMenuReplyToAll, + onMenuForwardMessage, + null, "moveMailboxMenu", + "copyMailboxMenu", + "-", "label-menu", "mark-menu", + "-", + saveAs, onMenuViewMessageSource, + null, onPrintCurrentMessage, + onMenuDeleteMessage); + menus["folderTypeMenu"] = new Array(onMenuChangeToSentFolder, + onMenuChangeToDraftsFolder, + onMenuChangeToTrashFolder); - menus["label-menu"] = new Array(onMenuLabelNone, "-", onMenuLabelFlag1, - onMenuLabelFlag2, onMenuLabelFlag3, - onMenuLabelFlag4, onMenuLabelFlag5); - menus["mark-menu"] = new Array(null, null, null, null, "-", null, "-", - null, null, null); - menus["searchMenu"] = new Array(setSearchCriteria, setSearchCriteria, - setSearchCriteria, setSearchCriteria, - setSearchCriteria); - var labelMenu = $("label-menu"); - if (labelMenu) - labelMenu.prepareVisibility = onLabelMenuPrepareVisibility; + menus["label-menu"] = new Array(onMenuLabelNone, "-", onMenuLabelFlag1, + onMenuLabelFlag2, onMenuLabelFlag3, + onMenuLabelFlag4, onMenuLabelFlag5); + menus["mark-menu"] = new Array(null, null, null, null, "-", null, "-", + null, null, null); + menus["searchMenu"] = new Array(setSearchCriteria, setSearchCriteria, + setSearchCriteria, setSearchCriteria, + setSearchCriteria); + var labelMenu = $("label-menu"); + if (labelMenu) + labelMenu.prepareVisibility = onLabelMenuPrepareVisibility; - return menus; + return menus; } document.observe("dom:loaded", initMailer); function Mailbox(type, name, unseen) { - this.type = type; - this.name = name; - this.unseen = unseen; - this.parentFolder = null; - this.children = new Array(); - return this; + this.type = type; + this.name = name; + this.unseen = unseen; + this.parentFolder = null; + this.children = new Array(); + return this; } Mailbox.prototype = { - dump: function(indent) { - if (!indent) - indent = 0; - log(" ".repeat(indent) + this.name); - for (var i = 0; i < this.children.length; i++) { - this.children[i].dump(indent + 2); + dump: function(indent) { + if (!indent) + indent = 0; + log(" ".repeat(indent) + this.name); + for (var i = 0; i < this.children.length; i++) { + this.children[i].dump(indent + 2); + } + }, + fullName: function() { + var fullName = ""; + + var currentFolder = this; + while (currentFolder.parentFolder) { + fullName = "/folder" + currentFolder.name + fullName; + currentFolder = currentFolder.parentFolder; + } + + return "/" + currentFolder.name + fullName; + }, + findMailboxByName: function(name) { + var mailbox = null; + + var i = 0; + while (!mailbox && i < this.children.length) + if (this.children[i].name == name) + mailbox = this.children[i]; + else + i++; + + return mailbox; + }, + addMailbox: function(mailbox) { + mailbox.parentFolder = this; + this.children.push(mailbox); } - }, - fullName: function() { - var fullName = ""; - - var currentFolder = this; - while (currentFolder.parentFolder) { - fullName = "/folder" + currentFolder.name + fullName; - currentFolder = currentFolder.parentFolder; - } - - return "/" + currentFolder.name + fullName; - }, - findMailboxByName: function(name) { - var mailbox = null; - - var i = 0; - while (!mailbox && i < this.children.length) - if (this.children[i].name == name) - mailbox = this.children[i]; - else - i++; - - return mailbox; - }, - addMailbox: function(mailbox) { - mailbox.parentFolder = this; - this.children.push(mailbox); - } }; +function configureDraggables () { + var mainElement = $("dragDropVisual"); + Draggables.empty (); + + if (mainElement == null) { + mainElement = new Element ("div", {id: "dragDropVisual"}); + document.body.appendChild(mainElement); + mainElement.absolutize (); + } + mainElement.hide(); + + new Draggable ("dragDropVisual", + { handle: "messageList", + onStart: startDragging, + onEnd: stopDragging, + onDrag: whileDragging, + scroll: "folderTreeContent" }); +} - -function configureDragAndDrop () { - Droppables.empty (); - Draggables.empty (); - - var mainElement = new Element ("div", {id: "dragDropVisual"}); - document.body.appendChild(mainElement); - mainElement.absolutize (); - mainElement.style.display = "none"; - - new Draggable ("dragDropVisual", - { - handle: "messageList", - onStart: startDragging, - onEnd: stopDragging, - onDrag: whileDragging, - scroll: "folderTreeContent" - }); - - var drops = $$("div#dmailboxTree1 div.dTreeNode a.node span.nodeName"); - drops.each (function (drop) { - drop.identify () - Droppables.add (drop.id, - { - hoverclass: "genericHoverClass", - onDrop: dropAction - }); - }); - +function configureDroppables () { + var drops = $$("div#dmailboxTree1 div.dTreeNode a.node span.nodeName"); + + Droppables.empty (); + drops.each (function (drop) { + drop.identify () + Droppables.add (drop.id, + { hoverclass: "genericHoverClass", + onDrop: dropAction }); + }); } function startDragging (itm, e) { - var target = Event.element(e); - if (target.up().up().tagName != "TBODY") - return false; - - var handle = $("dragDropVisual"); - var count = $('messageList').getSelectedRowsId().length; - - handle.style.display = "block"; - handle.update (count); - if (e.shiftKey) - handle.addClassName ("copy"); + var target = Event.element(e); + if (target.up().up().tagName != "TBODY") + return false; + + var handle = $("dragDropVisual"); + var count = $('messageList').getSelectedRowsId().length; + + handle.update (count); + if (e.shiftKey) + handle.addClassName ("copy"); + handle.show(); } function whileDragging (itm, e) { - var handle = $("dragDropVisual"); - if (e.shiftKey) - handle.addClassName ("copy"); - else if (handle.hasClassName ("copy")) - handle.removeClassName ("copy"); + if (e) { + var handle = $("dragDropVisual"); + if (e.shiftKey) + handle.addClassName ("copy"); + else if (handle.hasClassName ("copy")) + handle.removeClassName ("copy"); + } } function stopDragging () { - var handle = $("dragDropVisual"); - handle.style.display = "none"; - if (handle.hasClassName ("copy")) - handle.removeClassName ("copy"); + var handle = $("dragDropVisual"); + handle.hide(); + if (handle.hasClassName ("copy")) + handle.removeClassName ("copy"); } function dropAction (dropped, zone, e) { - var destination = zone.up("div.dTreeNode"); - var f; - - if ($("dragDropVisual").hasClassName("copy")) - f = onMailboxMenuCopy.bind(destination); - else - var f = onMailboxMenuMove.bind(destination); - - f(); + var destination = zone.up("div.dTreeNode"); + var f; + + if ($("dragDropVisual").hasClassName("copy")) { + // Message(s) copied + f = onMailboxMenuCopy.bind(destination); + } + else { + // Message(s) moved + f = onMailboxMenuMove.bind(destination); + } + + f(); }