/********************** Recibe las fechas maxima y minima del folleto del xml fechas *********************/

function controlafechas (folleto)
{
	abreXml('../../xmlfechas/fechas.xml')
	cargaFechas (folleto);

	var fent = document.frmDatos.fent.value;
	var fsal = document.frmDatos.fsal.value;

	var fecha = new Date ();
	var dia = fecha.getDate () + 4;
	if (dia < 10)
		dia = "0" + dia;
	var mes = fecha.getMonth () + 1;
	if (mes < 10)
		mes = "0" + mes;
	var anyo = fecha.getYear ();

	var fechaMenorLlegada = anyo + '' + mes + '' + dia;

	if (fent > fechaMenorLlegada)
		fechaMenorLlegada = fent;

	anyo = fechaMenorLlegada.substring (0,4)
	mes = fechaMenorLlegada.substring (4,6)
	dia = fechaMenorLlegada.substring (6,8)
	fechaMenorLlegada = dia + "/" + mes + "/" + anyo;
	var fechaMenorSalida = (parseInt(dia) + 1) + "/" + mes + "/" + anyo;


	anyo = fsal.substring (0,4)
	mes = fsal.substring (4,6)
	dia = fsal.substring (6,8)
	fsal = dia + "/" + mes + "/" + anyo;

	var fechaMayorLlegada = fsal;
	var fechaMayorSalida = fechaMayorLlegada;	

	document.frmDatos.fechaMenorLlegada.value = fechaMenorLlegada;
	document.frmDatos.fechaMayorLlegada.value = fechaMayorLlegada;
	document.frmDatos.fechaMenorSalida.value = fechaMenorSalida;
	document.frmDatos.fechaMayorSalida.value = fechaMayorSalida;
}

/**************** Especifica las fechas max y min que se podrán selecionar en el el calendario. ******************/ 

function cargaFechas (folleto)
{
	var fecha_entrada1, fecha_entrada2,fecha_salida1,fecha_salida2,fent,fsal;
	var num_com = xmlObj.childNodes.length;
	var posicionXml = 0;
	for (i=0; i<num_com; i++)
	{
		if (xmlObj.childNodes(i).childNodes(0).text == folleto && xmlObj.childNodes(i).childNodes(2).text == 'A')
		{
			if (posicionXml == 0)
			{
				fecha_entrada1 = xmlObj.childNodes(i).childNodes(3).text;
				fecha_salida1 = xmlObj.childNodes(i).childNodes(4).text;
				posicionXml++;
				setCookie('folleto',xmlObj.childNodes(i).childNodes(1).text);
			}
			else
			{
				fecha_entrada2 = xmlObj.childNodes(i).childNodes(3).text;
				fecha_salida2 = xmlObj.childNodes(i).childNodes(4).text;
				setCookie('folleto',xmlObj.childNodes(i).childNodes(1).text);
			}
			document.frmDatos.maxnoches.value = xmlObj.childNodes(i).childNodes(5).text;//Guarada el maximo de noches selecionables en el calendario, según folleto.
		}
	}
	if (fecha_entrada2 != undefined)
	{
		if (fecha_entrada1 < fecha_entrada2)
		{
			fent = fecha_entrada1;			//En esta funcion se seleciona del Xml las fechas de inicio y fin de cada uno de los 
			fsal = fecha_salida2;			//folletos, para realizar los controles posteriores al selecionar fechas en el calendario
		}									// y cargaR ESTE.
		else
		{
			fent = fecha_entrada2;
			fsal = fecha_salida1;
		}
	}	
	else
	{
		fent = fecha_entrada1;
		fsal = fecha_salida1
	}
	document.frmDatos.fent.value = fent;
	document.frmDatos.fsal.value = fsal;
}

/******************** Borra los textbox de las fechas de entrada y salida del establecimiento ***************/

function borra_fechas ()
{
	document.frmDatos.entrada.value = '';
	document.frmDatos.salida.value = '';
}

/****** Segun el folleto le pasa unos parametros u otros a la funcion calendario en la fecha de entrada ******/

