/**************************************** Calendario ***************************************************/

function calendario (campo_destino,valor_campo,dia_minimo,dia_maximo,estilo,fs,dias_sueltos,literalesMes,literalesSemana,otrosliterales)
{	
	try{
	
	document.frmDatos.fechasmes.value = '';	
		var diasueltoPintado = 0;
	
		var diaminimo = fecha_cal (dia_minimo);

		var diamaximo='';

		var OtrosLiterales=otrosliterales.split("|");  //--> Los otros literales son: Calendario|Cerrar
		var meses = literalesMes.split("|");   
		var dias_semana =literalesSemana.split("|"); //["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>" + OtrosLiterales[0] + "</title>\n"+
		"<LINK href=\"../elementos/" + estilo + ".css\" rel=stylesheet type=\"text/css\">"+
		"</head>\n"+
		"<body topmargin=\"5\" leftmargin=\"5\">\n"+
		"<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"198\"  >\n"+
		"<tr class=\"bordetabla\" ><td>\n"+
		"<table cellspacing=\"1\" cellpadding=\"0\" border=\"0\" width=\"100%\"  >\n"+
		"<tr>\n	<td class=\"fondocabecera\" align=\"center\" height=\"18\">");


		cadena_htm += "<a href=\"javascript:window.opener.calendario('" + campo_destino + "', '" + fecha_text (mes_anterior) + "','" + fecha_text (diaminimo) + "','" + diamaximo + "','" + estilo + "'," + fs + ",'" + dias_sueltos + "','" + literalesMes + "','" + literalesSemana +  "','" + otrosliterales + "');\" style=\"text-decoration: none\" class=\"cabeceratabla\"><<</a>";
		cadena_htm += "</td>\n" + "<td class=\"fondocabecera\" colspan=\"5\" align=\"center\">" + "<font class=\"cabeceratabla\">" + meses[dia.getMonth()] + " " + dia.getFullYear() + "</font></td>\n" + "<td class=\"fondocabecera\" align=\"center\">";
		cadena_htm += "<a href=\"javascript:window.opener.calendario('" + campo_destino + "', '" + fecha_text (mes_siguiente) + "','" + fecha_text (diaminimo) + "','" + diamaximo + "','" + estilo + "'," + fs + ",'" + dias_sueltos + "','" + literalesMes + "','" + literalesSemana + "','" + otrosliterales + "');\" style=\"text-decoration: none\" class=\"cabeceratabla\">>></a>";
		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=\"fondocabecera\" width=\"35\" height=\"16\" align=\"center\">";
			if (n == 6)
				cadena_htm += "<font class=\"cabeceratabla\">"
			else
				cadena_htm += "<font class=\"cabeceratabla\">"
			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)
							{
								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())
						{
							if (dia_actual.getDay() == 0)
							{
								cadena_htm += "<a class=domingo href=\"javascript:window.opener." + campo_destino + ".value='" + fecha_text (dia_actual)+"'; window.opener." + campo_destino + ".onchange();  window.close();\" style=\"text-decoration: none\"> <b>" + "";
								document.frmDatos.fechasmes.value = document.frmDatos.fechasmes.value + fecha_text(dia_actual) + "</b>" + ",";
							}
							else
							{
								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
						{
							if (dia_actual.getDay() == 0)
							{					
								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=domingo>" + "";
								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";
				}
				var diaant;
				
				diaant=dia_actual.getDate();
				
				dia_actual.setDate(dia_actual.getDate() + 1);
				
				if ( diaant==dia_actual.getDate() ) {
					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=\"diassenalados\">&nbsp;" + OtrosLiterales[1] + "&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();
	}catch(e){}
}

/********************* 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()));
}
