deivisonarthur
7/12/2013 - 6:10 PM

Calcular o Cep de forma correta e nao obstrusiva OSC6 beta1

Calcular o Cep de forma correta e nao obstrusiva OSC6 beta1

/*=========================================================================================================================================================
 *
 *  PROJETO OSC MAGENTO BRASIL - VERSÃO FINAL V4.0.2
 *  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *  O módulo One Step Checkout normatizado para a localização brasileira.
 *  site do projeto: http://onestepcheckout.com.br/
 *  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *
 *
 *
 *  Mmantenedores do Projeto:
 *  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *
 *  Deivison Arthur Lemos Serpa
 *  deivison.arthur@gmail.com
 *  www.deivison.com.br
 *  (21)9203-8986
 *
 *  Denis Colli Spalenza
 *  http://www.xpdev.com.br

 *  Cláudio Luiz Ferreira
 *  http://www.castelcd.com.br
 *
 *  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *
 *
 *
 *  GOSTOU DO MóDULO?
 *  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *  Se você gostou, se foi útil para você, se fez você economizar aquela grana pois estava prestes a pagar caro por aquele módulo pago, pois não achava uma
 *  solução gratuita que te atendesse e queira prestigiar o trabalho feito efetuando uma doação de qualquer valor, não vou negar e vou ficar grato! você
 *  pode fazer isso visitando a página do projeto em: http://onestepcheckout.com.br/
 *  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *
/*=========================================================================================================================================================
 */

window.console && console.log( 'osc4 debug 1' );


