/*
*	validaciones.js
*
*	Funciones para limitar los valores aceptados por cuadros de texto en formularios web
*/

/*
*	Determina si el caracter pasado como parámetro es un digito
*/
function esDigito( caracter )
{
	return "0123456789".indexOf( caracter )!= -1;
}
//----------------------------------------------------------------------------------------

/*
*	Determina si el caracter pasado como parámetro es una letra
*/
function esLetra(caracter)
{
	if( caracter>="A" && caracter<="z") 	return true;
	
	if( "áéíóúÁÉÍÓÚ".indexOf( caracter )!= -1 )	return true;
		
	return false;
}
//----------------------------------------------------------------------------------------

/*
*	Listen
*		Agrega un manejador de eventos
*	
*	evento: 	nombre del evento a capturar
*	elem:		componente del formulario web que genera el evento
*	funcion:	función a llamar cuando se genere el evento
*/
function listen(evento, elem, funcion) 
{
    if ( elem.addEventListener )  // W3C DOM Mozilla
	 {
        elem.addEventListener( evento, funcion, false )
	 }
    else if ( elem.attachEvent ) // IE DOM Internet Explorer
	 {
     	var r = elem.attachEvent( "on"+evento, funcion );
		return r;
    }
    else
	 {
	 	throw 'No es posible añadir evento';
	 }
}
//----------------------------------------------------------------------------------------

/*
*	Permite únicamente introducir digitos en un cuadro de texto
*	uso:	<input type="text" onkeypress = "return valida_entero(event, this);" >
*/
function valida_entero(e, componente)
{

	//si existe event.keyCode estamos en Explorer
	if(window.event)
	{
		codigo = e.keyCode;
	}
	else	//estamos en mozilla
	{	
		if(e.keyCode==0)
		{
			codigo = e.which;
		}
		else	//es un codigo especial y hay que dejarlo pasar
			return true;
	}
	if(codigo==8 || codigo==0) return true;
	if ( codigo >= 48 && codigo <= 57 )	
		return true;
	else
		return false;
}

function validaEntero(e, componente)
{
	return valida_entero(e, componente);
}
//----------------------------------------------------------------------------------------

/*
*	Permite únicamente introducir digitos y el punto en un cuadro de texto
*	uso:	<input type="text" onkeypress = "return valida_decimal(event, this);" >
*/
function valida_decimal(e, text)
{
	//si existe event.keyCode estamos en Explorer
	if(window.event)
	{
		codigo = e.keyCode;
	}
	else	//estamos en mozilla
	{	
		if(e.keyCode==0)
		{
			codigo = e.which;
		}
		else	//es un codigo especial y hay que dejarlo pasar
			return true;
	}
	
	if(codigo==8 || codigo==0) return true;
	
	caracter = String.fromCharCode( codigo );
	if ( esDigito( caracter ) )
	{
		return true;
	}
	if ( caracter == "." )
	{
		//si ya hay un punto cancelarlo
		if( text.value.indexOf('.')!=-1 )
		{
			return false;
		}
		return true;
	}
	else
		return false;
}

function validaDecimal(e, text)
{
		return	valida_decimal(e, text);
}
//----------------------------------------------------------------------------------------


/*
*	Permite únicamente introducir letras y espacios en un cuadro de texto
*	uso:	<input type="text" onkeypress = "return valida_nombre(event, this);" >
*/
function valida_nombre(e, text)
{
	//si existe event.keyCode estamos en Explorer
	if(window.event)
	{
		codigo = e.keyCode;
	}
	else	//estamos en mozilla
	{	
		if(e.keyCode==0)
		{
			codigo = e.which;
		}
		else	//es un codigo especial y hay que dejarlo pasar
			return true;
	}
	if(codigo==8 || codigo==0) return true;
	
	caracter = String.fromCharCode( codigo );

	if ( esLetra( caracter) )
	{
		return true;
	}
	if ( caracter == " " )
		return true;
	return false;
}
//----------------------------------------------------------------------------------------

