//
// +----------------------------------------------------------------------+
// | THT Networks (http://www.thtnetworks.com.br)                         |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2004 THT Networks                                 |
// +----------------------------------------------------------------------+
// | Funções de validação.                                                |
// +----------------------------------------------------------------------+
// | Autor: Thiago Augusto Flessak <thiago@thtnetworks.com.br>            |
// +----------------------------------------------------------------------+
//
//

var msgs   = new Array();
var fields = new Array();

function add_error(c, msg) {
    fields.push(c);
    msgs.push(msg);

    return false;
}

function check_form(f, i) {
    var r;

    if (typeof i == "object") {
        r = i;
    } else {
        if (!isNaN(f)) {
            eval('r = document.forms['+f+'].'+i);
        } else {
            eval('r = document.'+f+'.'+i);
        }
    }

    return r;
}

function valida_campo(f,i,d,v,expr) {
    c = check_form(f, i);

    var t = c.value;

    var required_ok = true;
    if (v.indexOf('-RN') != -1) {
        if (t.replace(/(\s+)/g, '') == '')
            required_ok = false;
    }
    else if (v.indexOf('-R') != -1) {
        if (t.replace(/(\s+)/g, '') == '') {
            add_error(c, '- O campo ('+d+') é obrigatório.\n');
            required_ok = false;
        }
    }

    if (required_ok) {
        if (v.indexOf('-expr') != -1) {
            if (!/expr/.test(t)) {
                return add_error(c, '- '+d+'.\n');
            }
        }
        if (v.indexOf('-isNum') != -1) {
            if (isNaN(t))
                return add_error(c, '- O campo ('+d+') deve conter somente números.\n');
        }
        else if (v.indexOf('-isLet') != -1) {
            if (!isNaN(t))
                return add_error(c , '- O campo ('+d+') não pode conter números.\n');
        }
        if (v.indexOf('-noSpace') != -1) {
            if (t.indexOf(' ') != -1)
                return add_error(c, '- O campo ('+d+') não pode conter espaço(s).\n');
        }
        if (v.indexOf('-cSpace') != -1) {
            c.value = t.replace(/(\s+)/g,' ');
        }
        if (v.indexOf('-noEChr') != -1) {
            if (!/^[A-Za-z0-9 \-\_ÁÉÍÓÚàÀáéíóúÃÕãõÂÊÎÔÛâêîôÇç]*$/.test(t))
                return add_error(c, '- O campo ('+d+') não pode conter caracteres especiais.\n');
        }
        if (v.indexOf('-isEmail') != -1) {
            //if (!/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/.test(t))
            if (!/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(t))
                return add_error(c, '- ('+t+') e-mail inválido.\n');
        }
        else if (v.indexOf('isUrl') != -1) {
            if (!/[(http:\/\/)(\.)]*/.test(t) || t.indexOf(' ') != -1)
                return add_error(c, '- ('+d+') url inválida.\n');
        }
    }

    return true;
}

function valida_cpf (f,i) {
    var args = valida_cpf.arguments;
    var erro = false;
    var c = check_form(f, i);

    cpf = c.value;
    if (args[2]) {
        if (args[2].indexOf('-RN') != -1 && cpf.replace(/(\s+)/g, '') == '')
            return true;
    }

    cpf = cpf.replace(/\./g, '');
    cpf = cpf.replace(/\-/g, '');

    if(cpf.length!=11 ||
       cpf=="00000000000" || cpf=="11111111111" || cpf=="22222222222" || cpf=="33333333333" || cpf=="44444444444" ||
       cpf=="55555555555" || cpf=="66666666666" || cpf=="77777777777" || cpf=="88888888888" || cpf=="99999999999")
        erro=true;

    soma = 0;
    for(var i=0;i<9;i++)
        soma += parseInt(cpf.charAt(i))*(10-i);

    resto = 11-(soma%11);

    if(resto == 10 || resto == 11)
        resto = 0;

    if(resto != parseInt(cpf.charAt(9)))
        erro = true;

    soma = 0;
	for(var i=0;i<10;i++)
	    soma += parseInt(cpf.charAt(i))*(11-i);

	resto = 11-(soma%11);

	if(resto == 10 || resto == 11)
	    resto = 0;

	if(resto != parseInt(cpf.charAt(10)))
	    erro=true;

	if (erro) {
	    if (args[3]) {
	        return add_error(c, '- '+args[3]+'.\n');
        } else {
	        if (cpf != '') {
	            return add_error(c, '- ('+cpf+') CPF Inválido.\n');
	        } else {
	            return add_error(c, '- CPF Inválido.\n');
	        }
        }
	}

	return true;
}