jQuery(document).ready(function($j) {


/*===================================================== Limita Campos ===========================================================*/
            $j('input[name*="day"]').attr('maxlength','2');
            $j('input[name*="month"]').attr('maxlength','2');
            $j('input[name*="year"]').attr('maxlength','4');
            $j('input[name*="taxvat"],input[name*="cpfcnpj"]').removeClass('validation-passed')


/*===================================================== Create Account ===========================================================*/
            		if($j('.account-create').length) {
                $j('.account-create .boxpf #cpfcnpj').attr('name', 'cpfcnpj').removeAttr('disabled');
                $j('.account-create .boxpj #cpfcnpj').attr('name', 'cpfcnpj-disabled').attr('disabled', 'disabled');
            }
            if($j('#onepagecheckout_orderform').length) {
                $j('#onepagecheckout_orderform .boxpf #cpfcnpj').attr('name', 'cpfcnpj').removeAttr('disabled');
                $j('#onepagecheckout_orderform .boxpj #cpfcnpj').attr('name', 'cpfcnpj-disabled').attr('disabled', 'disabled');
            }

/*===================================================== Click ===========================================================*/
            /*Roda o clique para selecionar o tipo pessoa*/
            $j('input[name*="tipopessoa"]').click( function(){

                var existeTaxVat = ($j('input[name*="taxvat"]').length > 0),
                    tipoPessoa  = this.value;

                //habilita tudo por default
                $j('.inputcnpj,.Binputcnpj,.inputcpf,.Binputcpf').removeAttr('disabled');

                if(tipoPessoa == 'Fisica'){

                  /*fisica*/
                    /*Se existe o Taxvat alterna entre eles mudando o name conforme selecionado o tipo pessoa*/
                    if( existeTaxVat != ''){

                        /*CADASTRO*/
                        $j('input[name="taxvat-old"]').attr('name', 'taxvat');
                        $j('input[name="taxvat"]:eq(1)').attr('name', 'taxvat-old');

                        $j('input[name="taxvat-old"]').attr('class', 'input-text');
                        $j('input[name="taxvat"]').attr('class', 'input-text t1 validar_cpf input-text required-entry');

                        /*BILLING*/
                        $j('input[name="billing[taxvat-old]"]').attr('name', 'billing[taxvat]');
                        $j('input[name="billing[taxvat]"]:eq(1)').attr('name', 'billing[taxvat-old]');

                        /*LIMPA CAMPOS*/
                        //$j('input[name="taxvat"]').val('');
                        //$j('input[name="billing[taxvat]"]').val('');

                    }else{
                        /*CADASTRO*/
                        $j('.account-create .boxpf #cpfcnpj').attr('name', 'cpfcnpj').removeAttr('disabled');
                        $j('.account-create .boxpj #cpfcnpj').attr('name', 'cpfcnpj-disabled').attr('disabled', 'disabled');

                        /*BILLING*/
                        $j('#onepagecheckout_orderform .boxpf #cpfcnpj').attr('name', 'cpfcnpj').removeAttr('disabled');
                        $j('#onepagecheckout_orderform .boxpj #cpfcnpj').attr('name', 'cpfcnpj-disabled').attr('disabled', 'disabled');

                        /*LIMPA CAMPOS*/
                        //$j('input[name="cpfcnpj"]').val('');
                        //$j('input[name="billing[cpfcnpj]"]').val('');
                    }

                    /*Exibe ou oculta os boxs*/
                    $j('.boxpj').hide();
                    $j('.boxpf').show();

                    /*Exibe ou oculta o entregar em outro endere~ço conforme a selecao do tipo pessoa*/
                    $j('li.options').find("label:contains('Entregar')").css('visibility', 'visible');
                    $j('input[name*="[same_as_billing]"]').css('visibility', 'visible');

                }else if(tipoPessoa == 'Juridica'){
                  /*juricica*/

                    /*Se existe o Taxvat alterna entre eles mudando o name conforme selecionado o tipo pessoa*/
                    if( existeTaxVat != ''){
                        /*CADASTRO*/
                        $j('input[name="taxvat-old"]').attr('name', 'taxvat');
                        $j('input[name="taxvat"]:eq(0)').attr('name', 'taxvat-old');

                        $j('input[name="taxvat-old"]').attr('class', 'input-text');
                        $j('input[name="taxvat"]').attr('class', 'input-text t1 validar_cpf2 input-text required-entry');

                        /*BILLING*/
                        $j('input[name="billing[taxvat-old]"]').attr('name', 'billing[taxvat]');
                        $j('input[name="billing[taxvat]"]:eq(0)').attr('name', 'billing[taxvat-old]');

                        /*LIMPA CAMPOS*/
                        //$j('input[name="taxvat"]').val('');
                        //$j('input[name="billing[taxvat]"]').val('');


                    }else{
                        /*CADASTRO*/
                        $j('.account-create .boxpj #cpfcnpj').attr('name', 'cpfcnpj').removeAttr('disabled');
                        $j('.account-create .boxpf #cpfcnpj').attr('name', 'cpfcnpj-disabled').attr('disabled', 'disabled');

                        /*BILLING*/
                        $j('#onepagecheckout_orderform .boxpj #cpfcnpj').attr('name', 'cpfcnpj').removeAttr('disabled');
                        $j('#onepagecheckout_orderform .boxpf #cpfcnpj').attr('name', 'cpfcnpj-disabled').attr('disabled', 'disabled');

                        /*LIMPA CAMPOS*/
                        //$j('input[name="cpfcnpj"]').val('');
                        //$j('input[name="billing[cpfcnpj]"]').val('');
                    }

                    /*Exibe ou oculta os boxs*/
                    $j('.boxpj').show();
                    $j('.boxpf').hide();

                    /*Exibe ou oculta o entregar em outro endereço conforme a selecao do tipo pessoa*/
                    $j('li.options').find("label:contains('Entregar')").css('visibility', 'hidden');
                    $j('input[name*="[same_as_billing]"]').css('visibility', 'hidden');
                }
            });
/*===================================================== End Click ===========================================================*/



/*===================================================== IE Isento ===========================================================*/
            $j('input[name*="isento"]').click( function(){

                if ($j(this).attr('checked')) {
                    $j('input[name*="ie"]').val("isento");
                    $j('input[name*="ie"]').css('background', '#DDDDDD');
                    //$j('input[name*="ie"]').attr('disabled', true);
                    $j('input[name*="ie"]').attr('readonly', 'readonly');
                } else {
                    $j('input[name*="ie"]').val('');
                    $j('input[name*="ie"]').css('background', '#FFFFFF');
                    //$j('input[name*="ie"]').removeAttr('disabled');
                    $j('input[name*="ie"]').removeAttr('readonly');
                }
            });



/*===================================================== Botao Aguarde ===========================================================*/
            var erro1;
            var erro2;

            $j('#review-buttons-container').click( function(){
                $j(this).attr('class', 'buttons-set disabled');
                $j('#review-please-wait').show();

                erro1 = $j('.error-msg').length;
                erro2 = $j('.validation-failed').length;

                //alert(erro1); alert(erro2);

                if(erro1 > 0 || erro2 > 0){
                    $j(this).attr('class', 'buttons-set');
                    $j('#review-please-wait').hide();
                }
            });


/*===================================================== CEP ===========================================================*/

            //Ao se coloca o "-" no CEP não irá calcular o frete caso use o módulo Matrix Rates, pois ele não trabalha com o "-"
            /*Essa opção é caso queira que toda vez ao se entrar no campo ele limpe-o*/

            $j('input[name*="postcode"]').attr('maxlength','9');

            $j('input[name*="postcode"]').focus(function(){
              $j(this).val('');
            });

            $j('input[name*="postcode"]').mask("99999-999");

            $j('input[name*="postcode"]').blur( function(){
                  removetra = $j(this).val();
                  removetra = removetra.replace(/\D/g,"");
                  $j(this).val(removetra);
                  $j(this).attr('maxlength','8');

                  checkout.update({
                        'review': 1,
                        'shipping-method': 1,
                        'payment-method': 1
                  });
            });


/*===================================================== Telefones ===========================================================*/

            //'input[name*="telephone"]'     fax    celular

            //Limpa dados ao entrar Tel e Cel ==========================
            $j('input[name*="[telephone]"],input[name*="[fax]"],input[name*="[celular]"]').focus(function(){
              $j(this).val('');
            });
            //Fim =======================================================



            //Formata campos Tel e Cel ==================================
            $j('input[name*="[telephone]"],input[name*="[fax]"],input[name*="[celular]"]').keydown( function(e){
                if (e.keyCode >= 9){
                    length = this.value.length;
                    if (length == 0)
                      this.value += "(";

                    if (length == 3)
                      this.value += ")";
                             /*|18*/
                    if(/(\(11\)9(5[0-9]|6[0-9]|7[01234569]|8[0-9]|9[0-9])).+/i.test(this.value)){
                        $j(this).attr('maxlength','14');
                        if (length == 9)
                          this.value += "-";
                    } else {
                        $j(this).attr('maxlength','13');
                        if (length == 8)
                          this.value += "-";
                    }
                }
            });
            //Fim =======================================================



            //Verifica se é TEL SP e Brasil =============================
            //Fixo 1,2,3,4, 5(5,6,8,9) e 55, 56, 58, 59 são telefones fixos com DDD 11 com 9
            $j('input[name*="[telephone]"]').blur(function() {
              if(this.value.length > 0){
                    if(  /\(?[1-9]{2}\)?9?(1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[5,6,8,9])\d{2,3}-?\d{4}/.test(this.value)  ){
                        //alert('FIXO - Brasil e Sao Paulo');
                    }else{
                        $j(this).val('');
                        alert('Por favor entre com um telefone fixo valido!');
                    }
              };
            });
            //Fim =======================================================


            //Verifica se é CEL SP e Brasil =============================
            //Celular 5,6,7,8,9 e 51, 52, 53, 57 são celular DDD 11
            $j('input[name*="[fax]"],input[name*="[celular]"]').blur(function() {
              if(this.value.length > 0){
                    if(  /\(?[1-9]{2}\)?9?(9[0-9]|8[0-9]|7[0-9]|6[0-9]|95[1,2,3,7])\d{2,3}-?\d{4}/.test(this.value)  ){
                        //alert('CEL - Brasil e Sao Paulo');
                    }else{
                        $j(this).val('');
                        alert('Por favor entre com um celular valido!');
                    }
              };
            });
            //Fim =======================================================


/*===================================================== TAXVAT ===========================================================*/
            $j('input[name*="taxvat"]').blur( function(){

                v = $j(this).val();

                //para testar cnpj: 78.425.986/0036-15 ou 78425986003615

                //Remove tudo o que não é dígito
                v = v.replace(/\D/g,"");

                if (v.length <= 11) { //CPF

                    //Coloca um ponto entre o terceiro e o quarto dígitos
                    v=v.replace(/(\d{3})(\d)/,"$1.$2");

                    //Coloca um ponto entre o terceiro e o quarto dígitos
                    //de novo (para o segundo bloco de números)
                    v=v.replace(/(\d{3})(\d)/,"$1.$2");

                    //Coloca um hífen entre o terceiro e o quarto dígitos
                    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2");

                } else { //CNPJ

                    //Coloca ponto entre o segundo e o terceiro dígitos
                    v=v.replace(/^(\d{2})(\d)/,"$1.$2");

                    //Coloca ponto entre o quinto e o sexto dígitos
                    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3");

                    //Coloca uma barra entre o oitavo e o nono dígitos
                    v=v.replace(/\.(\d{3})(\d)/,".$1/$2");

                    //Coloca um hífen depois do bloco de quatro dígitos
                    v=v.replace(/(\d{4})(\d)/,"$1-$2");
                }

                $j(this).val(v);

            });


            $j('input[name*="cpfcnpj"]').blur( function(){

                v = $j(this).val();

                //para testar cnpj: 78.425.986/0036-15 ou 78425986003615

                //Remove tudo o que não é dígito
                v = v.replace(/\D/g,"");

                if (v.length <= 11) { //CPF

                    //Coloca um ponto entre o terceiro e o quarto dígitos
                    v=v.replace(/(\d{3})(\d)/,"$1.$2");

                    //Coloca um ponto entre o terceiro e o quarto dígitos
                    //de novo (para o segundo bloco de números)
                    v=v.replace(/(\d{3})(\d)/,"$1.$2");

                    //Coloca um hífen entre o terceiro e o quarto dígitos
                    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2");

                } else { //CNPJ

                    //Coloca ponto entre o segundo e o terceiro dígitos
                    v=v.replace(/^(\d{2})(\d)/,"$1.$2");

                    //Coloca ponto entre o quinto e o sexto dígitos
                    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3");

                    //Coloca uma barra entre o oitavo e o nono dígitos
                    v=v.replace(/\.(\d{3})(\d)/,".$1/$2");

                    //Coloca um hífen depois do bloco de quatro dígitos
                    v=v.replace(/(\d{4})(\d)/,"$1-$2");
                }

                $j(this).val(v);

            });




            $j('input').click( function(){
                    $j('html head').find('title').text(  "OSC: Finalizando compra no campo [ " + $j(this).attr('title') + " ]"  );
                    _gaq.push(['_trackPageview', '#' + $j(this).attr('name') + '']);
            });

            $j(':input').blur( function(){
                    pageTracker._trackEvent("OSC no campo: ", "input_exit", $j(this).attr('name'));
            });



        });




        /********************* Busca de CEP na base dos correios por Ajax *********************/
        /********************* Busca de CEP na base dos correios por Ajax *********************/
        /********************* Busca de CEP na base dos correios por Ajax *********************/


        function buscarEndereco(host, quale) {


    			$j.ajax({
    				url: host + 'frontend/base/default/deivison/buscacep.php?cep=' + document.getElementById(quale+':postcode').value.replace(/\+/g, ''),
    				type:'GET',
    				dataType: 'html',
    				success:function(respostaCEP){
    					//alert(respostaCEP); //para testes

                        var r = respostaCEP;

                        street_1 = r.substring(0, (i = r.indexOf(':')));
                        document.getElementById(quale+':street1').value = unescape(street_1.replace(/\+/g," "));

                        r = r.substring(++i);
                        street_4 = r.substring(0, (i = r.indexOf(':')));
                        document.getElementById(quale+':street4').value = unescape(street_4.replace(/\+/g," "));

                        r = r.substring(++i);
                        city = r.substring(0, (i = r.indexOf(':')));
                        document.getElementById(quale+':city').value = unescape(city.replace(/\+/g," "));

                        r = r.substring(++i);
                        region = r.substring(0, (i = r.indexOf(':')));

                        //document.getElementById(quale+':region').selectedIndex = unescape(region.replace(/\+/g," "));
                        //document.getElementById(quale+':region_id').selectedIndex = unescape(region.replace(/\+/g," "));

                        region = region.replace(/\+/g," ");

                        //alert(region);
                        $j('select[id*="'+quale+':region"]').children("option:contains('"+region+"')").attr('selected', 'selected');
                        $j('select[id*="'+quale+':region_id"]').children("option:contains('"+region+"')").attr('selected', 'selected');

                        //document.getElementById(quale+':region_id').children("option:contains('"+region+"')").attr('selected', 'selected');



                        setTimeout(function() { document.getElementById(quale+':street2').focus(); }, 1);
    				}
    			});

        };




        /********************* Valida CPF e CNPJ *********************/
        /********************* Valida CPF e CNPJ *********************/
        /********************* Valida CPF e CNPJ *********************/

    	// Adicionar classe de validacao de cpf e cnpj ao Taxvat
    	//$j('#billing:taxvat"]').addClassName('validar_cpf'); //removido e colocado na mão

        function validaCPF(cpf,pType){
        	var cpf_filtrado = "", valor_1 = " ", valor_2 = " ", ch = "";
        	var valido = false;

        	for (i = 0; i < cpf.length; i++){
              ch = cpf.substring(i, i + 1);
            	if (ch >= "0" && ch <= "9"){
                	cpf_filtrado = cpf_filtrado.toString() + ch.toString()
                	valor_1 = valor_2;
                	valor_2 = ch;
        	    }
        	    if ((valor_1 != " ") && (!valido)) valido = !(valor_1 == valor_2);
        	}

        	if (!valido) cpf_filtrado = "12345678912";
        	if (cpf_filtrado.length < 11){
        	    for (i = 1; i <= (11 - cpf_filtrado.length); i++){cpf_filtrado = "0" + cpf_filtrado;}
        	}

        	if(pType <= 1){
        	    if ( ( cpf_filtrado.substring(9,11) == checkCPF( cpf_filtrado.substring(0,9) ) ) && ( cpf_filtrado.substring(11,12)=="") ){return true;}
        	}

        	if((pType == 2) || (pType == 0)){
            	if (cpf_filtrado.length >= 14){
            	    if ( cpf_filtrado.substring(12,14) == checkCNPJ( cpf_filtrado.substring(0,12) ) ){  return true;}
            	}
        	}

    	return false;
    	}



      	function checkCNPJ(vCNPJ){
      	var mControle = "";
      	var aTabCNPJ = new Array(5,4,3,2,9,8,7,6,5,4,3,2);
      	for (i = 1 ; i <= 2 ; i++){
        	mSoma = 0;
        	for (j = 0 ; j < vCNPJ.length ; j++)
        	mSoma = mSoma + (vCNPJ.substring(j,j+1) * aTabCNPJ[j]);
        	if (i == 2 ) mSoma = mSoma + ( 2 * mDigito );
        	mDigito = ( mSoma * 10 ) % 11;
        	if (mDigito == 10 ) mDigito = 0;
        	mControle1 = mControle ;
        	mControle = mDigito;
        	aTabCNPJ = new Array(6,5,4,3,2,9,8,7,6,5,4,3);
      	}

      	return( (mControle1 * 10) + mControle );
      	}



      	function checkCPF(vCPF){
      	var mControle = ""
      	var mContIni = 2, mContFim = 10, mDigito = 0;
      	for (j = 1 ; j <= 2 ; j++){
        	mSoma = 0;
        	for (i = mContIni ; i <= mContFim ; i++)
        	mSoma = mSoma + (vCPF.substring((i-j-1),(i-j)) * (mContFim + 1 + j - i));
        	if (j == 2 ) mSoma = mSoma + ( 2 * mDigito );
        	mDigito = ( mSoma * 10 ) % 11;
        	if (mDigito == 10) mDigito = 0;
        	mControle1 = mControle;
        	mControle = mDigito;
        	mContIni = 3;
        	mContFim = 11;
      	}

      	return( (mControle1 * 10) + mControle );
      	}




