Código:
if(xml.status == 404) alert("Url no valida");
return xml.responseText;
document.agregar.submit();
estas tres lineas estan fuera de lugar, es decir, no van ahi. primero, si vas a relizar una peticion por XHR no tienes porque enviar -o como muchos dicen, sumitar- el formulario. lo que tienes que hacer es invocar tu funcion desde el evento submit y cancelar la accion predeterminada.
Código:
<form onsubmit="function_call(); return false;">...</form>
y segundo, para verificar el estado y devolver la respuesta de la peticion tienes que usar el evento onreadystatechange del objeto XHR.
Código:
xml.onreadystatechange = function(){
// aqui verificas el estado de peticion y de respuesta;
// cuando cumpla lo anterior procesas el contenido devuelto en responseText;
}
y por ultimo, si no tienes que enviar la variable cuidad, entonces no la incluyas en la URL de la peticion.