/**
 * $Id: nm_dig_main.js,v 1.7 2009-10-30 19:27:08 sergio Exp $
 */
//<script language=JavaScript>

var nm_Ident = "NetMake - Solucoes em Informatica Ltda (www.netmake.com.br)" ;

var nmdg_nav = ""         ;  // navegador
var nmdg_linux = -1       ;  // Identificador de operacao no Linux
var nmdg_validar = ""     ;  // Identificador dos Browsers que validam no ONblur
var nmdg_Form = ""        ;  // Formulario
var nmdg_Campo = ""       ;  // Nome do Campo no formulario
var nmdg_Label = ""       ;  // Label do Campo no formulario
var nmdg_Tab = ""         ;  // Flag tabulação: 0 = não tabula ; 1 = tabula
var nmdg_TipoCampo = ""   ;  // Tipo do campo
var nmdg_NumInteiros = 0  ;  // Quantidade de Inteiros / Tipo da Data / Caixa Alta/Baixa ou Obj Rádio
var nmdg_NumDecimais = 0  ;  // Quantidade de decimais / Número máximo de Caracteres / Ano mínimo
var nmdg_ValMin = ""      ;  // Valor Mínimo a ser informado / Ano máximo / Caracteres Adicionais
var nmdg_ValMax = 0       ;  // Valor Máximo a ser informado
var nmdg_SepDate = "/"    ;  // Separador de datas
var nmdg_SepTime = ":"    ;  // Separador de horas
var nmdg_enter_tab = false;  // Define se utiliza o "enter" como "tab"

var nmdg_tipo_crit = "3"          ;
var nmdg_tipo_format = "1"        ;
var nmdg_mens_crit = ""           ;
var nmdg_ValOriginal = ""         ;
var nmdg_ValEditado = ""          ;
var nmdg_ValNaoEditado = ""       ;
var nmdg_simb_grupo = "."         ;
var nmdg_simb_grupo_format = "."  ;
var nmdg_simb_dec = ","           ;
var nmdg_Monta_Data = ""          ;
var nmdg_Monta_DataX = ""         ;
var nmdg_Monta_Hora = ""          ;
var nmdg_Monta_HoraX = ""         ;
var nmdg_TipoCart = ""            ;
var nmdg_ValorCampo = ""          ;
var nmdg_ValorSalvo = ""          ;
var nmdg_Focus_Set = 0            ;
var nmdg_Virgula = 0              ;
var nmdg_Negativo = 0             ;
var nmdg_Ponto = 0                ;
var nmdg_lixo = ""                ;
var nmdg_SeguraTecla = 0          ;
var nmdg_Controla_Evento = ""     ;
var nmdg_Cod_Tecla = 0            ;
var nmdg_Carater = ""             ;
var nmdg_Tecla_num = 0            ;
var nmdg_Alfabeto = "abcdefghijklmnopqrstuvwxyz"  ;
var nmdg_Numeros = "0123456789"   ;
var nmdg_Acentos = "àáãéêíóõúü"   ;
var nmdg_Car_Adicionais = ""      ;
var nmdg_Car_Texto = ""           ;
var nmdg_Car_Caixa = ""           ;
var nmdg_Car_Max = 0              ;
var nmdg_Radio = ""               ;
var nmdg_Mascara = ""             ;
var Xfocus = ""                   ;
var nm_dtm = ""                   ;
var nm_dta = ""                   ;
var nm_dtv = ""                   ;
var nmdg_Confirm   = ""           ;
var nm_tecla_ctrl  = false        ;
var nm_cod_barra   = false        ;
var nm_tecla_enter = false        ;

//------------ Arma captura dos eventos em funcao do navegador
   nmdg_nav = navigator.appName  ;
   if (nmdg_nav.substr(0, 9) == "Microsoft")
   {
       nmdg_nav  = "Microsoft" ;
   }
   nmdg_ver = navigator.appVersion.substr(0,1)  ;
   nmdg_linux = navigator.appVersion.lastIndexOf("Linux")  ;
   if (nmdg_linux != -1)
   {
       nmdg_linux = "s" ;
   }
   if (nmdg_nav == "Microsoft" || nmdg_nav == "Netscape" || nmdg_nav == "Opera")
   {
       nmdg_validar =  1 ;
   }

   if (nmdg_nav == "Netscape")
   {
       document.captureEvents(Event.KEYPRESS);
       document.onkeypress        =      TestaValorDown;
       document.captureEvents(Event.KEYUP);
       document.onkeyup          =       NM_onkeyup;
       if (nmdg_ver < 5)
       {
           document.captureEvents(Event.BLUR);
           document.onblur           =       NM_onblur;
       }
   }
   if (nmdg_nav == "Microsoft")
   {
       document.attachEvent("onkeydown",  TestaValorDown) ;
       document.attachEvent("onkeyup",    NM_onkeyup)     ;
   }

//-------------- Define nível de critica
//   0 = sem critica
//   1 = só digitação (Campos numéricos e tamanho dos campos)
//   2 = Critica com obrigação de acerto (alert)
//   3 = Critica com opção de acerto ()confirm)
function NM_tp_critica(TP)
{
    if (TP == 0 || TP == 1 || TP == 2)
    {
        nmdg_tipo_crit = TP;
    }
}

