/******************************************************************************************/
/* Función que devuelve texto eliminando sus blancos por delante y por detrás             */
/******************************************************************************************/
function fjl_Trim(vjl_texto)
 {
   var vjl_posblanco = vjl_texto.indexOf(' ',0);
   // Bucle para quitar los blancos del inicio
   while ((vjl_posblanco == 0))
    {
      vjl_texto = vjl_texto.substring(1,vjl_texto.length);
      vjl_posblanco = vjl_texto.indexOf(' ',0);
    }
   // Bucle para quitar los blancos del final 
   var vjl_longitud = vjl_texto.length;
   while (vjl_texto.substring(vjl_longitud-1,vjl_longitud) == ' ')
    {
	  vjl_texto = vjl_texto.substring(0,vjl_longitud-1);
	  vjl_longitud = vjl_texto.length;
	}  	
   return vjl_texto;	
 }
 
/****************************************************************************************/
/* Función     : fjl_Numerico															*/
/* Descripción : Función que garantiza que dato sea un valor numérico positivo, si lo   */
/*				 es devuelve 0 y sino devuelve 1										*/
/*	Entrada    : vjl_dato      : Valor a comprobar.										*/
/* Salida      : Si es correcto, devuelve vjl_ind, sino, da un mensaje y devuelve 1		*/
/****************************************************************************************/
function fjl_Numerico(vjl_dato) {
	var vjl_primer= vjl_dato.substr(0,1);
	//var vjl_mensaje = vjl_campo + ':\nDebe ser un valor numérico positivo.\nUtilice como separador de decimales el punto en lugar de la coma.';
	/*if (vjl_campo.indexOf('DIA',0)> -1 || //Modificación para que sólo salque un 
		vjl_campo.indexOf('MES',0)> -1 || //mensaje en las fechas, incluyendo su 
		vjl_campo.indexOf('AÑO',0)> -1)  //formato. SOLO PARA FECHAS
		{
			vjl_mensaje = vjl_mensaje + '\nEl formato válido de fecha es DD/MM/AAAA';
		}
	*/
	if (isNaN(vjl_dato))
	{
		//alert(vjl_mensaje);	
		return(1);
	}
	else 
	{
		if (vjl_primer=='-')
		{
			//alert(vjl_mensaje);
			return(1);
		}
		else
		{
			return(0);
		}
	}
}

/****************************************************************************************/
/* Función     : fjl_NumericoNegativo													*/
/* Descripción : Función que garantiza que dato sea un valor numérico (positivo o		*/
/*				 negativo), si lo es devuelve 0 y sino presenta un mensaje de error y	*/
/*				 devuelve 1																*/
/*	Entrada    : vjl_dato      : Valor a comprobar.										*/
/*               vjl_campo	   : Literal con el nombre del campo.						*/
/*               vjl_ind	   : Secuenciador de error(No se usa, a eliminar en futuro?)*/
/* Salida      : Si es correcto, devuelve 0, sino, da un mensaje y devuelve 1			*/
/****************************************************************************************/
function fjl_NumericoNegativo(vjl_dato,vjl_campo,vjl_ind) 
{	
	//Si no es un número se informa de ello al usuario
	var vjl_mensaje = vjl_campo + ':\nDebe ser un valor numérico.\nUtilice como separacor de decimales el punto en lugar de la coma.';
	if (isNaN(vjl_dato)) 
	{
		alert(vjl_mensaje);
		return 1;
	}
	return 0;
}

/****************************************************************************************/
/* Función     : fjl_Decimal															*/
/* Descripción : Función que verifica que dato no tenga más enteros ni decimales que los*/
/*				 pasados por parámetro. Si cumple devuelve ind y sino presenta un		*/
/*				 mensaje de error y devuelve 1 											*/
/*	Entrada    : vjl_dato      : Valor a comprobar.										*/
/*               vjl_enteros   : Número de enteros del formato con el que queremos		*/
/*								 validar												*/
/*               vjl_decimales : Número de decimales del formato con el que queremos	*/
/*								 validar												*/
/* Salida      : Si es correcto, devuelve true, sino,  devuelve false					*/
/****************************************************************************************/
function fjl_Decimal(vjl_dato,vjl_enteros,vjl_decimales) {
	vjl_pospunto = vjl_dato.indexOf(".");

	// Se compone la cadena de validación del entero
	/*var vjl_formatonumero = '';
	for (vjl_j=1;vjl_j<=vjl_enteros;vjl_j++)
	 {
		vjl_formatonumero = vjl_formatonumero + '9';
	 }
	if (vjl_decimales > 0)
	 {
		vjl_formatonumero = vjl_formatonumero + '.';
		for (vjl_j=1;vjl_j<=vjl_decimales;vjl_j++)
		 {
			vjl_formatonumero = vjl_formatonumero + '9';
		 }
	 }

	var vjl_mensaje = vjl_campo + ':\nDebe ser un número con formato = ' + vjl_formatonumero;*/
	
	if (vjl_pospunto<0) 
	{	
		vjl_numdecimales = 0;
		vjl_dato = fjl_Trim(vjl_dato);
		vjl_numenteros = vjl_dato.length;
	}
	else
	{
		vjl_dato = fjl_Trim(vjl_dato)
		vjl_numdecimales = vjl_dato.length - vjl_pospunto-1;
		vjl_numenteros = vjl_pospunto;
	}
	
	if (fjl_Numerico(vjl_dato.substr(0,vjl_numenteros)) !=0) {
		//alert(vjl_mensaje);
		return(false);
	}
	if (fjl_Numerico(vjl_dato.substr(vjl_pospunto+1,vjl_numdecimales)) !=0) {
		//alert(vjl_mensaje);
		return(false);
	}

	if (vjl_numenteros > vjl_enteros) {
		//alert(vjl_mensaje);
		return(false);
	} else {
		if (vjl_numdecimales > vjl_decimales) {
		    //alert(vjl_mensaje);
		    return(false);
	    } else {
		    return(true);
		}
	}
}

