var cal = {
	cal_events_id:'calendario_eventos',
	cal_id:'calendario_mini',
	events:'',
	event_links:'',
	today_ymd:'',
	start_month:'',
	end_month:'',
	event_date_prefix:'event-',
	init:function()
	{ 
		if ($(this.cal_events_id) && $(this.cal_id)) {
			var today = new Date();	
			var d = today.getDate();
			var m = today.getMonth() + 1;	
			var y = today.getYear();
			
			if (y < 1900) { y += 1900 }
			
			if (d<10) {var today_d = '0'+d;} else {var today_d = d;}
			if (m<10) {var today_m = '0'+m;} else {var today_m = m;}
			
			this.today_ymd = y +'-' + today_m + '-' + today_d;			
		
			this.getEvents(this.cal_events_id);	
			this.build(m,y);
		}
	},
	getEvents:function (id)
	{
		var event_id = '';	
		this.events = $H();
		this.event_links = $H();
		
		$A($(id).childNodes).each( function(item) {
			if (item.tagName == 'LI') {
				
				event_id = '';
				cal.events[item.id.replace(cal.event_date_prefix,'')] = '';
			
				var li = $(item.id);
				var event_date = li.id.replace(cal.event_date_prefix,'');

				if (event_date.substring(0,10) == cal.today_ymd) {
					li.innerHTML += ' - <em>Hoje!</em>';
				}
				
				var links = li.getElementsByTagName('A');
				var link_text = '';
				
				for (var i = 0; i < links.length; i++) {
					link_text = links[i].innerHTML;
					link_href = links[i].href;
				}

				if (event_date.substring(10,12)) {
					event_id = event_date.substring(0,10);
				} else {
					event_id = event_date;
				}
				
				if (cal.start_month == '' || cal.start_month == undefined) {
					cal.start_month = event_id.substring(5,7);
				}
				
				if (cal.events[event_id] == undefined) { cal.events[event_id] = ''; }
				
				cal.events[event_id] += "• "+link_text + "\n";
				cal.event_links[event_id] = link_href;
			}
		});	
		
		this.end_month = event_id.substring(5,7);

	},
	getNumDaysInMonth:function(m,y)
	{
		return (32 - new Date(y, m-1, 32).getDate());
	},
	getStartOfMonth:function(m,y)
	{
		return (new Date(y,m-1,1)) + '';
	},
	build:function(m,y)
	{
		
		var this_day = new Date(y,m-1,1) + '';		
		var month = this_day.substring(3,8);
		
		var pad = true;
		var pad_html = '';
		var d = '';
		var days = new Array('Sun','Mon','Tue','Wed','Tue','Fri','Sat');
		
		var num_days = this.getNumDaysInMonth(m,y);
		var start_date = this.getStartOfMonth(m,y);
		
		$(this.cal_id).innerHTML = '';

		if (this.start_month == this.end_month) {
			
			$(this.cal_id).innerHTML = '<h4>'+month+'   '+y+'</h4>';
		} else if (m > this.start_month && m < this.end_month) {
				
			$(this.cal_id).innerHTML = '<h4><a href="javascript:cal.next('+m+','+y+');" class="next">»</a> <a href="javascript:cal.prev('+m+','+y+');" class="prev">«</a> '+month+'   '+y+'</h4>';		
		} else if (m < this.end_month) {
				
			$(this.cal_id).innerHTML = '<h4><span class="prev">«</span> <a href="javascript:cal.next('+m+','+y+');" class="next">»</a> '+month+'   '+y+'</h4>';
		} else if (m > this.start_month) {
			
			$(this.cal_id).innerHTML = '<h4><a href="javascript:cal.prev('+m+','+y+');" class="prev">«</a> <span class="next">»</span> '+month+'   '+y+'</h4>';			
		}

		for (var i = 0; i < days.length; i++) {
		
			$(this.cal_id).innerHTML += '<strong>'+days[i]+'</strong>';
			
			if (days[i] == start_date.substring(0,3)) {
				pad = false;
			}
			if (pad == true) {
				pad_html += this.buildDay(0);
			}
		}
		
		$(this.cal_id).innerHTML += pad_html;

		if (m<10) {m = '0'+m;}		
		
		for (var i = 1; i <= num_days; i++) {
			if (i<10) {d = '0'+i;} else {d = i;}
			$(this.cal_id).innerHTML += this.buildDay(i,y+'-'+m+'-'+d);			
		}

	},
	buildDay:function(i,ymd)
	{
		var day = '';

		if (this.events[ymd] && ymd == this.today_ymd) {
			day = '<a href="'+this.event_links[ymd]+'" onMouseOver="cal.eventHighlight(\''+ymd+'\');" onMouseOut="cal.eventLowlight(\''+ymd+'\');" class="hoje possui_eventos" title="'+this.events[ymd]+'">'+i+'</a>';			
		} else if (i > 0 && ymd == this.today_ymd) {
			day = '<span class="hoje">'+i+'</span>';		
		} else if (this.events[ymd]) {
			day = '<a href="'+this.event_links[ymd]+'" onMouseOver="cal.eventHighlight(\''+ymd+'\');" onMouseOut="cal.eventLowlight(\''+ymd+'\');" class="possui_eventos" title="'+this.events[ymd]+'">'+i+'</a>';			
		} else if (i > 0) {
			day = '<span>'+i+'</span>';
		} else {
			day = '<span class="empty"></span>';
		}
	
		return day;
	},
	eventHighlight:function(ymd)
	{
		$(this.event_date_prefix + ymd).className = 'highlight';
        var extra_date_cursor = 1;
        while($(this.event_date_prefix + ymd + '-' + extra_date_cursor)){
            $(this.event_date_prefix + ymd + '-' + extra_date_cursor).className = 'highlight';
			extra_date_cursor++;
        }

	},
	eventLowlight:function(ymd)
	{
		$(this.event_date_prefix + ymd).className = '';
        var extra_date_cursor = 1;
        while($(this.event_date_prefix + ymd + '-' + extra_date_cursor)){
            $(this.event_date_prefix + ymd + '-' + extra_date_cursor).className = '';
			extra_date_cursor++;
        }
	},	
	next:function(m,y)
	{
		var date = new Date(y,m,1);
      	var m = date.getMonth() + 1;
      	var y = date.getYear();
      	
      	if (y < 1900) { y += 1900 }      	
      	
		this.build(m,y);
	},
	prev:function(m,y)
	{
		var date = new Date(y,m-2,1);
      	var m = date.getMonth() + 1;
      	var y = date.getYear();	
      	
      	if (y < 1900) { y += 1900 }      	
      	
		this.build(m,y);     	
	}
}

function init () {
	cal.init();
}