// mostra mensagens na barra de status como se estivessem sendo digitadas
// funções javascript genéricas compartilhadas no site do CNVR

//código para esconder links de href nas páginas
//função que esconde mensagem da status bar do browser
function hidestatus(){
    window.status=''
    return true
}
if (document.layers)
    document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT)
    document.onmouseover=hidestatus
    document.onmouseout=hidestatus
//

function cMsg( cTexto ) {
    window.status = cTexto;
}

// validação de tipos comuns de campos
// sintaxe: na tag <input> incluir: onblur='cValida( this, iTipo, lRetVal );'
// iTipo: 0-texto  1-e-mail  2-numérico  3-data  4-placa  5-chassi (0-9 A-Z)
//        6-cpf/cgc  7-dígitos (0 a 9)  8-sem acentos
// lRetVal: true-retorna cValor formatado  false:retorna true ou false para válido ou inválido
function cValida( oControle, iTipo, iRetVal ) {
    var cValor = oControle.value, cMsg = "", lValido = false;
    if ( typeof( iRetVal ) == "undefined" ) { var iRet = 1; } else { var iRet = iRetVal; }
    if ( typeof( iTipo ) == "undefined" ) { iTipo = 0; }
    if ( cValor != "" ) {
        switch ( iTipo ) {
            case 0:
                cValor = cValidaTexto( cValor );
                if ( cValor == "" ) { cMsg = "texto inválido !"; } else { lValido = true; }
                break;
            case 1:
                cValor = cValidaEmail( cValor );
                if ( cValor == "" ) { cMsg = "e-mail inválido !"; } else { lValido = true; }
                break;
            case 2:
                cValor = cValidaNumerico( cValor );
                if ( cValor == "" ) { cMsg = "número inválido !"; } else { lValido = true; }
                break;
            case 3:
                cValor = cValidaData( cValor );
                if ( cValor == "" ) { cMsg = "data inválida !"; } else { lValido = true; }
                break;
            case 4:
                cValor = cValidaPlaca( cValor );
                if ( cValor == "" ) { cMsg = "placa inválida !"; } else { lValido = true; }
                break;
            case 5:
                cValor = cValidaChassi( cValor );
                if ( cValor == "" ) { cMsg = "chassi inválido !"; } else { lValido = true; }
                break;
            case 6:
				//cValor = cValor.toString().substring(0,3) + cValor.toString().substring(4,7) + cValor.toString().substring(8,11) + cValor.toString().substring(12,14) ;
                cValor = cValidaCPFCGC( cValor );
                if ( cValor == "" ) { cMsg = "CPF / CNPJ inválido !"; } else { lValido = true; }
                break;
            case 7:
                cValor = cValidaDigitos( cValor );
                if ( cValor == "" ) { cMsg = "número inválido.\ndigite somente dígitos de 0 a 9 sem espaços!"; } else { lValido = true; }
                break;
            case 8:
                cValor = cValidaAcento( cValor );
                lValido = true;
                break;
        }
        if ( lValido ) {
            if ( iRet == 1 ) { oControle.value = cValor; } else { return true; }
        }
        else {
            if ( iRet == 1 ) {
                alert( cMsg );
                oControle.select();
                oControle.focus();
            }
            else {
                return false;
            }
        }
    }
}

// função complementar à cValida() para validar e-mail's
function cValidaTexto( cTexto ) {
    return cJavaTrimUC( cTexto );
}

// função complementar à cValida() para validar e-mail's
function cValidaEmail( cEmail ) {
    var iArr = 0, cRet = "";
    cEmail = cJavaTrimUC( cEmail );
    cEmail = cEmail.toLowerCase();
    if ( cEmail.indexOf( "@" ) > 0 && cEmail.indexOf( "@" ) < cEmail.length - 1 ) {
        if ( cEmail.length > 4 ) {
            if( cEmail.indexOf( "www." ) == -1 ) {
                cRet = cEmail;
            }
        }
    }
    return cRet;
}

