/* ---------------------------------------------- OBJETO CALENDARIO ------------------------------------------------ */
//	Versión: 1.0
//	Navegadores soportados: Sólo IEW y DOM.
//	Paquete: Basket Tara
//	Dependencias: layers.js (1.1+)
//	Comentarios:
//		Permite manipular un calendario con diversas opciones visuales controlables por programacion. Guarda su estado
// entre visualizaciones y se puede mostrar en una fecha dada o en el día actual. También admite enlazado con campos de
// texto en formularios.
//	Histórico de cambios (tras versión 1.0):
/* ------------------------------------------------------------------------------------------------------------------ */
if(typeof(gsDebug)=="undefined")gsDebug=null
debug=0
// FLAGS:
//	0x01 -- Mostrar cierre
//	0x02 - 0xF0 -- Reservadas
function gsCalendario(id,flags){
	if(!eval(id))eval('window.'+id+'=this') // asociarme con la variable apropiada
	this.id=id // recordarlo
	this.fl=flags // guardar opciones
	this.l=new gsLayer(id+'_cal',0,0,160,160,true,100) // crear layer
	this.f=new Date() // hoy
	this.d=this.f.getDate()
	this.m=this.f.getMonth()
	this.a=this.f.getFullYear()
	this.e=null // elemento asociado
	this.tab=this.Genera()
	this.o=this // Autoreferencia
	this.auto=true // Autorefresco del layer
	this.an=0 // Ancho automático
}
gsCalendario.prototype.DiasMes=new Array(31,28,31,30,31,30,31,31,30,31,30,31)
gsCalendario.prototype.NombresMes=new Array('ENERO','FEBRERO','MARZO','ABRIL','MAYO',
'JUNIO','JULIO','AGOSTO','SEPTIEMBRE','OCTUBRE','NOVIEMBRE','DICIEMBRE')
gsCalendario.prototype.DiasSemana='LuMaMiJuViSaDo'
gsCalendario.prototype.Genera=function(){
	var tmp=new Date(this.a,this.m,1),i,t=this,fun="window."+t.id+".oculta("
	var ini=tmp.getDay()==0?6:tmp.getDay()-1 // Semana empieza en lunes
	var sem=0,tab='<table border="0" cellpadding="2" cellspacing="0"'+(t.an?' width="'+t.an+'"':'')+
		'><tr><th colspan="'+(t.fl&0x01?6:7)+'">'
	var bisi=(t.a%400)==0||(t.a%4)==0&&(t.a%100)!=0?true:false
	tab+=t.NombresMes[t.m]+' - '+t.a+'</th>'
	if(t.fl&0x01)tab+='<th><a href="javascript:window.'+t.id+'.oculta(0)"><font color="black">X</font></a></th>'
	tab+='</tr><tr>'
	for(i=0;i<7;i++)tab+='<th>'+t.DiasSemana.substring(i*2,i*2+2)+'</th>'
	tab+='</tr><tr>'
	t.DiasMes[1]=bisi?29:28
	for(i=0;i<ini;i++){
		tab+='<td>&nbsp;</td>'
		sem++
	}
	var clase,resto=''
	for(i=1;i<=t.DiasMes[t.m];i++,sem++){
		if(sem==7){
			tab+='</tr><tr>'
			sem=0
		}
		if(sem==6){
			clase='><font color="red"'
			resto='</font>'
		}else{
			clase='><font color="black"'
			resto='</font>'
		}
		if(t.d==i){
			clase='bgcolor="#999999"><font color="white"'
			resto='</font>'
		}
		clase+='><a href="javascript:'+fun+i+')"><span '+clase
		resto='</span></a>'+resto
		tab+='<td '+clase+'>'+(i<10?'0'+i:i)+resto+'</td>'
	}
	var ds=t.d,da=t.d
	var ms=t.m+1,ma=t.m-1
	var as=t.a,aa=t.a
	if(12==ms){
		ms=0
		as++
	}
	if(-1==ma){
		ma=11
		aa--
	}
	if(ds>t.DiasMes[ms])ds=t.DiasMes[ms]
	if(da>t.DiasMes[ma])da=t.DiasMes[ma]
	tab+='</tr><tr><td><a href="javascript:window.'+t.id+'.CambiaFechaDMA('+da+','+(ma+1)+','+aa+')"><font color="black">&lt;&lt;</font></a></td>'+
		'<td colspan="5"></td><td><a href="javascript:window.'+t.id+'.CambiaFechaDMA('+ds+","+(ms+1)+","+as+')"><font color="black">&gt;&gt;</font></a></tr></table>'
	if(debug)alert("tab = "+tab)
	return tab
}
gsCalendario.prototype.CambiaFechaDMA=function(d,m,a){
	if(debug)alert("Fecha nueva ="+d+"/"+m+"/"+a)
	var t=this
	t.f=new Date(a,m-1,d) // Ajustar fecha
	t.d=t.f.getDate()
	t.m=t.f.getMonth()
	t.a=t.f.getFullYear()
	t.tab=t.Genera()
	if(t.l&&t.auto)t.l.escribe(t.tab)
}
gsCalendario.prototype.DameFecha=function(){
	return this.f
}
gsCalendario.prototype.DameFechaTxt=function(){
	var m=this.m+1
	return (this.d<10?'0':'')+this.d+'/'+(m<10?'0':'')+m+'/'+this.a
}
gsCalendario.prototype.muestra=function(d){
	var t=this
	if(d){
		t.d=d.substr(0,2)*1
		t.m=d.substr(3,2)*1-1
		t.a=d.substr(6)*1
		t.tab=t.Genera()
	}
	t.l.escribe(t.tab)
	t.l.autoAjusta()
	t.l.muestra()
}
gsCalendario.prototype.oculta=function(v){
	var t=this
	t.l.oculta()
	if(v&&t.e){
		t.d=v
		t.e.value=t.DameFechaTxt()
	}
}
gsCalendario.prototype.enlaza=function(e){
	this.e=e
}