//No hay vuelta atrás posible en los formularios
if (document.location == window.history.go(1) )//&& LogNoVueltaAtras)
{
  window.history.go(-1);
}

//Si se toca algún campo y se intenta salir sin guardar, se avisa
//window.onbeforeunload = salirEducadamente;

//////////////////////////////////////////////////////
//Número CNP nn/nnnnnnn/nn    
//////////////////////////////////////////////////////
function esCNP(str_cadena)
{
	var patCNP = /^[0-9]{2,2}[\/][0-9]{7,7}[\/][0-9]{2,2}$/
	return(patCNP.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Nombre de fichero DOC, PDF, XLS, ZIP o TXT
//////////////////////////////////////////////////////
function esDocumento(str_cadena)
{
//	var esDocumento = /^.+\.([Dd][Oo][Cc]|[Pp][Dd][Ff]|[Xx][Ll][Ss]|[Zz][Ii][Pp]|[Tt][Xx][Tt])$/
//	return(esDocumento.exec(str_cadena))

	var caracter = ",";
	var intPos = str_cadena.lastIndexOf(caracter);
	if (intPos>0)
		return false;
	else
		return true;
}

//////////////////////////////////////////////////////
//Nombre de fichero Excell
//////////////////////////////////////////////////////
function esDocumentoXls(str_cadena)
{
	var esDocumentoXls = /^.+\.([Xx][Ll][Ss])$/
	return(esDocumentoXls.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Nombre de fichero PDF
//////////////////////////////////////////////////////
function esDocumentoPdf(str_cadena)
{
	var esDocumentoPdf = /^.+\.([Pp][Dd][Ff])$/
	return(esDocumentoPdf.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Nombre de fichero DOC
//////////////////////////////////////////////////////
function esDocumentoDoc(str_cadena)
{
	var esDocumentoDoc = /^.+\.([Dd][Oo][Cc])$/
	return(esDocumentoDoc.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Nombre de fichero ZIP
//////////////////////////////////////////////////////
function esDocumentoZip(str_cadena)
{
	var esDocumentoZip = /^.+\.([Zz][Ii][Pp])$/
	return(esDocumentoZip.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Nombre de fichero RAR
//////////////////////////////////////////////////////
function esDocumentoRar(str_cadena)
{
	var esDocumentoRar = /^.+\.([Rr][Aa][Rr])$/
	return(esDocumentoRar.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Número decimal, sin separador de miles, con coma como separador decimal, con parte decimal opcional
//Permite coma sin dígitos decimales
//////////////////////////////////////////////////////
function esDecimal(str_cadena)
{
	var patDecimal = /^[0-9]+,?[0-9]*$/
	return(patDecimal.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Número, comprueba si lo que realmente escribimos es un numero entero
//Permite coma sin dígitos decimales
//////////////////////////////////////////////////////
function esEntero(str_cadena)
{
	var patEntero = /^[0-9]+$/
	return(patEntero.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Número, comprueba si lo que realmente escribimos es un numero con 2 decimales
//////////////////////////////////////////////////////
function esNumeroCon2Decimales(mt) {
    if (mt.value == "") {
      return true;
    }

    else {
      if (mt.value.indexOf('.') == -1) {
          return true;
      }
      else {
        dectext = mt.value.substring(mt.value.indexOf('.')+1, mt.value.length);
        if (dectext.length > 2)  {
           return false;
        }
        else {
           return true;
        }
      }
    }
}


//////////////////////////////////////////////////////
//NICA, comprueba si el dato es un número entero con un máximo de 9 dígitos
//////////////////////////////////////////////////////
function esNica(str_cadena)
{
	var patEntero = /^[0-9]{1,9}$/
	return(patEntero.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Comprueba si una cadena de texto concuerda con un patrón clásico de nombre de fichero
//////////////////////////////////////////////////////
function esFichero(str_cadena)
{

	//var patCadena = /^[a-zA-Z0-9ñÑ&%_,\-}{)(:; ]+$/
	var patCadena = /^[a-zA-Z0-9ñÑ&%_\-}{)(:; ]+$/
	//var patCadena = /^[a-zA-Z0-9ñÑ.]+$/
	return(patCadena.exec(str_cadena))
	
	
	//var caracter = ",";
	//var intPos = str_cadena.lastIndexOf(caracter);
	//if (intPos>0)
	//	return false;
	//else
	//	return true;
}

//////////////////////////////////////////////////////
//Número de teléfono (entero de 9 a 11 digitos)
//////////////////////////////////////////////////////
function esTelefono(str_cadena)
{
	var patTelefono = /^[0-9]{9,11}$/
	return(patTelefono.exec(str_cadena))
}

function esTelefonoMovil(str_cadena)
{
	if(str_cadena.length > 6 && str_cadena.length < 9)
		return(false);
	var patTelefono = /^[0-9]{6,9}$/
	return(patTelefono.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Número de año
//////////////////////////////////////////////////////
function esAno(str_cadena)
{
	var patAno = /^[0-9]{4,4}$/
	return(patAno.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Número decimal con un máximo de dos decimales
//////////////////////////////////////////////////////
function esEuros(str_cadena)
{
	var patDecimal = /^[0-9]+,?[0-9]{0,2}$/
	return(patDecimal.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Dirección de correo electrónico
//////////////////////////////////////////////////////
function esEmail(str_cadena)
{
	var patEmail = /^[a-zA-Z0-9_]+[\.\-a-zA-Z0-9_]*@([\-a-zA-Z0-9_]+\.)+[a-zA-Z]{2,3}$/
	return(patEmail.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Lista de direcciones de correo electrónico, 
//separadas por punto y coma
//////////////////////////////////////////////////////
function esListaEmails(str_cadena)
{
	var patEmail = /^[a-zA-Z0-9_]+[\.\-a-zA-Z0-9_]*@([\-a-zA-Z0-9_]+\.)+[a-zA-Z]{2,3}(\s*\;\s*[a-zA-Z0-9_]+[\.\-a-zA-Z0-9_]*@([\-a-zA-Z0-9_]+\.)+[a-zA-Z]{2,3})*$/
	return(patEmail.exec(str_cadena))
}

//////////////////////////////////////////////////////
//Fecha con el año con cuatro dígitos, y el mes y el día con uno o dos dígitos.
//Como separador admite "/" y "-"
//Y que sea una fecha sensata, claro: nada de 33s de diciembres; controla además
//la guasa de los años bisiestos y los 29s de febreros
//////////////////////////////////////////////////////
function esFecha(str_cadena)
{
	var int_ano
	var patFecha = /^([0-9]{1,2})[ \/\-]([0-9]{1,2})[ \/\-]([0-9][0-9]([0-9][0-9]))$/
	if(patFecha.exec(str_cadena))
	{
		tbl_resultado = patFecha.exec(str_cadena);
		int_ano = comprobarFecha(tbl_resultado[1],tbl_resultado[2],tbl_resultado[3]);
		if (int_ano == 0)
		{
			return(false);
		}
		else
		{
			return(true);
		}
	}
	else	
	{	
		return(false);
	}
}

//////////////////////////////////////////////////////
//Número de DNI (8 números y una letra en mayuscula o minúscula sin separación)
//comprueba que la letra es la que le debería corresponder
//////////////////////////////////////////////////////
function esDNI(str_cadena)
{
	var patDNI = /^[0-9]{6,8}[a-zA-Z]{1,1}$/
	var letraMandada, letraBuena, cadena, posicion, dni, inicial;

	inicial = str_cadena.substring(0,1).toUpperCase();
	if(inicial == 'X')
	{
		str_cadena = str_cadena.substring(1,str_cadena.length);
	}

	if (patDNI.exec(str_cadena))
	{
		//comprobamos que la letra es la que le corresponde
		dni = str_cadena.substring(0, str_cadena.length-1); 
		cadena="TRWAGMYFPDXBNJZSQVHLCKET" 
		posicion = dni % 23 
		
		letraBuena = cadena.substring(posicion,posicion+1) 
		letraMandada = str_cadena.substring(str_cadena.length-1 ,str_cadena.length); 
	
		letraBuena=letraBuena.toUpperCase();
		letraMandada=letraMandada.toUpperCase();
		
		return(letraBuena==letraMandada);
	}
	else
		return false
}

//////////////////////////////////////////////////////
//Número de NIE (una letra (  X,Y ó Z)  7  números y una letra en mayuscula o minúscula sin separación)
//comprueba que la letra es la que le debería corresponder
//////////////////////////////////////////////////////
function esNIE(str_cadena)
{
	var patDNI = /^[0-9]{7,8}[a-zA-Z]{1,1}$/
	var patNIE = new RegExp("^[x-zX-Z]{1,1}[0-9]{7,8}[a-zA-Z]{1,1}$")
	var letraMandada, letraBuena, cadena, posicion, dni, inicial;

	inicial = str_cadena.substring(0,1).toUpperCase();
	if(patNIE.exec(str_cadena))
	{
		if(inicial == 'X' || inicial == 'x')
		{
			if((str_cadena.substring(1,str_cadena.length-1)).length == 8)
			{
				str_cadena = str_cadena.substring(1,str_cadena.length);
			}
			else if((str_cadena.substring(1,str_cadena.length-1)).length == 7)
			{
				str_cadena = '0' + str_cadena.substring(1,str_cadena.length);
			}
		}
		else if(inicial == 'Y' || inicial == 'y')
		{
			str_cadena = '1' + str_cadena.substring(1,str_cadena.length);
		}
		else if(inicial == 'Z' || inicial == 'z')
		{
			str_cadena = '2' + str_cadena.substring(1,str_cadena.length);
		}
	}
	else
	{
		return false;
	}
	
	if (patDNI.exec(str_cadena))
	{
		//comprobamos que la letra es la que le corresponde
		
		dni = str_cadena.substring(0, str_cadena.length-1); 
		cadena="TRWAGMYFPDXBNJZSQVHLCKET" 
		posicion = dni % 23 
		
		letraBuena = cadena.substring(posicion,posicion+1) 
		letraMandada = str_cadena.substring(str_cadena.length-1 ,str_cadena.length); 
	
		letraBuena=letraBuena.toUpperCase();
		letraMandada=letraMandada.toUpperCase();
		
		return(letraBuena==letraMandada);
	}
	else
		return false
}

//////////////////////////////////////////////////////
//Hora
//Como separador ":"
//////////////////////////////////////////////////////
function esHora(str_cadena)
{
	var patHora = /^([0-9]{1,2})[ \:]([0-9]{1,2})$/
	if(patHora.exec(str_cadena))
	{
		tbl_resultado = patHora.exec(str_cadena);
		return(comprobarHora(tbl_resultado[2],tbl_resultado[1]));
	}
	else	
		return(false);
}

//////////////////////////////////////////////////////
//Devuelve false si la hora no es correcta; 
//////////////////////////////////////////////////////
function comprobarHora(intMinutos, intHoras)
{
	return !((intMinutos>59) || (intHoras>23));
}

//////////////////////////////////////////////////////
//Devuelve 0 si la fecha no es correcta; el año, si es correcta
//////////////////////////////////////////////////////
function comprobarFecha(intDia, intMes, intAnio)
{
	arrDuraciones = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if(esBisiesto(intAnio))
		arrDuraciones[1]=29;
	if ((intMes>12 || intMes<1) || (intDia>arrDuraciones[intMes-1] || intDia<1))
		return 0;
	else	
		return intAnio;
}
//////////////////////////////////////////////////////
//Se le pasa un año y nos dice si el año es bisiesto o no
//////////////////////////////////////////////////////
function esBisiesto(intAnio)
{
	return(intAnio%4==0 && (intAnio%100!=0 ||intAnio%400==0));
}
//////////////////////////////////////////////////////
//Se le pasa el nombre del checkbox y valida si tiene opción marcada
//////////////////////////////////////////////////////



//////////////////////////////////////////////////////
//Valida si una fecha es correcta. Parametros
//objFecha: objeto de fecha
//obligatorio:1 si la fecha es obligatoria y 0 si no lo es
//nombre: nombre completo de la fecha que aparecerá en los mensajes de aviso
//////////////////////////////////////////////////////
function ValidaFecha(objFecha, obligatorio, nombre)
{
	if (obligatorio==1)
	{
		if (objFecha.value.length==0)
		{
			alert("Introduzca el valor de la " + nombre);
			objFecha.focus();
			return false;
		}
		else
		{
			if (!esFecha(objFecha.value))
			{				
				objFecha.focus();
				alert("El valor de la " + nombre + " no es correcto");
				return false;
			}	
		}
	}
	else
	{
		if (objFecha.value.length>0)
		{
			if (!esFecha(objFecha.value))
			{				
				objFecha.focus();
				alert("El valor de la " + nombre + " no es correcto");
				return false;
			}	
		}
	}
	return true;
}

//////////////////////////////////////////////////////
//Dadas dos fechas f1 y f2 valida que f2 no sea anterior a f1
//f1: valor de la fecha inicial
//f2: valor de la fecha final
//nombref1: nombre completo de la fecha inicial que aparecerá en los mensajes de aviso
//nombref2: nombre completo de la fecha final que aparecerá en los mensajes de aviso
//////////////////////////////////////////////////////

function ValidaRangoFechas(f1,f2, nombref1, nombref2) 
{
	fecha1 = new Array();
	fecha2 = new Array();

	var ok=0;
	
	if (f2.value.length==0)
		ok=1
	else
	{
		fecha1=	f1.value.split('/');
		fecha2=	f2.value.split('/');
	
		if (fecha1[2]<fecha2[2])
			ok=1;
		else if (fecha1[2]==fecha2[2])
			if (fecha1[1]<fecha2[1])
				ok=1;
			else if (fecha1[1]==fecha2[1])
				if (fecha1[0]<fecha2[0])
					ok=1;
				else if (fecha1[0]==fecha2[0])
					ok=1;
	}
	if (ok==0)
	{
		alert("La " + nombref2 + " no puede ser anterior a la " + nombref1);
		f2.focus();
		return false;
	}
	else if (ok==1)
	{	return true; }
}

//////////////////////////////////////////////////////
//Dadas dos fechas f1 y f2 valida que f2 no sea anterior a f1
//f1: valor de la fecha inicial
//f2: valor de la fecha final
//////////////////////////////////////////////////////

function ComparaFechas(f1,f2) 
{
	fecha1 = new Array();
	fecha2 = new Array();

	fecha1=	f1.split('/');
	fecha2=	f2.split('/');
		
	if (fecha1[2]<fecha2[2])
	{
		//alert('año menor');	
		ok=-1;
	}
	else
	{
		if (fecha1[2]==fecha2[2])
		{
			//alert('año igual');	
			if (fecha1[1]<fecha2[1])
			{
				//alert('mes menor');
				ok=-1;
			}
			else
			{
				if (fecha1[1]==fecha2[1])
				{
					//alert('mes igual')
					if (fecha1[0]<fecha2[0])
					{
						//alert('dia menor');
						ok=-1
					}
					else
					{
						if (fecha1[0]==fecha2[0])
						{
							//alert('dia igual');
							ok=0;
						}
						else
						{
							//alert('dia mayor');
							ok=1;
						}
					}
				}
				else
				{
					//alert('mes mayor');
					ok=1;
				}
			}
		}
		else
		{
			//alert('año mayor');		
			ok=1;
		}
	}
	return (ok);
}

//////////////////////////////////////////////////////
//Devuelve una cadena que es un número con dos decimales y donde se ha
// sustituido la coma, en caso de haberla, por un punto
//////////////////////////////////////////////////////
function fmtPunto(str_cadena)
{	
	var patDecimal = /^-?(\d+),?(\d*)$/
	var patNegativo = /^-(\d+),?(\d*)$/
	var r;
 	
	if (patDecimal.exec(str_cadena))
		{
		miNum = patDecimal.exec(str_cadena);
		r = miNum[1] + '.' + miNum[2];
		if(patNegativo.exec(str_cadena))
			r = (-1)*r
		}	
	  else
		r=0;
	return(r);
}

//////////////////////////////////////////////////////
// valida un campo de un formulario como obligatorio
//////////////////////////////////////////////////////
function campoObligatorio(campo, texto)
{
	if (campo.value.length==0)
	{
		alert(texto);
		campo.focus();
		return false;
	}
	return true;
}

function TrimLeft(str) 
{
	var cadena = "";
	var i = len = 0;

	if (str+"" == "undefined" || str == null)	
		return null;

	str += "";

	if (str.length == 0) {
		cadena = "";
	}
	else {	
  		len = str.length;
		
  		while ((i <= len) && (str.charAt(i) == " "))
			i++;

   		cadena = str.substring(i, len);
  	}

  	return cadena;
}

//////////////////////////////////////////////////////
// Función para marcar/desmarcar los checks.
//////////////////////////////////////////////////////
checkedBoxes=false;
function checkedAll(name)
{
	 if (checkedBoxes == false)
     {
		 checkedBoxes = true
     }
   	 else
     {
   		checkedBoxes = false
     }
     
	 if ( name && ( name != '' ) && ( name.length > 0 ) )
	 {
	     var aa = document.getElementsByName(name);
	     
		 for (var i =0; i < aa.length; i++) 
		 {
			 aa[i].checked = checkedBoxes;
		 }
	 }
}