/**
 * @return BIBLIOTECA DE DESENVOLVIMENTO WEB ONDE SEU FOCO É A AGILIDADE NA PROGRAMAÇÃO
 * E CLAREZA NOS CODIGOS PARA A CRIAÇÃO DE ALGORITIMOS LIMPOS E ENTENDIVEIS QUALQUER UM PROGRAMADOR. 
 * 
 * @nome MRtools -> Marcelo Reis ferramentas
 * 
 * 
 * @author   - Marcelo Reis
 * @version  - 01 de agosto de 2008
 */
var MRtools ={
    connectAjax: function(Ajax)
    {
	try
	{
            // Firefox, Opera 8.0+, Safari
            Ajax=new XMLHttpRequest();
            return Ajax;
	}
        catch (e)
        {
            // Internet Explorer
            try
            {
		Ajax=new ActiveXObject("Msxml2.XMLHTTP");
		return Ajax;
            }
            catch (e)
            {
                try
                {
                    Ajax=new ActiveXObject("Microsoft.XMLHTTP");
                    return Ajax;
                }
                catch (e)
                {
                    document.getElementById('alert').innerHTML = 'E R R O: Seu browser nao suporta AJAX.&nbsp;';
                    document.getElementById('alert').className = 'alert_atencao';
                    return false;
                }
            }
        }

    },


    /**
     * @return CONVERTE A DATA DO FORMATO NATIVO NO BANCO DE DADOS 
     * PARA O FORMATO CONVENCIONAL BRASILEIRO 
     * E/OU 
     * DO FORMATO CONVENCIONAL BRASILEIRO PARA O FORMATO NATIVO NO BANCO DE DADOS
     * 
     * @param  data = A data a ser alterada
     * @param  formato = A formatação desejada na determinada DATA
     * 
     * @example var data = MRtools.converteData("2008-07-22", 'convencional') 
     * ->  a variavel data ira retornar 22/07/2008
     * E/OU
     * var data = MRtools.converteData("22/07/2008", 'bancoDados') 
     * ->  a variavel ira retornar 2008-07-22
     * 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */
    converteData:function (data, formato)
    {
        var new_data = new String(data);
        var msg;
        if(formato == 'convencional')
        {
            var lista = new_data.split('-');
            msg = lista[2]+'/'+lista[1]+'/'+lista[0];
            return msg
        }
        else
        {
            if(formato == 'bancoDados')
            {
                var lista = new_data.split('/');
                msg = lista[2]+'-'+lista[1]+'-'+lista[0];
                return msg;
            }

        }
        window.alert('Erro de Sistema. 1');
        return false;
    },


    //DELETA TODO O CONTEUDO DE UMA TABELA
    deletaConteudoTabela:function(id_tabela)
    {
        var tabela	= document.getElementById(id_tabela);
        var pega_linha	= tabela.getElementsByTagName('tr');
        while(pega_linha[0])
        {
            tabela.deleteRow(0);
        }
    },


    //DELETA UMA DETERMINADA LINHA DA TABELA
    deletaLinhaTabela:function(idLinha, idTabela)
    {
        document.getElementById(idTabela).deleteRow(idLinha);
    },


    //DELETA UMA DETERMINADA COLUNA DA LINHA
    deletaColunaTabela:function(idColuna, idLinha)
    {
        document.getElementById(idLinha).deleteCell(idColuna);
    },


    //CRIA UMA TABELA APARTIR DO PARAMETRO idPaiTabela
    criaTabela:function(idPaiTabela, idNovaTabela){
        var tabela = document.createElement("tbody");
        tabela.id = idNovaTabela;
        document.getElementById(idPaiTabela).appendChild(tabela);
    },


    //CRIA UMA LINHA DENTRO DA TABELA ESPECIFICADA PELO PARAMETRO idTabela
    insereLinha:function(idTabela, idNovaLinha, indiceLinha){
        var tabela  = document.getElementById(idTabela);
        var linha   = tabela.insertRow(indiceLinha);
        linha.id= idNovaLinha;
    },


    /**
     * @return INSERE UMA COLUNA EM UMA DETERMINADA LINHA
     * 
     * @param  idLinha      = O id da linha onde sera inserido a coluna
     * @param  idNovaColuna = O id a ser atribuido a coluna inserida
     * @param  indiceColuna = O indice[posicao] que sera inserido a coluna
     * @param  alinhamento  = O Alinhamento da coluna inserida
     * 
     * 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */
    insereColuna:function(idLinha, idNovaColuna, indiceColuna, alinhamento)
    {
        var linha   = document.getElementById(idLinha);
        var coluna  = linha.insertCell(indiceColuna);
        coluna.id   = idNovaColuna;
        coluna.setAttribute('align',alinhamento);
    },


    //CRIA UM INPUT APARTIR DO PARAMETRO idPaiInput
    criaInput:function(idPaiInput, idInput, valorPadrao)
    {
        var input = document.createElement('input');
        input.setAttribute('type','text');
        if(valorPadrao!=undefined){input.setAttribute('value',valorPadrao);}
        input.id = idInput;
        document.getElementById(idPaiInput).appendChild(input);
    },


    //CRIA UMA LABEL APARTIR DO PARAMETRO idPaiLabel
    criaLabel:function(idPaiLabel, idLabel, texto)
    {
        var label = document.createElement("label");
        var novaLabel = document.getElementById(idPaiLabel).appendChild(label);
        novaLabel.id = idLabel;
        novaLabel.innerHTML = texto;
    },

    limitarFaixaValor:function(idCampo, min, max){
        var Campo = document.getElementById(idCampo);
        if(Campo == undefined){
            alert("Campo nao definido");
            return false;
        }else{
            if(Campo.value > min && Campo.value < max){
                Campo.value = min;
                return false;
            }else{
                return true;
            }
        }
    },
    /**
     * @return RETORNA TRUE CASO O PARAMETRO PASSADO SEJA UM NUMERO V�?LIDO
     * 
     * @param  valor = O numero a para a verificação 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */
    isNumero:function(valor)
    {
        return (!isNaN(valor));
    },
    
    /**
     * @return VERDADEIRO CASO TODOS OS CAMPOS PASSADOS PELO PARAMETRO ESTEJAM PREENCHIDO
     * E RETORNA FALSO CASO ALGUM DOS CAMPOS PASSADOS PELO PARAMETRO ESTEJAM VAZIOS
     * 
     * @param  formato = A formatação desejada na determinada DATA
     * @param  camposObrigatorios = Os campos a serem testados
     * 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */    
    isVazio:function(aCamposObrigatorios)
    {
        var campo;
        //reseta todos os bloqueios antes de fazer nova verifica��o de campos vazios
	for(var i=0;i<aCamposObrigatorios.length;i++){
            document.getElementById(aCamposObrigatorios[i]).style.border = '1px solid #ccc';
	}	
	
	for(var i=0;i<aCamposObrigatorios.length;i++){
            campo = document.getElementById(aCamposObrigatorios[i]);
            
            if((campo.value == '')||(campo.value == 0))
            {
                alert('O campo '+campo.title+' esta em braco, preencha.');
                campo.style.border='1px solid #7B9600';
                campo.focus();
                return false;
            }
	}	
	return true;        
    },



    //VALIDAÇÕES
    //valida telefone
    validaTelefone:function (tel)
    {
        exp = /\(\d{2}\)\ \d{4}\-\d{4}/
        if(!exp.test(tel.value))
            alert('Numero de Telefone Invalido!');
    },

    //valida CEP
    validaCep:function (cep)
    {
        exp = /\d{2}\.\d{3}\-\d{3}/
        if(!exp.test(cep.value))
            alert('Numero de Cep Invalido!');
    },

    //valida data
    validaData:function (data)
    {
        exp = /\d{2}\/\d{2}\/\d{4}/
        if(!exp.test(data.value))
            alert('Data Invalida!');
    },

    //valida o CPF digitado
    validarCPF:function (Objcpf)
    {
        var Objcpf = document.getElementById(Objcpf);
        var cpf = Objcpf.value;
        exp = /\.|\-/g
        cpf = cpf.toString().replace( exp, "" );
        var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
        var soma1=0, soma2=0;
        var vlr =11;

        for(i=0;i<9;i++)
        {
            soma1+=eval(cpf.charAt(i)*(vlr-1));
            soma2+=eval(cpf.charAt(i)*vlr);
            vlr--;
        }
        soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
        soma2=(((soma2+(2*soma1))*10)%11);

        var digitoGerado=(soma1*10)+soma2;
        if(digitoGerado!=digitoDigitado)
            alert('CPF Invalido!');
    },

    //valida o CNPJ digitado
    validarCNPJ:function (ObjCnpj)
    {
        var cnpj = document.getElementById(ObjCnpj).value;
        var valida = new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);
        var dig1= new Number;
        var dig2= new Number;

        exp = /\.|\-|\//g
        cnpj = cnpj.toString().replace( exp, "" );
        var digito = new Number(eval(cnpj.charAt(12)+cnpj.charAt(13)));

        for(i = 0; i<valida.length; i++)
        {
            dig1 += (i>0? (cnpj.charAt(i-1)*valida[i]):0);
            dig2 += cnpj.charAt(i)*valida[i];
        }
        dig1 = (((dig1%11)<2)? 0:(11-(dig1%11)));
        dig2 = (((dig2%11)<2)? 0:(11-(dig2%11)));

        if(((dig1*10)+dig2) != digito)
            alert('CNPJ Invalido!');

    },

    
    
    
    
    //MASCARAS
    //formata de forma generica os campos
    formataCampo:function (campo, Mascara, tecla)
    {
        var campo = document.getElementById(campo);
        var boleanoMascara;
        var Digitado = tecla;
        
        exp = /\-|\.|\/|\(|\)| /g
        campoSoNumeros = campo.value.toString().replace( exp, "" );

        var posicaoCampo = 0;
        var NovoValorCampo="";
        var TamanhoMascara = campoSoNumeros.length;;

        if (Digitado != 8) { // backspace
            for(i=0; i<= TamanhoMascara; i++) {
                boleanoMascara  = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".") || (Mascara.charAt(i) == "/"))
                boleanoMascara  = boleanoMascara || ((Mascara.charAt(i) == "(") || (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " "))
                if (boleanoMascara) {
                    NovoValorCampo += Mascara.charAt(i);
                    TamanhoMascara++;
                }else {
                    NovoValorCampo += campoSoNumeros.charAt(posicaoCampo);
                    posicaoCampo++;
                }
            }
            campo.value = NovoValorCampo;
            return true;
        }else {
            return true;
        }
    },

    /**
     * @return RETORNA FALSE CASO A TECLA DIGITADA SEJA DIFERENTE DE QUALQUER UM NUMERO INTEIRO
     * 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */
    mascaraInteiro:function(tecla){
        if (tecla < 48 || tecla > 57){
            alert('Este campo nao aceita letras.');
            event.returnValue = false;
            return false;
        }
        return true;
    },
    
    /**
     * @return RETORNA FALSE CASO A TECLA DIGITADA SEJA DIFERENTE DE TEXTO
     * 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */
    mascaraString:function()
    {
        if (event.keyCode > 48 && event.keyCode < 57){
            Ext.MessageBox.alert('Caracter inv&aacute;lido', 'Este campo n&atilde;o aceita N&uacute;meros.');
            event.returnValue = false;
            return false;
        }

        return true;
    },

    mascaraMoeda:function (objTextBox)
    {
        if(MRtools.mascaraInteiro()){
            var SeparadorDecimal = ',';
            var SeparadorMilesimo = '.';
            var key = '';
            var i = j = 0;
            var len = len2 = 0;
            var strCheck = '0123456789';
            var aux = aux2 = '';
            var whichCode = (window.Event) ? event.which : event.keyCode;
            if (whichCode == 13) return true;
            key = String.fromCharCode(whichCode); // Valor para o c�digo da Chave
            len = objTextBox.value.length;
            for(i = 0; i < len; i++)
                if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break;
            aux = '';
            for(; i < len; i++)
                if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i);
            aux += key;
            len = aux.length;
            if (len == 0) objTextBox.value = '';
            if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux;
            if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux;
            if (len > 2) {
                aux2 = '';
                for (j = 0, i = len - 3; i >= 0; i--) {
                    if (j == 3) {
                        aux2 += SeparadorMilesimo;
                        j = 0;
                    }
                    aux2 += aux.charAt(i);
                    j++;
                }
                objTextBox.value = '';
                len2 = aux2.length;
                for (i = len2 - 1; i >= 0; i--)
                    objTextBox.value += aux2.charAt(i);
                objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
            }
        }
        return false;
    },

    //adiciona mascara de cnpj
    mascaraCNPJ:function (cnpj)
    {
        if(MRtools.mascaraInteiro(cnpj)==false)
        {
            event.returnValue = false;
        }
        return MRtools.formataCampo(cnpj, '00.000.000/0000-00', event);
    },

    //adiciona mascara de cep
    mascaraCep:function (cep)
    {
        if(MRtools.mascaraInteiro(cep)==false)
        {
            event.returnValue = false;
        }
        return MRtools.formataCampo(cep, '00.000-000', event);
    },

    //adiciona mascara de data
    mascaraData:function (data)
    {
        if(MRtools.mascaraInteiro(data)==false)
        {
            event.returnValue = false;
        }
        return MRtools.formataCampo(data, '00/00/0000', event);
    },

    //adiciona mascara ao telefone
    mascaraTelefone:function (tel, tecla)
    {
        if(tecla==undefined){
            try{
                tecla = event.keyCode;
            }
            catch(e){
                tecla = event.charCode;
            }
        }
        if(MRtools.mascaraInteiro(tecla)==false)
        {
            event.returnValue = false;
        }
        return MRtools.formataCampo(tel, '(00) 0000-0000', tecla);
    },

    //adiciona mascara ao CPF
    mascaraCPF:function (cpf)
    {
        if(MRtools.mascaraInteiro()==false)
        {
            event.returnValue = false;
        }
        return MRtools.formataCampo(cpf, '000.000.000-00', event);
    },
    
    /**
     * @return REMOVE A MASCARA EXISTENTE NO VALOR
     * @example var valor = MRtools.removeMascaras("1.234,56");
     * -> a variavel valor ira retornar "12345"
     * 
     * @param  valor = O valor com a mascara 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */
    removeMascaras:function(valor)
    {
    	var virgula = ",";
	var ponto = ".";
        var hifen = "-";
        var barra = "/";
	var result = "";
	var aux;
        //LIMPA O VALOR DIGITADO (DEIXA SEM NENHUMA PONTUAÇÃO)
	for (var i=0; i < valor.length; i++) 
	{
            aux = valor.substring(i, i+1);
            if ((aux!=virgula)&&(aux!=ponto)&&(aux!=hifen)&&(aux!=barra)) 
            {
                result+=aux;
            }
	}
	return result;
    },

    /**
     * @return CONVERTE O VALOR[MOEDA] DO FORMATO CONVENCIONAL BRASILEIRO[9.999,99] 
     * PARA O FORMATO NATIVO NO BANCO DE DADOS[9999.99] 
     * 
     * @param  valor = O valor a ser alterado
     * @example var preço = MRtools.converteMoeda("1.234,56") 
     * ->  a variavel preço terá o valor 1234.56
     * 
     * 
     * @author   - Marcelo Reis
     * @version  - 01 de setembro de 2008
     */
    converteMoeda:function(valor)
    {
        var aux;
        var result="";
        valor = MRtools.removeMascaras(valor);
        for (var i=0; i < valor.length; i++) 
        {
            aux = valor.substring(i, i+1);
            if (i == (valor.length-3)) 
            {
                result= result+aux+'.';
            }
            else
            {
                result+=aux;	
            }
        }
        return new Number(result);
        //return result;
    },
    /**
     * @return RETORNA O OBJETO DE UM ELEMENTO APARTIR DO SEU ID
     * 
     * @param  id = O ID do Elemento
     * 
     * 
     * @author   - Marcelo Reis
     * @version  - 03 de Novembro de 2008
     */
    $:function(id){
        return (document.getElementById(id))?document.getElementById(id):false;
    },
    /**
     * @return ESSA FUN��O MISTURA DE FORMA ALEAT�RIA OS ELEMENTOS DE UM ARRAY
     * 
     * @param  aArray = O Array em ordem
     * 
     * 
     * @author   - Marcelo Reis
     * @version  - 03 de Novembro de 2008
     */
    shuffle:function(aArray) {
        
        var aArrayAleatorio = new Array();
        var iIndice = new Number();
        while (aArray.length > 0) {
            iIndice = Math.floor(Math.random() * aArray.length);
            aArrayAleatorio[aArrayAleatorio.length] = aArray[iIndice];
            aArray.splice(iIndice, 1);
        }
       
        return aArrayAleatorio;
    }
}




