var Calendar = new Class({
	initialize: function(mon,year,elm) {
		this.days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
		this.months = ["January","February","March","April","May","June","July","August","September","October","November","Decemeber"];
		this.monthDays = [31,28,31,30,31,30,31,31,30,31,30,31];
		this.useShortDays = true;
		this.month = mon;
		this.year = year;
		this.element = elm;
		this.insertTable();
		//$("moocal_prev").onclick = this.prevMonth.bind(this);
		//$("moocal_next").onclick = this.nextMonth.bind(this);
		this.insertDays();
		this.events = [];
			$each($$('.events_link'), function(el){
					this.addEvent(el);
					this.events.push(el);
					el.style.display = "none";
			}, this);
		this.toolTips = new Tips($$('.event_links'), {
        	maxTitleChars: 50   //I like my captions a little long
   		});
	},
	/*
		event format
		a rel="events" title="mmddyyyy::caption::text" href="link to event"
	*/
	addEvent: function (link){
		var info = link.title.split("::");
		if(this.month+1 == parseInt(info[0].substring(0,2)) && this.year == parseInt(info[0].substring(4,8))){
			//if this month/year
			mday = parseInt(info[0].substring(2,4));
			day = this.getStartDay()+mday-1;
			event_text = link.innerHTML;
			if(event_text == ""){
				event_text = info[2];
			}
			if(info.length > 3){
				$('moocal_day_'+day).className = info[3];
			}else{
				$('moocal_day_'+day).className = "moocal_event";
			}
			$('moocal_day_'+day).innerHTML = '<a class="event_links" href="'+link.href+'" title="'+info[1]+'::'+event_text+'">'+mday+'</a>';
		}
	},
	showEvent: function(link){
		//load tool tip with event info;
		var event_info = link.title.split("::");
		var event_text = link.innerHTML;
		alert("Event info: "+event_info[0]+"\n"+event_info[1]+"\n"+event_text+"\n");
	},
	prevMonth: function(){
		this.switchMonth("prev");	
	},
	nextMonth: function(){
		this.switchMonth("next");
	},
	switchMonth: function(direction) {
		if(direction == "next"){
			if(this.month == 12){
				this.month = 1;
				this.year += 1;
			}else{
				this.month += 1;
			}
		}else{
			if(this.month == 1){
				this.month = 12;
				this.year -= 1;
			}else{
				this.month -= 1;
			}
		}
		this.destroyMonth();
		this.insertDays();
		this.events = [];
			$each($$('.events_link'), function(el){
					this.addEvent(el);
					this.events.push(el);
					el.style.display = "none";
			}, this);
		this.toolTips = new Tips($$('.event_links'), {
        	maxTitleChars: 50   //I like my captions a little long
   		});

	},
	getStartDay: function(){
		var d = new Date;
		d.setMonth(this.month);
		d.setFullYear(this.year);
		d.setDate(1);
		return d.getDay();
	},
	insertDays: function (){
		var d = new Date;
		d.setMonth(this.month);
		d.setFullYear(this.year);
		d.setDate(1);
		start_day = d.getDay();
		day_cnt = 1;
		end_day = start_day + this.monthDays[this.month] - 1;
		if(this.month != 0){
			lm_day = this.monthDays[this.month-2];
		}else{
			lm_day = this.monthDays[11];
		}
		sday = start_day-1;
		for(i1 = 0; i1 < start_day; i1++){
			d = lm_day-sday;
			//if(d == NaN){
			//	d = "";
			//}
			$("moocal_day_"+i1).className = 'moocal_off';
			$("moocal_day_"+i1).abbr = '';
			//$("moocal_day_"+i1).innerHTML = ' '+d;
			//sday -= 1;
		}
		for(i = start_day; i <= end_day; i++){
			$("moocal_day_"+i).innerHTML = ' '+day_cnt;
			$("moocal_day_"+i).abbr = day_cnt;
			$("moocal_day_"+i).className = 'moocal_day';
			day_cnt++;	
		}
		nm_day = 1;
		for(i2 = end_day+1; i2 <= 41; i2++){
			$("moocal_day_"+i2).className = 'moocal_off';
			$("moocal_day_"+i2).innerHTML = ' '+nm_day;
			$("moocal_day_"+i2).abbr = '';
			nm_day++;
		}
		$("moocal_month").innerHTML = this.months[this.month]+" "+this.year;
	},
	insertTable: function(){
		html = '<table class="moocal_table" cellpadding="3" cellspacing="0"><tr>';
		html += '<td class="moocal_header">&nbsp;</td><td class="moocal_header" align="center" colspan="5" id="moocal_month">'+this.months[this.month-1]+'</td><td align="right" class="moocal_header">&nbsp;</td></tr><tr>';
		for(e=0;e<this.days.length;e++){
			if(this.useShortDays){
				day = this.days[e].substring(0,1);
			}else{
				day = this.days[e].substring(0,4);
			}
			html += '<td class="moocal_day_header">'+day+'</td>';
		}
		html += "</tr><tr>";
		cnt = 0;
		for(i=0;i<42;i++){
			if(cnt == 7){
				html += "</tr><tr>";
				cnt = 0;
			}
			html += '<td id="moocal_day_'+i+'" class="moocal_day">&nbsp;</td>';
			cnt++;
		}
		html += '</tr></table>';
		$(this.element).innerHTML = html;
	},
	destroyMonth: function() {
		for(i = 0; i <= 41; i++){
			$("moocal_day_"+i).innerHTML = " ";
			$("moocal_day_"+i).className = "none";
		}
	}
})