$(document).ready(function () {
    //Funcion de prueba para Sweet Alert 2
    $('#salir').click(function() {
        swal({
            title: "¿Estás seguro?",   
            text: "Quiere salir del sistema",   
            type: "question",   
            showCancelButton: true,
            confirmButtonColor: "#3085d6",
            cancelButtonColor: "#d33",     
            confirmButtonText: "Aceptar",
            cancelButtonText: "Cancelar"
        }).then((result) => {
            $.post("controladores/usuarioControlador.php?op=salir",function(data)
            {
               //    alert("Data: " + data + "\nStatus: " + status);
               //    console.log(data);
                if (data==1){
                  //  $(location).attr("href","vistas/contenidos/escritorio-view.php");
                  window.location="login";
                }else{
                    swal(
                        'Error inesperado',
                        'No se pudo cerrar la seccion',
                        'error'
                    ); 
                }
            })
        }) //fin
    });
});

/******************************************************************
 * **** Funciones para el formateo de los valores numericos  ******
 ******************************************************************/
// Funcion convertir en numerico
function numero(amount) {
    amount += ''; // por si pasan un numero en vez de un string
    amount = amount.replace(/[^0-9\,-]/g, ''); // elimino cualquier cosa que no sea numero o coma
	amount = amount.replace(',','.');
	amount = parseFloat(amount);
    return amount;
}

// Funcion para dar formato a los numeros
function number_format(amount, decimals) {

    amount += ''; // por si pasan un numero en vez de un string
    amount = parseFloat(amount.replace(/[^0-9\.-]/g, '')); // elimino cualquier cosa que no sea numero o punto

    decimals = decimals || 0; // por si la variable no fue fue pasada

    // si no es un numero o es igual a cero retorno el mismo cero
    if (isNaN(amount) || amount === 0) 
        return parseFloat(0).toFixed(decimals);

    // si es mayor o menor que cero retorno el valor formateado como numero
    amount = '' + amount.toFixed(decimals);

    var amount_parts = amount.split('.'),
        regexp = /(\d+)(\d{3})/;

    while (regexp.test(amount_parts[0]))
        amount_parts[0] = amount_parts[0].replace(regexp, '$1' + '.' + '$2');

    return amount_parts.join(',');

return sign ? '-' + amount_parts.join('.') : amount_parts.join('.')

}

function entero(value) {
    return value
    .replace(/\D/g, "")
    .replace(/\B(?=(\d{3})+(?!\d)\.?)/g, ".");
}

function decimal(value) {
    return value
    .replace(/\D/g, "")
    .replace(/([0-9])([0-9]{2})$/, '$1,$2')
    .replace(/\B(?=(\d{3})+(?!\d)\.?)/g, ".");
    
}

function decimald(value) {
    return value
    .replace(/\D/g, "")
    .replace(/([0-9])([0-9]{1})$/, '$1,$2')
    .replace(/\B(?=(\d{3})+(?!\d)\.?)/g, ".");
    
}

//fecha del dia
function FechaHoy() {
    var now 	= 	new Date();
    var today   = 	new Date();
	var dd 		=	("0"+now.getDate()).slice(-2);
    var mm		=	("0"+(now.getMonth()+1)).slice(-2);
    var yyyy    =   now.getFullYear();
	var today	=	yyyy+'-'+mm+'-'+dd;
	return today;
}



//Convertir la fecha
function convertDateFormat(texto) {
    var now 	= 	new Date();
    var today   = 	new Date();
    var dd 		=	("0"+now.getDate()).slice(-2);
    var mm		=	("0"+(now.getMonth()+1)).slice(-2);
    var yyyy    =   now.getFullYear();
	var today	=	dd+'-'+mm+'-'+yyyy;
	return today;
    //return texto.replace(/^(\d{4})-(\d{2})-(\d{2})$/g,'$3/$2/$1');
}

