/*
 * Returns a function that waits for the specified XMLHttpRequest
 * to complete, then passes its XML response
 * to the given handler function.
 * req - The XMLHttpRequest whose state is changing
 * responseXmlHandler - Function to pass the XML response to
 */
function getReadyStateHandler(req, responseXmlHandler, idSelect, idSelected, QuitarOther) {
	return function () {
		if (req.readyState == 4) {
			if (req.status == 200) {
				try {
					responseXmlHandler(req.responseXML, idSelect, idSelected, QuitarOther);
				} catch (e3) {  }
			} else {
				//alert("HTTP error: " + req.status);
			}
		}
	}
}
/*
 * Obtiene los paises
 */
function getCountries(idSelect, idSelected) {
	var req = newXMLHttpRequest();
	var handlerFunction = getReadyStateHandler(req,showCountries, idSelect, idSelected);
	req.onreadystatechange = handlerFunction;
	req.open("GET","/locations.php?type=country&invalid=1",true);
	req.send(null);
}
/*
 * Muestra los paises
 * Le pasamos el id del Select que queremos que sea en donde los muestre, (por fefault agarra el ctySelect) #Compatibilidad con los search
 * y le pasamos el valor del que queremos que este seleccionado
 */
function showCountries (xml, idSelect, sidSelected){
	if (idSelect == undefined){
		idSelect = "ctySelect";
	}
	var root = xml.getElementsByTagName("countries")[0];
	var ctySelect = document.getElementById(idSelect);
	var arrIdSelected = new Array();
	if(sidSelected != undefined){//Si es undefined significa que no se paso parametro y le ponemos -1 nomas para que entre al for de abajo una vez
		sidSelected += "";
		if(sidSelected.indexOf(',')==-1){	//Si es -1 significa que no tiene , es decir que solo es un id
			arrIdSelected[0] = sidSelected;
		}else {
			arrIdSelected = sidSelected.split(','); //Si tiene varios ids separados por coma
		}
	}
	else
		arrIdSelected[0] = -1;
	var isum = 0;
	if(ctySelect.length > 0)
		isum = 1;
	var countries = root.getElementsByTagName("country");
	for(var i = 0; i < countries.length; i++) {		
		for(iaux = 0; iaux < arrIdSelected.length; iaux++ ){
			idSelected = arrIdSelected[iaux];
			ctySelect.options[i+isum] = new Option(countries[i].getAttribute("name"), countries[i].getAttribute("id"));
			if(countries[i].getAttribute("id") == idSelected){
				ctySelect.options[i+isum].selected = true;
				break;
			}
		}
	}
}
/*
 * Obtiene los estados
 * Le pasamos el id del Select que queremos que sea en donde los muestre, (por fefault agarra el sstSelect) #Compatibilidad con los search
 * y le pasamos el valor del que queremos que este seleccionado
 */
function getStates(ctyid, idSelect, idSelected, QuitarOther){
	var req = newXMLHttpRequest();
	var handlerFunction = getReadyStateHandler(req,showStates, idSelect, idSelected, QuitarOther);
	req.onreadystatechange = handlerFunction;
	req.open("GET","/locations.php?cty="+ctyid+"&type=state&invalid=1",true);
	req.send(null);
}
/*
 * Muestra los estados
 * Le pasamos el id del Select que queremos que sea en donde los muestre, (por fefault agarra el sstSelect) #Compatibilidad con los search
 * y le pasamos el valor del que queremos que este seleccionado
 */