/*  deivison 02
    FUNÇÃO QUE EXECUTA PASSO A PASSO DE ATUALIZAÇÃO DOS CAMPOS PAYMENTS E REVIEW
    -------------------------------------------------------------------------------------------------------------------------------
    Essa função foi feita para atualização dos valores, caso haja desconto para pagamentos específicos como 10% pagamento no boleto
    -------------------------------------------------------------------------------------------------------------------------------
    Métodos de atualiação
    'payment-method': 1,    <- Atualiza os meios de pagamentos
    'shipping-method': 1,   <- Atualiza os métodos de envio
    'review': 1             <- Atualiza o resumo da compra
*/

//Para atualizar caso tenha desconto no boleto
$j(function($) {



      $j('dt[name*="recalculo"]').live('click', function() {

              peganome = $j(this).attr('rel');

              //alert(peganome);

              $j('#p_method_'+peganome).attr('checked','checked');

              checkout.update({
                    // 'review': 1
                    //,'shipping-method': 1
                    'payment-method': 1
              });

             setTimeout(function(){
                        checkout.update({
                            'review': 1
                            //,'payment-method': 1
                        });
             }, 1000);
      });


      $j('input[name*="payment[method]"]').live('click', function() {
              checkout.update({
                    // 'review': 1
                    //,'shipping-method': 1
                    'payment-method': 1
              });

             setTimeout(function(){
                        checkout.update({
                            'review': 1
                            //,'payment-method': 1
                        });
             }, 1000);

              $j('html head').find('title').text(  "OSC: Finalizando compra no campo [ " + $j(this).attr('name') + " ]"  );
              _gaq.push(['_trackPageview', '#' + $j(this).attr('name') + '']);
              pageTracker._trackEvent("OSC no campo: ", "input_exit", $j(this).attr('name'));
      });


      $j('input[name*="shipping_method"]').live('click', function() {
              checkout.update({
                    'review': 1
                    ,'payment-method': 1
                    //'shipping-method': 1
              });
             setTimeout(function(){
                        checkout.update({
                            'review': 1,
                            //'payment-method': 1
                        });
             }, 500);

              $j('html head').find('title').text(  "OSC: Finalizando compra no campo [ " + $j(this).attr('value') + " ]"  );
              _gaq.push(['_trackPageview', '#' + $j(this).attr('value') + '']);
              pageTracker._trackEvent("OSC no campo: ", "input_exit", $j(this).attr('value'));
      });


      $j('#checkout-payment-method-load input').live('click', function() {
              $j('html head').find('title').text(  "OSC: Finalizando compra no campo [ " + $j(this).attr('name') + " ]"  );
              _gaq.push(['_trackPageview', '#' + $j(this).attr('name') + '']);
              pageTracker._trackEvent("OSC no campo: ", "input_exit", $j(this).attr('name'));

      });


});