/*
*	Valida la introducción de caracteres válidos para el nombre de usuario
*/
function valida_usuario(e, text)
{
	//si existe event.keyCode estamos en Explorer
	if(window.event)
	{
		codigo = e.keyCode;
	}
	else	//estamos en mozilla
	{	
		if(e.keyCode==0)
		{
			codigo = e.which;
		}
		else	//es un codigo especial y hay que dejarlo pasar
			return true;
	}
	if( codigo==8 || codigo==0) return true;
	
	caracter = String.fromCharCode( codigo );

	if ( esLetra( caracter) || esDigito( caracter ) )
	{
		return true;
	}
	if ( " @.,".indexOf(caracter) != -1 )
		return true;
	return false;
}
//----------------------------------------------------------------------------------------


/*
*	Permite únicamente introducir caracteres válidos para una direcciónde correo en un 
*	cuadro de texto
*	uso:	<input type="text" onkeypress = "return valida_correo(event, this);" >
*/
function valida_correo(e, text)
{
	//si existe event.keyCode estamos en Explorer
	if ( window.event )
	{
		codigo = e.keyCode;
	}
	else	//estamos en mozilla
	{	
		if ( e.keyCode==0 )
		{
			codigo = e.which;
		}
		else	//es un codigo especial y hay que dejarlo pasar
			return true;
	}
	if( codigo==8 || codigo==0) return true;
	
	caracter = String.fromCharCode( codigo );

	if ( esLetra( caracter) || esDigito( caracter ) )
	{
		return true;
	}
	if ( "@._-".indexOf(caracter) != -1 )
		return true;
	return false;
}



/*
*	valida que los datos tengan valores no nulos, si se encuentra uno nulo 
*	se llama a una función para tratar el error, se enfoca el componente vacio y se
*	devuelve false.
*	Componetes: array de componentes a validar
*/
function validar_datos_completos( componentes )
{
	for ( i=0; i < componentes.length; i++ )
	{
		if ( componentes[i].value.length ==0 )
		{
//			alert("Se encontro un elemento vacio");
			mostrar_error();
			componentes[i].focus();
			return false;
		}
	}
//	alert("Todos los datos estan completos");
	return true;
}
//----------------------------------------------------------------------------------------

/*
*	Valida que todos los cuadros de texto del formulario ID_FORMULARIO contengan información
*	si se encuentra uno nulo se llama a una función para tratar el error, se enfoca el 
*	componente vacio y se devuelve false.
*/
function valida_formulario_lleno( id_formulario )
{
//	alert( 'Validando formulario' );
	var formulario = document.getElementById( id_formulario );
	for ( i=0; i<formulario.length; i++ )
	{
		var componente = formulario.elements[i];
		if( componente.type=='text' || componente.type=='textarea')
		{
			if( componente.value.length == 0 )
			{
				mostrar_error();
				componente.focus();
				return false;
			}
		}
	}	
	
	return true;
}
//----------------------------------------------------------------------------------------


/*
* valida que se introdusca un número de calificación NACE válido
*/
function valida_calificacion_NACE( e, componente )
{
	if(window.event)
	{
		codigo = e.keyCode;
	}
	else	//estamos en mozilla
	{	
		if(e.keyCode==0)
		{
			codigo = e.which;
		}
		else	//es un codigo especial y hay que dejarlo pasar
			return true;
	}
	
	if(codigo==8 || codigo==0) return true;
	
	caracter = String.fromCharCode( codigo );
	return "1234".indexOf( caracter )!= -1;
}

/*
* valida que se introdusca un número de calificación NACE válido
*/
function validarNivelDeCompetencia( e, componente )
{
	if(window.event)
	{
		codigo = e.keyCode;
	}
	else	//estamos en mozilla
	{
		if(e.keyCode==0)
		{
			codigo = e.which;
		}
		else	//es un codigo especial y hay que dejarlo pasar
			return true;
	}

	if(codigo==8 || codigo==0) return true;

	caracter = String.fromCharCode( codigo );
	return "01234".indexOf( caracter )!= -1;
}

