/*-----------------------------------------------------------------*/  
/*            FUNCJS.PHP                                           */  
/*FECHA CREACION:   Agosto 3 de 2001                               */  
/*DESCRIPCION:                                                     */  
/*               LIBRERIA DE FUNCIONES DE JAVASCRIPT               */
/*               PARA VALIDACION                                   */ 
/*AUTORES:                                                         */  
/*              EDUARDO SUAREZ LOZANO  - Desarrollador Web         */  
/*-----------------------------------------------------------------*/ 

/*--------------------------------------------------------------------*
                        VARIABLES                  
*---------------------------------------------------------------------*/
//fechas, formato dd-mm-aaaa  hh24:mm
 var df_mes31dias_h = /^([1-3]0|[0-2][1-9]|31)\-(01|03|05|07|08|10|12)\-(1999|20[0-1][0-9]|2020)\ ([0-1][0-9]|2[0-3])\:([0-5][0-9])$/
 var df_mes30dias_h = /^([1-3]0|[0-2][1-9])\-(04|06|09|11)\-(1999|20[0-1][0-9]|2020)\ ([0-1][0-9]|2[0-3])\:([0-5][0-9])$/
 var df_mes28dias_h = /^([1-2]0|[0-2][1-8]|[0-1]9)\-(02)\-(1999|200[1-3]|200[5-7]|2009|201[0-1]|201[3-5]|201[7-9])\ ([0-1][0-9]|2[0-3])\:([0-5][0-9])$/
 var df_mes29dias_h = /^([1-2]0|[0-2][1-9])\-(02)\-(2000|2004|2008|2012|2016|2020)\ ([0-1][0-9]|2[0-3]\:[0-5][0-9])\ ([0-1][0-9]|2[0-3])\:([0-5][0-9])$/

//fechas, formato dd-mm-aaaa
 var df_mes31dias = /^([1-3]0|[0-2][1-9]|31)\-(01|03|05|07|08|10|12)\-(1999|20[0-1][0-9]|2020)$/
 var df_mes30dias = /^([1-3]0|[0-2][1-9])\-(04|06|09|11)\-(1999|20[0-1][0-9]|2020)$/
 var df_mes28dias = /^([1-2]0|[0-2][1-8]|[0-1]9)\-(02)\-(1999|200[1-3]|200[5-7]|2009|201[0-1]|201[3-5]|201[7-9])$/
 var df_mes29dias = /^([1-2]0|[0-2][1-9])\-(02)\-(2000|2004|2008|2012|2016|2020)$/

/*--------------------------------------------------------------------*
                       INICIO FUNCIONES  JAVASCRIPT
*---------------------------------------------------------------------*/

function is_empty(as_value) {
/*--------------------------------------------------------------------*
NOMBRE: IS_EMPTY 
DESCRIPCION:  Verifica si un campo esta vacio 
ENTRADA: valor del campo
SALIDA: 1 si esta vacio y 0 sino
*---------------------------------------------------------------------*/
		if (as_value == "")
			return 1;
		return(0);			
}

