﻿function DigitoCPFCNPJ(numCIC)
{
    var numDois = numCIC.substring(numCIC.length-2, numCIC.length);
    var novoCIC = numCIC.substring(0, numCIC.length-2);
    switch (numCIC.length)
    {
        case 11 :
            numLim = 11;
        break;
        case 14 :
            numLim = 9;
        break;
        default : return false;
    }
    var numSoma = 0;
    var Fator = 1;
    for (var i=novoCIC.length-1; i>=0 ; i--)
    {
        Fator = Fator + 1;
        if (Fator > numLim)
        {
            Fator = 2;
        }
        numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
    }

    numSoma = numSoma/11;
    var numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
    if (numResto > 1)
    {
        numResto = 11 - numResto;
    }
    else
    {
        numResto = 0;
    }

    //-- Primeiro dígito calculado. Fará parte do novo cálculo.

    var numDigito = String(numResto);
    novoCIC = novoCIC.concat(numResto);

    //--

    numSoma = 0;
    Fator = 1;
    for (var i=novoCIC.length-1; i>=0 ; i--)
    {
        Fator = Fator + 1;
        if (Fator > numLim)
        {
            Fator = 2;
        }
        numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
    }

    numSoma = numSoma/11;
    numResto = numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
    if (numResto > 1)
    {
        numResto = 11 - numResto;
    }
    else
    {
        numResto = 0;
    }

    //-- Segundo dígito calculado.
    numDigito = numDigito.concat(numResto);
    if (numDigito == numDois)
    {
        return true;
    }
    else
    {
        return false;
    }
}
//--< Fim da Função >--

//-- Retorna uma string apenas com os números da string enviada
function ApenasNum(strParm)
{
    strParm = String(strParm);
    var chrPrt = "0";
    var strRet = "";
    var j=0;
    for (var i=0; i < strParm.length; i++)
    {
        chrPrt = strParm.substring(i, i+1);
        if ( chrPrt.match(/\d/) )
        {
            if (j==0)
            {
                strRet = chrPrt;
                j=1;
            }
            else
            {
                strRet = strRet.concat(chrPrt);
            }
        }
    }
    return strRet;
}
//--< Fim da Função >--

//-- Somente aceita os caracteres válidos para CPF e CNPJ.
function PreencheCIC(objCIC)
{
    var chrP = objCIC.value.substring(objCIC.value.length-1, objCIC.value.length);

    if ( !chrP.match(/[0-9]/) && !chrP.match(/[\/.-]/) )
    {
        objCIC.value = objCIC.value.substring(0, objCIC.value.length-1);
        return false;
    }
    return true;
}
//--< Fim da Função >--

function mascaraCIC (obj)
{
    numCIC = ApenasNum(obj.value);
    numCIC = String(numCIC);
    switch (numCIC.length)
    {
        case 11 :
            obj.value = numCIC.substring(0,3) + "." + numCIC.substring(3,6) + "." + numCIC.substring(6,9) + "-" + numCIC.substring(9,11);
            break;
        case 14 :
            obj.value = numCIC.substring(0,2) + "." + numCIC.substring(2,5) + "." + numCIC.substring(5,8) + "/" + numCIC.substring(8,12) + "-" + numCIC.substring(12,14);
            break;
    }
}

function mascaraCEP (obj)
{
    numCEP = ApenasNum(obj.value);
    numCEP = String(numCEP);
    switch (numCEP.length)
    {
        case 8 :
            obj.value = numCEP.substring(0,5) + "-" + numCEP.substring(5,8);
            break;
    }
}

function mascaraTel (obj)
{
    numTel = ApenasNum(obj.value);
    numTel = String(numTel);
    switch (numTel.length)
    {
        case 10 :
            obj.value = "(" + numTel.substring(0,2) + ")" + numTel.substring(2,6) + "-" + numTel.substring(6,10);
            break;
        case 11 :
            obj.value = "(" + numTel.substring(1,3) + ")" + numTel.substring(3,7) + "-" + numTel.substring(7,11);
            break;
    }
}
function mascaraData (obj)
{
    numData = ApenasNum(obj.value);
    numData = String(numData);
    switch (numData.length)
    {
        case 8 :
            obj.value = numData.substring(0,2) + "/" + numData.substring(2,4) + "/" + numData.substring(4,8);
            break;
    }
}

