﻿// JScript File
// Arquivo Javascript para validação do lado do cliente.

/* funcao que escreve o  balao. */
function EscreverBalao()
	{
	var stHTML = '';
	stHTML = '<div style="left: 165px; top: 138px; " id="balao_msg">';
	stHTML += '<div class="balao_top"><span></span></div>';
	stHTML += '<div class="balao_meio"><span id="balao_msg_conteudo"></span></div>';
	stHTML += '<div class="balao_baixo"></div>';
	stHTML += '</div>';
	document.write(stHTML);
	}

/* função que seta o evento submit da página */
function OnSubmitForm()
{
    var FormSubmit = window.document.forms[0];
    if (FormSubmit)
        {
            FormSubmit.onsubmit = function() {
                return ValidarTudo(document.forms[0]);
            }
        }
}
	
/*  função que valida todo o formulário */
function ValidarTudo(obForm)
    {
        var grupo;
        var Frm;
        var i,count;
        var result = eval(true);
        
        Frm = obForm;
        count = 0 ;
        i = 0;
        grupo = (arguments[1])? arguments[1] : 0;
        
        for(i=0;i<Frm.elements.length;i++)
        {
            // verifica somente os campos que tem o atributo erro e não esteja desabilitado
            if (Frm.elements[i].getAttribute('MensagemErro') && Frm.elements[i].disabled==false)
            {
                if (Frm.elements[i].getAttribute('Grupo') == grupo)
                {
                    if (!ValidarCampo(Frm.elements[i]))
                    {                    
                        result = eval(false);
                        count = i;
                    }
                }
             }       
        }    
        if (!result)
        { 
            MostrarErro(Frm.elements[count],'Campos em vermelho estão incorretos');
            return false;
        }else return true;
    }
/* função que valida cada objeto do formulário */
function ValidarCampo(obCampo)
{
    if (obCampo==null) return false;
    
    with (obCampo)
        {
            var stValor       = obCampo.value;
            var stExp         = getAttribute('regex');
            var stErro        = getAttribute('MensagemErro');
            var stObrigatorio = getAttribute('Obrigatorio');
        }
        
    if (stObrigatorio=="True")    
    {
        if (isEmpty(obCampo))
            {
                MostrarErro(obCampo,'Este campo é obrigatório');                
                return false;
            }        
    } 
    if ((ValidarTipo(stValor,stExp) == false) && (isEmpty(obCampo) == false))
    {   
        MostrarErro(obCampo);
        return false;
    } else {EsconderBalao(obCampo); return true;}
    obCampo = null;
}
/* valida o Tipo de campo com sua expressão */
function ValidarTipo(valor,expressao)
    {   
        var obRegex = eval(expressao);
        var rtn = obRegex.test(valor); 
        return rtn;
    }

/* funcao que mostra o erro ocorrido. */
function MostrarErro(obCampo)
    {
      var stMsgErro = '';
      // se recebeu o segundo argumento (msg de erro), utiliza este valor
      stMsgErro = (arguments[1]) ? arguments[1] : obCampo.getAttribute('MensagemErro');  
      document.getElementById('balao_msg_conteudo').innerHTML = stMsgErro;
      
      var obBalao = document.getElementById('balao_msg');
      with (obBalao.style)
           {
			display = 'block';
			left = PosicaoReal(obCampo,'Left') + obCampo.offsetWidth - obBalao.offsetWidth + 35 + 'px';
			top = PosicaoReal(obCampo,'Top') - obBalao.offsetHeight + 'px'; 
           }
      MudaCordoCampo(obCampo,true);
    }
    
/* MudaCordoCampo */    
function MudaCordoCampo(obCampo)
{
    obCampo.className = (arguments[1])? 'inputErro' : '';
}

/* Esconde o Balao   */
function EsconderBalao(obCampo)
    {
	  var obBalao = document.getElementById('balao_msg');	  	
	  obBalao.style.display = 'none';
      MudaCordoCampo(obCampo,false);
	}    

/* Retorna a posicao real do Campo */
function PosicaoReal(obElem, stAspecto) 
{
    var nmPosicao = 0;
    while (obElem!=null) {
    nmPosicao += obElem["offset" + stAspecto];
    obElem = obElem.offsetParent;
    }
    return nmPosicao;
}

/* Executa a função ao carregar o js */	
EscreverBalao();