function is_date(as_value) {
/*--------------------------------------------------------------------*
NOMBRE: IS_DATE
DESCRIPCION:  Verifica si un campo tiene una fecha valida (dd-mm-yyyy)
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
		if (is_empty(as_value)) return 1;
		if (!(df_mes31dias.test(as_value) ||
		df_mes30dias.test(as_value) ||
      		df_mes29dias.test(as_value) ||
      		df_mes28dias.test(as_value)))
			return (0);
		return (1);			
}

function is_dateh(as_value) {
/*--------------------------------------------------------------------*
NOMBRE: IS_DATEH
DESCRIPCION:  Verifica si un campo tiene una fecha y horavalida 
              (dd-mm-yyyy hh24:mi)
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
		if (is_empty(as_value)) return 1;
		if (!(df_mes31dias_h.test(as_value) ||
		df_mes30dias_h.test(as_value) ||
      		df_mes29dias_h.test(as_value) ||
      		df_mes28dias_h.test(as_value)))
			return (0);
		return (1);			
}

function is_digit(ac_value){
/*--------------------------------------------------------------------*
NOMBRE: IS_DIGIT
DESCRIPCION:  Verifica si un campo es un digito
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
		if (ac_value < '0' || ac_value > '9')
			return (0);
		return (1);
}

function is_numeric(as_value){
/*--------------------------------------------------------------------*
NOMBRE: IS_NUMERIC
DESCRIPCION:  Verifica si un campo es un numero
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
		var I;
		if (is_empty(as_value)) return 1;
		for (I = 0; I <= as_value.length - 1; I++){
				if (!is_digit(as_value.charAt(I))){
					return (0);
				}
		}
		return (1);
}

function is_value(as_value){
/*--------------------------------------------------------------------*
NOMBRE: IS_VALUE
DESCRIPCION:  Verifica si un campo tiene un valor
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
		var I;
		if (is_empty(as_value)) return 1;
		for (I = 0; I <= as_value.length - 1; I++){
				if (!is_digit(as_value.charAt(I)) && as_value.charAt(I) != '.'){
					return (0);
				}
		}
		return (1);
}

function is_letter(ac_value){
/*--------------------------------------------------------------------*
NOMBRE: IS_LETTER
DESCRIPCION:  Verifica si un campo es una letra
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/		
		if (ac_value < 'A'  || ac_value > 'z')  {
				return (0);
		}
		return (1);
}

function is_alphanumeric(as_value){
/*--------------------------------------------------------------------*
NOMBRE: IS_ALPHANUMERIC
DESCRIPCION:  Verifica si un campo es un alfanumerico (numeros y letras)
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
	/*	var I;
		if (is_empty(as_value)) return 1;
		for (I = 0; I <= as_value.length - 1; I++){
				if (!is_digit(as_value.charAt(I)) && !is_letter(as_value.charAt(I)) && as_value.charAt(I) != '_' && as_value.charAt(I) != '-' && as_value.charAt(I) != 'ñ' && as_value.charAt(I) != 'Ñ' && as_value.charAt(I) != 'á' && as_value.charAt(I) != 'é' && as_value.charAt(I) != 'í' && as_value.charAt(I) != 'ó' && as_value.charAt(I) != 'ú' && as_value.charAt(I) != ' ' && as_value.charAt(I) != '$'){
					return (0);
				}
		}*/
		return (1);
}

function is_alphanumeric_noempty(as_value){
/*--------------------------------------------------------------------*
NOMBRE: IS_ALPHANUMERIC_NOEMPTY
DESCRIPCION:  Verifica si un campo es un alfanumerico (numeros y letras)
              y no acepta un campo vacio como caracter
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
		var I;
		if (is_empty(as_value)) return 0;
		for (I = 0; I <= as_value.length - 1; I++){
				if (!is_digit(as_value.charAt(I)) && !is_letter(as_value.charAt(I)) && as_value.charAt(I) != '_' && as_value.charAt(I) != '-'){
					return (0);
				}
		}
		return (1);
}
function is_email(as_value){
/*--------------------------------------------------------------------*
NOMBRE: IS_EMAIL
DESCRIPCION:  Verifica si un campo es un email valido
ENTRADA: valor del campo
SALIDA: 1 no es valida y 0 si es valida
*---------------------------------------------------------------------*/
		var I;
		if (is_empty(as_value)) return 1;
		for (I = 0; I < as_value.length ; I++){
				if (as_value.charAt(I) == '@'){
					if (I > 0 && (as_value.length - I - 1) > 0) 
						return (1);
				}
		}
		return (0);
}

function fjs_fal_fchctual(hora) {
/*--------------------------------------------------------------------*
NOMBRE: FJS_FAL_FCHCTUAL
DESCRIPCION:  Carga la fecha del equipo cliente actual con hora si la 
              variable de entrada es igual a 1 sino sin hora
ENTRADA: valor del campo hora
SALIDA: la fecha con hora o sin hora
*---------------------------------------------------------------------*/	
	var fecha_actual = new Date()   //captura la fecha actual del cliente	
	dia_mes = fecha_actual.getDate()  //extrae dia del mes
   	mes = fecha_actual.getMonth() + 1   //extrae el mes
   	anio = fecha_actual.getYear()       //extrae el año
   	var horas = fecha_actual.getHours()    //extrae la hora
	var minutos = fecha_actual.getMinutes()    //extrae los minutos
	var nombres_meses = new Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12")
	var ValorHora
	var Fecha
	var Fecha_Hora

    	//establece las horas
 	if (horas < 10)
        	 ValorHora = "0" + horas
   	 else
        	 ValorHora = "" + horas

 	//establece los minutos
 	if (minutos < 10)
        	 ValorHora += ":0" + minutos
    	else
        	 ValorHora += ":" + minutos

   	//pasa el año a 4 digitos
   	if (anio < 100)
      		anio = '19' + anio
   	else {
      		var cadena_anio = new String(anio)
      		anio = '20' + cadena_anio.substring(1,3)
   	}
   	
   	if (dia_mes < 10)
   		dia_mes = "0" + dia_mes
   	
   	if (mes < 10)
   		mes = "0" + mes	

     	Fecha = dia_mes + "-"
     	Fecha += nombres_meses[mes - 1] + "-"
     	Fecha += anio

        Fecha_Hora = Fecha + " "
        Fecha_Hora += ValorHora
	
	if(hora == 1)	
		return Fecha_Hora
	else
		return Fecha

}

