From b89bcb1a939d6e32c3442d712089fb38c276b8cc Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Sun, 19 Jul 2009 16:41:42 +0000 Subject: [PATCH] Monotone-Parent: ae3345097f59fc699c864086217dff63e641ee3d Monotone-Revision: 5122dba2cf6d25cecc6935ab5313e950bc38b7a8 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2009-07-19T16:41:42 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/ContactsUI.js | 2 +- UI/WebServerResources/HTMLElement.js | 2 +- UI/WebServerResources/HTMLInputElement.js | 2 +- UI/WebServerResources/HTMLTableElement.js | 2 +- UI/WebServerResources/HTMLUListElement.js | 2 +- .../JavascriptAPIExtensions.js | 2 +- UI/WebServerResources/MailerUI.js | 2 +- UI/WebServerResources/MailerUIdTree.js | 2 +- UI/WebServerResources/SOGoDragHandles.js | 2 +- UI/WebServerResources/SOGoRootPage.js | 2 +- UI/WebServerResources/SchedulerUI.js | 3082 ++++++++--------- UI/WebServerResources/UIxAclEditor.js | 2 +- UI/WebServerResources/UIxAppointmentEditor.js | 2 +- UI/WebServerResources/UIxAttendeesEditor.js | 2 +- .../UIxCalUserRightsEditor.js | 2 +- .../UIxCalendarProperties.js | 2 +- UI/WebServerResources/UIxColorPicker.js | 2 +- UI/WebServerResources/UIxComponentEditor.js | 2 +- UI/WebServerResources/UIxContactEditor.js | 2 +- .../UIxContactsUserFolders.js | 2 +- .../UIxContactsUserRightsEditor.js | 2 +- UI/WebServerResources/UIxMailEditor.js | 2 +- UI/WebServerResources/UIxMailPopupView.js | 2 +- UI/WebServerResources/UIxMailToSelection.js | 2 +- .../UIxMailUserRightsEditor.js | 2 +- UI/WebServerResources/UIxMailView.js | 2 +- UI/WebServerResources/UIxOccurenceDialog.js | 2 +- UI/WebServerResources/UIxPreferences.js | 2 +- UI/WebServerResources/UIxRecurrenceEditor.js | 2 +- UI/WebServerResources/UIxReminderEditor.js | 3 +- UI/WebServerResources/UIxTaskEditor.js | 2 +- UI/WebServerResources/dtree.js | 1 + UI/WebServerResources/generic.js | 3 +- UI/WebServerResources/js_color_picker_v2.js | 1 + UI/WebServerResources/layout2or3_xlib.js | 5 +- UI/WebServerResources/prototype.js | 1 + UI/WebServerResources/skycalendar.js | 1 + UI/WebServerResources/tablekit-sogo.js | 2 + UI/WebServerResources/tablekit-trueresize.js | 202 +- UI/WebServerResources/tablekit.js | 1 + 40 files changed, 1686 insertions(+), 1674 deletions(-) diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index d0df7cf52..ad96d3969 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* JavaScript for SOGoContacts */ var cachedContacts = {}; diff --git a/UI/WebServerResources/HTMLElement.js b/UI/WebServerResources/HTMLElement.js index 0a1fb1bc2..b4616bde6 100644 --- a/UI/WebServerResources/HTMLElement.js +++ b/UI/WebServerResources/HTMLElement.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* custom extensions to the DOM api */ Element.addMethods( diff --git a/UI/WebServerResources/HTMLInputElement.js b/UI/WebServerResources/HTMLInputElement.js index 6a142b490..8de92b879 100644 --- a/UI/WebServerResources/HTMLInputElement.js +++ b/UI/WebServerResources/HTMLInputElement.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ Form.Element.Methods._replicate = function(element) { element = $(element); diff --git a/UI/WebServerResources/HTMLTableElement.js b/UI/WebServerResources/HTMLTableElement.js index 02b1bc478..30e0661cd 100644 --- a/UI/WebServerResources/HTMLTableElement.js +++ b/UI/WebServerResources/HTMLTableElement.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ Element.addMethods({ getSelectedRows: function(element) { diff --git a/UI/WebServerResources/HTMLUListElement.js b/UI/WebServerResources/HTMLUListElement.js index 5c7c290fb..fb51ce036 100644 --- a/UI/WebServerResources/HTMLUListElement.js +++ b/UI/WebServerResources/HTMLUListElement.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ //HTMLUListElement.prototype.getSelectedRows = function() { // return this.getSelectedNodes(); diff --git a/UI/WebServerResources/JavascriptAPIExtensions.js b/UI/WebServerResources/JavascriptAPIExtensions.js index 091363b05..c0e0e5beb 100644 --- a/UI/WebServerResources/JavascriptAPIExtensions.js +++ b/UI/WebServerResources/JavascriptAPIExtensions.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ String.prototype.trim = function() { return this.replace(/(^\s+|\s+$)/g, ''); diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index cecbba7a7..0a7aa53b4 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* JavaScript for SOGoMail */ var accounts = {}; diff --git a/UI/WebServerResources/MailerUIdTree.js b/UI/WebServerResources/MailerUIdTree.js index 13854065b..f1839fca7 100644 --- a/UI/WebServerResources/MailerUIdTree.js +++ b/UI/WebServerResources/MailerUIdTree.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ var MailerUIdTreeExtension = { elementCounter: 1, diff --git a/UI/WebServerResources/SOGoDragHandles.js b/UI/WebServerResources/SOGoDragHandles.js index ce02302cd..f11edc050 100644 --- a/UI/WebServerResources/SOGoDragHandles.js +++ b/UI/WebServerResources/SOGoDragHandles.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ var SOGoDragHandlesInterface = { leftMargin: 180, diff --git a/UI/WebServerResources/SOGoRootPage.js b/UI/WebServerResources/SOGoRootPage.js index 088e94f4a..88382db04 100644 --- a/UI/WebServerResources/SOGoRootPage.js +++ b/UI/WebServerResources/SOGoRootPage.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function initLogin() { var date = new Date(); diff --git a/UI/WebServerResources/SchedulerUI.js b/UI/WebServerResources/SchedulerUI.js index e2d17e58b..6133426bc 100644 --- a/UI/WebServerResources/SchedulerUI.js +++ b/UI/WebServerResources/SchedulerUI.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* JavaScript for SOGoCalendar */ @@ -26,2060 +26,2060 @@ var calendarEvents = null; var userStates = [ "needs-action", "accepted", "declined", "tentative" ]; function newEvent(sender, type) { - var day = $(sender).readAttribute("day"); - if (!day) - day = currentDay; - var hour = sender.readAttribute("hour"); - var folder = getSelectedFolder(); - var folderID = folder.readAttribute("id"); - var urlstr = ApplicationBaseURL + folderID + "/new" + type; - var params = []; - if (day) - params.push("day=" + day); - if (hour) - params.push("hm=" + hour); - if (params.length > 0) - urlstr += "?" + params.join("&"); + var day = $(sender).readAttribute("day"); + if (!day) + day = currentDay; + var hour = sender.readAttribute("hour"); + var folder = getSelectedFolder(); + var folderID = folder.readAttribute("id"); + var urlstr = ApplicationBaseURL + folderID + "/new" + type; + var params = []; + if (day) + params.push("day=" + day); + if (hour) + params.push("hm=" + hour); + if (params.length > 0) + urlstr += "?" + params.join("&"); - window.open(urlstr, "", "width=490,height=470,resizable=0"); + window.open(urlstr, "", "width=490,height=470,resizable=0"); - return false; /* stop following the link */ + return false; /* stop following the link */ } function getSelectedFolder() { - var folder; - var list = $("calendarList"); - var nodes = list.getSelectedRows(); - if (nodes.length > 0) - folder = nodes[0]; - else - folder = list.down("li"); + var folder; + var list = $("calendarList"); + var nodes = list.getSelectedRows(); + if (nodes.length > 0) + folder = nodes[0]; + else + folder = list.down("li"); - return folder; + return folder; } function onMenuNewEventClick(event) { - newEvent(this, "event"); + newEvent(this, "event"); } function onMenuNewTaskClick(event) { - newEvent(this, "task"); + newEvent(this, "task"); } function _editEventId(id, calendar, recurrence) { - var targetname = "SOGo_edit_" + id; - var urlstr = ApplicationBaseURL + calendar + "/" + id; - if (recurrence) { - urlstr += "/" + recurrence; - targetname += recurrence; - } - urlstr += "/edit"; - var win = window.open(urlstr, "_blank", - "width=490,height=470,resizable=0"); - if (win) - win.focus(); + var targetname = "SOGo_edit_" + id; + var urlstr = ApplicationBaseURL + calendar + "/" + id; + if (recurrence) { + urlstr += "/" + recurrence; + targetname += recurrence; + } + urlstr += "/edit"; + var win = window.open(urlstr, "_blank", + "width=490,height=470,resizable=0"); + if (win) + win.focus(); } function editEvent() { - if (listOfSelection) { - var nodes = listOfSelection.getSelectedRows(); + if (listOfSelection) { + var nodes = listOfSelection.getSelectedRows(); - if (nodes.length == 0) { - window.alert(labels["Please select an event or a task."]); - return false; + if (nodes.length == 0) { + window.alert(labels["Please select an event or a task."]); + return false; + } + + for (var i = 0; i < nodes.length; i++) + _editEventId(nodes[i].cname, + nodes[i].calendar); + } else if (selectedCalendarCell) { + if (selectedCalendarCell[0].recurrenceTime && !selectedCalendarCell[0].isException) + _editRecurrenceDialog(selectedCalendarCell[0], "confirmEditing"); + else + _editEventId(selectedCalendarCell[0].cname, + selectedCalendarCell[0].calendar); + } else { + window.alert(labels["Please select an event or a task."]); } - for (var i = 0; i < nodes.length; i++) - _editEventId(nodes[i].cname, - nodes[i].calendar); - } else if (selectedCalendarCell) { - if (selectedCalendarCell[0].recurrenceTime && !selectedCalendarCell[0].isException) - _editRecurrenceDialog(selectedCalendarCell[0], "confirmEditing"); - else - _editEventId(selectedCalendarCell[0].cname, - selectedCalendarCell[0].calendar); - } else { - window.alert(labels["Please select an event or a task."]); - } - - return false; /* stop following the link */ + return false; /* stop following the link */ } function _batchDeleteEvents() { - var events = eventsToDelete.shift(); - var calendar = calendarsOfEventsToDelete.shift(); - var urlstr = (ApplicationBaseURL + calendar - + "/batchDelete?ids=" + events.join('/')); - document.deleteEventAjaxRequest = triggerAjaxRequest(urlstr, - deleteEventCallback, - { calendar: calendar, - events: events }); + var events = eventsToDelete.shift(); + var calendar = calendarsOfEventsToDelete.shift(); + var urlstr = (ApplicationBaseURL + calendar + + "/batchDelete?ids=" + events.join('/')); + document.deleteEventAjaxRequest = triggerAjaxRequest(urlstr, + deleteEventCallback, + { calendar: calendar, + events: events }); } function deleteEvent() { - if (listOfSelection) { - var nodes = listOfSelection.getSelectedRows(); - if (nodes.length > 0) { - var label = ""; - if (listOfSelection == $("tasksList")) - label = labels["taskDeleteConfirmation"]; - else - label = labels["eventDeleteConfirmation"]; + if (listOfSelection) { + var nodes = listOfSelection.getSelectedRows(); + if (nodes.length > 0) { + var label = ""; + if (listOfSelection == $("tasksList")) + label = labels["taskDeleteConfirmation"]; + else + label = labels["eventDeleteConfirmation"]; - if (nodes.length == 1 - && nodes[0].recurrenceTime) { - _editRecurrenceDialog(nodes[0], "confirmDeletion"); - } - else { - if (confirm(label)) { - if (document.deleteEventAjaxRequest) { - document.deleteEventAjaxRequest.aborted = true; - document.deleteEventAjaxRequest.abort(); - } - var sortedNodes = []; - var calendars = []; + if (nodes.length == 1 + && nodes[0].recurrenceTime) { + _editRecurrenceDialog(nodes[0], "confirmDeletion"); + } + else { + if (confirm(label)) { + if (document.deleteEventAjaxRequest) { + document.deleteEventAjaxRequest.aborted = true; + document.deleteEventAjaxRequest.abort(); + } + var sortedNodes = []; + var calendars = []; - for (var i = 0; i < nodes.length; i++) { - var calendar = nodes[i].calendar; - if (!sortedNodes[calendar]) { - sortedNodes[calendar] = []; - calendars.push(calendar); - } - sortedNodes[calendar].push(nodes[i].cname); - } - for (var i = 0; i < calendars.length; i++) { - calendarsOfEventsToDelete.push(calendars[i]); - eventsToDelete.push(sortedNodes[calendars[i]]); - } - _batchDeleteEvents(); - } - } - } else { - window.alert(labels["Please select an event or a task."]); + for (var i = 0; i < nodes.length; i++) { + var calendar = nodes[i].calendar; + if (!sortedNodes[calendar]) { + sortedNodes[calendar] = []; + calendars.push(calendar); + } + sortedNodes[calendar].push(nodes[i].cname); + } + for (var i = 0; i < calendars.length; i++) { + calendarsOfEventsToDelete.push(calendars[i]); + eventsToDelete.push(sortedNodes[calendars[i]]); + } + _batchDeleteEvents(); + } + } + } else { + window.alert(labels["Please select an event or a task."]); + } } - } - else if (selectedCalendarCell) { - if (selectedCalendarCell[0].recurrenceTime) { - _editRecurrenceDialog(selectedCalendarCell[0], "confirmDeletion"); + else if (selectedCalendarCell) { + if (selectedCalendarCell[0].recurrenceTime) { + _editRecurrenceDialog(selectedCalendarCell[0], "confirmDeletion"); + } + else { + var label = labels["eventDeleteConfirmation"]; + if (confirm(label)) { + if (document.deleteEventAjaxRequest) { + document.deleteEventAjaxRequest.aborted = true; + document.deleteEventAjaxRequest.abort(); + } + eventsToDelete.push([selectedCalendarCell[0].cname]); + calendarsOfEventsToDelete.push(selectedCalendarCell[0].calendar); + _batchDeleteEvents(); + } + } } - else { - var label = labels["eventDeleteConfirmation"]; - if (confirm(label)) { - if (document.deleteEventAjaxRequest) { - document.deleteEventAjaxRequest.aborted = true; - document.deleteEventAjaxRequest.abort(); - } - eventsToDelete.push([selectedCalendarCell[0].cname]); - calendarsOfEventsToDelete.push(selectedCalendarCell[0].calendar); - _batchDeleteEvents(); - } - } - } - else - window.alert(labels["Please select an event or a task."]); + else + window.alert(labels["Please select an event or a task."]); - return false; + return false; } function modifyEvent(sender, modification) { - var currentLocation = '' + window.location; - var arr = currentLocation.split("/"); - arr[arr.length-1] = modification; + var currentLocation = '' + window.location; + var arr = currentLocation.split("/"); + arr[arr.length-1] = modification; - document.modifyEventAjaxRequest = triggerAjaxRequest(arr.join("/"), - modifyEventCallback, - modification); + document.modifyEventAjaxRequest = triggerAjaxRequest(arr.join("/"), + modifyEventCallback, + modification); - return false; + return false; } function closeInvitationWindow() { - var closeDiv = document.createElement("div"); - document.body.appendChild(closeDiv); - closeDiv.addClassName("javascriptPopupBackground"); + var closeDiv = document.createElement("div"); + document.body.appendChild(closeDiv); + closeDiv.addClassName("javascriptPopupBackground"); - var closePseudoWin = document.createElement("div"); - document.body.appendChild(closePseudoWin); - closePseudoWin.addClassName("javascriptMessagePseudoTopWindow"); - closePseudoWin.style.top = "0px;"; - closePseudoWin.style.left = "0px;"; - closePseudoWin.style.right = "0px;"; - closePseudoWin.appendChild(document.createTextNode(labels["closeThisWindowMessage"])); + var closePseudoWin = document.createElement("div"); + document.body.appendChild(closePseudoWin); + closePseudoWin.addClassName("javascriptMessagePseudoTopWindow"); + closePseudoWin.style.top = "0px;"; + closePseudoWin.style.left = "0px;"; + closePseudoWin.style.right = "0px;"; + closePseudoWin.appendChild(document.createTextNode(labels["closeThisWindowMessage"])); - var calLink = document.createElement("a"); - closePseudoWin.appendChild(calLink); - calLink.href = ApplicationBaseURL; - calLink.appendChild(document.createTextNode(labels["Calendar"].toLowerCase())); + var calLink = document.createElement("a"); + closePseudoWin.appendChild(calLink); + calLink.href = ApplicationBaseURL; + calLink.appendChild(document.createTextNode(labels["Calendar"].toLowerCase())); } function modifyEventCallback(http) { - if (http.readyState == 4) { - if (http.status == 200) { - var mailInvitation = queryParameters["mail-invitation"]; - if (mailInvitation && mailInvitation.toLowerCase() == "yes") - closeInvitationWindow(); - else { - window.opener.setTimeout("refreshEventsAndDisplay();", 100); - window.setTimeout("window.close();", 100); - } + if (http.readyState == 4) { + if (http.status == 200) { + var mailInvitation = queryParameters["mail-invitation"]; + if (mailInvitation && mailInvitation.toLowerCase() == "yes") + closeInvitationWindow(); + else { + window.opener.setTimeout("refreshEventsAndDisplay();", 100); + window.setTimeout("window.close();", 100); + } + } + else { + // log("showing alert..."); + window.alert(labels["eventPartStatModificationError"]); + } + document.modifyEventAjaxRequest = null; } - else { - // log("showing alert..."); - window.alert(labels["eventPartStatModificationError"]); - } - document.modifyEventAjaxRequest = null; - } } function _deleteCalendarEventBlocks(calendar, cname) { - var events = calendarEvents[calendar]; - if (events) { - var occurences = events[cname]; - if (occurences) - for (var i = 0; i < occurences.length; i++) { - var nodes = occurences[i].blocks; - for (var j = 0; j < nodes.length; j++) { - var node = nodes[j]; - node.parentNode.removeChild(node); - } - } - } + var events = calendarEvents[calendar]; + if (events) { + var occurences = events[cname]; + if (occurences) + for (var i = 0; i < occurences.length; i++) { + var nodes = occurences[i].blocks; + for (var j = 0; j < nodes.length; j++) { + var node = nodes[j]; + node.parentNode.removeChild(node); + } + } + } } function _deleteEventFromTables(basename) { - var tables = [ $("eventsList"), $("tasksList") ]; - for (var i = 0; i < 2; i++) { - var table = tables[i]; - if (table.tBodies) - rows = table.tBodies[0].rows; - else - rows = $(table).childNodesWithTag("li"); - for (var j = rows.length; j > 0; j--) { - var row = $(rows[j - 1]); - var id = row.getAttribute("id"); - if (id.indexOf(basename) == 0) - row.parentNode.removeChild(row); + var tables = [ $("eventsList"), $("tasksList") ]; + for (var i = 0; i < 2; i++) { + var table = tables[i]; + if (table.tBodies) + rows = table.tBodies[0].rows; + else + rows = $(table).childNodesWithTag("li"); + for (var j = rows.length; j > 0; j--) { + var row = $(rows[j - 1]); + var id = row.getAttribute("id"); + if (id.indexOf(basename) == 0) + row.parentNode.removeChild(row); + } } - } } function deleteEventCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - var isTask = false; - var calendar = http.callbackData.calendar; - var events = http.callbackData.events; + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + var isTask = false; + var calendar = http.callbackData.calendar; + var events = http.callbackData.events; - // log("calendar: " + calendar + "\n"); - // log("events: " + events.join(", " ) + "\n"); - for (var i = 0; i < events.length; i++) { - var cname = events[i]; - _deleteCalendarEventBlocks(calendar, cname); - _deleteEventFromTables(calendar + "-" + cname); - delete calendarEvents[calendar][cname]; - } + // log("calendar: " + calendar + "\n"); + // log("events: " + events.join(", " ) + "\n"); + for (var i = 0; i < events.length; i++) { + var cname = events[i]; + _deleteCalendarEventBlocks(calendar, cname); + _deleteEventFromTables(calendar + "-" + cname); + delete calendarEvents[calendar][cname]; + } - if (eventsToDelete.length) - _batchDeleteEvents(); - else { - document.deleteEventAjaxRequest = null; - } + if (eventsToDelete.length) + _batchDeleteEvents(); + else { + document.deleteEventAjaxRequest = null; + } + } + else if (parseInt(http.status) == 403) + window.alert(clabels["You don't have the required privileges to perform the operation."]); + else + log ("deleteEventCallback Ajax error (" + http.status + ")"); } - else if (parseInt(http.status) == 403) - window.alert(clabels["You don't have the required privileges to perform the operation."]); - else - log ("deleteEventCallback Ajax error (" + http.status + ")"); - } } function getEventById(cname, owner) { - var event = null; + var event = null; - if (calendarEvents) { - if (!owner) - owner = UserLogin; - var userEvents = calendarEvents[owner]; - if (userEvents) - event = userEvents[cname]; - } + if (calendarEvents) { + if (!owner) + owner = UserLogin; + var userEvents = calendarEvents[owner]; + if (userEvents) + event = userEvents[cname]; + } - return event; + return event; } function _editRecurrenceDialog(eventDiv, method) { - var targetname = "SOGo_edit_" + eventDiv.cname + eventDiv.recurrenceTime; - var urlstr = (ApplicationBaseURL + eventDiv.calendar + "/" + eventDiv.cname - + "/occurence" + eventDiv.recurrenceTime + "/" + method); - var win = window.open(urlstr, "_blank", - "width=490,height=70,resizable=0"); - if (win) - win.focus(); + var targetname = "SOGo_edit_" + eventDiv.cname + eventDiv.recurrenceTime; + var urlstr = (ApplicationBaseURL + eventDiv.calendar + "/" + eventDiv.cname + + "/occurence" + eventDiv.recurrenceTime + "/" + method); + var win = window.open(urlstr, "_blank", + "width=490,height=70,resizable=0"); + if (win) + win.focus(); } function onViewEvent(event) { - if (event.detail == 2) return; - var url = ApplicationBaseURL + this.calendar + "/" + this.cname; + if (event.detail == 2) return; + var url = ApplicationBaseURL + this.calendar + "/" + this.cname; - if (typeof this.recurrenceTime != "undefined") - url += "/occurence" + this.recurrenceTime; - url += "/view"; - if (document.viewEventAjaxRequest) { - document.viewEventAjaxRequest.aborted = true; - document.viewEventAjaxRequest.abort(); - } - document.viewEventAjaxRequest = triggerAjaxRequest(url, onViewEventCallback, this); + if (typeof this.recurrenceTime != "undefined") + url += "/occurence" + this.recurrenceTime; + url += "/view"; + if (document.viewEventAjaxRequest) { + document.viewEventAjaxRequest.aborted = true; + document.viewEventAjaxRequest.abort(); + } + document.viewEventAjaxRequest = triggerAjaxRequest(url, onViewEventCallback, this); } function onViewEventCallback(http) { - if (http.readyState == 4 - && http.status == 200) { - if (http.responseText.length > 0) { - var data = http.responseText.evalJSON(true); - // $H(data).keys().each(function(key) { - // log (key + " = " + data[key]); - // }); - var cell = http.callbackData; - var cellPosition = cell.cumulativeOffset(); - var cellDimensions = cell.getDimensions(); - var div = $("eventDialog"); - var divDimensions = div.getDimensions(); - var view; - var left = cellPosition[0]; - var top = cellPosition[1]; + if (http.readyState == 4 + && http.status == 200) { + if (http.responseText.length > 0) { + var data = http.responseText.evalJSON(true); + // $H(data).keys().each(function(key) { + // log (key + " = " + data[key]); + // }); + var cell = http.callbackData; + var cellPosition = cell.cumulativeOffset(); + var cellDimensions = cell.getDimensions(); + var div = $("eventDialog"); + var divDimensions = div.getDimensions(); + var view; + var left = cellPosition[0]; + var top = cellPosition[1]; - if (currentView != "monthview") { - view = $("daysView"); - var viewPosition = view.cumulativeOffset(); - if (parseInt(data["isAllDay"]) == 0) { - top -= view.scrollTop; - if (viewPosition[1] > top + 2) { - view.stopObserving("scroll", onBodyClickHandler); - view.scrollTop = cell.offsetTop; - top = viewPosition[1]; - Event.observe.delay(0.1, view, "scroll", onBodyClickHandler); - } - } - } - else { - view = $("calendarView"); - top -= cell.up("DIV.day").scrollTop; - } + if (currentView != "monthview") { + view = $("daysView"); + var viewPosition = view.cumulativeOffset(); + if (parseInt(data["isAllDay"]) == 0) { + top -= view.scrollTop; + if (viewPosition[1] > top + 2) { + view.stopObserving("scroll", onBodyClickHandler); + view.scrollTop = cell.offsetTop; + top = viewPosition[1]; + Event.observe.delay(0.1, view, "scroll", onBodyClickHandler); + } + } + } + else { + view = $("calendarView"); + top -= cell.up("DIV.day").scrollTop; + } - if (left > parseInt(window.width()*0.75)) { - left = left - divDimensions["width"] + 10; - div.removeClassName("left"); - div.addClassName("right"); - } - else { - left = left + cellDimensions["width"] - parseInt(cellDimensions["width"]/3); - div.removeClassName("right"); - div.addClassName("left"); - } + if (left > parseInt(window.width()*0.75)) { + left = left - divDimensions["width"] + 10; + div.removeClassName("left"); + div.addClassName("right"); + } + else { + left = left + cellDimensions["width"] - parseInt(cellDimensions["width"]/3); + div.removeClassName("right"); + div.addClassName("left"); + } - // Put the event's data in the DIV - div.down("h1").update(data["summary"]); - if (parseInt(data["isAllDay"]) == 0) { - div.down("P", 0).down("SPAN", 1).update(data["startTime"]); - div.down("P", 0).show(); - } else - div.down("P", 0).hide(); - if (data["location"].length) { - div.down("P", 1).down("SPAN", 1).update(data["location"]); - div.down("P", 1).show(); - } else - div.down("P", 1).hide(); + // Put the event's data in the DIV + div.down("h1").update(data["summary"]); + if (parseInt(data["isAllDay"]) == 0) { + div.down("P", 0).down("SPAN", 1).update(data["startTime"]); + div.down("P", 0).show(); + } else + div.down("P", 0).hide(); + if (data["location"].length) { + div.down("P", 1).down("SPAN", 1).update(data["location"]); + div.down("P", 1).show(); + } else + div.down("P", 1).hide(); - if (data["description"].length) { - div.down("P", 2).update(data["description"].replace(/\r\n/g, "
")); - div.down("P", 2).show(); - } else - div.down("P", 2).hide(); + if (data["description"].length) { + div.down("P", 2).update(data["description"].replace(/\r\n/g, "
")); + div.down("P", 2).show(); + } else + div.down("P", 2).hide(); - div.setStyle({ left: left + "px", - top: top + "px" }); - div.show(); + div.setStyle({ left: left + "px", + top: top + "px" }); + div.show(); + } + } + else { + log("onViewEventCallback ajax error (" + http.status + "): " + http.url); } - } - else { - log("onViewEventCallback ajax error (" + http.status + "): " + http.url); - } } function editDoubleClickedEvent(event) { - if (this.isException && this.recurrenceTime) - _editEventId(this.cname, this.calendar, "occurence" + this.recurrenceTime); - else if (this.recurrenceTime) - _editRecurrenceDialog(this, "confirmEditing"); - else - _editEventId(this.cname, this.calendar); + if (this.isException && this.recurrenceTime) + _editEventId(this.cname, this.calendar, "occurence" + this.recurrenceTime); + else if (this.recurrenceTime) + _editRecurrenceDialog(this, "confirmEditing"); + else + _editEventId(this.cname, this.calendar); - Event.stop(event); + Event.stop(event); } function performEventEdition(folder, event, recurrence) { - _editEventId(event, folder, recurrence); + _editEventId(event, folder, recurrence); } function performEventDeletion(folder, event, recurrence) { - if (calendarEvents) { - if (recurrence) { - // Only one recurrence - var occurenceTime = recurrence.substring(9); - var nodes = _eventBlocksMatching(folder, event, occurenceTime); - var urlstr = ApplicationBaseURL + folder + "/" + event + "/" + recurrence + "/delete"; + if (calendarEvents) { + if (recurrence) { + // Only one recurrence + var occurenceTime = recurrence.substring(9); + var nodes = _eventBlocksMatching(folder, event, occurenceTime); + var urlstr = ApplicationBaseURL + folder + "/" + event + "/" + recurrence + "/delete"; - if (nodes) - document.deleteEventAjaxRequest = triggerAjaxRequest(urlstr, - performDeleteEventCallback, - { nodes: nodes, - occurence: occurenceTime }); + if (nodes) + document.deleteEventAjaxRequest = triggerAjaxRequest(urlstr, + performDeleteEventCallback, + { nodes: nodes, + occurence: occurenceTime }); + } + else { + // All recurrences + if (document.deleteEventAjaxRequest) { + document.deleteEventAjaxRequest.aborted = true; + document.deleteEventAjaxRequest.abort(); + } + eventsToDelete.push([event]); + calendarsOfEventsToDelete.push(folder); + _batchDeleteEvents(); + } } - else { - // All recurrences - if (document.deleteEventAjaxRequest) { - document.deleteEventAjaxRequest.aborted = true; - document.deleteEventAjaxRequest.abort(); - } - eventsToDelete.push([event]); - calendarsOfEventsToDelete.push(folder); - _batchDeleteEvents(); - } - } } function performDeleteEventCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - var occurenceTime = http.callbackData.occurence; - var nodes = http.callbackData.nodes; - var cname = nodes[0].cname; - var calendar = nodes[0].calendar; - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - node.parentNode.removeChild(node); - } - var basename = calendar + "-" + cname; - if (occurenceTime) { - var row = $(basename + "-" + occurenceTime); - // log("rowID: " + basename + "-" + occurenceTime); - if (row) - row.parentNode.removeChild(row); + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + var occurenceTime = http.callbackData.occurence; + var nodes = http.callbackData.nodes; + var cname = nodes[0].cname; + var calendar = nodes[0].calendar; + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + node.parentNode.removeChild(node); + } + var basename = calendar + "-" + cname; + if (occurenceTime) { + var row = $(basename + "-" + occurenceTime); + // log("rowID: " + basename + "-" + occurenceTime); + if (row) + row.parentNode.removeChild(row); - // Update calendar events cache - var occurences = calendarEvents[calendar][cname]; - var newOccurences = []; - for (var i = 0; i < occurences.length; i++) { - var occurence = occurences[i]; - if (occurence[14] != occurenceTime) - newOccurences.push(occurence); - } - calendarEvents[calendar][cname] = newOccurences; - } - else { - // log("basename: " + basename); - _deleteEventFromTables(basename); - delete calendarEvents[calendar][cname]; - } + // Update calendar events cache + var occurences = calendarEvents[calendar][cname]; + var newOccurences = []; + for (var i = 0; i < occurences.length; i++) { + var occurence = occurences[i]; + if (occurence[14] != occurenceTime) + newOccurences.push(occurence); + } + calendarEvents[calendar][cname] = newOccurences; + } + else { + // log("basename: " + basename); + _deleteEventFromTables(basename); + delete calendarEvents[calendar][cname]; + } + } } - } } function onSelectAll() { - var list = $("eventsList"); - list.selectRowsMatchingClass("eventRow"); + var list = $("eventsList"); + list.selectRowsMatchingClass("eventRow"); - return false; + return false; } function onDaySelect(node) { - var day = node.getAttribute('day'); - var needRefresh = (listFilter == 'view_selectedday' - && day != currentDay); + var day = node.getAttribute('day'); + var needRefresh = (listFilter == 'view_selectedday' + && day != currentDay); - var td = $(node).getParentWithTagName("td"); - var table = $(td).getParentWithTagName("table"); + var td = $(node).getParentWithTagName("td"); + var table = $(td).getParentWithTagName("table"); - // log ("table.selected: " + table.selected); + // log ("table.selected: " + table.selected); - if (document.selectedDate) - document.selectedDate.deselect(); + if (document.selectedDate) + document.selectedDate.deselect(); - td.selectElement(); - document.selectedDate = td; + td.selectElement(); + document.selectedDate = td; - changeCalendarDisplay( { "day": day } ); - currentDay = day; - if (needRefresh) - refreshEvents(); + changeCalendarDisplay( { "day": day } ); + currentDay = day; + if (needRefresh) + refreshEvents(); - return false; + return false; } function onDateSelectorGotoMonth(event) { - var day = this.getAttribute("date"); + var day = this.getAttribute("date"); - changeDateSelectorDisplay(day, true); + changeDateSelectorDisplay(day, true); - Event.stop(event); + Event.stop(event); } function onCalendarGotoDay(node) { - var day = node.getAttribute("date"); - var needRefresh = (listFilter == 'view_selectedday' - && day != currentDay); + var day = node.getAttribute("date"); + var needRefresh = (listFilter == 'view_selectedday' + && day != currentDay); - changeDateSelectorDisplay(day); - changeCalendarDisplay( { "day": day } ); - if (needRefresh) - refreshEvents(); + changeDateSelectorDisplay(day); + changeCalendarDisplay( { "day": day } ); + if (needRefresh) + refreshEvents(); - return false; + return false; } function gotoToday() { - changeDateSelectorDisplay(''); - changeCalendarDisplay(); + changeDateSelectorDisplay(''); + changeCalendarDisplay(); - return false; + return false; } function setDateSelectorContent(content) { - var div = $("dateSelectorView"); + var div = $("dateSelectorView"); - div.innerHTML = content; - if (currentDay.length > 0) - restoreCurrentDaySelection(div); + div.innerHTML = content; + if (currentDay.length > 0) + restoreCurrentDaySelection(div); - initDateSelectorEvents(); + initDateSelectorEvents(); } function dateSelectorCallback(http) { - if (http.readyState == 4 - && http.status == 200) { - document.dateSelectorAjaxRequest = null; - var content = http.responseText; - setDateSelectorContent(content); - cachedDateSelectors[http.callbackData] = content; - } - else - log ("dateSelectorCallback Ajax error"); + if (http.readyState == 4 + && http.status == 200) { + document.dateSelectorAjaxRequest = null; + var content = http.responseText; + setDateSelectorContent(content); + cachedDateSelectors[http.callbackData] = content; + } + else + log ("dateSelectorCallback Ajax error"); } function eventsListCallback(http) { - if (http.readyState == 4 - && http.status == 200) { - var div = $("eventsListView"); - document.eventsListAjaxRequest = null; - var table = $("eventsList"); - lastClickedRow = -1; // from generic.js + if (http.readyState == 4 + && http.status == 200) { + var div = $("eventsListView"); + document.eventsListAjaxRequest = null; + var table = $("eventsList"); + lastClickedRow = -1; // from generic.js - if (http.responseText.length > 0) { - var data = http.responseText.evalJSON(true); - for (var i = 0; i < data.length; i++) { - var row = $(document.createElement("tr")); - table.tBodies[0].appendChild(row); - row.addClassName("eventRow"); - var rTime = data[i][14]; - var id = escape(data[i][1] + "-" + data[i][0]); - if (rTime) - id += "-" + escape(rTime); - row.setAttribute("id", id); - row.cname = escape(data[i][0]); - row.calendar = escape(data[i][1]); - if (rTime) - row.recurrenceTime = escape(rTime); - row.isException = data[i][15]; - var startDate = new Date(); - startDate.setTime(data[i][4] * 1000); - row.day = startDate.getDayString(); - row.hour = startDate.getHourString(); - row.observe("mousedown", onRowClick); - row.observe("selectstart", listRowMouseDownHandler); - row.observe("dblclick", editDoubleClickedEvent); - row.attachMenu("eventsListMenu"); + if (http.responseText.length > 0) { + var data = http.responseText.evalJSON(true); + for (var i = 0; i < data.length; i++) { + var row = $(document.createElement("tr")); + table.tBodies[0].appendChild(row); + row.addClassName("eventRow"); + var rTime = data[i][14]; + var id = escape(data[i][1] + "-" + data[i][0]); + if (rTime) + id += "-" + escape(rTime); + row.setAttribute("id", id); + row.cname = escape(data[i][0]); + row.calendar = escape(data[i][1]); + if (rTime) + row.recurrenceTime = escape(rTime); + row.isException = data[i][15]; + var startDate = new Date(); + startDate.setTime(data[i][4] * 1000); + row.day = startDate.getDayString(); + row.hour = startDate.getHourString(); + row.observe("mousedown", onRowClick); + row.observe("selectstart", listRowMouseDownHandler); + row.observe("dblclick", editDoubleClickedEvent); + row.attachMenu("eventsListMenu"); - var td = $(document.createElement("td")); - row.appendChild(td); - td.observe("mousedown", listRowMouseDownHandler, true); - td.appendChild(document.createTextNode(data[i][3])); + var td = $(document.createElement("td")); + row.appendChild(td); + td.observe("mousedown", listRowMouseDownHandler, true); + td.appendChild(document.createTextNode(data[i][3])); - td = $(document.createElement("td")); - row.appendChild(td); - td.observe("mousedown", listRowMouseDownHandler, true); - td.appendChild(document.createTextNode(data[i][16])); + td = $(document.createElement("td")); + row.appendChild(td); + td.observe("mousedown", listRowMouseDownHandler, true); + td.appendChild(document.createTextNode(data[i][16])); - td = $(document.createElement("td")); - row.appendChild(td); - td.observe("mousedown", listRowMouseDownHandler, true); - td.appendChild(document.createTextNode(data[i][17])); + td = $(document.createElement("td")); + row.appendChild(td); + td.observe("mousedown", listRowMouseDownHandler, true); + td.appendChild(document.createTextNode(data[i][17])); - td = $(document.createElement("td")); - row.appendChild(td); - td.observe("mousedown", listRowMouseDownHandler, true); - td.appendChild(document.createTextNode(data[i][6])); - } + td = $(document.createElement("td")); + row.appendChild(td); + td.observe("mousedown", listRowMouseDownHandler, true); + td.appendChild(document.createTextNode(data[i][6])); + } - if (sorting["attribute"] && sorting["attribute"].length > 0) { - var sortHeader = $(sorting["attribute"] + "Header"); + if (sorting["attribute"] && sorting["attribute"].length > 0) { + var sortHeader = $(sorting["attribute"] + "Header"); - if (sortHeader) { - var sortImages = $(table.tHead).select(".sortImage"); - $(sortImages).each(function(item) { - item.remove(); - }); + if (sortHeader) { + var sortImages = $(table.tHead).select(".sortImage"); + $(sortImages).each(function(item) { + item.remove(); + }); - var sortImage = createElement("img", "messageSortImage", "sortImage"); - sortHeader.insertBefore(sortImage, sortHeader.firstChild); - if (sorting["ascending"]) - sortImage.src = ResourcesURL + "/title_sortdown_12x12.png"; - else - sortImage.src = ResourcesURL + "/title_sortup_12x12.png"; - } - } + var sortImage = createElement("img", "messageSortImage", "sortImage"); + sortHeader.insertBefore(sortImage, sortHeader.firstChild); + if (sorting["ascending"]) + sortImage.src = ResourcesURL + "/title_sortdown_12x12.png"; + else + sortImage.src = ResourcesURL + "/title_sortup_12x12.png"; + } + } + } } - } - else - log ("eventsListCallback Ajax error"); + else + log ("eventsListCallback Ajax error"); } function tasksListCallback(http) { - var div = $("tasksListView"); + var div = $("tasksListView"); - if (http.readyState == 4 - && http.status == 200) { - document.tasksListAjaxRequest = null; - var list = $("tasksList"); + if (http.readyState == 4 + && http.status == 200) { + document.tasksListAjaxRequest = null; + var list = $("tasksList"); - if (http.responseText.length > 0) { - var data = http.responseText.evalJSON(true); + if (http.responseText.length > 0) { + var data = http.responseText.evalJSON(true); - for (var i = 0; i < data.length; i++) { - var listItem = $(document.createElement("li")); - list.appendChild(listItem); - listItem.observe("mousedown", listRowMouseDownHandler); - listItem.observe("click", onRowClick); - listItem.observe("dblclick", editDoubleClickedEvent); + for (var i = 0; i < data.length; i++) { + var listItem = $(document.createElement("li")); + list.appendChild(listItem); + listItem.observe("mousedown", listRowMouseDownHandler); + listItem.observe("click", onRowClick); + listItem.observe("dblclick", editDoubleClickedEvent); - var calendar = escape(data[i][1]); - var cname = escape(data[i][0]); - listItem.setAttribute("id", calendar + "-" + cname); - //listItem.addClassName(data[i][5]); // Classification - listItem.addClassName(data[i][6]); - listItem.calendar = calendar; - listItem.addClassName("calendarFolder" + calendar); - listItem.cname = cname; - var input = $(document.createElement("input")); - input.setAttribute("type", "checkbox"); - listItem.appendChild(input); - input.observe("click", updateTaskStatus, true); - input.setAttribute("value", "1"); - if (data[i][2] == 1) - input.setAttribute("checked", "checked"); - $(input).addClassName("checkBox"); + var calendar = escape(data[i][1]); + var cname = escape(data[i][0]); + listItem.setAttribute("id", calendar + "-" + cname); + //listItem.addClassName(data[i][5]); // Classification + listItem.addClassName(data[i][6]); + listItem.calendar = calendar; + listItem.addClassName("calendarFolder" + calendar); + listItem.cname = cname; + var input = $(document.createElement("input")); + input.setAttribute("type", "checkbox"); + listItem.appendChild(input); + input.observe("click", updateTaskStatus, true); + input.setAttribute("value", "1"); + if (data[i][2] == 1) + input.setAttribute("checked", "checked"); + $(input).addClassName("checkBox"); - listItem.appendChild(document.createTextNode(data[i][3])); - } + listItem.appendChild(document.createTextNode(data[i][3])); + } - list.scrollTop = list.previousScroll; + list.scrollTop = list.previousScroll; - if (http.callbackData) { - var selectedNodesId = http.callbackData; - for (var i = 0; i < selectedNodesId.length; i++) { - // log(selectedNodesId[i] + " (" + i + ") is selected"); - $(selectedNodesId[i]).selectElement(); - } - } - else - log ("tasksListCallback: no data"); + if (http.callbackData) { + var selectedNodesId = http.callbackData; + for (var i = 0; i < selectedNodesId.length; i++) { + // log(selectedNodesId[i] + " (" + i + ") is selected"); + $(selectedNodesId[i]).selectElement(); + } + } + else + log ("tasksListCallback: no data"); + } } - } - else - log ("tasksListCallback Ajax error"); + else + log ("tasksListCallback Ajax error"); } function restoreCurrentDaySelection(div) { - var elements = $(div).getElementsByTagName("a"); - var day = null; - var i = 9; - while (!day && i < elements.length) - { - day = elements[i].day; - i++; - } + var elements = $(div).getElementsByTagName("a"); + var day = null; + var i = 9; + while (!day && i < elements.length) + { + day = elements[i].day; + i++; + } - if (day - && day.substr(0, 6) == currentDay.substr(0, 6)) { - for (i = 0; i < elements.length; i++) { - day = elements[i].day; - if (day && day == currentDay) { - var td = $(elements[i]).getParentWithTagName("td"); - if (document.selectedDate) - document.selectedDate.deselect(); - $(td).selectElement(); - document.selectedDate = td; - } + if (day + && day.substr(0, 6) == currentDay.substr(0, 6)) { + for (i = 0; i < elements.length; i++) { + day = elements[i].day; + if (day && day == currentDay) { + var td = $(elements[i]).getParentWithTagName("td"); + if (document.selectedDate) + document.selectedDate.deselect(); + $(td).selectElement(); + document.selectedDate = td; + } + } } - } } function loadPreviousView(event) { - var previousArrow = $$("A.leftNavigationArrow").first(); - onCalendarGotoDay(previousArrow); + var previousArrow = $$("A.leftNavigationArrow").first(); + onCalendarGotoDay(previousArrow); } function loadNextView(event) { - var nextArrow = $$("A.rightNavigationArrow").first(); - onCalendarGotoDay(nextArrow); + var nextArrow = $$("A.rightNavigationArrow").first(); + onCalendarGotoDay(nextArrow); } function changeDateSelectorDisplay(day, keepCurrentDay) { - var url = ApplicationBaseURL + "dateselector"; - if (day) { - if (day.length < 8) - day += "01"; - url += "?day=" + day; - } - - if (day != currentDay) { - if (!keepCurrentDay) - currentDay = day; - - var month = day.substr(0, 6); - if (cachedDateSelectors[month]) { - // log ("restoring cached selector for month: " + month); - setDateSelectorContent(cachedDateSelectors[month]); + var url = ApplicationBaseURL + "dateselector"; + if (day) { + if (day.length < 8) + day += "01"; + url += "?day=" + day; } - else { - // log ("loading selector for month: " + month); - if (document.dateSelectorAjaxRequest) { - document.dateSelectorAjaxRequest.aborted = true; - document.dateSelectorAjaxRequest.abort(); - } - document.dateSelectorAjaxRequest - = triggerAjaxRequest(url, - dateSelectorCallback, - month); + + if (day != currentDay) { + if (!keepCurrentDay) + currentDay = day; + + var month = day.substr(0, 6); + if (cachedDateSelectors[month]) { + // log ("restoring cached selector for month: " + month); + setDateSelectorContent(cachedDateSelectors[month]); + } + else { + // log ("loading selector for month: " + month); + if (document.dateSelectorAjaxRequest) { + document.dateSelectorAjaxRequest.aborted = true; + document.dateSelectorAjaxRequest.abort(); + } + document.dateSelectorAjaxRequest + = triggerAjaxRequest(url, + dateSelectorCallback, + month); + } } - } } function changeCalendarDisplay(data, newView) { - newView = ((newView) ? newView : currentView); - var url = ApplicationBaseURL + newView; - var day = null; - var scrollEvent = null; + newView = ((newView) ? newView : currentView); + var url = ApplicationBaseURL + newView; + var day = null; + var scrollEvent = null; - if (data) { - day = data['day']; - scrollEvent = data['scrollEvent']; - } - - if (!day) - day = currentDay; - - if (day) { if (data) { - var divs = $$('div.day[day='+day+']'); - if (divs.length) { - // Don't reload the view if the event is present in current view - - // Deselect previous day - var selectedDivs = $$('div.day.selectedDay'); - selectedDivs.each(function(div) { - div.removeClassName('selectedDay'); - }); - - // Select new day - divs.each(function(div) { - div.addClassName('selectedDay'); - }); - - // Deselect day in date selector - if (document.selectedDate) - document.selectedDate.deselect(); - - // Select day in date selector - var selectedLink = $$('table#dateSelectorTable a[day='+day+']'); - if (selectedLink.length > 0) { - selectedCell = selectedLink[0].up(1); - selectedCell.selectElement(); - document.selectedDate = selectedCell; - } - - // Scroll to event - scrollDayView(scrollEvent); - - return false; - } - else if (day.length == 6) { - day += "01"; - } + day = data['day']; + scrollEvent = data['scrollEvent']; } - url += "?day=" + day; - } - selectedCalendarCell = null; + if (!day) + day = currentDay; - if (document.dayDisplayAjaxRequest) { - document.dayDisplayAjaxRequest.aborted = true; - document.dayDisplayAjaxRequest.abort(); - } - document.dayDisplayAjaxRequest - = triggerAjaxRequest(url, calendarDisplayCallback, - { "view": newView, - "day": day, - "scrollEvent": scrollEvent }); + if (day) { + if (data) { + var divs = $$('div.day[day='+day+']'); + if (divs.length) { + // Don't reload the view if the event is present in current view - return false; + // Deselect previous day + var selectedDivs = $$('div.day.selectedDay'); + selectedDivs.each(function(div) { + div.removeClassName('selectedDay'); + }); + + // Select new day + divs.each(function(div) { + div.addClassName('selectedDay'); + }); + + // Deselect day in date selector + if (document.selectedDate) + document.selectedDate.deselect(); + + // Select day in date selector + var selectedLink = $$('table#dateSelectorTable a[day='+day+']'); + if (selectedLink.length > 0) { + selectedCell = selectedLink[0].up(1); + selectedCell.selectElement(); + document.selectedDate = selectedCell; + } + + // Scroll to event + scrollDayView(scrollEvent); + + return false; + } + else if (day.length == 6) { + day += "01"; + } + } + url += "?day=" + day; + } + + selectedCalendarCell = null; + + if (document.dayDisplayAjaxRequest) { + document.dayDisplayAjaxRequest.aborted = true; + document.dayDisplayAjaxRequest.abort(); + } + document.dayDisplayAjaxRequest + = triggerAjaxRequest(url, calendarDisplayCallback, + { "view": newView, + "day": day, + "scrollEvent": scrollEvent }); + + return false; } function _ensureView(view) { - if (currentView != view) - changeCalendarDisplay(null, view); + if (currentView != view) + changeCalendarDisplay(null, view); - return false; + return false; } function onDayOverview() { - return _ensureView("dayview"); + return _ensureView("dayview"); } function onMulticolumnDayOverview() { - return _ensureView("multicolumndayview"); + return _ensureView("multicolumndayview"); } function onWeekOverview() { - return _ensureView("weekview"); + return _ensureView("weekview"); } function onMonthOverview() { - return _ensureView("monthview"); + return _ensureView("monthview"); } function onCalendarReload() { - changeCalendarDisplay(null, currentView); + changeCalendarDisplay(null, currentView); - return false; + return false; } function scrollDayView(scrollEvent) { - if (scrollEvent) { - var contentView; - var eventRow = $(scrollEvent); - var eventBlocks = selectCalendarEvent(eventRow.calendar, eventRow.cname, eventRow.recurrenceTime); - var firstEvent = eventBlocks.first(); + if (scrollEvent) { + var contentView; + var eventRow = $(scrollEvent); + var eventBlocks = selectCalendarEvent(eventRow.calendar, eventRow.cname, eventRow.recurrenceTime); + var firstEvent = eventBlocks.first(); - if (currentView == "monthview") - contentView = firstEvent.up("DIV.day"); - else - contentView = $("daysView"); + if (currentView == "monthview") + contentView = firstEvent.up("DIV.day"); + else + contentView = $("daysView"); - var top = firstEvent.cumulativeOffset()[1] - contentView.scrollTop; + var top = firstEvent.cumulativeOffset()[1] - contentView.scrollTop; - // Don't scroll if the event is visible to the user - if (top < contentView.cumulativeOffset()[1]) - contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; - else if (top > contentView.cumulativeOffset()[1] + contentView.getHeight() - firstEvent.getHeight()) - contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; - } - else if (currentView != "monthview") { - var contentView = $("daysView"); - var hours = (contentView.childNodesWithTag("div")[0]).childNodesWithTag("div"); - contentView.scrollTop = hours[dayStartHour].offsetTop; - } + // Don't scroll if the event is visible to the user + if (top < contentView.cumulativeOffset()[1]) + contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; + else if (top > contentView.cumulativeOffset()[1] + contentView.getHeight() - firstEvent.getHeight()) + contentView.scrollTop = firstEvent.cumulativeOffset()[1] - contentView.cumulativeOffset()[1]; + } + else if (currentView != "monthview") { + var contentView = $("daysView"); + var hours = (contentView.childNodesWithTag("div")[0]).childNodesWithTag("div"); + contentView.scrollTop = hours[dayStartHour].offsetTop; + } } function onClickableCellsDblClick(event) { - newEvent(this, 'event'); + newEvent(this, 'event'); - Event.stop(event); + Event.stop(event); } function refreshCalendarEvents(scrollEvent) { - var todayDate = new Date(); - var sd; - var ed; - if (currentView == "dayview") { - if (currentDay) - sd = currentDay; - else - sd = todayDate.getDayString(); - ed = sd; - } - else if (currentView == "weekview") { - var startDate; - if (currentDay) - startDate = currentDay.asDate(); - else - startDate = todayDate; - startDate = startDate.beginOfWeek(); - sd = startDate.getDayString(); - var endDate = new Date(); - endDate.setTime(startDate.getTime()); - endDate.addDays(6); - ed = endDate.getDayString(); - } - else { - var monthDate; - if (currentDay) - monthDate = currentDay.asDate(); - else - monthDate = todayDate; - monthDate.setDate(1); - sd = monthDate.beginOfWeek().getDayString(); + var todayDate = new Date(); + var sd; + var ed; + if (currentView == "dayview") { + if (currentDay) + sd = currentDay; + else + sd = todayDate.getDayString(); + ed = sd; + } + else if (currentView == "weekview") { + var startDate; + if (currentDay) + startDate = currentDay.asDate(); + else + startDate = todayDate; + startDate = startDate.beginOfWeek(); + sd = startDate.getDayString(); + var endDate = new Date(); + endDate.setTime(startDate.getTime()); + endDate.addDays(6); + ed = endDate.getDayString(); + } + else { + var monthDate; + if (currentDay) + monthDate = currentDay.asDate(); + else + monthDate = todayDate; + monthDate.setDate(1); + sd = monthDate.beginOfWeek().getDayString(); - var lastMonthDate = new Date(); - lastMonthDate.setTime(monthDate.getTime()); - lastMonthDate.setMonth(monthDate.getMonth() + 1); - lastMonthDate.addDays(-1); - ed = lastMonthDate.endOfWeek().getDayString(); - } - if (document.refreshCalendarEventsAjaxRequest) { - document.refreshCalendarEventsAjaxRequest.aborted = true; - document.refreshCalendarEventsAjaxRequest.abort(); - } - var url = (ApplicationBaseURL + "eventsblocks?sd=" + sd + "&ed=" + ed - + "&view=" + currentView); - document.refreshCalendarEventsAjaxRequest - = triggerAjaxRequest(url, refreshCalendarEventsCallback, - {"startDate": sd, "endDate": ed, - "scrollEvent": scrollEvent}); + var lastMonthDate = new Date(); + lastMonthDate.setTime(monthDate.getTime()); + lastMonthDate.setMonth(monthDate.getMonth() + 1); + lastMonthDate.addDays(-1); + ed = lastMonthDate.endOfWeek().getDayString(); + } + if (document.refreshCalendarEventsAjaxRequest) { + document.refreshCalendarEventsAjaxRequest.aborted = true; + document.refreshCalendarEventsAjaxRequest.abort(); + } + var url = (ApplicationBaseURL + "eventsblocks?sd=" + sd + "&ed=" + ed + + "&view=" + currentView); + document.refreshCalendarEventsAjaxRequest + = triggerAjaxRequest(url, refreshCalendarEventsCallback, + {"startDate": sd, "endDate": ed, + "scrollEvent": scrollEvent}); } function _parseEvents(list) { - var newCalendarEvents = {}; + var newCalendarEvents = {}; - for (var i = 0; i < list.length; i++) { - var event = list[i]; - var cname = event[0]; - var calendar = event[1]; -// log("parsed cname: " + cname + "; calendar: " + calendar); - var calendarDict = newCalendarEvents[calendar]; - if (!calendarDict) { - calendarDict = {}; - newCalendarEvents[calendar] = calendarDict; + for (var i = 0; i < list.length; i++) { + var event = list[i]; + var cname = event[0]; + var calendar = event[1]; + // log("parsed cname: " + cname + "; calendar: " + calendar); + var calendarDict = newCalendarEvents[calendar]; + if (!calendarDict) { + calendarDict = {}; + newCalendarEvents[calendar] = calendarDict; + } + var occurences = calendarDict[cname]; + if (!occurences) { + occurences = []; + calendarDict[cname] = occurences; + } + event.blocks = []; + occurences.push(event); } - var occurences = calendarDict[cname]; - if (!occurences) { - occurences = []; - calendarDict[cname] = occurences; - } - event.blocks = []; - occurences.push(event); - } - return newCalendarEvents; + return newCalendarEvents; } function refreshCalendarEventsCallback(http) { - if (http.readyState == 4 - && http.status == 200) { - if (http.responseText.length > 0) { - var eventsBlocks = http.responseText.evalJSON(true); - calendarEvents = _parseEvents(eventsBlocks[0]); - if (currentView == "monthview") - _drawMonthCalendarEvents(eventsBlocks[2], eventsBlocks[0]); - else { - _drawCalendarAllDayEvents(eventsBlocks[1], eventsBlocks[0]); - _drawCalendarEvents(eventsBlocks[2], eventsBlocks[0]); - } - onWindowResize(null); + if (http.readyState == 4 + && http.status == 200) { + if (http.responseText.length > 0) { + var eventsBlocks = http.responseText.evalJSON(true); + calendarEvents = _parseEvents(eventsBlocks[0]); + if (currentView == "monthview") + _drawMonthCalendarEvents(eventsBlocks[2], eventsBlocks[0]); + else { + _drawCalendarAllDayEvents(eventsBlocks[1], eventsBlocks[0]); + _drawCalendarEvents(eventsBlocks[2], eventsBlocks[0]); + } + onWindowResize(null); + } + scrollDayView(http.callbackData["scrollEvent"]); } - scrollDayView(http.callbackData["scrollEvent"]); - } - else - log("AJAX error when refreshing calendar events"); + else + log("AJAX error when refreshing calendar events"); } function newBaseEventDIV(eventRep, event, eventText) { -// log ("0 cname = " + event[0]); -// log ("1 calendar = " + event[1]); -// log ("2 status = " + event[2]); -// log ("3 title = " + event[3]); -// log ("4 start = " + event[4]); -// log ("5 end = " + event[5]); -// log ("6 location = " + event[6]); -// log ("7 isallday = " + event[7]); -// log ("8 classification = " + event[8]); -// log ("9 participants emails = " + event[9]); -// log ("10 participants states = " + event[10]); -// log ("11 owner = " + event[11]); -// log ("12 iscycle = " + event[12]); -// log ("13 nextalarm = " + event[13]); -// log ("14 recurrenceid = " + event[14]); -// log ("15 isexception = " + event[15]); + // log ("0 cname = " + event[0]); + // log ("1 calendar = " + event[1]); + // log ("2 status = " + event[2]); + // log ("3 title = " + event[3]); + // log ("4 start = " + event[4]); + // log ("5 end = " + event[5]); + // log ("6 location = " + event[6]); + // log ("7 isallday = " + event[7]); + // log ("8 classification = " + event[8]); + // log ("9 participants emails = " + event[9]); + // log ("10 participants states = " + event[10]); + // log ("11 owner = " + event[11]); + // log ("12 iscycle = " + event[12]); + // log ("13 nextalarm = " + event[13]); + // log ("14 recurrenceid = " + event[14]); + // log ("15 isexception = " + event[15]); - var eventDiv = $(document.createElement("div")); - eventDiv.cname = event[0]; - eventDiv.calendar = event[1]; - if (eventRep.recurrenceTime) - eventDiv.recurrenceTime = eventRep.recurrenceTime; - eventDiv.isException = event[15]; - eventDiv.addClassName("event"); - if (event[13] > 0) - eventDiv.addClassName("alarm"); + var eventDiv = $(document.createElement("div")); + eventDiv.cname = event[0]; + eventDiv.calendar = event[1]; + if (eventRep.recurrenceTime) + eventDiv.recurrenceTime = eventRep.recurrenceTime; + eventDiv.isException = event[15]; + eventDiv.addClassName("event"); + if (event[13] > 0) + eventDiv.addClassName("alarm"); - var innerDiv = $(document.createElement("div")); - eventDiv.appendChild(innerDiv); - innerDiv.addClassName("eventInside"); - innerDiv.addClassName("calendarFolder" + event[1]); - if (eventRep.userState >= 0 && userStates[eventRep.userState]) - innerDiv.addClassName(userStates[eventRep.userState]); + var innerDiv = $(document.createElement("div")); + eventDiv.appendChild(innerDiv); + innerDiv.addClassName("eventInside"); + innerDiv.addClassName("calendarFolder" + event[1]); + if (eventRep.userState >= 0 && userStates[eventRep.userState]) + innerDiv.addClassName(userStates[eventRep.userState]); - var gradientDiv = $(document.createElement("div")); - innerDiv.appendChild(gradientDiv); - gradientDiv.addClassName("gradient"); + var gradientDiv = $(document.createElement("div")); + innerDiv.appendChild(gradientDiv); + gradientDiv.addClassName("gradient"); - var gradientImg = $(document.createElement("img")); - gradientDiv.appendChild(gradientImg); - gradientImg.src = ResourcesURL + "/event-gradient.png"; + var gradientImg = $(document.createElement("img")); + gradientDiv.appendChild(gradientImg); + gradientImg.src = ResourcesURL + "/event-gradient.png"; - var textDiv = $(document.createElement("div")); - innerDiv.appendChild(textDiv); - textDiv.addClassName("text"); - textDiv.appendChild(document.createTextNode(eventText)); + var textDiv = $(document.createElement("div")); + innerDiv.appendChild(textDiv); + textDiv.addClassName("text"); + textDiv.appendChild(document.createTextNode(eventText)); - if (event[2] != null) { - // Status field is defined -- user can read event - eventDiv.observe("mousedown", listRowMouseDownHandler); - eventDiv.observe("click", onCalendarSelectEvent); - eventDiv.observe("dblclick", editDoubleClickedEvent); - eventDiv.observe("click", onViewEvent); - } - event.blocks.push(eventDiv); + if (event[2] != null) { + // Status field is defined -- user can read event + eventDiv.observe("mousedown", listRowMouseDownHandler); + eventDiv.observe("click", onCalendarSelectEvent); + eventDiv.observe("dblclick", editDoubleClickedEvent); + eventDiv.observe("click", onViewEvent); + } + event.blocks.push(eventDiv); - return eventDiv; + return eventDiv; } function _drawCalendarAllDayEvents(events, eventsData) { - var daysView = $("calendarHeader"); - var subdivs = daysView.childNodesWithTag("div"); - var days = subdivs[1].childNodesWithTag("div"); - for (var i = 0; i < days.length; i++) { - var parentDiv = days[i]; - for (var j = 0; j < events[i].length; j++) { - var eventRep = events[i][j]; - var nbr = eventRep.nbr; - var eventDiv = newAllDayEventDIV(eventRep, eventsData[nbr]); - parentDiv.appendChild(eventDiv); + var daysView = $("calendarHeader"); + var subdivs = daysView.childNodesWithTag("div"); + var days = subdivs[1].childNodesWithTag("div"); + for (var i = 0; i < days.length; i++) { + var parentDiv = days[i]; + for (var j = 0; j < events[i].length; j++) { + var eventRep = events[i][j]; + var nbr = eventRep.nbr; + var eventDiv = newAllDayEventDIV(eventRep, eventsData[nbr]); + parentDiv.appendChild(eventDiv); + } } - } } function newAllDayEventDIV(eventRep, event) { - // cname, calendar, starts, lasts, - // startHour, endHour, title) { - var eventDiv = newBaseEventDIV(eventRep, event, event[3]); + // cname, calendar, starts, lasts, + // startHour, endHour, title) { + var eventDiv = newBaseEventDIV(eventRep, event, event[3]); - return eventDiv; + return eventDiv; } function _drawCalendarEvents(events, eventsData) { - var daysView = $("daysView"); - var subdivs = daysView.childNodesWithTag("div"); - var days = subdivs[1].childNodesWithTag("div"); - for (var i = 0; i < days.length; i++) { - var parentDiv = days[i].childNodesWithTag("div")[0]; - for (var j = 0; j < events[i].length; j++) { - var eventRep = events[i][j]; - var nbr = eventRep.nbr; - var eventDiv = newEventDIV(eventRep, eventsData[nbr]); - parentDiv.appendChild(eventDiv); + var daysView = $("daysView"); + var subdivs = daysView.childNodesWithTag("div"); + var days = subdivs[1].childNodesWithTag("div"); + for (var i = 0; i < days.length; i++) { + var parentDiv = days[i].childNodesWithTag("div")[0]; + for (var j = 0; j < events[i].length; j++) { + var eventRep = events[i][j]; + var nbr = eventRep.nbr; + var eventDiv = newEventDIV(eventRep, eventsData[nbr]); + parentDiv.appendChild(eventDiv); + } } - } } function newEventDIV(eventRep, event) { - var eventDiv = newBaseEventDIV(eventRep, event, event[3]); + var eventDiv = newBaseEventDIV(eventRep, event, event[3]); - var pc = 100 / eventRep.siblings; - eventDiv.style.width = pc + "%"; - var left = eventRep.position * pc; - eventDiv.style.left = left + "%"; - eventDiv.addClassName("starts" + eventRep.start); - eventDiv.addClassName("lasts" + eventRep.length); + var pc = 100 / eventRep.siblings; + eventDiv.style.width = pc + "%"; + var left = eventRep.position * pc; + eventDiv.style.left = left + "%"; + eventDiv.addClassName("starts" + eventRep.start); + eventDiv.addClassName("lasts" + eventRep.length); - return eventDiv; + return eventDiv; } function _drawMonthCalendarEvents(events, eventsData) { - var daysView = $("monthDaysView"); - var days = daysView.childNodesWithTag("div"); - for (var i = 0; i < days.length; i++) { - var parentDiv = days[i]; - for (var j = 0; j < events[i].length; j++) { - var eventRep = events[i][j]; - var nbr = eventRep.nbr; - var eventDiv = newMonthEventDIV(eventRep, eventsData[nbr]); - parentDiv.appendChild(eventDiv); + var daysView = $("monthDaysView"); + var days = daysView.childNodesWithTag("div"); + for (var i = 0; i < days.length; i++) { + var parentDiv = days[i]; + for (var j = 0; j < events[i].length; j++) { + var eventRep = events[i][j]; + var nbr = eventRep.nbr; + var eventDiv = newMonthEventDIV(eventRep, eventsData[nbr]); + parentDiv.appendChild(eventDiv); + } } - } } function newMonthEventDIV(eventRep, event) { - var eventText; - if (event[7]) // all-day event - eventText = event[3]; - else - eventText = eventRep.starthour + " - " + event[3]; + var eventText; + if (event[7]) // all-day event + eventText = event[3]; + else + eventText = eventRep.starthour + " - " + event[3]; - var eventDiv = newBaseEventDIV(eventRep, event, - eventText); + var eventDiv = newBaseEventDIV(eventRep, event, + eventText); - return eventDiv; + return eventDiv; } function calendarDisplayCallback(http) { - var div = $("calendarView"); + var div = $("calendarView"); - if (http.readyState == 4 - && http.status == 200) { - document.dayDisplayAjaxRequest = null; - div.update(http.responseText); + if (http.readyState == 4 + && http.status == 200) { + document.dayDisplayAjaxRequest = null; + div.update(http.responseText); - if (http.callbackData["view"]) - currentView = http.callbackData["view"]; - if (http.callbackData["day"]) - currentDay = http.callbackData["day"]; + if (http.callbackData["view"]) + currentView = http.callbackData["view"]; + if (http.callbackData["day"]) + currentDay = http.callbackData["day"]; - // Initialize contextual menu - var menu; - var observer; - if (currentView == 'dayview') { - menu = new Array(onMenuNewEventClick, - onMenuNewTaskClick, - "-", - loadPreviousView, - loadNextView); - observer = $("daysView"); - } - else if (currentView == 'weekview') { - menu = new Array(onMenuNewEventClick, - onMenuNewTaskClick, - "-", - loadPreviousView, - loadNextView); - observer = $("daysView"); - } - else { - menu = new Array(onMenuNewEventClick, - onMenuNewTaskClick, - "-", - loadPreviousView, - loadNextView); - observer = $("monthDaysView"); - } - initMenu($("currentViewMenu"), menu); - observer.observe("contextmenu", function(event) { - popupMenu(event, 'currentViewMenu', this); }); + // Initialize contextual menu + var menu; + var observer; + if (currentView == 'dayview') { + menu = new Array(onMenuNewEventClick, + onMenuNewTaskClick, + "-", + loadPreviousView, + loadNextView); + observer = $("daysView"); + } + else if (currentView == 'weekview') { + menu = new Array(onMenuNewEventClick, + onMenuNewTaskClick, + "-", + loadPreviousView, + loadNextView); + observer = $("daysView"); + } + else { + menu = new Array(onMenuNewEventClick, + onMenuNewTaskClick, + "-", + loadPreviousView, + loadNextView); + observer = $("monthDaysView"); + } + initMenu($("currentViewMenu"), menu); + observer.observe("contextmenu", function(event) { + popupMenu(event, 'currentViewMenu', this); }); - var contentView; - if (currentView == "monthview") - contentView = $("calendarContent"); - else { - contentView = $("daysView"); - contentView.observe("scroll", onBodyClickHandler); - } + var contentView; + if (currentView == "monthview") + contentView = $("calendarContent"); + else { + contentView = $("daysView"); + contentView.observe("scroll", onBodyClickHandler); + } - refreshCalendarEvents(http.callbackData.scrollEvent); + refreshCalendarEvents(http.callbackData.scrollEvent); - var days = contentView.select("DIV.day"); + var days = contentView.select("DIV.day"); - if (currentView == "monthview") - for (var i = 0; i < days.length; i++) { - days[i].observe("click", onCalendarSelectDay); - days[i].observe("dblclick", onClickableCellsDblClick); - days[i].observe("selectstart", listRowMouseDownHandler); - //days[i].down(".dayHeader").observe("selectstart", listRowMouseDownHandler); - if (currentView == "monthview") - days[i].observe("scroll", onBodyClickHandler); - } - else { - var calendarHeader = $("calendarHeader"); - var headerDaysLabels = calendarHeader.select("DIV.dayLabels DIV.day"); - var headerDays = calendarHeader.select("DIV.days DIV.day"); - for (var i = 0; i < days.length; i++) { - headerDays[i].hour = "allday"; - headerDaysLabels[i].observe("mousedown", listRowMouseDownHandler); - headerDays[i].observe("click", onCalendarSelectDay); - headerDays[i].observe("dblclick", onClickableCellsDblClick); - days[i].observe("click", onCalendarSelectDay); + if (currentView == "monthview") + for (var i = 0; i < days.length; i++) { + days[i].observe("click", onCalendarSelectDay); + days[i].observe("dblclick", onClickableCellsDblClick); + days[i].observe("selectstart", listRowMouseDownHandler); + //days[i].down(".dayHeader").observe("selectstart", listRowMouseDownHandler); + if (currentView == "monthview") + days[i].observe("scroll", onBodyClickHandler); + } + else { + var calendarHeader = $("calendarHeader"); + var headerDaysLabels = calendarHeader.select("DIV.dayLabels DIV.day"); + var headerDays = calendarHeader.select("DIV.days DIV.day"); + for (var i = 0; i < days.length; i++) { + headerDays[i].hour = "allday"; + headerDaysLabels[i].observe("mousedown", listRowMouseDownHandler); + headerDays[i].observe("click", onCalendarSelectDay); + headerDays[i].observe("dblclick", onClickableCellsDblClick); + days[i].observe("click", onCalendarSelectDay); - var clickableCells = days[i].select("DIV.clickableHourCell"); - for (var j = 0; j < clickableCells.length; j++) - clickableCells[j].observe("dblclick", onClickableCellsDblClick); - } + var clickableCells = days[i].select("DIV.clickableHourCell"); + for (var j = 0; j < clickableCells.length; j++) + clickableCells[j].observe("dblclick", onClickableCellsDblClick); + } + } } - } - else - log ("calendarDisplayCallback Ajax error (" - + http.readyState + "/" + http.status + ")"); + else + log ("calendarDisplayCallback Ajax error (" + + http.readyState + "/" + http.status + ")"); } function assignCalendar(name) { - if (typeof(skycalendar) != "undefined") { - var node = $(name); + if (typeof(skycalendar) != "undefined") { + var node = $(name); - node.calendar = new skycalendar(node); - node.calendar.setCalendarPage(ResourcesURL + "/skycalendar.html"); - var dateFormat = node.getAttribute("dateFormat"); - if (dateFormat) - node.calendar.setDateFormat(dateFormat); - } + node.calendar = new skycalendar(node); + node.calendar.setCalendarPage(ResourcesURL + "/skycalendar.html"); + var dateFormat = node.getAttribute("dateFormat"); + if (dateFormat) + node.calendar.setDateFormat(dateFormat); + } } function popupCalendar(node) { - var nodeId = $(node).readAttribute("inputId"); - var input = $(nodeId); - input.calendar.popup(); + var nodeId = $(node).readAttribute("inputId"); + var input = $(nodeId); + input.calendar.popup(); - return false; + return false; } function onEventsSelectionChange() { - listOfSelection = this; - this.removeClassName("_unfocused"); - $("tasksList").addClassName("_unfocused"); + listOfSelection = this; + this.removeClassName("_unfocused"); + $("tasksList").addClassName("_unfocused"); - var rows = $(this.tBodies[0]).getSelectedNodes(); - if (rows.length == 1) { - var row = rows[0]; - changeCalendarDisplay( { "day": row.day, - "scrollEvent": row.getAttribute("id") } ); - changeDateSelectorDisplay(row.day); - } + var rows = $(this.tBodies[0]).getSelectedNodes(); + if (rows.length == 1) { + var row = rows[0]; + changeCalendarDisplay( { "day": row.day, + "scrollEvent": row.getAttribute("id") } ); + changeDateSelectorDisplay(row.day); + } } function onTasksSelectionChange() { - listOfSelection = this; - this.removeClassName("_unfocused"); - $("eventsList").addClassName("_unfocused"); + listOfSelection = this; + this.removeClassName("_unfocused"); + $("eventsList").addClassName("_unfocused"); } function _loadEventHref(href) { - if (document.eventsListAjaxRequest) { - document.eventsListAjaxRequest.aborted = true; - document.eventsListAjaxRequest.abort(); - } - var url = ApplicationBaseURL + href; - document.eventsListAjaxRequest - = triggerAjaxRequest(url, eventsListCallback, href); + if (document.eventsListAjaxRequest) { + document.eventsListAjaxRequest.aborted = true; + document.eventsListAjaxRequest.abort(); + } + var url = ApplicationBaseURL + href; + document.eventsListAjaxRequest + = triggerAjaxRequest(url, eventsListCallback, href); - var table = $("eventsList").tBodies[0]; - while (table.rows.length > 0) - table.removeChild(table.rows[0]); + var table = $("eventsList").tBodies[0]; + while (table.rows.length > 0) + table.removeChild(table.rows[0]); - return false; + return false; } function _loadTasksHref(href) { - if (document.tasksListAjaxRequest) { - document.tasksListAjaxRequest.aborted = true; - document.tasksListAjaxRequest.abort(); - } - url = ApplicationBaseURL + href; + if (document.tasksListAjaxRequest) { + document.tasksListAjaxRequest.aborted = true; + document.tasksListAjaxRequest.abort(); + } + url = ApplicationBaseURL + href; - var tasksList = $("tasksList"); - var selectedIds; - if (tasksList) - selectedIds = tasksList.getSelectedNodesId(); - else - selectedIds = null; - document.tasksListAjaxRequest - = triggerAjaxRequest(url, tasksListCallback, selectedIds); + var tasksList = $("tasksList"); + var selectedIds; + if (tasksList) + selectedIds = tasksList.getSelectedNodesId(); + else + selectedIds = null; + document.tasksListAjaxRequest + = triggerAjaxRequest(url, tasksListCallback, selectedIds); - tasksList.previousScroll = tasksList.scrollTop; - while (tasksList.childNodes.length) - tasksList.removeChild(tasksList.childNodes[0]); + tasksList.previousScroll = tasksList.scrollTop; + while (tasksList.childNodes.length) + tasksList.removeChild(tasksList.childNodes[0]); - return true; + return true; } function onHeaderClick(event) { - var headerId = this.getAttribute("id"); - var newSortAttribute; - if (headerId == "titleHeader") - newSortAttribute = "title"; - else if (headerId == "startHeader") - newSortAttribute = "start"; - else if (headerId == "endHeader") - newSortAttribute = "end"; - else if (headerId == "locationHeader") - newSortAttribute = "location"; - else - newSortAttribute = "start"; + var headerId = this.getAttribute("id"); + var newSortAttribute; + if (headerId == "titleHeader") + newSortAttribute = "title"; + else if (headerId == "startHeader") + newSortAttribute = "start"; + else if (headerId == "endHeader") + newSortAttribute = "end"; + else if (headerId == "locationHeader") + newSortAttribute = "location"; + else + newSortAttribute = "start"; - if (sorting["attribute"] == newSortAttribute) - sorting["ascending"] = !sorting["ascending"]; - else { - sorting["attribute"] = newSortAttribute; - sorting["ascending"] = true; - } - refreshEvents(); + if (sorting["attribute"] == newSortAttribute) + sorting["ascending"] = !sorting["ascending"]; + else { + sorting["attribute"] = newSortAttribute; + sorting["ascending"] = true; + } + refreshEvents(); - Event.stop(event); + Event.stop(event); } function refreshCurrentFolder() { - refreshEvents(); + refreshEvents(); } function refreshEvents() { - var titleSearch; - var value = search["value"]; - if (value && value.length) - titleSearch = "&search=" + escape(value.utf8encode()); - else - titleSearch = ""; + var titleSearch; + var value = search["value"]; + if (value && value.length) + titleSearch = "&search=" + escape(value.utf8encode()); + else + titleSearch = ""; - refreshAlarms(); + refreshAlarms(); - return _loadEventHref("eventslist?asc=" + sorting["ascending"] - + "&sort=" + sorting["attribute"] - + "&day=" + currentDay - + titleSearch - + "&filterpopup=" + listFilter); + return _loadEventHref("eventslist?asc=" + sorting["ascending"] + + "&sort=" + sorting["attribute"] + + "&day=" + currentDay + + titleSearch + + "&filterpopup=" + listFilter); } function refreshTasks() { - refreshAlarms(); - return _loadTasksHref("taskslist?show-completed=" + showCompletedTasks); + refreshAlarms(); + return _loadTasksHref("taskslist?show-completed=" + showCompletedTasks); } function refreshEventsAndDisplay() { - refreshEvents(); - changeCalendarDisplay(); + refreshEvents(); + changeCalendarDisplay(); } function onListFilterChange() { - var node = $("filterpopup"); + var node = $("filterpopup"); - listFilter = node.value; - // log ("listFilter = " + listFilter); + listFilter = node.value; + // log ("listFilter = " + listFilter); - return refreshEvents(); + return refreshEvents(); } function selectMonthInMenu(menu, month) { - var entries = $(menu).select("LI"); - for (i = 0; i < entries.length; i++) { - var entry = entries[i]; - var entryMonth = entry.getAttribute("month"); - if (entryMonth == month) - entry.addClassName("currentMonth"); - else - entry.removeClassName("currentMonth"); - } + var entries = $(menu).select("LI"); + for (i = 0; i < entries.length; i++) { + var entry = entries[i]; + var entryMonth = entry.getAttribute("month"); + if (entryMonth == month) + entry.addClassName("currentMonth"); + else + entry.removeClassName("currentMonth"); + } } function selectYearInMenu(menu, year) { - var entries = $(menu).select("LI"); - for (i = 0; i < entries.length; i++) { - var entry = entries[i]; - var entryYear = entry.innerHTML.strip(); - if (entryYear == year) - entry.addClassName("currentMonth"); - else - entry.removeClassName("currentMonth"); - } + var entries = $(menu).select("LI"); + for (i = 0; i < entries.length; i++) { + var entry = entries[i]; + var entryYear = entry.innerHTML.strip(); + if (entryYear == year) + entry.addClassName("currentMonth"); + else + entry.removeClassName("currentMonth"); + } } function popupMonthMenu(event) { - if (event.button == 0) { - var id = this.getAttribute("id"); - if (id == "monthLabel") - menuId = "monthListMenu"; - else - menuId = "yearListMenu"; + if (event.button == 0) { + var id = this.getAttribute("id"); + if (id == "monthLabel") + menuId = "monthListMenu"; + else + menuId = "yearListMenu"; - var popup = $(menuId); - if (id == "monthLabel") - selectMonthInMenu(popup, this.getAttribute("month")); - else - selectYearInMenu(popup, this.innerHTML); + var popup = $(menuId); + if (id == "monthLabel") + selectMonthInMenu(popup, this.getAttribute("month")); + else + selectYearInMenu(popup, this.innerHTML); - popupToolbarMenu(this, menuId); - Event.stop(event); - } + popupToolbarMenu(this, menuId); + Event.stop(event); + } } function onMonthMenuItemClick(event) { - var month = '' + this.getAttribute("month"); - var year = '' + $("yearLabel").innerHTML.strip(); + var month = '' + this.getAttribute("month"); + var year = '' + $("yearLabel").innerHTML.strip(); - changeDateSelectorDisplay(year + month + "01", true); + changeDateSelectorDisplay(year + month + "01", true); } function onYearMenuItemClick(event) { - var month = '' + $("monthLabel").getAttribute("month");; - var year = '' + this.innerHTML.strip(); + var month = '' + $("monthLabel").getAttribute("month");; + var year = '' + this.innerHTML.strip(); - changeDateSelectorDisplay(year + month + "01", true); + changeDateSelectorDisplay(year + month + "01", true); } function _eventBlocksMatching(calendar, cname, recurrenceTime) { - var blocks = null; + var blocks = null; - var events = calendarEvents[calendar]; - if (events) { - var occurences = events[cname]; - if (occurences) { - if (recurrenceTime) { - for (var i = 0; i < occurences.length; i++) { - var occurence = occurences[i]; - if (occurence[14] == recurrenceTime) - blocks = occurence.blocks; - } - } - else { - blocks = []; - for (var i = 0; i < occurences.length; i++) { - var occurence = occurences[i]; - blocks = blocks.concat(occurence.blocks); - } - } + var events = calendarEvents[calendar]; + if (events) { + var occurences = events[cname]; + if (occurences) { + if (recurrenceTime) { + for (var i = 0; i < occurences.length; i++) { + var occurence = occurences[i]; + if (occurence[14] == recurrenceTime) + blocks = occurence.blocks; + } + } + else { + blocks = []; + for (var i = 0; i < occurences.length; i++) { + var occurence = occurences[i]; + blocks = blocks.concat(occurence.blocks); + } + } + } } - } - return blocks; + return blocks; } function selectCalendarEvent(calendar, cname, recurrenceTime) { - // Select event in calendar view - if (selectedCalendarCell) - for (var i = 0; i < selectedCalendarCell.length; i++) - selectedCalendarCell[i].deselect(); + // Select event in calendar view + if (selectedCalendarCell) + for (var i = 0; i < selectedCalendarCell.length; i++) + selectedCalendarCell[i].deselect(); - var selection = _eventBlocksMatching(calendar, cname, recurrenceTime); - if (selection) { - for (var i = 0; i < selection.length; i++) - selection[i].selectElement(); - selectedCalendarCell = selection; - } + var selection = _eventBlocksMatching(calendar, cname, recurrenceTime); + if (selection) { + for (var i = 0; i < selection.length; i++) + selection[i].selectElement(); + selectedCalendarCell = selection; + } - return selection; + return selection; } function onCalendarSelectEvent() { - selectCalendarEvent(this.calendar, this.cname, this.recurrenceTime); + selectCalendarEvent(this.calendar, this.cname, this.recurrenceTime); - // Select event in events list - var list = $("eventsList"); - $(list.tBodies[0]).deselectAll(); - var rowID = this.calendar + "-" + this.cname; - if (this.recurrenceTime) - rowID += "-" + this.recurrenceTime; - var row = $(rowID); - if (row) { - var div = row.parentNode.parentNode.parentNode; - div.scrollTop = row.offsetTop - (div.offsetHeight / 2); - row.selectElement(); - } + // Select event in events list + var list = $("eventsList"); + $(list.tBodies[0]).deselectAll(); + var rowID = this.calendar + "-" + this.cname; + if (this.recurrenceTime) + rowID += "-" + this.recurrenceTime; + var row = $(rowID); + if (row) { + var div = row.parentNode.parentNode.parentNode; + div.scrollTop = row.offsetTop - (div.offsetHeight / 2); + row.selectElement(); + } } function onCalendarSelectDay(event) { - var day = this.getAttribute("day"); - var needRefresh = (listFilter == 'view_selectedday' - && day != currentDay); + var day = this.getAttribute("day"); + var needRefresh = (listFilter == 'view_selectedday' + && day != currentDay); - if (currentView == 'weekview') - changeWeekCalendarDisplayOfSelectedDay(this); - else if (currentView == 'monthview') - changeMonthCalendarDisplayOfSelectedDay(this); - changeDateSelectorDisplay(day); + if (currentView == 'weekview') + changeWeekCalendarDisplayOfSelectedDay(this); + else if (currentView == 'monthview') + changeMonthCalendarDisplayOfSelectedDay(this); + changeDateSelectorDisplay(day); - if (listOfSelection) { - listOfSelection.addClassName("_unfocused"); - listOfSelection = null; - } + if (listOfSelection) { + listOfSelection.addClassName("_unfocused"); + listOfSelection = null; + } - if (needRefresh) - refreshEvents(); + if (needRefresh) + refreshEvents(); } function changeWeekCalendarDisplayOfSelectedDay(node) { - var daysView = $("daysView"); - var daysDiv = daysView.childNodesWithTag("div"); - var days = daysDiv[1].childNodesWithTag("div"); - var headerDiv = $($("calendarHeader").childNodesWithTag("div")[1]); - var headerDays = headerDiv.childNodesWithTag("div"); + var daysView = $("daysView"); + var daysDiv = daysView.childNodesWithTag("div"); + var days = daysDiv[1].childNodesWithTag("div"); + var headerDiv = $($("calendarHeader").childNodesWithTag("div")[1]); + var headerDays = headerDiv.childNodesWithTag("div"); - for (var i = 0; i < days.length; i++) { - if (days[i] == node - || headerDays[i] == node) { - headerDays[i].addClassName("selectedDay"); - days[i].addClassName("selectedDay"); + for (var i = 0; i < days.length; i++) { + if (days[i] == node + || headerDays[i] == node) { + headerDays[i].addClassName("selectedDay"); + days[i].addClassName("selectedDay"); + } + else { + headerDays[i].removeClassName("selectedDay"); + days[i].removeClassName("selectedDay"); + } } - else { - headerDays[i].removeClassName("selectedDay"); - days[i].removeClassName("selectedDay"); - } - } } function findMonthCalendarSelectedCell(daysContainer) { - var found = false; - var i = 0; + var found = false; + var i = 0; - while (!found && i < daysContainer.childNodes.length) { - var currentNode = daysContainer.childNodes[i]; - if (currentNode.tagName == 'DIV' - && currentNode.hasClassName("selectedDay")) { - daysContainer.selectedCell = currentNode; - found = true; + while (!found && i < daysContainer.childNodes.length) { + var currentNode = daysContainer.childNodes[i]; + if (currentNode.tagName == 'DIV' + && currentNode.hasClassName("selectedDay")) { + daysContainer.selectedCell = currentNode; + found = true; + } + else + i++; } - else - i++; - } } function changeMonthCalendarDisplayOfSelectedDay(node) { - var daysContainer = node.parentNode; - if (!daysContainer.selectedCell) - findMonthCalendarSelectedCell(daysContainer); + var daysContainer = node.parentNode; + if (!daysContainer.selectedCell) + findMonthCalendarSelectedCell(daysContainer); - if (daysContainer.selectedCell) - daysContainer.selectedCell.removeClassName("selectedDay"); - daysContainer.selectedCell = node; - node.addClassName("selectedDay"); + if (daysContainer.selectedCell) + daysContainer.selectedCell.removeClassName("selectedDay"); + daysContainer.selectedCell = node; + node.addClassName("selectedDay"); } function onShowCompletedTasks(event) { - showCompletedTasks = (this.checked ? 1 : 0); + showCompletedTasks = (this.checked ? 1 : 0); - return refreshTasks(); + return refreshTasks(); } function updateTaskStatus(event) { - var newStatus = (this.checked ? 1 : 0); + var newStatus = (this.checked ? 1 : 0); - if (isSafari() && !isSafari3()) { - newStatus = (newStatus ? 0 : 1); - } + if (isSafari() && !isSafari3()) { + newStatus = (newStatus ? 0 : 1); + } - url = (ApplicationBaseURL + this.parentNode.calendar - + "/" + this.parentNode.cname + "/changeStatus?status=" + newStatus); + url = (ApplicationBaseURL + this.parentNode.calendar + + "/" + this.parentNode.cname + "/changeStatus?status=" + newStatus); - var http = createHTTPClient(); - if (http) { - // TODO: add parameter to signal that we are only interested in OK - http.open("POST", url, false /* not async */); - http.url = url; - try { - http.send(""); - } - catch (e) { - /* IE7 tends to generate "transaction aborted" errors for synchronous - transactions returning HTTP code 204. */ - log("exception during http.send (expected on IE7)"); - } - if (isHttpStatus204(http.status)) - refreshTasks(); - else if (parseInt(http.status) == 403) { - window.alert(clabels["You don't have the required privileges to perform the operation."]); - this.checked = !this.checked; - } - else - log ("updateTaskStatus: error (http code " + http.status + ")"); - } - return false; + var http = createHTTPClient(); + if (http) { + // TODO: add parameter to signal that we are only interested in OK + http.open("POST", url, false /* not async */); + http.url = url; + try { + http.send(""); + } + catch (e) { + /* IE7 tends to generate "transaction aborted" errors for synchronous + transactions returning HTTP code 204. */ + log("exception during http.send (expected on IE7)"); + } + if (isHttpStatus204(http.status)) + refreshTasks(); + else if (parseInt(http.status) == 403) { + window.alert(clabels["You don't have the required privileges to perform the operation."]); + this.checked = !this.checked; + } + else + log ("updateTaskStatus: error (http code " + http.status + ")"); + } + return false; } function updateCalendarStatus(event) { - var list = []; - var newStatus = (this.checked ? 1 : 0); + var list = []; + var newStatus = (this.checked ? 1 : 0); - if (isSafari() && !isSafari3()) { - newStatus = (newStatus ? 0 : 1); - this.checked = newStatus; - } - - var nodes = $("calendarList").childNodesWithTag("li"); - for (var i = 0; i < nodes.length; i++) { - var input = $(nodes[i]).childNodesWithTag("input")[0]; - if (input.checked) { - var folderId = nodes[i].getAttribute("id"); - var elems = folderId.split(":"); - if (elems.length > 1) - list.push(elems[0]); - else - list.push(UserLogin); + if (isSafari() && !isSafari3()) { + newStatus = (newStatus ? 0 : 1); + this.checked = newStatus; } - } - // if (!list.length) { - // list.push(UserLogin); - // nodes[0].childNodesWithTag("input")[0].checked = true; - // } + var nodes = $("calendarList").childNodesWithTag("li"); + for (var i = 0; i < nodes.length; i++) { + var input = $(nodes[i]).childNodesWithTag("input")[0]; + if (input.checked) { + var folderId = nodes[i].getAttribute("id"); + var elems = folderId.split(":"); + if (elems.length > 1) + list.push(elems[0]); + else + list.push(UserLogin); + } + } - // ApplicationBaseURL = (UserFolderURL + "Groups/_custom_" - // + list.join(",") + "/Calendar/"); + // if (!list.length) { + // list.push(UserLogin); + // nodes[0].childNodesWithTag("input")[0].checked = true; + // } - if (event) { - var folderID = this.parentNode.getAttribute("id"); - var urlstr = URLForFolderID(folderID); - if (newStatus) - urlstr += "/activateFolder"; - else - urlstr += "/deactivateFolder"; - //log("updateCalendarStatus: ajax request = " + urlstr + ", folderID = " + folderID); - triggerAjaxRequest(urlstr, calendarStatusCallback, folderID); - } - else { - updateCalendarsList(); - refreshEvents(); - refreshTasks(); - changeCalendarDisplay(); - } + // ApplicationBaseURL = (UserFolderURL + "Groups/_custom_" + // + list.join(",") + "/Calendar/"); - return false; + if (event) { + var folderID = this.parentNode.getAttribute("id"); + var urlstr = URLForFolderID(folderID); + if (newStatus) + urlstr += "/activateFolder"; + else + urlstr += "/deactivateFolder"; + //log("updateCalendarStatus: ajax request = " + urlstr + ", folderID = " + folderID); + triggerAjaxRequest(urlstr, calendarStatusCallback, folderID); + } + else { + updateCalendarsList(); + refreshEvents(); + refreshTasks(); + changeCalendarDisplay(); + } + + return false; } function calendarStatusCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - refreshEvents(); - refreshTasks(); - changeCalendarDisplay(); + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + refreshEvents(); + refreshTasks(); + changeCalendarDisplay(); + } + else { + var folder = $(http.callbackData); + var input = folder.childNodesWithTag("input")[0]; + input.checked = (!input.checked); + } } - else { - var folder = $(http.callbackData); - var input = folder.childNodesWithTag("input")[0]; - input.checked = (!input.checked); - } - } - else - log("calendarStatusCallback Ajax error"); + else + log("calendarStatusCallback Ajax error"); } function calendarEntryCallback(http) { - if (http.readyState == 4) { - var denied = !isHttpStatus204(http.status); - var entry = $(http.callbackData); - if (denied) - entry.addClassName("denied"); - else - entry.removeClassName("denied"); - } + if (http.readyState == 4) { + var denied = !isHttpStatus204(http.status); + var entry = $(http.callbackData); + if (denied) + entry.addClassName("denied"); + else + entry.removeClassName("denied"); + } } function updateCalendarsList(method) { - var list = $("calendarList").childNodesWithTag("li"); - for (var i = 0; i < list.length; i++) { - var folderID = list[i].getAttribute("id"); - var url = URLForFolderID(folderID) + "/canAccessContent"; - triggerAjaxRequest(url, calendarEntryCallback, folderID); - } + var list = $("calendarList").childNodesWithTag("li"); + for (var i = 0; i < list.length; i++) { + var folderID = list[i].getAttribute("id"); + var url = URLForFolderID(folderID) + "/canAccessContent"; + triggerAjaxRequest(url, calendarEntryCallback, folderID); + } } function validateBrowseURL(input) { - var button = $("browseURLBtn"); + var button = $("browseURLBtn"); - if (input.value.length) { - if (!button.enabled) - enableAnchor(button); - } else if (!button.disabled) - disableAnchor(button); + if (input.value.length) { + if (!button.enabled) + enableAnchor(button); + } else if (!button.disabled) + disableAnchor(button); } function browseURL(anchor, event) { - if (event.button == 0) { - var input = $("url"); - var url = input.value; - if (url.length) - window.open(url, '_blank'); - } + if (event.button == 0) { + var input = $("url"); + var url = input.value; + if (url.length) + window.open(url, '_blank'); + } - return false; + return false; } function onCalendarsMenuPrepareVisibility() { - var folders = $("calendarList"); - var selected = folders.getSelectedNodes(); - if (selected.length > 0) { - var folderOwner = selected[0].getAttribute("owner"); - var sharingOption = $(this).down("ul").childElements().last(); - // Disable the "Sharing" option when calendar is not owned by user - if (folderOwner == UserLogin || IsSuperUser) - sharingOption.removeClassName("disabled"); - else - sharingOption.addClassName("disabled"); - return true; - } - return false; + var folders = $("calendarList"); + var selected = folders.getSelectedNodes(); + if (selected.length > 0) { + var folderOwner = selected[0].getAttribute("owner"); + var sharingOption = $(this).down("ul").childElements().last(); + // Disable the "Sharing" option when calendar is not owned by user + if (folderOwner == UserLogin || IsSuperUser) + sharingOption.removeClassName("disabled"); + else + sharingOption.addClassName("disabled"); + return true; + } + return false; } function getMenus() { - var menus = {}; + var menus = {}; - var dateMenu = []; - for (var i = 0; i < 12; i++) - dateMenu.push(onMonthMenuItemClick); - menus["monthListMenu"] = dateMenu; + var dateMenu = []; + for (var i = 0; i < 12; i++) + dateMenu.push(onMonthMenuItemClick); + menus["monthListMenu"] = dateMenu; - dateMenu = []; - for (var i = 0; i < 11; i++) - dateMenu.push(onYearMenuItemClick); - menus["yearListMenu"] = dateMenu; + dateMenu = []; + for (var i = 0; i < 11; i++) + dateMenu.push(onYearMenuItemClick); + menus["yearListMenu"] = dateMenu; - menus["eventsListMenu"] = new Array(onMenuNewEventClick, "-", - onMenuNewTaskClick, - editEvent, deleteEvent, "-", - onSelectAll, "-", - null, null); - menus["calendarsMenu"] = new Array(onCalendarModify, - "-", - onCalendarNew, onCalendarRemove, - "-", null, null, "-", - null, "-", onMenuSharing); - menus["searchMenu"] = new Array(setSearchCriteria); + menus["eventsListMenu"] = new Array(onMenuNewEventClick, "-", + onMenuNewTaskClick, + editEvent, deleteEvent, "-", + onSelectAll, "-", + null, null); + menus["calendarsMenu"] = new Array(onCalendarModify, + "-", + onCalendarNew, onCalendarRemove, + "-", null, null, "-", + null, "-", onMenuSharing); + menus["searchMenu"] = new Array(setSearchCriteria); - var calendarsMenu = $("calendarsMenu"); - if (calendarsMenu) - calendarsMenu.prepareVisibility = onCalendarsMenuPrepareVisibility; + var calendarsMenu = $("calendarsMenu"); + if (calendarsMenu) + calendarsMenu.prepareVisibility = onCalendarsMenuPrepareVisibility; - return menus; + return menus; } function onMenuSharing(event) { - if ($(this).hasClassName("disabled")) - return; + if ($(this).hasClassName("disabled")) + return; - var folders = $("calendarList"); - var selected = folders.getSelectedNodes()[0]; - /* FIXME: activation of the context menu should preferably select the entry - above which the event has occured */ - if (selected) { - var folderID = selected.getAttribute("id"); - var urlstr = URLForFolderID(folderID) + "/acls"; + var folders = $("calendarList"); + var selected = folders.getSelectedNodes()[0]; + /* FIXME: activation of the context menu should preferably select the entry + above which the event has occured */ + if (selected) { + var folderID = selected.getAttribute("id"); + var urlstr = URLForFolderID(folderID) + "/acls"; - openAclWindow(urlstr); - } + openAclWindow(urlstr); + } } function configureDragHandles() { - var handle = $("verticalDragHandle"); - if (handle) { - handle.addInterface(SOGoDragHandlesInterface); - handle.leftBlock = $("leftPanel"); - handle.rightBlock = $("rightPanel"); - } + var handle = $("verticalDragHandle"); + if (handle) { + handle.addInterface(SOGoDragHandlesInterface); + handle.leftBlock = $("leftPanel"); + handle.rightBlock = $("rightPanel"); + } - handle = $("rightDragHandle"); - if (handle) { - handle.addInterface(SOGoDragHandlesInterface); - handle.upperBlock = $("eventsListView"); - handle.lowerBlock = $("calendarView"); - } + handle = $("rightDragHandle"); + if (handle) { + handle.addInterface(SOGoDragHandlesInterface); + handle.upperBlock = $("eventsListView"); + handle.lowerBlock = $("calendarView"); + } } function initCalendarSelector() { - var selector = $("calendarSelector"); - updateCalendarStatus(); - selector.changeNotification = updateCalendarsList; + var selector = $("calendarSelector"); + updateCalendarStatus(); + selector.changeNotification = updateCalendarsList; - var list = $("calendarList"); - list.multiselect = true; - var items = list.childNodesWithTag("li"); - for (var i = 0; i < items.length; i++) { - var input = items[i].childNodesWithTag("input")[0]; - $(input).observe("click", updateCalendarStatus); - items[i].observe("mousedown", listRowMouseDownHandler); - items[i].observe("selectstart", listRowMouseDownHandler); - items[i].observe("click", onRowClick); - items[i].observe("dblclick", onCalendarModify); - } + var list = $("calendarList"); + list.multiselect = true; + var items = list.childNodesWithTag("li"); + for (var i = 0; i < items.length; i++) { + var input = items[i].childNodesWithTag("input")[0]; + $(input).observe("click", updateCalendarStatus); + items[i].observe("mousedown", listRowMouseDownHandler); + items[i].observe("selectstart", listRowMouseDownHandler); + items[i].observe("click", onRowClick); + items[i].observe("dblclick", onCalendarModify); + } - var links = $("calendarSelectorButtons").childNodesWithTag("a"); - $(links[0]).observe("click", onCalendarNew); - $(links[1]).observe("click", onCalendarAdd); - $(links[2]).observe("click", onCalendarRemove); + var links = $("calendarSelectorButtons").childNodesWithTag("a"); + $(links[0]).observe("click", onCalendarNew); + $(links[1]).observe("click", onCalendarAdd); + $(links[2]).observe("click", onCalendarRemove); } function onCalendarModify(event) { - var folders = $("calendarList"); - var selected = folders.getSelectedNodes()[0]; - var calendarID = selected.getAttribute("id"); - var url = ApplicationBaseURL + calendarID + "/properties"; - var windowID = sanitizeWindowName(calendarID + " properties"); - var properties = window.open(url, windowID, - "width=300,height=100,resizable=0"); - properties.focus(); + var folders = $("calendarList"); + var selected = folders.getSelectedNodes()[0]; + var calendarID = selected.getAttribute("id"); + var url = ApplicationBaseURL + calendarID + "/properties"; + var windowID = sanitizeWindowName(calendarID + " properties"); + var properties = window.open(url, windowID, + "width=300,height=100,resizable=0"); + properties.focus(); } function updateCalendarProperties(calendarID, calendarName, calendarColor) { - var idParts = calendarID.split(":"); - var folderName = idParts[1].split("/")[1]; - var nodeID; + var idParts = calendarID.split(":"); + var folderName = idParts[1].split("/")[1]; + var nodeID; - if (idParts[0] != UserLogin) - nodeID = "/" + idParts[0].asCSSIdentifier() + "_" + folderName; - else { - nodeID = "/" + folderName; + if (idParts[0] != UserLogin) + nodeID = "/" + idParts[0].asCSSIdentifier() + "_" + folderName; + else { + nodeID = "/" + folderName; // log("nodeID: " + nodeID); - var calendarNode = $(nodeID); - var childNodes = calendarNode.childNodes; - childNodes[childNodes.length-1].nodeValue = calendarName; - } + var calendarNode = $(nodeID); + var childNodes = calendarNode.childNodes; + childNodes[childNodes.length-1].nodeValue = calendarName; + } - appendStyleElement(nodeID, calendarColor); + appendStyleElement(nodeID, calendarColor); } function onCalendarNew(event) { - createFolder(window.prompt(labels["Name of the Calendar"], ""), - appendCalendar); - preventDefault(event); + createFolder(window.prompt(labels["Name of the Calendar"], ""), + appendCalendar); + preventDefault(event); } function onCalendarAdd(event) { - openUserFolderSelector(onFolderSubscribeCB, "calendar"); - preventDefault(event); + openUserFolderSelector(onFolderSubscribeCB, "calendar"); + preventDefault(event); } function setEventsOnCalendar(checkBox, li) { - li.observe("mousedown", listRowMouseDownHandler); - li.observe("selectstart", listRowMouseDownHandler); - li.observe("click", onRowClick); - li.observe("dblclick", onCalendarModify); - checkBox.observe("click", updateCalendarStatus); + li.observe("mousedown", listRowMouseDownHandler); + li.observe("selectstart", listRowMouseDownHandler); + li.observe("click", onRowClick); + li.observe("dblclick", onCalendarModify); + checkBox.observe("click", updateCalendarStatus); } function appendCalendar(folderName, folderPath) { - var owner; + var owner; - if (folderPath) { - owner = getSubscribedFolderOwner(folderPath); - folderPath = accessToSubscribedFolder(folderPath); - } - else - folderPath = "/" + folderName; + if (folderPath) { + owner = getSubscribedFolderOwner(folderPath); + folderPath = accessToSubscribedFolder(folderPath); + } + else + folderPath = "/" + folderName; - if (!owner) - owner = UserLogin; + if (!owner) + owner = UserLogin; - //log ("append name: " + folderName + "; path: " + folderPath + "; owner: " + owner); + //log ("append name: " + folderName + "; path: " + folderPath + "; owner: " + owner); - if ($(folderPath)) - window.alert(clabels["You have already subscribed to that folder!"]); - else { - var calendarList = $("calendarList"); - var items = calendarList.select("li"); - var li = document.createElement("li"); + if ($(folderPath)) + window.alert(clabels["You have already subscribed to that folder!"]); + else { + var calendarList = $("calendarList"); + var items = calendarList.select("li"); + var li = document.createElement("li"); - // Add the calendar to the proper place - var i = getListIndexForFolder(items, owner, folderName); - if (i != items.length) // User is subscribed to other calendars of the same owner - calendarList.insertBefore(li, items[i]); - else - calendarList.appendChild(li); - $(li).writeAttribute("id", folderPath); - $(li).writeAttribute("owner", owner); + // Add the calendar to the proper place + var i = getListIndexForFolder(items, owner, folderName); + if (i != items.length) // User is subscribed to other calendars of the same owner + calendarList.insertBefore(li, items[i]); + else + calendarList.appendChild(li); + $(li).writeAttribute("id", folderPath); + $(li).writeAttribute("owner", owner); - var checkBox = createElement("input", null, "checkBox", { checked: 1 }, - { type: "checkbox" }, li); + var checkBox = createElement("input", null, "checkBox", { checked: 1 }, + { type: "checkbox" }, li); - li.appendChild(document.createTextNode(" ")); + li.appendChild(document.createTextNode(" ")); - var colorBox = document.createElement("div"); - li.appendChild(colorBox); - li.appendChild(document.createTextNode(folderName - .replace("<", "<", "g") - .replace(">", ">", "g"))); - colorBox.appendChild(document.createTextNode("OO")); + var colorBox = document.createElement("div"); + li.appendChild(colorBox); + li.appendChild(document.createTextNode(folderName + .replace("<", "<", "g") + .replace(">", ">", "g"))); + colorBox.appendChild(document.createTextNode("OO")); - $(colorBox).addClassName("colorBox"); - $(colorBox).addClassName('calendarFolder' + folderPath.substr(1)); + $(colorBox).addClassName("colorBox"); + $(colorBox).addClassName('calendarFolder' + folderPath.substr(1)); - // Check the checkbox (required for IE) - li.getElementsByTagName("input")[0].checked = true; + // Check the checkbox (required for IE) + li.getElementsByTagName("input")[0].checked = true; - // Register events (doesn't work with Safari) - setEventsOnCalendar($(checkBox), $(li)); + // Register events (doesn't work with Safari) + setEventsOnCalendar($(checkBox), $(li)); - var url = URLForFolderID(folderPath) + "/canAccessContent"; - triggerAjaxRequest(url, calendarEntryCallback, folderPath); + var url = URLForFolderID(folderPath) + "/canAccessContent"; + triggerAjaxRequest(url, calendarEntryCallback, folderPath); - // Update CSS for events color - appendStyleElement(folderPath, "#AAAAAA"); - } + // Update CSS for events color + appendStyleElement(folderPath, "#AAAAAA"); + } } function appendStyleElement(folderPath, color) { - if (document.styleSheets) { - var fgColor = getContrastingTextColor(color); - var styleElement = document.createElement("style"); - styleElement.type = "text/css"; - var selectors = [ - 'DIV.calendarFolder' + folderPath.substr(1), - 'LI.calendarFolder' + folderPath.substr(1), - 'UL#calendarList DIV.calendarFolder' + folderPath.substr(1) - ]; - var rules = [ - ' { background-color: ' + color + ' !important;' + ' color: ' + fgColor + ' !important; }', - ' { background-color: ' + color + ' !important;' + ' color: ' + fgColor + ' !important; }', - ' { color: ' + color + ' !important; }' - ]; - for (var i = 0; i < rules.length; i++) - if (styleElement.styleSheet && styleElement.styleSheet.addRule) - styleElement.styleSheet.addRule(selectors[i], rules[i]); // IE - else - styleElement.appendChild(document.createTextNode(selectors[i] + rules[i])); // Mozilla + Safari - document.getElementsByTagName("head")[0].appendChild(styleElement); - } + if (document.styleSheets) { + var fgColor = getContrastingTextColor(color); + var styleElement = document.createElement("style"); + styleElement.type = "text/css"; + var selectors = [ + 'DIV.calendarFolder' + folderPath.substr(1), + 'LI.calendarFolder' + folderPath.substr(1), + 'UL#calendarList DIV.calendarFolder' + folderPath.substr(1) + ]; + var rules = [ + ' { background-color: ' + color + ' !important;' + ' color: ' + fgColor + ' !important; }', + ' { background-color: ' + color + ' !important;' + ' color: ' + fgColor + ' !important; }', + ' { color: ' + color + ' !important; }' + ]; + for (var i = 0; i < rules.length; i++) + if (styleElement.styleSheet && styleElement.styleSheet.addRule) + styleElement.styleSheet.addRule(selectors[i], rules[i]); // IE + else + styleElement.appendChild(document.createTextNode(selectors[i] + rules[i])); // Mozilla + Safari + document.getElementsByTagName("head")[0].appendChild(styleElement); + } } function onFolderSubscribeCB(folderData) { - var folder = $(folderData["folder"]); - if (!folder) { - appendCalendar(folderData["folderName"], folderData["folder"]); - refreshEvents(); - refreshTasks(); - changeCalendarDisplay(); - } + var folder = $(folderData["folder"]); + if (!folder) { + appendCalendar(folderData["folderName"], folderData["folder"]); + refreshEvents(); + refreshTasks(); + changeCalendarDisplay(); + } } function onFolderUnsubscribeCB(folderId) { - var node = $(folderId); - node.parentNode.removeChild(node); - if (removeFolderRequestCount == 0) { - refreshEvents(); - refreshTasks(); - changeCalendarDisplay(); - } + var node = $(folderId); + node.parentNode.removeChild(node); + if (removeFolderRequestCount == 0) { + refreshEvents(); + refreshTasks(); + changeCalendarDisplay(); + } } function onCalendarRemove(event) { - if (removeFolderRequestCount == 0) { - var nodes = $("calendarList").getSelectedNodes(); - for (var i = 0; i < nodes.length; i++) { - nodes[i].deselect(); - var owner = nodes[i].getAttribute("owner"); - var folderId = nodes[i].getAttribute("id"); - if (owner == UserLogin) { - if (folderId == "/personal") { - var label = labels["You cannot remove nor unsubscribe from your" - + " personal calendar."]; - window.alert(label); - } - else { - var folderIdElements = folderId.split(":"); - deletePersonalCalendar(folderIdElements[0]); - } - } - else - unsubscribeFromFolder(folderId, owner, - onFolderUnsubscribeCB, folderId); + if (removeFolderRequestCount == 0) { + var nodes = $("calendarList").getSelectedNodes(); + for (var i = 0; i < nodes.length; i++) { + nodes[i].deselect(); + var owner = nodes[i].getAttribute("owner"); + var folderId = nodes[i].getAttribute("id"); + if (owner == UserLogin) { + if (folderId == "/personal") { + var label = labels["You cannot remove nor unsubscribe from your" + + " personal calendar."]; + window.alert(label); + } + else { + var folderIdElements = folderId.split(":"); + deletePersonalCalendar(folderIdElements[0]); + } + } + else + unsubscribeFromFolder(folderId, owner, + onFolderUnsubscribeCB, folderId); + } } - } - preventDefault(event); + preventDefault(event); } function deletePersonalCalendar(folderElement) { - var folderId = folderElement.substr(1); - var label - = labels["Are you sure you want to delete the calendar \"%{0}\"?"].formatted($(folderElement).lastChild.nodeValue.strip()); - if (window.confirm(label)) { - removeFolderRequestCount++; - var url = ApplicationBaseURL + "/" + folderId + "/delete"; - triggerAjaxRequest(url, deletePersonalCalendarCallback, folderId); - } + var folderId = folderElement.substr(1); + var label + = labels["Are you sure you want to delete the calendar \"%{0}\"?"].formatted($(folderElement).lastChild.nodeValue.strip()); + if (window.confirm(label)) { + removeFolderRequestCount++; + var url = ApplicationBaseURL + "/" + folderId + "/delete"; + triggerAjaxRequest(url, deletePersonalCalendarCallback, folderId); + } } function deletePersonalCalendarCallback(http) { - if (http.readyState == 4) { - if (isHttpStatus204(http.status)) { - var ul = $("calendarList"); - var children = ul.childNodesWithTag("li"); - var i = 0; - var done = false; - while (!done && i < children.length) { - var currentFolderId = children[i].getAttribute("id").substr(1); - if (currentFolderId == http.callbackData) { - ul.removeChild(children[i]); - done = true; - } - else - i++; - } - removeFolderRequestCount--; - if (removeFolderRequestCount == 0) { - refreshEvents(); - refreshTasks(); - changeCalendarDisplay(); - } + if (http.readyState == 4) { + if (isHttpStatus204(http.status)) { + var ul = $("calendarList"); + var children = ul.childNodesWithTag("li"); + var i = 0; + var done = false; + while (!done && i < children.length) { + var currentFolderId = children[i].getAttribute("id").substr(1); + if (currentFolderId == http.callbackData) { + ul.removeChild(children[i]); + done = true; + } + else + i++; + } + removeFolderRequestCount--; + if (removeFolderRequestCount == 0) { + refreshEvents(); + refreshTasks(); + changeCalendarDisplay(); + } + } } - } - else - log ("ajax problem 5: " + http.status); + else + log ("ajax problem 5: " + http.status); } function configureLists() { - var list = $("tasksList"); - list.multiselect = true; - list.observe("mousedown", onTasksSelectionChange); - list.observe("selectstart", listRowMouseDownHandler); + var list = $("tasksList"); + list.multiselect = true; + list.observe("mousedown", onTasksSelectionChange); + list.observe("selectstart", listRowMouseDownHandler); - var input = $("showHideCompletedTasks"); - input.observe("click", onShowCompletedTasks); + var input = $("showHideCompletedTasks"); + input.observe("click", onShowCompletedTasks); - list = $("eventsList"); - list.multiselect = true; - configureSortableTableHeaders(list); - TableKit.Resizable.init(list, {'trueResize' : true, 'keepWidth' : true}); - list.observe("mousedown", onEventsSelectionChange); + list = $("eventsList"); + list.multiselect = true; + configureSortableTableHeaders(list); + TableKit.Resizable.init(list, {'trueResize' : true, 'keepWidth' : true}); + list.observe("mousedown", onEventsSelectionChange); } function initDateSelectorEvents() { - var arrow = $("rightArrow"); - arrow.observe("click", onDateSelectorGotoMonth); - arrow = $("leftArrow"); - arrow.observe("click", onDateSelectorGotoMonth); + var arrow = $("rightArrow"); + arrow.observe("click", onDateSelectorGotoMonth); + arrow = $("leftArrow"); + arrow.observe("click", onDateSelectorGotoMonth); - var menuButton = $("monthLabel"); - menuButton.observe("click", popupMonthMenu); - menuButton = $("yearLabel"); - menuButton.observe("click", popupMonthMenu); + var menuButton = $("monthLabel"); + menuButton.observe("click", popupMonthMenu); + menuButton = $("yearLabel"); + menuButton.observe("click", popupMonthMenu); } function onBodyClickHandler(event) { - $("eventDialog").hide(); + $("eventDialog").hide(); } function onWindowResize(event) { - var handle = $("verticalDragHandle"); - if (handle) - handle.adjust(); - handle = $("rightDragHandle"); - if (handle) - handle.adjust(); + var handle = $("verticalDragHandle"); + if (handle) + handle.adjust(); + handle = $("rightDragHandle"); + if (handle) + handle.adjust(); - if (Prototype.Browser.IE) { - var days = $$("DIV#daysView DIV.days"); - var labels = $$("DIV#calendarHeader DIV.days"); - if (days.length && labels.length) { - var day = days[0]; - var label = labels[0]; - day.setStyle({ width: (label.getWidth()-1) + "px" }); - } - } + if (Prototype.Browser.IE) { + var days = $$("DIV#daysView DIV.days"); + var labels = $$("DIV#calendarHeader DIV.days"); + if (days.length && labels.length) { + var day = days[0]; + var label = labels[0]; + day.setStyle({ width: (label.getWidth()-1) + "px" }); + } + } } function initCalendars() { - sorting["attribute"] = "start"; - sorting["ascending"] = true; + sorting["attribute"] = "start"; + sorting["ascending"] = true; - if (!$(document.body).hasClassName("popup")) { - initDateSelectorEvents(); - initCalendarSelector(); - configureSearchField(); - configureLists(); - $("calendarList").attachMenu("calendarsMenu"); - $(document.body).observe("click", onBodyClickHandler); - } + if (!$(document.body).hasClassName("popup")) { + initDateSelectorEvents(); + initCalendarSelector(); + configureSearchField(); + configureLists(); + $("calendarList").attachMenu("calendarsMenu"); + $(document.body).observe("click", onBodyClickHandler); + } - onWindowResize.defer(); - Event.observe(window, "resize", onWindowResize); + onWindowResize.defer(); + Event.observe(window, "resize", onWindowResize); } document.observe("dom:loaded", initCalendars); diff --git a/UI/WebServerResources/UIxAclEditor.js b/UI/WebServerResources/UIxAclEditor.js index 8ffe8e9b7..1ee0c5d84 100644 --- a/UI/WebServerResources/UIxAclEditor.js +++ b/UI/WebServerResources/UIxAclEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* test */ diff --git a/UI/WebServerResources/UIxAppointmentEditor.js b/UI/WebServerResources/UIxAppointmentEditor.js index f37c9344e..407f0d30d 100644 --- a/UI/WebServerResources/UIxAppointmentEditor.js +++ b/UI/WebServerResources/UIxAppointmentEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2005 SKYRIX Software AG diff --git a/UI/WebServerResources/UIxAttendeesEditor.js b/UI/WebServerResources/UIxAttendeesEditor.js index f35f3a4d6..d5c2a69a0 100644 --- a/UI/WebServerResources/UIxAttendeesEditor.js +++ b/UI/WebServerResources/UIxAttendeesEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ var resultsDiv; var address; diff --git a/UI/WebServerResources/UIxCalUserRightsEditor.js b/UI/WebServerResources/UIxCalUserRightsEditor.js index 2591e6b03..f3aeece76 100644 --- a/UI/WebServerResources/UIxCalUserRightsEditor.js +++ b/UI/WebServerResources/UIxCalUserRightsEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onCancelClick(event) { window.close(); diff --git a/UI/WebServerResources/UIxCalendarProperties.js b/UI/WebServerResources/UIxCalendarProperties.js index 2bf322a4a..b6e946c5a 100644 --- a/UI/WebServerResources/UIxCalendarProperties.js +++ b/UI/WebServerResources/UIxCalendarProperties.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onLoadCalendarProperties() { var colorButton = $("colorButton"); diff --git a/UI/WebServerResources/UIxColorPicker.js b/UI/WebServerResources/UIxColorPicker.js index 7116b06e9..5d1b7c0e4 100644 --- a/UI/WebServerResources/UIxColorPicker.js +++ b/UI/WebServerResources/UIxColorPicker.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onLoadColorPicker(event) { showColorPicker(); diff --git a/UI/WebServerResources/UIxComponentEditor.js b/UI/WebServerResources/UIxComponentEditor.js index 0b8940ebc..feaa3244e 100644 --- a/UI/WebServerResources/UIxComponentEditor.js +++ b/UI/WebServerResources/UIxComponentEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onPopupAttendeesWindow(event) { if (event) diff --git a/UI/WebServerResources/UIxContactEditor.js b/UI/WebServerResources/UIxContactEditor.js index 23b12d8ea..53dd5092d 100644 --- a/UI/WebServerResources/UIxContactEditor.js +++ b/UI/WebServerResources/UIxContactEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2005 SKYRIX Software AG diff --git a/UI/WebServerResources/UIxContactsUserFolders.js b/UI/WebServerResources/UIxContactsUserFolders.js index ca316951b..aea6466a3 100644 --- a/UI/WebServerResources/UIxContactsUserFolders.js +++ b/UI/WebServerResources/UIxContactsUserFolders.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ var d; diff --git a/UI/WebServerResources/UIxContactsUserRightsEditor.js b/UI/WebServerResources/UIxContactsUserRightsEditor.js index b304b07ec..056035a21 100644 --- a/UI/WebServerResources/UIxContactsUserRightsEditor.js +++ b/UI/WebServerResources/UIxContactsUserRightsEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onCancelClick(event) { window.close(); diff --git a/UI/WebServerResources/UIxMailEditor.js b/UI/WebServerResources/UIxMailEditor.js index 390f46847..fa7bc7919 100644 --- a/UI/WebServerResources/UIxMailEditor.js +++ b/UI/WebServerResources/UIxMailEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ var contactSelectorAction = 'mailer-contacts'; var attachmentCount = 0; diff --git a/UI/WebServerResources/UIxMailPopupView.js b/UI/WebServerResources/UIxMailPopupView.js index 9e3dd508b..3d53b91aa 100644 --- a/UI/WebServerResources/UIxMailPopupView.js +++ b/UI/WebServerResources/UIxMailPopupView.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onPrintCurrentMessage(event) { window.print(); diff --git a/UI/WebServerResources/UIxMailToSelection.js b/UI/WebServerResources/UIxMailToSelection.js index 2f8cb5e41..098a47b1f 100644 --- a/UI/WebServerResources/UIxMailToSelection.js +++ b/UI/WebServerResources/UIxMailToSelection.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2005 SKYRIX Software AG diff --git a/UI/WebServerResources/UIxMailUserRightsEditor.js b/UI/WebServerResources/UIxMailUserRightsEditor.js index 33aefa3ae..381c9fd68 100644 --- a/UI/WebServerResources/UIxMailUserRightsEditor.js +++ b/UI/WebServerResources/UIxMailUserRightsEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onCancelClick(event) { window.close(); diff --git a/UI/WebServerResources/UIxMailView.js b/UI/WebServerResources/UIxMailView.js index f4a72e2b7..4e0551ec4 100644 --- a/UI/WebServerResources/UIxMailView.js +++ b/UI/WebServerResources/UIxMailView.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onPrintCurrentMessage(event) { window.print(); diff --git a/UI/WebServerResources/UIxOccurenceDialog.js b/UI/WebServerResources/UIxOccurenceDialog.js index 557502f67..d62e9a670 100644 --- a/UI/WebServerResources/UIxOccurenceDialog.js +++ b/UI/WebServerResources/UIxOccurenceDialog.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function onCancelButtonClick(event) { window.close(); diff --git a/UI/WebServerResources/UIxPreferences.js b/UI/WebServerResources/UIxPreferences.js index 91bb9ef1c..3716c4dd7 100644 --- a/UI/WebServerResources/UIxPreferences.js +++ b/UI/WebServerResources/UIxPreferences.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ function savePreferences(sender) { var sigList = $("signaturePlacementList"); diff --git a/UI/WebServerResources/UIxRecurrenceEditor.js b/UI/WebServerResources/UIxRecurrenceEditor.js index 71832056a..eb0cd531b 100644 --- a/UI/WebServerResources/UIxRecurrenceEditor.js +++ b/UI/WebServerResources/UIxRecurrenceEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ var RecurrenceEditor = { types: new Array("Daily", "Weekly", "Monthly", "Yearly"), diff --git a/UI/WebServerResources/UIxReminderEditor.js b/UI/WebServerResources/UIxReminderEditor.js index c0abc775f..a0fe1f903 100644 --- a/UI/WebServerResources/UIxReminderEditor.js +++ b/UI/WebServerResources/UIxReminderEditor.js @@ -1,4 +1,5 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + function initializeWindowButtons() { var okButton = $("okButton"); var cancelButton = $("cancelButton"); diff --git a/UI/WebServerResources/UIxTaskEditor.js b/UI/WebServerResources/UIxTaskEditor.js index 8182448c9..b2137a92b 100644 --- a/UI/WebServerResources/UIxTaskEditor.js +++ b/UI/WebServerResources/UIxTaskEditor.js @@ -1,4 +1,4 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ var contactSelectorAction = 'calendars-contacts'; diff --git a/UI/WebServerResources/dtree.js b/UI/WebServerResources/dtree.js index 78c7d65a4..9b0dfa0db 100644 --- a/UI/WebServerResources/dtree.js +++ b/UI/WebServerResources/dtree.js @@ -1,3 +1,4 @@ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*--------------------------------------------------| | dTree 2.05 | www.destroydrop.com/javascript/tree/ | |---------------------------------------------------| diff --git a/UI/WebServerResources/generic.js b/UI/WebServerResources/generic.js index c4bfc8c52..47356ba2f 100644 --- a/UI/WebServerResources/generic.js +++ b/UI/WebServerResources/generic.js @@ -1,4 +1,5 @@ -/* -*- Mode: java; tab-width: 2; c-tab-always-indent: t; indent-tabs-mode: t; c-basic-offset: 2 -*- */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + /* Copyright (C) 2005 SKYRIX Software AG diff --git a/UI/WebServerResources/js_color_picker_v2.js b/UI/WebServerResources/js_color_picker_v2.js index 9c9a9b6cd..90011853d 100644 --- a/UI/WebServerResources/js_color_picker_v2.js +++ b/UI/WebServerResources/js_color_picker_v2.js @@ -1,3 +1,4 @@ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************************************************ @fileoverview JS Color picker diff --git a/UI/WebServerResources/layout2or3_xlib.js b/UI/WebServerResources/layout2or3_xlib.js index 70897832a..9052b6928 100644 --- a/UI/WebServerResources/layout2or3_xlib.js +++ b/UI/WebServerResources/layout2or3_xlib.js @@ -1,3 +1,4 @@ -/* X Library, Copyright (C) 2001,2002,2003,2004,2005 Michael Foster (Cross-Browser.com). Distributed under the terms of the GNU LGPL */ -/* layout2or3_xlib.js compiled with XC v0.22b, see layout2or3_xlib.txt for contributor copyrights, license info and documentation */ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* X Library, Copyright (C) 2001,2002,2003,2004,2005 Michael Foster (Cross-Browser.com). Distributed under the terms of the GNU LGPL */ +/* layout2or3_xlib.js compiled with XC v0.22b, see layout2or3_xlib.txt for contributor copyrights, license info and documentation */ var xVersion='4.0',xOp7,xOp5or6,xIE4Up,xIE4,xIE5,xNN4,xMoz,xMac,xUA=navigator.userAgent.toLowerCase();if (window.opera){xOp7=(xUA.indexOf('opera 7')!=-1 || xUA.indexOf('opera/7')!=-1);if (!xOp7) xOp5or6=(xUA.indexOf('opera 5')!=-1 || xUA.indexOf('opera/5')!=-1 || xUA.indexOf('opera 6')!=-1 || xUA.indexOf('opera/6')!=-1);}else if (document.all && xUA.indexOf('msie')!=-1) {xIE4Up=parseInt(navigator.appVersion)>=4;xIE4=xUA.indexOf('msie 4')!=-1;xIE5=xUA.indexOf('msie 5')!=-1;}else if (document.layers) {xNN4=true;}xMoz=xUA.indexOf('gecko')!=-1;xMac=xUA.indexOf('mac')!=-1;function xGetElementById(e){if(typeof(e)!='string') return e;if(document.getElementById) e=document.getElementById(e);else if(document.all) e=document.all[e];else e=null;return e;}function xStr(s){for(var i=0; i=0) {var pt=0,pb=0,bt=0,bb=0;if (document.compatMode=='CSS1Compat') {var gcs = xGetComputedStyle;pt=gcs(e,'padding-top',1);if (pt != null) {pb=gcs(e,'padding-bottom',1);bt=gcs(e,'border-top-width',1);bb=gcs(e,'border-bottom-width',1);}else if(xDef(e.offsetHeight,e.style.height)){e.style.height=h+'px';pt=e.offsetHeight-h;}}h-=(pt+pb+bt+bb);if(isNaN(h)||h<0) return;else e.style.height=h+'px';}h=e.offsetHeight;}else if(css && xDef(e.style.pixelHeight)) {if(h>=0) e.style.pixelHeight=h;h=e.style.pixelHeight;}return h;}function xClientWidth(){var w=0;if(xOp5or6) w=window.innerWidth;else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientWidth)w=document.documentElement.clientWidth;else if(document.body && document.body.clientWidth)w=document.body.clientWidth;else if(xDef(window.innerWidth,window.innerHeight,document.height)) {w=window.innerWidth;if(document.height>window.innerHeight) w-=16;}return w;}function xClientHeight(){var h=0;if(xOp5or6) h=window.innerHeight;else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientHeight)h=document.documentElement.clientHeight;else if(document.body && document.body.clientHeight)h=document.body.clientHeight;else if(xDef(window.innerWidth,window.innerHeight,document.width)) {h=window.innerHeight;if(document.width>window.innerWidth) h-=16;}return h;}function xAddEventListener(e,eT,eL,cap){if(!(e=xGetElementById(e))) return;eT=eT.toLowerCase();if((!xIE4Up && !xOp7 /* && !xMoz */) && e==window) {if(eT=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eL; xResizeEvent(); return; }if(eT=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eL; xScrollEvent(); return; }}var eh='e.on'+eT+'=eL';if(e.addEventListener) e.addEventListener(eT,eL,cap);else if(e.attachEvent) e.attachEvent('on'+eT,eL);else eval(eh);}function xResizeEvent(){if (window.xREL) setTimeout('xResizeEvent()', 250);var cw = xClientWidth(), ch = xClientHeight();if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); }}function xScrollEvent(){if (window.xSEL) setTimeout('xScrollEvent()', 250);var sl = xScrollLeft(), st = xScrollTop();if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); }}function xGetComputedStyle(oEle, sProp, bInt){var s, p = 'undefined';var dv = document.defaultView;if(dv && dv.getComputedStyle){s = dv.getComputedStyle(oEle,'');if (s) p = s.getPropertyValue(sProp);}else if(oEle.currentStyle) {var a = sProp.split('-');sProp = a[0];for (var i=1; i 0) ? $(table.tHead.rows[table.tHead.rows.length-1].cells[index]) : $(table.rows[0].cells[index]); - } else { - cell = $(index); - table = table ? $(table) : cell.up('table'); - index = TableKit.getCellIndex(cell); - } - // And now, for the fun stuff - // Read the new options values for the given table - var op = TableKit.option('trueResize keepWidth minWidth', table.id); - // Took also the minWidth as we're gonna use it later anyway - var pad = parseInt(cell.getStyle('paddingLeft'),10) + parseInt(cell.getStyle('paddingRight'),10); - // Improvement: add cell border to padding as width incorporates both - pad += parseInt(cell.getStyle('borderLeftWidth'),10) + parseInt(cell.getStyle('borderRightWidth'),10); - w = Math.max(w-pad, op.minWidth); // This will also be used later - if (!op.trueResize) { - // Original resize method - cell.setStyle({'width' : w + 'px'}); // Using previously read minWidth instead of the old way - } else { - // New stuff - var delta = (w + pad - parseInt(cell.getWidth())); - if (!op.keepWidth) { - // We'll be updating the table width - var tableWidth = parseInt(table.getWidth()) + delta; - cell.setStyle({'width' : w + 'px'}); - table.setStyle({'width' : tableWidth + 'px'}); - } else { - // Let's see what we have to do to keep the table width constant - var cells = TableKit.getHeaderCells(table); - if (index < 0 || index > cells.length) { return; } - var nbour; - if (index == cells.length - 1) { // Rightmost cell - nbour = cells[index - 1]; - } else { // Left or inner cell - nbour = cells[index + 1]; - } - var nbourWidth = parseInt(nbour.getWidth()); - var nbourPad = parseInt(nbour.getStyle('paddingLeft'),10) + parseInt(nbour.getStyle('paddingRight'),10); - var proposedNbourWidth = nbourWidth - nbourPad - delta; - var newNbourWidth; - if (proposedNbourWidth < op.minWidth) { - // Don't be mean to neighbours. Step off their porch. - newNbourWidth = Math.min(nbourWidth - nbourPad, op.minWidth); - w -= newNbourWidth - proposedNbourWidth; - } else { - newNbourWidth = proposedNbourWidth; - } - nbour.setStyle({'width' : newNbourWidth + 'px'}); - cell.setStyle({'width' : w + 'px'}); - } - } - } +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ + +/** + * This work is licensed under a Creative Commons Attribution 3.0 License + * (http://creativecommons.org/licenses/by/3.0/). + * + * You are free: + * to Share - to copy, distribute and transmit the work + * to Remix - to adapt the work + * Under the following conditions: + * Attribution. You must attribute the work in the manner specified + * by the author or licensor (but not in any way that suggests that + * they endorse you or your use of the work). + * + * For any reuse or distribution, you must make clear to others the license + * terms of this work. The best way to do this is with a link to the + * Creative Commons web page. + * + * Any of the above conditions can be waived if you get permission from + * the copyright holder. Nothing in this license impairs or restricts + * the author's moral rights. + * + * Disclaimer + * + * Your fair dealing and other rights are in no way affected by the above. + * This is a human-readable summary of the Legal Code (the full license). + * + * The author of this work is Vlad Bailescu (http://vlad.bailescu.ro). No + * warranty or support will be provided for this work, although updates + * might be made available at http://vlad.bailescu.ro/javascript/tablekit . + * + * Licence code and basic description provided by Creative Commons. + * + */ +Object.extend(TableKit.options || {}, { + // If true table width gets recalculated on column resize + trueResize : false, + // If true table width will be kept constant on column resize + keepWidth : false +}); + +Object.extend(TableKit.Resizable, { + resize : function(table, index, w) { + // This part is taken from Andrew Tetlaw's original TableKit.Resizable.resize + var cell; + if(typeof index === 'number') { + if(!table || (table.tagName && table.tagName !== "TABLE")) {return;} + table = $(table); + index = Math.min(table.rows[0].cells.length, index); + index = Math.max(1, index); + index -= 1; + cell = (table.tHead && table.tHead.rows.length > 0) ? $(table.tHead.rows[table.tHead.rows.length-1].cells[index]) : $(table.rows[0].cells[index]); + } else { + cell = $(index); + table = table ? $(table) : cell.up('table'); + index = TableKit.getCellIndex(cell); + } + // And now, for the fun stuff + // Read the new options values for the given table + var op = TableKit.option('trueResize keepWidth minWidth', table.id); + // Took also the minWidth as we're gonna use it later anyway + var pad = parseInt(cell.getStyle('paddingLeft'),10) + parseInt(cell.getStyle('paddingRight'),10); + // Improvement: add cell border to padding as width incorporates both + pad += parseInt(cell.getStyle('borderLeftWidth'),10) + parseInt(cell.getStyle('borderRightWidth'),10); + w = Math.max(w-pad, op.minWidth); // This will also be used later + if (!op.trueResize) { + // Original resize method + cell.setStyle({'width' : w + 'px'}); // Using previously read minWidth instead of the old way + } else { + // New stuff + var delta = (w + pad - parseInt(cell.getWidth())); + if (!op.keepWidth) { + // We'll be updating the table width + var tableWidth = parseInt(table.getWidth()) + delta; + cell.setStyle({'width' : w + 'px'}); + table.setStyle({'width' : tableWidth + 'px'}); + } else { + // Let's see what we have to do to keep the table width constant + var cells = TableKit.getHeaderCells(table); + if (index < 0 || index > cells.length) { return; } + var nbour; + if (index == cells.length - 1) { // Rightmost cell + nbour = cells[index - 1]; + } else { // Left or inner cell + nbour = cells[index + 1]; + } + var nbourWidth = parseInt(nbour.getWidth()); + var nbourPad = parseInt(nbour.getStyle('paddingLeft'),10) + parseInt(nbour.getStyle('paddingRight'),10); + var proposedNbourWidth = nbourWidth - nbourPad - delta; + var newNbourWidth; + if (proposedNbourWidth < op.minWidth) { + // Don't be mean to neighbours. Step off their porch. + newNbourWidth = Math.min(nbourWidth - nbourPad, op.minWidth); + w -= newNbourWidth - proposedNbourWidth; + } else { + newNbourWidth = proposedNbourWidth; + } + nbour.setStyle({'width' : newNbourWidth + 'px'}); + cell.setStyle({'width' : w + 'px'}); + } + } + } }); \ No newline at end of file diff --git a/UI/WebServerResources/tablekit.js b/UI/WebServerResources/tablekit.js index 05ebef9a3..370879520 100644 --- a/UI/WebServerResources/tablekit.js +++ b/UI/WebServerResources/tablekit.js @@ -1,3 +1,4 @@ +/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * * Copyright (c) 2007 Andrew Tetlaw & Millstream Web Software