/****************************************************************************************/
/* Función     : fjl_Intervalo															*/
/* Descripción :  Función que garantiza que dato se encuentre entre inicio y fin (ambos */
/*				  inclusive). Si cumple devuelve 0										*/
/*				  y devuelve 1     														*/
/*	Entrada    : vjl_dato      : Valor a comprobar.										*/
/*               vjl_inicio	   : Inicio del intervalo									*/
/*               vjl_fin	   : Fin del intervalo										*/
/* Salida      : Si es correcto, devuelve 0, sino devuelve 1							*/
/****************************************************************************************/

function fjl_Intervalo(vjl_dato,vjl_inicio,vjl_fin) {
	/*var vjl_mensaje = vjl_campo + ':\nDebe pertenecer al intervalo [' + vjl_inicio + ',' + vjl_fin + ']';
		if (vjl_campo.indexOf('DIA',0)> -1 || //Modificación para que sólo salque un 
		vjl_campo.indexOf('MES',0)> -1 || //mensaje en las fechas, incluyendo su 
		vjl_campo.indexOf('AÑO',0)> -1)  //formato. SOLO PARA FECHAS
		{
			vjl_mensaje = vjl_mensaje + '\nEl formato válido de fecha es DD/MM/AAAA';
		}
	*/
	if ((vjl_dato > vjl_fin) || (vjl_dato < vjl_inicio)) {
		//alert(vjl_mensaje);
		return(1);
	}else {return(0);}
}

/****************************************************************************************/
/* Función     : fjl_CaracterInvalido													*/
/* Descripción :  Función que garantiza que dato no contenga caracteres prohibidos . Si */
/*				  cumple devuelve ind y sino presenta un mensaje de error y devuelve 1  */
/*	Entrada    : vjl_dato      : Valor a comprobar.										*/
/* Salida      : Si es correcto, devuelve true, sino devuelve false						*/
/****************************************************************************************/

function fjl_CaracterInvalido(vjl_dato)
{
	// Los caracteres prohibidos que se validan son : ' " ¿ ? & = # ´ ` *
	var vjl_error = false;
	var vjl_caracteres = new Array("'",'"','¿','?','&','=','#','´','`','*');
	var vjl_contador = 0;
	var vjl_ind = 0;
	
	while (vjl_ind == 0 && vjl_contador < 10)
	 {
		vjl_caracter = vjl_caracteres[vjl_contador];
		if (vjl_dato.indexOf(vjl_caracter) != -1)
		 { // Se ha metido un caracter erróneo
			//alert('Hola' + vjl_caracter);
			vjl_ind = 1;
		 }
		vjl_contador++;
	 }	
	return (vjl_ind == 0);
}

/****************************************************************************************/
/* Función     : fjl_CaracterInvalidoFicheros											*/
/* Descripción :  Función que garantiza que dato no contenga caracteres prohibidos en   */
/*                el nombre de un fichero.Si cumple devuelve ind y sino presenta un     */
/*                mensaje de error y devuelve 1                                         */
/*	Entrada    : vjl_dato      : Valor a comprobar.										*/
/* Salida      : Si es correcto, devuelve true, sino devuelve false						*/
/****************************************************************************************/

function fjl_CaracterInvalidoFicheros(vjl_dato,vjl_campo,vjl_ind)
{
	var vjl_ind;
	// Se valida primero que no sean ya los no válidos de siempre
	//vjl_ind = fjl_CaracterInvalido(vjl_dato,vjl_campo,vjl_ind);
	if ( fjl_CaracterInvalido(vjl_dato)) {
		vjl_ind = 0;
	}
	else {
		vjl_ind = 1;
	}
	// Los nuevos caracteres prohibidos para nombres de ficheros son son : \ / : < > | y el espacio en blanco
	if (vjl_ind == 0)
	{
		var vjl_caracteres = new Array('\\','/',':','<','>','|',' ');
		var vjl_contador = 0;
		
		while (vjl_ind == 0 && vjl_contador < 7)
		 {
			vjl_caracter = vjl_caracteres[vjl_contador];
			if (vjl_dato.indexOf(vjl_caracter) != -1)
			 { // Se ha metido un caracter erróneo
				//alert('Caracter malo ' + vjl_caracter);
				vjl_ind = 1;
			 }
			vjl_contador++;
		 }	
	}
	return (vjl_ind == 0);
}