function fjs_crr_crrar(msg,dir)
/*--------------------------------------------------------------------*
NOMBRE: FJS_CRR_CRRAR
DESCRIPCION:  Me ubica en la pagina que ingrese
ENTRADA: un mesaje para la confirmación y la direccion a la cual 
         quiero que abra
SALIDA: una ventana de confirmacion de la accion
*---------------------------------------------------------------------*/
  {
    if(confirm(msg))
    {
       window.location=dir;
    }
    else
    {
	return false;
    }
  }

function fjs_bckcnfrmdo(msg)
/*--------------------------------------------------------------------*
NOMBRE: FJS_BCKCNFRMDO
DESCRIPCION:  pregunta si desea regresar a la pagina anterior
ENTRADA: el mensaje
SALIDA: una ventana de confirmacion de la accion
*---------------------------------------------------------------------*/
  {
    if(confirm(msg))
    {
            history.back();
    }
      else   {
      	return false;
  	}
  }

function fjs_bckcnfrmdonum(msg,num)
/*--------------------------------------------------------------------*
NOMBRE: FJS_BCKCNFRMDONUM
DESCRIPCION: pregunta si desea regresar a la pagina n (num) anterior  
ENTRADA: el mensaje
SALIDA: una ventana de confirmacion de la accion
*---------------------------------------------------------------------*/
  {
    if(confirm(msg))
    {
            history.go(-num);
    }
      else   {
      	return false;
  	}
  }

function fjs_mvn_MstrrVntna(dir,name,ancho,alto,as_values,msg,nm_values)
/*--------------------------------------------------------------------*
NOMBRE: FJS_MVN_MSTRRVNTNA
DESCRIPCION:  hace el llamado de una nueva ventana y manda la variables 
ENTRADA: direccion destino, nombre de la ventana, ancho, alto, arreglo 
         de valores a pasar por get,un vextor mensaje de error que 
         corresponde a cada campo a mandar por get y arreglo de nombres 
         para asignar los valores
SALIDA: una ventana nueva
*---------------------------------------------------------------------*/
{
    var str = "scrollbars=yes,status=no,toolbar=no,directories=no,menubar=no,resizable=yes"
    str += ",width=" + ancho;
    str += ",height=" + alto;
    str += ",innerHeight=" + alto;
    str += ",innerWidth=" + ancho;

	var str1 = dir;

                   if(as_values != 0 && msg != 0 && nm_values != 0)
                   {
		str1 +=  "?"
		
		for ( i = 0;  i < as_values.length ; i ++)
		{
		   if(as_values[i] == "")
	    	  {
			alert(msg[i])
			return false;
		   }
		    else
		   {
		    	str1 +=   "&" + nm_values[i] ;
			str1 +=    "=" + as_values[i];
		    }
		}
	}
		
		var w1 = window.open (str1,name,  str)
		w1.focus();
		return false;
	
}

function lmpiar_cmpos(num_campos,ini_campos,tpo_ini_campos, forma)
{
/*--------------------------------------------------------------------*
NOMBRE: LMPIAR_CMPOS
DESCRIPCION:  Borra el contenido de todos los campos de una forma
              e inicializa sus valores 
ENTRADA: Numero de campos de la forma,arreglo de valores iniciales
         , arreglo del tipo de los campos que tienen inicializacion y
         el nombre de la forma.
*---------------------------------------------------------------------*/
	for(i=0; i<=num_campos; i++)
	{
		if (forma.elements[i].value != "" && forma.elements[i].type == "text")
			forma.elements[i].value = ""

	}    
    	 for(i=0;i<ini_campos.length; i++)
    	 {
		switch (tpo_ini_campos[i])
		{		
			case 'fechahora':
			{
    	     	          	                var fecha = fjs_fal_fchctual(1)
    	  	                		forma.elements[ini_campos[i]].value =   fecha
				break;
			}
			case 'fecha':
			{	
				var fecha = fjs_fal_fchctual(0)
    	  	                		forma.elements[ini_campos[i]].value =   fecha
				break;
			}
			case 'select':
			{
			                 forma.elements[ini_campos[i]].selectedIndex = 0
				break;
			}
		                 case 'cero':
			{
			                 forma.elements[ini_campos[i]].value = 0
				break;
			}
			default:		
				alert('Tipo de campo indefinido, consulte el proveedor')
				break;
		}
		
	}
	return false
}

