
function validaEmail(){
    if(ftrim(arguments[0]) == "")
        return true;
    var exp =  /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
    return exp.test(arguments[0]);
}
function validaCPF(){
    if(ftrim(arguments[0]) == "")
        return true;
    var CPF = arguments[0]; // Recebe o valor digitado no campo
    var result = true;
    // Aqui começa a checagem do CPF
    var posicao, i, soma, dv, dv_informado;
    var digito = new Array(10);
    dv_informado = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado
    
    // Desemembra o número do CPF na array digito
    for (i=0; i<=8; i++) {
        digito[i] = CPF.substr( i, 1);
    }
    // Calcula o valor do 10º dígito da verificação
    posicao = 10;
    soma = 0;
    for (i=0; i<=8; i++) {
        soma = soma + digito[i] * posicao;
        posicao = posicao - 1;
    }
    digito[9] = soma % 11;
    if (digito[9] < 2) {
        digito[9] = 0;
    }else{
    digito[9] = 11 - digito[9];
}

// Calcula o valor do 11º dígito da verificação
posicao = 11;
soma = 0;
for (i=0; i<=9; i++){
    soma = soma + digito[i] * posicao;
    posicao = posicao - 1;
}
digito[10] = soma % 11;
if (digito[10] < 2) {
    digito[10] = 0;
}else{
digito[10] = 11 - digito[10];
}
// Verifica se os valores dos dígitos verificadores conferem
dv = digito[9] * 10 + digito[10];
if (dv != dv_informado){
    result = false;
}
return result;
}
function validaCampoEmBranco(){
    if(ftrim(arguments[0]) == '')
        return false;
    else
        return true;
}
function validaMinimoLetras(){
    if(ftrim(arguments[0]).length < 2)
        return false;
    else
        return true;
}
function validaCNPJ(){
    if(ftrim(arguments[0]) == "")
        return true;
    var CNPJ = arguments[0];
    erro = new String;
    if (CNPJ.length < 18)
        return false;
    if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
        if (erro.length == 0)
            return false;
    }
    //substituir os caracteres que nao sao numeros
    if(document.layers && parseInt(navigator.appVersion) == 4){
        x = CNPJ.substring(0,2);
        x += CNPJ.substring(3,6);
        x += CNPJ.substring(7,10);
        x += CNPJ.substring(11,15);
        x += CNPJ.substring(16,18);
        CNPJ = x;
    } else {
    CNPJ = CNPJ.replace(".","");
    CNPJ = CNPJ.replace(".","");
    CNPJ = CNPJ.replace("-","");
    CNPJ = CNPJ.replace("/","");
}
var nonNumbers = /\D/;
if (nonNumbers.test(CNPJ))
    return false;
