// JavaScript Document
//-------------------------------------------------funcoess   em fila
// JavaScript Document
//WELINTON ROCHA
//FUNCOES AJAX



//---------------------------VERIFICA E-MAIL

function validaEmail(email, nome, mail, assunto, msg)
{
	caminho = document.email
	
	if (nome == "" || nome.length < 5){
		alert("Preencha o campo Nome \n Ou o campo é muito pequeno");
		document.getElementById('nome').style.background = '#f7f7f7';
		caminho.nome.focus();
		return false;
		}
		
			
	if ( mail != "" ) //gambiarra
		{ 
			
			
			var cont_arroba = 0; // verifica se existe arroba @ na string
			var cont_tipo   = 0;
			for(i = 1; i <= mail.length; i++)
				{
					
					if (mail.substr( i, 1) != "@")
						{
							cont_arroba += 1;
							
						}
					if (mail.substr(i, 4) != ".com.br" && mail.substr(i, 4) != ".com" && mail.substr(i, 4) != ".net" && mail.substr(i, 4) != ".gov" && mail.substr(i, 4) != ".inf" )
						{
							cont_tipo += 1;
							
						}
				}
			
			if (cont_arroba >= mail.length || cont_tipo >= mail.length)
				{
					alert('e-mail inválido!');
					document.getElementById('email').style.background = '#f7f7f7';
					caminho.email.focus();
					
					return false;
				} // by carrilho - modificado tatinhu
		 
			
		}else {
			alert('E-mail em branco, por favor preencha seu E-mail.');
			document.getElementById('email').style.background = '#f7f7f7';
			caminho.email.focus();
			return false;
			}
			
			
		if (assunto == ""){
		alert("Preencha o campo Assunto");
		document.getElementById('assunto').style.background = '#f7f7f7';
		caminho.nome.focus();
		return false;
		}
		
		
		if (msg == ""){
		alert("Preencha o campo Mensagem");
		document.getElementById('msg').style.background = '#f7f7f7';
		caminho.nome.focus();
		return false;
		}
		
	//envia o  form
		paginaTroca = "email.php";
		//alert(paginaTroca);
		
	
		ajaxForm('centro', paginaTroca, 'email');
}




function validaForm(cadastro, nome, cfp, endereco, bairro, cidade, estado, cep, telefone, mail, login, senha1, senha2)
{
	caminho = document.cadastro
	
	if (nome == "" || nome.length < 5){
		alert("Preencha o campo Nome \n Ou o campo é muito pequeno");
		document.getElementById('nome').style.background = '#f7f7f7';
		caminho.nome.focus();
		return false;
		}
	if (cpf == "" || cpf.lenght < 8){
		alert("Preencha o campo CPF ou \n CPF muito curto");
		document.getElementById('cpf').style.background = '#f7f7f7';
		caminho.cpf.focus();
		return false;
		}
	if (endereco == "" || endereco.lenght < 5){
		alert("Preencha o campo Endereço ou \n Endereço muito curto");
		document.getElementById('endereco').style.background = '#f7f7f7';
		caminho.endereco.focus();
		return false;
		}
	if (bairro == "" || bairro.lenght < 3){
		alert("Preencha o campo Bairro ou \n Bairro muito curto");
		document.getElementById('bairro').style.background = '#f7f7f7';
		caminho.bairro.focus();
		return false;
		}
	if (cidade == "" || cidade.lenght < 3){
		alert("Preencha o campo Cidade ou \n Cidade muito curto");
		document.getElementById('cidade').style.background = '#f7f7f7';
		caminho.cidade.focus();
		return false;
		}
	if (estado == "") {
		alert("Preencha o campo estado ou \n Estado muito curto ou muito Grande \n Ex: SP, MT, RS, RJ");
		document.getElementById('estado').style.background = '#f7f7f7';
		caminho.estado.focus();
		return false;
		}
	if (cep == "") {
		alert("Preencha o CEP corretamente");
		document.getElementById('cep').style.background = '#f7f7f7';
		caminho.cep.focus();
		return false;
		}
	if (telefone == "" || telefone.lenght < 10){
		alert("Preencha o campo Telefone ou \n Telefone muito curto \n Formato correto: 11-xxxx-xxxx");
		document.getElementById('telefone').style.background = '#f7f7f7';
		caminho.telefone.focus();
		return false;
		}
	
	
	if ( mail != "" ) //gambiarra
		{ 
			
			
			var cont_arroba = 0; // verifica se existe arroba @ na string
			var cont_tipo   = 0;
			for(i = 1; i <= mail.length; i++)
				{
					
					if (mail.substr( i, 1) != "@")
						{
							cont_arroba += 1;
							
						}
					if (mail.substr(i, 4) != ".com.br" && mail.substr(i, 4) != ".com" && mail.substr(i, 4) != ".net" && mail.substr(i, 4) != ".gov" && mail.substr(i, 4) != ".inf" )
						{
							cont_tipo += 1;
							
						}
				}
			
			if (cont_arroba >= mail.length || cont_tipo >= mail.length)
				{
					alert('e-mail inválido!');
					document.getElementById('email').style.background = '#f7f7f7';
					caminho.email.focus();
					
					return false;
				} // by carrilho - modificado tatinhu
		 
			
		}else {
			alert('E-mail em branco, por favor preencha seu E-mail.');
			document.getElementById('email').style.background = '#f7f7f7';
			caminho.email.focus();
			return false;
			}
			
		if (login == "" || login.lenght < 6){
		alert("Preencha o campo Login ou \n Login muito curto \n Para sua segurança seu login deve ter mais que 6 digitos.");
		document.getElementById('login').style.background = '#f7f7f7';
		caminho.login.focus();
		return false;
		}
		if (senha1 == "" || senha1.lenght < 6){
		alert("Preencha o campo Senha ou \n Senha muito curta \n Para sua segurança sua senha deve ter mais que 6 digitos.");
		document.getElementById('senha1').style.background = '#f7f7f7';
		caminho.senha1.focus();
		return false;
		}
		if (senha2 == "" || senha2.lenght < 6){
		alert("Preencha o campo Re-Senha ou \n Re-Senha muito curta \n Para sua segurança sua Re-Senha deve ter mais que 6 digitos.");
		document.getElementById('senha2').style.background = '#f7f7f7';
		caminho.senha2.focus();
		return false;
		}
		if (senha1 != senha2){
		alert("Senha e Re-Senha não são iguais \n Preencha corretamente.");
		document.getElementById('senha1').style.background = '#f7f7f7';
		document.getElementById('senha1').value = '';
		document.getElementById('senha2').style.background = '#f7f7f7';
		document.getElementById('senha2').value = '';
		caminho.senha1.focus();
		return false;
		}
		
			
		//envia o  form
		paginaTroca = "inserecadastro.php";
		//alert(paginaTroca);
		
	
		ajaxForm('centro', paginaTroca, 'cadastro');
		
}



