var objRequest;
var action = "";
var method = "";
var conteudoRequisicao = "";

ajaxInit();

 //Função para instanciar o objeto HttpRequest.
function ajaxInit() {
    try {
        objRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
        try {
            objRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (ex) {
            try {
                objRequest = new XMLHttpRequest();
            } catch (exc) {
                alert("Esse browser não tem recursos para uso do Ajax.");
                objRequest = false;
            }
        }
    }
}

// Pega os campos e seus valores do formulário para concatenar na variável(conteudoRequisicao) que será enviada para o servidor.
function getDataForm(myForm) {
    if (myForm != "" && myForm.action != undefined) {
        action = myForm.action;
        method = myForm.method;
        conteudoRequisicao = "";
        for (i = 0; i < myForm.elements.length; i++) {
            elementos = myForm.elements[i];
            //trata os elementos não checados do radio button
            if(elementos.type.toLowerCase() == "radio" && !elementos.checked){
              continue;
            }
            //trata os elementos do checkbox
            if(elementos.type.toLowerCase() == "checkbox"){
              continue;
            }
            if (elementos.name != "") {
                conteudoRequisicao += elementos.name + "=" +
                        escape(elementos.value) + "&";
            }
        }
        conteudoRequisicao = conteudoRequisicao.substring(0,
                conteudoRequisicao.length - 1);
    } else {
        alert("Form Inválido.");
    }
}
// Processa uma requisição pro Servidor através de um formulário.
function ajaxProcessPost(myForm, fuctionProcess) {
    if (objRequest) {
        getDataForm(myForm);
        objRequest.open(method, action, true);
        objRequest.onreadystatechange = fuctionProcess;
        objRequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        objRequest.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
        objRequest.setRequestHeader("Pragma", "no-cache");
        if (method == "post") {
            objRequest.setRequestHeader("Content-Type",
                                        "application/x-www-form-urlencoded");
        }
        conteudoRequisicao = conteudoRequisicao != "" ? conteudoRequisicao : null;
        //alert(conteudoRequisicao);
        objRequest.send(conteudoRequisicao);
    }
}

// Processa uma requisição pro Servidor via GET.
function ajaxProcessGet(url, fuctionProcess) {
    if (objRequest && url != "") {
        method = "GET";
        action = url;
        try {
          objRequest.open("GET", url, true);
          objRequest.onreadystatechange = fuctionProcess;
          objRequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
          objRequest.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
          objRequest.setRequestHeader("Pragma", "no-cache");
          objRequest.send(null);
        } catch(e) {
          alert('Erro ao carregar a página: ' + e.message);
        }
    }
}

// Verifica se o objeto HttpRequest contém um retorno válido.
function isAjax() {
    if (objRequest.readyState == 4) {
        if (objRequest.status != 200) {
           alert("resp:"+objRequest.responseText);
           alert("Status: " + objRequest.status + " - Problem: " + objRequest.statusText);
        } else {
            var s = objRequest.responseText;
            if (s.match("erro_conexao_crystal")) {
                reason = s.split("=")[1];
                window.location.href="opGlobalError.do?erro_conexao_crystal=" + reason;
                return;
            }
            return true;
        }
    }
    return false;
}

// Pega os checkbox checados seta os valores no campo escondido
function getAllCheckboxChecked(fieldCheck,fieldHidden) {
  var ret = false;
  var len = fieldCheck.length;
  var first = true;
  // trata quando o fieldCheck for apenas 1
  if (len == undefined && fieldCheck.checked) {
    fieldHidden.value = fieldCheck.value;
  }
  // fieldCheck é mais de 1
  else {
    for (i = 0; i < len; i++) {
      if (fieldCheck[i].checked == true) {
        if (first) {
          fieldHidden.value = fieldCheck[i].value;
          first = false;
        }
        else {
          fieldHidden.value += "#" + fieldCheck[i].value;
        }
      }
    }
  }
  if (fieldHidden.value != "") {
    ret = true;
  }
  return ret;
}

function redirectGlobalError(){
  var error =  document.getElementById('erro_conexao_crystal').value;
  window.location="opGlobalError.do?erro_conexao_crystal="+error;
}
// Inicia a função do objeto HttpRequest.
//window.onload = ajaxInit
