diff --git a/UI/Templates/SchedulerUI/UIxCalDateSelector.wox b/UI/Templates/SchedulerUI/UIxCalDateSelector.wox index f266e920f..f5650f7b9 100644 --- a/UI/Templates/SchedulerUI/UIxCalDateSelector.wox +++ b/UI/Templates/SchedulerUI/UIxCalDateSelector.wox @@ -36,11 +36,10 @@ > + diff --git a/UI/WebServerResources/HTMLElement.js b/UI/WebServerResources/HTMLElement.js index b4616bde6..13ac40c55 100644 --- a/UI/WebServerResources/HTMLElement.js +++ b/UI/WebServerResources/HTMLElement.js @@ -1,297 +1,296 @@ /* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* custom extensions to the DOM api */ -Element.addMethods( -{ - addInterface: function(element, objectInterface) { - element = $(element); - Object.extend(element, objectInterface); - if (element.bind) - element.bind(); - }, +Element.addMethods({ + addInterface: function(element, objectInterface) { + element = $(element); + Object.extend(element, objectInterface); + if (element.bind) + element.bind(); + }, - childNodesWithTag: function(element, tagName) { - element = $(element); + childNodesWithTag: function(element, tagName) { + element = $(element); - var matchingNodes = new Array(); - var tagName = tagName.toUpperCase(); + var matchingNodes = new Array(); + var tagName = tagName.toUpperCase(); - for (var i = 0; i < element.childNodes.length; i++) { - var childNode = $(element.childNodes[i]); - if (Object.isElement(childNode) - && childNode.tagName - && childNode.tagName.toUpperCase() == tagName) - matchingNodes.push(childNode); - } + for (var i = 0; i < element.childNodes.length; i++) { + var childNode = $(element.childNodes[i]); + if (Object.isElement(childNode) + && childNode.tagName + && childNode.tagName.toUpperCase() == tagName) + matchingNodes.push(childNode); + } - return matchingNodes; - }, + return matchingNodes; + }, - getParentWithTagName: function(element, tagName) { - element = $(element); - var currentElement = element; - tagName = tagName.toUpperCase(); + getParentWithTagName: function(element, tagName) { + element = $(element); + var currentElement = element; + tagName = tagName.toUpperCase(); - currentElement = currentElement.parentNode; - while (currentElement - && currentElement.tagName != tagName) { - currentElement = currentElement.parentNode; - } + currentElement = currentElement.parentNode; + while (currentElement + && currentElement.tagName != tagName) { + currentElement = currentElement.parentNode; + } - return currentElement; - }, + return currentElement; + }, - cascadeLeftOffset: function(element) { - element = $(element); - var currentElement = element; + cascadeLeftOffset: function(element) { + element = $(element); + var currentElement = element; - var offset = 0; - while (currentElement) { - offset += currentElement.offsetLeft; - currentElement = $(currentElement).getParentWithTagName("div"); - } + var offset = 0; + while (currentElement) { + offset += currentElement.offsetLeft; + currentElement = $(currentElement).getParentWithTagName("div"); + } - return offset; - }, + return offset; + }, - cascadeTopOffset: function(element) { - element = $(element); - var currentElement = element; - var offset = 0; + cascadeTopOffset: function(element) { + element = $(element); + var currentElement = element; + var offset = 0; - var i = 0; + var i = 0; - while (currentElement && currentElement.tagName) { - offset += currentElement.offsetTop; - currentElement = currentElement.parentNode; - i++; - } + while (currentElement && currentElement.tagName) { + offset += currentElement.offsetTop; + currentElement = currentElement.parentNode; + i++; + } - return offset; - }, + return offset; + }, - dump: function(element, additionalInfo, additionalKeys) { - element = $(element); - var id = element.getAttribute("id"); - var nclass = element.getAttribute("class"); + dump: function(element, additionalInfo, additionalKeys) { + element = $(element); + var id = element.getAttribute("id"); + var nclass = element.getAttribute("class"); - var str = element.tagName; - if (id) - str += "; id = " + id; - if (nclass) - str += "; class = " + nclass; + var str = element.tagName; + if (id) + str += "; id = " + id; + if (nclass) + str += "; class = " + nclass; - if (additionalInfo) - str += "; " + additionalInfo; + if (additionalInfo) + str += "; " + additionalInfo; - if (additionalKeys) - for (var i = 0; i < additionalKeys.length; i++) { - var value = element.getAttribute(additionalKeys[i]); - if (value) - str += "; " + additionalKeys[i] + " = " + value; - } + if (additionalKeys) + for (var i = 0; i < additionalKeys.length; i++) { + var value = element.getAttribute(additionalKeys[i]); + if (value) + str += "; " + additionalKeys[i] + " = " + value; + } - log (str); - }, + log (str); + }, - getSelectedNodes: function(element) { - element = $(element); + getSelectedNodes: function(element) { + element = $(element); - if (!element.selectedElements) - element.selectedElements = new Array(); + if (!element.selectedElements) + element.selectedElements = new Array(); - return element.selectedElements; - }, + return element.selectedElements; + }, - getSelectedNodesId: function(element) { - element = $(element); + getSelectedNodesId: function(element) { + element = $(element); - var selArray = new Array(); - if (element.selectedElements) { - for (var i = 0; i < element.selectedElements.length; i++) { - var node = element.selectedElements[i]; - selArray.push(node.getAttribute("id")); - } - } - else - element.selectedElements = new Array(); + var selArray = new Array(); + if (element.selectedElements) { + for (var i = 0; i < element.selectedElements.length; i++) { + var node = element.selectedElements[i]; + selArray.push(node.getAttribute("id")); + } + } + else + element.selectedElements = new Array(); - return selArray; - }, + return selArray; + }, - onContextMenu: function(element, event) { - element = $(element); - - if (document.currentPopupMenu) - hideMenu(document.currentPopupMenu); + onContextMenu: function(element, event) { + element = $(element); + Event.stop(event); + if (document.currentPopupMenu) + hideMenu(document.currentPopupMenu); - var popup = element.sogoContextMenu; - var menuTop = Event.pointerY(event); - var menuLeft = Event.pointerX(event); - var heightDiff = (window.height() - - (menuTop + popup.offsetHeight)); - if (heightDiff < 0) - menuTop += heightDiff; + var popup = element.sogoContextMenu; + var menuTop = Event.pointerY(event); + var menuLeft = Event.pointerX(event); + var heightDiff = (window.height() + - (menuTop + popup.offsetHeight)); + if (heightDiff < 0) + menuTop += heightDiff; - var leftDiff = (window.width() - - (menuLeft + popup.offsetWidth)); - if (leftDiff < 0) - menuLeft -= popup.offsetWidth; + var leftDiff = (window.width() + - (menuLeft + popup.offsetWidth)); + if (leftDiff < 0) + menuLeft -= popup.offsetWidth; - var isVisible = true; - if (popup.prepareVisibility) - isVisible = popup.prepareVisibility(); + var isVisible = true; + if (popup.prepareVisibility) + isVisible = popup.prepareVisibility(); - if (isVisible) { - popup.setStyle( { top: menuTop + "px", - left: menuLeft + "px", - visibility: "visible" } ); + if (isVisible) { + popup.setStyle( { top: menuTop + "px", + left: menuLeft + "px", + visibility: "visible" } ); - document.currentPopupMenu = popup; - document.body.observe("click", onBodyClickMenuHandler); - } - else - log ("Warning: not showing the contextual menu " + element.id); - }, + document.currentPopupMenu = popup; + document.body.observe("click", onBodyClickMenuHandler); + } + else + log ("Warning: not showing the contextual menu " + element.id); + }, - attachMenu: function(element, menuName) { - element = $(element); - element.sogoContextMenu = $(menuName); - element.observe("contextmenu", - element.onContextMenu.bindAsEventListener(element)); - }, + attachMenu: function(element, menuName) { + element = $(element); + element.sogoContextMenu = $(menuName); + element.observe("contextmenu", + element.onContextMenu.bindAsEventListener(element)); + }, - selectElement: function(element) { - element = $(element); - element.addClassName('_selected'); + selectElement: function(element) { + element = $(element); + element.addClassName('_selected'); - var parent = element.up(); - if (!parent.selectedElements) - // Selected nodes are kept in a array at the - // container level. - parent.selectedElements = new Array(); - for (var i = 0; i < parent.selectedElements.length; i++) - if (parent.selectedElements[i] == element) return; - parent.selectedElements.push(element); // use index instead ? - }, + var parent = element.up(); + if (!parent.selectedElements) + // Selected nodes are kept in a array at the + // container level. + parent.selectedElements = new Array(); + for (var i = 0; i < parent.selectedElements.length; i++) + if (parent.selectedElements[i] == element) return; + parent.selectedElements.push(element); // use index instead ? + }, - selectRange: function(element, startIndex, endIndex) { - element = $(element); - var s; - var e; - var rows; + selectRange: function(element, startIndex, endIndex) { + element = $(element); + var s; + var e; + var rows; - if (startIndex > endIndex) { - s = endIndex; - e = startIndex; - } - else { - s = startIndex; - e = endIndex; - } - if (element.tagName == 'UL') - rows = element.getElementsByTagName('LI'); - else - rows = element.getElementsByTagName('TR'); - while (s <= e) { - if (rows[s].nodeType == 1) - $(rows[s]).selectElement(); - s++; - } - }, + if (startIndex > endIndex) { + s = endIndex; + e = startIndex; + } + else { + s = startIndex; + e = endIndex; + } + if (element.tagName == 'UL') + rows = element.getElementsByTagName('LI'); + else + rows = element.getElementsByTagName('TR'); + while (s <= e) { + if (rows[s].nodeType == 1) + $(rows[s]).selectElement(); + s++; + } + }, - deselect: function(element) { - element = $(element); - element.removeClassName('_selected'); + deselect: function(element) { + element = $(element); + element.removeClassName('_selected'); - var parent = element.up(); - if (parent && parent.selectedElements) - parent.selectedElements = parent.selectedElements.without(element); - }, + var parent = element.up(); + if (parent && parent.selectedElements) + parent.selectedElements = parent.selectedElements.without(element); + }, - deselectAll: function(element) { - element = $(element); - if (element.selectedElements) { - for (var i = 0; i < element.selectedElements.length; i++) - element.selectedElements[i].removeClassName('_selected'); - element.selectedElements = null; - } - }, + deselectAll: function(element) { + element = $(element); + if (element.selectedElements) { + for (var i = 0; i < element.selectedElements.length; i++) + element.selectedElements[i].removeClassName('_selected'); + element.selectedElements = null; + } + }, - setCaretTo: function(element, pos) { - element = $(element); - if (element.setSelectionRange) { // For Mozilla and Safari - element.focus(); - element.setSelectionRange(pos, pos); - } - else if (element.createTextRange) { // For IE - var range = element.createTextRange(); - range.move("character", pos); - range.select(); - } - }, + setCaretTo: function(element, pos) { + element = $(element); + if (element.setSelectionRange) { // For Mozilla and Safari + element.focus(); + element.setSelectionRange(pos, pos); + } + else if (element.createTextRange) { // For IE + var range = element.createTextRange(); + range.move("character", pos); + range.select(); + } + }, - selectText: function(element, start, end) { - element = $(element); - if (element.setSelectionRange) { // For Mozilla and Safari - element.setSelectionRange(start, end); - } - else if (element.createTextRange) { // For IE - var textRange = element.createTextRange(); - textRange.moveStart("character", start); - textRange.moveEnd("character", end-element.value.length); - textRange.select(); - } - else { - element.select(); - } - }, + selectText: function(element, start, end) { + element = $(element); + if (element.setSelectionRange) { // For Mozilla and Safari + element.setSelectionRange(start, end); + } + else if (element.createTextRange) { // For IE + var textRange = element.createTextRange(); + textRange.moveStart("character", start); + textRange.moveEnd("character", end-element.value.length); + textRange.select(); + } + else { + element.select(); + } + }, - getRadioValue: function(element, radioName) { - element = $(element); - var radioValue; - Form.getInputs(element, 'radio', radioName).each(function(input) { - if (input.checked) - radioValue = input.value; - }); - return radioValue; - }, + getRadioValue: function(element, radioName) { + element = $(element); + var radioValue; + Form.getInputs(element, 'radio', radioName).each(function(input) { + if (input.checked) + radioValue = input.value; + }); + return radioValue; + }, - setRadioValue: function(element, radioName, value) { - element = $(element); - var i = 0; + setRadioValue: function(element, radioName, value) { + element = $(element); + var i = 0; - Form.getInputs(element, 'radio', radioName).each(function(input) { - if (i == value) - input.checked = 1; - i++; - }); - }, + Form.getInputs(element, 'radio', radioName).each(function(input) { + if (i == value) + input.checked = 1; + i++; + }); + }, - getCheckBoxListValues: function(element, checkboxName) { - element = $(element); - var values = new Array(); - var i = 0; + getCheckBoxListValues: function(element, checkboxName) { + element = $(element); + var values = new Array(); + var i = 0; - Form.getInputs(element, 'checkbox', checkboxName).each(function(input) { - if (input.checked) - values.push(i+1); + Form.getInputs(element, 'checkbox', checkboxName).each(function(input) { + if (input.checked) + values.push(i+1); - i++; - }); - return values.join(","); - }, + i++; + }); + return values.join(","); + }, - setCheckBoxListValues: function(element, checkboxName, values) { - element = $(element); - var v = values.split(','); - var i = 1; + setCheckBoxListValues: function(element, checkboxName, values) { + element = $(element); + var v = values.split(','); + var i = 1; - Form.getInputs(element, 'checkbox', checkboxName).each(function(input) { + Form.getInputs(element, 'checkbox', checkboxName).each(function(input) { - if ($(v).indexOf(i+"") != -1) - input.checked = 1; - i++; - }); - } - }); + if ($(v).indexOf(i+"") != -1) + input.checked = 1; + i++; + }); + } + }); diff --git a/UI/WebServerResources/SchedulerUI.css b/UI/WebServerResources/SchedulerUI.css index 7ea3c9b41..1d993668d 100644 --- a/UI/WebServerResources/SchedulerUI.css +++ b/UI/WebServerResources/SchedulerUI.css @@ -220,41 +220,40 @@ TABLE#dateSelectorTable #dateSelector TABLE, #dateSelector TABLE TABLE { border-collapse: collapse; + text-align: center; margin: 0px auto; width: 100%; } -#dateSelector TABLE#dateSelectorTable TD TABLE TD -{ width: 0px; /* temp hack */ } +TABLE#dateSelectorTable TD TABLE TD +{ width: 5px; /* temp hack */ } -#dateSelector TABLE#dateSelectorTable TD TABLE TD.activeDay, -#dateSelector TABLE#dateSelectorTable TD TABLE TD.inactiveDay, -#dateSelector TABLE#dateSelectorTable TD TABLE TD.dayOfToday -{ width: 1em; } +TABLE#dateSelectorTable TD TABLE TD.activeDay, +TABLE#dateSelectorTable TD TABLE TD.inactiveDay, +TABLE#dateSelectorTable TD TABLE TD.dayOfToday +{ width: 100%; } -#dateSelector TABLE TABLE TD +#dateSelector TABLE TABLE TD.activeDay, +#dateSelector TABLE TABLE TD.inactiveDay, +#dateSelector TABLE TABLE TD.dayOfToday { cursor: pointer; margin: 0px; padding: 0px; - border: 1px solid #fff; - text-align: center; } + border: 1px solid #fff; } -#dateSelector TABLE TABLE TD:hover +#dateSelectorTable TABLE TD.activeDay:hover, +#dateSelectorTable TABLE TD.inactiveDay:hover { border: 1px solid #deebf7; } -#dateSelector TD SPAN -{ text-align: center; - display: block; } +#dateSelectorTable TABLE TD.activeDay:active, +#dateSelectorTable TABLE TD.inactiveDay:active +{ background-color: #ddd; } -#dateSelector TD SPAN A -{ color: #000; - background: inherit; - text-decoration: none; } +#dateSelectorTable TD SPAN +{ display: block; + color: #000; + background: inherit; } -#dateSelector TD:active -{ background-color: #ddd; - border: 1px solid #deebf7; } - -#dateSelector TD.inactiveDay A +#dateSelector TD.inactiveDay SPAN { color: #dedfde; } #dateSelector TD.dayOfToday @@ -264,7 +263,7 @@ TABLE#dateSelectorTable #dateSelector TD.dayOfToday._selected { background-color: #4b6983; } -#dateSelector TD._selected A +#dateSelectorTable TABLE TD._selected SPAN { color: #fff; } TABLE#eventsList diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index 8ffd87ce9..550344dc5 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -804,9 +804,9 @@ function changeCalendarDisplay(data, newView) { document.selectedDate.deselect(); // Select day in date selector - var selectedLink = $$('table#dateSelectorTable a[day='+day+']'); + var selectedLink = $$('table#dateSelectorTable span[day='+day+']'); if (selectedLink.length > 0) { - selectedCell = selectedLink[0].up(1); + selectedCell = selectedLink[0].getParentWithTagName("td"); selectedCell.selectElement(); document.selectedDate = selectedCell; } @@ -1178,8 +1178,7 @@ function calendarDisplayCallback(http) { observer = $("monthDaysView"); } initMenu($("currentViewMenu"), menu); - observer.observe("contextmenu", function(event) { - popupMenu(event, 'currentViewMenu', this); }); + observer.observe("contextmenu", onMenuCurrentView); var contentView; if (currentView == "monthview") @@ -1766,6 +1765,10 @@ function onMenuSharing(event) { } } +function onMenuCurrentView(event) { + popupMenu(event, 'currentViewMenu', this); +} + function configureDragHandles() { var handle = $("verticalDragHandle"); if (handle) { @@ -1784,7 +1787,7 @@ function configureDragHandles() { function initCalendarSelector() { var selector = $("calendarSelector"); - updateCalendarStatus(); + updateCalendarStatus(); // triggers the initial events refresh selector.changeNotification = updateCalendarsList; var list = $("calendarList"); diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index 47356ba2f..a938130c9 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -2,24 +2,24 @@ /* - Copyright (C) 2005 SKYRIX Software AG + Copyright (C) 2005 SKYRIX Software AG - This file is part of OpenGroupware.org. + 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 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. + 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. + 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. */ /* some generic JavaScript code for SOGo */ @@ -49,1633 +49,1633 @@ var removeFolderRequestCount = 0; /* a W3C compliant document.all */ function getAllScopeElements(scope) { - var elements = new Array(); + var elements = new Array(); - for (var i = 0; i < scope.childNodes.length; i++) - if (typeof(scope.childNodes[i]) == "object" - && scope.childNodes[i].tagName - && scope.childNodes[i].tagName != '') - { - elements.push(scope.childNodes[i]); - var childElements = getAllElements(scope.childNodes[i]); - if (childElements.length > 0) - elements.push(childElements); - } + for (var i = 0; i < scope.childNodes.length; i++) + if (typeof(scope.childNodes[i]) == "object" + && scope.childNodes[i].tagName + && scope.childNodes[i].tagName != '') + { + elements.push(scope.childNodes[i]); + var childElements = getAllElements(scope.childNodes[i]); + if (childElements.length > 0) + elements.push(childElements); + } - return elements; + return elements; } function getAllElements(scope) { - var elements; + var elements; - if (scope == null) - scope = document; + if (scope == null) + scope = document; - if (scope == document - && allDocumentElements != null) - elements = allDocumentElements; - else - { - elements = getAllScopeElements(scope); - if (scope == document) - allDocumentElements = elements; - } + if (scope == document + && allDocumentElements != null) + elements = allDocumentElements; + else + { + elements = getAllScopeElements(scope); + if (scope == document) + allDocumentElements = elements; + } - return elements; + return elements; } function createElement(tagName, id, classes, - attributes, htmlAttributes, - parentNode) { - var newElement = $(document.createElement(tagName)); - if (id) - newElement.setAttribute("id", id); - if (classes) { - if (typeof(classes) == "string") - newElement.addClassName(classes); - else - for (var i = 0; i < classes.length; i++) - newElement.addClassName(classes[i]); - } - if (attributes) - for (var i in attributes) - newElement[i] = attributes[i]; - if (htmlAttributes) - for (var i in htmlAttributes) - newElement.setAttribute(i, htmlAttributes[i]); - if (parentNode) - parentNode.appendChild(newElement); + attributes, htmlAttributes, + parentNode) { + var newElement = $(document.createElement(tagName)); + if (id) + newElement.setAttribute("id", id); + if (classes) { + if (typeof(classes) == "string") + newElement.addClassName(classes); + else + for (var i = 0; i < classes.length; i++) + newElement.addClassName(classes[i]); + } + if (attributes) + for (var i in attributes) + newElement[i] = attributes[i]; + if (htmlAttributes) + for (var i in htmlAttributes) + newElement.setAttribute(i, htmlAttributes[i]); + if (parentNode) + parentNode.appendChild(newElement); - return $(newElement); + return $(newElement); } function ml_stripActionInURL(url) { - if (url[url.length - 1] != '/') { - var i; + if (url[url.length - 1] != '/') { + var i; - i = url.lastIndexOf("/"); - if (i != -1) url = url.substring(0, i); - } - if (url[url.length - 1] != '/') // ensure trailing slash - url = url + "/"; - return url; + i = url.lastIndexOf("/"); + if (i != -1) url = url.substring(0, i); + } + if (url[url.length - 1] != '/') // ensure trailing slash + url = url + "/"; + return url; } function URLForFolderID(folderID) { - var folderInfos = folderID.split(":"); - var url; - if (folderInfos.length > 1) { - url = UserFolderURL + "../" + encodeURI(folderInfos[0]); - if (!(folderInfos[0].endsWith('/') - || folderInfos[1].startsWith('/'))) - url += '/'; - url += folderInfos[1]; - } - else - url = ApplicationBaseURL + encodeURI(folderInfos[0]); + var folderInfos = folderID.split(":"); + var url; + if (folderInfos.length > 1) { + url = UserFolderURL + "../" + encodeURI(folderInfos[0]); + if (!(folderInfos[0].endsWith('/') + || folderInfos[1].startsWith('/'))) + url += '/'; + url += folderInfos[1]; + } + else + url = ApplicationBaseURL + encodeURI(folderInfos[0]); - 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; } function extractEmailAddress(mailTo) { - var email = ""; + var email = ""; - var emailre - = /(([a-zA-Z0-9\._-]+)*[a-zA-Z0-9_-]+@([a-zA-Z0-9\._-]+)*[a-zA-Z0-9_-]+)/; - if (emailre.test(mailTo)) { - emailre.exec(mailTo); - email = RegExp.$1; - } + var emailre + = /(([a-zA-Z0-9\._-]+)*[a-zA-Z0-9_-]+@([a-zA-Z0-9\._-]+)*[a-zA-Z0-9_-]+)/; + if (emailre.test(mailTo)) { + emailre.exec(mailTo); + email = RegExp.$1; + } - return email; + return email; } function extractEmailName(mailTo) { - var emailName = ""; + var emailName = ""; - var tmpMailTo = mailTo.replace("<", "<"); - tmpMailTo = tmpMailTo.replace(">", ">"); + var tmpMailTo = mailTo.replace("<", "<"); + tmpMailTo = tmpMailTo.replace(">", ">"); - var emailNamere = /([ ]+)?(.+)\ 0) - mailto = emailName + ' <' + email + '>'; - else - mailto = email; + var mailto = ""; + if (emailName && emailName.length > 0) + mailto = emailName + ' <' + email + '>'; + else + mailto = email; - return mailto; + return mailto; } function sanitizeWindowName(dirtyWindowName) { - // IE is picky about the characters used for the window name. - return dirtyWindowName.replace(/[\s\.\/\-\@]/g, "_"); + // IE is picky about the characters used for the window name. + return dirtyWindowName.replace(/[\s\.\/\-\@]/g, "_"); } function openUserFolderSelector(callback, type) { - var urlstr = ApplicationBaseURL; - if (! urlstr.endsWith('/')) - urlstr += '/'; - urlstr += ("../../" + UserLogin + "/Contacts/userFolders"); - var w = window.open(urlstr, "_blank", - "width=322,height=250,resizable=1,scrollbars=0,location=0"); - w.opener = window; - window.userFolderCallback = callback; - window.userFolderType = type; - w.focus(); + var urlstr = ApplicationBaseURL; + if (! urlstr.endsWith('/')) + urlstr += '/'; + urlstr += ("../../" + UserLogin + "/Contacts/userFolders"); + var w = window.open(urlstr, "_blank", + "width=322,height=250,resizable=1,scrollbars=0,location=0"); + w.opener = window; + window.userFolderCallback = callback; + window.userFolderType = type; + w.focus(); } function openContactWindow(url, wId) { - if (!wId) - wId = "_blank"; - else { - wId = sanitizeWindowName(wId); - } + if (!wId) + wId = "_blank"; + else { + wId = sanitizeWindowName(wId); + } - var w = window.open(url, wId, - "width=450,height=600,resizable=0,location=0"); - w.focus(); + var w = window.open(url, wId, + "width=450,height=600,resizable=0,location=0"); + w.focus(); - return w; + return w; } function openMailComposeWindow(url, wId) { - var parentWindow = this; + var parentWindow = this; - if (!wId) - wId = "_blank"; - else { - wId = sanitizeWindowName(wId); - } + if (!wId) + wId = "_blank"; + else { + wId = sanitizeWindowName(wId); + } - if (document.body.hasClassName("popup")) - parentWindow = window.opener; + if (document.body.hasClassName("popup")) + parentWindow = window.opener; - var w = parentWindow.open(url, wId, - "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," - + "location=0,directories=0,status=0,menubar=0" - + ",copyhistory=0"); + var w = parentWindow.open(url, wId, + "width=680,height=520,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0" + + ",copyhistory=0"); - w.focus(); + w.focus(); - return w; + return w; } function openMailTo(senderMailTo) { - var addresses = senderMailTo.split(","); - var sanitizedAddresses = new Array(); - var subject = extractSubject(senderMailTo); - for (var i = 0; i < addresses.length; i++) { - var sanitizedAddress = sanitizeMailTo(addresses[i]); - if (sanitizedAddress.length > 0) - sanitizedAddresses.push(sanitizedAddress); - } + var addresses = senderMailTo.split(","); + var sanitizedAddresses = new Array(); + var subject = extractSubject(senderMailTo); + for (var i = 0; i < addresses.length; i++) { + var sanitizedAddress = sanitizeMailTo(addresses[i]); + if (sanitizedAddress.length > 0) + sanitizedAddresses.push(sanitizedAddress); + } - var mailto = sanitizedAddresses.join(","); + var mailto = sanitizedAddresses.join(","); - if (mailto.length > 0) - openMailComposeWindow(ApplicationBaseURL - + "../Mail/compose?mailto=" + encodeURI(mailto) - + ((subject.length > 0)?"?subject=" + encodeURI(subject):"")); + if (mailto.length > 0) + openMailComposeWindow(ApplicationBaseURL + + "../Mail/compose?mailto=" + encodeURI(mailto) + + ((subject.length > 0)?"?subject=" + encodeURI(subject):"")); - return false; /* stop following the link */ + return false; /* stop following the link */ } function deleteDraft(url) { - /* this is called by UIxMailEditor with window.opener */ - new Ajax.Request(url, { - asynchronous: false, - method: 'post', - onFailure: function(transport) { - log("draftDeleteCallback: problem during ajax request: " + transport.status); - } - }); + /* this is called by UIxMailEditor with window.opener */ + new Ajax.Request(url, { + asynchronous: false, + method: 'post', + onFailure: function(transport) { + log("draftDeleteCallback: problem during ajax request: " + transport.status); + } + }); } function refreshFolderByType(type) { - /* this is called by UIxMailEditor with window.opener */ - if (Mailer && Mailer.currentMailboxType == type) - refreshCurrentFolder(); + /* this is called by UIxMailEditor with window.opener */ + if (Mailer && Mailer.currentMailboxType == type) + refreshCurrentFolder(); } function createHTTPClient() { - // http://developer.apple.com/internet/webcontent/xmlhttpreq.html - if (typeof XMLHttpRequest != "undefined") - return new XMLHttpRequest(); + // http://developer.apple.com/internet/webcontent/xmlhttpreq.html + if (typeof XMLHttpRequest != "undefined") + return new XMLHttpRequest(); - try { return new ActiveXObject("Msxml2.XMLHTTP"); } - catch (e) { } - try { return new ActiveXObject("Microsoft.XMLHTTP"); } - catch (e) { } + try { return new ActiveXObject("Msxml2.XMLHTTP"); } + catch (e) { } + try { return new ActiveXObject("Microsoft.XMLHTTP"); } + catch (e) { } - return null; + return null; } function appendDifferentiator(url) { - var url_nocache = url; - var position = url.indexOf('?', 0); - if (position < 0) - url_nocache += '?'; - else - url_nocache += '&'; - url_nocache += 'differentiator=' + Math.floor(Math.random()*50000); + var url_nocache = url; + var position = url.indexOf('?', 0); + if (position < 0) + url_nocache += '?'; + else + url_nocache += '&'; + url_nocache += 'differentiator=' + Math.floor(Math.random()*50000); - return url_nocache; + return url_nocache; } function onAjaxRequestStateChange(http) { - try { - if (http.readyState == 4 - && activeAjaxRequests > 0) { - if (!http.aborted) - http.callback(http); - activeAjaxRequests--; - checkAjaxRequestsState(); - http.onreadystatechange = Prototype.emptyFunction; - http.callback = Prototype.emptyFunction; - http.callbackData = null; - } - } - catch(e) { - activeAjaxRequests--; - checkAjaxRequestsState(); - http.onreadystatechange = Prototype.emptyFunction; - http.callback = Prototype.emptyFunction; - http.callbackData = null; - log("AJAX Request, Caught Exception: " + e.name); - log(e.message); - if (e.fileName) { - if (e.lineNumber) - log("at " + e.fileName + ": " + e.lineNumber); - else - log("in " + e.fileName); - } - log(backtrace()); - log("request url was '" + http.url + "'"); - } + try { + if (http.readyState == 4 + && activeAjaxRequests > 0) { + if (!http.aborted) + http.callback(http); + activeAjaxRequests--; + checkAjaxRequestsState(); + http.onreadystatechange = Prototype.emptyFunction; + http.callback = Prototype.emptyFunction; + http.callbackData = null; + } + } + catch(e) { + activeAjaxRequests--; + checkAjaxRequestsState(); + http.onreadystatechange = Prototype.emptyFunction; + http.callback = Prototype.emptyFunction; + http.callbackData = null; + log("AJAX Request, Caught Exception: " + e.name); + log(e.message); + if (e.fileName) { + if (e.lineNumber) + log("at " + e.fileName + ": " + e.lineNumber); + else + log("in " + e.fileName); + } + log(backtrace()); + log("request url was '" + http.url + "'"); + } } /* taken from Lightning */ function getContrastingTextColor(bgColor) { - var calcColor = bgColor.substring(1); - var red = parseInt(calcColor.substring(0, 2), 16); - var green = parseInt(calcColor.substring(2, 4), 16); - var blue = parseInt(calcColor.substring(4, 6), 16); + var calcColor = bgColor.substring(1); + var red = parseInt(calcColor.substring(0, 2), 16); + var green = parseInt(calcColor.substring(2, 4), 16); + var blue = parseInt(calcColor.substring(4, 6), 16); - // Calculate the brightness (Y) value using the YUV color system. - var brightness = (0.299 * red) + (0.587 * green) + (0.114 * blue); + // Calculate the brightness (Y) value using the YUV color system. + var brightness = (0.299 * red) + (0.587 * green) + (0.114 * blue); - // Consider all colors with less than 56% brightness as dark colors and - // use white as the foreground color, otherwise use black. - return ((brightness < 144) ? "white" : "black"); + // Consider all colors with less than 56% brightness as dark colors and + // use white as the foreground color, otherwise use black. + return ((brightness < 144) ? "white" : "black"); } function triggerAjaxRequest(url, callback, userdata, content, headers) { - //url = appendDifferentiator(url); + //url = appendDifferentiator(url); - var http = createHTTPClient(); - if (http) { - activeAjaxRequests++; - document.animTimer = setTimeout("checkAjaxRequestsState();", 250); + var http = createHTTPClient(); + if (http) { + activeAjaxRequests++; + document.animTimer = setTimeout("checkAjaxRequestsState();", 250); - http.open("POST", url, true); - http.url = url; - http.callback = callback; - http.callbackData = userdata; - http.onreadystatechange = function() { onAjaxRequestStateChange(http) }; - // = function() { - // // log ("state changed (" + http.readyState + "): " + url); - // }; - var hasContentLength = false; - if (headers) { - for (var i in headers) { - if (i.toLowerCase() == "content-length") - hasContentLength = true; - http.setRequestHeader(i, headers[i]); - } - } /* - if (!hasContentLength) { - var cLength = "0"; - if (content) - cLength = "" + content.length; - http.setRequestHeader("Content-Length", "" + cLength); - } */ - http.send(content ? content : ""); - } - else { - log("triggerAjaxRequest: error creating HTTP Client!"); - } + http.open("POST", url, true); + http.url = url; + http.callback = callback; + http.callbackData = userdata; + http.onreadystatechange = function() { onAjaxRequestStateChange(http) }; + // = function() { + // // log ("state changed (" + http.readyState + "): " + url); + // }; + var hasContentLength = false; + if (headers) { + for (var i in headers) { + if (i.toLowerCase() == "content-length") + hasContentLength = true; + http.setRequestHeader(i, headers[i]); + } + } /* + if (!hasContentLength) { + var cLength = "0"; + if (content) + cLength = "" + content.length; + http.setRequestHeader("Content-Length", "" + cLength); + } */ + http.send(content ? content : ""); + } + else { + log("triggerAjaxRequest: error creating HTTP Client!"); + } - return http; + return http; } function startAnimation(parent, nextNode) { - var anim = $("progressIndicator"); - if (!anim) { - anim = createElement("img", "progressIndicator", null, - {src: ResourcesURL + "/busy.gif"}); - anim.setStyle({ visibility: "hidden" }); - if (nextNode) - parent.insertBefore(anim, nextNode); - else - parent.appendChild(anim); - anim.setStyle({ visibility: "visible" }); - } + var anim = $("progressIndicator"); + if (!anim) { + anim = createElement("img", "progressIndicator", null, + {src: ResourcesURL + "/busy.gif"}); + anim.setStyle({ visibility: "hidden" }); + if (nextNode) + parent.insertBefore(anim, nextNode); + else + parent.appendChild(anim); + anim.setStyle({ visibility: "visible" }); + } - return anim; + return anim; } function checkAjaxRequestsState() { - var progressImage = $("progressIndicator"); - if (activeAjaxRequests > 0 - && !progressImage) { - var toolbar = $("toolbar"); - if (toolbar) - startAnimation(toolbar); - } - else if (!activeAjaxRequests - && progressImage) - progressImage.parentNode.removeChild(progressImage); + var progressImage = $("progressIndicator"); + if (activeAjaxRequests > 0 + && !progressImage) { + var toolbar = $("toolbar"); + if (toolbar) + startAnimation(toolbar); + } + else if (!activeAjaxRequests + && progressImage) + progressImage.parentNode.removeChild(progressImage); } function isMac() { - return (navigator.platform.indexOf('Mac') > -1); + return (navigator.platform.indexOf('Mac') > -1); } function isWindows() { - return (navigator.platform.indexOf('Win') > -1); + return (navigator.platform.indexOf('Win') > -1); } function isSafari3() { - return (navigator.appVersion.indexOf("Version") > -1); + return (navigator.appVersion.indexOf("Version") > -1); } function isSafari() { - //var agt = navigator.userAgent.toLowerCase(); - //var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false; + //var agt = navigator.userAgent.toLowerCase(); + //var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false; - return (navigator.vendor == "Apple Computer, Inc.") || (navigator.userAgent.toLowerCase().indexOf('konqueror') != -1); + return (navigator.vendor == "Apple Computer, Inc.") || (navigator.userAgent.toLowerCase().indexOf('konqueror') != -1); } function isHttpStatus204(status) { - return (status == 204 || // Firefox - (isSafari() && typeof(status) == 'undefined') || // Safari - status == 1223); // IE + return (status == 204 || // Firefox + (isSafari() && typeof(status) == 'undefined') || // Safari + status == 1223); // IE } function getTarget(event) { - event = event || window.event; - if (event.target) - return event.target; // W3C DOM - else - return event.srcElement; // IE + event = event || window.event; + if (event.target) + return event.target; // W3C DOM + else + return event.srcElement; // IE } function preventDefault(event) { - if (event) - if (event.preventDefault) - event.preventDefault(); // W3C DOM - else - event.returnValue = false; // IE + if (event) + if (event.preventDefault) + event.preventDefault(); // W3C DOM + else + event.returnValue = false; // IE } function resetSelection(win) { - var t = ""; - if (win && win.getSelection) { - t = win.getSelection().toString(); - win.getSelection().removeAllRanges(); - } - return t; + var t = ""; + if (win && win.getSelection) { + t = win.getSelection().toString(); + win.getSelection().removeAllRanges(); + } + return t; } function refreshOpener() { - if (window.opener && !window.opener.closed) { - window.opener.location.reload(); - } + if (window.opener && !window.opener.closed) { + window.opener.location.reload(); + } } /* query string */ function parseQueryString() { - var queryArray, queryDict - var key, value, s, idx; - queryDict.length = 0; + var queryArray, queryDict + var key, value, s, idx; + queryDict.length = 0; - queryDict = new Array(); - queryArray = location.search.substr(1).split('&'); - for (var i in queryArray) { - if (!queryArray[i]) continue ; - s = queryArray[i]; - idx = s.indexOf("="); - if (idx == -1) { - key = s; - value = ""; - } - else { - key = s.substr(0, idx); - value = unescape(s.substr(idx + 1)); - } + queryDict = new Array(); + queryArray = location.search.substr(1).split('&'); + for (var i in queryArray) { + if (!queryArray[i]) continue ; + s = queryArray[i]; + idx = s.indexOf("="); + if (idx == -1) { + key = s; + value = ""; + } + else { + key = s.substr(0, idx); + value = unescape(s.substr(idx + 1)); + } - if (typeof queryDict[key] == 'undefined') - queryDict.length++; + if (typeof queryDict[key] == 'undefined') + queryDict.length++; - queryDict[key] = value; - } - return queryDict; + queryDict[key] = value; + } + return queryDict; } function generateQueryString(queryDict) { - var s = ""; - for (var key in queryDict) { - if (s.length == 0) - s = "?"; - else - s = s + "&"; - s = s + key + "=" + escape(queryDict[key]); - } - return s; + var s = ""; + for (var key in queryDict) { + if (s.length == 0) + s = "?"; + else + s = s + "&"; + s = s + key + "=" + escape(queryDict[key]); + } + return s; } /* selection mechanism */ function deselectAll(parent) { - for (var i = 0; i < parent.childNodes.length; i++) { - var node = parent.childNodes.item(i); - if (node.nodeType == 1) - $(node).deselect(); - } + for (var i = 0; i < parent.childNodes.length; i++) { + var node = parent.childNodes.item(i); + if (node.nodeType == 1) + $(node).deselect(); + } } function isNodeSelected(node) { - return $(node).hasClassName('_selected'); + return $(node).hasClassName('_selected'); } function acceptMultiSelect(node) { - var response = false; - var attribute = node.getAttribute('multiselect'); - if (attribute && attribute.length > 0) { - log("node '" + node.getAttribute("id") - + "' is still using old-stylemultiselect!"); - response = (attribute.toLowerCase() == 'yes'); - } - else - response = node.multiselect; + var response = false; + var attribute = node.getAttribute('multiselect'); + if (attribute && attribute.length > 0) { + log("node '" + node.getAttribute("id") + + "' is still using old-stylemultiselect!"); + response = (attribute.toLowerCase() == 'yes'); + } + else + response = node.multiselect; - return response; + return response; } function onRowClick(event) { - var node = Event.element(event); - var rowIndex = null; + var node = Event.element(event); + var rowIndex = null; - if (node.tagName != 'TD' && node.tagName != 'LI') - node = this; + if (node.tagName != 'TD' && node.tagName != 'LI') + node = this; - if (node.tagName == 'TD') { - node = node.parentNode; // select TR - } - if (node.tagName == 'TR') { - rowIndex = node.rowIndex - $(node).up('table').down('thead').getElementsByTagName('tr').length; - } - else if (node.tagName == 'LI') { - // Find index of clicked row - var list = node.parentNode; - if (list) { - var items = list.childNodesWithTag("li"); - for (var i = 0; i < items.length; i++) { - if (items[i] == node) { - rowIndex = i; - break; - } - } - } - else - // No parent; stop here - return true; - } + if (node.tagName == 'TD') { + node = node.parentNode; // select TR + } + if (node.tagName == 'TR') { + rowIndex = node.rowIndex - $(node).up('table').down('thead').getElementsByTagName('tr').length; + } + else if (node.tagName == 'LI') { + // Find index of clicked row + var list = node.parentNode; + if (list) { + var items = list.childNodesWithTag("li"); + for (var i = 0; i < items.length; i++) { + if (items[i] == node) { + rowIndex = i; + break; + } + } + } + else + // No parent; stop here + return true; + } - var initialSelection = $(node.parentNode).getSelectedNodes(); - var isLeftClick = true; - if (isMac() && isSafari()) - if (event.ctrlKey == 1) - isLeftClick = false; // Control-click is equivalent to right-click under Mac OS X - else if (event.metaKey == 1) // Command-click - isLeftClick = true; - else - isLeftClick = Event.isLeftClick(event); - else - isLeftClick = Event.isLeftClick(event); + var initialSelection = $(node.parentNode).getSelectedNodes(); + var isLeftClick = true; + if (isMac() && isSafari()) + if (event.ctrlKey == 1) + isLeftClick = false; // Control-click is equivalent to right-click under Mac OS X + else if (event.metaKey == 1) // Command-click + isLeftClick = true; + else + isLeftClick = Event.isLeftClick(event); + else + isLeftClick = Event.isLeftClick(event); - if (initialSelection.length > 0 - && initialSelection.indexOf(node) >= 0 - && !isLeftClick) - // Ignore non primary-click (ie right-click) inside current selection - return true; + if (initialSelection.length > 0 + && initialSelection.indexOf(node) >= 0 + && !isLeftClick) + // Ignore non primary-click (ie right-click) inside current selection + return true; - if ((event.shiftKey == 1 || isMac() && event.metaKey == 1 || isWindows() && event.ctrlKey == 1) - && (lastClickedRow >= 0) - && (acceptMultiSelect(node.parentNode) - || acceptMultiSelect(node.parentNode.parentNode))) { - if (event.shiftKey) { - $(node.parentNode).selectRange(lastClickedRow, rowIndex); - } else if (isNodeSelected(node)) { - $(node).deselect(); - rowIndex = null; - } else { - $(node).selectElement(); - } - // At this point, should empty content of 3-pane view - } else { - // Single line selection - $(node.parentNode).deselectAll(); - $(node).selectElement(); + if ((event.shiftKey == 1 || isMac() && event.metaKey == 1 || isWindows() && event.ctrlKey == 1) + && (lastClickedRow >= 0) + && (acceptMultiSelect(node.parentNode) + || acceptMultiSelect(node.parentNode.parentNode))) { + if (event.shiftKey) { + $(node.parentNode).selectRange(lastClickedRow, rowIndex); + } else if (isNodeSelected(node)) { + $(node).deselect(); + rowIndex = null; + } else { + $(node).selectElement(); + } + // At this point, should empty content of 3-pane view + } else { + // Single line selection + $(node.parentNode).deselectAll(); + $(node).selectElement(); - if (initialSelection != $(node.parentNode).getSelectedNodes()) { - // Selection has changed; fire mousedown event - var parentNode = node.parentNode; - if (parentNode.tagName == 'TBODY') - parentNode = parentNode.parentNode; - parentNode.fire("mousedown"); - } - } - if (rowIndex) - lastClickedRow = rowIndex; + if (initialSelection != $(node.parentNode).getSelectedNodes()) { + // Selection has changed; fire mousedown event + var parentNode = node.parentNode; + if (parentNode.tagName == 'TBODY') + parentNode = parentNode.parentNode; + parentNode.fire("mousedown"); + } + } + if (rowIndex) + lastClickedRow = rowIndex; - return true; + return true; } /* popup menus */ function popupMenu(event, menuId, target) { - document.menuTarget = target; + document.menuTarget = target; - if (document.currentPopupMenu) - hideMenu(document.currentPopupMenu); + if (document.currentPopupMenu) + hideMenu(document.currentPopupMenu); - var popup = $(menuId); + var popup = $(menuId); - var deltaX = 0; - var deltaY = 0; + var deltaX = 0; + var deltaY = 0; - var pageContent = $("pageContent"); - if (popup.parentNode.tagName != "BODY") { - var offset = pageContent.cascadeLeftOffset(); - deltaX = -($(popup.parentNode).cascadeLeftOffset() - offset); - offset = pageContent.cascadeTopOffset(); - deltaY = -($(popup.parentNode).cascadeTopOffset() - offset); - } + var pageContent = $("pageContent"); + if (popup.parentNode.tagName != "BODY") { + var offset = pageContent.cascadeLeftOffset(); + deltaX = -($(popup.parentNode).cascadeLeftOffset() - offset); + offset = pageContent.cascadeTopOffset(); + deltaY = -($(popup.parentNode).cascadeTopOffset() - offset); + } - var menuTop = Event.pointerY(event) + deltaY; - var menuLeft = Event.pointerX(event) + deltaX; - var heightDiff = (window.height() - - (menuTop + popup.offsetHeight)); - if (heightDiff < 0) - menuTop += heightDiff; + var menuTop = Event.pointerY(event) + deltaY; + var menuLeft = Event.pointerX(event) + deltaX; + var heightDiff = (window.height() + - (menuTop + popup.offsetHeight)); + if (heightDiff < 0) + menuTop += heightDiff; - var leftDiff = (window.width() - - (menuLeft + popup.offsetWidth)); - if (leftDiff < 0) - menuLeft -= popup.offsetWidth; + var leftDiff = (window.width() + - (menuLeft + popup.offsetWidth)); + if (leftDiff < 0) + menuLeft -= popup.offsetWidth; - var isVisible = true; - if (popup.prepareVisibility) - if (!popup.prepareVisibility()) - isVisible = false; + var isVisible = true; + if (popup.prepareVisibility) + if (!popup.prepareVisibility()) + isVisible = false; - if (isVisible) { - popup.setStyle({ top: menuTop + "px", - left: menuLeft + "px", - visibility: "visible" }); + Event.stop(event); + if (isVisible) { + popup.setStyle({ top: menuTop + "px", + left: menuLeft + "px", + visibility: "visible" }); - document.currentPopupMenu = popup; + document.currentPopupMenu = popup; - $(document.body).observe("click", onBodyClickMenuHandler); - } + $(document.body).observe("click", onBodyClickMenuHandler); + } - Event.stop(event); } function getParentMenu(node) { - var currentNode, menuNode; + var currentNode, menuNode; - menuNode = null; - currentNode = node; - var menure = new RegExp("(^|\s+)menu(\s+|$)", "i"); + menuNode = null; + currentNode = node; + var menure = new RegExp("(^|\s+)menu(\s+|$)", "i"); - while (menuNode == null - && currentNode) - if (menure.test(currentNode.className)) - menuNode = currentNode; - else - currentNode = currentNode.parentNode; + while (menuNode == null + && currentNode) + if (menure.test(currentNode.className)) + menuNode = currentNode; + else + currentNode = currentNode.parentNode; - return menuNode; + return menuNode; } function onBodyClickMenuHandler(event) { - hideMenu(document.currentPopupMenu); - document.body.stopObserving("click", onBodyClickMenuHandler); - document.body.stopObserving("mouseup", onBodyClickMenuHandler); - document.currentPopupMenu = null; + hideMenu(document.currentPopupMenu); + document.body.stopObserving("click", onBodyClickMenuHandler); + document.body.stopObserving("mouseup", onBodyClickMenuHandler); + document.currentPopupMenu = null; - if (event) - preventDefault(event); + if (event) + preventDefault(event); } function onMenuClickHandler(event) { - if (!this.hasClassName("disabled")) - this.menuCallback.apply(this, [event]); + if (!this.hasClassName("disabled")) + this.menuCallback.apply(this, [event]); } function hideMenu(menuNode) { - var onHide; + var onHide; - if (!menuNode) - return; + if (!menuNode) + return; - if (menuNode.submenu) { - hideMenu(menuNode.submenu); - menuNode.submenu = null; - } + if (menuNode.submenu) { + hideMenu(menuNode.submenu); + menuNode.submenu = null; + } - menuNode.setStyle({ visibility: "hidden" }); - if (menuNode.parentMenuItem) { - menuNode.parentMenuItem.stopObserving("mouseover",onMouseEnteredSubmenu); - menuNode.stopObserving("mouseover", onMouseEnteredSubmenu); - menuNode.parentMenuItem.stopObserving("mouseout", onMouseLeftSubmenu); - menuNode.stopObserving("mouseout", onMouseLeftSubmenu); - menuNode.parentMenu.stopObserving("mouseover", onMouseEnteredParentMenu); - $(menuNode.parentMenuItem).removeClassName("submenu-selected"); - menuNode.parentMenuItem.mouseInside = false; - menuNode.parentMenuItem = null; - menuNode.parentMenu.submenuItem = null; - menuNode.parentMenu.submenu = null; - menuNode.parentMenu = null; - } + menuNode.setStyle({ visibility: "hidden" }); + if (menuNode.parentMenuItem) { + menuNode.parentMenuItem.stopObserving("mouseover",onMouseEnteredSubmenu); + menuNode.stopObserving("mouseover", onMouseEnteredSubmenu); + menuNode.parentMenuItem.stopObserving("mouseout", onMouseLeftSubmenu); + menuNode.stopObserving("mouseout", onMouseLeftSubmenu); + menuNode.parentMenu.stopObserving("mouseover", onMouseEnteredParentMenu); + $(menuNode.parentMenuItem).removeClassName("submenu-selected"); + menuNode.parentMenuItem.mouseInside = false; + menuNode.parentMenuItem = null; + menuNode.parentMenu.submenuItem = null; + menuNode.parentMenu.submenu = null; + menuNode.parentMenu = null; + } - $(menuNode).fire("mousedown"); + $(menuNode).fire("mousedown"); } function onMenuEntryClick(event) { - var node = event.target; + var node = event.target; - id = getParentMenu(node).menuTarget; + id = getParentMenu(node).menuTarget; - return false; + return false; } function parseQueryParameters(url) { - var parameters = new Array(); + var parameters = new Array(); - var params = url.split("?")[1]; - if (params) { - var pairs = params.split("&"); - for (var i = 0; i < pairs.length; i++) { - var pair = pairs[i].split("="); - parameters[pair[0]] = pair[1]; - } - } + var params = url.split("?")[1]; + if (params) { + var pairs = params.split("&"); + for (var i = 0; i < pairs.length; i++) { + var pair = pairs[i].split("="); + parameters[pair[0]] = pair[1]; + } + } - return parameters; + return parameters; } function initLogConsole() { - var logConsole = $("logConsole"); - if (logConsole) { - logConsole.highlighted = false; - logConsole.observe("dblclick", onLogDblClick, false); - logConsole.update(); - Event.observe(window, "keydown", onBodyKeyDown); - } + var logConsole = $("logConsole"); + if (logConsole) { + logConsole.highlighted = false; + logConsole.observe("dblclick", onLogDblClick, false); + logConsole.update(); + Event.observe(window, "keydown", onBodyKeyDown); + } } function onBodyKeyDown(event) { - if (event.keyCode == Event.KEY_ESC) { - toggleLogConsole(); - preventDefault(event); - } + if (event.keyCode == Event.KEY_ESC) { + toggleLogConsole(); + preventDefault(event); + } } function onLogDblClick(event) { - var logConsole = $("logConsole"); - logConsole.innerHTML = ""; + var logConsole = $("logConsole"); + logConsole.innerHTML = ""; } function toggleLogConsole(event) { - var logConsole = $("logConsole"); - var display = '' + logConsole.style.display; - if (display.length == 0) { - logConsole.setStyle({ display: 'block' }); - } else { - logConsole.setStyle({ display: '' }); - } - if (event) - preventDefault(event); + var logConsole = $("logConsole"); + var display = '' + logConsole.style.display; + if (display.length == 0) { + logConsole.setStyle({ display: 'block' }); + } else { + logConsole.setStyle({ display: '' }); + } + if (event) + preventDefault(event); } function log(message) { - if (!logWindow) { - logWindow = window; - while (logWindow.opener) - logWindow = logWindow.opener; - } - var logConsole = logWindow.document.getElementById("logConsole"); - if (logConsole) { - logConsole.highlighted = !logConsole.highlighted; - if (message == '\c') { - logConsole.innerHTML = ""; - return; - } - var logMessage = message.replace("<", "<", "g"); - logMessage = logMessage.replace(" ", " ", "g"); - logMessage = logMessage.replace("\r\n", "
\n", "g"); - logMessage = logMessage.replace("\n", "
\n", "g"); - logMessage += '
' + "\n"; - if (logConsole.highlighted) - logMessage = '
' + logMessage + '
'; - logConsole.innerHTML += logMessage; - } + if (!logWindow) { + logWindow = window; + while (logWindow.opener) + logWindow = logWindow.opener; + } + var logConsole = logWindow.document.getElementById("logConsole"); + if (logConsole) { + logConsole.highlighted = !logConsole.highlighted; + if (message == '\c') { + logConsole.innerHTML = ""; + return; + } + var logMessage = message.replace("<", "<", "g"); + logMessage = logMessage.replace(" ", " ", "g"); + logMessage = logMessage.replace("\r\n", "
\n", "g"); + logMessage = logMessage.replace("\n", "
\n", "g"); + logMessage += '
' + "\n"; + if (logConsole.highlighted) + logMessage = '
' + logMessage + '
'; + logConsole.innerHTML += logMessage; + } } function backtrace() { - var func = backtrace.caller; - var str = "backtrace:\n"; + var func = backtrace.caller; + var str = "backtrace:\n"; - while (func) - { - if (func.name) - { - str += " " + func.name; - if (this) - str += " (" + this + ")"; - } - else - str += "[anonymous]\n"; + while (func) + { + if (func.name) + { + str += " " + func.name; + if (this) + str += " (" + this + ")"; + } + else + str += "[anonymous]\n"; - str += "\n"; - func = func.caller; - } - str += "--\n"; + str += "\n"; + func = func.caller; + } + str += "--\n"; - return str; + return str; } function popupSubmenu(event) { - if (this.submenu && this.submenu != "" && !$(this).hasClassName("disabled")) { - var submenuNode = $(this.submenu); - var parentNode = getParentMenu(this); - if (parentNode.submenu) - hideMenu(parentNode.submenu); - submenuNode.parentMenuItem = this; - submenuNode.parentMenu = parentNode; - parentNode.submenuItem = this; - parentNode.submenu = submenuNode; + if (this.submenu && this.submenu != "" && !$(this).hasClassName("disabled")) { + var submenuNode = $(this.submenu); + var parentNode = getParentMenu(this); + if (parentNode.submenu) + hideMenu(parentNode.submenu); + submenuNode.parentMenuItem = this; + submenuNode.parentMenu = parentNode; + parentNode.submenuItem = this; + parentNode.submenu = submenuNode; - if (submenuNode.prepareVisibility) - submenuNode.prepareVisibility(); + if (submenuNode.prepareVisibility) + submenuNode.prepareVisibility(); - var menuTop = (parentNode.offsetTop - 1 - + this.offsetTop); + var menuTop = (parentNode.offsetTop - 1 + + this.offsetTop); - if (window.height() - < (menuTop + submenuNode.offsetHeight)) - if (submenuNode.offsetHeight < window.height()) - menuTop = window.height() - submenuNode.offsetHeight; - else - menuTop = 0; + if (window.height() + < (menuTop + submenuNode.offsetHeight)) + if (submenuNode.offsetHeight < window.height()) + menuTop = window.height() - submenuNode.offsetHeight; + else + menuTop = 0; - var menuLeft = (parentNode.offsetLeft + parentNode.offsetWidth - 3); - if (window.width() - < (menuLeft + submenuNode.offsetWidth)) - menuLeft = parentNode.offsetLeft - submenuNode.offsetWidth + 3; + var menuLeft = (parentNode.offsetLeft + parentNode.offsetWidth - 3); + if (window.width() + < (menuLeft + submenuNode.offsetWidth)) + menuLeft = parentNode.offsetLeft - submenuNode.offsetWidth + 3; - this.mouseInside = true; - this.observe("mouseover", onMouseEnteredSubmenu); - submenuNode.observe("mouseover", onMouseEnteredSubmenu); - this.observe("mouseout", onMouseLeftSubmenu); - submenuNode.observe("mouseout", onMouseLeftSubmenu); - parentNode.observe("mouseover", onMouseEnteredParentMenu); - $(this).addClassName("submenu-selected"); - submenuNode.setStyle({ top: menuTop + "px", - left: menuLeft + "px", - visibility: "visible" }); - preventDefault(event); - } + this.mouseInside = true; + this.observe("mouseover", onMouseEnteredSubmenu); + submenuNode.observe("mouseover", onMouseEnteredSubmenu); + this.observe("mouseout", onMouseLeftSubmenu); + submenuNode.observe("mouseout", onMouseLeftSubmenu); + parentNode.observe("mouseover", onMouseEnteredParentMenu); + $(this).addClassName("submenu-selected"); + submenuNode.setStyle({ top: menuTop + "px", + left: menuLeft + "px", + visibility: "visible" }); + preventDefault(event); + } } function onMouseEnteredParentMenu(event) { - if (this.submenuItem && !this.submenuItem.mouseInside) - hideMenu(this.submenu); + if (this.submenuItem && !this.submenuItem.mouseInside) + hideMenu(this.submenu); } function onMouseEnteredSubmenu(event) { - $(this).mouseInside = true; + $(this).mouseInside = true; } function onMouseLeftSubmenu(event) { - $(this).mouseInside = false; + $(this).mouseInside = false; } /* search field */ function popupSearchMenu(event) { - var menuId = this.getAttribute("menuid"); - var offset = Position.cumulativeOffset(this); + var menuId = this.getAttribute("menuid"); + var offset = Position.cumulativeOffset(this); - relX = Event.pointerX(event) - offset[0]; - relY = Event.pointerY(event) - offset[1]; + relX = Event.pointerX(event) - offset[0]; + relY = Event.pointerY(event) - offset[1]; - if (event.button == 0 - && relX < 24) { - event.cancelBubble = true; - event.returnValue = false; + if (event.button == 0 + && relX < 24) { + event.cancelBubble = true; + event.returnValue = false; - if (document.currentPopupMenu) - hideMenu(document.currentPopupMenu); + if (document.currentPopupMenu) + hideMenu(document.currentPopupMenu); - var popup = $(menuId); - offset = Position.positionedOffset(this); - popup.setStyle({ top: this.offsetHeight + "px", - left: (offset[0] + 3) + "px", - visibility: "visible" }); + var popup = $(menuId); + offset = Position.positionedOffset(this); + popup.setStyle({ top: this.offsetHeight + "px", + left: (offset[0] + 3) + "px", + visibility: "visible" }); - document.currentPopupMenu = popup; - $(document.body).observe("click", onBodyClickMenuHandler); - } + document.currentPopupMenu = popup; + $(document.body).observe("click", onBodyClickMenuHandler); + } } function setSearchCriteria(event) { - var searchValue = $("searchValue"); - var searchCriteria = $("searchCriteria"); + var searchValue = $("searchValue"); + var searchCriteria = $("searchCriteria"); - if (searchValue.ghostPhrase == searchValue.value) - searchValue.value = this.innerHTML; + if (searchValue.ghostPhrase == searchValue.value) + searchValue.value = this.innerHTML; - searchValue.ghostPhrase = this.innerHTML; - searchCriteria.value = this.getAttribute('id'); + searchValue.ghostPhrase = this.innerHTML; + searchCriteria.value = this.getAttribute('id'); - if (this.parentNode.chosenNode) - this.parentNode.chosenNode.removeClassName("_chosen"); - this.addClassName("_chosen"); + if (this.parentNode.chosenNode) + this.parentNode.chosenNode.removeClassName("_chosen"); + this.addClassName("_chosen"); - if (this.parentNode.chosenNode != this) { - searchValue.lastSearch = ""; - this.parentNode.chosenNode = this; + if (this.parentNode.chosenNode != this) { + searchValue.lastSearch = ""; + this.parentNode.chosenNode = this; - onSearchFormSubmit(); - } + onSearchFormSubmit(); + } } function checkSearchValue(event) { - var searchValue = $("searchValue"); + var searchValue = $("searchValue"); - if (searchValue.value == searchValue.ghostPhrase) - searchValue.value = ""; + if (searchValue.value == searchValue.ghostPhrase) + searchValue.value = ""; } function configureSearchField() { - var searchValue = $("searchValue"); + var searchValue = $("searchValue"); - if (searchValue) { - searchValue.observe("click", popupSearchMenu); - searchValue.observe("blur", onSearchBlur); - searchValue.observe("focus", onSearchFocus); - searchValue.observe("keydown", onSearchKeyDown); - searchValue.observe("mousedown", onSearchMouseDown); - } + if (searchValue) { + searchValue.observe("click", popupSearchMenu); + searchValue.observe("blur", onSearchBlur); + searchValue.observe("focus", onSearchFocus); + searchValue.observe("keydown", onSearchKeyDown); + searchValue.observe("mousedown", onSearchMouseDown); + } } function onSearchMouseDown(event) { - var superNode = this.parentNode.parentNode.parentNode; - relX = (Event.pointerX(event) - superNode.offsetLeft - this.offsetLeft); - relY = (Event.pointerY(event) - superNode.offsetTop - this.offsetTop); + var superNode = this.parentNode.parentNode.parentNode; + relX = (Event.pointerX(event) - superNode.offsetLeft - this.offsetLeft); + relY = (Event.pointerY(event) - superNode.offsetTop - this.offsetTop); - if (relX < 24) - Event.stop(event); + if (relX < 24) + Event.stop(event); } function onSearchFocus() { - ghostPhrase = this.ghostPhrase; - if (this.value == ghostPhrase) { - this.value = ""; - this.setAttribute("modified", ""); - } else { - this.selectElement(); - } + ghostPhrase = this.ghostPhrase; + if (this.value == ghostPhrase) { + this.value = ""; + this.setAttribute("modified", ""); + } else { + this.selectElement(); + } - this.setStyle({ color: "#000" }); + this.setStyle({ color: "#000" }); } function onSearchBlur(event) { - if (!this.value || this.value.blank()) { - this.setAttribute("modified", ""); - this.setStyle({ color: "#aaa" }); - this.value = this.ghostPhrase; - search["value"] = ""; - if (this.lastSearch != "") { - this.lastSearch = ""; - refreshCurrentFolder(); - } - } else if (this.value == this.ghostPhrase) { - this.setAttribute("modified", ""); - this.setStyle({ color: "#aaa" }); - } else { - this.setAttribute("modified", "yes"); - this.setStyle({ color: "#000" }); - } + if (!this.value || this.value.blank()) { + this.setAttribute("modified", ""); + this.setStyle({ color: "#aaa" }); + this.value = this.ghostPhrase; + search["value"] = ""; + if (this.lastSearch != "") { + this.lastSearch = ""; + refreshCurrentFolder(); + } + } else if (this.value == this.ghostPhrase) { + this.setAttribute("modified", ""); + this.setStyle({ color: "#aaa" }); + } else { + this.setAttribute("modified", "yes"); + this.setStyle({ color: "#000" }); + } } function onSearchKeyDown(event) { - if (this.timer) - clearTimeout(this.timer); + if (this.timer) + clearTimeout(this.timer); - if (event.ctrlKey || event.metaKey) - return; - else if (event.keyCode == Event.KEY_RETURN) { - onSearchFormSubmit(); - preventDefault(event); - } - else if (event.keyCode == 0 - || event.keyCode == Event.KEY_BACKSPACE - || event.keyCode > 31) - this.timer = setTimeout("onSearchFormSubmit()", 1000); + if (event.ctrlKey || event.metaKey) + return; + else if (event.keyCode == Event.KEY_RETURN) { + onSearchFormSubmit(); + preventDefault(event); + } + else if (event.keyCode == 0 + || event.keyCode == Event.KEY_BACKSPACE + || event.keyCode > 31) + this.timer = setTimeout("onSearchFormSubmit()", 1000); } function onSearchFormSubmit(event) { - var searchValue = $("searchValue"); - var searchCriteria = $("searchCriteria"); + var searchValue = $("searchValue"); + var searchCriteria = $("searchCriteria"); - if (searchValue.value != searchValue.ghostPhrase - && (searchValue.value != searchValue.lastSearch - || searchValue.value.strip().length > 0)) { - search["criteria"] = searchCriteria.value; - search["value"] = searchValue.value; - searchValue.lastSearch = searchValue.value; - refreshCurrentFolder(); - } + if (searchValue.value != searchValue.ghostPhrase + && (searchValue.value != searchValue.lastSearch + || searchValue.value.strip().length > 0)) { + search["criteria"] = searchCriteria.value; + search["value"] = searchValue.value; + searchValue.lastSearch = searchValue.value; + refreshCurrentFolder(); + } } function initCriteria() { - var searchCriteria = $("searchCriteria"); - var searchValue = $("searchValue"); - var searchOptions = $("searchOptions"); + var searchCriteria = $("searchCriteria"); + var searchValue = $("searchValue"); + var searchOptions = $("searchOptions"); - if (searchValue) { - var firstOption = searchOptions.down("li"); - if (firstOption) { - searchCriteria.value = firstOption.getAttribute('id'); - searchValue.ghostPhrase = firstOption.innerHTML; - searchValue.lastSearch = ""; - if (searchValue.value == '') { - searchValue.value = firstOption.innerHTML; - searchValue.setAttribute("modified", ""); - searchValue.setStyle({ color: "#aaa" }); - } - // Set the checkmark to the first option - if (searchOptions.chosenNode) - searchOptions.chosenNode.removeClassName("_chosen"); - firstOption.addClassName("_chosen"); - searchOptions.chosenNode = firstOption; - } - searchValue.blur(); - } + if (searchValue) { + var firstOption = searchOptions.down("li"); + if (firstOption) { + searchCriteria.value = firstOption.getAttribute('id'); + searchValue.ghostPhrase = firstOption.innerHTML; + searchValue.lastSearch = ""; + if (searchValue.value == '') { + searchValue.value = firstOption.innerHTML; + searchValue.setAttribute("modified", ""); + searchValue.setStyle({ color: "#aaa" }); + } + // Set the checkmark to the first option + if (searchOptions.chosenNode) + searchOptions.chosenNode.removeClassName("_chosen"); + firstOption.addClassName("_chosen"); + searchOptions.chosenNode = firstOption; + } + searchValue.blur(); + } } /* toolbar buttons */ function popupToolbarMenu(node, menuId) { - if (document.currentPopupMenu) - hideMenu(document.currentPopupMenu); + if (document.currentPopupMenu) + hideMenu(document.currentPopupMenu); - var popup = $(menuId); - if (popup.prepareVisibility) - popup.prepareVisibility(); + var popup = $(menuId); + if (popup.prepareVisibility) + popup.prepareVisibility(); - var offset = $(node).cumulativeOffset(); - var top = offset.top + node.offsetHeight; - popup.setStyle({ top: top + "px", - left: offset.left + "px", - visibility: "visible" }); + var offset = $(node).cumulativeOffset(); + var top = offset.top + node.offsetHeight; + popup.setStyle({ top: top + "px", + left: offset.left + "px", + visibility: "visible" }); - document.currentPopupMenu = popup; - $(document.body).observe("mouseup", onBodyClickMenuHandler); + document.currentPopupMenu = popup; + $(document.body).observe("mouseup", onBodyClickMenuHandler); } /* contact selector */ function folderSubscriptionCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - if (http.callbackData) - http.callbackData["method"](http.callbackData["data"]); - } - else - window.alert(clabels["Unable to subscribe to that folder!"]); - document.subscriptionAjaxRequest = null; - } - else - log ("folderSubscriptionCallback Ajax error"); + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + if (http.callbackData) + http.callbackData["method"](http.callbackData["data"]); + } + else + window.alert(clabels["Unable to subscribe to that folder!"]); + document.subscriptionAjaxRequest = null; + } + else + log ("folderSubscriptionCallback Ajax error"); } function subscribeToFolder(refreshCallback, refreshCallbackData) { - var folderData = refreshCallbackData["folder"].split(":"); - var username = folderData[0]; - var folderPath = folderData[1]; - if (username != UserLogin) { - var url = (UserFolderURL + "../" + username - + folderPath + "/subscribe"); - if (document.subscriptionAjaxRequest) { - document.subscriptionAjaxRequest.aborted = true; - document.subscriptionAjaxRequest.abort(); - } + var folderData = refreshCallbackData["folder"].split(":"); + var username = folderData[0]; + var folderPath = folderData[1]; + if (username != UserLogin) { + var url = (UserFolderURL + "../" + username + + folderPath + "/subscribe"); + if (document.subscriptionAjaxRequest) { + document.subscriptionAjaxRequest.aborted = true; + document.subscriptionAjaxRequest.abort(); + } - var rfCbData = { method: refreshCallback, data: refreshCallbackData }; - document.subscriptionAjaxRequest = triggerAjaxRequest(url, - folderSubscriptionCallback, - rfCbData); - } - else - refreshCallbackData["window"].alert(clabels["You cannot subscribe to a folder that you own!"]); + var rfCbData = { method: refreshCallback, data: refreshCallbackData }; + document.subscriptionAjaxRequest = triggerAjaxRequest(url, + folderSubscriptionCallback, + rfCbData); + } + else + refreshCallbackData["window"].alert(clabels["You cannot subscribe to a folder that you own!"]); } function folderUnsubscriptionCallback(http) { - if (http.readyState == 4) { - removeFolderRequestCount--; - if (isHttpStatus204(http.status)) { - if (http.callbackData) - http.callbackData["method"](http.callbackData["data"]); - } - else - window.alert(clabels["Unable to unsubscribe from that folder!"]); - } + if (http.readyState == 4) { + removeFolderRequestCount--; + if (isHttpStatus204(http.status)) { + if (http.callbackData) + http.callbackData["method"](http.callbackData["data"]); + } + else + window.alert(clabels["Unable to unsubscribe from that folder!"]); + } } function unsubscribeFromFolder(folder, owner, refreshCallback, - refreshCallbackData) { - if (document.body.hasClassName("popup")) { - window.opener.unsubscribeFromFolder(folder, refreshCallback, - refreshCallbackData); - } - else { - if (owner.startsWith('/')) - owner = owner.substring(1); - if (owner != UserLogin) { - var url = (ApplicationBaseURL + folder + "/unsubscribe"); - removeFolderRequestCount++; - var rfCbData = { method: refreshCallback, data: refreshCallbackData }; - triggerAjaxRequest(url, folderUnsubscriptionCallback, rfCbData); - } - else - window.alert(clabels["You cannot unsubscribe from a folder that you own!"]); - } + refreshCallbackData) { + if (document.body.hasClassName("popup")) { + window.opener.unsubscribeFromFolder(folder, refreshCallback, + refreshCallbackData); + } + else { + if (owner.startsWith('/')) + owner = owner.substring(1); + if (owner != UserLogin) { + var url = (ApplicationBaseURL + folder + "/unsubscribe"); + removeFolderRequestCount++; + var rfCbData = { method: refreshCallback, data: refreshCallbackData }; + triggerAjaxRequest(url, folderUnsubscriptionCallback, rfCbData); + } + else + window.alert(clabels["You cannot unsubscribe from a folder that you own!"]); + } } function accessToSubscribedFolder(serverFolder) { - var folder; + var folder; - var parts = serverFolder.split(":"); - if (parts.length > 1) { - var paths = parts[1].split("/"); - folder = "/" + parts[0].asCSSIdentifier() + "_" + paths[2]; - } - else - folder = serverFolder; + var parts = serverFolder.split(":"); + if (parts.length > 1) { + var paths = parts[1].split("/"); + folder = "/" + parts[0].asCSSIdentifier() + "_" + paths[2]; + } + else + folder = serverFolder; - return folder; + return folder; } function getSubscribedFolderOwner(serverFolder) { - var owner; + var owner; - var parts = serverFolder.split(":"); - if (parts.length > 1) { - owner = parts[0]; - } + var parts = serverFolder.split(":"); + if (parts.length > 1) { + owner = parts[0]; + } - return owner; + return owner; } function getListIndexForFolder(items, owner, folderName) { - var i; - var previousOwner = null; + var i; + var previousOwner = null; - for (var i = 0; i < items.length; i++) { - var currentFolderName = items[i].lastChild.nodeValue.strip(); - var currentOwner = items[i].readAttribute('owner'); - if (currentOwner == owner) { - previousOwner = currentOwner; - if (currentFolderName > folderName) - break; - } - else if (previousOwner || - (currentOwner != UserLogin && currentOwner > owner)) - break; - else if (currentOwner == "nobody") - break; - } + for (var i = 0; i < items.length; i++) { + var currentFolderName = items[i].lastChild.nodeValue.strip(); + var currentOwner = items[i].readAttribute('owner'); + if (currentOwner == owner) { + previousOwner = currentOwner; + if (currentFolderName > folderName) + break; + } + else if (previousOwner || + (currentOwner != UserLogin && currentOwner > owner)) + break; + else if (currentOwner == "nobody") + break; + } - return i; + return i; } function listRowMouseDownHandler(event) { - preventDefault(event); - return false; + preventDefault(event); + return false; } /* tabs */ function initTabs() { - var containers = document.getElementsByClassName("tabsContainer"); - for (var x = 0; x < containers.length; x++) { - var container = containers[x]; - var list = container.childNodesWithTag("ul"); + var containers = document.getElementsByClassName("tabsContainer"); + for (var x = 0; x < containers.length; x++) { + var container = containers[x]; + var list = container.childNodesWithTag("ul"); - if (list.length > 0) { - var firstTab = null; - var nodes = $(list[0]).childNodesWithTag("li"); - for (var i = 0; i < nodes.length; i++) { - var currentNode = $(nodes[i]); - if (!firstTab) - firstTab = currentNode; - currentNode.observe("mousedown", onTabMouseDown); - currentNode.observe("click", onTabClick); - //$(currentNode.getAttribute("target")).hide(); - } + if (list.length > 0) { + var firstTab = null; + var nodes = $(list[0]).childNodesWithTag("li"); + for (var i = 0; i < nodes.length; i++) { + var currentNode = $(nodes[i]); + if (!firstTab) + firstTab = currentNode; + currentNode.observe("mousedown", onTabMouseDown); + currentNode.observe("click", onTabClick); + //$(currentNode.getAttribute("target")).hide(); + } - firstTab.addClassName("first"); - firstTab.addClassName("active"); - container.activeTab = firstTab; + firstTab.addClassName("first"); + firstTab.addClassName("active"); + container.activeTab = firstTab; - var target = $(firstTab.getAttribute("target")); - target.addClassName("active"); - } - //target.show(); - } + var target = $(firstTab.getAttribute("target")); + target.addClassName("active"); + } + //target.show(); + } } function reverseSortByAlarmTime(a, b) { - var x = parseInt(a[2]); - var y = parseInt(b[2]); - return (y - x); + var x = parseInt(a[2]); + var y = parseInt(b[2]); + return (y - x); } function refreshAlarms() { - var url; - var now = new Date(); - var utc = Math.floor(now.getTime()/1000); + var url; + var now = new Date(); + var utc = Math.floor(now.getTime()/1000); - if (document.alarmsListAjaxRequest) - return false; - url = UserFolderURL + "Calendar/alarmslist?browserTime=" + utc; - document.alarmsListAjaxRequest - = triggerAjaxRequest(url, refreshAlarmsCallback); + if (document.alarmsListAjaxRequest) + return false; + url = UserFolderURL + "Calendar/alarmslist?browserTime=" + utc; + document.alarmsListAjaxRequest + = triggerAjaxRequest(url, refreshAlarmsCallback); - return true; + return true; } function refreshAlarmsCallback(http) { - if (http.readyState == 4 - && http.status == 200) { - document.alarmsListAjaxRequest = null; + if (http.readyState == 4 + && http.status == 200) { + document.alarmsListAjaxRequest = null; - if (http.responseText.length > 0) { - Alarms = http.responseText.evalJSON(true); - Alarms.sort(reverseSortByAlarmTime); - triggerNextAlarm(); - } - } - else - log ("refreshAlarmsCallback Ajax error"); + if (http.responseText.length > 0) { + Alarms = http.responseText.evalJSON(true); + Alarms.sort(reverseSortByAlarmTime); + triggerNextAlarm(); + } + } + else + log ("refreshAlarmsCallback Ajax error"); } function triggerNextAlarm() { - if (Alarms.length > 0) { - var next = Alarms.pop(); - var now = new Date(); - var utc = Math.floor(now.getTime()/1000); - var url = next[0] + '/' + next[1]; - var alarmTime = parseInt(next[2]); - var delay = alarmTime; - if (alarmTime > 0) delay -= utc; - var d = new Date(alarmTime*1000); - log ("now = " + now.toUTCString()); - log ("next event " + url + " in " + delay + " seconds (on " + d.toUTCString() + ")"); - showAlarm.delay(delay, url); - } + if (Alarms.length > 0) { + var next = Alarms.pop(); + var now = new Date(); + var utc = Math.floor(now.getTime()/1000); + var url = next[0] + '/' + next[1]; + var alarmTime = parseInt(next[2]); + var delay = alarmTime; + if (alarmTime > 0) delay -= utc; + var d = new Date(alarmTime*1000); + log ("now = " + now.toUTCString()); + log ("next event " + url + " in " + delay + " seconds (on " + d.toUTCString() + ")"); + showAlarm.delay(delay, url); + } } function showAlarm(url) { - url = UserFolderURL + "Calendar/" + url + "/view?resetAlarm=yes"; - if (document.viewAlarmAjaxRequest) { - document.viewAlarmAjaxRequest.aborted = true; - document.viewAlarmAjaxRequest.abort(); - } - document.viewAlarmAjaxRequest = triggerAjaxRequest(url, showAlarmCallback); + url = UserFolderURL + "Calendar/" + url + "/view?resetAlarm=yes"; + if (document.viewAlarmAjaxRequest) { + document.viewAlarmAjaxRequest.aborted = true; + document.viewAlarmAjaxRequest.abort(); + } + document.viewAlarmAjaxRequest = triggerAjaxRequest(url, showAlarmCallback); } function showAlarmCallback(http) { - if (http.readyState == 4 - && http.status == 200) { - if (http.responseText.length) { - var data = http.responseText.evalJSON(true); - var msg = clabels["Reminder:"] + " " + data["summary"] + "\n"; - if (data["startDate"]) { - msg += clabels["Start:"] + " " + data["startDate"]; - if (parseInt(data["isAllDay"]) == 0) - msg += " - " + data["startTime"]; - msg += "\n"; - } - if (data["dueDate"]) { - msg += clabels["Due Date:"] + " " + data["dueDate"]; - if (data["dueTime"]) - msg += " - " + data["dueTime"]; - msg += "\n"; - } - if (data["location"].length) - msg += "\n" + clabels["Location:"] + " " + data["location"]; - if (data["description"].length) - msg += "\n\n" + data["description"]; + if (http.readyState == 4 + && http.status == 200) { + if (http.responseText.length) { + var data = http.responseText.evalJSON(true); + var msg = clabels["Reminder:"] + " " + data["summary"] + "\n"; + if (data["startDate"]) { + msg += clabels["Start:"] + " " + data["startDate"]; + if (parseInt(data["isAllDay"]) == 0) + msg += " - " + data["startTime"]; + msg += "\n"; + } + if (data["dueDate"]) { + msg += clabels["Due Date:"] + " " + data["dueDate"]; + if (data["dueTime"]) + msg += " - " + data["dueTime"]; + msg += "\n"; + } + if (data["location"].length) + msg += "\n" + clabels["Location:"] + " " + data["location"]; + if (data["description"].length) + msg += "\n\n" + data["description"]; - window.alert(msg); - } - else - log("showAlarmCallback ajax error: no data received"); - } - else { - log("showAlarmCallback ajax error (" + http.status + "): " + http.url); - } + window.alert(msg); + } + else + log("showAlarmCallback ajax error: no data received"); + } + else { + log("showAlarmCallback ajax error (" + http.status + "): " + http.url); + } - triggerNextAlarm(); + triggerNextAlarm(); } function initMenus() { - var menus = getMenus(); - if (menus) { - for (var menuID in menus) { - var menuDIV = $(menuID); - if (menuDIV) - initMenu(menuDIV, menus[menuID]); - } - } + var menus = getMenus(); + if (menus) { + for (var menuID in menus) { + var menuDIV = $(menuID); + if (menuDIV) + initMenu(menuDIV, menus[menuID]); + } + } } function initMenu(menuDIV, callbacks) { - var uls = menuDIV.childNodesWithTag("ul"); - for (var i = 0; i < uls.length; i++) { - var lis = $(uls[i]).childNodesWithTag("li"); - for (var j = 0; j < lis.length; j++) { - var node = $(lis[j]); - node.observe("mousedown", listRowMouseDownHandler, false); - var callback; - if (i > 0) - callback = callbacks[i+j+1]; - else - callback = callbacks[i+j]; - if (callback) { - if (typeof(callback) == "string") { - if (callback == "-") - node.addClassName("separator"); - else { - node.submenu = callback; - node.addClassName("submenu"); - node.observe("mouseover", popupSubmenu); - } - } - else { - node.observe("mouseup", onBodyClickMenuHandler); - node.menuCallback = callback; - node.observe("click", onMenuClickHandler); - } - } - else - node.addClassName("disabled"); - } - } + var uls = menuDIV.childNodesWithTag("ul"); + for (var i = 0; i < uls.length; i++) { + var lis = $(uls[i]).childNodesWithTag("li"); + for (var j = 0; j < lis.length; j++) { + var node = $(lis[j]); + node.observe("mousedown", listRowMouseDownHandler, false); + var callback; + if (i > 0) + callback = callbacks[i+j+1]; + else + callback = callbacks[i+j]; + if (callback) { + if (typeof(callback) == "string") { + if (callback == "-") + node.addClassName("separator"); + else { + node.submenu = callback; + node.addClassName("submenu"); + node.observe("mouseover", popupSubmenu); + } + } + else { + node.observe("mouseup", onBodyClickMenuHandler); + node.menuCallback = callback; + node.observe("click", onMenuClickHandler); + } + } + else + node.addClassName("disabled"); + } + } } function onTabMouseDown(event) { - event.stopPropagation(); - event.preventDefault(); + event.stopPropagation(); + event.preventDefault(); } function openExternalLink(anchor) { - return false; + return false; } function openAclWindow(url) { - var w = window.open(url, "aclWindow", - "width=420,height=300,resizable=1,scrollbars=1,toolbar=0," - + "location=0,directories=0,status=0,menubar=0" - + ",copyhistory=0"); - w.opener = window; - w.focus(); + var w = window.open(url, "aclWindow", + "width=420,height=300,resizable=1,scrollbars=1,toolbar=0," + + "location=0,directories=0,status=0,menubar=0" + + ",copyhistory=0"); + w.opener = window; + w.focus(); - return w; + return w; } function getUsersRightsWindowHeight() { - return usersRightsWindowHeight; + return usersRightsWindowHeight; } function getUsersRightsWindowWidth() { - return usersRightsWindowWidth; + return usersRightsWindowWidth; } function getTopWindow() { - var topWindow = null; - var currentWindow = window; - while (!topWindow) { - if (currentWindow.document.body.hasClassName("popup") - && currentWindow.opener) - currentWindow = currentWindow.opener; - else - topWindow = currentWindow; - } + var topWindow = null; + var currentWindow = window; + while (!topWindow) { + if (currentWindow.document.body.hasClassName("popup") + && currentWindow.opener) + currentWindow = currentWindow.opener; + else + topWindow = currentWindow; + } - return topWindow; + return topWindow; } function onTabClick(event) { - var container = this.parentNode.parentNode; - var content = $(this.getAttribute("target")); - var oldContent = $(container.activeTab.getAttribute("target")); + var container = this.parentNode.parentNode; + var content = $(this.getAttribute("target")); + var oldContent = $(container.activeTab.getAttribute("target")); - oldContent.removeClassName("active"); - container.activeTab.removeClassName("active"); // previous LI - container.activeTab = this; - container.activeTab.addClassName("active"); // current LI - content.addClassName("active"); + oldContent.removeClassName("active"); + container.activeTab.removeClassName("active"); // previous LI + container.activeTab = this; + container.activeTab.addClassName("active"); // current LI + content.addClassName("active"); - // Prototype alternative + // Prototype alternative - //oldContent.removeClassName("active"); - //container.activeTab.removeClassName("active"); // previous LI - //container.activeTab = node; - //container.activeTab.addClassName("active"); // current LI + //oldContent.removeClassName("active"); + //container.activeTab.removeClassName("active"); // previous LI + //container.activeTab = node; + //container.activeTab.addClassName("active"); // current LI - //container.activeTab.hide(); - //oldContent.hide(); - //content.show(); + //container.activeTab.hide(); + //oldContent.hide(); + //content.show(); - //container.activeTab = node; - //container.activeTab.show(); + //container.activeTab = node; + //container.activeTab.show(); } function enableAnchor(anchor) { - var classStr = '' + anchor.getAttribute("class"); - var position = classStr.indexOf("_disabled", 0); - if (position > -1) { - var disabledHref = anchor.getAttribute("disabled-href"); - if (disabledHref) - anchor.setAttribute("href", disabledHref); - var disabledOnclick = anchor.getAttribute("disabled-onclick"); - if (disabledOnclick) - anchor.setAttribute("onclick", disabledOnclick); - anchor.removeClassName("_disabled"); - anchor.setAttribute("disabled-href", null); - anchor.setAttribute("disabled-onclick", null); - anchor.disabled = 0; - anchor.enabled = 1; - } + var classStr = '' + anchor.getAttribute("class"); + var position = classStr.indexOf("_disabled", 0); + if (position > -1) { + var disabledHref = anchor.getAttribute("disabled-href"); + if (disabledHref) + anchor.setAttribute("href", disabledHref); + var disabledOnclick = anchor.getAttribute("disabled-onclick"); + if (disabledOnclick) + anchor.setAttribute("onclick", disabledOnclick); + anchor.removeClassName("_disabled"); + anchor.setAttribute("disabled-href", null); + anchor.setAttribute("disabled-onclick", null); + anchor.disabled = 0; + anchor.enabled = 1; + } } function disableAnchor(anchor) { - var classStr = '' + anchor.getAttribute("class"); - var position = classStr.indexOf("_disabled", 0); - if (position < 0) { - var href = anchor.getAttribute("href"); - if (href) - anchor.setAttribute("disabled-href", href); - var onclick = anchor.getAttribute("onclick"); - if (onclick) - anchor.setAttribute("disabled-onclick", onclick); - anchor.addClassName("_disabled"); - anchor.setAttribute("href", "#"); - anchor.setAttribute("onclick", "return false;"); - anchor.disabled = 1; - anchor.enabled = 0; - } + var classStr = '' + anchor.getAttribute("class"); + var position = classStr.indexOf("_disabled", 0); + if (position < 0) { + var href = anchor.getAttribute("href"); + if (href) + anchor.setAttribute("disabled-href", href); + var onclick = anchor.getAttribute("onclick"); + if (onclick) + anchor.setAttribute("disabled-onclick", onclick); + anchor.addClassName("_disabled"); + anchor.setAttribute("href", "#"); + anchor.setAttribute("onclick", "return false;"); + anchor.disabled = 1; + anchor.enabled = 0; + } } function d2h(d) { - var hD = "0123456789abcdef"; - var h = hD.substr(d & 15, 1); + var hD = "0123456789abcdef"; + var h = hD.substr(d & 15, 1); - while (d > 15) { - d >>= 4; - h = hD.substr(d & 15, 1) + h; - } + while (d > 15) { + d >>= 4; + h = hD.substr(d & 15, 1) + h; + } - return h; + return h; } function indexColor(number) { - var color; + var color; - if (number == 0) - color = "#ccf"; - else { - var colorTable = new Array(1, 1, 1); + if (number == 0) + color = "#ccf"; + else { + var colorTable = new Array(1, 1, 1); - var currentValue = number; - var index = 0; - while (currentValue) { - if (currentValue & 1) - colorTable[index]++; - if (index == 3) - index = 0; - currentValue >>= 1; - index++; - } + var currentValue = number; + var index = 0; + while (currentValue) { + if (currentValue & 1) + colorTable[index]++; + if (index == 3) + index = 0; + currentValue >>= 1; + index++; + } - color = ("#" - + d2h((256 / colorTable[2]) - 1) - + d2h((256 / colorTable[1]) - 1) - + d2h((256 / colorTable[0]) - 1)); - } + color = ("#" + + d2h((256 / colorTable[2]) - 1) + + d2h((256 / colorTable[1]) - 1) + + d2h((256 / colorTable[0]) - 1)); + } - return color; + return color; } function reloadPreferences() { - var url = UserFolderURL + "jsonDefaults"; - var http = createHTTPClient(); - http.open("GET", url, false); - http.send(""); + var url = UserFolderURL + "jsonDefaults"; + var http = createHTTPClient(); + http.open("GET", url, false); + http.send(""); - if (http.status == 200) { - if (http.responseText.length > 0) { - UserDefaults = http.responseText.evalJSON(true); - if (!UserDefaults) - UserDefaults = {}; - } - else - UserDefaults = {}; - } + if (http.status == 200) { + if (http.responseText.length > 0) { + UserDefaults = http.responseText.evalJSON(true); + if (!UserDefaults) + UserDefaults = {}; + } + else + UserDefaults = {}; + } - url = UserFolderURL + "jsonSettings"; - http.open("GET", url, false); - http.send(""); - if (http.status == 200) { - if (http.responseText.length > 0) - UserSettings = http.responseText.evalJSON(true); - else - UserSettings = {}; - } + url = UserFolderURL + "jsonSettings"; + http.open("GET", url, false); + http.send(""); + if (http.status == 200) { + if (http.responseText.length > 0) + UserSettings = http.responseText.evalJSON(true); + else + UserSettings = {}; + } } function onLoadHandler(event) { - queryParameters = parseQueryParameters('' + window.location); - if (!$(document.body).hasClassName("popup")) { - initLogConsole(); - refreshAlarms(); - } - initCriteria(); - configureSearchField(); - initMenus(); - initTabs(); - configureDragHandles(); - configureLinkBanner(); - var progressImage = $("progressIndicator"); - if (progressImage) - progressImage.parentNode.removeChild(progressImage); - $(document.body).observe("contextmenu", onBodyClickContextMenu); + queryParameters = parseQueryParameters('' + window.location); + if (!$(document.body).hasClassName("popup")) { + initLogConsole(); + refreshAlarms(); + } + initCriteria(); + configureSearchField(); + initMenus(); + initTabs(); + configureDragHandles(); + configureLinkBanner(); + var progressImage = $("progressIndicator"); + if (progressImage) + progressImage.parentNode.removeChild(progressImage); + $(document.body).observe("contextmenu", onBodyClickContextMenu); - onFinalLoadHandler(); + onFinalLoadHandler(); } function onBodyClickContextMenu(event) { - if (!(event.target - && (event.target.tagName == "INPUT" - || event.target.tagName == "TEXTAREA"))) - preventDefault(event); + if (!(event.target + && (event.target.tagName == "INPUT" + || event.target.tagName == "TEXTAREA"))) + preventDefault(event); } function configureSortableTableHeaders(table) { - var headers = $(table).getElementsByClassName("sortableTableHeader"); - for (var i = 0; i < headers.length; i++) { - var header = $(headers[i]); - header.observe("selectstart", listRowMouseDownHandler); - header.stopObserving("click", onHeaderClick); - header.observe("click", onHeaderClick); - } + var headers = $(table).getElementsByClassName("sortableTableHeader"); + for (var i = 0; i < headers.length; i++) { + var header = $(headers[i]); + header.observe("selectstart", listRowMouseDownHandler); + header.stopObserving("click", onHeaderClick); + header.observe("click", onHeaderClick); + } } function onLinkBannerClick() { - activeAjaxRequests++; - checkAjaxRequestsState(); + activeAjaxRequests++; + checkAjaxRequestsState(); } function onPreferencesClick(event) { - var urlstr = UserFolderURL + "preferences"; - var w = window.open(urlstr, "_blank", - "width=440,height=450,resizable=0,scrollbars=0,location=0"); - w.opener = window; - w.focus(); + var urlstr = UserFolderURL + "preferences"; + var w = window.open(urlstr, "_blank", + "width=440,height=450,resizable=0,scrollbars=0,location=0"); + w.opener = window; + w.focus(); - preventDefault(event); + preventDefault(event); } function configureLinkBanner() { - var linkBanner = $("linkBanner"); - if (linkBanner) { - var moduleLinks = [ "calendar", "contacts", "mail" ]; - for (var i = 0; i < moduleLinks.length; i++) { - var link = $(moduleLinks[i] + "BannerLink"); - if (link) { - link.observe("mousedown", listRowMouseDownHandler); - link.observe("click", onLinkBannerClick); - } - } - link = $("preferencesBannerLink"); - if (link) { - link.observe("mousedown", listRowMouseDownHandler); - link.observe("click", onPreferencesClick); - } - link = $("consoleBannerLink"); - if (link) { - link.observe("mousedown", listRowMouseDownHandler); - link.observe("click", toggleLogConsole); - } - } + var linkBanner = $("linkBanner"); + if (linkBanner) { + var moduleLinks = [ "calendar", "contacts", "mail" ]; + for (var i = 0; i < moduleLinks.length; i++) { + var link = $(moduleLinks[i] + "BannerLink"); + if (link) { + link.observe("mousedown", listRowMouseDownHandler); + link.observe("click", onLinkBannerClick); + } + } + link = $("preferencesBannerLink"); + if (link) { + link.observe("mousedown", listRowMouseDownHandler); + link.observe("click", onPreferencesClick); + } + link = $("consoleBannerLink"); + if (link) { + link.observe("mousedown", listRowMouseDownHandler); + link.observe("click", toggleLogConsole); + } + } } /* accessing another user's data */ function UserFolderURLForUser(user) { - var folderArray = UserFolderURL.split("/"); - var count; - if (UserFolderURL.endsWith('/')) - count = folderArray.length - 2; - else - count = folderArray.length - 1; - folderArray[count] = escape(user); + var folderArray = UserFolderURL.split("/"); + var count; + if (UserFolderURL.endsWith('/')) + count = folderArray.length - 2; + else + count = folderArray.length - 1; + folderArray[count] = escape(user); - return folderArray.join("/"); + return folderArray.join("/"); } /* folder creation */ function createFolder(name, okCB, notOkCB) { - if (name) { - if (document.newFolderAjaxRequest) { - document.newFolderAjaxRequest.aborted = true; - document.newFolderAjaxRequest.abort(); - } - var url = ApplicationBaseURL + "/createFolder?name=" + name; - document.newFolderAjaxRequest - = triggerAjaxRequest(url, createFolderCallback, - {name: name, - okCB: okCB, - notOkCB: notOkCB}); - } + if (name) { + if (document.newFolderAjaxRequest) { + document.newFolderAjaxRequest.aborted = true; + document.newFolderAjaxRequest.abort(); + } + var url = ApplicationBaseURL + "/createFolder?name=" + name; + document.newFolderAjaxRequest + = triggerAjaxRequest(url, createFolderCallback, + {name: name, + okCB: okCB, + notOkCB: notOkCB}); + } } function createFolderCallback(http) { - if (http.readyState == 4) { - var data = http.callbackData; - if (http.status == 201) { - if (data.okCB) - data.okCB(data.name, "/" + http.responseText, UserLogin); - } - else { - if (data.notOkCB) - data.notOkCB(name); - else - log("ajax problem:" + http.status); - } - } + if (http.readyState == 4) { + var data = http.callbackData; + if (http.status == 201) { + if (data.okCB) + data.okCB(data.name, "/" + http.responseText, UserLogin); + } + else { + if (data.notOkCB) + data.notOkCB(name); + else + log("ajax problem:" + http.status); + } + } } function onFinalLoadHandler(event) { - var safetyNet = $("javascriptSafetyNet"); - if (safetyNet) - safetyNet.parentNode.removeChild(safetyNet); + var safetyNet = $("javascriptSafetyNet"); + if (safetyNet) + safetyNet.parentNode.removeChild(safetyNet); } function parent$(element) { - return this.opener.document.getElementById(element); + return this.opener.document.getElementById(element); } /* stubs */ @@ -1689,7 +1689,7 @@ function getMenus() { } function onHeaderClick(event) { - window.alert("generic headerClick"); + window.alert("generic headerClick"); } document.observe("dom:loaded", onLoadHandler);