//-------------- Define tipo de formatação (0 = sem formatação, 1 = com formatação)
function NM_tp_format(TP)
{
    if (TP == 0 || TP == 1)
    {
        nmdg_tipo_format = TP;
    }
}

//-------------- Trata evento ONFOCUS
function NM_onfocus(F, C, L, Tab, Msk, T, I, D, VM, VX, SGr, SDe)
{
/* proteção para bug do firefox com jquery */
   if (nmdg_nav == "Netscape")
   {
       document.captureEvents(Event.KEYUP);
       document.onkeyup          =       NM_onkeyup;
    }
/*---*/
    
    if (F == "")
    {
        alert (Nm_erro["lang_jscr_msfr"]) ;
        return false ;
    }
    if (C == "")
    {
        alert (Nm_erro["lang_jscr_msob"]) ;
        return false ;
    }
    nmdg_Tab = Tab;
    nmdg_Mascara = "";
    teste_tp = T.toUpperCase();
    if (Msk != "naomask")
    {
        nmdg_Mascara = Msk;
        if ((teste_tp == "NUMERO" || teste_tp == "NUMEROEDT" || teste_tp == "NUMEROEDTVG" || teste_tp == "LISTA" || teste_tp == "ALFA" || teste_tp == "ALFANUM") && nmdg_Mascara.indexOf("#") != -1)
        {
            T = "NUMMASK";
        }
    }
    if (teste_tp == "NUMERO" && SGr != null && SGr != "")
    {
        T = "NUMEROEDT";
    }
    if (nmdg_tipo_format == 0)
    {
        nmdg_Mascara = "";
    }
    if (T == null)
    {
        nmdg_TipoCampo = "" ;
        return true ;
    }
    if (nmdg_Controla_Evento != "" &&  nmdg_Controla_Evento != C)
    {
        Xfocus = setTimeout("NM_focus()", 10) ;
        return false ;
    }
    Inicializa_campos(F, C, L, T, I, D, VM, VX, SGr, SDe);

    nmdg_Controla_Evento = "" ;

    //mudado por diogo para colocar forms e elements
    //devido a problema com javascript
    //2006/07/12
    //var Xblur = "" ;
    //if (nmdg_nav == "Microsoft")
    //{
        //Xblur = eval (nmdg_Form + '.' + nmdg_Campo + '.attachEvent("onblur", NM_onblur )') ;
    //}
    //if (nmdg_nav == "Netscape")
    //{
        //if (nmdg_ver > 4)
        //{
            //Xblur = eval ('document.' + nmdg_Form + '.' + nmdg_Campo + '.onblur = NM_onblur') ;
        //}
    //}

    if (nmdg_nav == "Microsoft")
    {
        //Xblur = document.forms[nmdg_Form].elements[nmdg_Campo].attachEvent("onblur", NM_onblur );
    }
    if (nmdg_nav == "Netscape")
    {
        if (nmdg_ver > 4)
        {
                //Xblur = document.forms[nmdg_Form].elements[nmdg_Campo].onblur = NM_onblur;
        }
    }
    nmdg_SeguraTecla = 0 ;

    switch (nmdg_TipoCampo)
    {
        case 'VALOR':
            DesformataValor("crit") ;
            break;
        case 'NUMERO':
            NM_lercampo() ;
            if (nmdg_Mascara != "")
            {
                NM_tira_mask(nmdg_ValorCampo);
                nmdg_ValorCampo = nmdg_ValNaoEditado;
            }
            nmdg_ValOriginal = nmdg_ValorCampo;
            NM_select() ;
            break;
        case 'NUMEROEDT':
            if (nmdg_Mascara != "")
            {
                DesformataMask() ;
            }
            else
            {
                DesformataValor("crit") ;
            }
            break;
        case 'CIC':
            nmdg_NumDecimais = 0 ;
            Onfocus_CIC() ;
            break;
        case 'CNPJ':
            nmdg_NumDecimais = 0 ;
            Onfocus_CNPJ() ;
            break;
        case 'CICCNPJ':
            nmdg_NumDecimais = 0 ;
            Onfocus_CICCNPJ() ;
            break;
        case 'DATA':
            nmdg_NumDecimais = 0 ;
            Onfocus_Data() ;
            break;
        case 'HORA':
            nmdg_NumDecimais = 0 ;
            Onfocus_Hora() ;
            break;
        case 'CEP':
            nmdg_NumDecimais = 0 ;
            Onfocus_CEP() ;
            break;
        case 'CARTAO':
            Onfocus_CARTAO() ;
            break;
       case 'ALFA':
            Onfocus_ALFA() ;
            break;
        case 'ALFANUM':
            Onfocus_ALFA() ;
            break;
        case 'LISTA':
            Onfocus_ALFA() ;
            break;
        case 'EMAIL':
            Onfocus_ALFA() ;
            break;
        case 'NUMMASK':
            break;
        default :
            return false;
    }
}
//---
function Inicializa_campos(F, C, L, T, I, D, VM, VX, SGr, SDe)
{
    nmdg_simb_grupo = ".";
    nmdg_simb_dec   = ",";
    nmdg_Form  = F;
    nmdg_Campo = C;
    nmdg_Label = L;
    nmdg_TipoCampo = T.toUpperCase();
    nm_cod_barra   = false;
    nm_tecla_enter = false;
    if (nmdg_TipoCampo.substr(0, 4) == "BAR_")
    {
        nmdg_TipoCampo = nmdg_TipoCampo.substr(4);
        nm_cod_barra   = true;
    }
    if (nmdg_TipoCampo == "DATA")
    {
        if (null != VX)
        {
            nmdg_SepDate = VX;
        }

        nmdg_Monta_Data = I.toUpperCase()  ;
        nmdg_Monta_DataX = nmdg_Monta_Data.replace(nmdg_SepDate, "");
        nmdg_Monta_DataX = nmdg_Monta_DataX.replace(nmdg_SepDate, "");
        if (D == null)
        {
            nmdg_ValMin = 0 ;
        }
        else
        {
            nmdg_ValMin = D ;
        }
        if (VM == null)
        {
            nmdg_ValMax = 0 ;
        }
        else
        {
            nmdg_ValMax = VM ;
        }
     }
    if (nmdg_TipoCampo == "HORA")
     {
        if (null != D)
        {
            nmdg_SepTime = D;
        }

        nmdg_Monta_Hora = I.toUpperCase()  ;
        nmdg_Monta_HoraX = nmdg_Monta_Hora.replace(nmdg_SepTime , "")  ;
        nmdg_Monta_HoraX = nmdg_Monta_HoraX.replace(nmdg_SepTime , "") ;
        nmdg_Monta_HoraX = nmdg_Monta_HoraX.replace(nmdg_SepTime , "") ;
    }
    if (nmdg_TipoCampo.substr(0, 5) == "TEXTO")
    {
        nmdg_Car_Texto = nmdg_TipoCampo.substr(5) ;
        nmdg_TipoCampo = "ALFANUM" ;
    }
    else
    {
        nmdg_Car_Texto = "" ;
    }
    if (nmdg_TipoCampo == "ALFA" || nmdg_TipoCampo == "ALFANUM" || nmdg_TipoCampo == "LISTA")
    {
        if (I == null)
        {
            nmdg_Car_Caixa = "CXAB" ;
        }
        else
        {
            nmdg_Car_Caixa = I ;
        }
        if (D == null)
        {
           nmdg_Car_Max = 9999 ;
        }
        else
        {
           nmdg_Car_Max = D ;
        }
        if (VM == null)
        {
            nmdg_Car_Adicionais = "" ;
        }
        else
        {
            nmdg_Car_Adicionais = VM ;
        }
    }
    if (nmdg_TipoCampo == "EMAIL")
    {
        if (I == null)
        {
            nmdg_Car_Max = 40 ;
        }
        else
        {
            nmdg_Car_Max = I ;
        }
    }
    if (nmdg_TipoCampo == "CIC" || nmdg_TipoCampo == "CNPJ")
    {
        nmdg_Radio = "" ;
    }
    if (nmdg_TipoCampo == "CICCNPJ")
    {   if (I == null)
        {
            nmdg_Radio = "" ;
        }
        else
        {
            nmdg_Radio = I ;
            if (document.forms[nmdg_Form].elements[nmdg_Radio][0].checked)
            {
                nmdg_TipoCampo = "CIC" ;
            }
            else
            {
                nmdg_TipoCampo = "CNPJ" ;
            }
        }
    }
    if (nmdg_TipoCampo == "VALOR" ||  nmdg_TipoCampo == "VALORVG" || nmdg_TipoCampo == "SVALOR" ||  nmdg_TipoCampo == "SVALORVG")
    {
        nmdg_NumInteiros = parseInt(I)    ;
        nmdg_NumDecimais = parseInt(D)    ;
        if (isNaN(nmdg_NumInteiros) )
        {
            nmdg_NumInteiros = 0 ;
        }
        if (isNaN(nmdg_NumDecimais) )
        {
            nmdg_NumDecimais = 0 ;
        }
        if (isNaN(parseFloat(VM)) )
        {
            nmdg_ValMin = 0 ;
        }
        else
        {
            nmdg_ValMin = parseFloat(VM) ;
        }
        if (isNaN(parseFloat(VX)) )
        {
            nmdg_ValMax = 0 ;
        }
        else
        {
            nmdg_ValMax = parseFloat(VX) ;
        }
        if (nmdg_TipoCampo == "SVALOR")
        {
            nmdg_simb_grupo_format = "" ;
            nmdg_TipoCampo = "VALOR" ;
        }
        if (nmdg_TipoCampo == "VALORVG" || nmdg_TipoCampo == "SVALORVG")
        {
            nmdg_simb_grupo = "," ;
            nmdg_simb_grupo_format = "," ;
            nmdg_simb_dec = "." ;
            if (nmdg_TipoCampo == "SVALORVG")
            {
                nmdg_simb_grupo_format = "" ;
            }
            nmdg_TipoCampo = "VALOR" ;
        }
        if (null != SGr)
        {
            nmdg_simb_grupo = SGr;
            nmdg_simb_grupo_format = SGr;
        }
        if (null != SDe)
        {
            nmdg_simb_dec = SDe;
        }
    }
    if (nmdg_TipoCampo == "NUMERO" || nmdg_TipoCampo == "NUMEROEDT" || nmdg_TipoCampo == "NUMEROEDTVG")
    {
        nmdg_NumInteiros = parseInt(I)    ;
        nmdg_NumDecimais = 0    ;
        if (isNaN(nmdg_NumInteiros) )
        {
            nmdg_NumInteiros = 0 ;
        }
        if (isNaN(parseFloat(D)) )
        {
            nmdg_ValMin = 0 ;
        }
        else
        {
            nmdg_ValMin = parseFloat(D) ;
        }
        if (isNaN(parseFloat(VM)) )
        {
            nmdg_ValMax = 0 ;
        }
        else
        {
            nmdg_ValMax = parseFloat(VM) ;
        }
        if (nmdg_TipoCampo == "NUMEROEDTVG")
        {
            nmdg_simb_grupo = "," ;
            nmdg_simb_dec   = "." ;
            nmdg_TipoCampo  = "NUMEROEDT" ;
        }
        if (null != VX)
        {
            nmdg_simb_grupo = VX;
            nmdg_simb_grupo_format = VX;
            if (',' == nmdg_simb_grupo)
            {
                nmdg_simb_dec = '.';
            }
        }
    }
    if (nmdg_TipoCampo == "CARTAO")
    {
        nmdg_TipoCart = "" ;
        if (I != null && isNaN(parseInt(I)) )
        {
            nmdg_TipoCart = I.toUpperCase() ;
        }
    }
}