//Convertir la fecha
function convertDateLote(texto) {
    var now 	= 	new Date();
    var today   = 	new Date();
    var dd 		=	("0"+now.getDate()).slice(-2);
    var mm		=	("0"+(now.getMonth()+1)).slice(-2);
    var yyyy    =   now.getFullYear();
	var today	=	dd+mm+yyyy;
	return today;
    //return texto.replace(/^(\d{4})-(\d{2})-(\d{2})$/g,'$3/$2/$1');
}

/**
 * Funcion para verificar si cambia de estado una fila de tabla detalle
 * 
 */

//De detectamos cuando cambia un valor en la tabla donde se registran los productos
// Campos que vamos a formatear
// cantidad,precio_compra,precio_venta 

 var typingTimer;                //timer identifier
 var doneTypingInterval = 1500;  //time in ms, 1 second for example
 $('#detalles').on('keyup paste', ':input', function() { 
     var value  = $(this).val(); //obtiene el valor actual del input.
     var name   = $(this).prop('name');
     
     if (name=='cantidad'){
        $(this).val(entero(value));
     }
     if (name=='precio_compra'){
        $(this).val(decimal(value));
     }
     if (name=='precio_venta'){
        $(this).val(decimal(value));
     }
     if (name=='porcentaje'){
        $(this).val(entero(value));
     }
     if (name=='descuento'){
        $(this).val(decimal(value));
     }
     if (name=='precio_ventad'){
        $(this).val(decimald(value));
     }            
     clearTimeout(typingTimer);
     typingTimer = setTimeout(doneTyping, doneTypingInterval);
 });
 //Se limpia el contador cuando deja de escribir
 $('#detalles').on('keydown', function () {
      clearTimeout(typingTimer);
 });

 //calculamos los totales
function doneTyping () {
    modificarSubtotales();
}