function controlacalendarioentrada (literalesMes,literalesSemana,otrosliterales)
{
	if (document.frmDatos.tipo.value == 'FS')
		//window.location.href = calendario('document.frmDatos.entradafs',document.frmDatos.entradafs.value,document.frmDatos.fechaMenorLlegada.value,document.frmDatos.fechaMayorLlegada.value,'buscahotel',1,document.frmDatos.diassueltos.value,literalesMes,literalesSemana,otrosliterales);
		calendario('document.frmDatos.entradafs',document.frmDatos.entradafs.value,document.frmDatos.fechaMenorLlegada.value,document.frmDatos.fechaMayorLlegada.value,'buscahotel',1,document.frmDatos.diassueltos.value,literalesMes,literalesSemana,otrosliterales);
	else
		//window.location.href = calendario('document.frmDatos.entrada',document.frmDatos.entrada.value,document.frmDatos.fechaMenorLlegada.value,document.frmDatos.fechaMayorLlegada.value,'buscahotel',0,'',literalesMes,literalesSemana,otrosliterales);
		calendario('document.frmDatos.entrada',document.frmDatos.entrada.value,document.frmDatos.fechaMenorLlegada.value,document.frmDatos.fechaMayorLlegada.value,'buscahotel',0,'',literalesMes,literalesSemana,otrosliterales);
}

/****** Segun el folleto le pasa unos parametros u otros a la funcion calendario en la fecha de entrada ******/

function controlacalendariosalida (literalesMes,literalesSemana,otrosliterales)
{
	//window.location.href = calendario('document.frmDatos.fechaida',document.frmDatos.fechaida.value,document.frmDatos.fechaMenorSalida.value,document.frmDatos.fechaMayorSalida.value,'estilos',0,'',literalesMes,literalesSemana,otrosliterales);
	calendario('document.frmDatos.fechaida',document.frmDatos.fechaida.value,document.frmDatos.fechaMenorSalida.value,document.frmDatos.fechaMayorSalida.value,'estilos',0,'',literalesMes,literalesSemana,otrosliterales);
}

function controlacalendarioregreso (literalesMes,literalesSemana,otrosliterales)
{
	
	//window.location.href = calendario('document.frmDatos.fechavuelta',document.frmDatos.fechavuelta.value,document.frmDatos.fechaMenorSalida.value,document.frmDatos.fechaMayorSalida.value,'estilos',0,'',literalesMes,literalesSemana,otrosliterales);
	calendario('document.frmDatos.fechavuelta',document.frmDatos.fechavuelta.value,document.frmDatos.fechaMenorSalida.value,document.frmDatos.fechaMayorSalida.value,'estilos',0,'',literalesMes,literalesSemana,otrosliterales);
}

/*************** Controla el cambio en el text box de la fecha de entrada y modifica la de salida **************/

function fechaEntradaChange()
{
	document.frmDatos.salida.value = '';

	var diaEntrada = fecha_cal (document.frmDatos.entrada.value);

	if (document.frmDatos.salida.value == "")
	{
		diaEntrada = new Date (diaEntrada.getTime()+DyMilli);
		document.frmDatos.fechaMenorSalida.value = fecha_text (diaEntrada)
		document.frmDatos.salida.value = document.frmDatos.fechaMenorSalida.value;
	}
	else
	{
		var diaSalida = fecha_cal (document.frmDatos.salida.value);
		diaEntrada = new Date (diaEntrada.getTime()+DyMilli);
		document.frmDatos.fechaMenorSalida.value = fecha_text (diaEntrada);
		if (diaEntrada >= diaSalida)
			document.frmDatos.salida.value = document.frmDatos.fechaMenorSalida.value;
	}
	calculaNochesEstancia();
}

/******************************* Controla el cambio en el text box de la fecha de salida ************************/

function fechaSalidaChange()//Controla el cambio del parametro de fecha, para actualizar la salida
{

/*
	if (document.frmDatos.salida.value == "")
	{
		var diaSalida = fecha_cal (document.frmDatos.salida.value);
		diaSalida = new Date(diaSalida.getTime()-DyMilli);				
		fllegada = fecha_text(diaSalida)
		document.frmDatos.entrada.value = fllegada;
	}
*/
	//calculaNochesEstancia();
}

