/*
 * 06/09/09 - Módulo CEP em Ajax 1.0
 * Módulo que busca o endereço a partir do CEP.
 * Autor: Patrick José Salles Streitenberger @ patrickjp4@gmail.com ^ 1.0 aka ORiON
 * v1.0 ~> O módulo usa o banco de dados da RepublicaVirtual (http://www.republicavirtual.com.br)
 * Sugestões e correções são sempre bem vindas!
 */
 
function get(elemento){
  return document.getElementById(elemento);
}
  
function addEvent(obj, evt, func) {
   if (obj.attachEvent) {
     return obj.attachEvent(("on"+evt), func);
   } else if (obj.addEventListener) {
     obj.addEventListener(evt, func, true);
     return true;
   }
   return false;
}

function XMLHTTPRequest() {
   try {
     return new XMLHttpRequest();
   } catch(ee) {
     try {
       return new ActiveXObject("Msxml2.XMLHTTP");
     } catch(e) {
       try {
         return new ActiveXObject("Microsoft.XMLHTTP");
       } catch(E) {
         return false;
       }
     }
   }
}

function buscarEndereco() {
   var campos = {
     cep: document.getElementById("postcode"),
     logradouro: document.getElementById("address1"),
     bairro: document.getElementById("address2"),
     cidade: document.getElementById("city"),
     estado: document.getElementById("id_state")
	};

	var ajax = XMLHTTPRequest();
	ajax.open("GET", ("themes/prestashop/js/busca_cep.php?cep=" + campos.cep.value.replace(/\+/g, " ")), true);
    
	ajax.onreadystatechange = function() {
		if (ajax.readyState == 1) {
			campos.logradouro.disabled = true;	 
			campos.logradouro.value = "carregando...";
			campos.bairro.disabled = true;	   
			campos.bairro.value = "carregando...";
			campos.cidade.disabled = true;	   
			campos.cidade.value = "carregando...";
			campos.estado.disabled = true;	   
			campos.estado.value = "carregando...";   
		} else if (ajax.readyState == 4) {
				if(ajax.responseText == false){
					campos.logradouro.disabled = false;
					campos.logradouro.value = "";
					campos.bairro.disabled = false;
					campos.bairro.value = "";
					campos.cidade.disabled = false;
					campos.cidade.value = "";
					campos.estado.disabled = false;
					campos.estado.value = "";
				} else {
					var r = ajax.responseText, i,  logradouro, bairro, cidade, estado;
      
					logradouro = r.substring(0, (i = r.indexOf(':')));
					campos.logradouro.disabled = false;
					campos.logradouro.value = unescape(logradouro.replace(/\+/g," "));
					r = r.substring(++i);
					
					bairro = r.substring(0, (i = r.indexOf(':')));
					campos.bairro.disabled = false;
					campos.bairro.value = unescape(bairro.replace(/\+/g," "));
					r = r.substring(++i);
					
					cidade = r.substring(0, (i = r.indexOf(':')));
					campos.cidade.disabled = false;
					campos.cidade.value = unescape(cidade.replace(/\+/g," "));
					r = r.substring(++i);
					
					estado = r.substring(0, (i = r.indexOf(';')));
					campos.estado.disabled = false;
					
					campos.estado.value = unescape(estado.replace(/\+/g," "));
					r = r.substring(++i);
	
    				i = campos.estado.options.length;
					while (i--) {
						if (campos.estado.options[i].getAttribute("value") == estado) {
						break;
					}
				}
				campos.estado.selectedIndex = i;
			}
		}
	};
	ajax.send(null);
}

window.addEvent(
   window,
   "load",
   function() {window.addEvent(document.getElementById("postcode"), "blur", buscarEndereco);}
);