//-------------- Trata evento KEYUP
function NM_onkeyup(T)
{
    if (nmdg_linux == "s" || nmdg_tipo_crit == 0 || nmdg_TipoCampo == "NUMMASK")
    {
        return true;
    }
    if (nmdg_nav == "Netscape" && nmdg_ver > 4 && T.eventPhase  != 3) //mudado de 2 para 3 em 05/12/2006
    {
        return true;
    }
    if (nmdg_TipoCampo == "")
    {
        return true ;
    }
    if (nmdg_TipoCampo == "ALFA" || nmdg_TipoCampo == "ALFANUM" || nmdg_TipoCampo == "LISTA" || nmdg_TipoCampo == "EMAIL")
    {
        nmdg_SeguraTecla = 0 ;
        nmdg_Focus_Set = 0 ;
        if (nmdg_ValorSalvo.length == nmdg_Car_Max)
        {
            NM_lercampo() ;
            if (nmdg_ValorCampo.length > nmdg_Car_Max)
            {
                NM_escreve(nmdg_ValorSalvo) ;
            }
        }
        return true ;
    }
    if (nmdg_Tecla_num == 0 )
    {
        nmdg_SeguraTecla = 0 ;
        return true ;
    }

    if (nmdg_SeguraTecla == 0 && nmdg_nav == "Netscape")
    {
        nmdg_Cod_Tecla = T.which ;
        if (nmdg_Cod_Tecla == 0 || nmdg_Cod_Tecla == 9)
        {
            nmdg_Focus_Set = 0 ;
            return true ;
        }
    }
    if (nmdg_SeguraTecla == 0 )    // Controla Teclado
    {
        return false ;
    }
    if (nmdg_TipoCampo != 'VALOR' )
    {
        nmdg_SeguraTecla = 0 ;
        return true ;
    }

    switch (nmdg_TipoCampo)
    {
        case 'VALOR':
            TestaValorUp() ;
            break;
        case 'CIC':
            TestaCICup() ;
            break;
        case 'CNPJ':
            TestaCNPJup() ;
            break;
        case 'DATA':
            TestaDataup() ;
            break;
        case 'HORA':
            TestaHoraup() ;
            break;
        case 'CEP':
            TestaCEPup() ;
            break;
        default :
            nmdg_SeguraTecla = 0  ;
            return true;
    }
}