function fechaVueltaChange()//Controla el cambio del parametro de fecha, para actualizar la salida
{
/*
	if (document.frmDatos.salida.value == "")
	{
		var diaSalida = fecha_cal (document.frmDatos.salida.value);
		diaSalida = new Date(diaSalida.getTime()-DyMilli);				
		fllegada = fecha_text(diaSalida)
		document.frmDatos.entrada.value = fllegada;
	}
*/
	//calculaNochesEstancia();
}


/************************** Controla en numero de noches introducido ***********************************/

function calculaNochesEstancia()
{
	var diaEntrada = fecha_cal (document.frmDatos.entrada.value);			
	var diaSalida = fecha_cal (document.frmDatos.salida.value);

	var noches = (diaSalida - diaEntrada.getTime())/DyMilli;
	var error = controlaNoches (noches, diaEntrada);	

	if (error == 0)
		document.frmDatos.nochesEstancia.value = parseInt(noches);
	else
		document.frmDatos.salida.value = '';
}

/****** Devuelve a la funcion calculaNochesEstancia si es correcto o no el numero de noches *********/

function controlaNoches (noches, diaEntrada)//Crea un ventana  que avisa acerca del max de noiches selecionables.
{
	if (noches > document.frmDatos.maxnoches.value)
	{
		var diaE = diaEntrada.getDate() + parseInt(document.frmDatos.maxnoches.value);
		var mesE = diaEntrada.getMonth() + 1;
		var anyoE = diaEntrada.getYear ();
		var diamaximo = diaE + "/" + mesE + "/" + anyoE;
		diamaximo = fecha_cal (diamaximo);
		diamaximo = fecha_text (diamaximo);

		var codigo_flotante = new String (
		"<html>\n" + "<head>\n" + "<title>Atención</title>\n" + "</head>\n" +
		"<body bgcolor=\"#f5f5f5\" topmargin=\"0\" leftmargin=\"0\">\n"+
		"<table cellspacing=\"0\" cellpadding=\"5\" border=\"0\" width=\"100%\" bgcolor=\"#f5f5f5\">\n"+
		"<tr><td bgcolor=\"#B5DFF7\">\n"+
		"<font color=\"#212C8C\" face=\"verdana\" size=\"1\"><b>Atención:</b></font></td></tr>" + 
		"<tr><td bgcolor=\"#f5f5f5\"><font color=\"#000000\" face=\"verdana\" size=\"1\">* El número de noches seleccionado no puede exceder de " + document.frmDatos.maxnoches.value + ".<br><br>" + 
		"* Para la fecha de entrada que has seleccionado debes indicar como &nbsp;&nbsp;&nbsp;fecha de salida máxima el día " + diamaximo + "</font></td></tr>" + 
		"<tr><td align=\"center\"><a href=\"javascript:window.close();\" style=\"text-decoration: none\"><font color=\"#000000\" face=\"verdana\" size=\"1\">cerrar</font></a>\n</table></body></html>");
		
		flotanteError (410,110,codigo_flotante);
		return 1;
	}
	else
		return 0;
}

/********** Pinta en el combo de noches de FS tantas noches correlativas tengan fecha valida (hasta 7) ************/

function controla_noches_estancia()
{
	var hoy1, dmes;
	var dia_actual = document.frmDatos.entradafs.value;

	hoy1 = fecha_cal (dia_actual)

	var diasMes = new Array ();
	diasMes = unifica_fechas (hoy1);

	var noches = 0;

	var longdiasMes = diasMes.length
	var i = 0;

	while (i < longdiasMes-1 && noches < 7)
	{
		dmes = fecha_cal (diasMes[i])
		if (hoy1.getDate() == dmes.getDate() && hoy1.getMonth() == dmes.getMonth() && hoy1.getYear() == dmes.getYear())
		{
			hoy1.setDate (hoy1.getDate() + 1)
			noches++
		}
		i++;
	}

	limpiaNoches ();
	for (i=0; i<noches; i++)
		document.frmDatos.noches.options[i]=new Option(i+1,i+1);
}