function formataCIC (numCIC)
{
    numCIC = String(numCIC);
    switch (numCIC.length)
    {
        case 11 :
            return numCIC.substring(0,3) + "." + numCIC.substring(3,6) + "." + numCIC.substring(6,9) + "-" + numCIC.substring(9,11);
        case 14 :
            return numCIC.substring(0,2) + "." + numCIC.substring(2,5) + "." + numCIC.substring(5,8) + "/" + numCIC.substring(8,12) + "-" + numCIC.substring(12,14);
        default :
            //alert("Tamanho incorreto do CPF ou CNPJ!");
            return "";
    }
}
function formataCEP(numCEP)
{
    numCEP = String(numCEP);
    switch (numCEP.length)
    {
        case 8 :
            return numCEP.substring(0,5) + "-" + numCEP.substring(5,8);
            break;
        default :
            return "";
    }
}

function formataTel(numTel)
{
    numTel = String(numTel);
    switch (numTel.length)
    {
        case 10 :
            return "(" + numTel.substring(0,2) + ")" + numTel.substring(2,6) + "-" + numTel.substring(6,10);
            break;
        case 11 :
            return "(" + numTel.substring(1,3) + ")" + numTel.substring(3,7) + "-" + numTel.substring(7,11);
            break;
        default :
            return "";
    }
}

function formataData(numData)
{
    numData = String(numData);
    switch (numData.length)
    {
        case 8 :
            return numData.substring(0,2) + "/" + numData.substring(2,4) + "/" + numData.substring(4,8);
            break;
        default :
            return "";
    }
}

//-- Remove os sinais, deixando apenas os números e reconstroi o CPF ou CNPJ, verificando a validade
//-- Recebe como parâmetros o número do CPF ou CNPJ, com ou sem sinais e o atualiza com sinais é validado.
function ConfereCIC(sender, args)
{
    var strCPFPat = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
    var strCNPJPat = /^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/;

    numCPFCNPJ = ApenasNum(args.Value);
    
    if (!DigitoCPFCNPJ(numCPFCNPJ))
    {
        args.IsValid = false;
    }
    
    args.Value = formataCIC(numCPFCNPJ);
    
    if (args.Value.match(strCNPJPat))
    {
        args.IsValid = true;
    }
    else if (args.Value.match(strCPFPat))
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}
//Fim da Função para Cálculo do Digito do CPF/CNPJ

function ConfereCEP(sender, args)
{
    var strCEPPat = /^\d{5}-\d{3}$/;

    numCEP = ApenasNum(args.Value);
    
    args.Value = formataCEP(numCEP);
    
    if (args.Value.match(strCEPPat))
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}

function ConfereTel(sender, args)
{
    var strTelPat = /^\(\d{2}\)\d{4}-\d{4}$/;

    numTel = ApenasNum(args.Value);
    
    args.Value = formataTel(numTel);
    
    if (args.Value.match(strTelPat))
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}

function ConfereData(sender, args)
{
    var strDataPat = /^\d{2}\\\d{2}\\\d{4}$/;

    numData = ApenasNum(args.Value);
    
    args.Value = formataTel(numData);
    
    if (args.Value.match(strDataPat))
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = false;
    }
}

function formatar(src, mask, proxcampo) {
    var i = src.value.length;
    var saida = mask.substring(0, 1);
    var texto = mask.substring(i)
    var foco = proxcampo;
    if (texto.substring(0, 1) != saida) {
        src.value += texto.substring(0, 1);
    }
    if (mask.toString().length == i) {
        document.getElementById(foco).focus();
    }
}


//Identificação de browser
var BrowserDetect = {
    init: function() {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";
    },
    searchString: function(data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1)
                    return data[i].identity;
            }
            else if (dataProp)
                return data[i].identity;
        }
    },
    searchVersion: function(dataString) {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
		{
		    string: navigator.userAgent,
		    subString: "Chrome",
		    identity: "Chrome"
		},
		{ string: navigator.userAgent,
		    subString: "OmniWeb",
		    versionSearch: "OmniWeb/",
		    identity: "OmniWeb"
		},
		{
		    string: navigator.vendor,
		    subString: "Apple",
		    identity: "Safari",
		    versionSearch: "Version"
		},
		{
		    prop: window.opera,
		    identity: "Opera"
		},
		{
		    string: navigator.vendor,
		    subString: "iCab",
		    identity: "iCab"
		},
		{
		    string: navigator.vendor,
		    subString: "KDE",
		    identity: "Konqueror"
		},
		{
		    string: navigator.userAgent,
		    subString: "Firefox",
		    identity: "Firefox"
		},
		{
		    string: navigator.vendor,
		    subString: "Camino",
		    identity: "Camino"
		},
		{		// for newer Netscapes (6+)
		    string: navigator.userAgent,
		    subString: "Netscape",
		    identity: "Netscape"
		},
		{
		    string: navigator.userAgent,
		    subString: "MSIE",
		    identity: "Explorer",
		    versionSearch: "MSIE"
		},
		{
		    string: navigator.userAgent,
		    subString: "Gecko",
		    identity: "Mozilla",
		    versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
		    string: navigator.userAgent,
		    subString: "Mozilla",
		    identity: "Netscape",
		    versionSearch: "Mozilla"
		}
	],
    dataOS: [
		{
		    string: navigator.platform,
		    subString: "Win",
		    identity: "Windows"
		},
		{
		    string: navigator.platform,
		    subString: "Mac",
		    identity: "Mac"
		},
		{
		    string: navigator.userAgent,
		    subString: "iPhone",
		    identity: "iPhone/iPod"
		},
		{
		    string: navigator.platform,
		    subString: "Linux",
		    identity: "Linux"
		}
	]

};
BrowserDetect.init();

