

function setupAjaxFormUpdater () {

  function getXHRInst () {
	//return window.XMLHttpRequest;
	// function to create an XMLHttpClient in a cross-browser manner
	var xmlhttp;
	try {
	// Mozilla / Safari / IE7
	xmlhttp = new XMLHttpRequest();
	} catch (e) {
	// IE
	var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0',
	'MSXML2.XMLHTTP.4.0',
	'MSXML2.XMLHTTP.3.0',
	'MSXML2.XMLHTTP',
	'Microsoft.XMLHTTP' );
	var success = false;
	for (var i=0;i < XMLHTTP_IDS.length && !success; i++) {
	try {
	xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]);
	success = true;
	} catch (e) {}
	}
	if (!success) {
	throw new Error('Unable to create XMLHttpRequest.');
	}
	}
	return xmlhttp;
	/*var xhr;
    try {
      xhr = new XMLHttpRequest();
    } catch (e) {
      try {
        xhr = new ActiveXObject("Msxml2.XMLHTTP.6.0");
      } catch (e) {
        try {
          xhr = new ActiveXObject("Msxml2.XMLHTTP.3.0");
        } catch (e) {
          try {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");           
          } catch (e) {
            return false;
          }
        }
      }
    }
    return xhr;*/
  }

  function field () {
    var self = this;
    function error () {
      for (var i = 0; i < self.handle.length; i++) {
        self.handle[i].length = 0;
        self.handle[i].options[0] = new Option("Erro!","",false,false);
      }
    }
    this.handle = new Array();
    this.update = function (url) {
      var xhr = getXHRInst();
      if (xhr == false) {
        error();
        return;
      }
      for (var i = 0; i < self.handle.length; i++) {
        self.handle[i].length = 0;
        self.handle[i].options[0] = new Option("Aguarde...","",false,false);
      }
      xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
          if (xhr.status == 200) {
            var response = xhr.responseText;
            var i, j, re = /"([^"]*)","([^"]*)"\n/g;
            for (i = 0; i < self.handle.length; i++) {
              self.handle[i].length = 0;
              self.handle[i].options[0] = new Option("","",false,false);
            }
            i = 1;
            while ((match = re.exec(response)) != null) {
              for (j = 0; j < self.handle.length; j++) {
                self.handle[j].options[i] = new Option(match[1],match[2],false,false);
              }
              i++;
            }
          }
          else {
            error();
          }
        }
      }
      xhr.open("GET",url,true);
      xhr.send();
    }
    for (var i = 0; i < arguments.length; i++) {
      var e = document.getElementById(arguments[i]);
      if (e != null) {
        self.handle.push(e);
      }
    }
  }

  var fields = new Object();
  fields.cidade = document.getElementById("cidade");
  if (fields.cidade != null) {
    fields.escola = new field("escolaridade");
    fields.funcao = new field("funcao_1","funcao_2","funcao_3");
    //fields.regiao = new field("regiao");
    fields.cidade.onchange = function () {
      if (this.selectedIndex == 0) {
        return;
      }
      var root = document.getElementById("regiao");
      var cidade = root.options[root.selectedIndex].value.toLowerCase();
      fields.escola.update("/miniform/escola.php?cidade="+cidade);
      fields.funcao.update("/miniform/funcao.php?cidade="+cidade);
      //fields.regiao.update("/miniform/zona.php?cidade="+cidade);
    }
  }

}