function vldar_cmpos(pscion, nmbre, tpo_dto, rqrdo, forma)
{
/*--------------------------------------------------------------------*
NOMBRE: VLDAR_CMPOS
DESCRIPCION:  Realiza la validacion de los campos de la forma
ENTRADA: Arreglo de las posiciones o numeros de los campos a validar,
         arreglo de los nombre de los campos a validar, arreglo
         del tipo del campo y arreglo de cuales son requeridos y el
         nombre de la forma.
SALIDA: En caso de haber un error de validacion se visualiza una 
        ventana de error indicando el nombre del campo y la clase
        de error.
*---------------------------------------------------------------------*/
	for(i=0; i<pscion.length; i++)
	{    
		  if (forma.elements[pscion[i]].value == "" && rqrdo[i] == "s")
    	  	{
			 forma.elements[pscion[i]].focus()
	  		 alert("El campo " + nmbre[i] + " es obligatorio");
 	  		 return false
    	 	 }
		switch (tpo_dto[i])
		{		
			case 'numerico':     
			{ 	
				var error = is_numeric(forma.elements[pscion[i]].value)
        			if(error==0)
 		 		{
					forma.elements[pscion[i]].focus()
  					alert("El campo " + nmbre[i] + " debe ser un numero.")
  					return false
  				}
				break;
			}
			case 'email':     
			{ 	
				var error = is_email(forma.elements[pscion[i]].value)
        			if(error==0)
 		 		{
					forma.elements[pscion[i]].focus()
  					alert("El campo " + nmbre[i] + " debe ser un email valido (ej. nombre@server.com).")
  					return false
  				}
				break;
			}
			case 'fechahora':
			{
    	     	          	var error = is_dateh(forma.elements[pscion[i]].value)
        			if(error==0)
 	 			{
					forma.elements[pscion[i]].focus()
		  			alert("El campo " + nmbre[i] + " debe ser una fecha con hora (ej: dd-mm-aaaa hh24:mm).")
  					return false
			  	}
				break;
			}
			case 'fecha':
			{	
				var error = is_date(forma.elements[pscion[i]].value)
        			if(error==0)
 	 			{
					forma.elements[pscion[i]].focus()
		  			alert("El campo " + nmbre[i] + " debe ser una fecha (ej: dd-mm-aaaa).")
  					return false
			  	}
				break;
			}
		case 'select':
			{
				//captura el indice seleccionado en el campo de seleccion
           			var value_index = forma.elements[pscion[i]].selectedIndex
				//si el campo esta en -No selección- no verifica ningun campo de la fila
           			if(forma.elements[pscion[i]].options[value_index].value == "NULL")
				{
					forma.elements[pscion[i]].focus()
		  			alert("El campo " + nmbre[i] + " debe ser seleccionado.")
  					return false
				}
				break;
			}
		case 'alfanumerico':
		{
			var error = is_alphanumeric(forma.elements[pscion[i]].value)
        			if(error==0)
 	 			{
					forma.elements[pscion[i]].focus()
		  			alert("El campo " + nmbre[i] + " debe ser alfanumerico.")
  					return false
			  	}
				break;
		}
		case 'letra':
			{
			var error = is_letter(forma.elements[pscion[i]].value)
        			if(error==0)
 	 			{
					forma.elements[pscion[i]].focus()
		  			alert("El campo " + nmbre[i] + " debe ser en letras.")
  					return false
			  	}
				break;
		}
		
			default:		
				alert('Tipo de dato indefinido, consulte el proveedor')
				break;
		}
		
	}
	return true
}

/*--------------------------------------------------------------------*
                       FIN FUNCIONES JAVASCRIPT
*---------------------------------------------------------------------*/