function Calendario(campoBase,evento) {
	this.estrutura = function estrutura(qual){
		eval("document.getElementById(this.id).innerHTML = this.monta"+qual+"();");
	};
	this.selecionaMes = function selecionaMes(mes){
		this.mesAtual = mes;
		this.estrutura('Dias');
		this.atualiza();
	};
	this.mesAnterior = function mesAnterior(){
		this.mesAtual = this.mesAtual-1;
		if(this.mesAtual<0){
			this.mesAtual = 11;
			this.anoAtual = this.anoAtual-1;
		}
		this.atualiza();
	};
	this.mesProximo = function mesProximo(){
		this.mesAtual = this.mesAtual+1;
		if(this.mesAtual>11){
			this.mesAtual = 0;
			this.anoAtual = this.anoAtual+1;
		}
		this.atualiza();
	};
	this.anoAnterior = function anoAnterior(){
		this.anoAtual = this.anoAtual-1;
		document.getElementById(this.id+"_titulo").innerHTML = this.anoAtual;
	};
	this.anoProximo = function anoProximo(){
		this.anoAtual = this.anoAtual+1;
		document.getElementById(this.id+"_titulo").innerHTML = this.anoAtual;
	};
	this.diasNoMes = function diasNoMes(mes,ano){
		var retorno = "";
		if((mes == 3) || (mes == 5) || (mes == 8) || (mes == 10))
			retorno = 30;
		else{
			retorno = 31;
			if(mes == 1){
				if (ano/4 - parseInt(ano/4) != 0)
					retorno = 28
				else
					retorno = 29
			}
		}
		return retorno;
	};
	this.defineData = function defineData(dia,mes,ano){
		mes = mes+1;
		if(dia<10)
			dia = '0'+dia;
		if(mes<10 && mes>0)
			mes = '0'+mes;
		else if(mes==13){
			mes = '01';
			ano = ano+1;
		}else if(mes==0){
			mes = '12';
			ano = ano-1;
		}
		this.campo.value = dia+'/'+mes+'/'+ano;
		this.mostraEsconde(this.campo.name);
		eval(this.evento);
	};
	this.atualiza = function atualiza(){
		this.data.setFullYear(this.anoAtual);
		this.data.setMonth(this.mesAtual);
		this.data.setDate(1);
		var dInicio = this.data.getDay();
		if (dInicio == 0){
			document.getElementById(this.id+"_dias0").parentNode.style.display = "none";
        	dInicio = 7;
		}else
			document.getElementById(this.id+"_dias0").parentNode.style.display = "";
			
		var td = 0;
		//dias do mes anterior
		for (var i=0;i<dInicio;i++,td++){
			var aux =this.diasNoMes(this.mesAtual-1,this.anoAtual) - dInicio + i + 1;
			document.getElementById(this.id+"_dias"+td).innerHTML = '<a href=\"javascript:'+this.campoNome+'.defineData('+aux+','+(this.mesAtual-1)+','+this.anoAtual+');\" >'+aux+'</a>';;
			document.getElementById(this.id+"_dias"+td).className = "cal-diasFora";
		}
		//dias desse mes
		for (var i=dInicio, aux=1;i<dInicio+this.diasNoMes(this.mesAtual,this.anoAtual);i++,aux+=1,td++){
			document.getElementById(this.id+"_dias"+td).innerHTML = '<a href=\"javascript:'+this.campoNome+'.defineData('+aux+','+this.mesAtual+','+this.anoAtual+');\" >'+aux+'</a>';
			if(aux==this.diaHoje && this.mesAtual==this.mesHoje && this.anoAtual==this.anoHoje )
				document.getElementById(this.id+"_dias"+td).className = "cal-hoje";
			else
				if(td==0 || td==7 || td==14 || td==21 || td==28 || td==35 || td==6 || td==13 || td==20 || td==27 || td==34 || td==41)
					document.getElementById(this.id+"_dias"+td).className = "cal-diasFimSemana";
				else
					document.getElementById(this.id+"_dias"+td).className = "cal-dias";
		}
		//dias no próximo mes
		document.getElementById(this.id+"_dias41").parentNode.style.display = "none";
		for (var i=dInicio+this.diasNoMes(this.mesAtual,this.anoAtual), aux =1;i<=41;i++,aux+=1,td++){
			if(i==dInicio+this.diasNoMes(this.mesAtual,this.anoAtual) && td>35)
				document.getElementById(this.id+"_dias41").parentNode.style.display = "";
			document.getElementById(this.id+"_dias"+td).innerHTML = '<a href=\"javascript:'+this.campoNome+'.defineData('+aux+','+(this.mesAtual+1)+','+this.anoAtual+');\" >'+aux+'</a>';
			document.getElementById(this.id+"_dias"+td).className = "cal-diasFora";
		}
		document.getElementById(this.id+"_titulo").innerHTML = "<a href=\"javascript:"+this.campoNome+".estrutura('Meses');\" >"+this.meses[this.mesAtual]+" de "+this.anoAtual+"</a>";
	};
	this.montaDias = function montaDias(){
	    var htmlDias = "" +
				"<table cellspacing=\"2\" cellpadding=\"0\" >" +
					"<tr>" +
						"<td><a href=\"javascript:"+this.campoNome+".mesAnterior();\"><img src=\"./imagens/calAnt.gif\"  alt=\"Mês Anterior\" /></a></td>" +
						"<td colspan=\"5\" class=\"cal-titulo\" id=\""+this.id+"_titulo\"></td>" +
						"<td><a href=\"javascript:"+this.campoNome+".mesProximo();\"><img src=\"./imagens/calProx.gif\" alt=\"Próximo Mês\" /></a></td>"+
					"</tr>";
		htmlDias += "<tr>";
		for (i=0;i<=6;i++) 
            htmlDias += "<td class=\"cal-diasSemana\">"+this.diasSemana[i]+"</td>\n";
		htmlDias += "</tr>";
		var aux = 0;
		for (j=0;j<=5;j++){
			htmlDias += "<tr>";
			for (i=0;i<=6;i++){
				htmlDias += "<td id=\""+this.id+"_dias" + aux + "\" >"+aux+"</td>";
				aux += 1;
			}
			htmlDias += "</tr>";
		}		
		htmlDias += "</table></div>";
		return htmlDias;
	};
	this.montaMeses = function montaMeses(){
	    var htmlMeses = "" +
				"<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\" >" +
					"<tr>" +
						"<td><a href=\"javascript:"+this.campoNome+".anoAnterior();\"><img src=\"./imagens/calAnt.gif\"  alt=\"Ano Anterior\" /></a></td>" +
						"<td colspan=\"2\"><div class=\"cal-titulo\" id=\""+this.id+"_titulo\">"+this.anoAtual+"</div></td>" +
						"<td><a href=\"javascript:"+this.campoNome+".anoProximo();\"><img src=\"./imagens/calProx.gif\" alt=\"Próximo Ano\" /></a></td>"+
					"</tr>";
		var aux = 0;
		for (j=0;j<=2;j++){
			htmlMeses += "<tr>";
			for (i=0;i<=3;i++){
				htmlMeses += "<td class=\"cal-meses\" id=\""+this.id+"_meses" + aux + "\" ><a href=\"javascript:"+this.campoNome+".selecionaMes(" + aux + ");\">"+this.mesesAbrev[aux]+"</td>";
				aux += 1;
			}
			htmlMeses += "</tr>";
		}		
		htmlMeses += "</table></div>";
		return htmlMeses;
	};
	this.mostraEsconde = function mostraEsconde(){
		if(this.campo.value!=""){
			this.mesAtual=parseInt((this.campo.value).substr(3,2))-1;
			this.anoAtual=parseInt((this.campo.value).substr(6,4));
		}
		if(document.getElementById(this.id).style.display =='none'){
			document.getElementById(this.id).style.display ='block';
			this.atualiza();
		}else
			document.getElementById(this.id).style.display ='none';
	};
	this.id= "calendario_"+campoBase;
	this.evento=evento;
	this.campoNome = campoBase;
	this.campo= document.getElementsByName(campoBase)[0];
	this.diasSemana= new Array("D","S","T","Q","Q","S","S");
	this.meses= new Array("Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro");
	this.mesesAbrev= new Array("Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez");
	this.data = new Date();
	this.diaHoje = this.data.getDay();
	this.mesHoje = this.data.getMonth();
	this.anoHoje = this.data.getFullYear();
	this.mesAtual=this.mesHoje;
	this.anoAtual=this.anoHoje;
	document.write('<div id="'+this.id+'" class="calendario" style="display:none;"></div>');
	this.estrutura('Dias');
	this.atualiza();
};