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; z-index: 1; position: absolute; left: 100px; top: 200px; border: 1px solid #000000; display: none;">';

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 style="background-color: #000000; color: #FFFFFF;" id="showMes"></td>';
Top += '		<td style="background-color: #000000; color: #FFFFFF;" align="right"><a href="javascript: closeCalendario();" style="background-color: #000000; color: #FFFFFF;">Fechar x</a></td>';
Top += '	</tr>';
Top += '	</table>';
Top += '	</td>';
Top += '</tr>';

Top += '<tr style="font-weight: bold; text-align: center; background-color: #666666;">';
Top += '	<td style="font-size: 9px; color: #FFFFFF;">DOM</td>';
Top += '	<td style="font-size: 9px; color: #FFFFFF;">SEG</td>';
Top += '	<td style="font-size: 9px; color: #FFFFFF;">TER</td>';
Top += '	<td style="font-size: 9px; color: #FFFFFF;">QUA</td>';
Top += '	<td style="font-size: 9px; color: #FFFFFF;">QUI</td>';
Top += '	<td style="font-size: 9px; color: #FFFFFF;">SEX</td>';
Top += '	<td style="font-size: 9px; color: #FFFFFF;">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: voltaAno();"><< Ano</a></td>';
Bot += '		<td><a href="javascript: voltaMes();"><< Mês</a></td>';
Bot += '		<td align="right"><a href="javascript: avancaMes();">Mês >></a></td>';
Bot += '		<td align="right"><a href="javascript: avancaAno();">Ano >></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>';
		
		if ( on ) {
			inc += '<td style="text-align: center; font-size: 9px; height: 20px; background-color: #CCCCCC;"><a href="javascript: chooseDate('+dia+');">'+ dia +'</a></td>';
			++dia;
		} else {
			inc += '<td style="text-align: center; font-size: 9px; height: 20px; background-color: #CCCCCC;"></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, left, top)
{
	objfield = obj;
	
	if ( obj.value != '' && obj.value != '00/00/0000' && obj.value != undefined ) {
		tmp = obj.value.split('/');
		_mes = tmp[1];
		_ano = tmp[2];
	} else {
		_date = new Date();
		_mes = _date.getMonth() + 1;
		_ano = _date.getFullYear();
	}
	_dia = 1;
	startCalendario(1);
	document.getElementById('_calendario').style.display = '';
	document.getElementById('_calendario').style.left = left+'px';
	document.getElementById('_calendario').style.top = top+'px';
}

function closeCalendario()
{
	document.getElementById('_calendario').style.display = 'none';
}

function voltaAno()
{
	_ano--;
	startCalendario(1);
}

function avancaAno()
{
	_ano++;
	startCalendario(1);
}

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];
}
