var getCalendario = null;
var xmlCalendario = null;
var CualMes=0;

function CrearCalendario(QueMes){
	if (window.XMLHttpRequest){
		getCalendario=new XMLHttpRequest()
	}else if (window.ActiveXObject){
		getCalendario=new ActiveXObject("Microsoft.XMLHTTP")
	}
	if (getCalendario){
		var url="calendario.xml";
		getCalendario.onreadystatechange=CambioDeEstado;
		getCalendario.open("GET",url,true);
		getCalendario.send(null);
		CualMes=QueMes;
	}else{
		alert ("Tu explorador no soporta XMLHttpRequest");
	}
}

function CambioDeEstado(){
	if (getCalendario.readyState == 4){
		xmlCalendario = getCalendario.responseXML;
		xmlCalendario = xmlCalendario.getElementsByTagName('cita');
		setCal(CualMes);
	} 
} 

function bisiesto(Anio) {
	if (Anio % 4 == 0)
	return true
	return false
}

function firstDayIsSunday(Month,Year){  // 070628 JDC Función que determina si el primer día del mes es un domingo
        var dtTmp = new Date(Year,Month-1,1);
        if(dtTmp.getDay() == 0)
          return true;
        else
          return false;
}

function diasPorMes(mes, Anio) {
var meses = new Array(12)
meses[1] = 31; // Enero
meses[2] = (((Anio % 4 == 0) && (Anio % 100 != 0)) || (Anio % 400 == 0)) ? 29 : 28
meses[3] = 31 // Marzo
meses[4] = 30 // Abril
meses[5] = 31 // Mayo
meses[6] = 30 // Junio
meses[7] = 31 // Julio
meses[8] = 31 // Agosto
meses[9] = 30 // Septiembre
meses[10] = 31 // Octubre
meses[11] = 30 // Noviembre
meses[12] = 31 // Diciembre
return meses[mes]
}

function getNombreDelMes(mes) {
var meses = new Array(12)
meses[1] = "Enero"
meses[2] = "Febrero"
meses[3] = "Marzo"
meses[4] = "Abril"
meses[5] = "Mayo"
meses[6] = "Junio"
meses[7] = "Julio"
meses[8] = "Agosto"
meses[9] = "Septiembre"
meses[10] = "Octubre"
meses[11] = "Noviembre"
meses[12] = "Diciembre"
return meses[mes]
}

function setCal(xmlResp, strIdDestino, strAnioMes) {
	//***  071207  HMO  Corrección: La rutina deberá procesar el mes, según se le indique en strAnioMes en formato aaaamm
	xmlCalendario = xmlResp.getElementsByTagName('cita');
	
	var dteNow = new Date();
	var intAnio, intMes;
	try {
		intAnio = parseInt(strAnioMes.substr(0, 4));
		intMes = parseInt(strAnioMes.substr(4, 2), 10) - 1;
		//alert("intAnio="+ intAnio +", intMes=" + intMes);
	}
	catch(e) {
		//***  071207  HMO  Si hay error, se establece el mes actual...
		intAnio = dteNow.getFullYear();
		intMes = dteNow.getMonth();
	}
	var intPrimerDia = (new Date(intAnio, intMes, 1)).getDay();
	var intDias = diasPorMes(intMes+1, intAnio)
	//alert("intPrimerDia+1=" + (intPrimerDia+1)+", intDias="+intDias+", dteNow="+dteNow+", intMes+1="+(intMes+1)+", intAnio="+intAnio);
	drawCal(strIdDestino, intPrimerDia + 1, intDias, dteNow.getDate(), intMes+1, intAnio)
}