//-------------- Trata evento Onblur
function NM_onblur()
{
    nmdg_Confirm     = "" ;
    nmdg_SeguraTecla = 0 ;
    if (nmdg_TipoCampo == "" || nmdg_TipoCampo == "NUMMASK")
    {
        return ;
    }
    if (nmdg_Controla_Evento != "")
    {
        return ;
    }

    switch (nmdg_TipoCampo)
    {
        case 'VALOR':
            NM_lercampo();
            DesformataValor("blur") ;
            nmdg_ValorCampo = nmdg_ValNaoEditado;
            FormataValor() ;
            break;
        case 'NUMERO':
            FormataValor() ;
            break;
        case 'NUMEROEDT':
            FormataValor() ;
            break;
        case 'CIC':
            TestaCICblur() ;
            break;
        case 'CNPJ':
            TestaCNPJblur() ;
            break;
        case 'CICCNPJ':
            TestaCICCNPJblur() ;
            break;
        case 'DATA':
            TestaDatablur() ;
            break;
        case 'HORA':
            TestaHorablur() ;
            break;
        case 'CEP':
            TestaCEPblur() ;
            break;
        case 'CARTAO':
            TestaCartaoblur() ;
            break;
        case 'ALFA':
            TestaAlfablur() ;
            break;
        case 'ALFANUM':
            TestaAlfablur() ;
            break;
        case 'LISTA':
            TestaAlfablur() ;
            break;
        case 'EMAIL':
            TestaEmailblur() ;
            break;
        default :
            nmdg_TipoCampo == "" ;
    }
}

