function Evento( strDataIni, strDataFim, nome, link )
{
	
	var arrData = strDataIni.split( "/" );
	if ( arrData.length == 3 )
	{
		this.tipo = "normal";
		this.dataInicial = new Date( arrData[2], parseInt( arrData[1] ) - 1, arrData[0] );
		arrData = strDataFim != null ? strDataFim.split( "/"  ) : null;
		this.dataFinal = arrData == null ? this.dataInicial : new Date( arrData[2], parseInt( arrData[1] ) - 1, arrData[0] );
	}
	else
	{
		this.tipo = "anual";
		this.dataInicial = arrData;
		this.dataInicial[1] = Number(this.dataInicial[1]) - 1;
		if ( strDataFim != null )
		{
			this.dataFinal = strDataFim.split( "/"  );			
			this.dataFinal[1] = Number(this.dataFinal[1]) - 1;
		}
		else
		{
			this.dataFinal = arrData;
		}
	}
	
	this.nome = nome;
	this.link = link;
}

MonthView = new Object();
MonthView.dataAtual = new Date();
MonthView.arrMeses =
[ 
	"Janeiro",
	"Fevereiro",
	"Março",
	"Abril",
	"Maio",
	"Junho",
	"Julho",
	"Agosto",
	"Setembro",
	"Outubro",
	"Novembro",
	"Dezembro"
];
MonthView.arrDiasMes = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];

MonthView.nextMonth= function ()
{
	with( MonthView )
	{
		var newDate = new Date( dataAtual.getFullYear(), dataAtual.getMonth() + 1, dataAtual.getDate() );
		go (newDate);
	}
}

MonthView.prevMonth = function ()
{
	with( MonthView )
	{
		var newDate = new Date( dataAtual.getFullYear(), dataAtual.getMonth() - 1, dataAtual.getDate() );
		go (newDate);
	}
}

MonthView.go = function ( dt )
{
	with( MonthView )
	{
		resetView();
			
		arrMarcadores = new Array();
		dataAtual = dt;
	
		var dias;
		// Verifica se é fevereiro e ano bissexto 
		if ( dataAtual.getMonth() == 1 && dataAtual.getFullYear() % 4 == 0 )
			dias = 29
		else
			dias = arrDiasMes[ dataAtual.getMonth() ];
		
		var primeiro = new Date( dataAtual.getFullYear(), dataAtual.getMonth(), 1 );
		var dia1 = primeiro.getDay();
		
		var rows = document.getElementById( "calendario" ).tBodies[0].rows;
		var k;
		for (k = 0; k < dias; k++)
		{
			rows[ 1 + Math.floor( ( k + dia1 ) / 7 ) ].cells[ ( k + dia1 ) % 7 ].innerHTML = k + 1;
			
			if ( getInfo( dataAtual, k + 1 ) != null )
				rows[ 1 + Math.floor( ( k + dia1 ) / 7 ) ].cells[ ( k + dia1 ) % 7 ].className = "diaAtivo";
		} 
		//rows[ 6 ].style.display = ( 1 + Math.floor( ( k + dia1 - 1) / 7 ) < 6) ? "none" : "";
		updateDisplay();
	}
}

MonthView.getInfo = function ( date, day )
{
	with (MonthView) 
	{
		var r;
		
		if ( day != null )
		{
			var data1, data2, hoje = new Date();
			for ( var k = 0; k < allDates.length; k++ )
			{				
				if ( allDates[k].tipo == "anual" )
				{

					if ( allDates[k].dataInicial[1] > allDates[k].dataFinal[1] )
					{
						if ( date.getMonth() > allDates[k].dataFinal[1] )
						{
							data1 = new Date( date.getFullYear(), allDates[k].dataInicial[1], allDates[k].dataInicial[0] ) ;
							data2 = new Date( date.getFullYear() + 1, allDates[k].dataFinal[1], allDates[k].dataFinal[0] ) ;
						}
						else
						{
							data1 = new Date( date.getFullYear() - 1, allDates[k].dataInicial[1], allDates[k].dataInicial[0] ) ;
							data2 = new Date( date.getFullYear(), allDates[k].dataFinal[1], allDates[k].dataFinal[0] ) ;
						}
						
					}
					else
					{
						data1 = new Date( date.getFullYear(), allDates[k].dataInicial[1], allDates[k].dataInicial[0] ) ;
						data2 = new Date( date.getFullYear(), allDates[k].dataFinal[1], allDates[k].dataFinal[0] ) ;
					}
				}
				else
				{
					data1 =	allDates[k].dataInicial;
					data2 = allDates[k].dataFinal;
				}
				var comp = new Date ( date.getFullYear(), date.getMonth(), day );
				if ( data1 <= comp && comp <= data2 )
				{
					r = allDates[k];
					break;
				}
			}
		} 
		else
		{
			r = new Array();
			if ( 
				datesTree[ date.getFullYear() ] != null &&
				datesTree[ date.getFullYear() ][ date.getMonth() ] != null
				) r = datesTree[ date.getFullYear() ][ date.getMonth() ];
			
			if ( datesTreeYearly[ date.getMonth() ] != null )
				r = r.concat( datesTreeYearly[ date.getMonth() ] );
		}
		
		
		
		return r;
	}
}

