function calendario(id,d,m,a,fechas,w,h,classNormal,classHoy,codeTarget,dataTarget){
	this.idObj=id;
	this.meses=["enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"];
	this.dias=["L","M","X","J","V","S","D"];
	this.numdias=[31,28,31,30,31,30,31,31,30,31,30,31];
	this.mini=[1,2000];
	this.maxi=[12,2030];
	this.inicial=new Date(a,m,d);
	this.fechas=fechas;
	this.actual=new Array(42);
	this.classNormal=classNormal;
	this.classHoy=classHoy;
	this.codeTarget=codeTarget;
	this.w=w;
	this.h=h;
	this.wCell=parseInt(w/8);//múltiplo de 8
	this.hCell=parseInt((h-10)/7);//múltiplo de 7
	this.selecciona(a,m-1,d);
}
calendario.prototype.primerDia=function(){// calcula el primer dia del mes actual
	var f=new Date(this.anioActual,this.mesActual-1,1);
	var dini=(f.getDay()==0)?6:f.getDay()-1;
	return dini;
}
calendario.prototype.calcula=function(ini){
	// el calendario va a ser un array de 6*7 = 42	posiciones con el
	// numero de dia que es o null si no pertenece a ese mes
	var diaIni=this.primerDia();
	var numDias=(this.mesActual==2&&this.bisiesto())?29:this.numdias[this.mesActual-1];
	for(var i=0;i<diaIni;i++)this.actual[i]=null;
	for(var i=diaIni;i<diaIni+numDias;i++)this.actual[i]=i-diaIni+1;
	for(var i=diaIni+numDias;i<42;i++)this.actual[i]=null;
	if(ini==null)this.muestra();
}
calendario.prototype.muestra=function(){
	var t="";
	//línea mes/año y navegación
	t+="<table border=0 cellpading=0 cellspacing=0 width="+this.w+" height="+(this.hCell+15)+" style='margin-top:2px'><tr>";
		t+="<td width="+this.wCell+" align=center><a href=javascript:"+this.idObj+".retrocede() class="+this.classNormal+"><b>&lt;&lt;&lt;</b></a></td>";
		t+="<td width="+(this.w-this.wCell*2)+" align=center class="+this.classNormal+"><b>"+this.meses[this.mesActual-1]+" "+this.anioActual+"</b></td>";
		t+="<td width="+this.wCell+" align=center><a href=javascript:"+this.idObj+".avanza() class="+this.classNormal+"><b>&gt;&gt;&gt;</b></a></td></tr></table>";
	t+="<table border=0 cellpadding=0 cellspacing=0 width="+this.w+" style='margin-top:5px'>";

	var dia = 0;
	for(var i=0;i<6;i++){
		t+="<tr>";
		var indiceFechas;
		for(var j=0;j<7;j++){
			if(this.actual[dia]==null)t+="<td height="+this.hCell+" class="+this.classNormal+">&nbsp</td>";
			else {
				//fechaTemp=new Date(this.anioActual,this.mesActual-1,this.actual[dia]);
				//fechaTemp2=new Date(this.anioActual,this.mesActual-1,this.actual[dia]+1)
				indiceFechas = this.anioActual + "-" + this.mesActual + "-" + this.formatZero(this.actual[dia]);
				//if ((fechaTemp<=this.inicial)&&(fechaTemp2>this.inicial)) {
				if (this.fechas[indiceFechas] != null) {
					t += "<td height="+this.hCell+" align=center class="+this.classHoy+">"+this.actual[dia]+"</td>"
				}else{
					t += "<td height="+this.hCell+" align=center class="+this.classNormal+">"+this.actual[dia]+"</td>";
				}
			}
			dia++;
		}
		t+="</tr>";
	}
	t+="</table>";
	//pinto
	this.codeTarget.innerHTML=t;
}
calendario.prototype.selecciona=function(a,m,d){
	this.mesActual=m+1;
	this.anioActual=a;
	this.inicial=new Date(a,m,d);
	this.calcula();
}
calendario.prototype.formatZero=function(i){return (i<10)?"0"+i:i;}
calendario.prototype.minimo=function(m,a){this.mini=[m,a];}
calendario.prototype.maximo=function(m,a){this.maxi=[m,a];}
calendario.prototype.bisiesto=function(){return(this.anioActual%4==0&&((this.anioActual%100!=0)||(this.anioActual%400==0)));}
calendario.prototype.ponActual=function(a,m,d){this.mesActual=m;this.anioActual=a;this.inicial=new Date(a,m-1,d);this.calcula("no");}
calendario.prototype.ponMeses=function(m){this.meses=m;}
calendario.prototype.avanza=function(){
	if(this.mesActual==12){this.mesActual=1;this.anioActual++;}else this.mesActual++;
	document.location.href="index.php?mm="+this.mesActual+"&yyyy="+this.anioActual;
	//this.calcula();
}
calendario.prototype.retrocede=function(){
	if(this.mesActual==1){this.mesActual=12;this.anioActual--;}else this.mesActual--;
	document.location.href="index.php?mm="+this.mesActual+"&yyyy="+this.anioActual;
	//this.calcula();
}
calendario.prototype.tieneSig=function(){return((this.anioActual<this.maxi[1])||(this.anioActual==this.maxi[1]&&this.mesActual<this.maxi[0]));}
calendario.prototype.tieneAnt=function(){return((this.anioActual>this.mini[1])||(this.anioActual==this.mini[1]&&this.mesActual>this.mini[0]));}