//------------ Formatação de Mascara generica
function NM_gera_mask(nmdg_mask_dados)
{
    nmdg_mask_mask  = nmdg_Mascara;
    nmdg_mask_tam_dados  = nmdg_mask_dados.length;
    nmdg_mask_saida = "";
    for (nmdg_mask_ind = nmdg_mask_mask.length; nmdg_mask_ind > 0; nmdg_mask_ind--)
    {
         nmdg_mask_char = nmdg_mask_mask.substr(nmdg_mask_ind - 1, 1);
         if (nmdg_mask_char != "x" && nmdg_mask_char != "z")
         {
             nmdg_mask_saida = nmdg_mask_char + nmdg_mask_saida;
         }
         else
         {
             if (nmdg_mask_tam_dados != 0)
             {
                 nmdg_mask_saida = nmdg_mask_dados.substr(nmdg_mask_tam_dados - 1, 1) + nmdg_mask_saida;
                 nmdg_mask_tam_dados--;
             }
             else
             {
                 nmdg_mask_saida = "0" + nmdg_mask_saida;
             }
         }
    }
    if (nmdg_mask_tam_dados != 0)
    {
        nmdg_mask_saida = nmdg_mask_dados.substr(0, nmdg_mask_tam_dados) + nmdg_mask_saida;
        for (nmdg_mask_ind = 0; nmdg_mask_ind < nmdg_mask_tam_dados; nmdg_mask_ind++)
        {
             nmdg_mask_mask  = "z" + nmdg_mask_mask;
        }
    }
    nmdg_mask_z = 0;
    for (nmdg_mask_ind = 0; nmdg_mask_ind < nmdg_mask_mask.length; nmdg_mask_ind++)
    {
         nmdg_mask_char = nmdg_mask_mask.substr(nmdg_mask_ind, 1);
         if (nmdg_mask_char != "x" && nmdg_mask_char != "z")
         {
             if (nmdg_mask_char == "." || nmdg_mask_char == ",")
             {
                 nmdg_mask_saida = nmdg_mask_saida.substr(0, nmdg_mask_z) + nmdg_mask_saida.substr(nmdg_mask_z + 1);
             }
             else
             {
                 nmdg_mask_z++;
             }
         }
         else
         {
             if (nmdg_mask_char == "x" || nmdg_mask_saida.substr(nmdg_mask_z, 1) != 0)
             {
                 nmdg_mask_ind = nmdg_mask_mask.length++;
             }
             else
             {
                 nmdg_mask_saida = nmdg_mask_saida.substr(0, nmdg_mask_z) + nmdg_mask_saida.substr(nmdg_mask_z + 1);
             }
         }
    }
    nmdg_ValEditado = nmdg_mask_saida;
    nmdg_Mascara = "";
}
function NM_tira_mask(nmdg_mask_dados)
{
    nmdg_mask_mask      = nmdg_Mascara;
    nmdg_mask_tam_dados = nmdg_mask_dados.length;
    nmdg_mask_tam_mask  = nmdg_mask_mask.length;

/*  -- rotina nova criada em 14/12/2005 */
    nmdg_mask_saida = nmdg_mask_dados;
    for (nmdg_mask_ind = 0; nmdg_mask_ind < nmdg_mask_tam_mask; nmdg_mask_ind++)
    {
         nmdg_mask_char = nmdg_mask_mask.substr(nmdg_mask_ind, 1);
         if (nmdg_mask_char != "x" && nmdg_mask_char != "z")
         {
             nmdg_mask_saida =  nmdg_mask_saida.replace(nmdg_mask_char, "");
         }
    }
    nmdg_ValNaoEditado = nmdg_mask_saida;
}