function showStates(xml,idSelect, sidSelected, QuitarOther){
	if(QuitarOther == undefined){
		QuitarOther = false;
	}
	if (idSelect == undefined){
		var search = true;
		idSelect = "sttSelect";
	}
	var root = xml.getElementsByTagName("country")[0];
	var sttSelect = document.getElementById(idSelect);
	var arrIdSelected = new Array();
	if(sidSelected != undefined){//Si es undefined significa que no se paso parametro y le ponemos -1 nomas para que entre al for de abajo una vez
		sidSelected += "";
		if(sidSelected.indexOf(',')==-1){	//Si es -1 significa que no tiene , es decir que solo es un id
			arrIdSelected[0] = sidSelected;
		}else {
			arrIdSelected = sidSelected.split(','); //Si tiene varios ids separados por coma
		}
	}
	else
		arrIdSelected[0] = -1;
	var states = root.getElementsByTagName("state");
	var i = 0;
	var hasElementIni = false;
	if(sttSelect.length > 0){
		var optDefaultText	= sttSelect.options[0].text;
		var optDefaultValue	= sttSelect.options[0].value;
		sttSelect.innerHTML = "";
		hasElementIni = true;
		sttSelect.options[0] = new Option(optDefaultText, optDefaultValue);	//Selecciona
		i++;
		isum = 1;
	}
	else{
		sttSelect.innerHTML = "";
		isum = 0;
	}
	var haycero = false;
	var iddefaulsel = false;
	for(i; i <= states.length; i++) { //LLenar los options del xml
		for(iaux = 0; iaux < arrIdSelected.length; iaux++ ){
			idSelected = arrIdSelected[iaux];
			sttSelect.options[i] = new Option(states[i-isum].getAttribute("name"), states[i-isum].getAttribute("id"));
			if(states[i-isum].getAttribute("id") == idSelected){
				sttSelect.options[i].selected = true;
				break;
			}
			if(idSelected == 0){
				haycero = true;
			}
			if(hasElementIni && idSelected == optDefaultValue)
				iddefaulsel = true
		}
	}
	if(states.length == 0){	//Buscamos un cero en el arreglo de id seleccionado en caso de que no haya estado
		for(iaux = 0; iaux < arrIdSelected.length; iaux++ ){
			idSelected = arrIdSelected[iaux];
			if(idSelected == 0){
				haycero = true;
				break;
			}
		}
	}
	if( !search && !QuitarOther){// Es para la opcion de Otros (En el Search no se usa
		if(document.getElementById('HdnHeadsLanguage').value == 'es'){
			sttSelect.options[i] = new Option("Otros", 0);
		} else{
			sttSelect.options[i] = new Option("Others", 0);
		}
		if(haycero){
			sttSelect.options[i].selected = true;
		}
	}
	if((hasElementIni && iddefaulsel) || sidSelected == undefined)
		sttSelect.options[0].selected = true;
}
/*
 * Obtiene las ciudades
 * Le pasamos el id del Select que queremos que sea en donde los muestre
 * y le pasamos el valor del que queremos que este seleccionado
 */
function getCities(sstid, idSelect, idSelected) {
	var req = newXMLHttpRequest();
	var handlerFunction = getReadyStateHandler(req,showCities, idSelect, idSelected);
	req.onreadystatechange = handlerFunction;
	req.open("GET","/locations.php?stt="+sstid+"&type=city&invalid=1",true);
	req.send(null);
}
/*
 * Muestra las ciudades
 */
function showCities(xml,idSelect, idSelected) {
	var root = xml.getElementsByTagName("state")[0];
	var citSelect = document.getElementById(idSelect);

	var cities = root.getElementsByTagName("city");

	var optDefaultText = citSelect.options[0].text;
	var optDefaultValue = citSelect.options[0].value;
	citSelect.innerHTML = "";
	var i = 0;
	citSelect.options[i] = new Option(optDefaultText, optDefaultValue);
	if(idSelected == undefined)
		citSelect.options[i].selected = true;
	for(i = 1; i <= cities.length; i++) {
		citSelect.options[i] = new Option(cities[i-1].getAttribute("name"), cities[i-1].getAttribute("id"));
		if(cities[i-1].getAttribute("id") == idSelected){
			citSelect.options[i].selected = true;
		}
	}
	// Es para la opcion de Otros (En el Search no se usa
	if(document.getElementById('HdnHeadsLanguage').value == 'es'){
		citSelect.options[i] = new Option("Otros", 0);
	} else{
		citSelect.options[i] = new Option("Others", 0);
	}
	if(idSelected == 0){
		citSelect.options[i].selected = true;
	}
}