/*
 FUNÇÕES AJAX - 05-09-2006
 Diego Búrigo Zacarão 
*/

//Variável glogal 
var http_request = false;
var check = true;
var valid = true;


//Cria e retorna um objeto XMLHTTP (global)
function makeObjRequest(){

  var requestObj;

  if (window.XMLHttpRequest){ // se Firefox, Safari, ...
     requestObj  = new XMLHttpRequest()
     try {
        if (xmlhttp.overrideMimeType) {
            //Se possível, ignora cabecalho usado pelo servidor e forca o padrao "text/xml". Alguns navegadores exigem esse padrao e pode dar erro se o servidor nao utilizar ele
            xmlhttp.overrideMimeType('text/xml');
        }
     }catch (e){}
  }else if (window.ActiveXObject){ // se IE
     try {
     	requestObj  = new ActiveXObject("Msxml2.XMLHTTP")
     }catch (e){
       	try{
	   requestObj = new ActiveXObject("Microsoft.XMLHTTP")
	}catch (e){}
     }
  }

  if (!requestObj) {
     alert('Não foi possível criar uma instancia XMLHTTP');
     return false;
  }

  return(requestObj);
}




// Faz uma requisição usando o método GET
function makeGetRequest(url, div) {

   http_request = makeObjRequest();

   http_request.onreadystatechange = function(){
       showRequest(div)
   }
   http_request.open('GET', url, true);
   http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   http_request.send(null);

}





// Faz uma requisição usando o método POST
function makePostRequest(url, parameters, div) {
   
   http_request = makeObjRequest();

   http_request.onreadystatechange = function(){
       showRequest(div)
   }
   http_request.open('POST', url, true);
//xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8;");
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  http_request.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  http_request.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); 
  http_request.setRequestHeader("Pragma", "no-cache");
  http_request.setRequestHeader("encoding", "UTF-8");

   //http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   //http_request.setRequestHeader("Content-length", parameters.length); /* Esta opção dá problema no konquerror */
   http_request.setRequestHeader("Connection", "close");
   http_request.send(parameters);

}





// Mosta o resultado da requisição em um div
function showRequest(div) {
   document.getElementById(div).innerHTML = "<div id=\"carregando\">Carregando...</div>";

   if (http_request.readyState == 4) {
      if (http_request.status == 200) {
          result = http_request.responseText;
          document.getElementById(div).innerHTML = result;
 	  extraiScript(result);
      } else {
          document.getElementById(div).innerHTML = "";
          alert('Opss. Houve um problema com a requisição!');
      }
   }
}





// Varre um objeto do tipo form (formulário) e pega todos os campos e valores concatenando-os em uma variável
// ex:  "nome=Diego&idade=21"
function getObjForm(obj) {
   var string = "";
   var child = obj.firstChild;
   while(child) {
      if (child.nodeType == 1)
	 if (child.tagName == "INPUT" && child.type == "text")
	    string += (child.name + "=" + encodeURIComponent(child.value) + "&");
	 else if (child.tagName == "INPUT" && child.type == "hidden")
	    string += (child.name + "=" + encodeURIComponent(child.value) + "&");
	 else if (child.tagName == "INPUT" && child.type == "password")
	    string += (child.name + "=" + encodeURIComponent(child.value) + "&");
	 else if (child.tagName == "INPUT" && (child.type == "radio" || child.type == "checkbox") && child.checked )
	    string += (child.name + "=" + encodeURIComponent(child.value) + "&");
	 else if (child.tagName == "TEXTAREA")
	    string += (child.name + "=" + encodeURIComponent(child.value) + "&");
	 else if (child.tagName == "SELECT")
	    string += (child.name + "=" + encodeURIComponent(child.options[child.selectedIndex].value) + "&");
	 string += getObjForm(child);
	 child = child.nextSibling;
   }
   return string;
}






 function extraiScript(texto){
//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum
//http://forum.imasters.com.br/index.php?showtopic=165277&
    // inicializa o inicio ><
    var ini = 0;
    // loop enquanto achar um script
    while (ini!=-1){
        // procura uma tag de script
        ini = texto.indexOf('<script', ini);
        // se encontrar
        if (ini >=0){
            // define o inicio para depois do fechamento dessa tag
            ini = texto.indexOf('>', ini) + 1;
            // procura o final do script
            var fim = texto.indexOf('</script>', ini);
            // extrai apenas o script
            codigo = texto.substring(ini,fim);
            // executa o script
            //eval(codigo);
            /**********************
            * Alterado por Micox - micoxjcg@yahoo.com.br
            * Alterei pois com o eval não executava funções.
            ***********************/
            novo = document.createElement("script")
            novo.text = codigo;
            document.body.appendChild(novo);
        }
    }
}








