diff --git a/UI/WebServerResources/ContactsUI.css b/UI/WebServerResources/ContactsUI.css new file mode 100644 index 000000000..43aa6059e --- /dev/null +++ b/UI/WebServerResources/ContactsUI.css @@ -0,0 +1,368 @@ +/* + Copyright (C) 2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + OGo is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +/* TODO: is the section below used in the mailer? */ + +BODY +{ overflow: hidden; } + +DIV#contactsListContent +{ + position: absolute; + left: 15em; + top: 5.5em; + right: 0px; + bottom: 0px; + border: 0px dashed #f00; + margin: 0px; + padding: 0px; + overflow: hidden; +} + +DIV#mailboxContent +{ + position: absolute; + width: 100%; + height: 50%; + left: 0px; + top: 0px; + right: 0px; +} + +DIV#messageContent +{ + position: absolute; + overflow: auto; + font-size: small; + bottom: 0px; + width: 100%; + border-top: 1px solid #aaa; + border-left: 1px solid #aaa; + background: #fff; +} + +DIV.mailerPageContent DIV#messageContent +{ + top: 51%; +} + +DIV#messageContent P +{ + line-height: 3em; +} + +DIV#messageContent P IMG +{ + border: 0px; + vertical-align: middle; + margin-right: 1em; +} + +.aptview_title +{ + color: #000000; + font-weight: bold; +} + +.aptview_text +{ + color: #000000; +} + +.apt_other +{ + color: #000000; +} + +.apt_other_print +{ + font-style: italic; +} + +.anais_me +{ + color: #0000FF; +} + +.anais_uids +{ +} + + +/* new stuff for Thunderbird like mailer */ + +.vertframerow +{ + border-top-color: white; + border-top-width: 1; + border-top-style: solid; + border-bottom-color: #808080; + border-bottom-width: 1; + border-bottom-style: solid; + + background-color: #DCDAD5; + +} +.foldercell +{ + width: 25%; +} +.contentcell +{ +} +.embedwhite_out +{ + border-width: 1; + border-style: solid; + border-top-color: #808080; + border-left-color: #808080; + border-bottom-color: white; + border-right-color: white; +} +.embedwhite_in +{ + border-width: 1; + border-style: solid; + border-top-color: #808080; /* TODO */ + border-left-color: #808080; /* TODO */ + border-bottom-color: #808080; + border-right-color: #808080; + + background-color: white; + /* height: 300px; */ + /* height: 100%; */ +} +.titlediv +{ + height: 24px; + vertical-align: middle; + padding-top: 6px; + padding-left: 6px; +} + +table.titletable +{ + height: 24px; + vertical-align: middle; + padding-top: 6px; + padding-left: 6px; +} + +td.titlecell +{ + height: 22px; + vertical-align: middle; + padding-bottom: 2px; + white-space: nowrap; +} + +table.titletable td.titlecell SELECT +{ + display: -moz-popup; + border-top: 1px solid #fff; + border-left: 1px solid #fff; + border-right: 2px solid #222; + border-bottom: 2px solid #222; + -moz-border-bottom-colors: ThreeDDarkShadow ThreeDShadow transparent; + -moz-border-right-colors: ThreeDDarkShadow ThreeDShadow transparent; + background: #DCDAD5; + -moz-appearance: toolbarbutton !important; +} + +.whitesec_title +{ + background-color: #DCDAD5; + padding: 4px; +} + +DIV.contactFoldersList +{ + position: absolute; + top: 5.5em; + left: 0px; + width: 14.7em; + bottom: 0px; + margin: 0px; + padding: 0px; + overflow: hidden; +} + +dsDIV +{ + position: absolute; + color: #000; + background: #fff; + width: 100%; + top: 2em; + bottom: 0px; + overflow: auto; + border: 1px solid #fff; +} + +.treecell +{ + color: black; + vertical-align: bottom; + padding-left: 4px; /* move away from the icon */ + padding-right: 2px; /* move away from the right border */ + white-space: nowrap; +} + +DIV#folderTreeContent TABLE TD +{ height: 18px; + border-top: 1px solid #fff; + margin: 0px; + padding: 0px; } + +/* message list */ +DIV#filterPanel +{ + height: 2em; + vertical-align: middle; + width: 100%; +} + +TABLE#compose_table, TABLE#compose_table DIV +{ + width: 100%; +} + +TABLE#compose_label +{ + text-align: right; +} + +TABLE#addr_table +{ + margin-left: 30%; + width: 100%; +} + +TABLE#contactsList +{ + display: block; + position: relative; + color: #000; + background: #fff; + width: 100%; + height: 100%; + overflow: auto; +} + +TABLE#contactsList TH +{ + width: 100%; + background-color: #DCDAD5; + padding-left: .3em; + padding-right: .3em; + border-top: 1px solid #fff; + border-left: 1px solid #fff; + border-right: 2px solid #222; + border-bottom: 2px solid #222; + -moz-border-bottom-colors: ThreeDDarkShadow ThreeDShadow transparent; + -moz-border-right-colors: ThreeDDarkShadow ThreeDShadow transparent; +} + +TABLE#contactsList TBODY +{ + right: 0px; + left: 0px; + bottom: 3em; + width: 100%; + background: #fff; + color: #000; +} + +TABLE#contactsList TD +{ + height: 1.2em; + white-space: nowrap; +} + +TABLE#contactsList TR._selected TD +{ + background: #4b6983; + color: #fff; +} + +TABLE#contactsList TR._deleted TD +{ + text-decoration: line-through; +} + +INPUT#searchValue +{ + height: 22px; + margin-right: 1em; + width: 20em; + border-bottom: 1px solid #fff; + border-right: 1px solid #fff; + border-top: 2px solid #222; + border-left: 2px solid #222; + padding-left: 24px; + -moz-border-top-colors: ThreeDShadow ThreeDDarkShadow transparent; + -moz-border-left-colors: ThreeDShadow ThreeDDarkShadow transparent; + background-image: url('/SOGo.woa/WebServerResources/Search-bar.png'); + background-repeat: no-repeat; + background-position: 2px 2px; + color: #aaa; +} + +INPUT#searchValue:focus +{ color: #000; } + +/* drag handles */ +DIV#dragHandle +{ + cursor: e-resize; + position: absolute; + z-index: 1; + top: 7.5em; + left: 14.6em; + width: .4em; + bottom: 0px; + background: #dbdad5; +} + +DIV#dragHandle:active +{ + -moz-opacity: 0.5; +} + +DIV#mailboxDragHandle +{ + cursor: n-resize; + position: absolute; + background: #dbdad5; + z-index: 1; + top: 50%; + left: 0px; + right: 0px; + height: .4em; +} + +DIV#mailboxDragHandle:active +{ + -moz-opacity: 0.5; +} + +PRE.textMessageViewer +{ +} diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js new file mode 100644 index 000000000..e34876369 --- /dev/null +++ b/UI/WebServerResources/ContactsUI.js @@ -0,0 +1,836 @@ +/* + Copyright (C) 2005 SKYRIX Software AG + + This file is part of OpenGroupware.org. + + OGo is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation; either version 2, or (at your option) any + later version. + + OGo is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with OGo; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. +*/ +/* JavaScript for SOGo Mailer */ + +/* + DOM ids available in mail list view: + row_$msgid + div_$msgid + readdiv_$msgid + unreaddiv_$msgid + + Window Properties: + width, height + bool: resizable, scrollbars, toolbar, location, directories, status, + menubar, copyhistory +*/ + +var currentMessages = new Array(); +var maxCachedMessages = 20; +var cachedContacts = new Array(); +var currentContactsFolder = ''; +/* mail list */ + +function openContactWindow(sender, contactuid, url) { + log ("message window at url: " + url); + var msgWin = window.open(url, "SOGo_msg_" + contactuid, + "width=640,height=480,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0,copyhistory=0"); + + msgWin.focus(); +} + +function clickedUid(sender, contactuid) { + resetSelection(window); + openContactWindow(sender, contactuid, + ApplicationBaseURL + currentContactsFolder + "/" + contactuid + "/view"); + return true; +} + +function doubleClickedUid(sender, contactuid) { + alert("DOUBLE Clicked " + contactuid); + + return false; +} + +function toggleMailSelect(sender) { + var row; + row = document.getElementById(sender.name); + row.className = sender.checked ? "tableview_selected" : "tableview"; +} + +function collectSelectedRows() { + var rows = new Array(); + var contactsList = document.getElementById('contactsList'); + var tbody = (contactsList.getElementsByTagName('tbody'))[0]; + var selectedRows = getSelectedNodes(tbody); + + for (var i = 0; i < selectedRows.length; i++) { + var row = selectedRows[i]; + var rowId = row.getAttribute('id'); + rows[rows.length] = rowId; + } + + return rows; +} + +function clearSearch(sender) { + var searchField = window.document.getElementById("search"); + if (searchField) searchField.value=""; + return true; +} + +/* compose support */ + +function clickedCompose(sender) { + var urlstr; + + urlstr = "compose"; + window.open(urlstr, "SOGo_compose", + "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0,copyhistory=0"); + return false; /* stop following the link */ +} + +/* mail editor */ + +function validateEditorInput(sender) { + var errortext = ""; + var field; + + field = document.pageform.subject; + if (field.value == "") + errortext = errortext + labels.error_missingsubject + "\n"; + + if (!UIxRecipientSelectorHasRecipients()) + errortext = errortext + labels.error_missingrecipients + "\n"; + + if (errortext.length > 0) { + alert(labels.error_validationfailed + ":\n" + errortext); + return false; + } + return true; +} + +function clickedEditorSend(sender) { + if (!validateEditorInput(sender)) + return false; + + document.pageform.action="send"; + document.pageform.submit(); + // if everything is ok, close the window + return true; +} + +function clickedEditorAttach(sender) { + var urlstr; + + urlstr = "viewAttachments"; + window.open(urlstr, "SOGo_attach", + "width=320,height=320,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0,copyhistory=0"); + return false; /* stop following the link */ +} + +function clickedEditorSave(sender) { + document.pageform.action="save"; + document.pageform.submit(); + refreshOpener(); + return true; +} + +function clickedEditorDelete(sender) { + document.pageform.action="delete"; + document.pageform.submit(); + refreshOpener(); + window.close(); + return true; +} + +function showInlineAttachmentList(sender) { + var r, l; + + r = document.getElementById('compose_rightside'); + r.style.display = 'block'; + l = document.getElementById('compose_leftside'); + l.style.width = "67%"; + this.adjustInlineAttachmentListHeight(sender); +} + +function updateInlineAttachmentList(sender, attachments) { + if (!attachments || (attachments.length == 0)) { + this.hideInlineAttachmentList(sender); + return; + } + var e, i, count, text; + + count = attachments.length; + text = ""; + for (i = 0; i < count; i++) { + text = text + attachments[i]; + text = text + '
'; + } + + e = document.getElementById('compose_attachments_list'); + e.innerHTML = text; + this.showInlineAttachmentList(sender); +} + +function adjustInlineAttachmentListHeight(sender) { + var e; + + e = document.getElementById('compose_rightside'); + if (e.style.display == 'none') return; + + /* need to lower left size first, because left auto-adjusts to right! */ + xHeight('compose_attachments_list', 10); + + var leftHeight, rightHeaderHeight; + leftHeight = xHeight('compose_leftside'); + rightHeaderHeight = xHeight('compose_attachments_header'); + xHeight('compose_attachments_list', (leftHeight - rightHeaderHeight) - 16); +} + +function hideInlineAttachmentList(sender) { + var e; + +// xVisibility('compose_rightside', false); + e = document.getElementById('compose_rightside'); + e.style.display = 'none'; + e = document.getElementById('compose_leftside'); + e.style.width = "100%"; +} + +/* ajax contactsFolder handling */ + +var activeAjaxRequests = 0; + +function triggerAjaxRequest(url, callback, userdata) { + var http = createHTTPClient(); + + activeAjaxRequests += 1; + document.animTimer = setTimeout("checkAjaxRequestsState();", 200); + + if (http) { + http.onreadystatechange + = function() { + try { + if (http.readyState == 4 + && activeAjaxRequests > 0) { + if (!http.aborted) { + http.callbackData = userdata; + callback(http); + } + activeAjaxRequests -= 1; + checkAjaxRequestsState(); + } + } + catch( e ) { + activeAjaxRequests -= 1; + checkAjaxRequestsState(); + alert('AJAX Request, Caught Exception: ' + e.description); + } + }; + http.url = url; + http.open("GET", url, true); + http.send(""); + } + + return http; +} + +function checkAjaxRequestsState() +{ + if (activeAjaxRequests > 0 + && !document.busyAnim) { + var anim = document.createElement("img"); + document.busyAnim = anim; + anim.setAttribute("src", ResourcesURL + '/busy.gif'); + anim.style.position = "absolute;"; + anim.style.top = "2.5em;"; + anim.style.right = "1em;"; + anim.style.visibility = "hidden;"; + anim.style.zindex = "1;"; + var folderTree = document.getElementById("toolbar"); + folderTree.appendChild(anim); + anim.style.visibility = "visible;"; + } else if (activeAjaxRequests == 0 + && document.busyAnim) { + document.busyAnim.parentNode.removeChild(document.busyAnim); + document.busyAnim = null; + } +} + +function onContactsFolderTreeItemClick(element) +{ + var topNode = document.getElementById('d'); + var contactsFolder = element.parentNode.getAttribute("dataname"); + + if (topNode.selectedEntry) + deselectNode(topNode.selectedEntry); + selectNode(element); + topNode.selectedEntry = element; + + openContactsFolder(contactsFolder); +} + +function openContactsFolder(contactsFolder) +{ + if (contactsFolder != currentContactsFolder) { + currentContactsFolder = contactsFolder; + var url = ApplicationBaseURL + contactsFolder + "/view?noframe=1&desc=1"; + var contactsFolderContent = document.getElementById("contactsFolderContent"); + var contactsFolderDragHandle = document.getElementById("contactsFolderDragHandle"); + var messageContent = document.getElementById("messageContent"); + messageContent.innerHTML = ''; + if (contactsFolder.lastIndexOf("/") == 0) { + var url = (ApplicationBaseURL + currentContactsFolder + "/" + + "/view?noframe=1"); + if (document.messageAjaxRequest) { + document.messageAjaxRequest.aborted = true; + document.messageAjaxRequest.abort(); + } + document.messageAjaxRequest + = triggerAjaxRequest(url, messageCallback); + contactsFolderContent.innerHTML = ''; + contactsFolderContent.style.visibility = "hidden;"; + contactsFolderDragHandle.style.visibility = "hidden;"; + messageContent.style.top = "0px;"; + } else { + if (document.contactsListAjaxRequest) { + document.contactsListAjaxRequest.aborted = true; + document.contactsListAjaxRequest.abort(); + } + if (currentMessages[contactsFolder]) { + loadMessage(currentMessages[contactsFolder]); + url += '&pageforuid=' + currentMessages[contactsFolder]; + } + document.contactsListAjaxRequest + = triggerAjaxRequest(url, contactsListCallback, + currentMessages[contactsFolder]); + if (contactsFolderContent.style.visibility == "hidden") { + contactsFolderContent.style.visibility = "visible;"; + contactsFolderDragHandle.style.visibility = "visible;"; + messageContent.style.top = (contactsFolderDragHandle.offsetTop + + contactsFolderDragHandle.offsetHeight + + 'px;'); + } + } + } +// triggerAjaxRequest(contactsFolder, 'toolbar', toolbarCallback); +} + +function openContactsFolderAtIndex(element) { + var idx = element.getAttribute("idx"); + var url = ApplicationBaseURL + currentContactsFolder + "/view?noframe=1&idx=" + idx; + + if (document.contactsListAjaxRequest) { + document.contactsListAjaxRequest.aborted = true; + document.contactsListAjaxRequest.abort(); + } + document.contactsListAjaxRequest + = triggerAjaxRequest(url, contactsListCallback); +} + +function contactsListCallback(http) +{ + var div = document.getElementById('contactsFolderContent'); + + if (http.readyState == 4 + && http.status == 200) { + document.contactsListAjaxRequest = null; + div.innerHTML = http.responseText; + var selected = http.callbackData; + if (selected) { + var row = document.getElementById('row_' + selected); + selectNode(row); + } + } + else + log ("ajax fuckage"); +} + +function onContactContextMenu(event, element) +{ + var menu = document.getElementById('contactMenu'); + menu.addEventListener("hideMenu", onContactContextMenuHide, false); + onMenuClick(event, 'contactMenu'); + + var topNode = document.getElementById('contactsList'); + var selectedNodeIds = collectSelectedRows(); + topNode.menuSelectedRows = selectedNodeIds; + for (var i = 0; i < selectedNodeIds.length; i++) { + var selectedNode = document.getElementById(selectedNodeIds[i]); + deselectNode (selectedNode); + } + topNode.menuSelectedEntry = element; + selectNode(element); +} + +function onContactContextMenuHide(event) +{ + var topNode = document.getElementById('contactsList'); + + if (topNode.menuSelectedEntry) { + deselectNode(topNode.menuSelectedEntry); + topNode.menuSelectedEntry = null; + } + if (topNode.menuSelectedRows) { + var nodeIds = topNode.menuSelectedRows; + for (var i = 0; i < nodeIds.length; i++) { + var node = document.getElementById(nodeIds[i]); + selectNode (node); + } + topNode.menuSelectedRows = null; + } +} + +function onFolderMenuHide(event) +{ + var topNode = document.getElementById('d'); + + if (topNode.menuSelectedEntry) { + deselectNode(topNode.menuSelectedEntry); + topNode.menuSelectedEntry = null; + } + if (topNode.selectedEntry) + selectNode(topNode.selectedEntry); +} + +function getCachedMessage(idx) +{ + var message = null; + var counter = 0; + + while (counter < cachedContacts.length + && message == null) + if (cachedContacts[counter] + && cachedContacts[counter]['idx'] == currentContactsFolder + '/' + idx) + message = cachedContacts[counter]; + else + counter++; + + return message; +} + +function storeCachedMessage(cachedContact) +{ + var oldest = -1; + var timeOldest = -1; + var counter = 0; + + if (cachedContacts.length < maxCachedMessages) + oldest = cachedContacts.length; + else { + while (cachedContacts[counter]) { + if (oldest == -1 + || cachedContacts[counter]['time'] < timeOldest) { + oldest = counter; + timeOldest = cachedContacts[counter]['time']; + } + counter++; + } + + if (oldest == -1) + oldest = 0; + } + + cachedContacts[oldest] = cachedContact; +} + +function onMessageSelectionChange() +{ + var selection = collectSelectedRows(); + if (selection.length == 1) + { + var idx = selection[0]; + + if (currentMessages[currentContactsFolder] != idx) { + currentMessages[currentContactsFolder] = idx; + loadMessage(idx); + } + } +} + +function loadMessage(idx) +{ + var cachedContact = getCachedMessage(idx); + + if (document.messageAjaxRequest) { + document.messageAjaxRequest.aborted = true; + document.messageAjaxRequest.abort(); + } + + if (cachedContact == null) { + var url = (ApplicationBaseURL + currentContactsFolder + "/" + + idx + "/view?noframe=1"); + document.messageAjaxRequest + = triggerAjaxRequest(url, messageCallback, idx); + markMailInWindow(window, idx, true); + } else { + var div = document.getElementById('messageContent'); + div.innerHTML = cachedContact['text']; + cachedContact['time'] = (new Date()).getTime(); + document.messageAjaxRequest = null; + } +} + +function messageCallback(http) +{ + var div = document.getElementById('messageContent'); + + if (http.readyState == 4 + && http.status == 200) { + document.messageAjaxRequest = null; + div.innerHTML = http.responseText; + + if (http.callbackData) { + var cachedContact = new Array(); + cachedContact['idx'] = currentContactsFolder + '/' + http.callbackData; + cachedContact['time'] = (new Date()).getTime(); + cachedContact['text'] = http.responseText; + if (cachedContact['text'].length < 30000) + storeCachedMessage(cachedContact); + } + } + else + log ("ajax fuckage"); +} + +var rowSelectionCount = 0; + +validateControls(); + +function showElement(e, shouldShow) { + 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"); + } +} + +function validateControls() { + var e = document.getElementById("moveto"); + this.enableElement(e, rowSelectionCount > 0); +} + +function moveTo(uri) { + alert("MoveTo: " + uri); +} + +function popupSearchMenu(event, menuId) +{ + var node = event.target; + + superNode = node.parentNode.parentNode.parentNode; + relX = (event.pageX - superNode.offsetLeft - node.offsetLeft); + relY = (event.pageY - superNode.offsetTop - node.offsetTop); + + if (event.button == 0 + && relX < 24) { + event.cancelBubble = true; + event.returnValue = false; + + var popup = document.getElementById(menuId); + hideMenu(event, popup); + + var menuTop = superNode.offsetTop + node.offsetTop + node.offsetHeight; + var menuLeft = superNode.offsetLeft + node.offsetLeft; + var heightDiff = (window.innerHeight + - (menuTop + popup.offsetHeight)); + if (heightDiff < 0) + menuTop += heightDiff; + + var leftDiff = (window.innerWidth + - (menuLeft + popup.offsetWidth)); + if (leftDiff < 0) + menuLeft -= popup.offsetWidth; + + popup.style.top = menuTop + "px"; + popup.style.left = menuLeft + "px"; + popup.style.visibility = "visible"; + + bodyOnClick = "" + document.body.getAttribute("onclick"); + document.body.setAttribute("onclick", "onBodyClick('" + menuId + "');"); + document.currentPopupMenu = popup; + } +} + +function setSearchCriteria(event) +{ + searchField = document.getElementById('searchValue'); + searchCriteria = document.getElementById('searchCriteria'); + + var node = event.target; + searchField.setAttribute("ghost-phrase", node.innerHTML); + searchCriteria = node.getAttribute('id'); +} + +function checkSearchValue(event) +{ + var form = event.target; + var searchField = document.getElementById('searchValue'); + var ghostPhrase = searchField.getAttribute('ghost-phrase'); + + if (searchField.value == ghostPhrase) + searchField.value = ""; +} + +function onSearchChange() +{ +} + +function onSearchMouseDown(event) +{ + searchField = document.getElementById('searchValue'); + superNode = searchField.parentNode.parentNode.parentNode; + relX = (event.pageX - superNode.offsetLeft - searchField.offsetLeft); + relY = (event.pageY - superNode.offsetTop - searchField.offsetTop); + + if (relY < 24) { + event.cancelBubble = true; + event.returnValue = false; + } +} + +function onSearchFocus(event) +{ + searchField = document.getElementById('searchValue'); + ghostPhrase = searchField.getAttribute("ghost-phrase"); + if (searchField.value == ghostPhrase) { + searchField.value = ""; + searchField.setAttribute("modified", ""); + } else { + searchField.select(); + } + + searchField.style.color = "#000"; +} + +function onSearchBlur() +{ + var searchField = document.getElementById('searchValue'); + var ghostPhrase = searchField.getAttribute("ghost-phrase"); + + if (searchField.value == "") { + searchField.setAttribute("modified", ""); + searchField.style.color = "#aaa"; + searchField.value = ghostPhrase; + } else if (searchField.value == ghostPhrase) { + searchField.setAttribute("modified", ""); + searchField.style.color = "#aaa"; + } else { + searchField.setAttribute("modified", "yes"); + searchField.style.color = "#000"; + } +} + +function initCriteria() +{ + var searchCriteria = document.getElementById('searchCriteria'); + var searchField = document.getElementById('searchValue'); + var firstOption; + + if (searchCriteria.value == '' + || searchField.value == '') { + firstOption = document.getElementById('searchOptions').childNodes[1]; + searchCriteria.value = firstOption.getAttribute('id'); + searchField.value = firstOption.innerHTML; + searchField.setAttribute('ghost-phrase', firstOption.innerHTML); + searchField.setAttribute("modified", ""); + searchField.style.color = "#aaa"; + } +} + +/* contact menu entries */ +function onContactRowDblClick(event, node) +{ + var contactId = node.getAttribute('id'); + + openContactWindow(null, contactId, + ApplicationBaseURL + currentContactsFolder + + "/" + contactId + "/edit"); + + return false; +} + +function onMenuEditContact(event, node) +{ + var node = getParentMenu(node).menuTarget.parentNode; + var contactId = node.getAttribute('id'); + + openContactWindow(null, contactId, + ApplicationBaseURL + currentContactsFolder + + "/" + contactId + "/edit"); + + return false; +} + +function onMenuWriteToContact(event, node) +{ + var node = getParentMenu(node).menuTarget.parentNode; + var contactId = node.getAttribute('id'); + + openContactWindow(null, contactId, + ApplicationBaseURL + currentContactsFolder + + "/" + contactId + "/write"); + + return false; +} + +function onMenuDeleteContact(event, node) +{ + uixDeleteSelectedContacts(node); + + return false; +} + +function onToolbarEditSelectedContacts(event) +{ + var rows; + + rows = collectSelectedRows(); + for (var i = 0; i < rows.length; i++) { + openContactWindow(null, 'edit_' + rows[i], + ApplicationBaseURL + currentContactsFolder + + "/" + rows[i] + "/edit"); + } + + return false; +} + +function onToolbarWriteToSelectedContacts(event) +{ + var rows; + + rows = collectSelectedRows(); + for (var i = 0; i < rows.length; i++) { + openContactWindow(null, 'writeto_' + rows[i], + ApplicationBaseURL + currentContactsFolder + + "/" + rows[i] + "/write"); + } + + return false; +} + +function uixDeleteSelectedContacts(sender) +{ + var rows; + var failCount = 0; + + rows = collectSelectedRows(); + for (var i = 0; i < rows.length; i++) { + var url, http, rowElem; + + /* send AJAX request (synchronously) */ + + url = (ApplicationBaseURL + currentContactsFolder + "/" + + rows[i] + "/delete"); + http = createHTTPClient(); + http.open("POST", url, false /* not async */); + http.send(""); + if (http.status != 200) { /* request failed */ + failCount++; + http = null; + continue; + } + http = null; + + /* remove from page */ + + /* line-through would be nicer, but hiding is OK too */ + rowElem = document.getElementById(rows[i]); + rowElem.parentNode.removeChild(rowElem); + } + + if (failCount > 0) + alert("Could not delete " + failCount + " messages!"); + + return false; +} + +function newEmailTo(sender) { + var mailto = sanitizeMailTo(sender.parentNode.parentNode.menuTarget.innerHTML); + + if (mailto.length > 0) + { + w = window.open("compose?mailto=" + mailto, + "SOGo_compose", + "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0,copyhistory=0"); + w.focus(); + } + + return false; /* stop following the link */ +} + +function initContactsFolderSelection(contactsFolderName) +{ + currentContactsFolder = contactsFolderName; + + var tree = document.getElementById("d"); + var treeNodes = getElementsByClassName('DIV', 'dTreeNode', tree); + var i = 0; + while (i < treeNodes.length + && treeNodes[i].getAttribute("dataname") != currentContactsFolder) + i++; + if (i < treeNodes.length) { + var links = getElementsByClassName('A', 'node', treeNodes[i]); + if (tree.selectedEntry) + deselectNode(tree.selectedEntry); + selectNode(links[0]); + tree.selectedEntry = links[0]; + expandUpperTree(links[0]); + } +} + +function onHeaderClick(node) +{ + var href = node.getAttribute("href"); + + if (document.contactsListAjaxRequest) { + document.contactsListAjaxRequest.aborted = true; + document.contactsListAjaxRequest.abort(); + } + url = ApplicationBaseURL + currentContactsFolder + "/" + href; + if (!href.match(/noframe=/)) + url += "&noframe=1"; + log ("url: " + url); + document.contactsListAjaxRequest + = triggerAjaxRequest(url, contactsListCallback); + + return false; +} + +function registerDraggableMessageNodes() +{ + log ("can we drag..."); +} + +function newContact(sender) { + var urlstr; + + urlstr = "new"; + newcwin = window.open(urlstr, "SOGo_new_contact", + "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0,copyhistory=0"); + newcwin.focus(); + + return false; /* stop following the link */ +}