function valida_cgc(f,i) {
    var args = valida_cgc.arguments;
    var erro   = false;
    var result = 0;
    var c = check_form(f, i);

    cgc = c.value;
    if (args[2]) {
        if (args[2].indexOf('-RN') != -1 && cgc.replace(/(\s+)/g, '') == '')
            return true;
    }

    cgc = cgc.replace(/\./g, '');
    cgc = cgc.replace(/\-/g, '');
    cgc = cgc.replace(/\//g, '');

    if(cgc.length != 14 ||
       cgc=="00000000000000" || cgc=="11111111111111" || cgc=="22222222222222" || cgc=="33333333333333" || cgc=="44444444444444"||
       cgc=="55555555555555" || cgc=="66666666666666" || cgc=="77777777777777" || cgc=="88888888888888" || cgc=="99999999999999")
        erro=true;

    for (i=11; i<=12; i++) {
        soma = 0;
        n    = 2;
        for (j=i; j>=0; j--) {
            soma = soma + (parseInt(cgc.charAt(j))*n);
            if (++n > 9)
                n = 2;
        }

        soma = 11 - (soma % 11);

        if (soma >= 10)
            soma = 0;

        result = result + soma;
    }

    soma = parseInt(cgc.charAt(12)) + parseInt(cgc.charAt(13));

    if ((soma != result) || erro) {
	    if (args[3]) {
	        return add_error(c, '- '+args[3]+'.\n');
        } else {
	        if (cgc != '') {
	            return add_error(c, '- ('+cgc+') CGC Inválido.\n');
	        } else {
	            return add_error(c, '- CGC Inválido.\n');
	        }
        }
    }

    return true;
}

function compara_campos(f,i,j,m) {
    if (!isNaN(f)) {
        eval('c1 = document.forms['+f+'].'+i);
        eval('c2 = document.forms['+f+'].'+j);
    } else {
        eval('c1 = document.'+f+'.'+i);
        eval('c2 = document.'+f+'.'+j);
    }

    if (c1.value != c2.value) {
        return add_error(c1, '- '+m+'\n');
    }

    return true;
}

function valida_checkbox(f,i,d,minSel) {
    var c = check_form(f, i);

    if (!c.length) {
        if (!c.checked) {
            return add_error(c[0], '- O campo ('+d+') precisa estar selecionado.\n');
        }
    } else {
        var selCount = 0;
        for (var i=0; i<c.length; i++) {
            if (c[i].checked)
                selCount++;
        }

        if (selCount < minSel)
            return add_error(c[0], '- ('+d+') É preciso selecionar pelo menos '+minSel+' opção.\n');
    }

    return true;
}

function valida_radio(f,i,d) {
    var c = check_form(f, i);

    var found = false;
    for (var i=0; i<c.length; i++) {
        if (c[i].checked) {
            found = true;
            break;
        }
    }

    if (!found)
        return add_error(c[0], '- ('+d+') é preciso selecionar uma opção.\n');

    return '';
}

function valida_select(f,i,d,cid) {
    var c = check_form(f, i);

    // Case exista mais de um select com o mesmo nome, o array sera Multidimensional
    if (c[0][0]) {
        var found = true;
        for (var i=0; i<c.length; i++) {
            if (c[i].value == '' || c[i].value == 'null') {
                fieldError = c[i];
                found = false;
                break;
            }
        }

        if (!found) {
            if (cid > 0) {
                return add_error(fieldError, '- ('+d+') É preciso selecionar as '+c.length+' opções da alternativa '+cid+'.\n');
            } else {
                return add_error(fieldError, '- ('+d+') É preciso selecionar uma opção da lista.\n');
            }
        }
    } else {
        if (c.value == '' || c.value == 'null') {
            return add_error(c, '- ('+d+') É preciso selecionar uma opção da lista.\n');
        }
    }

    return true;
}

function valida_data (f, i, d) {
    var args = valida_data.arguments;
    var c = check_form(f, i);

    if (args[3]) {
        if (args[3].indexOf('-RN') != -1 && c.value.replace(/(\s+)/g, '') == '')
            return true;
    }

    var dt = c.value.split('/');

    result = true;
    if (!/[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}/.test(c.value)) {
        if (dt[2] && length(dt[2]) != 4) {
            return add_error(c, '- ('+d+'), o ano deve conter 4 dígitos.\n');
        } else {
            result = false;
        }
    }

    // verifica o dia valido para cada mes
    else if ((dt[0] < 01)||(dt[0] < 01 || dt[0] > 30) && (  dt[1] == 04 || dt[1] == 06 || dt[1] == 09 || dt[1] == 11 ) || dt[0] > 31) {
        result = false;
    }

    // verifica se o mes e valido
    else if (dt[1] < 01 || dt[1] > 12 ) {
        result = false;
    }

    // verifica se e ano bissexto
    else if (dt[1] == 2 && ( dt[0] < 01 || dt[0] > 29 || ( dt[0] > 28 && (parseInt(dt[2] / 4) != dt[2] / 4)))) {
        result = false;
    }

    if (!result) {
        return add_error(c, '- '+d+' Inválida.\n');
    }
}

function show_result() {
    var msg = '';

    if (msgs.length > 0) {
        for (var i=0; i<msgs.length; i++) {
            msg += msgs[i];
        }

        fields[0].focus();
        msgs   = new Array();
        fields = new Array();

        alert(msg);
        return false;
    } else {
        return true;
    }
}