/******************************* Limpia el combo de noches en fines de semana ************************************/

function limpiaNoches ()
{
	var elemencombo=document.frmDatos.noches.length;
	var codigo='';
	
	for(i=0;i<elemencombo;i++)
	{
		document.frmDatos.noches.options[0]=null;
	}
}

/***** Unifica las fechas de los dias habiles del mes actual, los dias sueltos y el fin de semana siguiente *******
****** al seleccionado en el caso de que el seleccionado sea fin de semana llamando a la funcion incluyeFinde *****/

function unifica_fechas (hoy)
{
	var contdia, encontrado = 0;
	var diaMes = new Array ();
	var diasSueltos = new Array ();
	var findes = new Array ();
	diaMes = document.frmDatos.fechasmes.value.split (',');
	diasSueltos = cargaDiasSueltos (document.frmDatos.diassueltos.value);

	if (hoy.getDay() == 0 || hoy.getDay() == 6)
		findes = dameFindeSiguiente (hoy);

	var longdiaMes = diaMes.length;
	var longdiasSueltos = diasSueltos.length;

	contdia = longdiaMes - 1;

	dia = fecha_cal (diaMes[longdiaMes-2])

	for (i = 0; i < longdiasSueltos; i++)
	{
		dia2 = fecha_cal (diasSueltos[i])
		if (dia.getMonth() <= dia2.getMonth())
		{
			if (dia2.getDate() > dia.getDate() && encontrado < 8)
			{
				diaMes [contdia] = fecha_text (dia2);
				contdia++;
				encontrado++;
			}
		}
	}

	if (findes != '')
		diaMes = incluyeFinde (diaMes,findes)
			
	return diaMes;
}

/********** Recoge el dia seleccionado y si es fin de semana devuelve el fin de semana siguiente ***********/

function dameFindeSiguiente (hoy)
{
	var findes = new Array();
	var fecha_findes;

	fecha_findes = hoy;

	if (fecha_findes.getDay() == 0)
	{
		fecha_findes.setDate (fecha_findes.getDate()+6)
		findes[0] = fecha_text (fecha_findes);
		fecha_findes.setDate (fecha_findes.getDate()+1)
		findes[1] = fecha_text (fecha_findes);
		fecha_findes.setDate (fecha_findes.getDate()-7)
	}
	if (fecha_findes.getDay() == 6)
	{
		fecha_findes.setDate (fecha_findes.getDate()+7)
		findes[0] = fecha_text (fecha_findes);
		fecha_findes.setDate (fecha_findes.getDate()+1)
		findes[1] = fecha_text (fecha_findes);
		fecha_findes.setDate (fecha_findes.getDate()-8)
	}

	return findes;
}

/****** Incluye en la cadena de dias habiles el fin de semana siguiente al que ha seleccionado el cliente ********/

function incluyeFinde (diaMes,findes)
{
 	var longdiaMes = diaMes.length
	var i = 0,sabado,domingo,dia,diamas,corte, encontrado = 0,pondomingo = 0;
	var muevearray = 1;
	sabado = fecha_cal (findes[0])
	domingo = fecha_cal (findes[1])

	while (i < longdiaMes-2 && encontrado != 1)
	{
		dia = fecha_cal (diaMes[i])
		diamas = fecha_cal (diaMes[i+1])
		if (sabado.getMonth() == dia.getMonth())
		{
			if (sabado.getDate() > dia.getDate() && sabado.getDate() < diamas.getDate())
			{
				if (domingo.getMonth() != diamas.getMonth() && domingo.getDate() != diamas.getDate())
				{
					muevearray++;
					pondomingo = 1;
				}

				corte = i+1;
				for (j=longdiaMes-1; j>=corte; j--)
				{
					diaMes [j+muevearray] = diaMes [j]
				}
				diaMes[corte] = fecha_text (sabado);
				if (pondomingo == 1)
					diaMes[corte+1] = fecha_text (domingo);
				encontrado = 1;
			}
		}
		i++;	
	}
	return (diaMes)
}
