// 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 = '#FEFEFF'
	this.dayBarColor = '#CCCCCC'
	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('DL','DT','DC','DJ','DV','DS','DG')

	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 = '<div id="'+this.name+'Cal">\n'+
	'<div id="'+this.name+'CalDayBar">\n'
	for (var i=0;i<7;i++) {
		this.div+='<div id="'+this.name+'CalDay'+days[i]+'" class="calDay">&nbsp;'+days[i]+'</div>\n'
	}
	this.div+='</div>\n'
	for (var i=0;i<42;i++) {
		this.div+='<div id="'+this.name+'Cal'+i+'">'+this.spotstr[i]+'</div>\n'
	}
	this.div+='</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(0)
	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<this.calshift;i++) {
		this.spotstr[i] = '<div class="calShaded">&nbsp;'+(calstart+i)+'</div>'
	}
	for (var i=this.calshift;i<daycount+this.calshift;i++) {
		var day = i-this.calshift+1
		var str = (day==this.day)? 'calHighlighted':'calNormal'
		if (day<10) day = '&nbsp;'+day
		this.spotstr[i] = '<div class="'+str+'">&nbsp;'+day+'</div>'
	}
	var c = 1
	for (var i=daycount+this.calshift;i<42;i++) {
		var day = c++
		if (day<10) day = '&nbsp;'+day
		this.spotstr[i] = '<div class="calShaded">&nbsp;'+day+'</div>'
	}
}
function CalendarWriteDate() {
	for (var i=0;i<42;i++) {
		this.spot[i].write(this.spotstr[i])
	}
}
Calendar.count = 0
