/*********************************************************************
 * author: Leonardo Matias                                           *
 * mail  : valgallom@yahoo.com.br                                    *
 * msn   : valgallom@hotmail.com                                     *
 *********************************************************************/

/**************** MASCARAS *************************************/

function mascara(obj,func){
    eval('obj.value='+func+'(obj.value);');
}

function execMascara(){
    v_obj.value=v_fun(v_obj.value);
}

function integer(v){
    return v.replace(/\D/g,"");
}

/* Padrão (XX) XXXX-XXXXX*/
function telefone(v){
    v=v.replace(/\D/g,"");
    v=v.replace(/^(\d\d)(\d)/g,"($1)$2");
    v=v.replace(/(\d{4})(\d)/,"$1-$2");
    return v;
}

function CPF(v){
    v=v.replace(/\D/g,"");
    v=v.replace(/(\d{3})(\d)/,"$1.$2");
    v=v.replace(/(\d{3})(\d)/,"$1.$2");

    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2");
    return v;
}

function CNPJ(v){
    v=v.replace(/\D/g,"");
    v=v.replace(/^(\d{2})(\d)/,"$1.$2");
    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3");
    v=v.replace(/\.(\d{3})(\d)/,".$1/$2");
    v=v.replace(/(\d{4})(\d)/,"$1-$2");
    return v;
}

function CEP(v){
    v=v.replace(/\D/g,"");
    v=v.replace(/^(\d{5})(\d)/,"$1-$2");
    return v;
}

/* Padrão DD/MM/AAAA */
function data(v){
    v=v.replace(/\D/g,"");
    v=v.replace(/(\d{2})(\d)/,"$1/$2");
    v=v.replace(/(\d{2})(\d)/,"$1/$2");
    return v;
}

/**************** VALIDATE *************************************/
function validateInteger(str){
    var filter=/^[0-9]+$/;
    if (filter.test(str)) {
        return true;
    } else {
        return false;
    }
}

function validateEmail(str){
    var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    if (filter.test(str)) {
        return true;
    } else {
        return false;
    }
}

function validateTelefone(telefone){
    filter = /\(\d{2}\)\d{4}\-\d{4}/;
    if(filter.test(telefone)) {
        return true;
    }
    return false;
}

function validateCep(cep){
    if(cep != ''){
        var filter = /^[0-9]{5}[-][0-9]{3}/;

        if(filter.test(cep)){
            return true;
        }else{
            return false;
        }
    }
}

function trim(str){
    return str.replace(/^\s+|\s+$/g,"");
}

function valueField(name){
    var box = document.getElementsByName(name);
    for(var i=0;i<box.length;i++){
        if(box[i].checked==true){
            return box[i].value;
        }
    }
    return null;
}

function clearFieldRadio(name){
    var box = document.getElementsByName(name);
    for(var i=0;i<box.length;i++){
        box[i].checked=false;
    }
    return null;
}

function validateCPF(st) {
    if (st == "")
        return (false);

    var filtro = /^\d{3}.\d{3}.\d{3}-\d{2}$/i;
    if(!filtro.test(st)){
	 return false;
    }
    
    st = removerCaracteres(st);

    var mesmo;
    for(var i=0;i<=9;i++){
        for(var x=0;x<st.length;x++){
            if(st.charAt(x) != i){
                mesmo = false;
                break;
            }else{
                mesmo = true;
            }
        }
        if(mesmo == true)
            return false;
    }
    l = st.length;

    if ((l == 9) || (l == 8)) {
            for (i = l ; i < 10; i++) {
                    st = '0' + st
            }
    }
    l = st.length;
    st2 = "";
    for (i = 0; i < l; i++) {
        caracter = st.substring(i,i+1);
        if ((caracter >= '0') && (caracter <= '9'))
            st2 = st2 + caracter;
    }

    if ((st2.length > 11) || (st2.length < 10))
        return (false);

    if (st2.length==10)
        st2 = '0' + st2;

    digito1 = st2.substring(9,10);
    digito2 = st2.substring(10,11);
    digito1 = parseInt(digito1,10);
    digito2 = parseInt(digito2,10);
    sum = 0; mul = 10;
    for (i = 0; i < 9 ; i++) {
        digit = st2.substring(i,i+1);
        tproduct = parseInt(digit ,10) * mul;
        sum += tproduct;
        mul--;
    }
    dig1 = ( sum % 11 );
    if ( dig1==0 || dig1==1 )
        dig1=0;
    else
        dig1 = 11 - dig1;

    if (dig1!=digito1)
        return (false);
    sum = 0;
    mul = 11;
    for (i = 0; i < 10 ; i++) {
        digit = st2.substring(i,i+1);
        tproduct = parseInt(digit ,10)*mul;
        sum += tproduct;
        mul--;
    }
    dig2 = (sum % 11);
    if ( dig2==0 || dig2==1 )
        dig2=0;
    else
        dig2 = 11 - dig2;
    if (dig2 != digito2)
        return (false);
    return (true);
}

function validateCNPJ(str) {
    var CNPJ = str;
    var erro = new String;
    if (CNPJ.length < 18)
		erro += "É necessário preencher corretamente o número do CNPJ! \n\n";
    if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
	    if (erro.length == 0)
			erro += "É necessário preencher corretamente o número do CNPJ! \n\n";
    }
    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))
            erro += "A verificação de CNPJ suporta apenas números! \n\n";
    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;
    }
    if (erro.length > 0){
        return false;
    }
    return true;
}

function removerCaracteres(str){
    str = str.replace('.','','g');
    str = str.replace('-','','g');
    str = str.replace('/','','g');
    return str;
}

function validateDate(date,formatDate){
    var ER = /[\/ -]/;
    formatDate = formatDate.split(ER);
    date = date.split(ER);
    var month = [31,28,31,30,31,30,31,31,30,31,30,31];
    var a,m,d;
    for(x=0;x< formatDate.length;x++){
        /*
         onde (a,m,d) representando (a)no, (m)es, (d)ia será preenchido com o respectivo
         valor do índice em que se encontra na matriz
         ------------------------------------------------------------------------------
         Where (a, m, d) representing year, month, day will be filled with the value of
         the index in which it is in the matrix
        */
        eval(formatDate[x]+"="+x+";");
    }
    if(bissexto(date[a]))
        month[1] = 29;
    var ER_day;
    switch(month[date[m]-1]){
        case 28:
            ER_day = "(1[\\d]|2[0-8])";
            break;
        case 29:
            ER_day = "[1-2][\\d]";
            break;
        case 30:
            ER_day = "([1-2][\\d]|30)";
            break;
        case 31:
            ER_day = "([1-2][\\d]|3[0-1])";
            break;
    }
    var ER_2 = new RegExp("(0[1-9]|"+ER_day+")\/(0[1-9]|1[0-2])\/([0-2][\\d]{3})");
    date = date[d]+"/"+date[m]+"/"+date[a];
    return ER_2.test(date);
}

function bissexto(year){
    return ((year%4)==0)?true:false;
}
