// **************************************************
// * Autor : Peter M Jordan - uranking@uranking.com *
// * página: www.uranking.com *
// * modificado por: Roger Maso rogermaso@gmail.com
// * 99% dos créditos para os autores anteriores
// **************************************************

// guarda o this do elemento que dispara o evento
var element = null;
// apenas um calendario pode ficar aberto ao mesmo tempo
var calaberto = false;
//guarda se o atalho  para os meses ou anos esta aberto ou fechado, para os usuário apressados
var atalho = false;
//guarda os parametros para construir o calendario dinamicamente
var params = new Array();


// construindo o calendário
function popdate(obj, tam, valordocampo) {
	//alert(obj.parentNode.childNodes[1].id);
	if (obj !== null && !calaberto) {
		calaberto = true;
		element = obj;
	}
	else if (obj !== null && calaberto !== false && element.parentNode.childNodes[1].id != obj.parentNode.childNodes[1].id) {
		alert('Voce pode abrir apenas um calendario ao mesmo tempo.');
		return;
	}
	//codigo para verificar o indice de childNodes
	/*
	for (var i=0;i<element.parentNode.childNodes.length;i++) {
	alert(element.parentNode.childNodes[i].name);
	}
	return;
	*/
	if (tam !== null) {
		params['tamanho'] = tam;
	}
	params['nobjdivcalendario'] = 4;
	params['nobjinputdata'] = 1;

	var divcalendario = element.parentNode.childNodes[params['nobjdivcalendario']];
	var objcampodata = element.parentNode.childNodes[params['nobjinputdata']];
	if (valordocampo)
	{
		day = ""
		mmonth = ""
		ano = ""
		c = 1
		char = ""
		for (s=0;s<parseInt(valordocampo.length);s++)
		{
			char = valordocampo.substr(s,1)
			if (char == "/")
			{
				c++;
				s++;
				char = valordocampo.substr(s,1);
			}
			if (c==1) day += char
			if (c==2) mmonth += char
			if (c==3) ano += char
		}
		valordocampo = mmonth + "/" + day + "/" + ano
	}

	if(!valordocampo) {today = new Date()} else {today = new Date(valordocampo)}
	date_Form = objcampodata;
	if (date_Form.value == "") { date_Form = new Date()} else {date_Form = new Date(date_Form.value)}

	ano = today.getFullYear();
	mmonth = today.getMonth ();
	day = today.toString ().substr (8,2);

	umonth = new Array ("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro");
	// quem fez isso deve ser meio louco, uma formula para descobrir se eh ou nao ano bisexto
	days_Feb = (!(ano % 4) ? 29 : 28)
	days = new Array (31, days_Feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

	if ((mmonth < 0) || (mmonth > 11)) alert(mmonth)
	if ((mmonth - 1) == -1) {month_prior = 11; year_prior = ano - 1} else {month_prior = mmonth - 1; year_prior = ano}
	if ((mmonth + 1) == 12) {month_next = 0; year_next = ano + 1} else {month_next = mmonth + 1; year_next = ano}

	txt = "<table class='tabcalendario' cellspacing=0>";

	//cabecalho do ano e mes atual
	txt += "<tr><td colspan='7'>";
	txt += "<div class='left'>";
	txt += "<a href=\"javascript:popdate(null, null,'"+( "01/" + (month_prior+1).toString() + "/" + year_prior.toString())+"');\" title='Mês Anterior'>< </a>";
	txt += "<a href=\"javascript:pop_month();\" >" + umonth[mmonth] + "</a>";
	txt += "<a href=\"javascript:popdate(null, null, '"+( "01/" + (month_next+1).toString() + "/" + year_next.toString())+"');\" title='Próximo Mês'> ></a>";
	txt += "</div>";

	txt += "<div class='right'>";
	txt += "<a href=\"javascript:popdate(null, null, '"+((mmonth+1).toString()+"/01/"+(ano-1).toString())+"');\" title='Ano Anterior'>< </a>";
	txt += "<a href=\"javascript:pop_year('" + (mmonth+1) + "');\">" + ano.toString() + "</a>";
	txt += "<a href=\"javascript:popdate(null, null, '"+((mmonth+1).toString() +"/01/"+(ano+1).toString())+"');\" title='Próximo Ano'> ></a>";
	txt += "</div>";
	txt += "</td></tr>";

	//linha dos anos ou meses
	txt += "<tr><td style='padding: 0; margin: 0;'><div id='popd' style='position:absolute;'></div></td></tr>";

	//cabecalho dos dias de semana
	txt += "<tr id='semanas'>";
	txt += "<td>Dom</td>";
	txt += "<td>Seg</td>";
	txt += "<td>Ter</td>";
	txt += "<td>Qua</td>";
	txt += "<td>Qui</td>";
	txt += "<td>Sex</td>";
	txt += "<td>Sab</td>";
	txt += "</tr>";


	today1 = new Date((mmonth+1).toString() +"/01/"+ano.toString());
	diainicio = today1.getDay () + 1;
	week = d = 1;
	start = false;

	for (n=1;n<=42;n++)
	{
		if (week == 1) {
			txt += "<tr>";
		}
		if (week==diainicio) {
			start = true;
		}
		if (d > days[mmonth]) {
			start=false;
		}
		if (start) {
			dat = new Date((mmonth+1).toString() + "/" + d + "/" + ano.toString());
			day_dat = dat.toString().substr(0,10);
			day_today = date_Form.toString().substr(0,10);
			year_dat = dat.getFullYear();
			year_today = date_Form.getFullYear();
			colorcell = ((day_dat == day_today) && (year_dat == year_today) ? " bgcolor='#FFCC00' " : "" );
			if (mmonth+1 < 10) {
				omes = "0" + (mmonth+1).toString();
			}
			else {
				omes = (mmonth+1).toString();
			}

			if (d < 10) {
				casadodia = "0" + d.toString();
			}
			else {
				casadodia = d;
			}

			txt += "<td"+colorcell+">";
			txt += "<a href=\"javascript:block('"+ casadodia + "/" + omes + "/" + ano.toString() +"');\" >"+ d.toString() + "</a>";
			txt += "</td>";
			d++;
		}
		else{
			txt += "<td></td>";
		}
		week++;
		if (week == 8) {
			week = 1;
			txt += "</tr>";
		}
	}

	//align='right;'
	txt += "<tr><td id='fechar'><a href=\"javascript:force_close();\">fechar</a></td></tr>";
	txt += "</table>";

	divcalendario.innerHTML = txt;

}

// função para exibir a janela com os meses
function pop_month()
{
	var divdoatalho = document.getElementById('popd');
	var bit = true;
	if (divdoatalho.innerHTML != '' && divdoatalho.innerHTML.length < 1500) {
		bit = false;
	}
	if (!atalho || bit) {
		txt = "<table bgcolor='#CCCCFF' border='0' width=80>"
		for (n = 0; n < 12; n++) {
			txt += "<tr><td><a href=\"javascript:popdate(null, null, '"+("01/" + (n+1).toString() + "/" + ano.toString())+"')\" >" + umonth[n] +"</a></td></tr>";
		}
		txt += "</table>";
		atalho = true;
		divdoatalho.innerHTML = txt;
		return;
	}
	atalho = false;
	divdoatalho.innerHTML = '';
}

// função para exibir a janela com os anos
function pop_year(umonth) {

	var divdoatalho = document.getElementById('popd');
	var bit = true;
	if (divdoatalho.innerHTML != '' && divdoatalho.innerHTML.length > 1500) {
		bit = false;
	}

	if (!atalho || bit) {
		txt = "<table bgcolor='#CCCCFF' border='0' width=160>";
		l = 1;
		for (n=ano-50; n<ano+2; n++){
			if (l == 1) {
				txt += "<tr>";
			}
			txt += "<td align=center><a href=\"javascript:popdate(null, null, '"+(umonth.toString () +"/01/" + n) +"');\">" + n + "</a></td>";
			l++;
			if (l == 4) {
				txt += "</tr>";
				l = 1;
			}
		}
		txt += "</tr></table>";
		atalho = true;
		divdoatalho.innerHTML = txt;
		return;
	}
	atalho = false;
	divdoatalho.innerHTML = '';
}

// função para fechar o calendário
function force_close() {
	element.parentNode.childNodes[params['nobjdivcalendario']].innerHTML = '';
	element = null;
	calaberto = false;
}

// função para fechar o calendário e setar a data no campo de data associado
function block(data)
{
	element.parentNode.childNodes[params['nobjinputdata']].value = data;
	force_close ();
}

