// Handler de la ventana para el calendario
var ventana_calendario = 0;

// Arrays con los nombres de los meses y de los días de la semana
var meses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"];
var dias_semana = ["L", "M", "M", "J", "V", "S", "D"];

// Referencia al campo fecha que se modificará. Formato: NombreFormulario.CampoTexto
var campo_fecha = "";

// De momento no se usa y se presupone DD/MM/YYYY
var formato_fecha = "DD/MM/AAAA";

// Los margenes inferior y superior del select de años (respecto al año que se le pasa)
var margen1 = -50;
var margen2 = 50;

// Función a la que llama el Aspgrid
//
//	Parámetros:
//
//	c es la ruta al campo del form
//	m es el nº del mes a mostrar (opcional)
//	a es el año a mostrar (opcional)
//	f es el formato (p.ej. DD/MM/AAAA)
//	m1 es el nº de años hacia atrás desde el año actual
//	m2 es el nº de años hacia adelante desde el año actual
//
function show_calendar(c, m, a, f, m1, m2)
{
	
	var d = new Date();

	campo_fecha = c;
	if(f  &&  f != "")
	  formato_fecha = f;
	else
	  formato_fecha = "DD/MM/YYYY";
	if(m1 != null)
	  margen1 = m1;
	if(m2 != null)
	  margen2 = m2;

	if(m == null) m = d.getMonth();
	if(a == null) a = d.getFullYear();

	calendario(a, m);
}

function cambiar(doc, d)
{
	var m = doc.forms.datos.m.selectedIndex + 1;
	var a = doc.forms.datos.a[doc.forms.datos.a.selectedIndex].value;

	var obj = eval("document.forms." + campo_fecha);

	var n;
	var ss = formato_fecha;
	// Formatea el año
	n = ss.indexOf("YYYY");
	if(n < 0)  n = ss.indexOf("yyyy");   // En minúsculas también vale !!!
	if(n >= 0) {
	    a = "" + a;
	    while(a.length < 4)  a = "0" + a;
	    ss = ss.substring(0, n) + a + ss.substring(n+4);
	}
	// Formatea el año de 2 cifras
	n = ss.indexOf("YY");
	if(n < 0)  n = ss.indexOf("yy");   // En minúsculas también vale !!!
	if(n >= 0) {
	    a = "" + a;
	    while(a.length < 2)  a = "0" + a;
	    ss = ss.substring(0, n) + a + ss.substring(n+2);
	}   
	// Formatea el mes
	n = ss.indexOf("MM");
	if(n < 0)  n = ss.indexOf("mm");   // En minúsculas también vale !!!
	if(n >= 0) {
	    m = "" + m;
	    while(m.length < 2)  m = "0" + m;
	    ss = ss.substring(0, n) + m + ss.substring(n+2);
	}
	// Formatea el mes de 1 cifra
	n = ss.indexOf("M");
	if(n < 0)  n = ss.indexOf("m");   // En minúsculas también vale !!!
	if(n >= 0) {
	    ss = ss.substring(0, n) + m + ss.substring(n+1);
	}
	// Formatea el dia
	n = ss.indexOf("DD");
	if(n < 0)  n = ss.indexOf("dd");   // En minúsculas también vale !!!
	if(n >= 0) {
	    d = "" + d;
	    while(d.length < 2)  d = "0" + d;
	    ss = ss.substring(0, n) + d + ss.substring(n+2);
	}
	// Formatea el dia de 1 cifra
	n = ss.indexOf("D");
	if(n < 0)  n = ss.indexOf("d");   // En minúsculas también vale !!!
	if(n >= 0) {
	    ss = ss.substring(0, n) + d + ss.substring(n+1);
	}
	if(obj) {
		obj.value = ss;   // d + "/" + m + "/" + a;
	} else {
		alert(ss);  // d + "/" + m + "/" + a);
	}
}
function cambiar_mes(doc) {
	var html = mes(doc.forms.datos.a[doc.forms.datos.a.selectedIndex].value, doc.forms.datos.m.selectedIndex);

	if(doc.all) {
		doc.all.mes.innerHTML = html;
	} else {
		doc.layers.mes.document.open();
		doc.layers.mes.document.write(html);
		doc.layers.mes.document.close();
	}
}