$("#precio").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())/numero($("#tasacambio").val());
    $("#preciod").val(number_format(valued,2));
    $("#precioddollar").val(number_format(valued,2));
    $("#preciodbs").val($("#precio").val());
    $("#precioldollar1").val(number_format(valued,2));
    $("#preciolbs1").val($("#precio").val());
    $("#preciordollar1").val(number_format(valued,2));
    $("#preciorbs1").val($("#precio").val());
    $("#precioddollar1").val(number_format(valued,2));
    $("#preciodbs1").val($("#precio").val());
  });

  function ivapercibido(precio) {
    var impuestoiva     = $("#impuestoiva").val()/100;
    var porcentaje20    = 1+($("#porcentajeprecio").val()/100);    
    var precio20        = precio*porcentaje20;
    return precio20*impuestoiva;
  }

  function ivap(precio) {
    var impuestoiva     = $("#impuestoiva").val()/100;
    var ivapr        = precio*impuestoiva;
    return ivapr;
  }

  function precioporcentaje(precio) {
    var porcentaje          = 1+($("#porcentajeprecio").val()/100);    
    var precioporcentaje    = precio*porcentaje;
    return precioporcentaje;
  }

  function pvpp1(precio) {
     var pvp1   = ivapercibido(precio)+precio; 
    //var pvp         = iva+ivaper+precio;
     return pvp1;
  }

  

  $("#preciod").keyup(function(event) {
    
    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value       = $(this).val();
    $(this).val(decimal(value));
    
    var valued      = numero($(this).val())*numero($("#tasacambio").val());
    var precio      = numero($(this).val());
    var ivaper      = ivapercibido(precio); 
    var precio20    = precioporcentaje(precio);
    var iva         = ivap(precio);
    var pvp         = pvpp1(precio);
    console.log('precio :'+precio);
    //console.log('precio20 :'+precio20);
    //console.log('ivaper :'+ivaper);
    console.log('iva :'+iva);
    console.log('pvp :'+pvp);
    $("#porcentajeprecio1").val(number_format(precio20,2));
    $("#ivapercibido").val(number_format(ivaper,2));
    $("#preciopvp").val(number_format(pvp*numero($("#tasacambio").val()),2));

    $("#preciopvpd").val(number_format(pvp,2));
    $("#precio").val(number_format(valued,2));
    //Precio A
    $("#preciodbs").val(number_format(valued,2));
    $("#precioddollar").val($("#preciod").val());
    $("#porcentajeprecioddollar").val(number_format(precio20,2));
    $("#ivapercibidoddollar").val(number_format(ivaper,2));
    $("#pvpddollar").val(number_format(pvp,2));
    $("#pvpdbs").val(number_format(pvp*numero($("#tasacambio").val()),2));


    //Precio A1, B1, C1
    $("#preciolbs1").val(number_format(valued,2));
    $("#precioldollar1").val($("#preciod").val());
    $("#preciorbs1").val(number_format(valued,2));
    $("#preciordollar1").val($("#preciod").val());
    $("#preciodbs1").val(number_format(valued,2));
    $("#precioddollar1").val($("#preciod").val());
  });

  $("#preciolbs").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())/numero($("#tasacambio").val());
    
    
    $("#precioldollar").val(number_format(valued,2));
  });

  $("#precioldollar").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())*numero($("#tasacambio").val());
    //pvp
    var precio      = numero($(this).val());
    var precio20    = precioporcentaje(precio);
    var ivaper      = ivapercibido(precio); 
    var iva         = ivap(precio);
    //var pvp         = iva+ivaper+precio;
    var pvp         = pvpp1(precio);
    
    $("#porcentajeprecioldollar").val(number_format(precio20,2));
    $("#ivapercibidoldollar").val(number_format(ivaper,2));
    $("#pvpldollar").val(number_format(pvp,2));
    $("#pvplbs").val(number_format(pvp*numero($("#tasacambio").val()),2));

    $("#preciolbs").val(number_format(valued,2));
  });

  $("#preciorbs").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())/numero($("#tasacambio").val());
    $("#preciordollar").val(number_format(valued,2));
  });

  $("#preciordollar").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())*numero($("#tasacambio").val());
    //pvp
    var precio      = numero($(this).val());
    var precio20    = precioporcentaje(precio);
    var ivaper      = ivapercibido(precio); 
    var iva         = ivap(precio);
    //var pvp         = iva+ivaper+precio;
    var pvp         = pvpp1(precio);
    
    $("#porcentajepreciordollar").val(number_format(precio20,2));
    $("#ivapercibidordollar").val(number_format(ivaper,2));
    $("#pvprdollar").val(number_format(pvp,2));
    $("#pvprbs").val(number_format(pvp*numero($("#tasacambio").val()),2));

    $("#preciorbs").val(number_format(valued,2));
  });

  $("#preciodbs").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())/numero($("#tasacambio").val());
    $("#precioddollar").val(number_format(valued,2));
  });

  $("#precioddollar").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())*numero($("#tasacambio").val());
     //pvp
    var precio      = numero($(this).val());
    var precio20    = precioporcentaje(precio);
    var ivaper      = ivapercibido(precio); 
    var iva         = ivap(precio);
     //var pvp         = iva+ivaper+precio;
    var pvp         = pvpp1(precio);
    

    $("#porcentajeprecioddollar").val(number_format(precio20,2));
    $("#ivapercibidoddollar").val(number_format(ivaper,2));
    $("#pvpddollar").val(number_format(pvp,2));
    //precio principal
    $("#porcentajeprecio1").val(number_format(precio20,2));
    $("#ivapercibido").val(number_format(ivaper,2));
    $("#preciopvpd").val(number_format(pvp,2));
    $("#pvpdbs").val(number_format(pvp*numero($("#tasacambio").val()),2));
    $("#precio").val(number_format(valued,2));
    $("#preciod").val(number_format(value,2));
    
    $("#preciopvp").val(number_format(pvp*numero($("#tasacambio").val()),2));    
    $("#preciodbs").val(number_format(valued,2));
  });
 
  $("#costo").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())/numero($("#tasacambio").val());
    $("#costod").val(number_format(valued,2));
  });

  $("#costod").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())*numero($("#tasacambio").val());
    $("#costo").val(number_format(valued,2));
  });

  $("#porcentaje").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
  });
  
  $("#unidademedidad").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
  });

  $("#factorconversion").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
  });

  $("#preciopvp").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())/numero($("#tasacambio").val());
    $("#preciopvpd").val(number_format(valued,2));
  });

  $("#preciopvpd").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())*numero($("#tasacambio").val());
    $("#preciopvp").val(number_format(valued,2));
  });

  $("#impuestoart18").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())/numero($("#tasacambio").val());
    $("#impuestoart18d").val(number_format(valued,3));
  });

  $("#impuestoart18d").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
    var valued  = numero($(this).val())*numero($("#tasacambio").val());
    $("#impuestoart18").val(number_format(valued,3));
  });

  $("#porcentajeprecio").keyup(function(event) {

    // skip for arrow keys
    if(event.which >= 37 && event.which <= 40){
      event.preventDefault();
    }
    var value  = $(this).val();
    $(this).val(decimal(value));
   
  });
  

  