//FILE SERVIRÁ PARA FAZER VÁRIAS REQUISIÇÕES VIA AJAX PARA O SERVIDOR USANDO A MESMA
//FUNÇÃO 
//SEM ESTA FILE TIRIAMOS QUE CRIA FUNÇÕES SEPARADAS PARA CADA REQUISIÇÃO


//CONTROLE DA FILA
var ifila = 0
var fila = new Array(); 
//fila[X][0] - Div onde sera carregada a pagina
//fila[X][1] - Pagina que sera chamada
//fila[X][2] - Metodo de envio
//fila[X][3] - Campos do form concatenados no padrao para serem enviados. Null caso seja um link
//fila[X][4] - Valores alternativos para GET - 1 valor quando  naum tiver passa mais sem valor(em branco)
//fila[X][5] - nome da variavel que vai ser enviada ao  php


//INICIALIZA O OBJETO QUE IRA FAZER AS SOLICITACOES
try{
    xmlhttp = new XMLHttpRequest();// Mozilla, Safari, Firefox, etc...
    try {
        if (xmlhttp.overrideMimeType) {
            //forca o server a usa esse cabeçalho
            xmlhttp.overrideMimeType('text/xml');
        }
    } catch (e1) { }
}catch(e2){
    try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");// Internet Explorer
    }catch(e3){
        try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");// Internet Explorer
        }catch(e4){
            //tratamento para alguma outra forma de implementar XMLHTTP
            xmlhttp = false;
        }
    }
}
if (!xmlhttp){
    //Nao conseguiu instanciar o objeto xmlhttp para fazer as solicitacoes
    alert("Seu BrowSer(navegador) Não tem Suporte as tecnologias usadas nesta aplicação Favor entrar em contato com o Departamento de desenvolvimento. suporte@inovandodesign.com.br");
}



//GUARDA NA FILA O ID DO OBJETO, URL e CAMPOS ADD GET QUE SERAO CARREGADOS PELO LINK CLICADO
function ajaxLink(id_target,url,valorGET, variavelGET){
	
	//abre id_target 
	document.getElementById(id_target).style.display = 'inline';
	//Exibe mensagem de que esta carregando a pagina no objeto de ID informado
    ajaxMensagemCarregando(id_target);

    //Adiciona a solicitacao na fila
	if (!valorGET == "" && !variavelGET == "") {
		
    	fila[fila.length]=[id_target,url,"GET",null,valorGET, variavelGET];
	}else{
		
		fila[fila.length]=[id_target,url,"GET",null];
	}
    //Se nao tem conexoes na fila, inicia a execucao
    if(fila.length==1){
        ajaxRun();
    }
    return;
}



