// -------------------
// PROPRIEDADES DO OBJETO Microsoft.XMLHTTP
// -------
// 
// onreadystatechange
// ------------------
// Contém o nome da função que é executada cada vez que p estado da conexão é trocada. 
//
// readyState
// ----------
// Determina o Estado da Conexão, que pode ser:
// 1 - Carregando
// 2 - Carregado, porém sem seu conteúdo incorporado aos objetos correspondentes.
// 3 - Incorporando os objetos correspondentes
// 4 - Carga encerrada
// 
// responseText
// ------------
// Dados devolvidos pelo servidor em formato de cadeia.
//
// responseXML
// -----------
// Dados devolvidos pelo servidor em forma de documento XML que pode ser recorrido mediante as funções do DOM (getEementsByTagName, etc).
//
// status
// ------
// Código enviado pelo Servidor, pode ser:
// 200  - Completado com Êxito
// 404  - URL Não Encontrada
// 414  - Os valores passados por GET superam os 512 bytes.
// 
// statusText
// ----------
// Mensagem de texto enviada pelo servidor junto com o código (status) para o caso do código 200 conter OK.
//
//
// -------------------
// MÉTODOS DO OBJETO Microsoft.XMLHTTP
// -------
// abort()
//   Abandonar a requisição em curso.
//
// getAllResponseHeaders()
// -----------------------
//   Retorna a resposta, labels e valores, como uma cadeia.
//
// getResponseHeader(etiqueta)
// ---------------------------
//   Retorna o valor de um label no cabeçalho da resposta.
//
// open(método, URL, assíncrona, usuario, password)
// ------------------------------------------------
//   Abre uma conexão com a URL especificada no parâmetro através do método (GET, POST, HEAD ou POST ou DELETE). Dos 5 parâmetros, os dois iniciais são obrigatórios: 
//     método     - Determina o método que será usado para a conexão (GET, POST, HEAD,POST oo DELETE).
//     URL        - A URL que será chamada para o processo.
//     assíncrona - Valor booleano: true indica que o processo será executado sem parar a aplicação em curso (será executada em background); false, ao contrário, indica que o processo será interrompido até que o processo seja encerrado na maneira correta.
//
// send(conteúdo)
// --------------
//   Envia o conteúdo para o Servidor Web.
//
// setRequestHeader(label,valor)
// -----------------------------
//   Estabelece o valor de um label no cabeçalho da requisição.
// -------------------

// --
// AjaxProcess()
// --
function AjaxProcess(sUrl, sPairs) {
  var bAjax = true; var r;
  var retArray = new Array();
  try {
    try {
      r = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        r = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        bAjax = false;
      }
    }
    if ( (!bAjax) && (typeof XMLHttpRequest!="undefined") ) {
      r = new XMLHttpRequest();
    }
    if (r) {
      r.open("GET", sUrl + "?" + sPairs, false);
      r.send();      
      if (""+r.responseText.length>0) {
        var aItems = String(r.responseText).split('<EOR>');
        if (aItems.length>0) {
          for (x=0; x<aItems.length; x++) {
            retArray[x] = aItems[x].split('<EOF>');
          }
        }
      }
    } r = null;
  } catch(e) {
    alert( e.description );
  } return retArray;
} // AjaxProcess()

// --
// AjaxNoWaitProcess()
// --
function AjaxNoWaitProcess(sUrl, sPairs) {
  var bAjax = true; var r;
  try {
    try {
      r = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        r = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        bAjax = false;
      }
    }
    if ( (!bAjax) && (typeof XMLHttpRequest!="undefined") ) {
      r = new XMLHttpRequest();
    }
    if (r) {
      r.open("GET", sUrl + "?" + sPairs, true);
      r.send();
      r.onreadystatechange=function() {
        if (r.readyState==4) {
          window.alert(r.responseText);
        } r.send(null);
      }
    } r = null;
  } catch(e) {
    alert(e.description);
  } return bAjax;
} // AjaxNoWaitProcess()

// --
// ChangeCombo()
// --
function ChangeCombo(oCombo, sUrl, sPairs, iOptNoDestroy, sValue) {
  try {
    oCombo.options.length = iOptNoDestroy;
    sPairs = sPairs.replace(/this.value/gi,sValue);
    var aResult = AjaxProcess(sUrl, sPairs);
    if (aResult.length>0) {
      for (var x=0;x<aResult.length;x++) {
        oCombo.options[oCombo.options.length] = new Option(aResult[x][1],aResult[x][0]);
      }
    }
  } catch(e) {
    alert(e.description);
  }
} // ChangeCombo()