/*****************************************************************************************
'Descripcion:
'		Recibe una cadena y la retorna sin espacios vacíos a la derecha, a la izquierda
'		ó a ámbos lados, según se especifique
'.........................................................................................
'Parametros:
'		varText: Texto al cual se le quieren eliminar los espacios en blanco
'		side: Constante que indica de qué lado se le quieren eliminar los espacios, así:
'			TRIM_LEFT --> Eliminar espacios a la izquierda
'			TRIM_RIGHT --> Eliminar espacios a la derecha
'			TRIM_BOTH --> Eliminar espacios a ambos lados
'.........................................................................................
'Validaciones:
*****************************************************************************************/
var TRIM_LEFT  = 0x0001;
var TRIM_RIGHT = 0x0002;
var TRIM_BOTH  = TRIM_LEFT | TRIM_RIGHT;

function strTrim( varText, side )
	{
	var i = 0;
	var j = varText.length - 1;

	if( side & TRIM_LEFT )
		{
		for( i = 0; i < varText.length; i++ )
			{
			if( varText.substring( i, i+1 ) != " " && varText.substring( i, i+1 ) != "\t")
				{
				break;
				}
			}
		}

	if( side & TRIM_RIGHT )
		{
		for( j = varText.length - 1; j >= 0; j-- )
			{
			if( varText.substring( j, j+1 ) != " " && varText.substring( j, j+1 ) != "\t")
				{
				break;
				}
			}
		}

	if( i <= j )
		return( varText.substring( i, (j+1) ) );
	else
		return("");
	}

/*****************************************************************************************
'Descripcion:
'		Funcion para validar que el texto ingresado en un campo texto,
'		corresponda a una dirección válida de correo (e-mail)
'.........................................................................................
'Parametros:
'		Campo:		Control con el valor a validar
'		Mensaje:	Cadena con el nombre descriptivo del control, usada para mostrar
'					un mensaje personalizado.
'.........................................................................................
'Validaciones:
'		- Los caracteres que contiene la cuenta de correo deben estar dentro de la siguiente lista
'			"0123456789abcdefghijlkmnopqrstuvwxyz@.-_"
'		- El primer y último caracter no pueden ser alguno de los caracteres "@.-_"
'		- Los caracteres anterior y posterior a la arroba (@), no pueden ser "@.-_"
'		- La cadena NO puede contener más de una arroba (@)
'		- La cadena debe contener al menos UNA arroba (@)
'		- La cadena NO puede contener espacios vacíos (" ")
'		- Después del último punto, debe haber AL MENOS 2 caracteres
*****************************************************************************************/
function ValidarEmail(Campo, Mensaje)
	{
	var perfect = true;

	with (Campo)
		{
		// Validar que los caracteres que contiene la cuenta de correo
		// esten dentro de los caracteres de la siguiente lista
		var car_validos = "0123456789abcdefghijlkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@.-_"
		var car_otros = "@.";

		for (var i=0; i < value.length; i++) {
			var ch = value.substring(i, i+1);
			if (car_validos.indexOf(ch) == -1) perfect = false;
		}

		apos = value.indexOf("@");
		lastpos = value.length-1;

		// Validar primer y ultimo caracter
		var car1 = value.substring(0, 1);
		var car2 = value.substring(lastpos, lastpos+1);
		if ((car_otros.indexOf(car1) != -1) || (car_otros.indexOf(car2) != -1)) perfect = false;

		// Validar anterior y siguiente caracter despues de "@"
		car1 = value.substring(apos-1, apos);
		car2= value.substring(apos+1, apos+2);
		if ((car_otros.indexOf(car1) != -1) || (car_otros.indexOf(car2) != -1)) perfect = false;

		// Buscar si existe otro simbolo "@" en el campo
		var subcadena = value.substring(apos + 1, 100);
		a2pos = subcadena.indexOf("@");
		spacepos = value.indexOf(" ");
		dotpos = value.lastIndexOf(".");

		//if (apos < 1 || a2pos != -1 || dotpos - apos < 2 || lastpos - dotpos > 3 || lastpos - dotpos < 2 || spacepos != -1) {
		if (apos < 1 || a2pos != -1 || lastpos - dotpos < 2 || spacepos != -1) perfect = false;
		}

	if (!perfect) 
		{
		alert('\nEl valor de ' + Mensaje + ' (E-Mail) es inválido.\n\nPor favor corrija la información.');
		Campo.focus();
		return false;
		}

	return true;

	}
	
