var _date = new Date();
var _dia = 1;
var _mes = _date.getMonth()+1;
var _ano = _date.getFullYear();
var objfield;

var Top			= '';
var Bot			= '';
var Div			= '';
var EndDiv		= '';

Div += '<div id="_calendario" style="width: 280px; position: absolute; left: 675px; top: 300px; border: 1px solid #000000; display: none; z-index: 100;">';

Top += '<style>								';
Top += '.trNomeSemana {						';
Top += '	font-weight:		bold;		';
Top += '	text-align:			center;		';
Top += '	background-color:	#666666;	';
Top += '}									';
Top += '.tdNomeSemana {						';
Top += '	font-size: 9px;					';
Top += '	color: #FFFFFF;					';
Top += '}									';
Top += '.tdDia {							';
Top += '	text-align:	center;				';
Top += '	font-size:	9px;				';
Top += '	height:		20px;				';
Top += '	background-color:	#CCCCCC;	';
Top += '}									';
Top += '.txtTopo {							';
Top += '	background-color:	#000000;	';
Top += '	color: 				#FFFFFF;	';
Top += '}									';
Top += '</style>							';
Top += '<table width="100%" cellpadding="0" cellspacing="2" style="background-color: #FFFFFF;">';

Top += '<tr>';
Top += '	<td colspan="7">';
Top += '	<table width="100%" cellpadding="0" cellspacing="0">';
Top += '	<tr>';
Top += '		<td class="txtTopo" id="showMes"></td>';
Top += '		<td class="txtTopo" align="right"><a href="javascript: closeCalendario();" class="txtTopo">Fechar x</a></td>';
Top += '	</tr>';
Top += '	</table>';
Top += '	</td>';
Top += '</tr>';

Top += '<tr class="trNomeSemana">';
Top += '	<td class="tdNomeSemana">DOM</td>';
Top += '	<td class="tdNomeSemana">SEG</td>';
Top += '	<td class="tdNomeSemana">TER</td>';
Top += '	<td class="tdNomeSemana">QUA</td>';
Top += '	<td class="tdNomeSemana">QUI</td>';
Top += '	<td class="tdNomeSemana">SEX</td>';
Top += '	<td class="tdNomeSemana">SAB</td>';
Top += '</tr>';

Bot += '<tr>';
Bot += '	<td colspan="7">';
Bot += '	<table width="100%" cellpadding="0" cellspacing="0">';
Bot += '	<tr>';
Bot += '		<td><a href="javascript: voltaMes();"><< Mês Anterior</a></td>';
Bot += '		<td align="right"><a href="javascript: avancaMes();">Mês Posterior >></a></td>';
Bot += '	</tr>';
Bot += '	</table>';
Bot += '	</td>';
Bot += '</tr>';
Bot += '</table>';

EndDiv += '</div>';

startCalendario();

function startCalendario()
{
	var inc = '';
	if ( startCalendario.arguments.length )	inc += Top;
	else									inc += Div + Top;
	
	startOn	= getWeekStart();
	endOn	= parseInt(getMonthDays()) + startOn;
	
	on = 0;
	dia = 1;
	for ( i=0, c=0; i<42; i++, c++ ) {
		if ( i >= startOn )	on = 1;
		if ( i >= endOn )	on = 0;
		
		if ( !c )	inc += '<tr class="trDia">';
		
		if ( on ) {
			inc += '<td class="tdDia"><a href="javascript: chooseDate('+dia+');">'+ dia +'</a></td>';
			++dia;
		} else {
			inc += '<td class="tdDia"></td>';
		}
		
		if ( c == 12 ) {
			inc += '</tr>';
			c = -1;
		} else {
			c++;
		}
		
		if ( i >= endOn )	on = 0;
	}
	
	if ( startCalendario.arguments.length )	inc += Bot;
	else									inc += Bot + EndDiv;
	
	if ( startCalendario.arguments.length )	document.getElementById('_calendario').innerHTML = inc;
	else									document.write(inc);
	
	document.getElementById('showMes').innerHTML = monthName() +' '+ _ano;
}

function monthName()
{
	m = parseInt(_mes);
	switch (m)
	{
		case 1:		return 'Janeiro';	break;
		case 2:		return 'Fevereiro';	break;
		case 3:		return 'Março';		break;
		case 4:		return 'Abril';		break;
		case 5:		return 'Maio';		break;
		case 6:		return 'Junho';		break;
		case 7:		return 'Julho';		break;
		case 8:		return 'Agosto';	break;
		case 9:		return 'Setembro';	break;
		case 10:	return 'Outubro';	break;
		case 11:	return 'Novembro';	break;
		case 12:	return 'Dezembro';	break;
	}
}

function chooseDate(dia)
{
	dia = dia.toString();
	mes = _mes.toString();
	if ( dia.length == 1 )	dia = '0'+dia;
	if ( mes.length == 1 )	mes = '0'+mes;
	objfield.value = dia+'/'+mes+'/'+_ano;
	objfield.focus();
	closeCalendario();
}

function openCalendario(obj)
{
	objfield = obj;
	
	_date = new Date();
	_dia = 1;
	_mes = _date.getMonth()+1;
	_ano = _date.getFullYear();
	document.getElementById('_calendario').style.display = '';
}

function closeCalendario()
{
	document.getElementById('_calendario').style.display = 'none';
}

function voltaMes()
{
	if ( _mes > 1 ) {
		_mes--;
	} else {
		_mes = 12;
		_ano--;
	}
	startCalendario(1);
}

function avancaMes()
{
	if ( _mes < 12 ) {
		_mes++;
	} else {
		_mes = 1;
		_ano++;
	}
	startCalendario(1);
}

function getMonthDays()
{
	var dias = 0;
	if ( _mes == 1 || _mes == 3 || _mes == 5 || _mes == 7 || _mes == 8 || _mes == 10 || _mes == 12 )	dias = 31;
	if ( _mes == 4 || _mes == 6 || _mes == 9 || _mes == 11 )	dias = 30;
	if ( _mes == 2 ) {
		if ( _ano%4 == 0 )	dias = 29;
		else				dias = 28;
	}
	return dias;
}

function getWeekStart() {
	days = new Array(7);
	days[0] = 6;//sabado
	days[1] = 0;//domingo
	days[2] = 1;//segunda
	days[3] = 2;//terça
	days[4] = 3;//quarta
	days[5] = 4;//quinta
	days[6] = 5;//sexta
   
   var val1 = parseInt(_dia, 10)
   if ((val1 < 0) || (val1 > 31)) {
      alert("Valor Inválido")
   }
   var val2 = parseInt(_mes, 10)
   if ((val2 < 0) || (val2 > 12)) {
      alert("Valor Inválido")
   }  
   var val2x = parseInt(_mes, 10)
   var val3 = parseInt(_ano, 10)
   if (val3 < 1900) {
      //alert("O sistema não processa datas abaixo de 1900")
   }
   if (val2 == 1) {
      val2x = 13;
      val3 = val3-1
   }
   if (val2 == 2) {
      val2x = 14;
      val3 = val3-1
   }
   var val4 = parseInt(((val2x+1)*3)/5, 10)
   var val5 = parseInt(val3/4, 10)
   var val6 = parseInt(val3/100, 10)
   var val7 = parseInt(val3/400, 10)
   var val8 = val1+(val2x*2)+val4+val3+val5-val6+val7+2
   var val9 = parseInt(val8/7, 10)
   var val0 = val8-(val9*7)
   return days[val0];
}
