/*********************************************************************************************************
*                        lIBRERÍA DE FUNCIONES DE VALIDACIONES
*********************************************************************************************************/


/*********************************************************************************************************
* Función: ValidarLongitud
* Descripción:  Valida la longitud de una cadena.
* Parámetros:
*    control:  un control de formulario que tenga la propiedad value
*    min:      número que indica la longitud mínima permitida
*    max:      número que indica la longitud máxima permitida
* Resultado:
*    Si la longitud de la cadena control.value está entre min y max inclusive, retorna true.
*    Caso contrario retorna false y el control quedará seleccionado.
*********************************************************************************************************/
function ValidarLongitud(control,min,max) {
   var bresult
   cadena = control.value
   bresult = (cadena.length >= min) && (cadena.length <= max)
   if (!bresult) control.select()
   return bresult
}

function ValidarLongitud2(control,min,max,mensaje) {
   var bresult
   cadena = control.value
   bresult = (cadena.length >= min) && (cadena.length <= max)
   if (!bresult){
	   alert(mensaje);
	   control.select();
	   control.focus();
   }
   return bresult
}

/*********************************************************************************************************
* Función: ValidarNumero
* Descripción:  Valida que un control contenga un número entero válido y que éste esté en un rango
*               determinado. Valida inclusive números negativos.
* Parámetros:
*    control:  un control de formulario que tenga la propiedad value
*    min:      valor entero mínimo permitido
*    max:      valor entero máximo permitido
* Resultado:
*    Si control.value es un número entero válido y éste está en el rango especificado, entonces retorna
*    true. Caso contrario retorna false y el control quedará seleccionado.
*********************************************************************************************************/
function ValidarNumero(control,min,max) {
	var bresult = false
	RegExpNum = /^\s*(-?\d+)\s*$/
	if (RegExpNum.test(control.value)) {
		var aux = parseInt(RegExp.$1,10)
		bresult = (aux >= min) && (aux <= max)
	}
	if (!bresult) control.select()
	return bresult
}

function ValidarNumero2(control,min,max,mensaje) {
	var bresult = false
	RegExpNum = /^\s*(-?\d+)\s*$/
	if (RegExpNum.test(control.value)) {
		var aux = parseInt(RegExp.$1,10)
		bresult = (aux >= min) && (aux <= max)
	}
	if (!bresult){
		alert(mensaje);
   		control.select();
		control.focus();
	}
	return bresult
}

/*********************************************************************************************************
* Función: ValidarNumeroFloat
* Descripción:  Valida que un control contenga un número flotante válido y que éste esté en un rango
*               determinado. Valida inclusive números negativos.
* Parámetros:
*    control:  un control de formulario que tenga la propiedad value
*    min:      valor flotante mínimo permitido
*    max:      valor flotante máximo permitido
* Resultado:
*    Si control.value es un número en punto flotante válido y éste está en el rango especificado,
*    entonces retorna true. Caso contrario retorna false y el control quedará seleccionado.
* Observaciones:
*    Ejemplos de números flotantes válidos:
*    3
*    3.14
*    -3
*    -3.1416
*    1000.00
*    Números flotantes no válidos:
*    .19
*    -.18
*    3E8	 
*    1,000.00
*********************************************************************************************************/
function ValidarNumeroFloat(control,min,max) {
	var bresult
	var RegFloat = /^\s*(-?\d+\.?\d*)\s*$/
	if (RegFloat.test(control.value)) {
		var aux = parseFloat(RegExp.$1)
		bresult = (aux >= min) && (aux <= max)
	}
	if (bresult == false) control.select()
	return bresult;
}

function ValidarNumeroFloat2(control,min,max,mensaje) {
	var bresult
	var RegFloat = /^\s*(-?\d+\.?\d*)\s*$/
	if (RegFloat.test(control.value)) {
		var aux = parseFloat(RegExp.$1)
		bresult = (aux >= min) && (aux <= max)
	}
	if (!bresult){
		alert(mensaje);
   		control.select();
		control.focus();
	}
	return bresult;
}


