function Valida(form){
    var frm = document.forms[form];
    var numElementos = frm.elements.length;
    for (var i = 0; i < numElementos; i++) {
        if (frm.elements[i].getAttribute("valida") != null) {
            var valorValida = frm.elements[i].getAttribute("valida");
            var valor = valorValida.split(",");
            Trim(i, form);
            if (valor[0] == "sim") {
                if (frm.elements[i].nodeName == "INPUT") {
                    if (frm.elements[i].type == "text") {
                        if (frm.elements[i].value == "") {
                            ShowErro(i, form);
                            return false;
                        }
                        else {
                            if (!Campos(i, form)) {
                                return false;
                            }
                        }
                    }
                    if (frm.elements[i].type == "password") {
                        if (frm.elements[i].value == "") {
                            ShowErro(i, form);
                            return false;
                        }
                        else {
                            if (!Campos(i, form)) {
                                return false;
                            }
                        }
                    }
                }
                if (frm.elements[i].nodeName == "SELECT") {
                    if (frm.elements[i].value == 0) {
                        ShowErro(i, form);
                        return false;
                    }
                }
                if (frm.elements[i].nodeName == "TEXTAREA") {
                    if (frm.elements[i].value == "") {
                        ShowErro(i, form);
                        return false;
                    }
                }
            }
            if (valor[0] == "nao") {
                if (frm.elements[i].nodeName == "INPUT") {
                    if (frm.elements[i].type == "text") {
                        if (frm.elements[i].value != "") {
                            if (!Campos(i, form)) {
                                return false;
                            }
                        }
                    }
                }
            }
            
            if (frm.elements[i].getAttribute("numero") == "sim") {
                if (frm.elements[i].value != "") {
                    if (isNaN(frm.elements[i].value)) {
                        ShowErro(i, form);
                        return false;
                    }
                }
            }
        }
    }
    Maiusculo(form)
    //return true;
    document.getElementById(form).submit();
}

function Trim(i, form){
    var frm = document.forms[form];
    var valor = "";
    valor = frm.elements[i].value;
    frm.elements[i].value = valor.replace(/^\s+|\s+$/g, "");
}

