// Calendar Object
// a widget that draws a calendar with layers
// 19990326
// Copyright 1999 Dan Steinman
// Distributed under the terms of the GNU Library General Public License
// Available at http://www.dansteinman.com/dynduo/
function Calendar(x,y,hSpace,vSpace) {
this.name = "Calendar"+(Calendar.count++)
this.x = x
this.y = y
this.hSpace = hSpace
this.vSpace = vSpace
this.bgColor = '#e5e5e5'
this.dayBarColor = '#c0c0c0'
this.origDate = new Date()
this.setDate = CalendarSetDate
this.useDate = CalendarUseDate
this.writeDate = CalendarWriteDate
this.build = CalendarBuild
this.activate = CalendarActivate
}
function CalendarBuild() {
this.w = 7*this.hSpace
this.h = 7*this.vSpace
this.useDate(this.origDate)
var days = new Array('Su','Mo','Tu','We','Th','Fr','Sa')
this.css = css(this.name+'Cal',this.x,this.y,this.w,this.h,this.bgColor)+
css(this.name+'CalDayBar',0,0,this.w,this.vSpace,this.dayBarColor)
for (var i=0;i<7;i++) {
this.css+=css(this.name+'CalDay'+days[i],this.hSpace*i,0)
}
var c = 0
for (var i=0;i<6;i++) {
for (var j=0;j<7;j++) {
this.css+=css(this.name+'Cal'+(c++),this.hSpace*j,this.vSpace*(i+1))
}
}
this.div = '
\n'+
'
\n'
for (var i=0;i<7;i++) {
this.div+='
'+days[i]+'
\n'
}
this.div+='
\n'
for (var i=0;i<42;i++) {
this.div+='
'+this.spotstr[i]+'
\n'
}
this.div+='
'
}
function CalendarActivate(show) {
this.lyr = new DynLayer(this.name+'Cal')
this.spot = new Array()
for (var i=0;i<42;i++) {
this.spot[i] = new DynLayer(this.name+'Cal'+i)
}
}
function CalendarSetDate(month,day,year) {
var date = new Date()
if (month!=null) date.setMonth(month)
if (day!=null) date.setDate(day)
if (year!=null) {
if (year>=2000) date.setYear(year)
else date.setYear(year-1900)
}
this.useDate(date)
this.writeDate()
}
function CalendarUseDate(date) {
this.day = date.getDate()
this.weekday = date.getDay()
this.month = date.getMonth()
this.year = parseInt(date.getYear())
if (this.year<2000) this.year+=1900
date.setDate(1)
this.calshift = date.getDay()
var monthlength = new Array(31,28,31,30,31,30,31,31,30,31,30,31)
if (this.year/4==Math.floor(this.year/4) || this.year/400==Math.floor(this.year/400)) {
monthlength[1] = 29
}
daycount = monthlength[this.month]
var m = (this.month==0)? 11 : this.month-1
calstart = monthlength[m]-this.calshift+1
if (this.month==2) calstart=28
this.spotstr = new Array()
for (var i=0;i '+(calstart+i)+''
}
for (var i=this.calshift;i '+day+''
}
var c = 1
for (var i=daycount+this.calshift;i<42;i++) {
var day = c++
if (day<10) day = ' '+day
this.spotstr[i] = ' '+day+'
'
}
}
function CalendarWriteDate() {
for (var i=0;i<42;i++) {
this.spot[i].write(this.spotstr[i])
}
}
Calendar.count = 0