// 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 = "";

// Función a la que llama el Aspgrid
function show_calendar(c, m, a, f)
{
	var d = new Date();

	campo_fecha = c;
	formato_fecha = f;

	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 = campo_fecha;

	//Si el dia o el mes no son de dos cifras se le añade un cero delante,
	//convirtiendolo primero a string
	d=d+"";
	m=m+"";
	if (d.length==1)
		d="0"+d;
	if (m.length==1)
		m="0"+m;

	if(obj) {
		obj.value = d + "/" + m + "/" + a;
	} else {
		alert(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);
	doc.getElementById('mes').innerHTML = html;
}

//FUNCION AÑADIDA POR TXUPI, si la opcion es 1 es que vamos al mes siguiente, si es 0 vamos al mes anterior
function cambiar_mes2(doc,opcion) {
var nuevo_anio;
var html;
var nuevo_mes;
	nuevo_anio=doc.forms.datos.a.selectedIndex;
	nuevo_mes=doc.forms.datos.m.selectedIndex;
	if (opcion==0)
		nuevo_mes=nuevo_mes-1;
	else
		nuevo_mes=nuevo_mes+1;
	if (nuevo_mes==12)
	{
		nuevo_anio=doc.forms.datos.a.selectedIndex+1;
		nuevo_mes=0;
	}

	if (nuevo_mes==-1)
	{
		nuevo_anio=doc.forms.datos.a.selectedIndex-1;
		nuevo_mes=11;
	}
	doc.forms.datos.a.selectedIndex=nuevo_anio;
	doc.forms.datos.m.selectedIndex=nuevo_mes;
	html = mes(doc.forms.datos.a[doc.forms.datos.a.selectedIndex].value, doc.forms.datos.m.selectedIndex);
	doc.getElementById('mes').innerHTML = html;
}

function calendario(a, m)
{
	// Generar html
	var html = "<html>\n";
	html += "<head>\n";
	html += "<title>Calendario - - - -</title>\n";
	html += "<style type=text/css>\n";
	html += "#mes {position:absolute;top:40px;left:10px}\n";
	html += ".cabecera {font: bold 10px Verdana, Arial, Helvetica, sans-serif; color: #ffffff; background-color: #8F8F86; text-align: center; text-decoration: none}\n";
	html += ".subcabecera {font: 10px Verdana, Arial, Helvetica, sans-serif; color: #000000; background-color: #bbbbb0; 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: #ddddd0; text-align: center; text-decoration: none}\n";
	html += ".festivo {font: bold 10px Verdana, Arial, Helvetica, sans-serif; color: #ff0000; background-color: #0000000; text-align: center; text-decoration: none}\n";
	html += "select {font: 10px Verdana, Arial, Helvetica, sans-serif; color: #000000; background-color: #ccccc0}\n";
	html += "</style>\n";
	html += "</head>\n";
	html += "<body bgcolor=#ffffff color=#000000 topmargin=10 leftmargin=10 marginheight=10 marginwidth=10 border=no>\n";
	html += "<form name=datos>\n";
	html += "<select name=m onchange=opener.cambiar_mes(document)>\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)>\n";

	for(var i = a - 50; i <= a + 50; i++) {
		if (i == a) {
			html += "<option value=" + i + " selected>" + i + "</option>\n";
		} else {
			html += "<option value=" + i + ">" + i + "</option>\n";
		}
	}

	html += "</select>\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 = 180;
	var height = 170;

	var left = 780; // screenLeft + 50;
	var top = 250; // screenTop + 50;

	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 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
	//AÑADIDO POR TXUPI, para poder ir al mes siguiente y anterior
	html += "<tr><td class=cabecera><a href=javascript:opener.cambiar_mes2(document,0) class=cabecera><</a></td>";
	html += "<td colspan=5 class=cabecera>" + meses[m] + "</td>";
	html += "<td class=cabecera><a href=javascript:opener.cambiar_mes2(document,1) class=cabecera>></a></td></tr>\n";

	//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 href=\"javascript:opener.cambiar(document," + d + ");close()\" class=cabecera onfocus=blur()>" + d++ + "</a></td>\n";
				} else if(j != 6) {
					html += "<td class=labor><a href=\"javascript:opener.cambiar(document," + d + ");close()\" class=labor onfocus=blur()>" + d++ + "</a></td>\n";
				} else {
					html += "<td class=festivo><a 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 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);
}

