in tapestry-framework/src/org/apache/tapestry/form/DatePicker.js [464:544]
Calendar.prototype._update = function() {
// Calculate the number of days in the month for the selected date
var date = this._currentDate;
var today = toISODate(new Date());
var selected = "";
if (this._selectedDate != null) {
selected = toISODate(this._selectedDate);
}
var current = toISODate(this._currentDate);
var d1 = new Date(date.getFullYear(), date.getMonth(), 1);
var d2 = new Date(date.getFullYear(), date.getMonth()+1, 1);
var monthLength = Math.round((d2 - d1) / (24 * 60 * 60 * 1000));
// Find out the weekDay index for the first of this month
var firstIndex = (d1.getDay() - this._firstDayOfWeek) % 7 ;
if (firstIndex < 0) {
firstIndex += 7;
}
var index = 0;
while (index < firstIndex) {
this._dateSlot[index].value = -1;
this._dateSlot[index].data.data = String.fromCharCode(160);
this._dateSlot[index].data.parentNode.className = "";
this._dateSlot[index].data.parentNode.style.fontWeight = "normal";
this._dateSlot[index].data.parentNode.style.border= "none";
index++;
}
for (i = 1; i <= monthLength; i++, index++) {
this._dateSlot[index].value = i;
this._dateSlot[index].data.data = i;
this._dateSlot[index].data.parentNode.className = "";
this._dateSlot[index].data.parentNode.style.fontWeight = "normal";
this._dateSlot[index].data.parentNode.style.border= "none";
if (toISODate(d1) == today) {
this._dateSlot[index].data.parentNode.className = "today";
this._dateSlot[index].data.parentNode.style.fontWeight = "bold";
}
if (toISODate(d1) == current) {
this._dateSlot[index].data.parentNode.className += " current";
this._dateSlot[index].data.parentNode.style.border= "1px dotted WindowText";
}
if (toISODate(d1) == selected) {
this._dateSlot[index].data.parentNode.className += " selected";
this._dateSlot[index].data.parentNode.style.border= "1px solid WindowText";
}
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+1);
}
var lastDateIndex = index;
while(index < 42) {
this._dateSlot[index].value = -1;
this._dateSlot[index].data.data = String.fromCharCode(160);
this._dateSlot[index].data.parentNode.className = "";
this._dateSlot[index].data.parentNode.style.fontWeight = "normal";
this._dateSlot[index].data.parentNode.style.border= "none";
++index;
}
// Week numbers
if (this._includeWeek) {
d1 = new Date(date.getFullYear(), date.getMonth(), 1);
for (i=0; i < 6; ++i) {
if (i == 5 && lastDateIndex < 36) {
this._weekSlot[i].data.data = String.fromCharCode(160);
this._weekSlot[i].data.parentNode.style.borderRight = "none";
} else {
week = weekNumber(this, d1);
this._weekSlot[i].data.data = week;
this._weekSlot[i].data.parentNode.style.borderRight = "1px solid WindowText";
}
d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+7);
}
}
}