// FUNCIONES CALENDARIO --------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------

function getDaysInMonth(month,year)
{
	var days;
	if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) days=31;
		else if(month==4 || month==6 || month==9 || month==11) days=30;
			else if(month==2)
			{
				if (isLeapYear(year)) days=29;
					else days=28;
			}
	return (days);
}

function isLeapYear (Year)
{
	if(((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0))
	{
		return (true);
	}else
		{
			return (false);
		}
}

function DisplayMonthDays(f_ini_m, f_ini_a, where)
{
	var days;

	// C
	if ((f_ini_m.id == "bus_mes_fin") && (f_ini_m.value < document.getElementById("bus_mes_ini").value))
	{
		if (document.getElementById("fin") != "none")
		{
			var f = document.getElementById("fin").value.split("/");
			document.getElementById("bus_mes_fin").value = f[1];
		}

	}
	else
	{
		// Obtenemos maximo de dias
		days = getDaysInMonth(f_ini_m.selectedIndex+1, f_ini_a.value);

		//frms=eval("document.buscar_hoteles."+where);
		frms = document.getElementById("bus_" + where);

		//Guardamos el dia seleccionado para seleccionarlo si se puede al recargar el select
		old_selected = frms.selectedIndex;

		//Miramos que no sea negativo
		if(old_selected < 0) old_selected = 0;

		//Construimos la cadena de options a parsear en el combo
		var option = "";
		var n;
		frms.length=0;
		for(n=1;n<=days;n++)
		{
			var no = new Option();
			if (n < 10) n = "0" + n;
			no.value = n;
			no.text = n;
			frms[n-1] = no;
		}

		//Seleccionamos si podemos el indice anterior.
		largo = frms.length;
		if(largo > old_selected)
		{
			//Se puede seleccionar
			frms[old_selected].selected=true;
		}else
		{
			//seleccionamos el ultimo ya que no podemos seleccionar el anterior por ser mas grande que el mayor actual.
			frms[largo-1].selected=true;
		}
	}

}



/**
 * Calcula el total de noches entre dos fechas. Las variables reciben el ID del elemento INPUT que contiene la fecha.
 * El formato debe ser dd/mm/aaaa
 *
 * @param {} fecha_ini
 * @param {} fecha_final
 */
function calcula_noches(fecha_ini, fecha_final)
{
	fecha_ini = document.getElementById(fecha_ini).value
	fecha_ini = fecha_ini.split('/');
	cadena = fecha_ini[2] + "/" + fecha_ini[1] + "/" + fecha_ini[0];
	var fecha_ini = new Date(cadena);

	fecha_fin = document.getElementById(fecha_final).value
	fecha_fin = fecha_fin.split('/');
	cadena = fecha_fin[2] + "/" + fecha_fin[1] + "/" + fecha_fin[0];
	var fecha_fin = new Date(cadena);

	diferencia = new Date();
	if (fecha_fin.getTime() < fecha_ini.getTime()) fecha_fin.setTime(fecha_ini.getTime());
	diferencia.setTime(fecha_fin.getTime()-fecha_ini.getTime());

	var dif = Math.round(diferencia.getTime()/86400000);

	return dif;
}

function actualiza_noches()
{
	fecha_ini = document.getElementById('ini').value
	fecha_ini = fecha_ini.split('/');
	cadena = fecha_ini[2] + "/" + fecha_ini[1] + "/" + fecha_ini[0];
	var fecha_ini = new Date(cadena);

	fecha_fin = document.getElementById('fin').value
	fecha_fin = fecha_fin.split('/');
	cadena = fecha_fin[2] + "/" + fecha_fin[1] + "/" + fecha_fin[0];
	var fecha_fin = new Date(cadena);

	diferencia = new Date();
	if (fecha_fin.getTime() < fecha_ini.getTime())
		fecha_fin.setTime(fecha_ini.getTime());
	diferencia.setTime(fecha_fin.getTime()-fecha_ini.getTime());

	max_noches = document.getElementById('max_noches').value;
	var dif = Math.round(diferencia.getTime()/86400000);

	if (max_noches > dif)
	{
	  if (parseFloat(dif) >= 1)
		document.getElementById('noches').selectedIndex = parseFloat(dif-1);
	  else
  	    document.getElementById('noches').selectedIndex = 0;
	}else
	{
		document.getElementById('noches').selectedIndex = parseFloat(max_noches) - 1;
	}

	if (document.getElementById('noches').selectedIndex == "-1")
		document.getElementById('noches').selectedIndex = 0;

}

function actualiza_f_fin()
{
	fecha_ini = document.getElementById('ini').value
	fecha_ini = fecha_ini.split('/');
	cadena = fecha_ini[2] + "/" + fecha_ini[1] + "/" + fecha_ini[0];
	var fecha_ini = new Date(cadena);

	var noches = document.getElementById('noches').value;
	var cont = 1;
	while ((noches >= cont) && (cont<365) )
	{
		fecha_ini.setTime(fecha_ini.getTime() + (86400000) );
		if(fecha_ini.getHours() == 1 ) fecha_ini.setTime(fecha_ini.getTime() - 3600000 );
		else if( fecha_ini.getHours() == 23 ) fecha_ini.setTime(fecha_ini.getTime() + 3600000 );

		cont++;
	}


	dia = fecha_ini.getDate();
	mes1 = fecha_ini.getMonth()+1;
	any = fecha_ini.getFullYear();
	avui = new Date();
	any_index = any - avui.getFullYear();
	mes_index = mes1 - 1;
	dia_index = dia-1;

	any_al_combo = false;
	for (i=0; document.getElementById("bus_any_fin").length > i; i++ )
	{
		if (document.getElementById("bus_any_fin").options[i].value == any) any_al_combo = true;
	}

	if (any_al_combo)
	{
		try
		{
			document.getElementById("bus_dia_fin").selectedIndex = dia_index;
			document.getElementById("bus_mes_fin").selectedIndex = mes_index;
			document.getElementById("bus_any_fin").selectedIndex = any_index;
		}
		catch (exception) {}
		
		document.getElementById("fin").value = dia+'/'+mes1+'/'+any;
	}

}

function zerodelante(numero)
{
	if (numero.toString().length == 1) {
			return '0' + numero;
	} else return numero;

}

function actualiza_f_fin2()
{
	fecha_ini = document.getElementById('ini').value
	fecha_ini = fecha_ini.split('/');
	cadena = fecha_ini[2] + "/" + fecha_ini[1] + "/" + fecha_ini[0];
	var fecha_ini = new Date(cadena);

	var noches = document.getElementById('noches').value;
	var cont = 1;
	while ((noches >= cont) && (cont<365) )
	{
		fecha_ini.setTime(fecha_ini.getTime() + (86400000) );
		if(fecha_ini.getHours() == 1 ) fecha_ini.setTime(fecha_ini.getTime() - 3600000 );
		else if( fecha_ini.getHours() == 23 ) fecha_ini.setTime(fecha_ini.getTime() + 3600000 );

		cont++;
	}


	dia = fecha_ini.getDate();
	mes1 = fecha_ini.getMonth()+1;
	any = fecha_ini.getFullYear();
	avui = new Date();
	any_index = any - avui.getFullYear();
	mes_index = mes1 - 1;
	dia_index = dia-1;

	//document.getElementById("bus_dia_fin").selectedIndex = dia_index;
	//document.getElementById("bus_mes_fin").selectedIndex = mes_index;
	//document.getElementById("bus_any_fin").selectedIndex = any_index;
	document.getElementById("fin").value = zerodelante(dia) +'/'+zerodelante(mes1)+'/'+any;

}

function posa_data(cadena)
{

	any=document.getElementById('bus_any_' + cadena).value;
	mes1=document.getElementById('bus_mes_' + cadena).value;
	dia=document.getElementById('bus_dia_' + cadena).value;

	document.getElementById(cadena).value = dia+"/"+mes1+"/"+any;
}

function posavalors(cal) {

	var date = cal.date;
	cadena = cal.camp;

	document.getElementById('bus_any_' + cadena).value = cal.any;
	document.getElementById('bus_mes_' + cadena).value = cal.mes;
	document.getElementById('bus_dia_' + cadena).value = cal.dia;

	actualiza_noches();
	actualiza_f_fin();
}

function posavalors2(cal) {

	var date = cal.date;
	cadena = cal.camp;

	document.getElementById('bus_any_' + cadena).value = cal.any;
	document.getElementById('bus_mes_' + cadena).value = cal.mes;
	document.getElementById('bus_dia_' + cadena).value = cal.dia;

	actualiza_noches();
	actualiza_f_fin2();
}

function busca(submit, fecha)
{
	error = false;

	f = document.buscar_hoteles;
	for (i=0; f.elements.length > i; i++ )
	{
		str = f.elements[i].name;
		if (str.indexOf("obligatoria[") > -1 )
		{
			if (document.getElementById("carac_" + f.elements[i].value).value == 0) error = true;
		}
		
		if (str.indexOf("carac_") > -1 )
		{
			arr_carac = f.elements[i].name.split('_');
			document.getElementById("carac_"+arr_carac[1]+"_2").value = f.elements[i].value;
		}
		
	}

	if (document.getElementById("fecha"))
	{
		if (fecha) document.getElementById("fecha").value = "1";
		else document.getElementById("fecha").value = "0";
	}

	if (error)
	{
		if (!document.getElementById("error_obligatoria")) alert('Selecciona los campos obligatorios');
		else alert(document.getElementById("error_obligatoria").value);
	}
	else
	{
		if (submit) document.buscar_hoteles.submit();
	}

	return error;
}

function busca2(submit)
{
document.buscar_hoteles2.submit();

}

function reserva_hotel(link_reservas) {

	height = 600;
	width = 800;
	win=window.open(link_reservas,"","width="+width+",height="+height+",top=100,left=100,scrollbars=yes,resizable=yes");
	win.focus();
}

// FUNCIONES FILTRO XML --------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------------------

// global flag
var isIE = false;

// global request and XML document objects
var req;

// retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function loadXMLDoc(url) {
    // branch for native XMLHttpRequest object

    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

// handle onreadystatechange event of req object
function processReqChange() {
	// only if req shows "loaded"
//	alert(req.readyState);

    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            buildTopicList();
         } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
         }
    }
}