// função complementar à cValida() para validar campos numéricos
function cValidaNumerico( cNumero ) {
    var lNum = true, iErr = 0;
    cNumero = cJavaTrimUC( cNumero );
    // verifica se todos os dígitos são válidos
    for ( i = 0; i < cNumero.length; i++ ) {
        if ( "0123456789.,-".indexOf( cNumero.substring( i, i + 1 ) ) < 0 ) {
            lNum = false;
        }
    }
    // verifica se só foi digitado um sinal ou um ponto
    if ( cNumero == "-" || cNumero == "." || cNumero == "-." || cNumero == ".-" || cNumero == ",") { lNum = false; }
    if ( lNum == true ) {
        // verifica a posição e quantidade do sinal de negativo (-) caso haja
        for ( i = 0; i < cNumero.length; i++ ) {
            if ( "-".indexOf( cNumero.substring( i, i + 1 ) ) > -1 ) {
                iErr = i;
            }
        }
        if ( iErr <= 0 ) {
            // verifica a posição e quantidade de pontos (.)
            iErr = 0;
            for ( i = 0; i < cNumero.length; i++ ) {
                if ( ".".indexOf( cNumero.substring( i, i + 1 ) ) > -1 ) {
                    iErr++;
                }
            }
            if ( iErr > 1 ) { lNum = false; }
        }
        else {
            lNum = false;
        }
    }
    if ( !lNum ) { return ""; } else { return cNumero; }
}

// função complementar à cValida() para validar chassi
// 0-9 e A-Z sem pontos, traços, etc e tamanho = 17 ou 14 ou <=12
function cValidaChassi( cChassi ) {
    var lChas = true;
    var iNum = 0;
    cChassi = cJavaTrimUC( cChassi )
    // verifica se todos os dígitos são válidos
    for ( i = 0; i < cChassi.length; i++ ) {
        if ( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf( cChassi.substring( i, i + 1 ) ) < 0 ) {
            lChas = false;
        }
    }
    // verifica se, ao menos tres digitos são numéricos (0 a 9)
    for ( i = 0; i < cChassi.length; i++ ) {
        if ( "0123456789".indexOf( cChassi.substring( i, i + 1 ) ) >= 0 ) {
            iNum = iNum + 1;
        }
    }
    if( iNum < 3 ) { lChas = false; }
    // verifica o tamanho da string
    if( lChas ) {
        if( cChassi.length != 17 && ( cChassi.length > 14 || cChassi.length < 3 ) ) {
            lChas = false;
        }
    }
    if ( !lChas ) {
        // alert( "Chassi inválido\nPor favor digite somente números de 0 a 9 ou\nletras de A a Z sem pontos, traços ou separadores !" );
        return "";
    }
    else {
        return cChassi;
    }
}

// função complementar à cValida() para validar campos somente numéricos (sem pontos, traços, etc)
function cValidaDigitos( cNumero ) {
    var lNum = true;
    cNumero = cJavaTrimUC( cNumero )
    // verifica se todos os dígitos são válidos
    for ( i = 0; i < cNumero.length; i++ ) {
        if ( "0123456789".indexOf( cNumero.substring( i, i + 1 ) ) < 0 ) {
            lNum = false;
        }
    }
    if ( !lNum ) {
        // alert( "por favor digite somente números de 0 a 9 sem pontos, traços ou separadores !" );
        return "";
    }
    else {
        return cNumero;
    }
}