/****************************************************************************************/
/* Función     : fjl_CaracterInvalidoLDAPuser											*/
/* Descripción :  Función que garantiza que dato no contenga caracteres prohibidos en   */
/*                el nombre de un fichero.Si cumple devuelve ind y sino presenta un     */
/*                mensaje de error y devuelve 1                                         */
/*	Entrada    : vjl_dato      : Valor a comprobar.										*/
/* Salida      : Si es correcto, devuelve true, sino devuelve false						*/
/****************************************************************************************/

function fjl_CaracterInvalidoLDAPuser(vjl_dato,vjl_campo,vjl_ind)
{
	var vjl_ind = 0;
	// Se valida primero que no sean ya los no válidos de siempre
	//vjl_ind = fjl_CaracterInvalido(vjl_dato,vjl_campo,vjl_ind);
	if ( vjl_dato.charAt(0)== ' ') {
		vjl_ind = 1;
	}
	else {
		if ( vjl_dato.charAt(vjl_dato.length-1)== ' ') {
			vjl_ind = 1;
		}
	}
	
	if (vjl_ind == 0)
	{
		var vjl_caracteres = new Array('  ','\\', '(', ')', '*', '%', '_', '/', ',', '+', '=', ';', '|', '#', '<', '>', '[', ']', '&');
		var vjl_contador = 0;
		
		while (vjl_ind == 0 && vjl_contador < 18)
		 {
			vjl_caracter = vjl_caracteres[vjl_contador];
			if (vjl_dato.indexOf(vjl_caracter) != -1)
			 { // Se ha metido un caracter erróneo
				//alert('Caracter malo ' + vjl_caracter);
				vjl_ind = 1;
			 }
			vjl_contador++;
		 }	
	}
	return (vjl_ind == 0);
}



/******************************************************************************************/
/* Función     : fjl_ValidarHora														  */
/* Descripción : Función que garantiza que dato tiene una hora válida (HH:MM o HH:MM:SS). */
/*				 Si se cumple devuelve 0 y sino devuelve 1								  */
/* Entrada     : vjl_dato		 : Dato a comprobar									      */
/* Salida      : Devuelve vjl_ind si la validación es corecta, sino 1 y mensaje de error  */
/******************************************************************************************/
function fjl_ValidarHora(vjl_dato) {
	
   var vjl_hora=vjl_dato.toString();
   var vjl_error=0; //VARIABLE QUE ACUMULA ERRORES
   //var vjl_mensaje1 = vjl_campo + ':\nDebe ser una hora con formato HH:MM o HH:MM:SS';
   //var vjl_mensaje2 = vjl_campo + ':\nLa hora máxima es 23:59';
  /* 5 u 8 caracteres */
  if ((vjl_dato.length != 5) && (vjl_dato.length != 8)) { vjl_error++;}
  
  /* Separador de campos ":" */
  if (vjl_error == 0) {
	  vjl_sep=vjl_dato.indexOf(':',0);
	  if (vjl_sep == -1) { vjl_error++;}
  }

  /* HORA Y MINUTOS CORRECTOS */
  if (vjl_error==0) {
    vjl_horas=vjl_hora.substring(0,vjl_sep);
	vjl_minutos=vjl_hora.substring(vjl_sep+1,vjl_sep+3);
	if (vjl_dato.length == 8){
		vjl_sep=vjl_dato.indexOf(':',0);
		if (vjl_sep == -1) {
			 vjl_error++;
		}
		else {
			vjl_segundos=vjl_hora.substring(vjl_sep+1,vjl_sep+3);
		}
		if (fjl_Numerico(vjl_segundos) || fjl_Intervalo(vjl_segundos,0,59)){vjl_error++;}		
	}
	
	if (fjl_Numerico(vjl_horas) || fjl_Intervalo(vjl_horas,0,23)){vjl_error++;}
	if (fjl_Numerico(vjl_minutos) || fjl_Intervalo(vjl_minutos,0,59)){vjl_error++;}
	
	/*if (vjl_horas=='24' && vjl_minutos != '00')
	{
	    alert(vjl_mensaje2);
		vjl_error++;
	}*/
  }

  // RESULTADO DE LA VALIDACIÓN
  if (vjl_error == 0) {
	 return(0);
  }
  else {
	// alert(vjl_mensaje1);
	return(1);
  }

}

/******************************************************************************************/
/* Función     : fjl_ValidarFecha														  */
/* Descripción :  Función que garantiza que dato tiene un formato de fecha (dd-mm-yyyy o  */
/*				  dd/mm/yyyy). Si se cumple devuelve 0 y sino devuelve un codigo de error */
/* Entrada     : vjl_dato		 : Dato a comprobar									      */
/* Salida      : Devuelve 0 si la validación es corecta									  */
/*						  1 si la fecha es nula											  */
/*						  2 si el formato no es el correcto								  */
/*						  3 si el valor no es valido									  */
/******************************************************************************************/