//GUARDA NA FILA O ID DO OBJETO E O FORM QUE SERAO CARREGADOS PELO LINK CLICADO
function ajaxForm(id_target, pagina, id_form){
    //Pega a pagina que sera chamada pelo form
    var url = pagina;
    //Busca metodo de envio definido no form
    var metodoEnvio = document.getElementById(id_form).method.toUpperCase();
    //Busca os elementos do form que serao enviados para a pagina solicitada
    var elementos_form = BuscaElementosForm(id_form);
	//alert(url);
	//alert(metodoEnvio);
	//alert(elementos_form);         // SEMPRE QUANDO  QUISER VER SE ESTA PASSANDO  OS VALORES CORRETAMENTE TIRE O  COMENTARIO

    //Exibe mensagem de que esta carregando a pagina no objeto de ID informado
    ajaxMensagemCarregando(id_target);

    //Adiciona a solicitacao na fila
    fila[fila.length]=[id_target,url,metodoEnvio,elementos_form];

    //Se nao tem conexoes na fila, inicia a execucao
    if(fila.length==1){
        ajaxRun();
    }
    return;
}



//EXECUTA A PROXIMA SOLICITACAO DA FILA
function ajaxRun(){
    var url = fila[ifila][1];

    //Define o metodo de envio (GET ou POST)
    var metodoEnvio;
    if (fila[ifila][3]==null){
        //Se for Link, utiliza GET
        metodoEnvio = "GET";
		if (fila[ifila][4] == "" || fila[ifila][4] == null) { // se for get simples
			url = url;
			
				}
		else { // se for get com variaveis de url
		url = url + "?"+fila[ifila][5]+"=" + fila[ifila][4];
		
		
		}
    }else{
        //Se for Form, define o metodo de envio e prepara a url
        metodoEnvio = fila[ifila][2];
        if (metodoEnvio=="" || metodoEnvio==null || metodoEnvio=="POST"){
            //Se nao tiver definido nada, usa POST
            metodoEnvio = "POST";
			//alert("oi");
        }
        
    }

    //Abre a conexao
    xmlhttp.open(metodoEnvio,url,true);

    //Seta as funcoes que irao tratar a mudanca de estado do objeto XMLHTTP
    xmlhttp.onreadystatechange=ajaxXMLHTTP_StateChange;

    //Executa a solicitacao
    if (metodoEnvio=="POST"){
        //Metodo POST precisa definir este RequestHeader
        xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        //Metodo POST passa as variaveis pelo metodo Send
        xmlhttp.send(fila[ifila][3]);
    }else{
        xmlhttp.send(null);
    }
    return;
}



//FUNCAO EXECUTADA QUANDO ALTERAR O STATUS DA SOLICITACAO (readyState)
function ajaxXMLHTTP_StateChange() {
    //0-Nao inicializado, 1-Carregando, 2-Carregado, 3-Interativo, 4-Completo
    if (xmlhttp.readyState==1){
        ajaxXMLHTTP_StateChange_Carregando(fila[ifila][0]);//Quando iniciar a solicitacao
    }else{
        if (xmlhttp.readyState==4){
            ajaxXMLHTTP_StateChange_Completo(xmlhttp, fila[ifila][0]);//Quando estiver completa a solicitacao
        }
    }
}



//FUNCAO EXECUTADA QUANDO INICIAR A SOLICITACAO (readyState=1)
function ajaxXMLHTTP_StateChange_Carregando(id){
    //Exibe mensagem de que está carregando a página no objeto de ID que solicitacao esta sendo feita
    ajaxMensagemCarregando(id);
    return;
}



//FUNCAO EXECUTADA QUANDO A SOLICITACAO ESTIVER COMPLETA (readyState=4)
function ajaxXMLHTTP_StateChange_Completo(xmlhttp, id){
    var retorno;

    //Verifica o status da pagina de retorno
    if (xmlhttp.status == 200 || xmlhttp.status==0) {
		
		//Caso o status seja 200(Sucesso) ou nao utilize servidor(chamada local [C:\...]), trata o valor retornado
        retorno=unescape(xmlhttp.responseText.replace(/\+/g," "));
		//fecha carregamento
		document.getElementById('carrega_carregando').style.display = 'none';
    }else{
        //Caso o status ainda nao foi tratado, chama a funcao de tratamento de pagina de erro
        retorno=ajaxPaginaErro(xmlhttp);
    }
    //Exibe o valor retornado no objeto de ID informado
    document.getElementById(id).innerHTML=retorno;
    // executa scripts
    ExtraiScript(retorno); 

    //passa para a proxima posicao da fila
    ifila++;
    if(ifila<fila.length){
        //Caso tenha mais solicitacoes na fila, executa a proxima
        setTimeout("ajaxRun()",20);
    }else{
        //Caso nao tenha mais solicitacoes na fila, reinicia a fila
        fila = null;
        fila = new Array();
        ifila = 0;
    }
    return;
}



