function carrega_estados(url, campo, cd_cidade, campo_carrega_cidades){
	
	ajax_carrega_estados = ajaxInit();
	if(ajax_carrega_estados) {
		ajax_carrega_estados.open("GET", url + "includes/xml_carrega_estados.php?cd_cidade=" + cd_cidade, true);
		ajax_carrega_estados.onreadystatechange = function() {	   
			if(ajax_carrega_estados.readyState == 4) {	     
				if(ajax_carrega_estados.status == 200) {	
					var xmldoc_carrega_estados = ajax_carrega_estados.responseXML;
					if(xmldoc_carrega_estados.hasChildNodes()){
						var nos_dadosoption = xmldoc_carrega_estados.getElementsByTagName('option');	
						
						// Condicao para decidir se ao mudar Estado, sera ou nao chamada a funcao que carrega Cidades no 'campo_carrega_cidades' especificado
						if(campo_carrega_cidades != ""){
							var option = "<select name=\"sg_uf\" id=\"sg_uf\" class=\"oselect2\" onchange=\"carrega_cidades('" + url + "', this.options[this.selectedIndex].value, '" + campo_carrega_cidades + "', '')\">";
						}else{
							var option = "<select name=\"sg_uf\" id=\"sg_uf\" class=\"oselect2\">";
						}
						// Iniciamos o 'option' com um simples '-' e value '0' para que que possa ser executado o teste com a funcao 'alert_select' no submit do formulario
						option += "<option value=\"0\">-</option>";
						
						// Retorno do XML com os Estados
						if(nos_dadosoption.length > 0){
							for(i=0; i<nos_dadosoption.length; i++){
								var no_dadosoption = nos_dadosoption[i];
								var estado = no_dadosoption.getAttribute("estado");
								var selected = no_dadosoption.getAttribute("selected");
								
								// Se a variavel GET nao foi setada na chamada do PHP que constroi o XML, retorna um elemento 'option' com atributos zerados
								if(estado != ""){
									
									// Se 'selected' nao for vazio, montamos o 'option' com 'selected'
									if(selected != ""){									
										option += "<option value=\"" + estado + "\" selected=\"selected\">" + estado + "</option>";
									}else{
										option += "<option value=\"" + estado + "\">" + estado + "</option>";
									}
								}
							}
						}
						option += "</select>";
						
						document.getElementById(campo).innerHTML = option;
					}
					
				} else {
					alert(ajax_carrega_estados.statusText + " (" + ajax_carrega_estados.status + ")");
				}
			}
		}
		ajax_carrega_estados.send(null);
	}
}

function carrega_cidades(url, uf, campo, cd_cidade){
	
	ajax_carrega_cidades = ajaxInit();
	if(ajax_carrega_cidades) {
		ajax_carrega_cidades.open("GET", url + "includes/xml_carrega_cidades.php?uf=" + uf + "&cd_cidade=" + cd_cidade, true);
		ajax_carrega_cidades.onreadystatechange = function() {	   
			if(ajax_carrega_cidades.readyState == 4) {	     
				if(ajax_carrega_cidades.status == 200) {	
					var xmldoc_carrega_cidades = ajax_carrega_cidades.responseXML;
					if(xmldoc_carrega_cidades.hasChildNodes()){
						var nos_dadosoption = xmldoc_carrega_cidades.getElementsByTagName('option');	
						
						// Inicio da construcao de 'option' com value '0' para que que possa ser executado o teste com a funcao 'alert_select' no submit do formulario
						var option = "<select name=\"cd_cidade\" id=\"cd_cidade\" class=\"oselect2\">";
						option += "<option value=\"0\">Selecione uma cidade</option>";
						
						// Retorno do XML com as Cidades (Se existir ou nao Cidades, dado um Estado, o XML sempre retorna ao menos um elemento 'option')
						if(nos_dadosoption.length > 0){
							for(i=0; i<nos_dadosoption.length; i++){
								var no_dadosoption = nos_dadosoption[i];
								var cod = no_dadosoption.getAttribute("cod");
								var cidade = no_dadosoption.getAttribute("cidade");
								
								// Se cidade nao for vazia, foi encontrado o Estado passado e XML contem todas as Cidades referentes as Estado
								if(cidade != ""){
									if(cod == cd_cidade){
										option += "<option value=\"" + cod + "\" selected=\"selected\">" + cidade + "</option>";
									}else{
										option += "<option value=\"" + cod + "\">" + cidade + "</option>";
									}
								}
								// Se nao encontrou o Estado passado, XML retorna um elemento 'option' com atributo 'cidade' vazio, e assim mostramos 'select' como 'disabled'
								else{
									option = "<select name=\"nm_cidade\" class=\"oselect2\" disabled=\"disabled\">";
									option += "<option value=\"0\">Selecione uma cidade</option>";
								}
							}
						}
						option += "</select>";
						
						document.getElementById(campo).innerHTML = option;
					}
					
				} else {
					alert(ajax_carrega_cidades.statusText + " (" + ajax_carrega_cidades.status + ")");
				}
			}
		}
		ajax_carrega_cidades.send(null);
	}
}