function numerosCP(e)
{
	key = e.keyCode|| e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "1234567890."
	especiales = "?-%-&-/-(-)-#-!-'-Â¿-$-Âº-\-Âª-`-^-[-]-+-*-{-Â¨-Â´-Ã‡-Ã§-}-_-.-<->-@-:-;-,";
	tecla_especial = false
	for(var i in especiales)
	{
		if(key == especiales [i] || key == 11 || key == 9 || key == 8 )
		{
			tecla_especial = true;
			break;
		}
	}			
	if (letras.indexOf(tecla)== -1 && !tecla_especial)
	{
		return false;	
	}
}

function letrasNumerosEspacio(e)
{
	key = e.keyCode|| e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "ABCDEFGHIJKLMNÃ‘OPQRSTUVWXYZ 0123456789"
	especiales = "?-%-&-/-(-)-#-!-'-Â¿-$-Âº-\-Âª-`-^-[-]-+-*-{-Â¨-Â´-Ã‡-Ã§-}-_-.-<->-@-:-;-,";
	tecla_especial = false
	for(var i in especiales)
	{
			if(key == especiales [i] || key == 11 || key == 9 || key == 8 )
			{
				tecla_especial = true;
				break;
			}
	}
	
	if (letras.indexOf(tecla)== -1 && !tecla_especial)
	{
		return false;	
	}
}

function letrasNumerosEspacioAmplio(e)
{
	key = e.keyCode|| e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "ABCDEFGHIJKLMNÃ‘OPQRSTUVWXYZ 0123456789 /*+!#$%/()=?¡+[]{}:;,."
	especiales = "&-&-|->-<-\-";
	tecla_especial = false
	for(var i in especiales)
	{
			if(key == especiales [i] || key == 11 || key == 9 || key == 8 )
			{
				tecla_especial = true;
				break;
			}
	}
	
	if (letras.indexOf(tecla)== -1 && !tecla_especial)
	{
		return false;	
	}
} 
function numeros(e){
	key = e.keyCode|| e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "1234567890."
	especiales = "?-%-&-/-(-)-#-!-'-Â¿-$-Âº-\-Âª-`-^-[-]-+-*-{-Â¨-Â´-Ã‡-Ã§-}-_-<->-@-:-;-,";
	tecla_especial = false
	for(var i in especiales){
		if(key == especiales [i] || key == 11 || key == 9 || key == 8 ){
			tecla_especial = true;
			break;
		}
	}			
	if (letras.indexOf(tecla)== -1 && !tecla_especial)
	{
		return false;	
	}
}


function isValidDate(dateString) {
  var regEx = /^\d{4}-\d{2}-\d{2}$/;
  if(!dateString.match(regEx)) return false;  // Invalid format
  var d = new Date(dateString);
  var dNum = d.getTime();
  if(!dNum && dNum !== 0) return false; // NaN value, Invalid date
  return d.toISOString().slice(0,10) === dateString;
}

function caracteres_fecha(e)
{
	key = e.keyCode || e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "1234567890-"
	especiales = "?-%-&-/-(-)-#-!-'-Â¿-$-Âº-\-Âª-`-^-[-]-+-*-{-Â¨-Â´-Ã‡-Ã§-}-_-.-<->-@-:-;-,";
	tecla_especial = false

	for (var i in especiales)
	{
		if (key == especiales [i] || key == 11 || key == 9 || key == 8 )
		{
			tecla_especial = true;
			break;
		}
	}

	if (letras.indexOf(tecla) == -1 && !tecla_especial)
	{
		return false;	
	}
}

function caracteres_rfc(e)
{
	key = e.keyCode|| e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "ABCDEFGHIJKLMNÃ‘OPQRSTUVWXYZ1234567890&"
	especiales = "?-%-&-/-(-)-#-!-'-Â¿-$-Âº-\-Âª-`-^-[-]-+-*-{-Â¨-Â´-Ã‡-Ã§-}-_-.-<->-@-:-;-,";
	tecla_especial = false
	for(var i in especiales)
	{
		if(key == especiales [i] || key == 11 || key == 9 || key == 8 )
		{
			tecla_especial = true;
			break;
		}
	}
	
	if (letras.indexOf(tecla)== -1 && !tecla_especial)
	{
		return false;	
	}
}