/*********************************************************************************************************
* Función: ValidarEmail
* Descripción:  Valida direcciones de correo electrónico.
* Parámetros:
*    control:  un control de formulario que tenga la propiedad value
* Resultado:
*    Si control.value representa una dirección válida, retorna true.
*    Caso contrario retorna false y el control quedará seleccionado.
*********************************************************************************************************/
function ValidarEmail(control) {
	var bresult;
	var RegEmail = /^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-\.]+\.[a-zA-Z]+$/
    bresult = RegEmail.test(control.value)
	if (!bresult){
		//alert(mensaje);
		control.select()
		control.focus();
	}
	return bresult
}

function ValidarEmail2(control,mensaje) {
	var bresult;
	var RegEmail = /^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-\.]+\.[a-zA-Z]+$/
    bresult = RegEmail.test(control.value)
	if (!bresult){
		alert(mensaje);
		control.select()
		control.focus();
	}
	return bresult
}

/*********************************************************************************************************
* Función: ValidarAlfaNumerico
* Descripción:  Valida que la cadena contenga únicamente caracteres alfanuméricos.
* Parámetros:
*    control:  un control de formulario que tenga la propiedad value
* Resultado:
*    Si control.value representa una texto con sólo caracteres alfanuméricos, retorna true.
*    Caso contrario retorna false y el control quedará seleccionado.
* Observaciones:
*    Se consideran caracteres alfanuméricos los siguientes símbolos: A-Z, a-z, 0-9, y el underscore _
*********************************************************************************************************/
function ValidarAlfaNumerico(control) {
    var bresult
    var RegAN = /^[\w\s]+$/
    bresult = RegAN.test(control.value)
    if (!bresult) control.select()
    return bresult
}


