
var Calendar = Class.create();

Calendar.prototype = {
	initialize : function(dom_element_id, data_dom_element_id)	{
		this.dom_element_id = dom_element_id;
		this.event_container = data_dom_element_id;
		$(dom_element_id).calendar = this;
		var today = new Date();
		this.month = today.getMonth() + 1;
		this.year = today.getFullYear();
	},
	
	event_container : null,
	dom_element_id : null,
	data_dom_element_id : null,
	month : null,
	year : null,
	month_list : ['January','February','March','April','May','June','July','August','September','October','November','December'],
	this_months_events : null,
	date_to_show : null,
	
	build_string : function(m, y, cM, cH, cDW, cD, brdr, events)	{
		var dim=[31,0,31,30,31,30,31,31,30,31,30,31];
		
		var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st
		oD.od=oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st
		
		var todaydate=new Date(); //DD added
		var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0; //DD added
		
		dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
		var t='';
		t+='<div class="'+cM+'"><table class="'+cM+'" cols="7" cellpadding="0" border="'+brdr+'" cellspacing="0"><tr align="center">';
		t+='<td align="center" class="'+cH+'"><a href="javascript:void(0);" onclick="' + "$('" + this.dom_element_id + "').calendar.draw_another_month(-1);" + '">&lt;&lt;</a></td>';
		t+='<td colspan="5" align="center" class="'+cH+'">'+this.month_list[m-1]+' '+y+'</td>';
		t+='<td align="center" class="'+cH+'"><a href="javascript:void(0);" onclick="' + "$('" + this.dom_element_id + "').calendar.draw_another_month(1);" + '">&gt;&gt;</a></td>';
		t+='</tr><tr align="center">';
		for(s=0;s<7;s++)t+='<td class="'+cDW+'">'+"SMTWTFS".substr(s,1)+'</td>';
		t+='</tr><tr align="center">';
		var side = 'left';
		for(i=1;i<=42;i++)	{
			var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
			var busy=false;
			for(j = 0; j < events.length; j++)
				if(events[j].event_day == x && events[j].event_month == this.month && events[j].event_year == this.year)
					busy=true;
			t+='<td class="'+cD+'">';
			t+='<div class="day_border' + (x == '&nbsp;' ? '"' : ' bordered_day"') + '">';
			t+='<table width=100%>';
			t+='<tr>';
			t+='<td width=33%>';
			t+='<font color=#f3f3f3>&nbsp;</font>';
			t+='</td>';
			t+='<td width=33%></td>';
			t+='<td align=right width=33%';
			if(busy) t+=' class="busy clickable" onclick="' + '$(\'' + this.dom_element_id + '\').calendar.show_days_events(' + x + ');' + '">';
			else t+='>';
			t+='</td>';
			t+='</tr>';
			t+= '<tr>';
			t+='<td> </td>';
			t+='<td class="clickable" onclick="add_new_event(' + parseInt(x) + ',' + (this.month - 1) + ',' + this.year + ');">';
			if(x == scanfortoday) t+='<span class="today">' + x + '</span>';
			else t+=x;
			t+='</td>';
			t+='<td> </td>';
			t+='</tr>';
			t+='<tr>';
			t+='<td> </td>';
			t+='<td> </td>';
			t+='<td>';
			t+='<font color=#f3f3f3>&nbsp;</font>';
			t+='</td>';
			t+='</tr>';
			t+='</table>';
			t+='</div>';
			t+='</td>';
				
			if(((i)%7==0)&&(i<36))
				t+='</tr><tr align="center">';
		}
		t+='</tr></table></div>';
	
		return t;
	},
	
	show_days_events : function(day)	{
		var calendar_data = this.this_months_events;
		var event_markup = '';
		
		for(var i = 0; i < calendar_data.length; i++)	{
			if(calendar_data[i].event_day == day)	{
				event_markup += '<div class="event_summary">' +
								'<a target="_blank" href="' + calendar_data[i].event_url + '">' +
								calendar_data[i].event_title +
								'</a>' +
								'<br/>' + 								
								'<span>' + calendar_data[i].event_date_label + '</span>' +
								'<span>, </span>' + 
								'<span>' + calendar_data[i].event_time + '</span>' +
								'<br/>' +
								'<span>' + calendar_data[i].event_location + '</span>' + 
								'<br/><br/>' +
								'<span>' + calendar_data[i].event_summary + '</span>' + 
								'<div class="event_author">' + 
								'<a href="view_profile.php?uid=' + calendar_data[i].user_id + '">--' +
								calendar_data[i].user_name + 
								'</a>' +
								'</div>' +
								'</div>'; 
			}
		}
		
		$(this.event_container).innerHTML = event_markup;	
	}	,
	
	draw : function(date_to_show)	{
		this.request_data();
		if(date_to_show)
			this.date_to_show = date_to_show;
	},
	
	request_data : function()	{
		$(this.dom_element_id).innerHTML = '<img src="images/ajax-loader.gif"/>';
		var myAjax = new Ajax.Request(
		'services/json.this_months_events.php?month=' + this.month + '&dom_element_id=' + this.dom_element_id, 
		{
			method: 'get', 
			parameters: '', 
			onComplete: this.draw_with_data
		});		
	},
	
	draw_with_data : function(ajax)	{
		var json_data = eval('(' + ajax.responseText + ')');
		var dom_element_id = json_data.dom_element_id;
		var events_data = json_data.data;
		$(dom_element_id).calendar.build_from_ajax(events_data);
		if($(dom_element_id).calendar.date_to_show)	{
			$(dom_element_id).calendar.show_days_events($(dom_element_id).calendar.date_to_show);
			$(dom_element_id).calendar.date_to_show = null;	
		}
	},
	
	build_from_ajax : function(events_data)	{
		this.this_months_events = events_data;
		$(this.dom_element_id).innerHTML = this.build_string(this.month, this.year, "base", "month", "daysofweek", "days", 0, events_data);
	},
	
	insert_markup : function()	{
	},
	
	draw_another_month : function(month_offset)	{
		this.month += month_offset;
		if(this.month == 0)	{
			this.month = 12;
			this.year--;
		}
		if(this.month == 13) {
			this.month = 1;
			this.year++;	
		}
				
		this.draw();
	}
}