/*****************************************************************************************
'Descripcion:
'		Validar que de un conjunto de Radio Buttons que están TODOS bajo el mismo name
'		se escoja al menos uno de ellos
'.........................................................................................
'Parametros:
'		- Nombre bajo el cual están agrupados los checkboxes, enviarlo como una cadena,
'			es decir, entre comillas dobles ""
'		- Nombre del dato o control que se está validando para personalizar el mensaje de error
'.........................................................................................
'Validaciones: 
*****************************************************************************************/
function Validar_Radio(par_nombre_control,par_nom_dato)
	{
	var_band = 0
	eval("var_nro_obj = " + par_nombre_control + ".length;");
	if (var_nro_obj > 0)
		{
		for (g=0; g<var_nro_obj; g++)
			{
			if (eval(par_nombre_control + "[" + g + "].checked"))
				{
				var_band = 1;
				}
			}
		}
	else
		{
		if (eval(par_nombre_control + ".checked"))
			{
			var_band = 1;
			}
		}
			
	if (var_band == 0)
		{
		alert("Debe seleccionar " + par_nom_dato + " \n\nPor favor suministra la información");
		return false;
		}
	return true;
	}

/*****************************************************************************************
'Fecha : Octubre 12/2000
'.........................................................................................
'Descripcion:
'		Validar que de un conjunto de checkboxes que están TODOS bajo el mismo name
'		se escoja al menos uno de ellos
'.........................................................................................
'Parametros:
'		- Nombre bajo el cual están agrupados los checkboxes
'		- Nombre del dato o control que se está validando para personalizar el mensaje de error
'.........................................................................................
'Validaciones: 
*****************************************************************************************/
function Validar_Checkboxes(par_nombre_control,par_nom_dato)
	{
	var_band = 0
	eval("var_nro_obj = " + par_nombre_control + ".length;");
	if (var_nro_obj > 0)
		{
		for (g=0; g<var_nro_obj; g++)
			{
			if (eval(par_nombre_control + "[" + g + "].checked"))
				{
				var_band = 1;
				}
			}
		}
	else
		{
		if (eval(par_nombre_control + ".checked"))
			{
			var_band = 1;
			}
		}
			
	if (var_band == 0)
		{
		alert("Debe seleccionar al menos un " + par_nom_dato + " \n\nPor favor suministre la información");
		return false;
		}
	return true;
	}

