rem: acceptButton.setAttribute("disabled", "true"); 
add: enableAccept = false; 
context: function updateAccept(){    var kDefaultTimezone = calendarDefaultTimezone();    var acceptButton = document.getElementById("calendar-event-dialog").getButton("accept");    var title = getElementValue("item-title");    if (title.length == 0)        acceptButton.setAttribute("disabled", "true");    else if (acceptButton.getAttribute("disabled"))        acceptButton.removeAttribute("disabled");    // don't allow for end dates to be before start dates    var startDate;    var endDate;    if (isEvent(window.calendarItem)) {        startDate = jsDateToDateTime(getElementValue("event-starttime"));        endDate = jsDateToDateTime(getElementValue("event-endtime"));        // For all-day events we are not interested in times and compare only dates.        if (getElementValue("event-all-day", "checked")) {            // jsDateToDateTime returnes the values in UTC. Depending on the local            // timezone and the values selected in datetimepicker the date in UTC            // might be shifted to the previous or next day.            // For example: The user (with local timezone GMT+05) selected             // Feb 10 2006 00:00:00. The corresponding value in UTC is            // Feb 09 2006 19:00:00. If we now set isDate to true we end up with            // a date of Feb 09 2006 instead of Feb 10 2006 resulting in errors            // during the following comparison.            // Calling getInTimezone() ensures that we use the same dates as             // displayed to the user in datetimepicker for comparison.            startDate = startDate.getInTimezone(kDefaultTimezone);            endDate = endDate.getInTimezone(kDefaultTimezone);            startDate.isDate = true;            endDate.isDate = true;        }    } else {        startDate = getElementValue("todo-has-entrydate", "checked") ?             jsDateToDateTime(getElementValue("todo-entrydate")) : null;        endDate = getElementValue("todo-has-duedate", "checked") ?             jsDateToDateTime(getElementValue("todo-duedate")) : null;    }    var timeWarning = document.getElementById("end-time-warning");    if (endDate && startDate && endDate.compare(startDate) == -1) {        acceptButton.setAttribute("disabled", "true");        timeWarning.removeAttribute("hidden");    } else {        acceptButton.removeAttribute("disabled");        timeWarning.setAttribute("hidden", "true");    }    // can't add/edit items in readOnly calendars    document.getElementById("read-only-item").setAttribute("hidden", !gReadOnlyMode);    var cal = document.getElementById("item-calendar").selectedItem.calendar;    document.getElementById("read-only-cal").setAttribute("hidden",                                               !cal.readOnly);    if (gReadOnlyMode || cal.readOnly) {        acceptButton.setAttribute("disabled", "true");    }    if (!updateTaskAlarmWarnings()) {        acceptButton.setAttribute("disabled", "true");    }    return;}
meta: 9421	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/9421/0ee23403c8ead5ac16a3a2e00f032aa7dfee448d/calendar-event-dialog.js/clean/calendar/base/content/calendar-event-dialog.js