function esFechaValida( input )
{
		values = input.split('/');
		if ( values.length < 3 )
		{
				return false;
		}
	
		if ( values[0].charAt(0)=='0' )
				values[0] = values[0].substr(1,1);
	
		if ( values[1].charAt(0)=='0' )
				values[1] = values[1].substr(1,1);
	
	
		dia = parseInt(values[0]);
		mes = parseInt(values[1]);
		anio = parseInt(values[2]);
		if( anio < 1000 ) return false;
			
		var date = new Date(anio, mes-1, dia);
		if( isNaN( date.getYear() ) )
		{
				return false;
		}
	
		anioDate = date.getYear();
			
		if ( anioDate < 1900 )
		{
				anioDate += 1900;
		}
			
		if ( anio != anioDate )
		{
			return false;
		}
		
		if(dia!= date.getDate())
		{
			return false;
		}
		
		if( mes!= (date.getMonth()+1) )
		{
			return false;
		}
		return true;
}

function valida_fecha( componente )
{
		input = componente.value;
		if( !esFechaValida( input ) )
		{
				alert('Fecha no válida');
				componente.value = 'dd/mm/yyyy';
				componente.focus();
		}
}

function validaFecha( componente )
{
		var val = componente.value;
		if( val.length==0 ) 
			return true;
		if( !esFechaValida( componente.value ) )
			{
					alert('Fecha no válida');
					componente.value = 'dd/mm/yyyy';
					componente.focus();
			}
}

function mostrar_calendario( div )
{
		mostrarCalendario( div );
}
	
function mostrarCalendario( div )
{
	  var calendario = document.getElementById( div );
	  if(calendario.style.display=="none")
	  {
				calendario.style.display = "block";
	  }
	  else 
	  {
				calendario.style.display = "none"; //Ocultar
		}
}

	function cambiarFecha(calendar, idDiv, idText)
	{
    	if ( calendar.dateClicked ) 
	 	{
      	var d = calendar.date.getDate();      // integer, 1..31
      	var m = calendar.date.getMonth()+1;     // integer, 0..11
      	var a = calendar.date.getFullYear();  
      	var calDiv = document.getElementById(idDiv);
      	calDiv.style.display = "none"; //Ocultar
      	document.getElementById( idText ).value= d + "/" + m + "/" + a;		
  		}
	}
	
	function validar_fecha(id, calendario)
	{
		validarFecha(id, calendario);
	}
	
	function validarFecha(id, calendario)
	{
		calendario.parseDate( id.value );
		valida_fecha( id );
	}
	
	function validaCampo(e, longitud, expresion, limpiar)
	{

		if ( e.value.length != longitud )
		{
			e.focus();
			if( limpiar )	e.value = '';
			return false;
		}

		if( expresion == null ) return true;
		e.value = e.value.toUpperCase();
		r = e.value.search(expresion);
		if (  r == -1 )
		{
			e.focus();
			return false;
		}
		return true;
	}

	function validaRFC(e, limpiar)
	{
		expresion = /^[A-Z]{4}\d{6}[A-Z]{3}$/;
		return validaCampo(e, 13, expresion , limpiar);	
	}

	function validaCredencial(e, limpiar)
	{
		return validaCampo(e, 13, null, limpiar);	
	}
	
	function validaIMSS( e, limpiar )
	{
		return validaCampo(e, 11, null , limpiar);			
	}
	
	function validaCurp(e, limpiar)
	{
		expresion = /^[A-Z]{4}\d{6}[HM][A-Z]{5}\d{2}$/;
		return validaCampo(e, 18, expresion , limpiar);
	}
	
	function validaLicenciaConducir(e, limpiar)
	{
		expresion = /^[A-Z]{1}\d{9}$/;
		return validaCampo(e, 10, expresion , limpiar);
	}