//Funcion para validar los formularios  
    
$('#formulario').bootstrapValidator({
    message: 'Este valor no es valido',
    feedbackIcons: {
        valid: 'glyphicon glyphicon-ok',
        invalid: 'glyphicon glyphicon-remove',
        validating: 'glyphicon glyphicon-refresh'
    },     
    fields: {
        // Campos de articulo
        nombre: {
            validators: {
                notEmpty: {
                    message: 'El Nombre no puede estar en blanco'
                },
                stringLength: {
                    message: 'El Nombre debe tener al menos una letras',
                    min: 1,
                    max: 100
                },
                regexp: {
                    regexp: /^[a-zA-Z0-9_\.,-\s]+$/,
                    message: 'El nombre solo debe tener caracteres alfabetico'
                }
            }
        },
        nombred: {
            validators: {
               stringLength: {
                    message: 'El Nombre debe tener al menos una letras',
                    min: 1,
                    max: 100
                },
                regexp: {
                    regexp: /^[a-zA-Z0-9_\.,-\s]+$/,
                    message: 'El nombre solo debe tener caracteres alfabetico'
                }
            }
        },
        descripcion: {
            validators: {
                notEmpty: {
                    message: 'La Descripcion no puede estar en blanco'
                }
            }
        },
        porcentajealicuota: {
            validators: {
                notEmpty: {
                    message: 'La Descripcion no puede estar en blanco'
                }
            }
        },
        stock:{
            validators: {
                Empty: {
                    message: 'El stock puede estar en cero'
                }
            }
        },
        unidademedidad:{
            validators: {
                Empty: {
                    message: 'La Unidad de medidad no puede estar en blanco'
                }
            }
        },
        precio: {
            validators: {
                notEmpty: {
                    message: 'El Precio de venta no puede estar vacio'
                }
            }
        },
        preciopvp: {
            validators: {
                notEmpty: {
                    message: 'El Precio de venta al publico no puede estar vacio'
                }
            }
        },
        impuestoart18: {
            validators: {
                notEmpty: {
                    message: 'El impuesto no puede estar en blanco'
                }
            }
        },
        impuestoart18d: {
            validators: {
                notEmpty: {
                    message: 'El impuesto no puede estar en blanco'
                }
            }
        },
        costo: {
            validators: {
                notEmpty: {
                    message: 'El Costo no puede estar vacio'
                }
            }
        },
        codigo: {
            validators: {
                notEmpty: {
                    message: 'El codigo no puede estar vacio'
                }
            }
        },
        //Para Proveedores y Cliente
        tipo_documento: {
            validators: {
                notEmpty: {
                    message: 'Debe seleccionar un tipo de documento y no puede estar vacio'
                }
            }
        },
        tipo_documentod: {
            validators: {
                notEmpty: {
                    message: 'Debe seleccionar un tipo de documento y no puede estar vacio'
                }
            }
        },
        num_documento: {
            validators: {
                notEmpty: {
                    message: 'El rif o cedula es obligatorio y no puede estar vacio'
                },
                regexp: {
                    regexp: /^[0-9]+$/,
                    message: 'Solo puede contener números'
                }
            }
        },
        num_documentod: {
            validators: {
                regexp: {
                    regexp: /^[0-9]+$/,
                    message: 'Solo puede contener números'
                }
            }
        },
        direccion: {
            validators: {
                stringLength: {
                    message: 'La direccion debe tener mas de 5 letras',
                    min: 5,
                    max: 250
                }
            }
        },
        direcciond: {
            validators: {
                stringLength: {
                    message: 'La direccion debe tener mas de 5 letras',
                    min: 5,
                    max: 250
                }
            }
        },
        email: {
            validators: {
                emailAddress: {
                    message: 'La direccion correo no es valida'
                }
            }
        },
        emaild: {
            validators: {
                emailAddress: {
                    message: 'La direccion correo no es valida'
                }
            }
        },
        telefono: {
            message: 'El teléfono no es valido',
                validators: {
                    regexp: {
                        regexp: /^[0-9]+$/,
                        message: 'El teléfono solo puede contener números'
                    }
                }
        },
        telefonod: {
            message: 'El teléfono no es valido',
                validators: {
                    regexp: {
                        regexp: /^[0-9]+$/,
                        message: 'El teléfono solo puede contener números'
                    }
                }
        },
        licencia_licor: {
            validators: {
                stringLength: {
                    message: 'La licencia de licores debe tener minimo 5 letras',
                    min: 5,
                    max: 250
                }
            }
        },
        licencia_licord: {
            validators: {
                stringLength: {
                    message: 'La licencia de licores debe tener minimo 5 letras',
                    min: 5,
                    max: 250
                }
            }
        },
        // Campos de ingreso
        idproveedor: {
            validators: {
                notEmpty: {
                    message: 'Debe Seleccionar un proveedor'
                }
            }
        },
        fecha_hora: {
            validators: {
                notEmpty: {
                    message: 'La fecha no puede estar vacia'
                }
            }
        },
        serie_comprobante: {
            validators: {
                notEmpty: {
                    message: 'El Numero de factura no puede estar en blanco'
                }
            }
        },
        serie_comprobante: {
            validators: {
                notEmpty: {
                    message: 'El Numero de factura no puede estar en blanco'
                }
            }
        },
        tipo_comprobante: {
            validators: {
                notEmpty: {
                    message: 'Debe seleccionar un comprobante'
                }
            }
        },
        num_suministro1: {
            validators: {
                notEmpty: {
                    message: 'El Numero de suministro no puede estar en blanco'
                }
            }
        },
        impuesto: {
            validators: {
                notEmpty: {
                    message: 'El impuesto no puede puede estar vacio'
                }
            }
        },
        // Para la Tarjeta
        num_tarjeta: {
            validators: {
                notEmpty: {
                    message: 'El Numero de tarjeta no puede estar en blanco'
                }
            }
        },
        codigoBarraTarjeta: {
            validators: {
                notEmpty: {
                    message: 'El codigo de barra no puede estar en blanco'
                }
            }
        },
        // Para Pago de cliente
        idformapago: {
            validators: {
                notEmpty: {
                    message: 'Debe selecionar una forma de pago'
                }
            }
        },
        idtipopagos: {
            validators: {
                notEmpty: {
                    message: 'Debe seleccionar una el tipo de pago'
                }
            }
        },   
        idbancocuenta: {
            validators: {
                notEmpty: {
                    message: 'Debe seleccionar una de banco'
                }
            }
        },
        idreferencia: {
            validators: {
                notEmpty: {
                    message: 'La referencia de pago no puede estar vacio'
                }
            }
        },
        montopago: {
            validators: {
                notEmpty: {
                    message: 'La referencia de pago no puede estar vacio'
                },
                regexp: {
                    regexp: /^[0-9\.,\s]+$/,
                    message: 'Solo numero'
                }
            }
        }
    }
})
//Se verifica si la validacion se completo correctamente
.on('success.form.bv', function(e) {
    // Se esta previniendo el evento submit del boton guardar
    e.preventDefault();
    $("#validado").val(1);
});
//Fin de la validacion del formulario
    
// Funciones para mandar a validar los formulario
function validar() {
   $('#formulario').bootstrapValidator('validate');
}