function fjl_ValidarFecha(vjl_dato) {

	var vjl_formatofechag = 'DD/MM/YYYY';	
	//Guardamos las posiciones en las que deben encontrarse los
	//datos de la cadena de entrada.
	//var vjl_posdia = 0;
	var vjl_posdia = vjl_formatofechag.indexOf('DD',0);
	//var vjl_posmes = 3;
	var vjl_posmes = vjl_formatofechag.indexOf('MM',0);
	//var vjl_posano = 6;
	var vjl_posano = vjl_formatofechag.indexOf('YYYY',0);
		
	var vjl_dia = null;
	var vjl_mes = null;
	var vjl_anio = null;
	var vjl_error = 0;  // VARIABLE QUE ACUMULA ERRORES
	var vjl_fecha = vjl_dato.toString();
	var aux_error = false;
	 /* 10 CARACTERES DE LONGITUD */

	if(vjl_fecha.length != 10) {
		vjl_error++;
	}
	if (vjl_error == 0) 
	{
		// SEPARADOR DE CAMPOS "-" o "/"
		vjl_posespaciador = vjl_fecha.indexOf('-',0) + vjl_fecha.indexOf('/',0);		
		if (vjl_posespaciador == -2)
		 {
		    vjl_error++;
		 }
	}

	if (vjl_error == 0) {
	    // VALIDACIÓN DE DÍA, MES Y AÑO

	    vjl_dia = vjl_fecha.substring(vjl_posdia,vjl_posdia+2);
		vjl_mes = vjl_fecha.substring(vjl_posmes,vjl_posmes+2);
		vjl_anio = vjl_fecha.substring(vjl_posano,vjl_posano+4);

	    //vjl_dia = vjl_fecha.substring(0,vjl_posespaciador);
	    // VALIDAMOS QUE DÍA SEA NUMÉRICO Y ENTRE 1 Y 31
		if ((fjl_Numerico(vjl_dia) || fjl_Intervalo(vjl_dia,1,31))) 
		{aux_error = true;
		 vjl_error++;}

  }
  if (vjl_error == 0) {
		vjl_fecha = vjl_fecha.substring(vjl_posespaciador+1,vjl_fecha.length);
		vjl_posespaciador = vjl_fecha.indexOf('/',0);
		if (vjl_posespaciador == -1)
		 {
			vjl_error++;
		 }
  } 
  if (vjl_error == 0) {
		//vjl_mes = vjl_fecha.substring(0,vjl_posespaciador);

		// VALIDAMOS QUE MES SEA NUMÉRICO Y ENTRE 1 Y 12
		if (fjl_Numerico(vjl_mes) || fjl_Intervalo(vjl_mes,1,12)) 
		{
		aux_error = true; 
		vjl_error++; 
		}
		//vjl_anio = vjl_fecha.substring(vjl_posespaciador+1,vjl_fecha.length);
		// VALIDAMOS QUE ANIO SEA NUMERICO Y ENTRE 0001 Y 9999
		if (fjl_Numerico(vjl_anio) || fjl_Intervalo(vjl_anio,1,9999)) 
		{ 
			aux_error = true;
			vjl_error++; 
		}
  }
  
  if (vjl_error == 0) {
	// VALIDAMOS QUE EL ÚLTIMO DÍA DE MES SEA EL ADECUADO PARA CADA MES
	if (vjl_mes=='04' && vjl_dia=='31') vjl_error++;
	if (vjl_mes=='02' && vjl_dia> '29') vjl_error++;
	if (vjl_mes=='06' && vjl_dia=='31') vjl_error++;
	if (vjl_mes=='09' && vjl_dia=='31') vjl_error++;
	if (vjl_mes=='11' && vjl_dia=='31') vjl_error++;
	if (vjl_error != 0)
	{
		aux_error = true;
		//alert(vjl_mensajedia);
	}
  }
  
  if (vjl_error == 0 && parseInt(vjl_mes)==2) {
    // AÑO BISIESTO
	if ( !fjl_EsBisiesto(vjl_anio) && parseInt(vjl_dia)==29) vjl_error++;
	if (vjl_error != 0) 
	{
		aux_error = true;
		//alert(vjl_mensajedia);
	}
  } 
  
	// RESULTADO DE LA VALIDACIÓN
	if (vjl_error == 0) 
	{ 
		//return(vjl_ind);		
		return (0);
	}
	else
	{ //Si no se ha mostrado un mensaje de error se muestra el que corresponde
		if (aux_error == false)
		{
			if (vjl_fecha.length == 0)
			{
			     //alert(vjl_mensajevacio);			     
			     return (1); 
			}
			else
			{   
			     //alert(vjl_mensaje); 			     
			     return (2);
			}
		}
		else{			
			return (3);
		}
		//return(1);
		
   }
}

/******************************************************************************************/
/* Función     : fjl_CompararHoras														  */
/* Descripción :  Función que comprueba que hordes no sea mayor que horhas. Si se cumple  */
/*				  devuelve vjl_ind y sino presenta un mensaje de error y devuelve 1       */
/* Entrada     : vjl_hordes		 : Hora desde										      */
/*				 vjl_horhas		 : Hora hasta										      */
/*               vjl_campo1      : Nombre del campo hora desde                            */
/*               vjl_campo2      : Nombre del campo hora hasta                            */
/*               vjl_ind         : Resultado de las validaciones anteriores               */
/* Salida      : Devuelve vjl_ind si la validación es corecta, sino 1 y mensaje de error  */
/******************************************************************************************/
function fjl_CompararHoras(vjl_hordes,vjl_horhas,vjl_campo1,vjl_campo2,vjl_ind)
 {
   var vjl_mensaje = vjl_campo1 + ', ' + vjl_campo2 + ':\nEl primer valor debe ser menor que el segundo';
   if (vjl_hordes > vjl_horhas)
	{
	  alert (vjl_mensaje);
	  vjl_ind = 1;
	}
   else {vjl_ind = 0;}
   return vjl_ind;
 }