function caracteres_permiso_cre(e)
{
	key = e.keyCode|| e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "ABCDEFGHIJKLMNÃ‘OPQRSTUVWXYZ1234567890/"
	especiales = "?-%-&-/-(-)-#-!-'-Â¿-$-Âº-\-Âª-`-^-[-]-+-*-{-Â¨-Â´-Ã‡-Ã§-}-_-.-<->-@-:-;-,";
	tecla_especial = false
	for(var i in especiales)
	{
		if(key == especiales [i] || key == 11 || key == 9 || key == 8 )
		{
			tecla_especial = true;
			break;
		}
	}
	
	if (letras.indexOf(tecla)== -1 && !tecla_especial)
	{
		return false;	
	}

}


function mayus(e) 
{
    e.value = e.value.toUpperCase();
}

function alfanum(e)
{
	key = e.keyCode|| e.which;
	tecla = String.fromCharCode(key).toUpperCase();
	letras = "ABCDEFGHIJKLMNÃ‘OPQRSTUVWXYZ1234567890"
	especiales = "?-%-&-/-(-)-#-!-'-Â¿-$-Âº-\-Âª-`-^-[-]-+-*-{-Â¨-Â´-Ã‡-Ã§-}-_-.-<->-@-:-;-,";
	tecla_especial = false
	for(var i in especiales)
	{
		if(key == especiales [i] || key == 11 || key == 9 || key == 8 )
		{
			tecla_especial = true;
			break;
		}
	}
	
	if (letras.indexOf(tecla)== -1 && !tecla_especial)
	{
		return false;	
	}
}

function formatoNumero(numero, decimales, separadorDecimal, separadorMiles) {
    var partes, array;

    if ( !isFinite(numero) || isNaN(numero = parseFloat(numero)) ) {
        return "";
    }
    if (typeof separadorDecimal==="undefined") {
        separadorDecimal = ",";
    }
    if (typeof separadorMiles==="undefined") {
        separadorMiles = "";
    }

    // Redondeamos
    if ( !isNaN(parseInt(decimales)) ) {
        if (decimales >= 0) {
            numero = numero.toFixed(decimales);
        } else {
            numero = (
                Math.round(numero / Math.pow(10, Math.abs(decimales))) * Math.pow(10, Math.abs(decimales))
            ).toFixed();
        }
    } else {
        numero = numero.toString();
    }

    // Damos formato
    partes = numero.split(".", 2);
    array = partes[0].split("");
    for (var i=array.length-3; i>0 && array[i-1]!=="-"; i-=3) {
        array.splice(i, 0, separadorMiles);
    }
    numero = array.join("");

    if (partes.length>1) {
        numero += separadorDecimal + partes[1];
    }

    return numero;
}

function valida_monto(valor)
{
	var RE = /^\d*(\.\d{1})?\d{0,1}$/;
    if (RE.test(valor)) 
    {
        return true;
    } 
    else 
    {
        return false;
    }

}

$('.dropdown-menu a.dropdown-toggle').on('click', function(e) {
  if (!$(this).next().hasClass('show')) {
    $(this).parents('.dropdown-menu').first().find('.show').removeClass('show');
  }
  var $subMenu = $(this).next('.dropdown-menu');
  $subMenu.toggleClass('show');


  $(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
    $('.dropdown-submenu .show').removeClass('show');
  });


  return false;
});

function validateDecimal(valor) 
{
    var RE = /^\d*(\.\d{1})?\d{0,1}$/;

    if (RE.test(valor)) {
        return true;
    } else {
        return false;
    }
}

function valida_rfc(rfc)
{
	const regexExp = /^([A-ZÑ&]{3,4}) ?(?:- ?)?(\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])) ?(?:- ?)?([A-Z\d]{2})([A\d])$/;
	return regexExp.test(rfc);
}

function valida_permiso_cre(permiso_cre)
{
	const regexExp = /^(PL\/[0-9]{1,5}\/EXP\/ES\/[0-9]{4})|(PL\/[0-9]{1,5}\/EXP\/ESA\/[0-9]{4})|(PL\/[0-9]{1,5}\/DIS\/OM\/[0-9]{4})|(PL\/[0-9]{1,5}\/EXP\/ES\/MM\/[0-9]{4})$/;
	return regexExp.test(permiso_cre);
}

function valida_email(email)
{
	const regexExp = /^([\w+-.%]+@[\w.-]+\.[A-Za-z]{2,4})(;[\w+-.%]+@[\w.-]+\.[A-Za-z]{2,4})*$/;
	return regexExp.test(email);
}