in tapestry-framework/src/org/apache/tapestry/form/DatePicker.js [813:851]
function weekNumber(cal, date) {
var dow = date.getDay();
var doy = dayOfYear(date);
var year = date.getFullYear();
// Compute the week of the year. Valid week numbers run from 1 to 52
// or 53, depending on the year, the first day of the week, and the
// minimal days in the first week. Days at the start of the year may
// fall into the last week of the previous year; days at the end of
// the year may fall into the first week of the next year.
var relDow = (dow + 7 - cal.getFirstDayOfWeek()) % 7; // 0..6
var relDowJan1 = (dow - doy + 701 - cal.getFirstDayOfWeek()) % 7; // 0..6
var week = Math.floor((doy - 1 + relDowJan1) / 7); // 0..53
if ((7 - relDowJan1) >= cal.getMinimalDaysInFirstWeek()) {
++week;
}
if (doy > 359) { // Fast check which eliminates most cases
// Check to see if we are in the last week; if so, we need
// to handle the case in which we are the first week of the
// next year.
var lastDoy = yearLength(year);
var lastRelDow = (relDow + lastDoy - doy) % 7;
if (lastRelDow < 0) {
lastRelDow += 7;
}
if (((6 - lastRelDow) >= cal.getMinimalDaysInFirstWeek())
&& ((doy + 7 - relDow) > lastDoy)) {
week = 1;
}
} else if (week == 0) {
// We are the last week of the previous year.
var prevDoy = doy + yearLength(year - 1);
week = weekOfPeriod(cal, prevDoy, dow);
}
return week;
}