/******************************************************************************************/
/* Función     : fjl_HoraMayorQue						                                      */
/* Descripción : Función que garantiza que una hora válida(HH:MM) es la misma o posterior */
/*				 a la segunda  Devuelve true si asi es y si no da un mensaje de error y   */
/*				 devuelve false															  */
/* Entrada     : vjl_hora1		: Hora 1 (HH:MM)		                                  */
/*               vjl_lithora1	: Literal asociado a la hora 1                            */
/*               vjl_codhora1	: Codigo del campo hora 1 No se usa, a eliminar en futuro */
/*				 vjl_hora2		: Hora 2 (HH:MM)                                          */
/*               vjl_lithora2	: Literal asociado a la hora 2                            */
/*               vjl_codhora2	: Codigo del campo hora 2 No se usa, a eliminar en futuro */
/* Salida      : True si cumple, false y un mensaje si no                                 */
/******************************************************************************************/
function fjl_HoraMayorQue(vjl_hora1,vjl_lithora1,vjl_codhora1,vjl_hora2,vjl_lithora2,
			vjl_codhora2){
			 
	var vjl_jshora1=vjl_hora1.substr(0,2)+vjl_hora1.substr(3,2);
	var vjl_jshora2=vjl_hora2.substr(0,2)+vjl_hora2.substr(3,2);
	var vjl_mensaje = vjl_lithora2 + ', ' +  vjl_lithora1 + ':\nEl primer valor debe ser menor o igual que el segundo';
		
	if (vjl_jshora2 > vjl_jshora1)
	 {
		alert(vjl_mensaje);
		return(false);
	 }
	else {
		return(true);
	 }
}

/******************************************************************************************/
/* Función     : fjl_CompararFechas														  */
/* Descripción : Función que garantiza que fecha1 sea mayor que fecha2. Si se cumple	  */
/*				 devuelve ind y sino presenta un mensaje de error y devuelve 1			  */
/* Entrada     : vjl_fecha1		 : fecha 1 (formato ddmmyyyy)						      */
/*				 vjl_fecha2		 : fecha 2 (formato ddmmyyyy)						      */
/*               vjl_ind         : Resultado de las validaciones anteriores               */
/* Salida      : Devuelve vjl_ind si la validación es corecta, sino 1 y mensaje de error  */
/******************************************************************************************/
function fjl_ComparacionFechas(vjl_fecha1,vjl_fecha2,vjl_ind) {
  var vjl_jsfecha1=vjl_fecha1.substr(6,4)+vjl_fecha1.substr(3,2)+vjl_fecha1.substr(0,2);
  var vjl_jsfecha2=vjl_fecha2.substr(6,4)+vjl_fecha2.substr(3,2)+vjl_fecha2.substr(0,2);
  var vjl_mensaje = vjl_fecha2 + ', ' + vjl_fecha1 + ':\n"El primer valor debe ser menor que el segundo';
  if (vjl_jsfecha2 > vjl_jsfecha1) {alert(vjl_mensaje);return(1);}else{return(vjl_ind)};
}

/******************************************************************************************/
/* Función     : fjl_FecMayorQue														  */
/* Descripción : Función que valida que Fecha1 sea mayor que Fecha2. Si se cumple devuelve*/
/*				 true y sino presenta un mensaje de error y devuelve false				  */
/* Entrada     : vjl_fecha1		: Fecha 1 (dd-mm-yyyy)								      */
/*				 vjl_fecha2		: Fecha 2 (dd-mm-yyyy)								      */
/* Salida      : Devuelve true si la validación es corecta, sino false y mensaje de error */
/******************************************************************************************/
function fjl_FecMayorQue(vjl_fecha1,vjl_fecha2)
 {
	var vjl_jsfecha1=vjl_fecha1.substr(6,4)+vjl_fecha1.substr(3,2)+vjl_fecha1.substr(0,2);
	var vjl_jsfecha2=vjl_fecha2.substr(6,4)+vjl_fecha2.substr(3,2)+vjl_fecha2.substr(0,2);
	
	if (vjl_jsfecha2 >= vjl_jsfecha1)
	 {
	//	alert(vjl_mensaje);
		return false;
	 }
	else
		return true;
 }

/******************************************************************************************/
/* Función     : fjl_FecMayorIgualQue													  */
/* Descripción : Función que valida que Fecha1 sea mayor o igual que Fecha2. Si se cumple */
/*				 devuelve true y sino devuelve false									  */
/* Entrada     : vjl_fecha1		: Fecha 1 (dd-mm-yyyy)								      */
/*				 vjl_fecha2		: Fecha 2 (dd-mm-yyyy)								      */
/* Salida      : Devuelve true si la validación es corecta, sino false y mensaje de error */
/******************************************************************************************/
function fjl_FecMayorIgualQue(vjl_fecha1,vjl_fecha2)
 {
	var vjl_jsfecha1=vjl_fecha1.substr(6,4)+vjl_fecha1.substr(3,2)+vjl_fecha1.substr(0,2);
	var vjl_jsfecha2=vjl_fecha2.substr(6,4)+vjl_fecha2.substr(3,2)+vjl_fecha2.substr(0,2);
	//var vjl_mensaje = vjl_litfecha2 + ', ' +  vjl_litfecha1 + ':\nEl primer valor debe ser menor o igual que el segundo';

	if (vjl_jsfecha1 < vjl_jsfecha2)
	 {
		//alert(vjl_mensaje);
		return false;
	 }
	else
		return true;
 }