/*****************************************************************************************
'Fecha : Febrero 15/2000
'.........................................................................................
'Descripcion:
'		Valida una fecha que viene descompuesta en Año, Mes y Dia
'		Retorna "true" ó "false" según sea el caso
'.........................................................................................
'Parametros:
'		Todos los parámetros son convertidos a enteros, dentro de la función, antes de 
'		proceder a validarlos
'		Anno: Año a validar 
'		Mes: Mes a validar 
'		Dia: Dia a validar 
'		Dato: Nombre del Dato que se está validando, para personalizar los mensajes
'.........................................................................................
'Validaciones:
'		Valida fechas de años bisiestos (de Febrero) y, que el dia sea valido dentro del
'		mes elegido
*****************************************************************************************/
function ValidarFecha(Anno, Mes, Dia, Dato) 
	{

	var intAnno = parseInt(Anno);
	var intMes = parseInt(Mes);
	var intDia = parseInt(Dia);

	// Validar que los valores no sean igual a cero
	if ((Anno == 0) || (Mes == 0) || (Dia == 0)) 
		{
		alert('Debe elegir los valores para el día, el mes y el año de ' + Dato);
		return false;
		}
	// Validar que, en un año NO bisiesto, el número de días del mes de Febrero no sea mayor que 28
	if (((intAnno % 4) != 0) && (intMes == 2) && (intDia > 28)) 
		{
		alert('El mes de Febrero no puede contener más de 28 días.\n\nPor favor, corrija la información de ' + Dato);
		return false;
		}

	// Validar que, en un año bisiesto, el número de días del mes de Febrero no sea mayor que 29
	if (((intAnno % 4) == 0) && (intMes == 2) && (intDia > 29)) 
		{
		alert('El mes de Febrero, para ese año, no puede contener más de 29 días.\n\n Por favor, corrija la información de ' + Dato);
		return false;
		}

	// Validar que el dia sea válido para el mes elegido, no mayor que 30
	if ( ((intMes == 4) || (intMes == 6) || (intMes == 9) || (intMes == 11)) && (intDia > 30) ) 
		{
		alert('El mes seleccionado sólo contiene 30 días.\n\nPor favor, corrija la información de ' + Dato);
		return false;
		}
	return cambiarDia(Mes, Dia, Anno);
	}

/*****************************************************************************************
'Fecha : Febrero 15/2000
'.........................................................................................
'Descripcion:
'		Valida una fecha que viene descompuesta en Año, Mes y Dia
'		Retorna "true" ó "false" según sea el caso
'.........................................................................................
'Parametros:
'		Todos los parámetros son convertidos a enteros, dentro de la función, antes de 
'		proceder a validarlos
'		Anno: Año a validar 
'		Mes: Mes a validar 
'		Dia: Dia a validar 
'		Dato: Nombre del Dato que se está validando, para personalizar los mensajes
'.........................................................................................
'Validaciones:
'		Valida fechas de años bisiestos (de Febrero) y, que el dia sea valido dentro del
'		mes elegido
*****************************************************************************************/
function ValidarFecha2(Anno, Mes, Dia, Dato) 
	{

	var intAnno = parseInt(Anno.options[anio.selectedIndex].value);
	var intMes = parseInt(Mes.options[mes.selectedIndex].value);
	var intDia = parseInt(Dia.options[dia.selectedIndex].value);

	// Validar que los valores no sean igual a cero
	if ((Anno == 0) || (Mes == 0) || (Dia == 0)) 
		{
		alert('Debe elegir los valores para el día, el mes y el año de ' + Dato);
		return false;
		}
	// Validar que, en un año NO bisiesto, el número de días del mes de Febrero no sea mayor que 28
	if (((intAnno % 4) != 0) && (intMes == 2) && (intDia > 28)) 
		{
		alert('El mes de Febrero no puede contener más de 28 días.\n\nPor favor, corrija la información de ' + Dato);
		return false;
		}

	// Validar que, en un año bisiesto, el número de días del mes de Febrero no sea mayor que 29
	if (((intAnno % 4) == 0) && (intMes == 2) && (intDia > 29)) 
		{
		alert('El mes de Febrero, para ese año, no puede contener más de 29 días.\n\n Por favor, corrija la información de ' + Dato);
		return false;
		}

	// Validar que el dia sea válido para el mes elegido, no mayor que 30
	if ( ((intMes == 4) || (intMes == 6) || (intMes == 9) || (intMes == 11)) && (intDia > 30) ) 
		{
		alert('El mes seleccionado sólo contiene 30 días.\n\nPor favor, corrija la información de ' + Dato);
		return false;
		}
	return cambiarDia(Mes, Dia, Anno);
	}