// invoked by "Category" select element change;
// loads chosen XML document, clears Topics select
// element, loads new items into Topics select element
function loadCar(evt, url, sid, idioma, offline) {
	// equalize W3C/IE event models to get event object

	evt = (evt) ? evt : ((window.event) ? window.event : null);
	if (evt) {
		// equalize W3C/IE models to get event target reference
		elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);

//		alert(document.getElementById("dependencias").value);

		if (elem) {
			try {
				//test = elem.id.split("_");
				//miId = test[1];
				//alert(miId);
				caracts = document.getElementById("dependencias").value;
				var dep = caracts.split("@");
				var caracteristicas = '';

				if (offline == 1) var_offline = 1;
				else var_offline = 0;
				/*
				// vamos a mirar donde empezamos a contar
				var empieza = 0;
				for (cont = 0; cont < dep.length; cont++)
				{
					//alert(dep[cont] + " / " + miId);
					if (dep[cont] == miId)
					{
						empieza = cont + 1;
						//alert ("!" + empieza);
					}
				}
				*/

				for (cont = 0; cont < dep.length; cont++) {
//					alert(cont);
					if (offline == 1)
					{
						if (document.getElementById("carac2_" + dep[cont]).value != 0) {
							caracteristicas += "caracteristicas[" + dep[cont] + "]="
							caracteristicas += document.getElementById("carac2_" + dep[cont]).value + "&"
						}
					}
					else
					{
						if (document.getElementById("carac_" + dep[cont]).value != 0) {
							caracteristicas += "caracteristicas[" + dep[cont] + "]="
							caracteristicas += document.getElementById("carac_" + dep[cont]).value + "&"
						}
					}
				}
				var filtro = '';
				if (document.getElementById('filtro'))
					filtro = document.getElementById('filtro').value;
//				document.write(url + "?action=xml_carac_2&sid=" + sid + "&idioma=" + idioma + "&" + caracteristicas + "filtro="+filtro+"&offline=" + var_offline);
//alert(url + "?action=xml_carac_2&sid=" + sid + "&idioma=" + idioma + "&" + caracteristicas + "filtro="+filtro+"&offline=" + var_offline);

				caracteristicas = caracteristicas.replace(String.fromCharCode(209),"N");
				loadXMLDoc(url + "?action=xml_carac_2&sid=" + sid + "&idioma=" + idioma + "&" + caracteristicas + "filtro="+filtro+"&offline=" + var_offline);

			}
			catch(e) {
				if (idioma == 'ES') {
					var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Error desconocido");
					alert("Error al obtener el XML:\n" + msg);
				} else if (idioma == 'CA') {
					var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Error desconnegut");
					alert("Error amb l'XML:\n" + msg);
				} else {
					var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
					alert("Unable to get XML data:\n" + msg);
				}
				return;
			}
		}
	}
}