//FUNCAO PARA RETORNAR A MENSAGEM DE ERRO QUANDO O SERVIDOR RETORNAR UMA PAGINA DE ERRO
function ajaxPaginaErro(xmlhttp){
    var retorno;
    switch (xmlhttp.status) {
        case 404:
            return "Página não encontrada!!!";
            break;
        case 500:
            return "Erro interno do servidor!!!";
            break;
        default:
            return "Erro desconhecido!!!<br>" + xmlhttp.status + " - " + xmlhttp.statusText.replace(/\+/g," ");
    }
}



//FUNCAO PARA RETORNAR A MENSAGEM DE QUE ESTA CARREGANDO A PAGINA
function ajaxMensagemCarregando(id){
    document.getElementById(id).innerHTML = "<div id=\"carrega_carregando\"style=\"background:#FFF; \"><center><br><br><br><br><br> Carregando página... </center></div>";
}

//FUNCAO PARA PEGAR OS CODIGOS SCRIPT
function ExtraiScript(texto){
    var ini, pos_src, fim, codigo, texto_pesquisa;
    var objScript = null;
    //Joga na variavel de pesquisa o texto todo em minusculo para na hora da pesquisa nao ter problema com case-sensitive
    texto_pesquisa = texto.toLowerCase()
    // Busca a primeira tag <script
    ini = texto_pesquisa.indexOf('<script', 0)
    // Executa o loop enquanto achar um <script
    while (ini!=-1){
        //Inicia o objeto script
        var objScript = document.createElement("script");

        //Busca se tem algum src a partir do inicio do script
        pos_src = texto_pesquisa.indexOf(' src', ini)
        // Define o inicio para depois do fechamento dessa tag
        ini = texto_pesquisa.indexOf('>', ini) + 1;

        //Verifica se este e um bloco de script ou include para um arquivo de scripts
        if (pos_src < ini && pos_src >=0){//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
            //Marca como sendo o inicio do nome do arquivo para depois do src
            ini = pos_src + 4;
            //Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
            fim = texto_pesquisa.indexOf('.', ini)+4;
            //Pega o nome do arquivo
            codigo = texto.substring(ini,fim);
            //Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
            codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
            // Adiciona o arquivo de script ao objeto que sera adicionado ao documento
            objScript.src = codigo;
        }else{//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script
            // Procura o final do script
            fim = texto_pesquisa.indexOf('</script>', ini);
            // Extrai apenas o script
            codigo = texto.substring(ini,fim);
            // Adiciona o bloco de script ao objeto que sera adicionado ao documento
            objScript.text = codigo;
        }

        //Adiciona o script ao documento
        document.body.appendChild(objScript);
        // Procura a proxima tag de <script
        ini = texto.indexOf('<script', fim);

        //Limpa o objeto de script
        objScript = null;
    }
}

//FUNCAO PARA PEGAR OS ELEMENTOS DO FORM
function BuscaElementosForm(idForm) {
    var elementosFormulario = document.getElementById(idForm).elements;
    var qtdElementos = elementosFormulario.length;
    var queryString = "";
    var elemento;

    //Cria uma funcao interna para concatenar os elementos do form
    this.ConcatenaElemento = function(nome,valor) { 
                                if (queryString.length>0) { 
                                    queryString += "&";
                                }
                                queryString += encodeURIComponent(nome) + "=" + encodeURIComponent(valor);
                             };

    //Loop para percorrer todos os elementos
    for (var i=0; i<qtdElementos; i++) {
        //Pega o elemento
        elemento = elementosFormulario[i];
        if (!elemento.disabled) {
            //Trabalha com o elemento caso ele nao esteja desabilitado
            switch(elemento.type) {
                //Realiza a acao dependendo do tipo de elemento
                case 'text': case 'password': case 'hidden': case 'textarea': 
                    this.ConcatenaElemento(elemento.name,elemento.value);
                    break;
                case 'select-one':
                    if (elemento.selectedIndex>=0) {
                        this.ConcatenaElemento(elemento.name,elemento.options[elemento.selectedIndex].value);
                    }
                    break;
                case 'select-multiple':
                    for (var j=0; j<elemento.options.length; j++) {
                        if (elemento.options[j].selected) {
                            this.ConcatenaElemento(elemento.name,elemento.options[j].value);
                        }
                    }
                    break;
                case 'checkbox': case 'radio':
                    if (elemento.checked) {
                        this.ConcatenaElemento(elemento.name,elemento.value);
                    }
                    break;
            }
        }
    }
    return queryString;
}

