/**************************************** Calendario ***************************************************/

function calendario (campo_destino,valor_campo,dia_minimo,dia_maximo,estilo,fs,dias_sueltos)
{
	document.frmDatos.fechasmes.value = '';
	var diasueltoPintado = 0;
	var diaminimo = fecha_cal (dia_minimo);
	var diamaximo = fecha_cal (dia_maximo);
	var meses = ["ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"];
	var dias_semana = ["D", "L", "M", "X", "J", "V", "S"];
	var inicio_semana = 1;
	var posicionDiasSueltos = 0;

	if (dias_sueltos != "")
		var diasSueltos = cargaDiasSueltos (dias_sueltos);

	var dia =(valor_campo == null || valor_campo =="" ? diaminimo : fecha_cal (valor_campo));

	var mes_anterior = new Date(dia);
	mes_anterior.setMonth(dia.getMonth()-1);
	if (dia.getMonth()%12 != (mes_anterior.getMonth()+1)%12)
	{
		mes_anterior.setMonth(dia.getMonth());
		mes_anterior.setDate(0);
	}

	var mes_siguiente = new Date(dia);
	mes_siguiente.setMonth(dia.getMonth()+1);
	if ((dia.getMonth() + 1)%12 != mes_siguiente.getMonth()%12)
		mes_siguiente.setDate(0);

	var primer_dia = new Date(dia);
	primer_dia.setDate(1);
	primer_dia.setDate(1-(7+primer_dia.getDay()-inicio_semana)%7);

	var ultimo_dia = new Date(mes_siguiente);
	ultimo_dia.setDate(0);

	var cadena_htm = new String(
	"<html>\n"+
	"<head>\n"+
	"<title>Calendario</title>\n"+
	"<LINK href=" + estilo + ".css rel=stylesheet type='text/css'>"+
	"</head>\n"+
	"<body class='fondobody' topmargin=\"5\" leftmargin=\"5\">\n"+
	"<table cellspacing=\"0\" border=\"0\" width=\"100%\">\n"+
	"<tr><td class='rebordeexteriortabla'>\n"+
	"<table cellspacing=\"1\" cellpadding=\"0\" border=\"0\" width=\"100%\" class='bordetabla'>\n"+
	"<tr>\n	<td class='fondoizq' align=\"center\" height=\"18\">");

	if (diaminimo.getMonth() != diamaximo.getMonth () || diaminimo.getYear() != diamaximo.getYear ())
	{
		cadena_htm += "<a href=\"javascript:window.opener.calendario('" + campo_destino + "', '" + fecha_text (mes_anterior) + "','" + fecha_text (diaminimo) + "','" + fecha_text (diamaximo) + "','" + estilo + "'," + fs + ",'" + dias_sueltos + "');\" style=\"text-decoration: none\" class='flechaizq'><<</a>";
		cadena_htm += "</td>\n" + "<td class='fondotitulo' colspan=\"5\" align=\"center\">" + "<font class=\"titulo\">" + meses[dia.getMonth()] + " " + dia.getFullYear() + "</font></td>\n" + "<td class='fondoder' align=\"center\">";
		cadena_htm += "<a href=\"javascript:window.opener.calendario('" + campo_destino + "', '" + fecha_text (mes_siguiente) + "','" + fecha_text (diaminimo) + "','" + fecha_text (diamaximo) + "','" + estilo + "'," + fs + ",'" + dias_sueltos + "');\" style=\"text-decoration: none\" class='flechader'>>></a>";
		cadena_htm += "</td>\n</tr>\n";
	}
	else
	{
		cadena_htm += "&nbsp;";
		cadena_htm += "</td>\n" + "<td class='fondotitulo' colspan=\"5\" align=\"center\">" + "<font class=\"titulo\">" + meses[dia.getMonth()] + " " + dia.getFullYear() + "</font></td>\n" + "<td class='fondoder' align=\"center\">";
		cadena_htm += "&nbsp;";
		cadena_htm += "</td>\n</tr>\n";
	}

	var dia_actual = new Date(primer_dia);
	cadena_htm += "<tr>\n";
	for (var n=0; n<7; n++)
	{
		cadena_htm += "	<td class=\"fondodiassemana\" width=\"35\" height=\"16\" align=\"center\">";
		if (n == 6)
			cadena_htm += "<font class=\"domingocabecera\">"
		else
			cadena_htm += "<font class=\"diassemana\">"
		cadena_htm += dias_semana [(inicio_semana + n) % 7] + "</font></td>\n";
	}

	cadena_htm += "</tr>\n";
	while (dia_actual.getMonth() == dia.getMonth() || dia_actual.getMonth() == primer_dia.getMonth())
	{
		cadena_htm += "<tr>\n";
		for (var contador_semana=0; contador_semana<7; contador_semana++)
		{
			if (dia_actual.getDay() == 0)
				cadena_htm += "<td class=\"fondodomingo\" align=\"center\" height=\"16\">";
			else
				cadena_htm += "<td class=\"fondodias\" align=\"center\" height=\"16\">";

			if ((dia_actual >= diaminimo) && (dia_actual <= diamaximo))
			{
				if (fs != 0 || dias_sueltos != '')
				{
					diasueltoPintado = 0;
					if (dias_sueltos != '')
					{
						var longDias = diasSueltos.length;
						for (j=posicionDiasSueltos; j<longDias; j++)
						{
							var fechaTemp = fecha_cal(diasSueltos[j]);
							if (dia_actual.getDate() == fechaTemp.getDate() && dia_actual.getMonth() == fechaTemp.getMonth() && dia_actual.getYear() == fechaTemp.getYear())
							{
								cadena_htm += "<a class=diassenalados href=\"javascript:window.opener." + campo_destino + ".value='" + fecha_text (dia_actual)+"'; window.opener." + campo_destino + ".onchange();  window.close();\" style=\"text-decoration: none\">" + "";
								document.frmDatos.fechasmes.value = document.frmDatos.fechasmes.value + fecha_text(dia_actual) + ",";
								diasueltoPintado = 1;
								posicionDiasSueltos++;
							}
						}
					}
					if (fs != 0 && diasueltoPintado == 0)
					{
						if (dia_actual.getDay() == 0 || dia_actual.getDay() == 6 || dia_actual.getDay() == 5)
						{
							cadena_htm += "<a class=diassenalados href=\"javascript:window.opener." + campo_destino + ".value='" + fecha_text (dia_actual)+"'; window.opener." + campo_destino + ".onchange();  window.close();\" style=\"text-decoration: none\">" + "";
							document.frmDatos.fechasmes.value = document.frmDatos.fechasmes.value + fecha_text(dia_actual) + ",";
						}
						else
							cadena_htm += "<font class=diasnosenalados>";
					}
				}
				else
				{
					if (dia_actual.getMonth() == dia.getMonth())
					{
						cadena_htm += "<a class=diassenalados href=\"javascript:window.opener." + campo_destino + ".value='" + fecha_text (dia_actual)+"'; window.opener." + campo_destino + ".onchange();  window.close();\" style=\"text-decoration: none\">" + "";
						document.frmDatos.fechasmes.value = document.frmDatos.fechasmes.value + fecha_text(dia_actual) + ",";
					}
					else
					{
						cadena_htm += "<a href=\"javascript:window.opener." + campo_destino + ".value='" + fecha_text (dia_actual)+"'; window.opener." + campo_destino + ".onchange();  window.close();\" style=\"text-decoration: none\"><font class=diasnosenalados>" + "";
						document.frmDatos.fechasmes.value = document.frmDatos.fechasmes.value + fecha_text(dia_actual) + ",";
					}
				}
				cadena_htm += (dia_actual.getDate()) + "</font></a></td>\n";
			}
			else
			{
				cadena_htm += "<font class=diasnosenalados>";
				cadena_htm += (dia_actual.getDate())+"</font></td>\n";
			}
			dia_actual.setDate(dia_actual.getDate() + 1);
		}
		cadena_htm += "</tr>\n";
	}
	cadena_htm += "</table>\n</td>\n</tr>\n<tr>\n<td align=\"center\">\n<a href=\"javascript:window.close();\" class=botoncerrar>&nbsp;cerrar&nbsp</a>\n</td>\n</tr>\n</table>\n</body>\n</html>\n";
	var vWinCal = window.open("", "Calendario", "width=210,height=170,status=no,resizable=no,top=200,left=200");
	vWinCal.opener = self;
	vWinCal.focus();
	var calc_doc = vWinCal.document;
	calc_doc.write (cadena_htm);
	calc_doc.close();
}