function Campos(i, form){
    var frm = document.forms[form];
    
    switch (frm.elements[i].id) {
        case "cnpj":{
            if (!VerificaCNPJ(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "cpf":{
            if (!VerificaCPF(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "data":{
            if (!VerificaDATA(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "hora":{
            if (!VerificaHORA(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "telefone":{
            if (!VerificaTELEFONE(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "celular":{
            if (!VerificaTELEFONE(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "fax":{
            if (!VerificaTELEFONE(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "cep":{
            if (!VerificaCEP(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "email":{
            if (!VerificaEMAIL(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "senha":{
            if (!VerificaSENHA(i, form)) {
                ShowErro(i, form);
                return false;
            }
            break;
        }
        case "confirma_senha":{
            if (!VerificaSENHA(i, form)) {
                ShowErro(i, form);
                return false;
            }
            else {
                var x = i - 1;
                if (frm.elements[x].value != frm.elements[i].value) {
                    ShowErro(i, form);
                    return false;
                }
            }
            break;
        }
    }
    return true;
}

function Maiusculo(form){
    var frm = document.forms[form];
    var numElementos = frm.elements.length;
    for (var i = 0; i < numElementos; i++) {
        if (!(/email|site/i.test(frm.elements[i].name))) {
            var valor = "";
            valor = frm.elements[i].value.toUpperCase();
            frm.elements[i].value = valor;
        }
    }
}

function LinguaForm(form){
    var frm = document.forms[form];
    if (document.forms[form].getAttribute("lingua") != null) {
        if (navigator.appName == "Microsoft Internet Explorer") {
            var lingua = document.forms[form].getAttribute("lingua").value;
            if (!(/br|es|en/i.test(lingua))) {
                lingua = document.forms[form].getAttribute("lingua");
            }
        }
        else {
            var lingua = document.forms[form].getAttribute("lingua");
        }
    }
    else {
        var lingua = "br";
    }
    return lingua;
}

function ShowErro(i, form){
    var frm = document.forms[form];
    var lingua = LinguaForm(form);
    if (lingua == "br") {
        var msg1 = "Favor Preencher: ";
        var msg2 = "Favor Preencher Corretamente: ";
    }
    else 
        if (lingua == "en") {
            var msg1 = "Please Complete the field: ";
            var msg2 = "Please Complete the field: ";
        }
        else 
            if (lingua == "es") {
                var msg1 = "Por Favor, Rellene el Campo: ";
                var msg2 = "Por Favor, Rellene Correctamente: ";
            }
    var valorValida = frm.elements[i].getAttribute("valida");
    var valor = valorValida.split(",");
    if (frm.elements[i].value == "") {
        alert(msg1 + valor[1]);
    }
    else {
        alert(msg2 + valor[1]);
    }
    frm.elements[i].value = "";
    frm.elements[i].focus();
}

function VerificaSENHA(i, form){
    var frm = document.forms[form];
    if (frm.elements[i].value.length < 6) {
        return false;
    }
    return true;
}

function VerificaCPF(i, form){
    var frm = document.forms[form];
    var num_cpf = frm.elements[i].value;
    var cpf = /^([0-9]{3}\.){2}[0-9]{3}-[0-9]{2}$/i;
    if (!cpf.test(num_cpf)) {
        return false;
    }
    var numCPF = '';
    var numI;
    var numi;
    for (numI = 0; numI < num_cpf.length; numI++) {
        if (num_cpf.charCodeAt(numI) >= 48 && num_cpf.charCodeAt(numI) <= 57) {
            numCPF += num_cpf.charAt(numI);
        }
    }
    if (numCPF.length > 11 || numCPF == "00000000000" || numCPF == "11111111111" || numCPF == "22222222222" || numCPF == "33333333333" || numCPF == "44444444444" || numCPF == "55555555555" || numCPF == "66666666666" || numCPF == "77777777777" || numCPF == "88888888888" || numCPF == "99999999999") {
        return false;
    }
    var soma = 0;
    for (numi = 0; numi < 9; numi++) {
        soma += parseInt(numCPF.charAt(numi)) * (10 - numi);
        resto = 11 - (soma % 11);
    }
    if (resto == 10 || resto == 11) {
        resto = 0;
    }
    if (resto != parseInt(numCPF.charAt(9))) {
        return false;
    }
    soma = 0;
    for (numi = 0; numi < 10; numi++) {
        soma += parseInt(numCPF.charAt(numi)) * (11 - numi);
        resto = 11 - (soma % 11);
    }
    if (resto == 10 || resto == 11) {
        resto = 0;
    }
    if (resto != parseInt(numCPF.charAt(10))) {
        return false;
    }
    return true;
}

function VerificaCNPJ(i, form){
    var frm = document.forms[form];
    var num_cnpj = frm.elements[i].value;
    var cnpj = /^\b[0-9]{2,3}\.?([0-9]{3}\.?){2}\/[0-9]{4}-[0-9]{2}$/i;
    if (!cnpj.test(num_cnpj)) {
        return false;
    }
    var numI;
    var numCNPJ = "";
    for (numI = 0; numI < num_cnpj.length; numI++) {
        if (num_cnpj.charCodeAt(numI) >= 48 && num_cnpj.charCodeAt(numI) <= 57) {
            numCNPJ += num_cnpj.charAt(numI);
        }
    }
    var c = numCNPJ.substr(0, 12);
    var dv = numCNPJ.substr(12, 2);
    var d1 = 0;
    for (numi = 0; numi < 12; numi++) {
        d1 += c.charAt(11 - numi) * (2 + (numi % 8));
    }
    if (d1 == 0) {
        return false;
    }
    d1 = 11 - (d1 % 11);
    if (d1 > 9) 
        d1 = 0;
    if (dv.charAt(0) != d1) {
        return false;
    }
    d1 *= 2;
    for (numi = 0; numi < 12; numi++) {
        d1 += c.charAt(11 - numi) * (2 + ((numi + 1) % 8));
    }
    d1 = 11 - (d1 % 11);
    if (d1 > 9) 
        d1 = 0;
    if (dv.charAt(1) != d1) {
        return false;
    }
    return true;
}

function VerificaTELEFONE(i, form){
    var lingua = LinguaForm(form);
    var frm = document.forms[form];
    var valor = frm.elements[i].value;
    var telefone = /^\(?\d{2}\)?\d{4}-\d{4}$/i;
    if (!telefone.test(valor)) {
        return false;
    }
    return true;
}

function VerificaCEP(i, form){
    var lingua = LinguaForm(form);
    var frm = document.forms[form];
    var valor = frm.elements[i].value;
    var cep = /^[0-9]{5}-[0-9]{3}$/i;
    if (!cep.test(valor)) {
        return false;
    }
    return true;
}

function VerificaDATA(i, form){
    var frm = document.forms[form];
    var valor = frm.elements[i].value;
    var expReg = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/(19|20)?\d{2}$/;
    if ((valor.match(expReg)) && (valor != '')) {
        var dia = valor.substring(0, 2);
        var mes = valor.substring(3, 5);
        var ano = valor.substring(6, 10);
        
        if (((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11)) && (dia > 30)) {
            return false;
        }
        else 
            if (((ano % 4) != 0) && (mes == 2) && (dia > 28)) {
                return false;
            }
            else 
                if (((ano % 4) == 0) && (mes == 2) && (dia > 29)) {
                    return false;
                }
    }
    else {
        return false;
    }
    if (form == "estudante") {
        if (!VerificaDuasDatas(i, form)) {
            return false;
        }
    }
    return true;
}

function VerificaHORA(i, form){
    var frm = document.forms[form];
    var valor = frm.elements[i].value;
    var data = /^[0-9]{2}:[0-9]{2}$/i;
    if (!data.test(valor)) {
        return false;
    }
    else {
        if (valor.substring(0, 2) > 23) {
            return false;
        }
        else 
            if (valor.substring(3, 5) > 59) {
                return false;
            }
    }
    return true;
}

function VerificaDuasDatas(i, form){
    var frm = document.forms[form];
    var valor = frm.elements[i].value;
    var dia1 = valor.substring(0, 2);
    var mes1 = valor.substring(3, 5);
    var ano1 = valor.substring(6, 10);
    var dia2 = "23";
    var mes2 = "03";
    var ano2 = "2009";
    ano1 = ano1 * 1;
    ano2 = ano2 * 1;
    if (ano1 < 100 && ano1 < 20) {
        ano1 = ano1 + 2000
    }
    if (ano2 < 100 && ano2 > 20) {
        ano2 = ano2 + 1900
    }
    if (ano2 < 100 && ano2 < 20) {
        ano2 = ano2 + 2000
    }
    firstdate = new Date(mes1 + '/' + dia1 + '/' + ano1)
    mes1 = firstdate.getMonth() + 1
    dia1 = firstdate.getDate()
    seconddate = new Date(mes2 + '/' + dia2 + '/' + ano2)
    mes2 = seconddate.getMonth() + 1
    dia2 = seconddate.getDate()
    anos = ano2 - ano1
    if (mes2 == mes1) {
        if (dia2 < dia1) {
            mes2 = mes2 + 12;
            anos = anos - 1;
        }
    }
    if (mes2 < mes1) {
        mes2 = mes2 + 12;
        anos = anos - 1;
        meses = mes2 - mes1;
    }
    meses = mes2 - mes1;
    if (dia2 < dia1) {
        meses = meses - 1;
        dia2 = dia2 + 30;
        if (mes2 == mes1) {
            meses = 0;
            anos = anos - 1;
        }
    }
    dias = dia2 - dia1;
    //totalage = anos + ' anos, ' + meses + ' meses e ' + dias + ' dias';
    //alert(totalage);
    if (anos < 16) {
        return false;
    }
    return true;
}

function VerificaEMAIL(i, form){
    var frm = document.forms[form];
    var valorEmail = frm.elements[i].value;
    var valor = valorEmail.split(", ");
    for (var i = 0; i < valor.length; i++) {
        var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
        if (!filter.test(valor[i])) {
            return false;
        }
    }
    return true;
}

function CamposMascara(nome){
    var form = document.getElementById(nome).form.name;
    
    switch (nome) {
        case "cpf":{
            return "999.999.999-99";
            break;
        }
        case "cnpj":{
            return "99.999.999/9999-99";
            break;
        }
        case "data":{
            return "99/99/9999";
            break;
        }
        case "data_hora":{
            return "99/99/9999 99:99:99";
            break;
        }
        case "hora":{
            return "99:99";
            break;
        }
        case "cep":{
            if (LinguaForm(form) == 'br') {
                return "99999-999";
            }
            else {
                return "99999-9999";
            }
            break;
        }
        case "telefone":{
            if (LinguaForm(form) == 'br') {
                return "(99)9999-9999";
            }
            else {
                return "(9999)9999-9999";
            }
            break;
        }
        case "celular":{
            if (LinguaForm(form) == 'br') {
                return "(99)9999-9999";
            }
            else {
                return "(9999)9999-9999";
            }
            break;
        }
        case "fax":{
            if (LinguaForm(form) == 'br') {
                return "(99)9999-9999";
            }
            else {
                return "(9999)9999-9999";
            }
            break;
        }
    }
}

function Mascara(campo, KeyPress){
    var sMask = CamposMascara(campo.id);
    
    var i, nCount, sValue, fldLen, mskLen, bolMask, sCod, nTecla;
    if (document.all) { // Internet Explorer
        nTecla = KeyPress.keyCode;
    }
    else 
        if (document.layers) { // Nestcape
            nTecla = KeyPress.which;
        }
        else {
            nTecla = KeyPress.which;
            if (nTecla == 8) {
                return true;
            }
        }
    
    sValue = campo.value;
    sValue = sValue.toString().replace("-", "");
    sValue = sValue.toString().replace("-", "");
    sValue = sValue.toString().replace(".", "");
    sValue = sValue.toString().replace(".", "");
    sValue = sValue.toString().replace("/", "");
    sValue = sValue.toString().replace("/", "");
    sValue = sValue.toString().replace("(", "");
    sValue = sValue.toString().replace("(", "");
    sValue = sValue.toString().replace(")", "");
    sValue = sValue.toString().replace(")", "");
    sValue = sValue.toString().replace(",", "");
    sValue = sValue.toString().replace(",", "");
    sValue = sValue.toString().replace(" ", "");
    sValue = sValue.toString().replace(" ", "");
    sValue = sValue.toString().replace(":", "");
    sValue = sValue.toString().replace(":", "");
    fldLen = sValue.length;
    mskLen = sMask.length;
    i = 0;
    nCount = 0;
    sCod = "";
    mskLen = fldLen;
    while (i <= mskLen) {
        bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ":") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
        bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " ") || (sMask.charAt(i) == ","))
        if (bolMask) {
            sCod += sMask.charAt(i);
            mskLen++;
        }
        else {
            sCod += sValue.charAt(nCount);
            nCount++;
        }
        i++;
    }
    campo.value = sCod;
    if (nTecla != 8) { // backspace
        if (sMask.charAt(i - 1) == "9") { // apenas numeros...
            return ((nTecla > 47) && (nTecla < 58)); // numeros de 0 a 9
        }
        else { // qualquer caracter...
            return true;
        }
    }
    else {
        return true;
    }
}
