function X(e){if(e==null)return 0;else return e.offsetLeft+X(e.offsetParent);}
function Y(e){if(e==null)return 0;else return e.offsetTop+Y(e.offsetParent);}
function selDay(e){
	var x = X(e);
	var y = Y(e)+e.offsetHeight;
	if(document.all){
		x+=window.screenLeft;
		y+=window.screenTop;
	}
	else{
		x+=window.screenX;
		y+=window.screenY+30;
	}
	if(window.screen.availHeight<(y+211))y=window.screen.availHeight-211;
	var w=window.open('cal/cal.htm',e.id,'left='+x+',top='+y+',height=175,width=180,status=0,toolbar=0,menubar=0,location=0,scrollbars=0,resizable=0');
	w.focus();
	return w;
}
function getDay(ctrl){return(document.getElementById(ctrl).value);}
function setDay(ctrl,dia){if(document.getElementById(ctrl))document.getElementById(ctrl).value=dia;}
function d(dia){
	if(window.opener){
		if(dia==0)
			stddate='';
		else{
			var stddate=(dia<10)?'0':'';
			stddate+=dia+'-';
			if((iMes+1)<10)stddate+='0';
			stddate+=(iMes+1)+'-';
			stddate+=iAno;
		}
		window.opener.setDay(window.name,stddate);
		window.close();
	}
}
function ultimo_dia(mes,ano){
	switch(mes){
		case 0:return 31;
		case 1:if(ano%4)return 28;else return 29;
		case 2:return 31;
		case 3:return 30;
		case 4:return 31;
		case 5:return 30;
		case 6:return 31;
		case 7:return 31;
		case 8:return 30;
		case 9:return 31;
		case 10:return 30;
		case 11:return 31;
	}
}
function go(mov){
	var hoje = new Date();
	switch(mov){
		case 0:break;		
		case 1:
			if((--iAno)%4)if(iMes==1&&iDia==29)iDia--;
			break;
		case 2:
			if (iMes>0)
				switch(--iMes){
					case 1:
						if(iDia>28){iDia=28;if(!(iAno%4))iDia++;}
						break;
					case 3:
					case 5:
					case 8:
					case 10:
						if(iDia==31)iDia--;
						break;
				}
			else{
				iMes=11;
				iAno--;
			}
			break;
		case 3:
			if (iMes<11)
				switch(++iMes){
					case 1:
						if(iDia>28){iDia=28;if(!(iAno%4))iDia++;}
						break;
					case 4:
					case 6:
					case 8:
					case 10:
						if(iDia==31)iDia--;
						break;
				}
			else{
				iMes=0;
				iAno++;
			}
			break;
		case 4:
			if((++iAno)%4)if(iMes==1&&iDia==29)iDia--;
			break;
		default:
			iDia=hoje.getDate();
			iMes=hoje.getMonth();
			iAno=hoje.getFullYear();
	}
	data=new Date(iAno,iMes,iDia);
	var dia_semana=(new Date(data.getFullYear(),data.getMonth(),1)).getDay();
	var delta=dia_semana?dia_semana-1:6;
	var ultimo=ultimo_dia(iMes,iAno);

	// alterar o mês e o ano
	document.getElementById('mes').innerHTML=meses[data.getMonth()];
	document.getElementById('ano').innerHTML=data.getFullYear();
	
	// iterar para preencher os dias iniciais não existentes
	for(var i=1;i<=delta;i++){
		eval("document.getElementById('T"+i+"').className='wd';");
		eval("document.getElementById('T"+i+"').innerHTML=\"&nbsp;\";");
	}

	// iterar para preencher os dias existentes
	var hojePossivel=((iMes==hoje.getMonth()) && (iAno==hoje.getFullYear()));
	for(var dia=1; dia<=ultimo; dia++){
		// auxiliar para formato de texto
		var prefix="";
		if(dia<10)
			prefix="&nbsp;";

		// estilos conforme o tipo de dia
		var classA;
		var classTD;
		if (dia==data.getDate()){
			classA="selectedDay";
			classTD="selectedDay";
		}
		else if((dia==hoje.getDate()) && hojePossivel){
			classA = "today";
			classTD = "today";
		}
		else if((dia_semana==0) || (dia_semana==6)){
			classA="wa";
			classTD="we";
		}
		else{
			classA="wa";
			classTD="wd";
		}
		eval("document.getElementById('T"+(dia+delta)+"').className='"+classTD+"';");

		// preenchimento do dia			
		var inner="<A class="+classA+" href=\"?d="+iAno+"-"+(iMes+1)+"-"+dia+"\">&nbsp;"+prefix+dia+"&nbsp;</A>";
		eval("document.getElementById('T"+(dia+delta)+"').innerHTML=inner;");

		// iteração do dia da semana
		dia_semana=(dia_semana<6)?dia_semana+1:0;
	}
	
	// iterar para preencher os dias finais não existentes
	for(var i=ultimo+delta+1;i<=42;i++){
		eval("document.getElementById('T"+i+"').className='wd';");
		eval("document.getElementById('T"+i+"').innerHTML=\"&nbsp;\";");
	}
}