/*********************************************************************************************************
* Función: ValidaFecha
* Descripción:  Valida que la cadena contenga una fecha en formato dd/mm/aaaa.
* Parámetros:
*    control:  un control de formulario que tenga la propiedad value
* Resultado:
*    Si control.value representa una fecha válida, retorna true.
*    Caso contrario retorna false y el control quedará seleccionado.
* Observaciones:
*    Esta función valida años bisiestos, soporta días y meses de uno y dos dígitos, y años de 4 dígitos.
*********************************************************************************************************/
function Validafecha(control) {
    var bresult
	//RegExpFecha = /^\s*(\d{1,2})\/(\d{1,2})\/(\d{4})\s*$/
	RegExpFecha = /^\s*(\d{4})\-(\d{1,2})\-(\d{1,2)\s*$/	
	/*var ano = parseInt(control.value.substring(0,control.value.indexOf("-",0)),10);
	var mes = parseInt(control.value.substring(control.value.indexOf("-",0)+1, control.value.indexOf("-",control.value.indexOf("-",0)+1 ) ),10);
	var dia = parseInt(control.value.substring(control.value.indexOf("-",control.value.indexOf("-",0)+1 )+1,control.value.length ),10);
	alert("El dia es: "+dia);
	alert("El mes es: "+mes);
	alert("El año es :"+ano);*/
	function esBisiesto(a) {
		return (((a%4==0)&&(a%100!=0))||(a%400==0))
	}
	if (control.value.indexOf("-",0)>-1) {
		var anno = parseInt(control.value.substring(0,control.value.indexOf("-",0)),10);
		var mes = parseInt(control.value.substring(control.value.indexOf("-",0)+1, control.value.indexOf("-",control.value.indexOf("-",0)+1 ) ),10);
		var dia = parseInt(control.value.substring(control.value.indexOf("-",control.value.indexOf("-",0)+1 )+1,control.value.length ),10);
		if ((dia>0) && (dia<=31) && (mes>0) && (mes<=12)) {
			switch (mes) {
				case  4 :
				case  6 :
				case  9 : 
				case 11 :
					bresult = (dia < 31)
					break
				case  2 :
					bresult = (dia < 29 || ((dia == 29) && esBisiesto(anno)))
					break
				default:
					bresult = true
			}   
		}
		else
			bresult = false
	}
	else
		bresult = false
    if (!bresult) control.select()
    return bresult
}

function Validafecha2(control) {
    var bresult
	RegExpFecha = /^\s*(\d{1,2})\/(\d{1,2})\/(\d{4})\s*$/
	//RegExpFecha = /^\s*(\d{4})\-(\d{1,2})\-(\d{1,2)\s*$/
	//alert("cadena fechas: "+RegExpFecha);
	/*var dia = parseInt(control.value.substring(0,control.value.indexOf("/",0)),10);
	var mes = parseInt(control.value.substring(control.value.indexOf("/",0)+1, control.value.indexOf("/",control.value.indexOf("/",0)+1 ) ),10);
	var ano = parseInt(control.value.substring(control.value.indexOf("/",control.value.indexOf("/",0)+1 )+1,control.value.length ),10);
	alert("El dia es: "+dia);
	alert("El mes es: "+mes);
	alert("El año es :"+ano);*/
	function esBisiesto(a) {
		return (((a%4==0)&&(a%100!=0))||(a%400==0))
	}
	if (control.value.indexOf("/",0)>-1) {
		var dia = parseInt(control.value.substring(0,control.value.indexOf("/",0)),10);
		var mes = parseInt(control.value.substring(control.value.indexOf("/",0)+1, control.value.indexOf("/",control.value.indexOf("/",0)+1 ) ),10);
		var anno = parseInt(control.value.substring(control.value.indexOf("/",control.value.indexOf("/",0)+1 )+1,control.value.length ),10);
		if ((dia>0) && (dia<=31) && (mes>0) && (mes<=12)) {
			switch (mes) {
				case  4 :
				case  6 :
				case  9 : 
				case 11 :
					bresult = (dia < 31)
					break
				case  2 :
					bresult = (dia < 29 || ((dia == 29) && esBisiesto(anno)))
					break
				default:
					bresult = true
			}   
		}
		else
			bresult = false
	}
	else
		bresult = false
    if (!bresult) control.select()
    return bresult
}

/*********************************************************************************************************
* Function: fecha_actual
* Descripción: Valida que la fecha que se le pasa sea mayor o igual a la fecha actual.
* Parámetros:
*     control:  un control de formulario que tenga la propiedad value
* Resultado:
*    Si la fecha ingresada es igual a la fecha actual devielve 0
*    Si la fecha ingresada es mayor a la fecha actual devielve 1
*    Si la fecha ingresada es menor a la fecha actual devielve -1
*********************************************************************************************************/
function fecha_actual(control){
	var hoy=new Date();//tengo la fecha actual
	var f_compara; //=new Date(fecha);
	//var strfecha=new Date(control.value);
	var anno = parseInt(control.value.substring(0,control.value.indexOf("-",0)),10);//10 es la base
	var mes = parseInt(control.value.substring(control.value.indexOf("-",0)+1, control.value.indexOf("-",control.value.indexOf("-",0)+1 ) ),10);
	var dia = parseInt(control.value.substring(control.value.indexOf("-",control.value.indexOf("-",0)+1 )+1,control.value.length ),10);
	//alert("La fecha de hoy es: "+hoy);
	/*alert("El año es: "+anno);
	alert("El valor de mes es: "+mes);
	alert("El año de hoy es: "+hoy.getYear());
	alert("El mes de hoy es: "+(hoy.getMonth()+1));
	alert("El dia de hoy es: "+(hoy.getDate()));*/
	var hoy1 = new Date(hoy.getYear(),hoy.getMonth(),(hoy.getDate()));
	var strfecha=new Date(anno,mes-1,dia);
	//alert("La fecha hoy1 es: "+hoy1);
	//alert("El valor de la fecha invertida es: "+strfecha);
	//f_compara=strfecha;
	/*alert("El valor de hoy1 es: "+hoy1);
	alert("El valor de strfecha es: "+strfecha);*/
	var bool;
	if( anno == hoy1.getYear() ){//comparamos primero los años
		if( mes == (hoy1.getMonth()+1) ){
			if( dia == hoy1.getDate() ){
				bool=0;
				return bool;
			}
			if( dia > hoy1.getDate() ){
				bool=1;
				return bool;
			}
			if( dia < hoy1.getDate() ){
				bool=-1;
				return bool;
			}			
		}
		if( mes > (hoy1.getMonth()+1) ){
			bool=1;
			return bool;
		}
		if( mes < (hoy1.getMonth()+1) ){
			bool=-1;
			return bool;
		}		
	}
	if( anno > hoy1.getYear() ){
		bool=1;
		return bool;
	}
	if( anno < hoy1.getYear() ){
		bool=-1;
		return bool;
	}
	
	
	//return bool;
	//return ( (strfcecha >= hoy1)? true : false );
	
}
/*********************************************************************************************************
* Function: compara_fechas
* Descripción: Compara que la fecha que se le pasa sea mayor a la actual.
* Parámetros:
*     fcontrol:  un control de formulario que tenga la propiedad value
* Resultado:
*    Si la fecha ingresada mayor o igual a la actual retorna true
*    Caso contrario retorna false
*********************************************************************************************************/
function compara_fechas(control,contro12){ //compara que la fecha de final sea mayor que la de iniico y que sean mayores a la fecha actual
var dFecIni, dFecFin, sDia, sMes, nDia, nMes, nAno,sFecha;
var sFecha1;//tengo la fecha actual	
	// Si se especificó ambas fechas, verificar que la inicial sea menor o igual a la final
	
		sFecha = control.value;
		nAno = parseInt(sFecha.substring(0,sFecha.indexOf("-")),10);
		nMes = parseInt(sFecha.substring(sFecha.indexOf("-")+1,sFecha.indexOf("-",sFecha.indexOf("-")+1)),10);
		nDia = parseInt(sFecha.substring(sFecha.indexOf("-",sFecha.indexOf("-")+1)+1,sFecha.length),10);
		dFecIni = new Date(nAno,nMes-1,nDia);
		sFecha = contro12.value;
		nAno = parseInt(sFecha.substring(0,sFecha.indexOf("-")),10);
		nMes = parseInt(sFecha.substring(sFecha.indexOf("-")+1,sFecha.indexOf("-",sFecha.indexOf("-")+1)),10);
		nDia = parseInt(sFecha.substring(sFecha.indexOf("-",sFecha.indexOf("-")+1)+1,sFecha.length),10);
		dFecFin = new Date(nAno,nMes-1,nDia);
		if (dFecFin >= dFecIni){
			//alert("La fecha de vencimniento debe ser mayor a la fecha registro");
			//oTxt.select();
			//frmDatos.f_vencimiento.select();					
			return true;
        }
		else return false;	
	
}
/*********************************************************************************************************
* Función: ValidaHora
* Descripción:  Valida que la cadena contenga una hora válida en formato de 24 horas o AM/PM.
* Parámetros:
*    control:  un control de formulario que tenga la propiedad value
* Resultado:
*    Si control.value representa una hora válida, retorna true.
*    Caso contrario retorna false y el control quedará seleccionado.
*********************************************************************************************************/
function ValidaHora(control) {    
  var bresult;
  RegExpHora24 = /^\s*(\d{1,2})\:(\d{2})\s*$/;
  RegExpHoraAMPM = /^\s*(\d{1,2})\:(\d{2})\s+[aApP][mM]\s*$/;
  if (RegExpHora24.test(control.value)) { // Formato de 24 horas
     var hh = RegExp.$1
     var mm = RegExp.$2
     bresult = (hh>=0) && (hh<=23) && (mm>=0) && (mm<=59)
   } 
  else if (RegExpHoraAMPM.test(control.value)) { // Formato AMPM
     var hh = RegExp.$1
     var mm = RegExp.$2
     bresult = (hh>=1) && (hh<=12) && (mm>=0) && (mm<=59)
   } 
  else
     bresult = false
  if (!bresult) control.select()
  return bresult
}
