/*Javascript para colocar los calendarios en los formularios de reserva*/
var url = "http://www.cordialcanarias.com/disponibilidad.php"; //URL donde está el servidor de XMLs 
var mostraralert=false;
var DiasOcupados = new Array(); 

/**
* Función que recoge los datos que se pasa por XML
*/
function handleHttpResponse()
{
	if (http.readyState == 4)
	{
		if (http.responseText.indexOf("invalid") == -1)
		{
			//console.log(http.responseXML);
			xmlDoc=http.responseXML;
			var x=xmlDoc.getElementsByTagName('disponibilidad');

			var AnyoAnterior = 0;
			var MesAnterior = 0;

			var NumeroDias = x.length;
			for(i=0;i<NumeroDias;i++)
			{
				var dia = x.item(i).attributes[0].value;
				var mes = x.item(i).attributes[1].value;
				var anyo = x.item(i).attributes[2].value;
				var ocupado =  x.item(i).attributes[3].value;
			
				if (AnyoAnterior != anyo)
				{
					DiasOcupados[anyo] = new Array();
					AnyoAnterior = anyo;
				}

				if (MesAnterior != mes)
				{
					DiasOcupados[anyo][mes] = new Array();
					MesAnterior = mes;
				}
				
				DiasOcupados[anyo][mes][dia] = ocupado;
			}
		}
		isWorking = false;
	}
}

var isWorking = false;//Bandera para saber si el proceso ajax está trabajando (true) o ya ha parado (false).


/**
* El disparador debe llamarse cuando se activa el evento que debe generarlo.
*
* @param Mes	Mes que se va a consultar
* @param Anyo	Año que se va a consultar
*/
function Disparador(Mes, Anyo)
{
	if (!isWorking && http && document.getElementById("form_select") )
	{
		//Tomamos el indice más adecuado.
		var Establecimiento = document.getElementById("form_select").options[document.getElementById("form_select").selectedIndex].value;

		//Envio por post
		http.open("POST", url, true);
		http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		http.onreadystatechange = handleHttpResponse;
		isWorking = true;
		http.send("evento=disponibilidad_mes_xml&id_establecimiento="+escape(Establecimiento)+"&id_unidad_alojativa=-1&mes="+escape(Mes)+"&anyo="+escape(Anyo));
		//alert("Enviamos la cadena "+"evento=disponibilidad_mes_xml&id_establecimiento="+escape(Establecimiento)+"&id_unidad_alojativa=-1&mes="+escape(Mes)+"&anyo="+escape(Anyo) );
	}
}