// função complementar à cValida() para validar e formatar datas (dd/mm/aaaa)
function cValidaData( cData ) {
    var iD1, iD2, iDia, iMes, iAno, cAno, lData = false; lMes = true;
    cData = cJavaTrim( cData );
    iD1 = cData.indexOf( "/" );
    if ( iD1 > 0 && iD1 + 1 < cData.length ) {
        iD2 = cData.indexOf( "/", iD1 + 1 );
    }
    if ( iD1 > 0 && iD2 > 0 && iD2 + 1 <= cData.length ) {
        iDia = parseInt( parseFloat( cData.substring( 0, iD1 ) ) );
        iMes = parseInt( parseFloat( cData.substring( iD1 + 1, iD2 ) ) );
        cAno = cData.substring( iD2 + 1, cData.length );
        iAno = parseInt( parseFloat( cAno ) );
        if ( iDia > 0 && iDia < 32 && iMes > 0 && iMes < 13 && iAno < 2100 && ( iAno > 0 || cAno == "0" || cAno == "00" || cAno == "000" ) ) {
            if ( iAno < 100 ) {
                if ( iAno > 30 ) { iAno = parseInt( iAno ) + 1900; } else { iAno = parseInt( iAno ) + 2000; }
            }
            if ( iAno >= 1900 ) {
                if ( ( iMes == 2 || iMes == 4 || iMes == 6 || iMes == 9 || iMes == 11 ) ) {
                    if ( iMes == 2 ) {
                        if ( iAno % 4 != 0 ) { if ( iDia > 28 ) { lMes = false; } }
                        else { if ( iDia > 29 ) { lMes = false; } }
                    }
                    else { if ( iDia > 30 ) { lMes = false; } }
                }
                if ( lMes ) {
                    lData = true;
                    if ( iDia < 10 ) { iDia = "0" + iDia; }
                    if ( iMes < 10 ) { iMes = "0" + iMes; }
                    return ( iDia + "/" + iMes + "/" + iAno );
                }
            }
        }
    }
    if ( !lData ) {
        return "";
    }
}

// função complementar à cValida() para validar placas de veículos
function cValidaPlaca( cPlaca ) {
    var lPlaca = false;
    cPlaca = cJavaTrimUC( cPlaca );
    if ( cPlaca.length == 6 || cPlaca.length == 7 || cPlaca.length == 5) {
        if ( cPlaca.length == 6 ) {
            var cLetras = cPlaca.substring( 0, 2 );
            var cNumeros = cPlaca.substring( 2, 6 );
        }
        else if ( cPlaca.length == 5 ) {
            var cLetras = cPlaca.substring( 0, 2 );
            var cNumeros = cPlaca.substring( 2, 5 );
        }        
        else {
            var cLetras = cPlaca.substring( 0, 3 );
            var cNumeros = cPlaca.substring( 3, 7 );
        }
        lPlaca = true;
        for ( i = 0; i < cLetras.length; i++ ) {
            if ( "ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf( cLetras.substring( i, i + 1 ) ) < 0 ) {
                lPlaca = false;
            }
        }
        for ( i = 0; i < cNumeros.length; i++ ) {
            if ( "0123456789".indexOf( cNumeros.substring( i, i + 1 ) ) < 0 ) {
                lPlaca = false;
            }
        }
    }
    if ( !lPlaca ) { return ""; } else { return cPlaca; }
}