/******************************************************************************************/
/* Función     : fjl_FecMayorIgualQueFija												  */
/* Descripción : Función que valida que Fecha1 sea mayor o igual que una dada.Si se cumple*/
/*				 devuelve true y sino presenta un mensaje de error y devuelve false. Se   */
/*				 diferencia de la anterior en que la fecha de comparación no es un campo  */
/*				 rellenable															  	  */
/* Entrada     : vjl_fecha1		: Fecha 1 (dd-mm-yyyy)								      */
/*               vjl_litfecha1  : Literal fecha 1										  */
/*               vjl_codfecha1  : Codigo del campo	No se usa						      */
/*				 vjl_fecha2		: Fecha 2 (dd-mm-yyyy)								      */
/* Salida      : Devuelve true si la validación es corecta, sino false y mensaje de error */
/******************************************************************************************/
function fjl_FecMayorIgualQueFija(vjl_fecha1,vjl_litfecha1,vjl_codfecha1,vjl_fecha2) 
 {
	var vjl_jsfecha1=vjl_fecha1.substr(6,4)+vjl_fecha1.substr(3,2)+vjl_fecha1.substr(0,2);
	var vjl_jsfecha2=vjl_fecha2.substr(6,4)+vjl_fecha2.substr(3,2)+vjl_fecha2.substr(0,2);
	
	var vjl_mensaje = vjl_litfecha1 + ':\nNo puede ser anterior al día ' + vjl_fecha2;
	
	if (vjl_jsfecha1 < vjl_jsfecha2)
	 {
		alert(vjl_mensaje);
		return false;
	 }
	else
		return true;
 }

/******************************************************************************************/
/* Función     : fjl_FecMayorIgualQueHoy												  */
/* Descripción : Función que valida que Fecha1 sea mayor o igual que el dia en curso. Si  */
/*				 se cumple devuelve true y sino presenta un mensaje de error y devuelve   */
/*				 false. Se diferencia de la anterior en que la fecha de comparación es el */
/*				 dia de hoy														  	  */
/* Entrada     : vjl_fecha1		: Fecha 1 (dd-mm-yyyy)								      */
/*               vjl_litfecha1  : Literal fecha 1										  */
/* Salida      : Devuelve true si la validación es corecta, sino false y mensaje de error */
/******************************************************************************************/
function fjl_FecMayorIgualQueHoy(vjl_fecha1,vjl_litfecha1) 
 {
	var vjl_jsfecha1=vjl_fecha1.substr(6,4)+vjl_fecha1.substr(3,2)+vjl_fecha1.substr(0,2);
	
	var fecha    = new Date();
	var anio     = fecha.getYear();
	var mes      = parseInt(fecha.getMonth()+1);
	var dia	     = fecha.getDate();
	var vjl_mensaje = vjl_litfecha1 + ':\nNo puede ser anterior al día de hoy';
	
	if (mes < 10)
       mes = '0' + mes;
	if (dia < 10)
       dia = '0' + dia;
	var vjl_fechacomp = dia + "-" + mes + "-" + anio;
        
	if (vjl_jsfecha1 < vjl_fechacomp)
	 {
		alert(vjl_mensaje);
		return false;
	 }
	else
		return true;
 }

/******************************************************************************************/
/* Función     : fjl_EsBisiesto						                                      */
/* Descripción : Función que devuelve true si el año es bisiesto y sino devuelve false    */
/* Entrada     : vjl_anio		: año a comprobar (yyyy)		                          */
/* Salida      : True si es bisiesto si no, false		                                  */
/******************************************************************************************/
function fjl_EsBisiesto(vjl_anio){
	if (parseInt(vjl_anio)%100 == 0){
		if (parseInt(vjl_anio)%400 == 0){
		   return(true);
		   }
		else{
		   return(false);
		   }
		}	
	else {
		if (parseInt(vjl_anio)%4 == 0){
		   return(true);
		   }
		else{
		   return(false);
		   }
		}
}