function validaCPFCNPJ(e)
{
    var tecla = allEve(e).key;

    if ((validaEspeciais(tecla) == true) || (tecla > 43 && tecla < 58)) // numeros de 0 a 9 virgula ponto hifen e barra/
        return true;
    else 
    {
        if (tecla != 8) // espaço
            return false;
        else
            return true;
    }
}

function validaCEPs(e)
{
    var tecla = allEve(e).key;

    if ((validaEspeciais(tecla) == true) || (tecla == 45) || (tecla > 47 && tecla < 58)) // numeros de 0 a 9 e hifen
    {
        return true;
    }
    else {
        if (tecla != 8) // espaço
            return false;
        else
            return true;
    }
}

function validaTel(e)
{
    var tecla = allEve(e).key;
    if ((validaEspeciais(tecla) == true) || (tecla == 40 || tecla == 41 || tecla == 45) || (tecla > 47 && tecla < 58)) // numeros de 0 a 9 e ( e ) e -
        return true;
    else 
    {
        if (tecla != 8) // espaço
            return false;
        else
            return true;
    }
}

function validaNumero(e) 
{
    var tecla = allEve(e).key;
    if ((validaEspeciais(tecla) == true) || (tecla == 44 || tecla == 46) || (tecla > 47 && tecla < 58)) // numeros de 0 a 9
        return true;
    else 
    {
        if (tecla != 8 ) // espaço
            return false;
        else
            return true;
    }
}

function validaEspeciais(tecla) {
    var valida = new Array(8, 9, 35, 36, 37, 39, 46, 116);
    var retorno = false;
    for (i = 0; i < valida.length; i++) {
        if (tecla == valida[i]) {
            retorno = true;
        }
    }
    return retorno;
}


//Função de tratamento de eventos para IE e Firefox
function allEve(e) {
    var ev = (window.event) ? window.event : e;
    if (!ev || !ev.type) return false;
    var ME = ev;

    if (ME.type.indexOf('key') != -1) {
        if (BrowserDetect.browser == "Explorer" || ME.type.indexOf('keypress') != -1) {
            ME.key = (ev.keyCode) ? ev.keyCode : ((ev.charCode) ? ev.charCode : ev.which);
        }
        else ME.key = ev.charCode;
        if (ME.key) ME.letter = String.fromCharCode(ME.key);
    }
    return ME;
}


//Validação do limite operacional
function converteNumero(valor) {

    parteInteira = ApenasNum(valor.toString().substr(0, valor.toString().length - 2));
    parteDecimal = ApenasNum(valor.toString().substr(valor.toString().length - 2, 2));

    return parteInteira + '.' + parteDecimal;
}

function ValidaLimite(sender, args) {

    numValorTotal = parseFloat(converteNumero(args.Value));
    numLimiteOperacional = parseFloat(converteNumero(document.getElementById("lblLimiteOperacional").value));

    if (numValorTotal > numLimiteOperacional) {
        args.IsValid = false;
    }
    else{
        args.IsValid = true;
    }
}

function validaNome(e) {
    return (somenteLetra(e) || somenteNumero(e));
}

function validaEndereco(e) {
    return (somenteLetra(e) || somenteNumero(e) || somenteEspeciais(e));
}

function somenteNumero(e) {
    var tecla = (window.event) ? event.keyCode : e.which;
    if ((tecla >= 48 && tecla <= 57)) return true;
    else {
        if (tecla == 8 || tecla == 32 || tecla == 0) return true;
        else return false;
    }
}

function somenteLetra(e) {
    var tecla = (window.event) ? event.keyCode : e.which;
    if ((tecla >= 65 && tecla <= 90) || (tecla >= 97 && tecla <= 122)) return true;
    else {
        if (tecla == 8 || tecla == 32 || tecla == 0) return true;
        else return false;
    }
}

function somenteEspeciais(e) {
    var tecla = (window.event) ? event.keyCode : e.which;
    if (tecla == 44 || tecla == 40 || tecla == 41 || tecla == 45 || tecla == 46 || tecla == 59) return true;
    else {
        if (tecla == 8 || tecla == 32 || tecla == 0) return true;
        else return false;
    }
}