// Faz uma chamada de submit para o formulário de cadastro de Empresas
function submitFormEmpresa(obj, url, div) {
   
// Variáveis de controle Globais
   check = true;
   valid = true;
   end   = true;

// Campos que devem serem preenchidos
   validaFormValor('nome');
   validaFormValor('apelido');
   validaFormValor('numero');
   validaFormValor('senha');
   validaFormValor('senha2');
   validaFormValor('email');
   validaFormValor('fone_trab'); 
   validaFormValor('end_estado');
   validaFormValor('end_cidade');
   validaFormValor('end_bairro');
   validaFormValor('end_rua');


// Campos que devem ser validados   
   if(check==true && valid==true) doCNPJ('numero');
   if(check==true && valid==true) senhaIgual('senha', 'senha2');
   if(check==true && valid==true) doEmail('email');



   if(check==true){ // se nao estiver campo obrigatorios nao preenchidos
     if(end==true){ 
        if(valid==true){ // se validações ok (e-mail, cpf, cnpj)  
           var parameters = getObjForm(obj);
           makePostRequest(url, parameters, div);
           //document.getElementById('feedback').style.visibility = 'visible';	
        }
     }else{ 
	alert("Ao preencher os campos do endereço é necessário que se escolha uma opção no menu flutuante que aparece em cada campo.");
     }
   }else{
      alert("Há campo(s) obrigatorio(s) não preenchido(s)!");
   }
   
}





// Faz uma chamada de submit para o formulário de cadastro de clientes
function submitFormAcademico(obj, url, div) {
   
// Variáveis de controle Globais
   check = true;
   valid = true;

// Campos que devem ser preenchidos
   validaFormValor('area_curso');
   validaFormValor('area_pretendente');
   validaFormValor('matricula');
   validaFormValor('nome');
   validaFormValor('cpf');
   validaFormValor('senha');
   validaFormValor('senha2');
   validaFormValor('rg');
   validaFormValor('nascimento');
   validaFormValor('sexo');
   validaFormValor('nacionalidade');
   validaFormValor('estado_civil');
   validaFormValor('escolaridade');
   validaFormValor('residir_fora');
   validaFormValor('fone_casa');
   validaFormValor('email');
   validaFormValor('pai');
   validaFormValor('mae');
   validaFormValor('end_estado');
   validaFormValor('end_cidade');
   validaFormValor('end_bairro');
   validaFormValor('end_rua');
   validaFormValor('trabalhando');
   validaFormValor('min_aceitavel');
   validaFormValor('interesse1');
   validaFormValor('interesse2');
   validaFormValor('interesse3');
   validaFormValor('perfil_profissional');
   validaFormValor('end_estado');


   validaFormEndereco('cod_end_cidade');
   validaFormEndereco('cod_end_bairro');
   validaFormEndereco('cod_end_rua');


// Campos que devem ser validados
   //if(check==true && valid==true) doCPF('cpf');
   if(check==true && valid==true) doCPF('cpf');
   if(check==true && valid==true) senhaIgual('senha', 'senha2');
   if(check==true && valid==true) doDate('nascimento');
   if(check==true && valid==true) doEmail('email');


   if(check==true){ // se nao estiver campo obrigatorios nao preenchidos
      if(valid==true){ // se validações ok (e-mail, cpf, cnpj)  
         var parameters = getObjForm(obj);
         makePostRequest(url, parameters, div);	
      }
   }else{
      alert("Há campo(s) obrigatorio(s) não preenchido(s)!");
   }
   
}





// Faz uma chamada de submit para o formulário de cadastro de Eventos
function submitFormEvento(obj, url, div) {
   
// Variáveis de controle Globais
   check = true;

// Campos que devem ser preenchidos
   validaFormValor('descricao');
   validaFormValor('inicial');
   validaFormValor('final');
   validaFormValor('ligacoes');
    
   if(check==true){
      var parameters = getObjForm(obj);
      makePostRequest(url, parameters, div);	
   }else{
      alert("Há campo(s) obrigatorio(s) não preenchido(s)!");
   }
}


// Faz uma chamada de submit para o formulário de cadastro de Eventos
function submitFormLogin(obj, url, div) {
   
// Variáveis de controle Globais
   check = true;

// Campos que devem ser preenchidos
   validaFormValor('numero');
   validaFormValor('senha');
    
   if(check==true){
     // var parameters = getObjForm(obj);
     // makePostRequest(url, parameters, div);	
     //obj.submit();
     obj.submit();
     
   }else{
      alert("Os campos CPF/CNPJ e Senha são obrigatorios!");
   }
}



// Faz uma chamada de submit para o formulário de cadastro de Eventos
function submitFormLembrar(obj, url, div) {
   
// Variáveis de controle Globais
   check = true;

// Campos que devem ser preenchidos
   validaFormValor('numero');

     if(check==true){ // se nao estiver campo obrigatorios nao preenchidos
           var parameters = getObjForm(obj);
           makePostRequest(url, parameters, div);	
        }else{
           alert("Preencha o campo com seu CPF ou CNPJ!");
        }

}