// fill Topics select list with items from
// the current XML document
function buildTopicList()
{
	if (req.responseXML.getElementsByTagName('buscador')[0].getAttribute('id') == 'xml_caract_2')
	{
		var offline = req.responseXML.getElementsByTagName('buscador')[0].getAttribute('offline');
		var caracteristicas = req.responseXML.getElementsByTagName('caract');

		var car_doc;
		var cont_reemplena;
		var ant_caract;

		for (var i = 0; i < caracteristicas.length; i++)
		{
			if (offline == 1)
				car_doc = document.getElementById('carac2_'+caracteristicas[i].getAttribute('id'));
			else
				car_doc = document.getElementById('carac_'+caracteristicas[i].getAttribute('id'));

			if (car_doc != null)
			{
				ant_caract = car_doc.options[car_doc.selectedIndex].value;

				cont_reemplena = 0;

				for (var j = car_doc.length; j > 0; j--)
				{
						if (car_doc.options[j-1].value != "0")
								car_doc.remove(j);
						else
								cont_reemplena++;
				}

				var opcions = caracteristicas[i].getElementsByTagName('opcio');

				for (var j = 0; j < opcions.length; j++)
				{
					valores = opcions[j].firstChild.nodeValue;

					car_doc.options[cont_reemplena] = new Option(valores, opcions[j].getAttribute('id'));

					if (opcions[j].getAttribute('id') == ant_caract)
					{
					  	car_doc.options[cont_reemplena].selected = 'selected';
					}


					cont_reemplena++;
				}

			}

		}

			//pau 23gener2008. Afegit per tal de que es generi el combobox amb el nom dels hotels en funci� dels altres combo's//
			var hoteles_filtrad = req.responseXML.getElementsByTagName('hot_list')[0];

			var hot_doc;
			cont_reemplena = 0;

			hay_lista_hoteles = false;

			if (offline == 1)
			{
				if (document.getElementById('llista_hotels2'))
				{
					hay_lista_hoteles = true;
					hot_doc = document.getElementById('llista_hotels2');
				}
			}
			else
			{
				if (document.getElementById('llista_hotels'))
				{
					hay_lista_hoteles = true;
					hot_doc = document.getElementById('llista_hotels');
				}
			}

			if (hay_lista_hoteles)
			{
				ant_caract = hot_doc.options[hot_doc.selectedIndex].value;
				for (var j = hot_doc.length; j > 0; j--)
					{
					if (hot_doc.options[j-1].value != "0")
						hot_doc.remove(j);
					else
						cont_reemplena++;
					}

				var opcions_hot = hoteles_filtrad.getElementsByTagName('opcion');

				for (var j = 0; j < opcions_hot.length; j++)
				{
					valores = opcions_hot[j].firstChild.nodeValue;

					hot_doc.options[cont_reemplena] = new Option(valores, opcions_hot[j].getAttribute('id'));
					if (opcions_hot[j].getAttribute('id') == ant_caract)
					{
						if (car_doc != null)
						{
							if (car_doc.options[cont_reemplena] != null)
							{
								car_doc.options[cont_reemplena].selected = 'selected';
							}
						}

					}
					cont_reemplena++;
				}
			}
			//eso es todo amiguitos ;)
	}
	else
	{
		if (document.getElementById("carac_" + id_caracteristica))
		{
			var cont_reemplena = 0;
			var car_doc = document.getElementById("carac_" + id_caracteristica);
			var ant_caract = car_doc.options[car_doc.selectedIndex].value;

			for (var cont = car_doc.length; cont > 0; cont--)
			{
					if (car_doc.options[cont-1].value != "0")
							car_doc.remove(cont);
					else
							cont_reemplena++;
			}

			var strHTML = "";
			var items = req.responseXML.getElementsByTagName("opcion");
			// loop through <item> elements, and add each nested
			// <title> element to Topics select element
//              alert(cont_reemplena);
			for (var i = 0; i < items.length; i++)
			{
				valores = items[i].childNodes[0].nodeValue.split("@");
				car_doc.options[cont_reemplena] = new Option(valores[1], valores[0]);
				if (valores[0] == ant_caract)

					car_doc.options[cont_reemplena].selected = 'selected';
				cont_reemplena++;
			}
		}
	}
	// clear detail display
	// loop through <item> elements, and add each nested
	// <title> element to Topics select element
}


function display_search_rows(n_hab, max_hab){

	var cont, cont2;

	for (cont=1; cont <= n_hab; cont++)
	{
		document.getElementById("search_row_"+cont).style.display='';
	}


	for (cont2 = cont ; cont2 <= max_hab ; cont2++)
	{
		document.getElementById("search_row_"+cont2).style.display='none';
	}
}

function display_search_rows_2(n_hab, max_hab){

	var cont, cont2;

	for (cont=1; cont <= n_hab; cont++)
	{
		document.getElementById("search_row_2_"+cont).style.display='';
	}


	for (cont2 = cont ; cont2 <= max_hab ; cont2++)
	{
		document.getElementById("search_row_2_"+cont2).style.display='none';
	}
}

function vacio(q){
  for (i = 0; i < q.length; i++) {
	  if (q.charAt(i) != " ") {
		  return true
	  }
  }
  return false
}

function longitud_sin_espacios(q){
  var long = 0;
  for (i = 0; i < q.length; i++) {
	  if (q.charAt(i) != " ")
		  long++;
  }
  return long;
}