var xmlHttp;
var eleccion;

function createXMLHttpRequest() {
	if (window.ActiveXObject) {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	} else if (window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	}
}

/*
 * Función genérica para manejar solicitudes asincrónicas.
 * @param elecc: Es la elección del usuario. Un valor de entrada que se copia a una variable global
 * 		para que esté disponible en otras funciones.
 * @param (String) funcion: Es la función a invocar del lado del cliente.   
 * @param (String) url: Es la URL que realiazrá el procesamiento del lado del servidor.
 */
function handleRequest(elecc, funcion, url) {
	var opcion;
	eleccion = elecc;

	createXMLHttpRequest();

	xmlHttp.onreadystatechange = function() { 
		if (xmlHttp.readyState == 4) {
			if (xmlHttp.status == 200) {
				eval(funcion+"()");
			}
		}
	}

	if ( null != document.getElementById(elecc) ) {
		opcion = document.getElementById(elecc).value;
		xmlHttp.open("GET", url + '&' + elecc + '=' + opcion, true);
	} else {
		xmlHttp.open("GET", url, true);
	}
	

	xmlHttp.send(null);
}

/*
 * Llena un combo encadenado de DESTINOS.
 * Utiliza una variable global para procesar la elección del usuario.
 */
function fillDestinos() {
	if ( "pais" == eleccion ) {
		if ( -1 != document.getElementById("pais").value ) {
			document.getElementById("destino_provincia").innerHTML = xmlHttp.responseText;
		} else {
			document.getElementById("destino_provincia").innerHTML = "";
		}		
		if ( null != document.getElementById("destino_localidad") ) {
			document.getElementById("destino_localidad").innerHTML = "";
		}
	} else if ( "provincia" == eleccion ) {
		if ( null != document.getElementById("destino_localidad") ) {
			if ( -1 != document.getElementById("provincia").value ) {
				document.getElementById("destino_localidad").innerHTML = xmlHttp.responseText;
			} else {
				document.getElementById("destino_localidad").innerHTML = "";
			}
		}
	}
}

/*
 * Llena el combo de ALOJAMIENTOS.
 * Utiliza una variable global para procesar la elección del usuario.
 */
function fillAlojamientos() {
	if ( "filtro_provincia" == eleccion ) {
		if ( null != document.getElementById("alojamiento_localidad") ) {
			document.getElementById("alojamiento_localidad").innerHTML = xmlHttp.responseText;
		}
	}
}


/*
 * Llena un combo encadenado de DISTANCIAS.
 * Utiliza una variable global para procesar la elección del usuario.
 */
function fillDistancias() {
	if ( "distancia_pais" == eleccion ) {
		if ( -1 != document.getElementById("distancia_pais").value ) {
			document.getElementById("div_distancia_provincia").innerHTML = xmlHttp.responseText;
		} else {
			document.getElementById("div_distancia_provincia").innerHTML = "";
		}		
		if ( null != document.getElementById("div_distancia_ciudad") ) {
			document.getElementById("div_distancia_ciudad").innerHTML = "";
		}
		if ( null != document.getElementById("div_distancia_calcular") ) {
			document.getElementById("div_distancia_calcular").innerHTML = "";
		}
	} else if ( "distancia_provincia" == eleccion ) {
		if ( null != document.getElementById("div_distancia_ciudad") ) {
			if ( -1 != document.getElementById("distancia_provincia").value ) {
				document.getElementById("div_distancia_ciudad").innerHTML = xmlHttp.responseText;
			} else {
				document.getElementById("div_distancia_ciudad").innerHTML = "";
				if ( null != document.getElementById("div_distancia_calcular") ) {
					document.getElementById("div_distancia_calcular").innerHTML = "";
				}
			}
		}
	} else if ( "distancia_ciudad" == eleccion ) {
		if ( -1 != document.getElementById("distancia_ciudad").value ) {
			document.getElementById("div_distancia_calcular").innerHTML = xmlHttp.responseText;
		} else {
			document.getElementById("div_distancia_calcular").innerHTML = "";
		}
	}
}

function fillDistanciasCalculo() {
	if ( null != document.getElementById("div_distancia_salida") ) {
			document.getElementById("div_distancia_salida").innerHTML = xmlHttp.responseText;
	}
}