// função complementar à cValida() para validar CPF's e CGC's
// função complementar à Valida() para validar CPF's e CGC's
function cValidaCPFCGC( cCPFCGC ) {
    cCPFCGC = cJavaTrimUC( cCPFCGC );
    // verifica se é CPF valido ( 11 dígitos )
    if ( cCPFCGC.length == 11 ) {
        var nDig1 = 0, nDig2 = 0, lVal = false;
        // verifica se não é repetição de números ( 11111111111, 22222222222, etc )
        for ( i = 0; i < 11; i++ ) {
            if ( cCPFCGC.substring( i, i + 1 ) != cCPFCGC.substring( 0, 1 ) ) { lVal = true; }
        }
        for ( i = 10; i > 1; i-- ) {
            nDig1 += parseInt( cCPFCGC.substring( 10 - i, 11 - i ) ) * i;
        }
        for ( i = 11; i > 1; i-- ) {
            nDig2 += parseInt( cCPFCGC.substring( 11 - i, 12 - i ) ) * i;
        }
        nDig1 = ( nDig1 * 10 ) % 11;
        nDig2 = ( nDig2 * 10 ) % 11;
        if ( nDig1 == 10 ) { nDig1 = 0; }
        if ( nDig2 == 10 ) { nDig2 = 0; }
        if ( nDig1 != cCPFCGC.substring( 9, 10 ) || nDig2 != cCPFCGC.substring( 10, 11 ) || !lVal ) {
            // alert( "CPF inválido" );
            return "";
        }
        else {
            return cCPFCGC;
        }
    }
    else {
        // verifica se é CGC valido ( 14 dígitos )
        if ( cCPFCGC.length == 14 ) {
            var nMult1 = "543298765432", nMult2 = "6543298765432", nDig1 = 0, nDig2 = 0, lVal = false;
            for ( i = 0; i < 12; i++ ) {
                nDig1 += parseInt( cCPFCGC.substring( i, i + 1 ) ) * parseInt( nMult1.substring( i, i + 1 ) );
            }
            for ( i = 0; i < 13; i++ ) {
                nDig2 += parseInt( cCPFCGC.substring( i, i + 1 ) ) * parseInt( nMult2.substring( i, i + 1 ) );
            }
            nDig1 = ( nDig1 * 10 ) % 11;
            nDig2 = ( nDig2 * 10 ) % 11;
            if ( nDig1 == 10 ) { nDig1 = 0; }
            if ( nDig2 == 10 ) { nDig2 = 0; }
            if ( nDig1 != cCPFCGC.substring( 12, 13 ) || nDig2 != cCPFCGC.substring( 13, 14 ) ) {
                return "";
            }
            else {
                return cCPFCGC;
            }
        }
        else {
            return "";
        }
    }
}

// função complementar a cValida() para remover acentos e caracteres especiais
function cValidaAcento( cTexto ) {
    var cNew = "", iAux = 0;
    cTexto = cTexto.toLowerCase();
    for ( i = 0; i < cTexto.length; i++ ) {
        iAux = "áàãäâéèëêíìïîóòõöôúùüûýñç".indexOf( cTexto.substring( i, i + 1 ) );
        if ( iAux < 0 ) {
            cNew += cTexto.substring( i, i + 1 );
        }
        else {
            cNew += "aaaaaeeeeiiiiooooouuuuync".substring( iAux, iAux + 1 );
        }
    }
    return( cNew.toUpperCase() );
}

// Remove espaços em branco à direita e à esquerda de cExpr
function cJavaTrim( cExpr ) {
    cExpr = cJavaLTrim( cExpr );
    cExpr = cJavaRTrim( cExpr );
    return cExpr;
}

// Remove espaços em branco à esquerda de cExpr
function cJavaLTrim( cExpr ) {
    var iSpc;
    cExpr = cExpr.toString();
    iSpc = cExpr.length;
    for ( i = 0; i < cExpr.length; i++ ) {
        if ( cExpr.substr( i, 1 ) != " " ) { iSpc = i; i = cExpr.length; }
    }
    cExpr = cExpr.substring( iSpc, cExpr.length );
    return cExpr;
}

// Remove espaços em branco à direita de cExpr
function cJavaRTrim( cExpr ) {
    var iSpc;
    cExpr = cExpr.toString();
    iSpc = 0;
    for ( i = cExpr.length - 1; i >= 0; i-- ) {
        if ( cExpr.substr( i, 1 ) != " " ) { iSpc = i; i = 0; }
    }
    cExpr = cExpr.substring( 0, iSpc + 1 );
    return cExpr;
}

// Remove espaços e converte para maiúsculas
function cJavaTrimUC( cExpr ) {
    return cJavaTrim( cExpr.toUpperCase() );
}

// converte yyyymmdd em dd/mm/yyyy
function cData1( cTexto ) {
    return cTexto.substring( 6, 8 ) + "/" + cTexto.substring( 4, 6 ) + "/" + cTexto.substring( 0, 4 );
}

// converte dd/mm/yyyy em yyyymmdd
function cData2( cTexto ) {
    return cTexto.substring( 6, 10 ) + cTexto.substring( 3, 5 ) + cTexto.substring( 0, 2 );
}

function cReplaceVirgPonto( cExpr ) {
    var cPonto, cRet, cRet1;
    cExpr = cExpr.toString();
    cRet = cExpr.replace(",", ".");
    return cRet;
}