diff --git a/UI/WebServerResources/UIxAppointmentEditor.js b/UI/WebServerResources/UIxAppointmentEditor.js index 5a905c179..1e053f2fb 100644 --- a/UI/WebServerResources/UIxAppointmentEditor.js +++ b/UI/WebServerResources/UIxAppointmentEditor.js @@ -55,7 +55,8 @@ function validateAptEditor() { alert(labels.validate_invalid_startdate); return false; } - startdate = e.calendar.prs_date(e.value); + + startdate = getStartDate(); if (startdate == null) { alert(labels.validate_invalid_startdate); return false; @@ -66,7 +67,7 @@ function validateAptEditor() { alert(labels.validate_invalid_enddate); return false; } - enddate = e.calendar.prs_date(e.value); + enddate = getEndDate(); if (enddate == null) { alert(labels.validate_invalid_enddate); return false; @@ -235,6 +236,9 @@ function _getDate(which) { date.setMinutes(time[2]); } + if (isNaN(date.getTime())) + return null; + return date; } @@ -290,35 +294,47 @@ function onAdjustTime(event) { if ($(this).readAttribute("id").startsWith("start")) { // Start date was changed - var delta = window.getShadowStartDate().valueOf() - startDate.valueOf(); - window.setStartDate(); - if (delta != 0) { - var newEndDate = new Date(endDate.valueOf() - delta); - window.setEndDate(newEndDate); + if (startDate == null) { + var oldStartDate = window.getShadowStartDate(); + window.setStartDate(oldStartDate); + } + else { + var delta = window.getShadowStartDate().valueOf() - startDate.valueOf(); window.setStartDate(); + if (delta != 0) { + // Increment end date + var newEndDate = new Date(endDate.valueOf() - delta); + window.setEndDate(newEndDate); - window.timeWidgets['end']['date'].updateShadowValue(); - window.timeWidgets['end']['time'].updateShadowValue(); - window.timeWidgets['start']['date'].updateShadowValue(); - window.timeWidgets['start']['time'].updateShadowValue(); - if (window.timeWidgets['end']['time'].onChange) - window.timeWidgets['end']['time'].onChange(); // method from SOGoTimePicker + window.timeWidgets['end']['date'].updateShadowValue(); + window.timeWidgets['end']['time'].updateShadowValue(); + window.timeWidgets['start']['date'].updateShadowValue(); + window.timeWidgets['start']['time'].updateShadowValue(); + if (window.timeWidgets['end']['time'].onChange) + window.timeWidgets['end']['time'].onChange(); // method from SOGoTimePicker + } } } else { // End date was changed - var delta = endDate.valueOf() - startDate.valueOf(); - if (delta < 0) { - alert(labels.validate_endbeforestart); + if (endDate == null) { var oldEndDate = window.getShadowEndDate(); window.setEndDate(oldEndDate); - - window.timeWidgets['end']['date'].updateShadowValue(); - window.timeWidgets['end']['time'].updateShadowValue(); - window.timeWidgets['end']['time'].onChange(); // method from SOGoTimePicker } else { - window.setEndDate(); + var delta = endDate.valueOf() - startDate.valueOf(); + if (delta < 0) { + alert(labels.validate_endbeforestart); + var oldEndDate = window.getShadowEndDate(); + window.setEndDate(oldEndDate); + + window.timeWidgets['end']['date'].updateShadowValue(); + window.timeWidgets['end']['time'].updateShadowValue(); + window.timeWidgets['end']['time'].onChange(); // method from SOGoTimePicker + } + else { + window.setEndDate(); + } } } } diff --git a/UI/WebServerResources/UIxPreferences.js b/UI/WebServerResources/UIxPreferences.js index fad9612a9..16f560f26 100644 --- a/UI/WebServerResources/UIxPreferences.js +++ b/UI/WebServerResources/UIxPreferences.js @@ -51,9 +51,9 @@ function savePreferences(sender) { } if ($("enableVacationEndDate") && $("enableVacationEndDate").checked) { var e = $("vacationEndDate_date"); - var endDate = e.calendar.prs_date(e.value); + var endDate = e.inputAsDate(); var now = new Date(); - if (endDate.getTime() < now.getTime()) { + if (isNaN(endDate.getTime()) || endDate.getTime() < now.getTime()) { showAlertDialog(_("End date of your auto reply must be in the future.")); sendForm = false; } diff --git a/UI/WebServerResources/UIxTaskEditor.js b/UI/WebServerResources/UIxTaskEditor.js index 2c89ee54a..5a0351937 100644 --- a/UI/WebServerResources/UIxTaskEditor.js +++ b/UI/WebServerResources/UIxTaskEditor.js @@ -18,11 +18,11 @@ function uixEarlierDate(date1, date2) { return null; } -function validateDate(date, label) { +function validateDate(which, label) { var result, dateValue; - dateValue = date.calendar.prs_date(date.value); - if (date.value.length != 10 || !dateValue) { + dateValue = this._getDate(which); + if (dateValue == null) { alert(label); result = false; } else @@ -41,14 +41,14 @@ function validateTaskEditor() { e = document.getElementById('startTime_date'); if (!e.disabled) { - startdate = validateDate(e, labels.validate_invalid_startdate); + startdate = validateDate('start', labels.validate_invalid_startdate); if (!startdate) return false; } e = document.getElementById('dueTime_date'); if (!e.disabled) { - enddate = validateDate(e, labels.validate_invalid_enddate); + enddate = validateDate('due', labels.validate_invalid_enddate); if (!enddate) return false; } @@ -204,6 +204,9 @@ this._getDate = function(which) { date.setHours(time[0]); date.setMinutes(time[1]); + if (isNaN(date.getTime())) + return null; + return date; }; @@ -235,6 +238,11 @@ this.getShadowDueDate = function() { this._setDate = function(which, newDate) { window.timeWidgets[which]['date'].setInputAsDate(newDate); window.timeWidgets[which]['time'].value = newDate.getDisplayHoursString(); + + // Update date picker + var dateComponent = jQuery(window.timeWidgets[which]['date']).closest('.date'); + dateComponent.data('date', window.timeWidgets[which]['date'].value); + dateComponent.datepicker('update'); }; this.setStartDate = function(newStartDate) { @@ -242,7 +250,6 @@ this.setStartDate = function(newStartDate) { }; this.setDueDate = function(newDueDate) { - // window.alert(newDueDate); this._setDate('due', newDueDate); }; @@ -268,8 +275,8 @@ this.initTimeWidgets = function (widgets) { jQuery(widgets['due']['date']).closest('.date').datepicker({autoclose: true}); jQuery('#statusTime_date').closest('.date').datepicker({autoclose: true}); - widgets['start']['date'].observe("change", this.onAdjustDueTime, false); - widgets['start']['time'].observe("time:change", this.onAdjustDueTime, false); + jQuery(widgets['start']['date']).change(onAdjustTime); + widgets['start']['time'].on("time:change", onAdjustDueTime); widgets['start']['time'].addInterface(SOGoTimePickerInterface); widgets['due']['time'].addInterface(SOGoTimePickerInterface); };