function mes(a, m)
{
	// Hoy
	var hoy = new Date();
	var hoy_d = hoy.getDate();
	var hoy_test = (m == hoy.getMonth() && a == hoy.getFullYear());

	// Generar la tabla del mes pedido
	var html = "<table cellspacing=1 cellpadding=1 border=0 width=150>\n";

	// Generar el cabecera con el nombre del mes
	// html += "<tr><td colspan=7 class=cabecera>" + meses[m] + "</td></tr>\n";

	// Generar la fila con los nombres de los días de la semana
	html += "<tr>\n";
	for(var d in dias_semana) {
		html += "<td class=subcabecera>" + dias_semana[d] + "</td>\n";
	}
	html += "</tr>\n";

	// Calcular qué día corresponde al lunes de la primera semana del mes pedido
	d = 1 - calcular_primer_dia_mes(a, m);

	// Cada semana es una fila en la tabla
	for(var i = 0; i < calcular_semanas_mes(a, m); i++) {
		html += "<tr>\n";

		// Cada día es una celda (siete por fila lógicamente)
		for(var j = 0; j < 7; j++) {

			// Si el día es negativo o mayor que el nº de días del mes hay que dejarla vacía
			if(d < 1 || d > calcular_dias_mes(a, m)) {
				html += "<td class=texto>&nbsp;</td>\n";
				d++;
			} else {
				// Si es hoy marcarlo, sino es domingo o día de labor
				if(hoy_test && d == hoy_d) {
					html += "<td class=cabecera><a OnFocus='this.blur();'  href=\"javascript:opener.cambiar(document," + d + ");close()\" class=cabecera onfocus=blur()>" + d++ + "</a></td>\n";
				} else if(j != 6) {
					html += "<td class=labor><a OnFocus='this.blur();'  href=\"javascript:opener.cambiar(document," + d + ");close()\" class=labor onfocus=blur()>" + d++ + "</a></td>\n";
				} else {
					html += "<td class=festivo><a OnFocus='this.blur();'  href=\"javascript:opener.cambiar(document," + d + ");close()\" class=festivo onfocus=blur()>" + d++ + "</a></td>\n";
				}
			}
		}
		html += "</tr>\n";
	}
	html += "</table>\n";

	// Devolver el código html de la tabla del mes pedido
	return html;
}

function calendario(a, m)
{
	// Generar html C2C8DD
	var html = "<html>\n";
	html += "<head>\n";
	html += "<title>Calendario</title>\n";
	html += "<style type=text/css>\n";
	html += "#mes {position:absolute;top:30px;left:6px}\n";
	html += ".cabecera {font: bold 10px Verdana, Arial, Helvetica, sans-serif; color: #ffffff; background-color: #828587; text-align: center; text-decoration: none}\n";
	html += ".subcabecera {font: 10px Verdana, Arial, Helvetica, sans-serif; color: #FFFFFF; background-color: #828587; text-align: center}\n";
	html += ".texto {font: 10px Verdana, Arial, Helvetica, sans-serif; text-align: center}\n";
	html += ".labor {font: 10px Verdana, Arial, Helvetica, sans-serif; color: #000000; background-color: #B6C5CF; text-align: center; text-decoration: none}\n";
	html += ".festivo {font: bold 10px Verdana, Arial, Helvetica, sans-serif; color: #FFFFFF; background-color: #828587; text-align: center; text-decoration: none}\n";
	html += ".sel {font: 10px Verdana, Arial, Helvetica, sans-serif; color: #9B3B21; text-align: center; text-decoration: none}\n";
	html += "select {font-size: 10px;font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000}\n";
	html += "</style>\n";	
	html += "<style type='text/css'>BODY{background-color: #E6F0F6;}</style>"
	html += "</head>\n";
	html += "<body bgcolor=#E6F0F6 color=#000000 topmargin=6 leftmargin=6 marginheight=6 marginwidth=6 border=no>\n";
	html += "<form name=datos>\n";
	html += "<font class='sel'>"
	html += "<select name=m onchange=opener.cambiar_mes(document) class='select'>\n";

	for(var i = 0; i < meses.length; i++) {
		if (i == m) {
			html += "<option value=" + i + " selected>" + meses[i] + "</option>\n";
		} else {
			html += "<option value=" + i + ">" + meses[i] + "</option>\n";
		}
	}

	html += "</select>\n"
        html += "<select name=a onchange=opener.cambiar_mes(document) class='select'>\n";

	for(var i = a + margen1; i <= a + margen2; i++) {
		if (i == a) {
			html += "<option value=" + i + " selected>" + i + "</option>\n";
		} else {
			html += "<option value=" + i + ">" + i + "</option>\n";
		}
	}

	html += "</select></font>\n"
	html += "</form>\n";

	html += "<div id=mes>\n";
	html += mes(a, m);
	html += "</div>\n";

	html += "</body>\n";
	html += "</html>\n";

	// Abrir una ventana para el calendario
	var width = 170;
	var height = 145;

	var left = 500;
	var top = 150;

	if(ventana_calendario && !ventana_calendario.closed) {
		ventana_calendario.close();
	}

	ventana_calendario = window.open("", "", "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,left=" + left + ",top=" + top + ",width=" + width + ",height=" + height);

	ventana_calendario.document.open();
	ventana_calendario.document.write(html);
	ventana_calendario.document.close();

	ventana_calendario.document.forms.datos.m.focus();
	
}

function calcular_dias_mes(a, m)
{
	var d = 31;
	var f = new Date(a, m, d);
	while(f.getDate() != d) {
		f = new Date(a, m, --d);
	}
	return d;
}

function calcular_primer_dia_mes(a, m)
{
	var f = new Date(a, m, 1);
	var tmp = f.getDay();
	return (tmp == 0) ? 6 : tmp - 1;
}

function calcular_semanas_mes(a, m)
{
	return Math.round(0.49 + (calcular_dias_mes(a, m) + calcular_primer_dia_mes(a, m)) / 7);
}
