var calendar = {
	
	calendarDiv : null,
	earliestDataYr : 2005,
	latestDataYr : 2010,
	leapYearFlag : false,
	today : '',
	month : '',
	day : '',
	yr : '',
	currentDate : '',
	currentMonth : '',
	currentYr : '',
	tdArr : new Array(),
	preva : null,
	nexta : null,
	_eventsArr : new Array(),

	_months : [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
	_monthNames : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	_dayNames : new Array(),

	init : function() {
		calendar._dayNames[0] = new Array('Sunday','S');
		calendar._dayNames[1] = new Array('Monday','M');
		calendar._dayNames[2] = new Array('Tuesday','T');
		calendar._dayNames[3] = new Array('Wednesday','W');
		calendar._dayNames[4] = new Array('Thursday','T');
		calendar._dayNames[5] = new Array('Friday','F');
		calendar._dayNames[6] = new Array('Saturday','S');
		calendar.today = new Date();
		calendar.day = calendar.currentDate = calendar.today.getDate();
		if (currentmonth == '') {
			calendar.month = calendar.currentMonth = calendar.today.getMonth();
		}
		else { 
			calendar.currentMonth = calendar.today.getMonth();
			calendar.month = currentmonth;
		}
		calendar.yr = calendar.currentYr = calendar.today.getFullYear();
		var calDiv = document.getElementById('calendar');
		calendar.calendarDiv = calDiv.getElementsByTagName('div')[0];
		calendar.drawCalendar();
// start to add class names for hover on dates with events - use inline instead
/*		calendar._eventDatesA = document.getElementsByTagName('a');
		for(var i=0; i<calendar._eventDatesA.length; i++) {
			if(calendar._eventDatesA[i].className != null && calendar._eventDatesA[i].className == 'date') {
				calendar.addEvent(calendar._eventDatesA[i],'mouseover',Tip);
				calendar.addEvent(calendar._eventDatesA[i],'mouseout',unTip);
			}
		} */				
	},

	drawCalendar : function() {
		if(this.id) {
			if (this.id == 'prev') {
				calendar.month--;
				if (calendar.month < 0) {
					if (calendar.yr >= 2008) {
						calendar.month = 11;
						calendar.yr--;
					}
					else { calendar.month++; }
				}		
			}
			if (this.id == 'next') {
				calendar.month++;
				if (calendar.month > 11) {
					calendar.month = 0;
					calendar.yr++;
				}
			}
		}
		calendar.isLeapYear();
		var offset = (calendar.yr + Math.floor((calendar.yr - 1)/4) + calendar._months[calendar.month] + 1 - 2);
		offset = offset % 7;
/* for leap year */
   		if (calendar.leapYearFlag && calendar.month > 2) offset += 1;
		var num = calendar.daysInMonth(calendar.month, calendar.yr);
		var cnt = calendar._eventsArr.length;
		var _temp = new Array();
		var tempcnt = 0;
		for (var i=0; i<cnt; i++) {
			var dateArr = calendar._eventsArr[i][3].split('/');
      			while(dateArr[0].length > 1 && dateArr[0].substring(0,1) == '0') {
         			dateArr[0] = dateArr[0].substring(1,dateArr[0].length);
			}
			if (dateArr[0] == (parseInt(calendar.month) + 1)) {
     				while(dateArr[1].length > 1 && dateArr[1].substring(0,1) == '0') {
         				dateArr[1] = dateArr[1].substring(1,dateArr[1].length);
				}
				_temp[tempcnt] = new Array(calendar._eventsArr[i][0],dateArr[1],calendar._eventsArr[i][5]);
				tempcnt++;
			}
      		}
		var str = '';
		str += '<table cellspacing="0" cellpadding="0" border="0" >\n';
		str += '<tr><td colspan="7" id="hdr"><a id="prev"></a><span class="month">' + calendar._monthNames[calendar.month] + '</span>&nbsp;<span class="year">' + calendar.yr + '</span><a id="next"></a></td></tr>';
		str += '<tr>';
		for (var i=0; i<7; i++) {
			str += '<th title="' + calendar._dayNames[i][0] + '">' + calendar._dayNames[i][1] + '</th>\n';
		}
		str += '</tr>\n<tr>\n';
		var brk = calendar.currentDate + offset;			
		for (var i=1; i<=42; i++)
		{
   			str += '<td';
   			if ((calendar.month < calendar.currentMonth &&
				calendar.yr == calendar.currentYr) ||
				(i <= brk && calendar.month == calendar.currentMonth &&
				calendar.yr == calendar.currentYr) || calendar.yr < calendar.currentYr) {
				str += ' class="invalid"';
			}
			else { str += ' class="valid"'; }
			str += '>';
			if (i <= offset || i > num+offset) { str += '&nbsp;'; }
			else {
				if (_temp.length > 0) {
					var found = 0;
					for (var j=0; j<_temp.length; j++) {
						if (_temp[j][1] == i-offset) {
							str += '<a class="date" href="http://www.alsofmi.org/index.php' + _temp[j][2] + '&amp;mnth=' + calendar.month + '" onmouseover="Tip(\'' + _temp[j][0] + '\');" onmouseout="UnTip();">' + (i-offset) + '</a>';
							found = 1;
							break;
						}
					}
					if(found == 0) { str +=  i-offset; }
				}
				else { str += i-offset; }
			}
			str += '</td>\n';
			if (i%7 == 0) {
				str += '</tr>\n';
				if (i < 42) { str += '<tr>\n'; }
			}
		}
		str += '</table>\n';
		calendar.calendarDiv.innerHTML = str;
		calendar.addEventHandlers();
	},

	isLeapYear : function() {
		if (calendar.yr%4 == 0)
		{
			if (calendar.yr%100 == 0)
			{
				if (calendar.yr%400 == 0)
					calendar.leapYearFlag = true;
				else calendar.leapYearFlag = false;
			}
			else calendar.leapYearFlag = true;
		}
		else calendar.leapYearFlag = false;
	},

	daysInMonth : function(iMonth, iYear) {
		return 32 - new Date(iYear, iMonth, 32).getDate();
	},

	drawToolTip : function() {
		return true;
	},

	addEventHandlers : function() {
		calendar.preva = document.getElementById('prev');
		calendar.addEvent(calendar.preva,'click',calendar.drawCalendar);
		calendar.nexta = document.getElementById('next');
		calendar.addEvent(calendar.nexta,'click',calendar.drawCalendar);
	},

	addEvent : function(obj, type, func) {
		if (obj.addEventListener) {obj.addEventListener(type, func, false);}
		else if (obj.attachEvent) {
			obj["e" + type + func] = func;
			obj[type + func] = function() {obj["e" + type + func] (window.event);}
			obj.attachEvent("on" + type, obj[type + func]);
		}
		else {obj["on" + type] = func;}
	}
}