/*****************************************************************************************
'Fecha : Febrero 15/2000
'.........................................................................................
'Descripcion:
'		Valida una fecha que viene descompuesta en Año, Mes y Dia
'		Retorna "true" ó "false" según sea el caso
'.........................................................................................
'Parametros:
'		Todos los parámetros son convertidos a enteros, dentro de la función, antes de 
'		proceder a validarlos
'		Anno: Año a validar 
'		Mes: Mes a validar 
'		Dia: Dia a validar 
'		Dato: Nombre del Dato que se está validando, para personalizar los mensajes
'.........................................................................................
'Validaciones:
'		Valida fechas de años bisiestos (de Febrero) y, que el dia sea valido dentro del
'		mes elegido
*****************************************************************************************/
function ValidarFecha1(Anno, Mes, Dia, Dato) 
	{

	var intAnno = parseInt(Anno);
	var intMes = parseInt(Mes);
	var intDia = parseInt(Dia);

	// Validar que los valores no sean igual a cero
	if ((Anno == 0) || (Mes == 0) || (Dia == 0)) 
		{
		alert('Debe elegir los valores para el día, el mes y el año de ' + Dato);
		return false;
		}
	// Validar que, en un año NO bisiesto, el número de días del mes de Febrero no sea mayor que 28
	if (((intAnno % 4) != 0) && (intMes == 2) && (intDia > 28)) 
		{
		alert('El mes de Febrero no puede contener más de 28 días.\n\nPor favor, corrija la información de ' + Dato);
		return false;
		}

	// Validar que, en un año bisiesto, el número de días del mes de Febrero no sea mayor que 29
	if (((intAnno % 4) == 0) && (intMes == 2) && (intDia > 29)) 
		{
		alert('El mes de Febrero, para ese año, no puede contener más de 29 días.\n\n Por favor, corrija la información de ' + Dato);
		return false;
		}

	// Validar que el dia sea válido para el mes elegido, no mayor que 30
	if ( ((intMes == 4) || (intMes == 6) || (intMes == 9) || (intMes == 11)) && (intDia > 30) ) 
		{
		alert('El mes seleccionado sólo contiene 30 días.\n\nPor favor, corrija la información de ' + Dato);
		return false;
		}
	return true;
	}
		
	
function cambiarDia(mes, dia, anio){

   var year=anio.options[anio.selectedIndex].value;

   var month=mes.options[mes.selectedIndex].value;
   
   var day=dia.options[dia.selectedIndex].value;

   month=parseInt(month,10);

   dia.options[0].selected = true;

   if (year == -1) {
		alert("Antes de escoger el mes, debe haber seleccionado el año");
		mes.options[0].selected = true;
		dia.options[0].selected = true;
		return false;
   }

   if(month!=2&&month!=4&&month!=6&&month!=9&&month!=11){

        if(dia.options.length==29){

          dia.options[29]=new Option("29", "29");

          dia.options[30]=new Option("30", "30");

          dia.options[31]=new Option("31", "31");

        }

        else if(dia.options.length==30){

           dia.options[30]=new Option("30", "30");

           dia.options[31]=new Option("31", "31");

        }

        else if(dia.options.length==31){

           dia.options[31]=new Option("31", "31");

        }

   }

   if(month==4||month==6||month==9||month==11){

       if(dia.options.length==32){

            dia.options[31]=null;

       }

       else if(dia.options.length==29){

           dia.options[29]=new Option("29", "29");

           dia.options[30]=new Option("30", "30");

       }

      else if(dia.options.length==30){

           dia.options[30]=new Option("30", "30");

       }

   }

   if(month==2){

       if(diasenfebrero(year)==29){

          if (dia.options.length==29)

          {

              dia.options[29]=new Option("29", "29");

          }

         dia.options[31]=null;

         dia.options[30]=null;

        }

       else{

          dia.options[31]=null;

          dia.options[30]=null;

          dia.options[29]=null;

       }

   }

}

function diasenfebrero (year)

{   // February has 29 days in any year evenly divisible by four,

    // EXCEPT for centurial years which are not also divisible by 400.

    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 ==0) ) ) ? 29 : 28 );

}