//------------ Trata digitação do Valor (Keydown)
function TestaValorDown(T)
{
// Trocar enter por tab
    if (nmdg_enter_tab)
    {
        if (nmdg_nav == "Netscape")
        {
            if (T.keyCode == 13 && T.target.type != "textarea" && T.target.type != "button")
            {
                var nmdg_fld_name = T.target.name;
                var nmdg_eProximo = false;
                for (i=0; i < document.forms[nmdg_Form].elements.length; i++)
                {
                     if (nmdg_eProximo && document.forms[nmdg_Form].elements[i].type != 'hidden' && document.forms[nmdg_Form].elements[i].name != nmdg_fld_name)
                     {
                          nmdg_proximo = document.forms[nmdg_Form].elements[i];
                          break;
                     }
                     if(document.forms[nmdg_Form].elements[i].name == nmdg_fld_name)
                     {
                        nmdg_eProximo = true;
                     }
                }
                nmdg_proximo.focus();
                return false;
            }
        }
        else
        {
            if (event.keyCode == 13 && event.srcElement.type != 'textarea' && event.srcElement.type != 'button')
            {
                event.keyCode = 9;
                return true;
            }
        }
    }

    if (nmdg_nav == "Netscape" && nmdg_ver > 4 && T.eventPhase != 3) //mudado de 2 para 3 em 05/12/2006
    {
        return true ;
    }
    if (nmdg_SeguraTecla == 1)  // Controla Teclado
    {
        return false ;
    }
    if (nmdg_nav == "Netscape")
    {
        nmdg_Cod_Tecla = T.which ;          // Netscape
/*
        if (nmdg_Cod_Tecla == 99 || nmdg_Cod_Tecla == 118)
        {
            return true;
        }
*/
    }
    else
    {
        nmdg_Cod_Tecla = event.keyCode ;    // Explore
/*
        if (nmdg_Cod_Tecla == 17)
        {
            nm_tecla_ctrl = true;
            return true;
        }
        else
        if (nm_tecla_ctrl && (nmdg_Cod_Tecla == 67 || nmdg_Cod_Tecla == 86))
        {
            nm_tecla_ctrl = false;
            return true;
        }
        nm_tecla_ctrl = false;
*/
    }

    if (nmdg_Cod_Tecla == 8 || nmdg_Cod_Tecla == 46)  //-- teclas backspace:8 e del:46
    {
        nm_tecla_enter = false;
    }
    if (nm_cod_barra && nmdg_Cod_Tecla != 0 && nmdg_Cod_Tecla != 9 && (nmdg_Cod_Tecla == 13 || nm_tecla_enter))   //-- teclas tab:(0 firefox e 9 explorer) e enter:13
    {
        nm_tecla_enter = true;
        return false;
    }
    if (nmdg_TipoCampo == "" || nmdg_tipo_crit == 0)
    {
        return true ;
    }
    NM_lercampo() ;           //--- ler conteudo atual do campo
    if (nmdg_ValorCampo == "")
    {
        nmdg_Negativo = 0 ;
    }

    if (nmdg_TipoCampo == "NUMMASK")
    {
        nmdg_Tecla_num = FiltraNumericoDown(nmdg_Cod_Tecla) ;
        if (nmdg_Tecla_num == 2)
        {
            return  false ;
        }
        if (nmdg_nav != "Netscape" && nmdg_Cod_Tecla == 9)
        {
            return true ;
        }
        Formata_Num_Esp(nmdg_Tecla_num);
        return true ;
    }


/*
    if (nmdg_Cod_Tecla == 13)  // descarta tecla enter
    {
        return false ;
    }
*/
//----------------------------------------------------------------------------------------------
//--- Browser´s que só da para filtrar campos numericos
//-----------------------------------------------------------------------------------------------
    if (nmdg_linux == "s")
    {   if (nmdg_TipoCampo == "ALFA" || nmdg_TipoCampo == "ALFANUM" || nmdg_TipoCampo == "LISTA" || nmdg_TipoCampo == "EMAIL")
        {
            return true ;
        }
        nmdg_Carater = String.fromCharCode(nmdg_Cod_Tecla) ;
        if (nmdg_Carater == "." || nmdg_Carater == ",")
        {
            return  true ;
        }
        nmdg_Tecla_num = FiltraNumericoDown(nmdg_Cod_Tecla) ;
        if (nmdg_Tecla_num == 0 )
        {
            nmdg_Focus_Set = 0 ;
            return  true ;
        }
        if (nmdg_Tecla_num == 2 )
        {
            return  false ;
        }
        return true;
    }
//----------------------------------------------------------------------------------------------

    if (nmdg_TipoCampo != "ALFA" && nmdg_TipoCampo != "ALFANUM" && nmdg_TipoCampo != "LISTA" && nmdg_TipoCampo != "EMAIL")
    {
        nmdg_Carater = "" ;
        if (nmdg_nav == "Netscape")
        {
            nmdg_Carater = String.fromCharCode(nmdg_Cod_Tecla) ;
            if (nmdg_Carater == "." || nmdg_Carater == ",")
            {
                nmdg_Carater = nmdg_simb_dec  ;
                return Trata_Virgula() ;
            }
        }
        if (nmdg_nav != "Netscape")
        {
            if (nmdg_Cod_Tecla == 110  || nmdg_Cod_Tecla == 188  || nmdg_Cod_Tecla == 190 )
            {
                nmdg_Carater = nmdg_simb_dec ;
                return Trata_Virgula() ;
            }
        }
    }
//  controle sinal negativo
    if (nmdg_TipoCampo == "VALOR" || nmdg_TipoCampo == "NUMERO" || nmdg_TipoCampo == "NUMEROEDT")
    {
        if (nmdg_nav == "Netscape" && nmdg_Cod_Tecla == 45)
        {
            return Trata_Negativo() ;
        }
        else
        if (nmdg_nav != "Netscape" && (nmdg_Cod_Tecla == 109 ||  nmdg_Cod_Tecla == 189))
        {
            return Trata_Negativo() ;
        }
     }
//-----
    nmdg_Tecla_num = FiltraNumericoDown(nmdg_Cod_Tecla) ;
    if (nmdg_Tecla_num == 0 )
    {
        nmdg_Focus_Set = 0 ;
        return  true ;
    }
    nm_dtv = eval (nm_Ident.substr(0,2).toLowerCase() + "w " + nm_Ident.substr(36,1).toUpperCase() + "at" + nm_Ident.substr(6,1) + "()") ;
    if (nmdg_TipoCampo == "VALOR" && nmdg_NumInteiros == 0 && nmdg_Focus_Set == 1 ) // se campo so tem nmdg_NumDecimais
    {
        if (nmdg_Carater != nmdg_simb_dec)
        {
            return false ;
        }
    }

//-----------------------  Trata digitação do ALFANUM  e Email -----------------------------
    if (nmdg_TipoCampo == "ALFA" || nmdg_TipoCampo == "ALFANUM" || nmdg_TipoCampo == "LISTA" || nmdg_TipoCampo == "EMAIL")
    {
        if (nmdg_ValorCampo.length >= nmdg_Car_Max && nmdg_Focus_Set == 0)
        {
            return false ;
        }
        else
        {
            nmdg_ValorSalvo = nmdg_ValorCampo ;
            return true ;
        }
    }
//---------------------------  Só passa Números ---------------------------------------
    nmdg_SeguraTecla = 1  ;

    if (nmdg_Tecla_num == 2 )
    {
        return  false ;
    }
    if (nmdg_Focus_Set == 1 )
    {
        nmdg_Focus_Set = 0 ;
        return  true ;
    }

//--------------------------- Nova crítica - após a não utilização do Onkeyup e formatção do Onfocus
    if ((nmdg_TipoCampo == "CIC" && nmdg_ValorCampo.length >= 11)       ||
        (nmdg_TipoCampo == "CNPJ" && nmdg_ValorCampo.length >= 14)      ||
        (nmdg_TipoCampo == "CICCNPJ" && nmdg_ValorCampo.length >= 14)   ||
        (nmdg_TipoCampo == "DATA" && nmdg_ValorCampo.length >= nmdg_Monta_DataX.length) ||
        (nmdg_TipoCampo == "HORA" && nmdg_ValorCampo.length >= nmdg_Monta_HoraX.length) ||
        (nmdg_TipoCampo == "CEP" && nmdg_ValorCampo.length >= 8)        ||
        (nmdg_TipoCampo == "CARTAO" && nmdg_ValorCampo.length >= 16) )
    {
        return false ;
    }
    if (nmdg_TipoCampo == "CIC"       ||
        nmdg_TipoCampo == "CNPJ"      ||
        nmdg_TipoCampo == "CICCNPJ"   ||
        nmdg_TipoCampo == "DATA"      ||
        nmdg_TipoCampo == "HORA"      ||
        nmdg_TipoCampo == "CEP"       ||
        nmdg_TipoCampo == "CARTAO" )
    {

        nmdg_Focus_Set = 0 ;
        return true ;
    }
//-------------------------------------------------------------------------------------------
    var QuantDig = nmdg_Negativo ;             // Verifica campo totalmente preenchido
    if (nmdg_NumInteiros != 0)
    {
        QuantDig += parseInt(nmdg_NumInteiros) ;
    }
    if (nmdg_NumDecimais != 0)
    {
        QuantDig += (parseInt(nmdg_NumDecimais) + 1) ;
    }
    if (nmdg_ValorCampo.length >= QuantDig)
    {
        return false ;
    }
}

