$(document).ready(function() {

      vRet = false;

      // jQuery.noConflict();

      /*
      $('#pedidos_venda').dataTable({
        "retrieve": true,
        "sPaginationType": "full_numbers",            // Tipo de Paginação por números
        "paging": false,
        "bPaginate": false,                    // Habilita ou Não a opção de paginação
        "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]], // Define a paginação da Tabela
        "iDisplayLength": -1                       // Exibe todos os registros de uma só vez, de acordo como aLengthMenu
        
        , "fnDrawCallback": function(oSettings) {
          jQuery.uniform.update();
        }
      });
      */

      $.fn.dataTableExt.sErrMode = 'none';
      $('#pedidos_venda').dataTable({
        "iDisplayLength": 100        // Exibe todos os registros de uma só vez, de acordo como aLengthMenu
      });
      // $.fn.dataTableExt.sErrMode = 'throw';
    
    		    /*Bloqueia caracteretes não numéricos com Decimal*/
		  function getKeyNumerosDecimais(e, s_locate) {
		    var key = e.keyCode || e.which;
		        key = String.fromCharCode( key );
		        // var regex = /^[0-9\b]+$/;    // .indexOf(",") allow only numbers [0-9]
		        var regex = /^[0-9,\b\n]+$/;    // .indexOf(",") allow only numbers [0-9] + a virgula

		        var b_locate = s_locate.indexOf(",",0); // Indice da virgula

		        var b_block = true; // Bloquear o retorno do campo ? Sim para todos

		        /* Bloquear a segunda vírgula */
		        if(e.which=="44" && b_locate!="-1"){
		          b_block = true;
		        /* Bloquear o que não está no Regex */
		        }else{
		          b_block = !regex.test(key);
		        }

		        /* Se bloqueio não retorna o campo */
		        if( b_block==true) {
		            e.returnValue = false;
		            if(e.preventDefault) e.preventDefault();
		          }

		  }

	      /*Bloqueia caracteretes não numéricos inteiros */
		  function getKeyNumerosInteiros(e, s_locate) {
		    var key = e.keyCode || e.which;
		        key = String.fromCharCode( key );
		        // var regex = /^[0-9\b]+$/;    // .indexOf(",") allow only numbers [0-9]
		        var regex = /^[0-9\b\n]+$/;    // .indexOf(",") allow only numbers [0-9] + a virgula

		        var b_locate = s_locate.indexOf(",",0); // Indice da virgula

		        var b_block = true; // Bloquear o retorno do campo ? Sim para todos

		        /* Bloquear a segunda vírgula */
		        if(e.which=="44" && b_locate!="-1"){
		          b_block = true;
		        /* Bloquear o que não está no Regex */
		        }else{
		          b_block = !regex.test(key);
		        }

		        /* Se bloqueio não retorna o campo */
		        if( b_block==true) {
		            e.returnValue = false;
		            if(e.preventDefault) e.preventDefault();
		          }
		  }

		  /* Validar Somente números inteiros*/
	    $('.sonumerointeiro').keypress(function(e){
	      var s_name = $(this).prop('name');
	      var s_text = $(this).val();

	      return getKeyNumerosInteiros(e, s_text);
	     });

	     /* Validar Somente números decimais*/
	    $('.sonumerodecimal').keypress(function(e){
	      var s_name = $(this).prop('name');
	      var s_text = $(this).val();

	      return getKeyNumerosDecimais(e, s_text);
	     });


  setAllBlurProducts();

  /* Recalcular todos os itens no form Edival - 07/10/2017 12:17 */
  $('input[name*=id_produto]').each(function( index ) {
    var p_nome = $(this).attr('name');

    // Pega o Índice da Linha para buscar os padrões
    var p_pos_ini = 06;
    var p_pos_fim = p_nome.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
    var p_indice  = p_nome.substr(p_pos_ini, p_pos_fim-p_pos_ini);

    // valor do campo id_produto
    var p_id_produto = $(p_nome).val();

    // console.log('Recalculando o Indice:' + p_indice + '|Nome:' + p_nome);
    calculaItem(p_indice);

	});

  /*Bloqueia caracteretes não numéricos do campo Quantidade */
  function getKeyNumeros(e, s_locate) {
    var key = e.keyCode || e.which;
        key = String.fromCharCode( key );
        // var regex = /^[0-9\b]+$/;    // .indexOf(",") allow only numbers [0-9]
        var regex = /^[0-9,\b]+$/;    // .indexOf(",") allow only numbers [0-9] + a virgula

        var b_locate = s_locate.indexOf(",",0); // Indice da virgula

        var b_block = true; // Bloquear o retorno do campo ? Sim para todos

        /* Bloquear a segunda vírgula */
        if(e.which=="44" && b_locate!="-1"){
          b_block = true;
        /* Bloquear o que não está no Regex */
        }else{
          b_block = !regex.test(key);
        }

        /* Se bloqueio não retorna o campo */
        if( b_block==true) {
            e.returnValue = false;
            if(e.preventDefault) e.preventDefault();
          }

  }


  $('.itens-1-n').on('change', function () {
      setAllBlurProducts();
    });

  $('#helper-modal-div').on('hide.bs.modal', function () {
      var p_id_helper = $(this).data('value');
      if( p_id_helper.indexOf("id_produto",0)>=0){
        getPadraoProdutoHelper(p_id_helper);
      }else if(p_id_helper.indexOf("nr_pedido_compra",0)>=0){
        $('.getConsultaQtde').blur();
      }
      /*
      setAllBlurProducts();var attrName = $(this).attr("name");
      alert(attrName);*/
  });

  function getPadraoProdutoHelper(p_nome){
    // input[name='pedidos_venda[itens][0][id_produto]']

    // Pega o Índice da Linha para buscar os padrões
    var p_pos_ini = 33;
    var p_pos_fim = p_nome.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
    var p_indice  = p_nome.substr(p_pos_ini, p_pos_fim-p_pos_ini);

    // valor do campo id_produto
    var p_id_produto = $(p_nome).val();

    if(p_id_produto=='') p_id_produto = 0;
    $.ajax({
          url:  "inc/pedido_item_produto_padrao.php",
          type: "POST", //send it through get method
          data: {
                id_produto: p_id_produto
              },
          success:function(data) {
             p_retorno = data;

             if(p_retorno!=''){
               var nm_tp_movi = "[name='pedidos_venda[itens][" + p_indice + "][id_tipo_movimentacao]']";
               var nm_id_unid = "[name='pedidos_venda[itens][" + p_indice + "][id_unidade_medida]']";
               var nm_ds_cfop = "[name='pedidos_venda[itens][" + p_indice + "][ds_cfop]']";
               var nm_vl_ipi  = "[name='pedidos_venda[itens][" + p_indice + "][nr_perc_ipi]']";
               var nm_vl_icms = "[name='pedidos_venda[itens][" + p_indice + "][nr_perc_icms]']";
               var nm_vl_venda= "[name='pedidos_venda[itens][" + p_indice + "][vl_unitario]']";

              // console.log(p_retorno);
               var retdata  = p_retorno.split(';');
                $(nm_tp_movi).val(retdata[0]);
                $(nm_id_unid).val(retdata[1]);
                $(nm_ds_cfop).val(retdata[3]);

                var p_vl_ipi = parseFloat(retdata[4]);
                var p_vl_icms= parseFloat(retdata[5]);
                var p_vl_venda=parseFloat(retdata[6]);

                $(nm_vl_ipi).val(mascaraValor(p_vl_ipi.toFixed(2)));
                $(nm_vl_icms).val(mascaraValor(p_vl_icms.toFixed(2)));
                $(nm_vl_venda).val(mascaraValor(p_vl_venda.toFixed(2)));
                calculaItem(p_indice);
             }
          }
     });
  }

  function getPadraoProduto(p_indice){
    var nm_id_pro = "[name='pedidos_venda[itens][" + p_indice + "][id_produto]']";
    var p_retorno = '';

    var p_id_produto = $(nm_id_pro).val();
    if(p_id_produto=='') p_id_produto = 0;
    $.ajax({
          url:  "inc/pedido_item_produto_padrao.php",
          type: "POST", //send it through get method
          data: {
                id_produto: p_id_produto
              },
          success:function(data) {
             p_retorno = data;

             if(p_retorno!=''){
               var nm_tp_movi = "[name='pedidos_venda[itens][" + p_indice + "][id_tipo_movimentacao]']";
               var nm_id_unid = "[name='pedidos_venda[itens][" + p_indice + "][id_unidade_medida]']";
               var nm_ds_cfop = "[name='pedidos_venda[itens][" + p_indice + "][ds_cfop]']";
               var nm_vl_ipi  = "[name='pedidos_venda[itens][" + p_indice + "][nr_perc_ipi]']";
               var nm_vl_icms = "[name='pedidos_venda[itens][" + p_indice + "][nr_perc_icms]']";
               var nm_vl_venda= "[name='pedidos_venda[itens][" + p_indice + "][vl_unitario]']";

              // console.log(p_retorno);
               var retdata  = p_retorno.split(';');
                $(nm_tp_movi).val(retdata[0]);
                $(nm_id_unid).val(retdata[1]);
                $(nm_ds_cfop).val(retdata[3]);

                var p_vl_ipi  = parseFloat(retdata[4]);
                var p_vl_icms = parseFloat(retdata[5]);
                var p_vl_venda= parseFloat(retdata[6]);

                $(nm_vl_ipi).val(mascaraValor(p_vl_ipi.toFixed(2)));
                $(nm_vl_icms).val(mascaraValor(p_vl_icms.toFixed(2)));
                $(nm_vl_venda).val(mascaraValor(p_vl_venda.toFixed(2)));
                calculaItem(p_indice);
             }
          }
     });
  }

  function somaProdutos(){
    // $('input[name*=vl_prod]')
    var p_sum_prod = 0;
      $('table tr input[name*=vl_prod]').each(function () {
          // var valor = Number($(this).val());
          var valor = ($(this).val());

          vl_item = parseFloat(valor.replace(/\D/g, "")/ 100).toFixed(2)
          // if (!isNaN(valor)) p_sum_prod += vl_item;
          p_sum_prod += Number(vl_item);

          // console.log("valor do campo:" + valor);
          // p_sum_prod += parseFloat(p_vl_prod).toFixed(2);
          // totalProduto += parseFloat(this.value);
      });

    // totalProduto = parseFloat(totalProduto).toFixed(2);
    // console.log(p_sum_prod);
    var texto = mascaraValor(p_sum_prod.toFixed(2));
    $("[name='pedidos_venda[vl_total_produtos]'").val(texto );

    var v_t_desconto=$("[name='pedidos_venda[vl_desconto]'").val();
    var v_t_frete   =$("[name='pedidos_venda[vl_frete]'").val();
    var v_t_despesas=$("[name='pedidos_venda[vl_despesas]'").val();
    
    if(Number.isNaN(parseFloat(v_t_desconto))==true)
      v_t_desconto = 0.00;

    if(Number.isNaN(parseFloat(v_t_frete))==true)
      v_t_frete    = 0.00;

    if(Number.isNaN(parseFloat(v_t_despesas))==true)
      v_t_despesas = 0.00;

    var v_desc = converteBrFloat(v_t_desconto, 2);
    var v_frete= converteBrFloat(v_t_frete, 2);
    var v_desp = converteBrFloat(v_t_despesas, 2);

    var v_pedido = p_sum_prod - v_desc - v_frete - v_desp;

    $("[name='pedidos_venda[vl_total_descontos]'").val(mascaraValor(v_desc));
    $("[name='pedidos_venda[vl_total_frete]'").val(mascaraValor(v_frete));
    $("[name='pedidos_venda[vl_total_despesas]'").val(mascaraValor(v_desp));

    // console.log('produtos==>' + p_sum_prod + '|pedido:' + v_pedido);

    $("[name='pedidos_venda[vl_total_pedido]'").val(mascaraValor(v_pedido.toFixed(2)));
    // $("[name='pedidos_venda[vl_total_pedido]'").val(texto);
  }

  // Returns an array of numbers located in the string
  function get_numbers(input) {
     /*
      $(this).text(text.replace('dog', 'doll'));
      return input.match(/[0-9]+/g);
      */
     var st_limpo = input.replace(',', '.');
         st_limpo.match(/[0-9]+/g);
     return st_limpo;
  }


  // calcula o item através do índice informado
  function calculaItem(p_indice){

    // nome dos campos a tratar pelo índice
    var nm_nr_qtde = "[name='itens[" + p_indice + "][nr_quantidade]'";
    var nm_vl_unit = "[name='itens[" + p_indice + "][vl_unitario]'";
    var nm_vl_desc = "[name='itens[" + p_indice + "][vl_desconto]'";
    var nm_vl_prod = "[name='itens[" + p_indice + "][vl_prod]'";

    var nm_nr_pipi = "[name='itens[" + p_indice + "][nr_perc_ipi]'";
    var nm_nr_picms= "[name='itens[" + p_indice + "][nr_perc_icms]'";
    var nm_vl_ipi  = "[name='itens[" + p_indice + "][vl_ipi]'";
    var nm_vl_icms = "[name='itens[" + p_indice + "][vl_icms]'";

    // campos digitáveis:

    p_nr_qtde = $(nm_nr_qtde).val();
    p_nr_ipi  = $(nm_nr_pipi).val();
    p_nr_icms = $(nm_nr_picms).val();
    p_vl_unit = $(nm_vl_unit).val();
    p_vl_desc = $(nm_vl_desc).val();

    p_nr_qtde = get_numbers(p_nr_qtde);

    p_nr_qtde = parseFloat(p_nr_qtde).toFixed(4);

    /* Formata o Campo para valor em decimais xx,00 */
    if(p_nr_ipi.indexOf(",",0)=="-1"){
       p_nr_ipi = p_nr_ipi + ',00';
    }

    if(p_nr_icms.indexOf(",",0)=="-1"){
       p_nr_icms = p_nr_icms + ',00';
    }

    p_nr_ipi = p_nr_ipi.replace( ",", ".") ;
    p_nr_icms= p_nr_icms.replace(",", ".");

    p_vl_unit = parseFloat(p_vl_unit.replace(/\D/g, "")/ 100).toFixed(2);
    p_vl_desc = parseFloat(p_vl_desc.replace(/\D/g, "")/ 100).toFixed(2);

    /*
    console.log('p_vl_unit:' + p_vl_unit);
    console.log('p_vl_desc:' + p_vl_desc);
    */

    // calcula o total do item
    var p_vl_prod= p_nr_qtde * p_vl_unit - p_vl_desc;
        p_vl_prod = (p_vl_prod == "NaN" ? 0 : p_vl_prod);

    // valores de IPI e ICMS
        // p_nr_ipi  = (isNaN(p_nr_ipi )==true ? 0 : p_nr_ipi);
        p_nr_ipi  = (p_nr_ipi == "Nan" ? 0 : p_nr_ipi);
        p_nr_icms = (p_nr_icms== "NaN" ? 0 : p_nr_icms);

    var p_vl_ipi  = (p_nr_ipi  / 100) * p_vl_prod;
    var p_vl_icms = (p_nr_icms / 100) * p_vl_prod;

     $(nm_vl_prod).val(mascaraValor(p_vl_prod.toFixed(2)));
     $(nm_vl_ipi).val(mascaraValor(p_vl_ipi.toFixed(2)));
     $(nm_vl_icms).val(mascaraValor(p_vl_icms.toFixed(2)));

     somaProdutos();
  }

  function setAllBlurProducts(){

    $('input[name*=id_produto]').unbind("blur");
    $('input[name*=id_produto]').unbind("keyup");

    $('input[name*=nr_quantidade]').unbind("blur");
    $('input[name*=nr_quantidade]').unbind("keypress");

    $('input[name*=vl_unitario]').unbind("blur");
    $('input[name*=vl_desconto]').unbind("blur");
    $('input[name*=vl_prod]').unbind("blur");
    $('input[name*=nr_perc_ipi]').unbind("blur");
    $('input[name*=nr_perc_icms]').unbind("blur");
    $('input[name*=vl_ipi]').unbind("blur");
    $('input[name*=vl_icms]').unbind("blur");

    $('input[name*=id_produto]').blur(function(){
      var p_name_qtde= $(this).attr('name');

      var p_pos_ini = 06;
      var p_pos_fim = p_name_qtde.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
      var p_indice  = p_name_qtde.substr(p_pos_ini, p_pos_fim-p_pos_ini);
      getPadraoProduto(p_indice)
    });

    $('input[name*=nr_quantidade]').blur(function(){
      var p_name_qtde= $(this).attr('name');

      var p_pos_ini = 06;
      var p_pos_fim = p_name_qtde.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
      var p_indice  = p_name_qtde.substr(p_pos_ini, p_pos_fim-p_pos_ini);
      calculaItem(p_indice)
    });

    /* Validar Somente números para o Crud - Edival 03/10/217 14:27 */
    $('input[name*=nr_quantidade').keypress(function(e){
      var s_name = $(this).prop('name');
      var s_text = $(this).val();

      return getKeyNumeros(e, s_text);
     });

     $('input[name*=nr_perc_ipi').keypress(function(e){
       var s_name = $(this).prop('name');
       var s_text = $(this).val();

       return getKeyNumeros(e, s_text);
      });

      $('input[name*=nr_perc_icms').keypress(function(e){
        var s_name = $(this).prop('name');
        var s_text = $(this).val();

        return getKeyNumeros(e, s_text);
       });


  $('input[name*=vl_unitario]').blur(function(){
    var p_name_qtde= $(this).attr('name');

    var p_pos_ini = 06;
    var p_pos_fim = p_name_qtde.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
    var p_indice  = p_name_qtde.substr(p_pos_ini, p_pos_fim-p_pos_ini);
    calculaItem(p_indice)
  });

  $('input[name*=vl_desconto]').blur(function(){
    var p_name_qtde= $(this).attr('name');

    var p_pos_ini = 06;
    var p_pos_fim = p_name_qtde.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
    var p_indice  = p_name_qtde.substr(p_pos_ini, p_pos_fim-p_pos_ini);
    calculaItem(p_indice)
  });

  $('input[name*=nr_perc_ipi]').blur(function(){
    var p_name_qtde= $(this).attr('name');

    var p_pos_ini = 06;
    var p_pos_fim = p_name_qtde.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
    var p_indice  = p_name_qtde.substr(p_pos_ini, p_pos_fim-p_pos_ini);
    calculaItem(p_indice)
  });

  $('input[name*=nr_perc_icms]').blur(function(){
    var p_name_qtde= $(this).attr('name');

    var p_pos_ini = 06;
    var p_pos_fim = p_name_qtde.indexOf("]", p_pos_ini); // caracter colchete de fechamento do indíce;
    var p_indice  = p_name_qtde.substr(p_pos_ini, p_pos_fim-p_pos_ini);
    calculaItem(p_indice)
  });
    return true;
  }

  function mascaraValor(valor) {
  valor = valor.toString().replace(/\D/g,"");
  valor = valor.toString().replace(/(\d)(\d{8})$/,"$1.$2");
  valor = valor.toString().replace(/(\d)(\d{5})$/,"$1.$2");
  valor = valor.toString().replace(/(\d)(\d{2})$/,"$1,$2");
  return valor
  }

  /* Formata valor brasileiro 1.000,00 em Float 1000.00 */
  function converteBrFloat(valor, casas = 4){ 

    valor = String(valor);

      /* Número inválido é igual a Zero */
      if(valor === ""){ 
         valor =  '0';
      }

      /* Número inválido de casas, seta para 4 */
      if(casas == ""){
        casas = 4;
      }

      /* Não Existindo a vírgula, acrescenta em 4 casas decimais */
      if(valor.indexOf(",", 0)==-1){
        valor += ',0000';
      };

        valor = valor.replace(/\./g, '');
        valor = valor.replace(/\R/g, '');
      valor = valor.replace(/\$/g, '');
      valor = valor.replace(" ", '');
      valor = valor.replace(",",".");

      valor = parseFloat(valor).toFixed(casas);

      return valor;
   }

  function formatarFloatToBR(valor){
      return valor.toLocaleString("pt-BR", { style: "currency" , currency:"BRL"});
    }

  $('input[name*=ds_cnpj_cpf]').on(' blur', function(e){
    
        // O CPF ou CNPJ
        var cnpj_cpf = $(this).val();

        if(cnpj_cpf!=""){
            // Testa a validação
          if ( !valida_cpf_cnpj( cnpj_cpf ) ) {
              noty({text: 'CPF ou CNPJ inválido', type: 'error', timeout: 5000});
              e.stopImmediatePropagation();
              e.preventDefault();
              $(this).focus();
          }
        }
    });

  $('.recalcularTotalPedido').on('change blur', function(e){
    somaProdutos();
  });  

  /* Edival 04/04/2019 - exibir mensagem status nfe entrada x pedido de compra informado */
  var validarPedidosCompra = function (){
       var nPed = new Array();
       var qPed = 0;
       var qNfe = 0;

       $('.getConsultaQtde').each(function(){
        var qIncl = $(this).val(); 
        if( qIncl!=""){
          if($.inArray( qIncl, nPed) == -1){
            nPed.push(qIncl);
          }
        }
       });
       jPed = JSON.stringify(nPed);

        console.log("consultando quantidade da nfe");
        $('input[name*=nr_quantidade]').each(function(){
          var qIncl = $(this).val().replace(',', '');
          var qConv = parseFloat(qIncl);

          // qNfe.push(qConv);
          qNfe += qConv;
        });


        /* Traz as quantidades existentes no pedido */
        $.ajax({
          type: "GET",
          url: "inc/valida_qtde_entrada_nfe.php",
          data: {pedidos:jPed,autoriza:qNfe},
          cache: true,
          success: function(data){
            retornoValidaPC(data);
          }
        });
    };

    function retornoValidaPC(data){
      var dAjax = data.split(";");
          bPed  = dAjax[0]; // id_status_pedido
          mInfo = dAjax[1]; // mensagem de retorno

          $("#id_status_pedido").val(bPed);

          if(bPed=="0"){
            noty({text: mInfo, type: 'error', timeout: 5000});                
          }else{
            $('#validate_custom').submit();
          }
       return bPed;
    }

    $("#validate_custom").on('submit', function (e) {
      $('#validate_custom').validationEngine('hide');
      // $('#validate_custom').validationEngine().submit();
    });
    
    $("#butValidar").on('click', validarPedidosCompra);


}(jQuery));