/****************************************************************************************/
/* Función     : fjl_Validar															*/
/* Descripción :  Función generica que valida los campos de un formulario. Devuelve     */
/*				  true si este cumple los requisitos y false si no es asi.				*/
/*				  Para que funcione necesitamos una serie de campos hidden en los que   */
/*				  tenemos los nombres de los campos que hay que validar agrupados por   */
/*				  el tipo de validacion pertinente y separados por comas. En algunos    */
/*				  casos seran campos individuales y en otros tuplas. Si un campo		*/
/*				  requiere varias validaciones, se pondra en todos los hidden que sean  */
/*				  necesarios. Asi, tendremos:											*/
/*					CamposObligatorios	: Campos que deben estar rellenos.				*/
/*					CamposTexto		: Campos que solo pueden tener texto sin caracteres	*/
/*										prohibidos.										*/
/*					CamposNumericos	: Campos con numeros								*/
/*					CamposEnteros	: Campos con numeros enteros						*/
/*					CamposNaturales : Campos con numeros mayores que cero (pero pueden  */
/*										no ser enteros)									*/
/*					CamposMayorQue  : Tuplas de campos, en el que a debe ser mayor que b*/
/*					CamposMayorIgualQue	: Tuplas de campos, en el que a debe ser mayor	*/
/*											o igual que b								*/
/*					CamposFecha		: Campos de tipo fecha								*/
/*					CamposHora		: Campos de tipo hora								*/
/*					FecHoraMayQue	: Tuplas fecha/hora en las que la primera fecha/hora*/
/*										debe ser mayor que la segunda					*/
/*					FecHoraMayIgualQue	: Tuplas fecha/hora en las que la primera		*/
/*											fecha/hora debe ser mayor o igual que la	*/
/*											segunda										*/
/*					CamposSelectOb	: Campos select (como los ficheros multimedia) que  */
/*										deben estar rellenos.							*/		  
/*																						*/
/*					CamposMail	: Campos de tipo Mail									*/
/*																						*/		  
/*				 Además cada campo deberá llevar otro hidden asociado con los nombres   */
/*				 visibles de los campos. Estos campos se llamaran como el otro, pero con*/
/*				 "Nombres" al final (p.ej. CamposObligatoriosNombres)					*/
/*	Entrada    : NombreForm	: nombre del formulario que queremos validar				*/
/*				 Accion		: accion que realizaremos una vez validado el formulario    */
/* Salida      : Si es correcto, devuelve true y ejecuta la accion, sino, da un mensaje */
/*				  y devuelve false														*/
/****************************************************************************************/