MonthView.updateDisplay = function ()
{
	with ( MonthView )
	{
		document.getElementById( "nomeMes" ).innerHTML = arrMeses[ dataAtual.getMonth() ] + " - " + dataAtual.getFullYear();
		if ( onChange != null ) onChange.call(onChangeListener);
	}
}

MonthView.resetView = function ()
{
	var rows = document.getElementById( "calendario" ).tBodies[0].rows;
	for (var k = 1; k < rows.length; k++ )
	{
		for ( var i = 0; i < rows[k].cells.length; i++ )
		{
			rows[k].cells[i].innerHTML = "";
			rows[k].cells[i].className = "";
		}
	}
}

MonthView.init = function ( arrDatas )
{
	MonthView.generateDateTree(arrDatas);
	MonthView.go( new Date() );
}

MonthView.generateDateTree = function ( arrDatas )
{
	with(MonthView)
	{
		MonthView.allDates = arrDatas;
		MonthView.datesTree = new Array();
		MonthView.datesTreeYearly = new Array();
		for ( var k = 0; k < arrDatas.length; k++ )
		{
			switch ( arrDatas[k].tipo )
			{
				case "normal":
					if ( datesTree[ arrDatas[k].dataInicial.getFullYear() ] == null )
						datesTree[ arrDatas[k].dataInicial.getFullYear() ] = new Array();
					if ( datesTree[ arrDatas[k].dataInicial.getFullYear() ][ arrDatas[k].dataInicial.getMonth() ] == null ) 
						datesTree[ arrDatas[k].dataInicial.getFullYear() ][ arrDatas[k].dataInicial.getMonth() ] = new Array();
					datesTree[ arrDatas[k].dataInicial.getFullYear() ][ arrDatas[k].dataInicial.getMonth() ][ arrDatas[k].dataInicial.getDate() ] = arrDatas[k]; 
				break;
				
				case "anual":
					if ( datesTreeYearly[ arrDatas[k].dataInicial[1] ] == null )
						datesTreeYearly[ arrDatas[k].dataInicial[1] ] = new Array();
					datesTreeYearly[ arrDatas[k].dataInicial[1] ][ arrDatas[k].dataInicial[0] ] = arrDatas[k];
				break;
			}
		}
	}
}

function ListaEventos( )
{
	MonthView.onChange = this.onChange;
	MonthView.onChangeListener = this;
}

ListaEventos.prototype.onChange = function ()
{
	document.getElementById("nomeMesLista").innerHTML = MonthView.arrMeses[ MonthView.dataAtual.getMonth() ].toUpperCase();
	this.montarLista();
}

ListaEventos.prototype.montarLista = function ()
{
	var lista = document.getElementById( "listaEventos" );
	//lista.innerHTML = "";
	var itens = new Array();
	
	var evs = MonthView.getInfo( MonthView.dataAtual );
	
	for ( var key in evs )
	{
		if ( evs[key].tipo == "anual" )
		{
			if ( evs[key].dataInicial == evs[key].dataFinal )
			{
				itens.push( "<li><span>" + evs[key].dataInicial[0] + "/" + ( evs[key].dataInicial[1] + 1 ) +  "</span>" + evs[key].nome + "</li>" );	
			}
			else
			{
				itens.push( "<li><span>" + evs[key].dataInicial[0] + "/" + ( evs[key].dataInicial[1] + 1 ) +  "</span> a <span>" + 
				evs[key].dataFinal[0] + "/" + ( evs[key].dataFinal[1] + 1 ) +  "</span>" + evs[key].nome + "</li>" );
			}
		}
		else
		{
			if ( evs[key].dataInicial == evs[key].dataFinal )
			{
				itens.push( "<li><span>" + evs[key].dataInicial.getDate() + "/" + ( evs[key].dataInicial.getMonth() + 1 ) +  "</span>" + evs[key].nome + "</li>" );
			}
			else
			{
				itens.push( "<li><span>" + evs[key].dataInicial.getDate() + "/" + ( evs[key].dataInicial.getMonth() + 1 ) +  "</span> a <span>" + 
				evs[key].dataFinal.getDate() + "/" + ( evs[key].dataFinal.getMonth() + 1 ) +  "</span>" + evs[key].nome + "</li>" );
			}	
		}		
	}
	if ( itens.length > 0 )
		lista.innerHTML = itens.join("")
	else
		lista.innerHTML = "<li>Sem datas comemorativas</li>";
}