function Calendario(pParent)
{
	arrDiasSemana = new Array("Dom","Seg","Ter","Qua","Qui","Sex","Sab");
	arrMeses = new Array("Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro");

	data_calendario = new Date;
	data_calendario.subtrai_ano = subtrai_ano;
	data_calendario.adiciona_ano = adiciona_ano;
	temp_data = new Date;
	temp_data.adiciona_dia = adiciona_dia;

	this.get_data_calendario = get_data_calendario;
	this.exibe_calendario = exibe_calendario;
	
	//Cria elemento no Parent indicado (default é body)
	eDiv = document.createElement("div");
	eDiv.id = "cld_divCalendario";
	if(pParent.length > 0)
		pParent.appendChild(eDiv);
	else
		document.body.appendChild(eDiv);

		eTabela = document.createElement("table");
	eTabela.id = "cld_tblCalendario";
	eDiv.appendChild(eTabela);
	
	eDiv.style.visibility = 'hidden';
	monta_calendario(data_calendario);
	
	function exibe_calendario(pDestino)
	{
		if(eDiv.style.visibility == 'visible')
			eDiv.style.visibility = 'hidden';
		else
		{
			arrData = pDestino.value.split("/");
			if(arrData.length == 3)
			{
				data_calendario.setDate(arrData[0]);
				data_calendario.setMonth(arrData[1]-1);
				data_calendario.setFullYear(arrData[2]);
			}
			destino = pDestino;
			monta_calendario(data_calendario);
			eDiv.style.visibility = 'visible';
		}
	}
	
	function monta_calendario(pData)
	{
		temp_data.setFullYear(pData.getFullYear(),pData.getMonth(),pData.getDate());
		mes = temp_data.getMonth();
		temp_data.setDate(1);
		//Apaga o calendario velho para montar o novo
		while(eTabela.rows.length > 0)
			eTabela.deleteRow(0);
		//Monta combo de meses
		novaLinha = eTabela.insertRow(0);
		novaCelula = novaLinha.insertCell(0);
		novaCelula.colSpan = 3;
		eCombo = document.createElement("select");
		eCombo.id = "cld_combo_meses";
		eCombo.onchange = function(){muda_mes(this.value)};
		for(i=0;i<arrMeses.length;i++)
		{
			option = document.createElement("option");
			option.value = i;
			option.text = arrMeses[i];
			if(data_calendario.getMonth() == i)
				option.selected = true;
			eCombo.add(option,null);
		}
		novaCelula.appendChild(eCombo);
		//Monta navegação de anos
		novaCelula = novaLinha.insertCell(1);
		novaCelula.innerHTML = ' - ';
		novaCelula.onclick = function(){menos_ano()};
		novaCelula = novaLinha.insertCell(2);
		novaCelula.colSpan = 2;
		novaCelula.innerHTML = temp_data.getFullYear();
		novaCelula = novaLinha.insertCell(3);
		novaCelula.innerHTML = ' + ';
		novaCelula.onclick = function(){mais_ano()};
		//Preenche linha de dias da semana
		novaLinha = eTabela.insertRow(1);
		novaLinha.className = "cld_header";
		for(i=0;i<arrDiasSemana.length;i++)
		{
			novaCelula = novaLinha.insertCell(i);
			novaCelula.innerHTML = arrDiasSemana[i];
		}
		//Preenche os dias
		row = 2;
		while(temp_data.getMonth() == mes)
		{
			novaLinha = eTabela.insertRow(row);
			for(i=0;i<=6;i++)
			{
				novaCelula = novaLinha.insertCell(i);
				if(temp_data.getDay() == i && temp_data.getMonth() == mes)
				{
					novaCelula.innerHTML = temp_data.getDate();
					novaCelula.onclick = function(){pega_data(this.innerHTML)};
					temp_data.adiciona_dia();
				}
			}
			row++;
		}
	}
	
	function pega_data(pValue)
	{
		data_calendario.setDate(pValue);
		dia = (data_calendario.getDate() > 9)?data_calendario.getDate():"0" + data_calendario.getDate();
		mes = (data_calendario.getMonth() > 8)?data_calendario.getMonth() + 1:"0" + (data_calendario.getMonth() + 1);
		destino.value = dia + '/' + mes + '/' + data_calendario.getFullYear();
		eDiv.style.visibility = 'hidden';
	}			
	
	function get_data_calendario()
	{
		return data_calendario;
	}
	
	function adiciona_dia()
	{
		dia = this.getDate();
		dia++;
		this.setDate(dia);
	}

	function adiciona_ano()
	{
		ano = this.getFullYear();
		ano++;
		this.setFullYear(ano)
	}
	
	function subtrai_ano()
	{
		ano = this.getFullYear();
		ano--;
		this.setFullYear(ano)
	}
	
	function muda_mes(pValue)
	{
		data_calendario.setMonth(pValue);
		monta_calendario(data_calendario);
	}
		
	function mais_ano()
	{
		data_calendario.adiciona_ano();
		monta_calendario(data_calendario);
	}
	
	function menos_ano()
	{
		data_calendario.subtrai_ano();
		monta_calendario(data_calendario);
	}
}