/********************* Carga los días sueltos que le pasen al calendario en un array *************************/

function cargaDiasSueltos (dias)
{
	var cont_dias = 0;
	var fechas = new Array ();
	var dias_sueltos = new Array ();
	var rangofechas = new Array ();

	fechas = dias.split (',');
	longFechas = fechas.length;

	for (i=0; i<longFechas; i++)
	{
		if (fechas[i].indexOf("-") == -1)
		{
			dias_sueltos[cont_dias] = fechas[i];
			cont_dias ++;
		}
		else
		{
			rangofechas = fechas[i].split ('-');
			rangofechas[0]=fecha_cal(rangofechas[0]);
			rangofechas[1]=fecha_cal(rangofechas[1]);
			for (j = rangofechas[0]; j <= rangofechas[1]; j.setDate(j.getDate() + 1))
			{
				dias_sueltos[cont_dias] = fecha_text (j)
				cont_dias++;
			}
		}
	}
	return dias_sueltos;
}

/******************* Convierte una fecha en formato DD/MM/AAAA en fecha maquina ****************************/

function fecha_cal (str_datetime)//Transforma una fecha comun a fechamaquina.
{
	var re_date = /^(\d+)\/(\d+)\/(\d+)$/;
	if (!re_date.exec(str_datetime))
		return alert("Invalid Datetime format: "+ str_datetime);
	return (new Date (RegExp.$3, RegExp.$2-1, RegExp.$1));
}

/****************** Convierte fecha maquina en fecha en formato DD/MM/AAAA ********************************/

function fecha_text (dt_datetime)
{
	return (new String (dt_datetime.getDate()+"/"+(dt_datetime.getMonth()+1)+"/"+dt_datetime.getFullYear()));
}
