/******************************************************************************
 * Função para efetuar chamadas AJAX nos formulários e obter dados dinamicamente
 * Parâmetros: 
 *   method: GET, POST ou HEAD (sempre em maiúsculas)
 *   url: URL da página a ser requisitada. Por medidas de segurança, não pode
 *        ser uma url externa ao domínio.
 *   containerId: id do elemento container (SPAN ou DIV) que irá receber o
 *                conteúdo da página requisitada
 * Retorno:
 *   true: Se tudo ocorrer bem.
 *   false: Caso contrário.
 ******************************************************************************/
function loadAjaxPage(method, url, containerId)
{

	var httpRequest = getHttpRequest(containerId);

   // Verifica se o objeto HTTP Requesto foi inicializado
   if (!httpRequest)
      return false;

   // Cria um método para o tratar o evento onreadystatechange
   httpRequest.onreadystatechange = function()
   {
      loadPage(httpRequest, containerId);
   }

   // Efetua a requisição
   sendRequest(httpRequest, method, url, true);

   return true;
}

/******************************************************************************
 * Função para obter o elemento XML HTTP Request
 ******************************************************************************/
function getHttpRequest(containerId)
{
   var httpRequest = false;

   if (window.XMLHttpRequest) // se Mozilla, Safari etc.
      httpRequest = new XMLHttpRequest()
   else
   {
      if (window.ActiveXObject) // se IE
      {
         try
         {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP")
         } 
         catch (e)
         {
            try
            {
               httpRequest = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch (e)
            {
               document.getElementById(containerId).innerHTML = "<font color='red'>Erro ao carregar objeto XMLHTTP.</font>";
            }
         }
      }
   }

   return httpRequest;
}

/******************************************************************************
 * Função para enviar a requisição AJAX
 ******************************************************************************/
function sendRequest(httpRequest, method, url, asynchronous)
{
   var ajaxRequest = url + (url.indexOf("?") >= 0 ? "&" : "?") + "ajaxRequest=true";

   // Abre a página requisitada
   httpRequest.open(method, ajaxRequest, asynchronous);

   // Se o método de envio for POST, altera o tipo MIME para o envio de dados
   if (method == "POST")
      httpRequest.setRequestHeader('Content-Type', "application/x-www-form-urlencoded; charset=ISO-8859-1");

   // Evita que os dados do AJAX fiquem armazenados no cache do browser
   httpRequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
   httpRequest.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
   httpRequest.setRequestHeader("Pragma", "no-cache");

   // Envia os dados à página requisitada, carregando-a quando estiver concluída
   httpRequest.send(null);
}

/******************************************************************************
 * Função para carregar a página solicitada quando ela estiver pronta.
 ******************************************************************************/
function loadPage(httpRequest, containerId)
{
   /***************************************************************************
    * Valores de httpRequest.readyState:
    * 0: Não inicializado
    * 1: Carregando
    * 2: Carregado
    * 3: Interativo
    * 4: Pronto
    ***************************************************************************
    * Valores de httpRequest.status:
    * 200: Ocorreu tudo bem, não teve problemas
    * 404: Página não encontrada
    * 500: Erro interno de servidor
    ***************************************************************************/
   if(httpRequest.readyState == 4 &&
      (httpRequest.status == 200 || window.location.href.indexOf("http") == -1))
   {
      document.getElementById(containerId).innerHTML = httpRequest.responseText;
   }
}