function getCellColor(cDia,Mes,Anio){
var textoCelda = cDia;
//***  070320  HMO  Se cambia la estrategia de los estilos a considerar en una celda de día...
var textoTd = 'celda';
var strDI = "0"+cDia;
var strMI = "0"+Mes;
var strFechaCompara = Anio + "-" + strMI.substr(strMI.length-2, 2) + "-" + strDI.substr(strDI.length-2, 2);
for (i=0;i<xmlCalendario.length;i++){
	var fecha = xmlCalendario[i].getAttribute('fecha');
	if (fecha == strFechaCompara){
	      var titulo = "";
		try{
			titulo = xmlCalendario[i].getAttribute('titulo');
		}
		catch(e) { }
		var descripcion = "";
		try{
			descripcion= xmlCalendario[i].getAttribute('descripcion');
		}
		catch(e) { }
		var strHorario = "hor0";
		try{
			strHorario = xmlCalendario[i].getAttribute('horario');
		}
		catch(e) { }
		if(strHorario==null || strHorario.length==0) strHorario = "hor0";
		textoTd += ' ' + strHorario;
	}
}
return textoTd;
}

function drawCal(strIdDestino, firstDay, lastDate, date, Mes, Anio) {
var blFirstDayIsSunday = firstDayIsSunday(Mes,Anio);;
var now = new Date()
var codigo = ""
codigo += '<table class="tabla">'
codigo += '<tr><td class="encabezado" colspan="7">'
codigo += getNombreDelMes(Mes) + ' ' + Anio
codigo += '</td></tr>'

var diasSemana = new Array(7)
diasSemana[0] = "<acronym title=\"Lunes\">Lu</acronym>"
diasSemana[1] = "<acronym title=\"Martes\">Ma</acronym>"
diasSemana[2] = "<acronym title=\"Miércoles\">Mi</acronym>"
diasSemana[3] = "<acronym title=\"Jueves\">Ju</acronym>"
diasSemana[4] = "<acronym title=\"Viernes\">Vi</acronym>"
diasSemana[5] = "<acronym title=\"Sábado\">Sa</acronym>"
diasSemana[6] = "<acronym title=\"Domingo\">Do</acronym>"

codigo += '<tr>'
for (var dayNum = 0; dayNum < 7; ++dayNum) {
codigo += '<td class="celdaDiaSemana">' + diasSemana[dayNum] + '</td>'
}
codigo += '</tr>'

var cDia = 1, curCell = 1;
// **** 111117 FDB Se agrega el título a la celda, cuando exista el arreglo de horarios
var txtTitCelda = '', txtClsCelda = '';
if(blFirstDayIsSunday){
	txtClsCelda = getCellColor(1,Mes,Anio);
	txtTitCelda = TituloCelda(txtClsCelda, 1, Mes);
	codigo += '<tr><td></td><td></td><td></td><td></td><td></td><td></td><td class="' + txtClsCelda + '"' + (txtTitCelda.length > 0 ? ' title="' + txtTitCelda + '"' : '') + '>1</td>';
}
for (var row = 1; row <= Math.ceil((lastDate + firstDay - 1) / 7); ++row) {
if(row == 1 && blFirstDayIsSunday)
  cDia++;
codigo += '<tr>'
for (var col = 1; col <= 7; ++col) {
if (cDia > lastDate)
break
if ((curCell + 1 < firstDay)) {
codigo += '<td></td>';
curCell++
} else {
var textoTd = '', textoCelda = cDia;
txtClsCelda = getCellColor(cDia,Mes,Anio);
textoTd += txtClsCelda;
txtTitCelda = TituloCelda(txtClsCelda, cDia, Mes);
if (cDia == date && Mes == now.getMonth()+1) textoTd += ' hoy'; 
codigo += '<td class="' + textoTd + '"' + (txtTitCelda.length > 0 ? ' title="' + txtTitCelda + '"' : '') + '>' + textoCelda + '</td>'
cDia++
}
}
codigo += '</tr>'
}

codigo += '</table>'
document.getElementById(strIdDestino).innerHTML=codigo;
}

function TituloCelda(strClsCelda, Dia, Mes){
	var strResp = "";
	if (typeof(arrHorarios) != "undefined"){
		strResp += Dia + "/" + getNombreDelMes(Mes).substr(0, 3) + "<br />";
		try { strResp += arrHorarios[parseInt(strClsCelda.replace(/celda|hor| /gi,""),10)]; } catch(err) { strResp = "Sin Horario"; }
	}
	return strResp;
}