/*****************************************************************************************
'Fecha : Mayo 28/2001
'.........................................................................................
'Descripcion:
'		Verifica que una cadena contenga únicamente caracteres numéricos.
'		Retorna "true" ó "false" según sea el caso
'.........................................................................................
'Parametros:
'		- str : Cadena que se quiere evaluar
'.........................................................................................
'Validaciones: 
'		- Ninguno de los caracteres que componen la cadena debe ser diferente de los
'		  caracteres de la lista "0123456789"
*****************************************************************************************/
function isNumeric(str)
	{
	for (var i=0; i < str.length; i++) 
		{
		var ch = str.substring(i, i+1);
		if(ch < "0" || ch > "9") 
			{
			return false;
			}
		}

		return true;
	}

/*****************************************************************************************
 Fecha de Creación : Septiembre 24/2001
.........................................................................................
 Autor : Fernando Robles
.........................................................................................
 Propósito : Marcar como Checked, una lista de Checkboxes que se encuentran todos 
				bajo el mismo nombre
.........................................................................................
 Entradas : - par_control : Nombre del control bajo el cual se encuentra la lista de
							Checkboxes
.........................................................................................
 Salidas :
.........................................................................................
 Consideraciones: 
*****************************************************************************************/
function Pro_Seleccionar(par_control)
	{
	var_band = 0
	
	eval("int_nro_obj = " + par_control + ".length;");
	
	if (int_nro_obj > 0)
		{
		for (g=0; g<int_nro_obj; g++)
			{
			eval(par_control + "[" + g + "].checked = 1")
			}
		}
	else
		{
		eval(par_control  + ".checked = 1")
		}
	}

/*****************************************************************************************
 Fecha de Creación : Dic 15/2001
.........................................................................................
 Autor : Fernando Robles
.........................................................................................
 Propósito : Comparar dos fechas en formato (aaaa, mm, dd). 
				Retorna TRUE si la primera fecha es menor o igual que la segunda fecha
				de lo contrario, retorna FALSE
.........................................................................................
 Entradas : 
'		Todos los parámetros son convertidos a enteros, dentro de la función, antes de 
'		proceder a validarlos
'		-----------
'		AnnoDesde: Año Desde a validar
'		MesDesde: Mes Desde a validar
'		DiaDesde: Dia Desde a validar
'		strCampoInferior: Cadena del campo inferior para mostrar en los mensajes
'		-----------
'		AnnoHasta: Año Hasta a validar
'		MesHasta: Mes Hasta a validar
'		DiaHasta: Dia Hasta a validar
'		strCampoSuperior: Cadena del campo superior para mostrar en los mensajes
.........................................................................................
 Salidas :
.........................................................................................
 Consideraciones: 
	- La función asume que las fechas que se le pasan por parámetros, son válidas
*****************************************************************************************/
function CompararFechas(AnnoInferior, MesInferior, DiaInferior, AnnoSuperior, MesSuperior, DiaSuperior, strCampoInferior, strCampoSuperior) {

	var mensaje = 'La fecha ' + strCampoInferior + ' debe ser menor o igual que la fecha ' + strCampoSuperior + '\n\n Por favor corrija la información.';
	// --------------
	var intAnnoInferior = parseInt(AnnoInferior);
	var intMesInferior = parseInt(MesInferior);
	var intDiaInferior = parseInt(DiaInferior);
	// --------------
	var intAnnoSuperior = parseInt(AnnoSuperior);
	var intMesSuperior = parseInt(MesSuperior);
	var intDiaSuperior = parseInt(DiaSuperior);

	var dteFechaInferior = new Date(parseInt(AnnoInferior), parseInt(MesInferior) - 1, parseInt(DiaInferior))
	var dteFechaSuperior = new Date(parseInt(AnnoSuperior), parseInt(MesSuperior) - 1, parseInt(DiaSuperior))

	// Restar la fecha inferior de la superior
	dif_dias = dteFechaSuperior - dteFechaInferior
	if (dif_dias < 0) {
		alert(mensaje);
		return false;
	}

	return true;
}