// Faz uma chamada de submit para o formulário de cadastro de Eventos
function contatarAluno(url, div){
   
     checagem = confirm("Você está prestes a contatar um aluno para uma futura intrevista.\n Deseja continuar?");

     if(checagem==true){ // se nao estiver campo obrigatorios nao preenchidos

           makeGetRequest(url, div);	

     }

}






function submitFormConsulta(obj, url, div){

// Variáveis de controle Globais
   check = true;

// Campos que devem ser preenchidos
   validaFormValor('tipo');
   validaFormValor('area_pretendente');
   validaFormValor('salario');
   validaFormValor('sexo');
    
   if(check==true){
      var parameters = getObjForm(obj);
      makePostRequest(url, parameters, div);	
   }else{
      alert("Há campo(s) obrigatorio(s) não preenchido(s)!");
   }

}





// Observa se um dado campo está preenchido
function senhaIgual(child, child2){

   var valor1 = document.getElementById(child).value;
   var valor2 = document.getElementById(child2).value;

   if(valor1 != valor2){
	alert("Senha não confere. Digite novamente!");
        document.getElementById(child).value="";
        document.getElementById(child2).value="";
	document.getElementById(child).focus();
        valid = false;
   }
}


// Observa se um dado campo está preenchido
function validaFormValor(child){

   if(document.getElementById(child).value == "") {
      document.getElementById(child).style.border = '1px solid red';
      if(check==true) document.getElementById(child).focus(); // se não há campo anterior não preenchido, seta o foco
      check = false;
   }else{
      document.getElementById(child).style.border = '1px solid #c3bdb4';
   }

}



// Observa se um dado campo está preenchido (Cadastro de endereço)
function validaFormEndereco(child){

   var field = child.replace(/cod_/g,"");

   if(document.getElementById(child).value == "") {
      document.getElementById(field).style.border = '1px solid red';
      document.getElementById(field).value = "";
      if(check==true) document.getElementById(field).focus(); // se não há campo anterior não preenchido, seta o foco
      check = false;
   }else{
      document.getElementById(field).style.border = '1px solid #c3bdb4';
   }

}



function mudouEndereco(child){


     if(child.name=="end_estado"){
      	document.getElementById('cod_end_cidade').value = "";
      	document.getElementById('end_cidade').value = "";
     }

     if(child.name=="end_cidade" || child.name=="end_estado"){
	document.getElementById('cod_end_bairro').value = "";
	document.getElementById('end_bairro').value = "";
     }

	document.getElementById('cod_end_rua').value = "";
	document.getElementById('end_rua').value = "";


}




// Valida datas no formato DD/MM/AAAA
function doDate(child){
  
  var reDate = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/; // DD/MM/AAAA
  var valor = document.getElementById(child).value;
  
  if (!reDate.test(valor)){
     if (valor != null && valor != "") {
	alert("Data inválida. "+ valor);
        document.getElementById(child).value="";
        document.getElementById(child).style.border = '1px solid red';
	document.getElementById(child).focus();
        valid = false;
     }
  }else{
        document.getElementById(child).style.border = '1px solid #c3bdb4';
  }
}





// Valida e-mail
function doEmail(child){
 
  var reEmail = /^\w+([\._-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
  var valor = document.getElementById(child).value;

  if (!reEmail.test(valor)){
     if (valor != null && valor != "") {
	alert("Favor informe um e-mail válido.");
        document.getElementById(child).value="";
        document.getElementById(child).style.border = '1px solid red';
        document.getElementById(child).focus();
        valid = false;
     }
  }else{
        document.getElementById(child).style.border = '1px solid #c3bdb4';
  }
}





// Valida CPF
function doCPF(child){

  var valor = document.getElementById(child).value;

  if (!isCpf(valor)){
     if (valor != null && valor != "") {
	alert("Favor informe um CPF válido.");
        document.getElementById(child).value="";
        document.getElementById(child).style.border = '1px solid red';
        document.getElementById(child).focus();
        valid = false;
     }
  }else{
        document.getElementById(child).style.border = '1px solid #c3bdb4';
  }
}







// Valida CNPJ
function doCNPJ(child){

  var valor = document.getElementById(child).value;

  if (!isCnpj(valor)){
     if (valor != null && valor != "") {
	alert("Favor informe um CNPJ válido.");
        document.getElementById(child).value="";
        document.getElementById(child).style.border = '1px solid red';
        document.getElementById(child).focus();
        valid = false;
     }
  }else{
      document.getElementById(child).style.border = '1px solid #c3bdb4';
  }
}


