var requestLocalidades = null;


  
function controlLocalidades(idPais,idCCAA,idProvincia,idMunicipio){
	elemPais = document.getElementById(idPais);
	elemCCAA = document.getElementById(idCCAA);
	elemProvincia = document.getElementById(idProvincia);
	elemMunicipio = document.getElementById(idMunicipio);
	
	refrescarEstadoInicialLocalidades(elemPais, elemCCAA, elemProvincia, elemMunicipio);
	
	elemPais.onchange = function (evt){
		cambioPais(elemPais, elemCCAA, elemProvincia, elemMunicipio);
	}

	elemCCAA.onchange = function (evt){
		cambioCCAA(elemCCAA, elemProvincia, elemMunicipio);
	}

	elemProvincia.onchange = function (evt ){
		cambioProvincia(elemProvincia, elemMunicipio);
	}
		 
}

function getText(el) {
  var text = "";
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        if (childNode.nodeValue != null) {
          text = text + childNode.nodeValue;
        }
      }
    }
  }
  return text;
}

function crearRequestLocalidades(){
	var request = null;	
	try {
	  request = new XMLHttpRequest();
	} catch (trymicrosoft) {
	  try {
	    request = new ActiveXObject("Msxml2.XMLHTTP");
	  } catch (othermicrosoft) {
	    try {
	      request = new ActiveXObject("Microsoft.XMLHTTP");
	    } catch (failed) {
	      request = null;
	    }
	  }
	  if (request == null)
  		alert("Error creaando objeto requestLocalidades!");
	  
	}
	return request;
}


function refrescarEstadoInicialLocalidades(elemPais, elemCCAA, elemProvincia, elemMunicipio){
	// Si el pais no es españa, no tiene que haber datos de los otros
	if (elemPais.options[elemPais.selectedIndex].value != '034'){
		borrarSelect(elemCCAA);
		borrarSelect(elemProvincia);		
		borrarSelect(elemMunicipio);					
	} else {
		// Si no hay comunidad seleccionada
		if (elemCCAA.selectedIndex < 0 || elemCCAA.options[elemCCAA.selectedIndex].value == ''){
			borrarSelect(elemProvincia);		
			borrarSelect(elemMunicipio);			
		}
		// Si no hay provincia seleccionada
		if (elemProvincia.selectedIndex < 0 || elemProvincia.options[elemProvincia.selectedIndex].value == ''){
			borrarSelect(elemMunicipio);			
		}		
	}
	
	refrescarEnabled(elemCCAA);
	refrescarEnabled(elemProvincia); 
	refrescarEnabled(elemMunicipio);
}

function refrescarEnabled(elemSelect){
	elemSelect.disabled = (elemSelect.getElementsByTagName("option").length <= 0); 
}

function cambioPais(elemPais, elemCCAA, elemProvincia, elemMunicipio){
		borrarSelect(elemCCAA);
		borrarSelect(elemProvincia);		
		borrarSelect(elemMunicipio);					
		refrescarEnabled(elemCCAA);
		refrescarEnabled(elemProvincia); 
		refrescarEnabled(elemMunicipio);				
		if (elemPais.options[elemPais.selectedIndex].value == '034'){
			pedirDatos("/ajax/localidades/getComunidades.jsp",elemCCAA);
		}
}

function cambioCCAA(elemCCAA, elemProvincia, elemMunicipio){
		borrarSelect(elemProvincia);		
		borrarSelect(elemMunicipio);					
		refrescarEnabled(elemProvincia); 
		refrescarEnabled(elemMunicipio);				
		if (elemCCAA.selectedIndex >= 0 && elemCCAA.options[elemCCAA.selectedIndex].value != ''){
			pedirDatos("/ajax/localidades/getProvincias.jsp?codCCAA=" + elemCCAA.options[elemCCAA.selectedIndex].value, elemProvincia);
		} 
}

function cambioProvincia(elemProvincia, elemMunicipio){
		borrarSelect(elemMunicipio);					
		refrescarEnabled(elemMunicipio);				
		if (elemProvincia.selectedIndex >= 0 && elemProvincia.options[elemProvincia.selectedIndex].value != ''){			
			pedirDatos("/ajax/localidades/getMunicipios.jsp?codProvincia=" + elemProvincia.options[elemProvincia.selectedIndex].value, elemMunicipio);
		}
	
}

function borrarSelect(elemSelect){
 	var nodo = elemSelect; 
	while (nodo.firstChild){
		nodo.removeChild(nodo.firstChild);
	}	
}

function pedirDatos(url,elemSelect){	
	
    if (url!=""){   		
		if (requestLocalidades != null){
			requestLocalidades.abort();
		}
	
		requestLocalidades = crearRequestLocalidades();	
    
    	requestLocalidades.open("GET", url, true);
  		requestLocalidades.onreadystatechange = function (evt) {
  			meterDatosEnSelect(elemSelect);
  		};
  		requestLocalidades.send(null);
    }    
	
}

function meterDatosEnSelect(elemSelect){
  if (requestLocalidades.readyState == 4) {
    if (requestLocalidades.status == 200) {
    	
    	var xmlData = requestLocalidades.responseXML;    	    	
    	var opcionesXML = xmlData.getElementsByTagName("opcion");
    	if (opcionesXML.length > 0){
    		insertarOpcion(elemSelect, "","Elija una opción");
    	}    	
    	insertarOpcionesXML(opcionesXML, elemSelect);
     	refrescarEnabled(elemSelect);
    } else {
      var message = requestLocalidades.getResponseHeader("Status");
      if (message == null || (message.length == null) || (message.length <= 0)) {
        alert("Error! Status es " + requestLocalidades.status);
      } else {
        alert(message);
      }
    }
  }	
}

function insertarOpcionesXML(opcionesXML, elemSelect){
		for (i = 0; i < opcionesXML.length; i++){
			var codigo = getText(opcionesXML[i].getElementsByTagName("codigo")[0]);
			var nombre = getText(opcionesXML[i].getElementsByTagName("nombre")[0]);
			insertarOpcion(elemSelect, codigo,nombre);
		}
}

function insertarOpcion(elemSelect, codigo,nombre){	
	var elOpcion = document.createElement("option");
	var texto = document.createTextNode(nombre);
	
	elOpcion.setAttribute("value",codigo);			
	elOpcion.appendChild(texto);
	
	elemSelect.appendChild(elOpcion);
}
		 

