function mostrarCalendario(idioma, mes, ano)
{
	var archivoXML = "xml/calendario_" + idioma + ".xml"
	//Calculo la fecha actual 
	var hoy = new Date();
	var diaHoy = hoy.getDate(); 
	var mesHoy = hoy.getMonth() + 1; 
	var anoHoy = hoy.getFullYear(); 
	
if (window.ActiveXObject)
{
	var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	xmlDoc.async=false; 
} 
else if (document.implementation && document.implementation.createDocument) 
{
var xmlDoc= document.implementation.createDocument("","doc",null);
}

// Todas las declaraciones DOM posteriores son interoperables 

// Cargar el Documento XML
xmlDoc.load(archivoXML);

// Expresion ("Regular Expression") para detectar cualquier caracter.
// excepto espacios en Blanco ("Whitespace") 
var caracteresNoBlanco = /\S/

// Funcion para extraer el dia de la semana del Sistema 
function getDia()
{
// Extraer elemento XML y colocarlo en Objeto 
var msgobj = xmlDoc.getElementsByTagName("calendario")[0]

// Eliminar espacios en Blanco ("Whitespace") del documento XML file. 
// Necesario para Netscape 7/Mozilla

// Iniciar un Ciclo por el numero de Elemento XML 
 for (i=0;i<msgobj.childNodes.length;i++)
 {
     if ((msgobj.childNodes[i].nodeType == 3) && (!caracteresNoBlanco.test(msgobj.childNodes[i].nodeValue))) {
         // Esta condicional se cumple si es un nodo de Texto en Blanco 
         msgobj.removeChild(msgobj.childNodes[i])
         i--
     }
 }
 var diasActividades = new Array;
 var posArray = 0;
 var i = 0;
 for (i=0;i<msgobj.childNodes.length;i++)
 {
 	var fecha = xmlDoc.getElementsByTagName("calendario")[0].childNodes[i].getAttribute("fecha").split("-");
 	if( fecha[1] == mes && fecha[2] == ano)
	{
		diasActividades[posArray] = new Array (fecha[0], xmlDoc.getElementsByTagName("calendario")[0].childNodes[i].firstChild.nodeValue);
		posArray = posArray + 1;		
	}
 }

var DiasSemanaNumero = new Array;
var DiasSemanaLetra = new Array;
var DiasMes = new Array;
	
	DiasMes = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	//Comprobamos si el año es Bisiesto. En este caso Febrero tendrá 29 días
	if (ano%4 == 0) 
	{
		DiasMes[1] = 29
	}
	
	var Meses = new Array;		
	var MesesAbbr = new Array;		
	
	if(idioma == 'ga')
	{
		Meses[0]  = "Xaneiro";
		Meses[1]  = "Febreiro";
		Meses[2]  = "Marzo";
		Meses[3]  = "Abril";
		Meses[4]  = "Maio";
		Meses[5]  = "Xuño";
		Meses[6]  = "Xullo";
		Meses[7]  = "Agosto";
		Meses[8]  = "Setembro";
		Meses[9]  = "Outubro";
		Meses[10] = "Novembro";
		Meses[11] = "Decembro";
		
		MesesAbbr[0]  = "Xan";
		MesesAbbr[1]  = "Feb";
		MesesAbbr[2]  = "Mar";
		MesesAbbr[3]  = "Abr";
		MesesAbbr[4]  = "Mai";
		MesesAbbr[5]  = "Xuñ";
		MesesAbbr[6]  = "Xul";
		MesesAbbr[7]  = "Ago";
		MesesAbbr[8]  = "Set";
		MesesAbbr[9]  = "Out";
		MesesAbbr[10] = "Nov";
		MesesAbbr[11] = "Dec";
		
		DiasSemanaNumero = new Array("L","M","M","X","V","S","D");
		DiasSemanaLetra = new Array("Luns","Martes","Mércores","Xoves","Venres","Sábado","Domingo");
	}
	else
	{
		Meses[0]  = "Enero";
		Meses[1]  = "Febrero";
		Meses[2]  = "Marzo";
		Meses[3]  = "Abril";
		Meses[4]  = "Mayo";
		Meses[5]  = "Junio";
		Meses[6]  = "Julio";
		Meses[7]  = "Agosto";
		Meses[8]  = "Septiembre";
		Meses[9]  = "Octubre";
		Meses[10] = "Noviembre";
		Meses[11] = "Diciembre";
		
		MesesAbbr[0]  = "Ene";
		MesesAbbr[1]  = "Feb";
		MesesAbbr[2]  = "Mar";
		MesesAbbr[3]  = "Abr";
		MesesAbbr[4]  = "May";
		MesesAbbr[5]  = "Jun";
		MesesAbbr[6]  = "Jul";
		MesesAbbr[7]  = "Ago";
		MesesAbbr[8]  = "Sep";
		MesesAbbr[9]  = "Oct";
		MesesAbbr[10] = "Nov";
		MesesAbbr[11] = "Dic";
		
		DiasSemanaNumero = new Array("L","M","X","J","V","S","D");
		DiasSemanaLetra = new Array("Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo");
	}
	
	var dia = 1; // Primer día del mes
	//Creamos la fecha del primer día del mes a mostrar para poder saber a que día de la semana corresponde
	var primerDiaMes = new Date();
	primerDiaMes.setDate(1);
	primerDiaMes.setMonth(mes-1);
	primerDiaMes.setFullYear(ano);
	var diaSemana = primerDiaMes.getDay();
	//Recuperamos el día, mes y año de la fecha actual para ponerlo en negrita si tenemos seleccionado el mes actual
	var hoy = new Date();
	var mesActual = hoy.getMonth() + 1;
	var anoActual = hoy.getFullYear();

	//El Curso Escolar comienza en Septiembre y finaliza en Agosto del Año siguiente
	var stCabecera = Meses[mes-1].toUpperCase() + "&nbsp;" + ano;

	//Creo la tabla
	stTexto = "<table id=\"wp-calendar\" summary=\"Calendar\">\n";
	stTexto +="<caption>" + stCabecera + "</caption>\n";
	stTexto += "<thead>\n";
	stTexto += "<tr>\n";
						
	for(i=0;i<7;i++){
		stTexto += "<th abbr=\"" + DiasSemanaLetra[i] +"\" scope=\"col\" title=\"" + DiasSemanaLetra[i] +"\">"+ DiasSemanaNumero[i] + "</th>\n";
	}
	
	stTexto += "</tr>\n";
	stTexto += "</thead>";			

	var mesAnterior = mes - 1;	
	var anoAnterior = ano;	
	var mesSiguiente = mes + 1;	
	var anoSiguiente = ano;
	
	stTexto += "<tfoot>\n";
	stTexto += "<tr>\n";
	if(mesAnterior == 0)
	{
	    mesAnterior = 12;
		anoAnterior = ano - 1;
	}
	stTexto += "<td abbr=\"" + Meses[mesAnterior - 1] + "\" colspan=\"3\" id=\"prev\"><a href=\"#\" onClick =\"mostrarCalendario(\'" + idioma + "\', " + mesAnterior + ", " + anoAnterior + ")\">&laquo; " + MesesAbbr[mesAnterior - 1] + "</a></td>";
	
	stTexto += "<td class=\"pad\">&nbsp;</td>";
	
	if(mesSiguiente == 13)
	{
	    mesSiguiente = 1;
		anoSiguiente = ano + 1;
	}
	stTexto += "<td abbr=\"" + Meses[mesSiguiente - 1] +"\" colspan=\"3\" id=\"next\" class=\"pad\"><a href=\"#\" onClick =\"mostrarCalendario(\'" + idioma + "\', " + mesSiguiente + ", " + anoSiguiente + ")\">" + MesesAbbr[mesSiguiente - 1] + " &raquo;</a></td>";
	
	stTexto += "</tr>";
	stTexto += "</tfoot>";
	
	stTexto += "<tbody>";
	
	var aux = (dia - diaSemana + 1)%7	
	//aux es el primer lunes del calendario
	
	if (aux > 1) {
		aux = aux - 7;				
		//aux es la primera casilla del calendario. 
		//Suele tener valor negativo
	}

	var nS = Math.ceil((DiasMes[mes-1] - aux + 1)/7);
	//numero de semanas que va a ocupar ese mes

	 var txtMostrar = "";	
	// construye el calendario
	//   el 1er for genera las filas (semanas)
	//   y el 2o for escribe cada día de la semana para esa semana
	for (var numSemana = 0; numSemana < nS; numSemana++)
	{
		stTexto  +="<tr>";
		for (i=0; i<7 ; i++){

			/*if (i > 4) {
				// es fin de semana
				clase = "finSemana";
			} else {
				// es dia laborable
				clase = "";
			}*/

			var iAux = aux + i + numSemana*7;
			if (iAux < 1){
				// escribimos celdas vacias porque el dia 1 aun no ha llegado
				stTexto  +="<td>&nbsp;</td>";
			}else if (iAux < DiasMes[mes-1] + 1 )
			{
				txtMostrar = "";
				for(indexArray = 0; indexArray < diasActividades.length; indexArray++)
				{
					if(diasActividades[indexArray][0] == iAux)
					{
						txtMostrar = diasActividades[indexArray][1];
					}					
				}
				if(txtMostrar == "")
				{
					if(mes == mesHoy && ano == anoHoy && iAux == diaHoy)
					{
						clase = "diaActual";
						stTexto  +="<td id=\"" + clase +"\">" + iAux + "</td>";
					}
					else
					{
						stTexto  +="<td>" + iAux + "</td>";
					}
				}
				else
				{
					clase = "diaConActividad";
					var txtFecha = iAux + " de " + Meses[mes-1] + " de " + ano;
					stTexto  +="<td id=\"" + clase +"\"> <A href=\"#\" onMouseOver=\"stm(\'" + txtFecha + "\', \'" + txtMostrar + "\')\" onMouseOut=\"htm()\">" + iAux + "</a></td>";							
				}
			}else{
				// terminamos de rellenar la tabla con celdas vacias
				stTexto  +="<td>&nbsp;</td>";
			}
		}
		
		stTexto  +="</tr>";
	}
	
	stTexto  += "";			
	stTexto += "		</tr>\n";
	stTexto += "		</tbody>";
	stTexto += "		</table>";

document.getElementById("calendario_wrap").innerHTML = stTexto
}

// Condicional para invocar la funcion getDia()

// Con Internet Explorer, simplemente llamar ejecutar metodo
// esta llamada directa es posible debido a la propiedad "async"
if (window.ActiveXObject) { 
 getDia()
}  else  { 
//Con Netscape 8/Mozilla, ejeuctar funcion una vez cargado el Objeto (Documento XML)
 xmlDoc.onload=getDia
}
}
