/* JavaScript for SOGoContacts */
var cachedContacts = new Array();
-var currentContactFolder = '/personal';
+var currentContactFolder = null;
+
+var usersRightsWindowHeight = 200;
+var usersRightsWindowWidth = 450;
function openContactWindow(sender, url) {
var msgWin = window.open(url, null, "width=450,height=600,resizable=0");
return true;
}
-function openContactsFolder(contactsFolder, params) {
- if (contactsFolder != currentContactFolder || params) {
+function openContactsFolder(contactsFolder, reload, idx) {
+ if ((currentContactFolder && contactsFolder != currentContactFolder)
+ || reload) {
+ currentContactFolder = contactsFolder; log("openContactsFolder " + contactsFolder);
+ var url = URLForFolderID(currentContactFolder) +
+ "/view?noframe=1";
+
+ var searchValue = search["value"];
+ if (searchValue && searchValue.length > 0)
+ url += ("&search=" + search["criteria"]
+ + "&value=" + searchValue);
+ var sortAttribute = sorting["attribute"];
+ if (sortAttribute && sortAttribute.length > 0)
+ url += ("&sort=" + sorting["attribute"]
+ + "&asc=" + sorting["ascending"]);
+
+ var selection;
if (contactsFolder == currentContactFolder) {
var contactsList = $("contactsList");
if (contactsList)
window.alert("no contactsList");
}
else
- selection = null;
-
- currentContactFolder = contactsFolder;
- var url = URLForFolderID(currentContactFolder) +
- "/view?noframe=1&sort=cn&desc=0";
- if (params)
- url += '&' + params;
-
- var selection;
- if (document.contactsListAjaxRequest) {
- document.contactsListAjaxRequest.aborted = true;
- document.contactsListAjaxRequest.abort();
- }
- document.contactsListAjaxRequest
- = triggerAjaxRequest(url, contactsListCallback, selection);
+ selection = null;
+
+ if (document.contactsListAjaxRequest) {
+ document.contactsListAjaxRequest.aborted = true;
+ document.contactsListAjaxRequest.abort();
+ }
+ document.contactsListAjaxRequest
+ = triggerAjaxRequest(url, contactsListCallback, selection);
}
}
= triggerAjaxRequest(url, contactsListCallback);
}
+function configureContactsListHeaders(cells) {
+ for (var i = 0; i < cells.length; i++) {
+ var currentCell = $(cells[i]);
+ Event.observe(currentCell, "click",
+ onHeaderClick.bindAsEventListener(currentCell));
+ Event.observe(currentCell, "mousedown", listRowMouseDownHandler);
+ }
+}
+
function contactsListCallback(http) {
var div = $("contactsListContent");
&& http.status == 200) {
document.contactsListAjaxRequest = null;
div.innerHTML = http.responseText;
+
+ var table = $("contactsList");
+ if (table)
+ configureContactsListHeaders(table.tBodies[0].rows[0].cells);
+
+ if (sorting["attribute"] && sorting["attribute"].length > 0) {
+ var sortHeader;
+ if (sorting["attribute"] == "cn")
+ sortHeader = $("nameHeader");
+ else if (sorting["attribute"] == "mail")
+ sortHeader = $("mailHeader");
+ else if (sorting["attribute"] == "screenname")
+ sortHeader = $("screenNameHeader");
+ else if (sorting["attribute"] == "o")
+ sortHeader = $("orgHeader");
+ else if (sorting["attribute"] == "telephonenumber")
+ sortHeader = $("phoneHeader");
+ else
+ sortHeader = null;
+
+ if (sortHeader) {
+ 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++)
- $(selected[i]).select();
+ for (var i = 0; i < selected.length; i++) {
+ var row = $(selected[i]);
+ if (row)
+ row.select();
+ }
}
- configureSortableTableHeaders();
}
else
- log ("ajax fuckage 1");
+ log ("ajax problem 1: status = " + http.status);
}
function onContactFoldersContextMenu(event) {
var menu = $("contactFoldersMenu");
- menu.addEventListener("hideMenu", onContactFoldersContextMenuHide, false);
- onMenuClick(event, "contactFoldersMenu");
+ Event.observe(menu, "hideMenu", onContactFoldersContextMenuHide, false);
+ popupMenu(event, "contactFoldersMenu", this);
var topNode = $("contactFolders");
var selectedNodes = topNode.getSelectedRows();
function onContactContextMenu(event, element) {
var menu = $("contactMenu");
- menu.addEventListener("hideMenu", onContactContextMenuHide, false);
- onMenuClick(event, "contactMenu");
+ Event.observe(menu, "hideMenu", onContactContextMenuHide, false);
+ popupMenu(event, "contactMenu", element);
var topNode = $("contactsList");
var selectedNodes = topNode.getSelectedRows();
div.innerHTML = content;
}
else
- log ("ajax fuckage 2");
+ log ("ajax problem 2: " + http.status);
}
var rowSelectionCount = 0;
return false;
}
-function onMenuEditContact(event, node) {
- var node = getParentMenu(node).menuTarget.parentNode;
- var contactId = node.getAttribute('id');
+function onMenuEditContact(event) {
+ var contactId = document.menuTarget.getAttribute('id');
openContactWindow(null,
URLForFolderID(currentContactFolder)
+ "/" + contactId + "/edit");
-
- return false;
}
-function onMenuWriteToContact(event, node) {
- var node = getParentMenu(node).menuTarget.parentNode;
- var contactId = node.getAttribute('id');
-
- openMailComposeWindow(ApplicationBaseURL + currentContactFolder
- + "/" + contactId + "/write");
+function onMenuWriteToContact(event) {
+ var contactId = document.menuTarget.getAttribute('id');
- return false;
+ openMailComposeWindow(ApplicationBaseURL + currentContactFolder
+ + "/" + contactId + "/write");
}
-function onMenuDeleteContact(event, node) {
- uixDeleteSelectedContacts(node);
-
- return false;
+function onMenuDeleteContact(event) {
+ uixDeleteSelectedContacts(this);
}
function onToolbarEditSelectedContacts(event) {
}
function onHeaderClick(event) {
- if (document.contactsListAjaxRequest) {
- document.contactsListAjaxRequest.aborted = true;
- document.contactsListAjaxRequest.abort();
- }
- url = URLForFolderID(currentContactFolder) + "/" + this.link;
- if (!this.link.match(/noframe=/))
- url += "&noframe=1";
- document.contactsListAjaxRequest
- = triggerAjaxRequest(url, contactsListCallback);
+ var headerId = this.getAttribute("id");
+ var newSortAttribute;
+ if (headerId == "nameHeader")
+ newSortAttribute = "cn";
+ else if (headerId == "mailHeader")
+ newSortAttribute = "mail";
+ else if (headerId == "screenNameHeader")
+ newSortAttribute = "screenname";
+ else if (headerId == "orgHeader")
+ newSortAttribute = "o";
+ else if (headerId == "phoneHeader")
+ newSortAttribute = "telephonenumber";
+
+ log("header: " + headerId);
+
+ if (sorting["attribute"] == newSortAttribute)
+ sorting["ascending"] = !sorting["ascending"];
+ else {
+ sorting["attribute"] = newSortAttribute;
+ sorting["ascending"] = true;
+ }
+
+ refreshCurrentFolder();
- event.preventDefault();
+ preventDefault(event);
}
function registerDraggableMessageNodes() {
var div = $("contactsListContent");
div.innerHTML = "";
}
- else
- openContactsFolder(nodes[0].getAttribute("id"), null);
+ else {
+ search = {};
+ sorting = {};
+ $("searchValue").value = "";
+ initCriteria();
+ openContactsFolder(nodes[0].getAttribute("id"));
+ }
}
-function onSearchFormSubmit() {
- var searchValue = $("searchValue");
-
- openContactsFolder(URLForFolderID(currentContactFolder),
- "search=" + searchValue.value);
-
- return false;
+function refreshCurrentFolder() { log("refreshCurrentFolder");
+ openContactsFolder(currentContactFolder, true);
}
function onConfirmContactSelection(event) {
&& selectorList.value != initialValues)
selector.changeNotification("addition");
- event.preventDefault();
+ preventDefault(event);
}
function onContactMailTo(node) {
}
function refreshContacts(contactId) {
- openContactsFolder(currentContactFolder, "reload=true");
- cachedContacts[currentContactFolder + "/" + contactId] = null;
- loadContact(contactId);
+ refreshCurrentFolder();
+ cachedContacts[currentContactFolder + "/" + contactId] = null;
+ loadContact(contactId);
- return false;
+ return false;
}
function onAddressBookNew(event) {
document.newAbAjaxRequest
= triggerAjaxRequest(url, newAbCallback, name);
}
- event.preventDefault();
+ preventDefault(event);
}
function appendAddressBook(name, folder) {
var li = document.createElement("li");
+ $("contactFolders").appendChild(li);
li.setAttribute("id", folder);
li.appendChild(document.createTextNode(name));
- li.addEventListener("mousedown", listRowMouseDownHandler, false);
- li.addEventListener("click", onRowClick, false);
- li.addEventListener("contextmenu", onContactFoldersContextMenu, false);
- $("contactFolders").appendChild(li);
+ setEventsOnContactFolder(li);
}
function newAbCallback(http) {
appendAddressBook(name, "/" + name);
}
else
- log ("ajax fuckage 4:" + http.status);
+ log ("ajax problem 4:" + http.status);
}
function newUserFolderCallback(folderData) {
function onAddressBookAdd(event) {
openUserFolderSelector(newUserFolderCallback, "contact");
- event.preventDefault();
+ preventDefault(event);
}
function onFolderUnsubscribeCB(folderId) {
}
}
- event.preventDefault();
+ preventDefault(event);
}
function deletePersonalAddressBook(folderId) {
document.deletePersonalABAjaxRequest = null;
}
else
- log ("ajax fuckage");
+ log ("ajax problem 5: " + http.status);
}
function configureDragHandles() {
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 = true;
-
- if (http.status == 200)
- denied = (http.responseText == "0");
+ if (http.readyState == 4) {
+ var denied = ! isHttpStatus204(http.status);
var entry = $(http.callbackData);
if (denied)
entry.addClassName("denied");
function configureAbToolbar() {
var toolbar = $("abToolbar");
var links = toolbar.childNodesWithTag("a");
- links[0].addEventListener("click", onAddressBookNew, false);
- links[1].addEventListener("click", onAddressBookAdd, false);
- links[2].addEventListener("click", onAddressBookRemove, false);
+ Event.observe(links[0], "click", onAddressBookNew, false);
+ Event.observe(links[1], "click", onAddressBookAdd, false);
+ Event.observe(links[2], "click", onAddressBookRemove, false);
}
function configureContactFolders() {
var contactFolders = $("contactFolders");
if (contactFolders) {
- contactFolders.addEventListener("selectionchange",
- onFolderSelectionChange, false);
+ Event.observe(contactFolders, "mousedown", listRowMouseDownHandler);
+ Event.observe(contactFolders, "click", onFolderSelectionChange);
var lis = contactFolders.childNodesWithTag("li");
- for (var i = 0; i < lis.length; i++) {
- lis[i].addEventListener("mousedown", listRowMouseDownHandler, false);
- lis[i].addEventListener("click", onRowClick, false);
- lis[i].addEventListener("contextmenu", onContactFoldersContextMenu, false);
- }
+ for (var i = 0; i < lis.length; i++)
+ setEventsOnContactFolder(lis[i]);
lookupDeniedFolders();
- contactFolders.style.visibility = "visible;";
var personalFolder = $("/personal");
personalFolder.select();
+ openContactsFolder("/personal");
}
}
-function onAccessRightsMenuEntryMouseUp(event) {
- var folders = $("contactFolders");
- var selected = folders.getSelectedNodes()[0];
- var title = this.innerHTML;
- var url = URLForFolderID(selected.getAttribute("id"))
-
- openAclWindow(url + "/acls", title);
+function setEventsOnContactFolder(node) {
+ Event.observe(node, "mousedown", listRowMouseDownHandler, false);
+ Event.observe(node, "click", onRowClick, false);
+ Event.observe(node, "contextmenu",
+ onContactFoldersContextMenu.bindAsEventListener(node), false);
}
-function initializeMenus() {
- var menus = new Array("contactFoldersMenu", "contactMenu", "searchMenu");
- initMenusNamed(menus);
+function onMenuSharing(event) {
+ var folders = $("contactFolders");
+ var selected = folders.getSelectedNodes()[0];
+ var title = this.innerHTML;
+ var url = URLForFolderID(selected.getAttribute("id"));
- var menuEntry = $("accessRightsMenuEntry");
- menuEntry.addEventListener("mouseup", onAccessRightsMenuEntryMouseUp, false);
+ openAclWindow(url + "/acls", title);
}
-function configureSearchField() {
- var searchValue = $("searchValue");
+function getMenus() {
+ var menus = {};
+ menus["contactFoldersMenu"] = new Array(null, "-", null,
+ null, "-", null, "-",
+ onMenuSharing);
+ menus["contactMenu"] = new Array(onMenuEditContact, "-",
+ onMenuWriteToContact, null, "-",
+ onMenuDeleteContact);
+ menus["searchMenu"] = new Array(setSearchCriteria);
- searchValue.addEventListener("mousedown", onSearchMouseDown, false);
- searchValue.addEventListener("click", popupSearchMenu, false);
- searchValue.addEventListener("blur", onSearchBlur, false);
- searchValue.addEventListener("focus", onSearchFocus, false);
- searchValue.addEventListener("keydown", onSearchKeyDown, false);
+ return menus;
}
function configureSelectionButtons() {
if (container) {
var buttons = container.childNodesWithTag("input");
for (var i = 0; i < buttons.length; i++)
- buttons[i].addEventListener("click", onConfirmContactSelection,
- false);
+ Event.observe(buttons[i], "click",
+ onConfirmContactSelection.bindAsEventListener(buttons[i]));
}
}
-var initContacts = {
- handleEvent: function (event) {
- if (!document.body.hasClassName("popup")) {
- configureAbToolbar();
- configureSearchField();
- }
- else
- configureSelectionButtons();
- configureContactFolders();
+function initContacts(event) {
+ if (!document.body.hasClassName("popup")) {
+ configureAbToolbar();
+ }
+ else
+ configureSelectionButtons();
+ configureContactFolders();
// initDnd();
- }
}
-window.addEventListener("load", initContacts, false);
+addEvent(window, 'load', initContacts);