var a = [];
var b = new Number;
var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
for (i=0; i<12; i++){
    a[i] = CNPJ.charAt(i);
    b += a[i] * c[i+1];
}
if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
b = 0;
for (y=0; y<13; y++) {
    b += (a[y] * c[y]);
}
if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
    return false;
}
return true;
}
function validaURL(){
    if(ftrim(arguments[0]) == ""){
        return true;
    }    
    var exp = /^((http)|(https)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*$/;
    return exp.test(arguments[0]);
}
function validaNumero(){
    
    if(arguments[0] == "")
        return true;
    var exp = /^\d+$/;
    return exp.test(arguments[0]);
}
function validaDecimal(){
    //função para o formato inglês, ou seja com ponto no lugar de vírgula
    if(arguments[0] == "")
        return true;
    exp = /^[+-]?((\d+|\d{1,3}(\,\d{3})+)(\.\d*)?|\.\d+)$/
    return exp.test(arguments[0]);
}
function validaHora(){
    if(ftrim(arguments[0]) == "")
        return true;
    var exp = /^([0-1]\d|2[0-3]):[0-5]\d$/;
    return exp.test(arguments[0]);
}
function validaTelefone(){
    if(arguments[0] == "")
        return true;
    var exp = /\(\d{2}\)\d{4}-\d{4}/;
    return exp.test(arguments[0]);
}
function validaCEP(){
    var exp = /^\d{5}-\d{3}$/;
    return exp.test(arguments[0]);
}
function validaData(){
    if(ftrim(arguments[0]) == "")
        return true;
    var bissexto = 0;
    var data = arguments[0]; 
    var tam = data.length;
    if (tam == 10){
        var dia = data.substr(0,2)
        var mes = data.substr(3,2)
        var ano = data.substr(6,4)
        if ((ano > 1900)||(ano < 2100)){
            switch (mes) {
                case '01':
                case '03':
                case '05':
                case '07':
                case '08':
                case '10':
                case '12':
                if  (dia <= 31){
                    return true;
                }
                break;
                case '04':        
                case '06':
                case '09':
                case '11':
                if  (dia <= 30){
                    return true;
                }
                break;
                case '02':
                /* Validando ano Bissexto / fevereiro / dia */ 
                if ((ano % 4 == 0) || (ano % 100 == 0) || (ano % 400 == 0)){ 
                    bissexto = 1; 
                } 
                if ((bissexto == 1) && (dia <= 29)){ 
                    return true;                 
                } 
                if ((bissexto != 1) && (dia <= 28)){ 
                    return true; 
                }            
                break;                        
            }
        }
    }    
    return false;
}
function ftrim(str){
    return str.replace(/^\s+|\s+$/g,"");
}

function validaQuantidade(){
    if(ftrim(arguments[0]) == '' || ftrim(arguments[0]) == 0 )
        return false;
    else
        return true;
}
function validaNumero(){
    if(isNaN(arguments[0]))
        return false;
    else
        return true;
}

function menorCampoBase(){
    if(arguments[0] == null || ftrim(arguments[0]) == '' || ftrim(arguments[0]) <= 0 )
        return false;
    
    //Campo Base
    if(arguments[1] == null || ftrim(arguments[1]) == '' || ftrim(arguments[1]) <= 0 )
        return false;
    
    if(ftrim(arguments[0]) <= ftrim(arguments[1]))
        return false;
    else
        return true;
    
}

function itemSelecionado(){
    if(arguments[0] == '00')
        return true;
    else if(arguments[0] == null || arguments[0] == '' || arguments[0] < 0 )
        return false;
    else
        return true;
    
}
function menorCampoBaseAno(){
    if(arguments[0] == null || ftrim(arguments[0]) == '' || ftrim(arguments[0]) <= 0 )
        return false;
    
    //Campo Base
    if(arguments[1] == null || ftrim(arguments[1]) == '' || ftrim(arguments[1]) <= 0 )
        return false;
    
    if(ftrim(arguments[0]) < ftrim(arguments[1]))
        return false;
    else
        return true;
    
}

function igualCampoBase(){
    if(arguments[0] == null || arguments[0] == '')
        return false;
    
    //Campo Base
    if(arguments[1] == null || arguments[1] == '')
        return false;
    
    if(arguments[0] < arguments[1])
        return false;
    else
        return true;    
}


function validaForm(itens){

var erros = document.getElementById("erros");
var result = true;

erros.innerHTML = '';

    var frm = document.form;
    if (frm){        
        var cmbsexo = false;
        var cmbneo = false;
        for (var i = 0; i < frm.length;i++) {
            if (frm[i].name){
                if (frm[i].name.indexOf(".sexo") != -1 ){
                    cmbsexo = frm[i]; 
                }
            
                if (frm[i].name.indexOf(".grupo.codigo") != -1 || frm[i].name.indexOf(".cdCid") != -1){
                    cmbneo = frm[i]; 
                }            
            }
        }
        
        if (cmbsexo && cmbneo) {
            var li = document.createElement("li");
            
            if (cmbneo.value == "C61" && cmbsexo.value != "1"){                
                li.appendChild(document.createTextNode("Escolha incompatível entre Topografia e Sexo"));
                erros.appendChild(li);
                result = false;
            }
            if (cmbneo.value == "C50" && cmbsexo.value != "2"){
                li.appendChild(document.createTextNode("Escolha incompatível entre Topografia e Sexo"));
                erros.appendChild(li);
                if(campo != null && campo.style)
                campo.style.backgroundColor = corErro;
                result = false;
            }
            if (cmbneo.value == "C53" && cmbsexo.value != "2"){
                li.appendChild(document.createTextNode("Escolha incompatível entre Topografia e Sexo"));
                erros.appendChild(li);
                if(campo != null && campo.style)
                campo.style.backgroundColor = corErro;
                result = false;
            }
        }
    }
    
    
    
    var corErro = "#FFCCCC";
    var corDefault = "#FFFFFF";
    var item;
    for(var i=0;item = itens[i];i++){
        
        var campo = $(item.campo);
        if(campo != null && campo.style)
            campo.style.backgroundColor = corDefault;
    }
    
    for(var i=0,item;item = itens[i];i++){
        
        var campo = $(item.campo);   
        
        var li = document.createElement("li");
        
        if(campo == null)
            continue;        
        
        if(item.validacao == 'branco'){
            if(!validaCampoEmBranco(campo.value)){
                li.appendChild(document.createTextNode(item.mensagem));
                erros.appendChild(li);
                if(campo != null && campo.style)
                    campo.style.backgroundColor = corErro;
                result = false;
            }
        }else if(item.validacao == 'email'){
        if(!validaEmail(campo.value)){
            li.appendChild(document.createTextNode(item.mensagem));
            erros.appendChild(li);
            if(campo != null && campo.style)
                campo.style.backgroundColor = corErro;
            result = false;
        }
    }else if(item.validacao == 'CPF'){
    if(!validaCPF(campo.value)){
        li.appendChild(document.createTextNode(item.mensagem));
        erros.appendChild(li);
        if(campo != null && campo.style)
            campo.style.backgroundColor = corErro;
        result = false;
    }
}else if(item.validacao == 'CNPJ'){
if(!validaCNPJ(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}           
}else if(item.validacao == 'URL'){
if(!validaURL(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}         
}else if(item.validacao == 'numero'){
if(!validaNumero(campo.value)){                
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}          
}else if(item.validacao == 'telefone'){
if(!validaTelefone(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}          
}else if(item.validacao == 'CEP'){
if(!validaCEP(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}      
}else if(item.validacao == 'data'){
if(!validaData(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}
}else if(item.validacao == 'quantidade'){
if(!validaQuantidade(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}        
}else if(item.validacao == 'numero'){
if(!validaNumero(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}        
}else if(item.validacao == 'hora'){
if(!validaHora(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}        
}else if(item.validacao == 'funcao'){
if(!item.funcao()){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
} 
}else if(item.validacao == 'itemselecionado'){
if(!itemSelecionado(campo.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
} 
}else if(item.validacao == 'menorcampobase'){
var campoBase = $(item.campoBase);
if(!menorCampoBase(campo.value,campoBase.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
}
}else if(item.validacao == 'igualCampoBase'){
var campoBase1 = $(item.campoBase);                         // var campoBase = $(item.campoBase); -> Esta dando redeclaraçao de variavel.
if(!igualCampoBase(campo.value,campoBase1.value)){
    li.appendChild(document.createTextNode(item.mensagem));
    erros.appendChild(li);
    if(campo != null && campo.style)
        campo.style.backgroundColor = corErro;
    result = false;
} 
}else if(item.validacao == 'menorCampoBaseAno'){
    var campoBase2 = $(item.campoBase);                       // var campoBase = $(item.campoBase); -> Esta dando redeclaraçao de variavel.
    if(!menorCampoBaseAno(campo.value,campoBase2.value)){
        li.appendChild(document.createTextNode(item.mensagem));
        erros.appendChild(li);
        if(campo != null && campo.style)
            campo.style.backgroundColor = corErro;
        result = false;
    } 
} else if(item.validacao == 'funcao'){
    if(!item.funcao()){
        li.appendChild(document.createTextNode(item.mensagem));
        erros.appendChild(li);
        if(campo != null && campo.style)
            campo.style.backgroundColor = corErro;
        result = false;
    } 
}                


}  

return result;
}
function enviarComValidacao(form, caminho){
    if(validaForm(itens)){
        document.getElementsByTagName("form")[form].action = caminho;
        document.getElementsByTagName("form")[form].submit();
    }
}