function fjl_Validar(nombreForm, accion)
{

	var errores; //Acumulador de errores
	var mensaje; //Acumulador de mensajes de error
	var i,j; //contadores
	var campos; //array de campos
	var camposAux; //array de campos auxiliares
	var valorcampo;
	var valorcampoAct;
	var valorcampoActAux1;
	var valorcampoActAux2;
	var nombres;
	var nombresAux;
	var camponombres;
	var expBusqueda = /_/g
	
	var ObjTexto;
	var ObjSelect;
	
	errores = 0;
	mensaje = "Hay errores en el formulario: \n";
	
	//Comprobamos los campos obligatorios
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposObligatorios');
	if (ObjTexto != null){
		valorcampo = ObjTexto.value;
		eval ( ' camponombres = document.' + nombreForm + '.CamposObligatoriosNombres.value');	
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(','); 
			nombres = camponombres.split(',');
			for (i=0;i<campos.length;i++){			
				eval(" valorcampoAct = document." + nombreForm + "." + campos[i] + ".value ");			
				if (valorcampoAct.length == 0) {
					errores++;
					//mensaje = mensaje + ' El campo "' + nombres[i] + '" no puede ser vacio. \n';
					mensaje = mensaje + ' El campo "' + nombres[i] + '" no puede estar vacío. \n';
				}
			}
		}
	}
	
	//Comprobamos los campos de texto
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposTexto');
	if (ObjTexto != null){
		valorcampo = ObjTexto.value;
		eval ( ' camponombres = document.' + nombreForm + '.CamposTextoNombres.value');		
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(',');
			nombres = camponombres.split(','); 
			for (i=0;i<campos.length;i++){			
				eval(" valorcampoAct = document." + nombreForm + "." + campos[i] + ".value ");
				if (!(fjl_CaracterInvalido(valorcampoAct))) {
					errores++;
					mensaje = mensaje + ' El campo "' + nombres[i] + '" contiene caracteres prohibidos. \n';
				}
			}
		}
	}
	
	//Comprobamos los naturales
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposNaturales');
	if(ObjTexto != null){
		valorcampo = ObjTexto.value;	
		eval ( ' camponombres = document.' + nombreForm + '.CamposNaturalesNombres.value');
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(','); 
			nombres = camponombres.split(',');
			for (i=0;i<campos.length;i++){			
				eval(" valorcampoAct = document." + nombreForm + "." + campos[i] + ".value ");
				if (fjl_Numerico(valorcampoAct)==1) {
					errores++;
					mensaje = mensaje + ' El campo "' + nombres[i] + '" debe ser entero positivo. \n';
				}
			}
		}
	}
	
	//Comprobamos los select obligatorios	
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposSelectOb');
	if(ObjTexto != null){	
		valorcampo = ObjTexto.value
		eval ( ' camponombres = document.' + nombreForm + '.CamposSelectObNombres.value');
		if (valorcampo.length > 0){		
			//Hacemos un split por coma		
			campos = valorcampo.split(','); 
			nombres = camponombres.split(',');
			for (i=0;i<campos.length;i++){			
				eval(" ObjSelect = document." + nombreForm + "." + campos[i] + " ");						
				if (ObjSelect.length == 0) {				
					errores++;
					mensaje = mensaje + ' El campo "' + nombres[i] + '" debe tener al menos un valor. \n';
				}
				else {
					//if (ObjSelect.text == '') {
					if ((ObjSelect[ObjSelect.selectedIndex].value == '') || (ObjSelect.selectedIndex == -1) || (ObjSelect.text == '')) {					
						errores++;
						mensaje = mensaje + ' El campo "' + nombres[i] + '" debe tener al menos un valor. \n';
					}
				}
			}
		}
	}
	
	//Comprobamos los nombres LDAP
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposLDAP');
	if(ObjTexto != null){
		valorcampo = ObjTexto.value;
		eval ( ' camponombres = document.' + nombreForm + '.CamposLDAPNombres.value');	
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(',');
			nombres = camponombres.split(','); 
			for (i=0;i<campos.length;i++){			
				eval(" valorcampoAct = document." + nombreForm + "." + campos[i] + ".value ");
				if (!fjl_CaracterInvalidoLDAPuser(valorcampoAct)) {
					errores++;
					mensaje = mensaje + ' El campo "' + nombres[i] + '" contiene caracteres prohibidos. \n';
				}
			}
		}
	}
	
	//Comprobamos los nombres de ficheros
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposFicheros');
	if(ObjTexto != null){
		valorcampo = ObjTexto.value;
		eval ( ' camponombres = document.' + nombreForm + '.CamposFicherosNombres.value');	
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(','); 
			nombres = camponombres.split(','); 
			for (i=0;i<campos.length;i++){			
				eval(" valorcampoAct = document." + nombreForm + "." + campos[i] + ".value ");
				if (!fjl_CaracterInvalidoFicheros(valorcampoAct)) {
					errores++;
					mensaje = mensaje + ' El campo "' + nombres[i] + '" contiene caracteres prohibidos. \n';
				}
			}
		}
	}
	
	//Comprobamos las fechas
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposFecha');
	if(ObjTexto != null){
		valorcampo = ObjTexto.value;
		eval ( ' camponombres = document.' + nombreForm + '.CamposFechaNombres.value');		
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(','); 
			nombres = camponombres.split(','); 
			for (i=0;i<campos.length;i++){			
				eval(" valorcampoAct = document." + nombreForm + "." + campos[i] + ".value ");
				if ((valorcampoAct != '' ) && (fjl_ValidarFecha(valorcampoAct) != 0)){
					errores++;
					mensaje = mensaje + ' El campo "' + nombres[i] + '" debe tener formato dd/mm/aaaa. \n';
				}
			}
		}
	}
	
	//Comprobamos las fechas mayores iguales que
	eval ( ' ObjTexto = document.' + nombreForm + '.FechaMayIg');
	if(ObjTexto != null){
		valorcampo = ObjTexto.value;		
		eval ( ' camponombres = document.' + nombreForm + '.FechaMayIgNombres.value');			
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(',');
			nombres = camponombres.split(','); 
			for (i=0;i<campos.length;i++){					
				camposAux = campos[i].split(';'); 
				nombresAux = nombres[i].split(';'); 
				eval(" valorcampoActAux1 = document." + nombreForm + "." + camposAux[0] + ".value ");
				eval(" valorcampoActAux2 = document." + nombreForm + "." + camposAux[1] + ".value ");
				if ((valorcampoActAux1 != '' ) && (valorcampoActAux2 != '' ) && (!fjl_FecMayorIgualQue(valorcampoActAux1,valorcampoActAux2))) {
					errores++;
					mensaje = mensaje + ' El campo "' + nombresAux[0] + '" debe ser mayor o igual que el campo "' + nombresAux[1] +  '". \n';
				}
			}
		}
	}
	
	//Comprobamos los mails
	eval ( ' ObjTexto = document.' + nombreForm + '.CamposMail');
	if(ObjTexto != null){
		valorcampo = ObjTexto.value;
		eval ( ' camponombres = document.' + nombreForm + '.CamposMailNombres.value');	
		if (valorcampo.length > 0){
			//Hacemos un split por coma		
			campos = valorcampo.split(',');
			nombres = camponombres.split(','); 
			for (i=0;i<campos.length;i++){			
				eval(" valorcampoAct = document." + nombreForm + "." + campos[i] + ".value ");
				if (!fjl_ValidarEmail(valorcampoAct)) {
					errores++;
					mensaje = mensaje + ' El campo "' + nombres[i] + '" no es una dirección de correo válida. \n';
				}
			}
		}
	}
	
	//Si hay errores, sacamos el mensaje
	if (errores > 0){
		alert(mensaje);
		return false;	
	}
	else{
		eval(accion);
		return true;
	}	


}

/******************************************************************************************/
/* Función     : fjl_ValidarEmail					                                      */
/* Descripción : Función que devuelve true si la cadena pasada es un mail valido	      */
/* Entrada     : vjl_mail		: mail a comprobar				                          */
/* Salida      : True si es valido si no, false			                                  */
/******************************************************************************************/
function fjl_ValidarEmail(vjl_mail){
	var vjl_indice;
	
	vjl_indice = vjl_mail.indexOf('@');
	
	if ((vjl_indice > 0) && (vjl_indice + 1 < vjl_mail.lastIndexOf('.')) 
		&& (vjl_mail.length > vjl_mail.lastIndexOf('.') + 1)){		
		   return(true);		  
		}	
	else {		
		   return(false);		  
		}
}


