function buildAjax() {

	try {
		ajax = new ActiveXObject("Microsoft.XMLHTTP");
	} catch(e) {
		try {
			ajax = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(ex) {
			try {
				ajax = new XMLHttpRequest();
			} catch(exc) {
				alert("Seu navegador não possui recursos\npara garregar os dados.");
				ajax = null;
			}
		}
	}
	
	return ajax;
	
} // fim da função

function getEstado(parent) {
	
	// MODO
	// 0 -> país
	
	parent = (true) ? "../" : "";
	
	document.getElementById("estado").options.length = 1;
	document.getElementById("cidade").options.length = 1;
	
	// pegando o país
	var paisId = document.getElementById("pais").value;
	
	document.getElementById("opcao_cidade").innerHTML = "Selecione o estado";

	// tenta montar o objeto
	var objAjax = buildAjax();
	
	// verifica se foi montado corretamente
	if( objAjax != null ) {

		ajax.open("POST", parent + "util/localidade_.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		
		ajax.onreadystatechange = function() {
	
			switch (ajax.readyState) {
				
				case 1:
					document.getElementById("opcao_estado").innerHTML = "Carregando estados...";
					break;
					
				case 4:
					if(ajax.responseXML) {
						
						processaXML(ajax.responseXML, "estado");
						
					} else {
						
						document.getElementById("opcao_estado").innerHTML = "Primeiro selecione o país";
						//select_innerHTML(idOpcao, "<option value=\"\">Primeiro selecione o "+selecao+"</option>");
						
					}
					break;
				
			} // fim do switch (ajax.readyState)
			
		} // fim da ajax.onreadystatechange = function()
		
		var parametros = "valor=" + paisId + "&modo=0";
		ajax.send(parametros);
		
	} // fim da condição

} // fim da função


function getCidade(parent) {
	
	parent = (true) ? "../" : "";
	
	// MODOS
	// 1 ->existe o estado
	// 2 -> o país não tem estado
	
	document.getElementById("cidade").options.length = 1;
	
	// pegando o país caso o estado não esteja setado
	var paisId = document.getElementById("pais").value;
	// pegando o estado
	var estadoId = document.getElementById("estado").value;
	// modo
	var modo = (estadoId != "") ? "1" : "2";
	// valor
	var valor = (estadoId != "") ? estadoId : paisId;
	
	// tenta montar o objeto
	var objAjax = buildAjax();
	
	// verifica se foi montado corretamente
	if( objAjax != null ) {
	
		ajax.open("POST", parent + "util/localidade_.php", true);
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

		
		ajax.onreadystatechange = function() {
	
			switch (ajax.readyState) {
				
				case 1:
					document.getElementById("opcao_cidade").innerHTML = "Carregando cidades...";
					break;
					
				case 4:
					if(ajax.responseXML) {
						
						processaXML(ajax.responseXML, "cidade");
						
					} else {
						
						document.getElementById("opcao_cidade").innerHTML = "Primeiro selecione o estado";
						//select_innerHTML(idOpcao, "<option value=\"\">Primeiro selecione o "+selecao+"</option>");
						
					}
					break;
				
			} // fim do switch (ajax.readyState)
			
		} // fim da ajax.onreadystatechange = function()
		
		var parametros = "valor=" + valor + "&modo=" + modo;
		ajax.send(parametros);
		
	} // fim da condição

} // fim da função

// função que manipula o xml retornado
function processaXML(obj, campo) {

	//pega a tag cidade
	var dataArray = obj.getElementsByTagName("dado");
  	
	var selectCampo = document.getElementById( "opcao_" + campo );
	
	//total de elementos contidos na tag cidade
	if(dataArray.length > 0) {

		selectCampo.innerHTML = "Selecione uma das opções abaixo";
		
		//percorre o arquivo XML paara extrair os dados
		for(var i = 0 ; i < dataArray.length ; i++) {
			
			var item = dataArray[i];
			
			//contéudo dos campos no arquivo XML
			var codigo    =  item.getElementsByTagName("codigo")[0].firstChild.nodeValue;
			var descricao =  item.getElementsByTagName("descricao")[0].firstChild.nodeValue;
			
			//cria um novo option dinamicamente  
			document.getElementById( campo ).options.add( criaOption(descricao, codigo, "opcao_" + campo) );
				
		 } // fim do loop
	 
  } else {
	  
	//caso o XML volte vazio, printa a mensagem abaixo
	selectCampo.innerHTML = (campo == "estado") ? "Não há estado cadastrada para este país." : "Não há cidade cadastrada para este país.";
	// chama as cidades do país corrente que não possui estado
	if (campo == "estado") getCidade();
	
  } // fim da condição

} // fim da função

function criaOption(texto, valor, id) {
	
	var novo = document.createElement("option");
	novo.setAttribute("id", id);
	novo.value = valor;
	novo.text  = texto;
	
	return novo;
	
}