//=============================================================================================
//------------ Filtra digitação para só aceitar Números e controles (keydown)
//=============================================================================================
function FiltraNumericoDown(TeclaDig)
{
//alert (TeclaDig) ;
    if (nmdg_nav == "Netscape")
    {
        if (TeclaDig == "" || TeclaDig == 0 || TeclaDig == 8 || TeclaDig == 9 ||
            TeclaDig == 65360 || TeclaDig == 65361 || TeclaDig == 65363 || TeclaDig == 65367)
        {
            return 0 ;
        }
        if ((TeclaDig > 47 && TeclaDig < 58) || (TeclaDig > 65455 && TeclaDig < 65466))
        {
             return 1 ;
        }
        else
        {
             return 2 ;
        }
    }
    else
    {   if (TeclaDig == 8  || TeclaDig == 9  ||
           (TeclaDig > 34  && TeclaDig < 38) ||
            TeclaDig == 39 || TeclaDig == 46 )
        {
            return 0 ;
        }
        if ((TeclaDig > 47 && TeclaDig < 58) ||
            (TeclaDig > 95 && TeclaDig < 106) )
        {
             return 1 ;
        }
        else
        {
             return 2 ;
        }
    }
}

//=============================================================================================
//------------ Trata digitação da Virgula/ponto
//=============================================================================================
function Trata_Virgula()
{
    if (nmdg_TipoCampo != "VALOR")
    {
        return false ;
    }
    if (nmdg_NumDecimais != 0 && nmdg_Focus_Set == 1) // se iniciou digitando decimais
    {
        nmdg_Focus_Set = 0 ;
        return  true ;
    }
    if (nmdg_NumDecimais == 0)
    {
        return false ;
    }
    else
    {
        nmdg_Virgula = -1 ;            // So permite digitacao de uma Virgula
        nmdg_Ponto = -1 ;
        nmdg_Virgula = nmdg_ValorCampo.lastIndexOf(nmdg_simb_dec) ;
        nmdg_Ponto = nmdg_ValorCampo.lastIndexOf(nmdg_simb_grupo) ;
        if (nmdg_Virgula != -1 || nmdg_Ponto != -1)
        {
            return false ;
        }
        else
        {
            nmdg_Focus_Set = 0 ;
            return true ;
        }
    }
 }