/**
* Función básica para el manejo de llamadas AJAX
*/
function getHTTPObject()
{
	var xmlhttp;
	/*@cc_on
	@if (@_jscript_version >= 5)
	try
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		try
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (E)
		{
			xmlhttp = false;
		}
	}
	@else
		xmlhttp = false;
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest != "undefined")
	{
		try
		{
			xmlhttp = new XMLHttpRequest();
			xmlhttp.overrideMimeType("text/xml");
		}
		catch (e)
		{
			xmlhttp = false;
		}
	}
	return xmlhttp;
}
var http = getHTTPObject(); // We create the HTTP Object


/**
* Determina que estilo se aplica a cada día. En el caso de que se devuelva false el día queda desactivo.
* Los días anteriores a la fecha de hoy deben quedar desactivados. Para la fecha de inicio.
*/
function ourDateStatusFuncInicio(date, y, m, d) 
{
	//Si el día es anterior al día de hoy aparece desmarcado
	var fecha = new Date();
	var dia_actual = fecha.getDate();
	var mes_actual = fecha.getMonth();
	var anyo_actual = fecha.getFullYear();
	if (d<dia_actual && m==mes_actual)
	{
		return 'dia_no_disponible';
	}
	else
	{
		//No se pondrán seleccionar fechas porteriores a la fecha que esté seleccionado en el calendario de salida
		var FechaEntrada = document.getElementById("form_date_out").value;
		if ('' != FechaEntrada)
		{
			var VFechaEntrada = new Array();
			VFechaEntrada = FechaEntrada.split('-');
			dia_actual = VFechaEntrada[0];
			mes_actual = VFechaEntrada[1];
			anyo_actual = VFechaEntrada[2];
			FechaEntrada = anyo_actual+mes_actual+dia_actual;
			dd = d;
			mm = m+1;
			if (dd < 10)
				dd = '0'+dd;
			if (mm < 10)
				mm = '0'+mm;
			FechaActual = y+mm+dd;
			
			if (FechaActual>=FechaEntrada)
			{
				return 'dia_no_disponible';
			}		
		}
	
	
		try
		{
			//Vemos si está cargado el més antes de acceder a su contenido
			if (DiasOcupados[y][m+1][d] != 1)
			{
				return '';
			}
			else
			{
				return 'dia_no_disponible';
			}
		}
		catch(e)
		{
			return 'dia_no_disponible';
		}
	}
}

function DiaAnteriorHoy(Fecha)
{
	var Hoy = new Date();	
	//document.write("Fecha = "+Fecha.getDate()+" < Hoy "+Hoy.getDate+"<br />");
	if (Fecha.getDate() < Hoy.getDate() && Fecha.getMonth() == Hoy.getMonth())
	{
		return true;
	}	
}


/**
* Determina que estilo se aplica a cada día. En el caso de que se devuelva false el día queda desactivo.
* Los días anteriores a la fecha de hoy deben quedar desactivados. Para la fecha de inicio.
*/
function ourDateStatusFuncFin(date, y, m, d) 
{
	var Activo = 1;

	//No se pondrán seleccionar fechas anteriores a la fecha que esté seleccionado en el calendario de entrada
	var FechaEntrada = document.getElementById("form_date_in").value;
	if ('' != FechaEntrada)
	{
		var VFechaEntrada = new Array();
		VFechaEntrada = FechaEntrada.split('-');
		dia_actual = VFechaEntrada[0];
		mes_actual = VFechaEntrada[1];
		anyo_actual = VFechaEntrada[2];
		FechaEntrada = anyo_actual+mes_actual+dia_actual;
		dd = d;
		mm = m+1;
		if (dd < 10)
			dd = '0'+dd;
		if (mm < 10)
			mm = '0'+mm;
		FechaActual = y+mm+dd;
		
		if (FechaActual<=FechaEntrada)
		{
			return 'dia_no_disponible';
		}		
	}
	
	
	try
	{
		//Vemos si está cargado el més antes de acceder a su contenido
		if (DiasOcupados[y][m+1][d] == 1 || DiaAnteriorHoy(date))
		{
			Activo = 0;
		}
	}
	catch(e)
	{
		Activo = 0;
	}
	
	
	if (1 == Activo)
	{
		return '';
	}
	else
	{
		return 'dia_no_disponible';
	}
}

/**
* Función de manejo de fechas para el calendario de inicio
*
* @param cal	Objeto de tipo calendario referido al objeto que invoca el metodo
* @param date	Fecha seleccionada por el objeto
*/
function ControlNavegacionInicio(cal, date)
{
	//Coge una fecha
	document.getElementById("form_date_in").value = date;

	if (!cal.dateClicked) 
	{
		//Vemos cual es la fecha actual seleccionada
		var VFechaEntrada = new Array();
		VFechaEntrada = date.split('-');
		mes_actual = VFechaEntrada[1];
		anyo_actual = VFechaEntrada[2];
		FechaEntrada = anyo_actual+mes_actual;
		
		//Calculamos la fecha de hoy
		FechaHoy = new Date();
		mes_hoy = FechaHoy.getMonth() + 1;
		anyo_hoy = FechaHoy.getFullYear();
		if (mes_hoy < 10 )
			mes_hoy = "0"+mes_hoy;
		FechaHoy = anyo_hoy+mes_hoy;
		
		//Si el mes seleccionado en menor que el mes actual no lo dejamos pasar, lo dejamos en el mes actual.
		if (FechaEntrada<FechaHoy)
		{
			cal.setDate(new Date());
		}
		
		/*
		//Calculamos la fecha de dentro de 6 meses
		FechaHoy = new Date();
		mes_hoy = FechaHoy.getMonth() + 5;
		anyo_hoy = FechaHoy.getFullYear();
		if (mes_hoy > 12)
		{
			mes_hoy = mes_hoy - 12;
			++anyo_hoy;
		}
		if (mes_hoy < 10 )
			mes_hoy = "0"+mes_hoy;
		FechaHoy = anyo_hoy+mes_hoy;
		
		//Si el mes seleccionado en menor que el mes actual no lo dejamos pasar, lo dejamos en el mes actual.
		if (FechaEntrada>FechaHoy)
		{
			cal.setDate(new Date(anyo_hoy,mes_hoy,1));
		}
		*/
	}
	else
	{
		//En el caso de que se pueda vamos a calcular el número de noches que hay entre las dos fechas.
		if ('' != document.getElementById("form_date_out").value )
		{
			var dia_entrada = document.getElementById("form_date_in").value;
			var dia_salida  = document.getElementById("form_date_out").value;
			
			var VFechaEntrada = new Array();
			VFechaEntrada = dia_entrada.split('-');
			var dia_entrada = VFechaEntrada[0];
			var mes_entrada = VFechaEntrada[1];
			var anyo_entrada = VFechaEntrada[2];
			
			var VFechaSalida = new Array();
			VFechaSalida = dia_salida.split('-');
			var dia_salida = VFechaSalida[0];
			var mes_salida = VFechaSalida[1];
			var anyo_salida = VFechaSalida[2];
			
			
			
			var fecha_entrada = new Date(anyo_entrada,mes_entrada-1,dia_entrada);
			var fecha_salida  = new Date(anyo_salida,mes_salida-1,dia_salida);

			//Lo convertimos a días.
			var dias = (fecha_salida-fecha_entrada)/1000; //pasamos a segundos
			dias = dias / 60; //pasamos a minutos
			dias = dias / 60; //pasamos a horas
			dias = dias / 24; //pasamos a dias
			dias = Math.abs(Math.round(dias));
			
			document.getElementById("form_nights").value = dias;
		}
		else
		{
			document.getElementById("form_date_out").value = document.getElementById("form_date_in").value;
		}
		
		//Ocultamos el calendario
		cal.hide();
	}
}


/**
* Función de manejo de fechas para el calendario de salida
*
* @param cal	Objeto de tipo calendario referido al objeto que invoca el metodo
* @param date	Fecha seleccionada por el objeto
*/
function ControlNavegacionFin(cal, date)
{
	//Coge una fecha
	document.getElementById("form_date_out").value = date;

	if (!cal.dateClicked) 
	{
		//Vemos cual es la fecha actual seleccionada
		var VFechaEntrada = new Array();
		VFechaEntrada = date.split('-');
		mes_actual = VFechaEntrada[1];
		anyo_actual = VFechaEntrada[2];
		FechaEntrada = anyo_actual+mes_actual;
		
		//Calculamos la fecha de hoy
		FechaHoy = new Date();
		mes_hoy = FechaHoy.getMonth() + 1;
		anyo_hoy = FechaHoy.getFullYear();
		if (mes_hoy < 10 )
			mes_hoy = "0"+mes_hoy;
		FechaHoy = anyo_hoy+mes_hoy;
		
		//Si el mes seleccionado en menor que el mes actual no lo dejamos pasar, lo dejamos en el mes actual.
		if (FechaEntrada<FechaHoy)
		{
			cal.setDate(new Date());
		}
		
		/*
		//Calculamos la fecha de dentro de 6 meses
		FechaHoy = new Date();
		mes_hoy = FechaHoy.getMonth() + 5;
		anyo_hoy = FechaHoy.getFullYear();
		if (mes_hoy > 12)
		{
			mes_hoy = mes_hoy - 12;
			++anyo_hoy;
		}
		if (mes_hoy < 10 )
			mes_hoy = "0"+mes_hoy;
		FechaHoy = anyo_hoy+mes_hoy;
		
		//Si el mes seleccionado en menor que el mes actual no lo dejamos pasar, lo dejamos en el mes actual.
		if (FechaEntrada>FechaHoy)
		{
			cal.setDate(new Date(anyo_hoy,mes_hoy,1));
		}
		*/		
	}
	else
	{
		//En el caso de que se pueda vamos a calcular el número de noches que hay entre las dos fechas.
		if ('' != document.getElementById("form_date_in").value )
		{
			var dia_entrada = document.getElementById("form_date_in").value;
			var dia_salida  = document.getElementById("form_date_out").value;
			
			var VFechaEntrada = new Array();
			VFechaEntrada = dia_entrada.split('-');
			var dia_entrada = VFechaEntrada[0];
			var mes_entrada = VFechaEntrada[1];
			var anyo_entrada = VFechaEntrada[2];
			
			var VFechaSalida = new Array();
			VFechaSalida = dia_salida.split('-');
			var dia_salida = VFechaSalida[0];
			var mes_salida = VFechaSalida[1];
			var anyo_salida = VFechaSalida[2];
			
			
			
			var fecha_entrada = new Date(anyo_entrada,mes_entrada-1,dia_entrada);
			var fecha_salida  = new Date(anyo_salida,mes_salida-1,dia_salida);

			//Lo convertimos a días.
			var dias = (fecha_salida-fecha_entrada)/1000; //pasamos a segundos
			dias = dias / 60; //pasamos a minutos
			dias = dias / 60; //pasamos a horas
			dias = dias / 24; //pasamos a dias
			dias = Math.abs(Math.round(dias));
			
			document.getElementById("form_nights").value = dias;
		}
		else
		{
			document.getElementById("form_date_in").value = document.getElementById("form_date_out").value;
		}		
		
		//Ocultamos el calendario
		cal.hide();
	}
}



/**
* Ordena la carga de fechas del calendario
*/
function CargarFechasCalendario()
{
	//Disparamos sobre la marcha la carga de los calendarios de los próximos meses.
	var date = new Date();
	Disparador((date.getMonth()+1), date.getFullYear());
}


/**
* Hay que comprobar el formulario antes de darlo por bueno. Para ello comprobamos que se han puesto las dos fechas.
*/
function ComprobarFormulario()
{
	//Variable que indica si todo está correcto. Por defecto lo está.
	var Correcto = true;
	
	//Cacturamos los valores de las fechas
	var fecha_entrada = document.getElementById('form_date_in').value;
	var fecha_salida = document.getElementById('form_date_out').value;
	
	//Pasamos las fechas a un formato que se pueda comparar
	var VFechaEntrada = new Array();
	VFechaEntrada = fecha_entrada.split('-');
	var DiaEntrada = VFechaEntrada[0];
	var MesEntrada = VFechaEntrada[1];
	var AnyoEntrada = VFechaEntrada[2];
	
	var VFechaSalida = new Array();
	VFechaSalida = fecha_salida.split('-');
	var DiaSalida = VFechaSalida[0];
	var MesSalida = VFechaSalida[1];
	var AnyoSalida = VFechaSalida[2];
	
	var CFechaEntrada = VFechaEntrada[2]+VFechaEntrada[1]+VFechaEntrada[0];
	var CFechaSalida  = VFechaSalida[2]+VFechaSalida[1]+VFechaSalida[0];
	
	var Hoy = new Date() 
	var HoyAnyo = String(Hoy.getFullYear());
	var HoyMes = Hoy.getMonth()+1;
	if (10 > HoyMes)
	{
		HoyMes = "0"+HoyMes;
	}
	else
	{
		HoyMes = String(HoyMes);
	}
	var HoyDia = Hoy.getDate();
	if (10 > HoyDia)
	{
		HoyDia = "0"+HoyDia;
	}
	else
	{
		HoyDia = String(HoyDia);
	}
	
	CHoy = HoyAnyo+HoyMes+HoyDia;
	
	
	//comprobamos que se escribe la fecha de entrada
	if (fecha_entrada == '')
	{
		document.getElementById('error_fecha_entrada').className='texto_error_visible';
		Correcto = false;
	}
	else
	{
		document.getElementById('error_fecha_entrada').className='texto_error_invisible';
	}

	//comprobamos que se escribe la fecha de salida
	if (fecha_salida == '')
	{
		document.getElementById('error_fecha_salida').className='texto_error_visible';
		Correcto = false;
	}
	else
	{
		document.getElementById('error_fecha_salida').className='texto_error_invisible';
	}

	//La fecha de entrada no de debe se anterior al dia de hoy
	if (CFechaEntrada < CHoy)
	{
		document.getElementById('error_fecha_entrada_anterior_hoy').className='texto_error_visible';
		Correcto = false;
	}
	else
	{
		document.getElementById('error_fecha_entrada_anterior_hoy').className='texto_error_invisible';
	}
	
	//Comprobamos que las fecha de entrada es anterior a la fecha de salida
	if (fecha_entrada != '' && fecha_salida != '')
	{
		if(CFechaSalida <= CFechaEntrada)
		{
			document.getElementById('error_fecha').className='texto_error_visible';
			Correcto = false;
		}
		else
		{
			document.getElementById('error_fecha').className='texto_error_invisible';
		}
	}
	else
	{
		document.getElementById('error_fecha').className='texto_error_invisible';
	}
	
	/*Comprobamos que no hay dias ocupados entre las dos fecha elegidas, partimos de la fecha de entrada
	y vamos recorriendo los dias hasta llegar a la fecha de salida.*/
	var DateInicio=new Date(AnyoEntrada,MesEntrada-1,DiaEntrada);
	var DateFinal =new Date(AnyoSalida, MesSalida-1, DiaSalida );
	var DetectadoCierre = false;
	
	
	
	while(DateInicio < DateFinal && !DetectadoCierre)
	{
		DateInicio.setDate(DateInicio.getDate()+1);
		if (DiasOcupados[DateInicio.getFullYear()][DateInicio.getMonth()+1][DateInicio.getDate()] == 1)
		{
			document.getElementById('error_cierre').className='texto_error_visible';
			Correcto = false;
			DetectadoCierre = true;
		}
		
	}
	
	if (!DetectadoCierre)
	{
		document.getElementById('error_cierre').className='texto_error_invisible';	
	}


	if (true == Correcto)
	{
		document.getElementById('error').className='caja_error_invisible';
		return true;
	}
	else
	{
		document.getElementById('error').className='caja_error_visible';
		return false;
	}
}



/**
* Construye los calendarios para las entradas y salidas.
*/
function construir_calendario_reserva()
{
	if( !document.getElementById("form_select") ) return;
	
	var Hoy = new Date();
	var Manyana = new Date();
	Manyana.setTime(Hoy.getTime() + (60*60*24*1000));
	var Quincena = new Date();
	Quincena.setTime(Hoy.getTime() + (60*60*24*1000*15));
	
	Calendar.setup(
						{
							inputField : "form_date_in", // ID of the input field
							ifFormat : "%d-%m-%Y", // the date format
							button : "fecha_entrada", // ID of the button
							dateStatusFunc : ourDateStatusFuncInicio,
							onSelect: ControlNavegacionInicio
						}
					);
					
	Calendar.setup(
						{
							inputField : "form_date_out", // ID of the input field
							ifFormat : "%d-%m-%Y", // the date format
							button : "fecha_salida", // ID of the button
							dateStatusFunc : ourDateStatusFuncFin,
							onSelect: ControlNavegacionFin
						}
					);
	
	//Cargamos las fechas del calendario por defecto
	CargarFechasCalendario();
	
	//Cargemos el evento onchange para que carge los calendarios cuando se cambie de establecimiento
	document.getElementById("form_select").onchange = CargarFechasCalendario;
	
	//Cargamos fechas por defecto en los calendarios
	/*document.getElementById("form_date_in").value = '';
	document.getElementById("form_date_out").value = '';*/	

	//Antes de que se envien las fechas deben comprobarse para que los datos pasados sean correctos.
	document.getElementById("form_reserva").onsubmit = ComprobarFormulario;
}


/**
* Construye los calendarios para las entradas y salidas.
*/
function construir_calendario_reserva_agentes()
{
	var Hoy = new Date();
	var Manyana = new Date();
	Manyana.setTime(Hoy.getTime() + (60*60*24*1000));
	var Quincena = new Date();
	Quincena.setTime(Hoy.getTime() + (60*60*24*1000*15));
	
	Calendar.setup(
						{
							inputField : "formulario_fecha_entrada", // ID of the input field
							ifFormat : "%d-%m-%Y", // the date format
							button : "boton_fecha_entrada", // ID of the button
							dateStatusFunc : ourDateStatusFuncInicio,
							onSelect: ControlNavegacionInicio
						}
					);
					
	Calendar.setup(
						{
							inputField : "formulario_fecha_salida", // ID of the input field
							ifFormat : "%d-%m-%Y", // the date format
							button : "boton_fecha_salida", // ID of the button
							dateStatusFunc : ourDateStatusFuncFin,
							onSelect: ControlNavegacionFin
						}
					);
	
	//Cargamos las fechas del calendario por defecto
	CargarFechasCalendario();
	
	//Cargemos el evento onchange para que carge los calendarios cuando se cambie de establecimiento
	//document.getElementById("form_select").onchange = CargarFechasCalendario;
	
	//Cargamos fechas por defecto en los calendarios
	/*document.getElementById("form_date_in").value = '';
	document.getElementById("form_date_out").value = '';*/	

	//Antes de que se envien las fechas deben comprobarse para que los datos pasados sean correctos.
	//document.getElementById("form_reserva").onsubmit = ComprobarFormulario;
}