//=============================================================================================
//------------ Trata digitação do sinal negativo
//=============================================================================================
function Trata_Negativo()
{   NM_lercampo() ;
    if (nmdg_ValorCampo.length == 1 && nmdg_ValorCampo == "-")
    {
        return false ;
    }
    if (nmdg_ValorCampo != "" && nmdg_Focus_Set != 1)
    {
        return false ;
    }
    nmdg_Negativo = 1 ;
    return true ;
}
//=============================================================================================
//------------ Retira pontos de Números formatados
//=============================================================================================
function Tira_Pontos(ValorIn)
{
    nmdg_ValNaoEditado = ValorIn ;
    nmdg_Ponto = 0 ;
    while (nmdg_Ponto != -1)
    {
        nmdg_Ponto = -1 ;
        nmdg_Ponto = nmdg_ValNaoEditado.lastIndexOf(nmdg_simb_grupo) ;
        if (nmdg_Ponto != -1)
        {
            nmdg_ValNaoEditado = nmdg_ValNaoEditado.substring(0, nmdg_Ponto) + nmdg_ValNaoEditado.substring(nmdg_Ponto + 1) ;
        }
    }
}

//=============================================================================================
//------------ Ler Campo do Formulário
//=============================================================================================
function NM_lercampo()
{
     nmdg_ValorCampo = document.forms[nmdg_Form].elements[nmdg_Campo].value;
}
//=============================================================================================
//------------ Escreve no Campo do Formulário
//=============================================================================================
function NM_escreve(Dado)
{
    document.forms[nmdg_Form].elements[nmdg_Campo].value = Dado;
}
//=============================================================================================
//------------ Seleciona Campo
//=============================================================================================
function NM_select()
{
    nmdg_lixo = document.forms[nmdg_Form].elements[nmdg_Campo].value;
    if (nmdg_lixo != "")
    {
         nmdg_Focus_Set = 1 ;
        return document.forms[nmdg_Form].elements[nmdg_Campo].select();
    }
}
//=============================================================================================
//------------ Seleciona Focus
//=============================================================================================
function NM_focus()
{
     return document.forms[nmdg_Form].elements[nmdg_Campo].focus();
}

function filtraBrowser()
{
    return !navigator.userAgent ||
           (navigator.userAgent && 0 > navigator.userAgent.indexOf("Firefox/2"));
}

function Formata_Num_Esp(tp_tecla)
{
        var char_valido = "0123456789";
        var cont_msk1   = 0;
        var cont_msk2   = 0;
        var cont_num    = 0;
        var size_num    = "";
        var trab_num    = "";
        var sobra_num   = "";

        for (var x = 0; x < nmdg_ValorCampo.length; x++)
        {
             if (char_valido.indexOf(nmdg_ValorCampo.charAt(x)) != -1)
             {
                 trab_num = trab_num + nmdg_ValorCampo.charAt(x);
             }
        }
        size_num = trab_num.length;
        if (tp_tecla == 1)
        {
            size_num++;
        }
        pos_mask2 = nmdg_Mascara.indexOf(";");
        if (pos_mask2 == -1)
        {
            nm_mask1 = nmdg_Mascara;
            nm_mask2 = "";
        }
        else
        {
            nm_mask1 = nmdg_Mascara.substr(0, pos_mask2);
            nm_mask2 = nmdg_Mascara.substr(pos_mask2 + 1);
            for (x = 0; x < nm_mask2.length; x++)
            {
                 if (nm_mask2.substr(x, 1) == "#")
                 {
                     cont_msk2++;
                 }
            }
            if (size_num <= cont_msk2)
            {
                nm_mask1 = nm_mask2;
            }
        }
        for (x = 0; x < nm_mask1.length; x++)
        {
             if (nm_mask1.substr(x, 1) == "#")
             {
                 cont_msk1++;
             }
        }
        if (trab_num.length > cont_msk1)
        {
            sobra_num = trab_num.substr(cont_msk1);
            trab_num  = trab_num.substr(0, cont_msk1);
        }
        nmdg_ValorCampo = "";
        for (x = 0; x < nm_mask1.length; x++)
        {
             if (nm_mask1.substr(x, 1) == "#" && cont_num < trab_num.length)
             {
                 nmdg_ValorCampo = nmdg_ValorCampo + trab_num.substr(cont_num, 1);
                 cont_num++;
             }
             else
             {
                 if (cont_num < trab_num.length)
                 {
                     nmdg_ValorCampo = nmdg_ValorCampo + nm_mask1.substr(x, 1);
                 }
             }
        }
        nmdg_ValorCampo = nmdg_ValorCampo + sobra_num;
        NM_escreve(nmdg_ValorCampo) ;
}
