/* 
	Funciones disponibles:
		- isLetter(c) 					<- valida si se paso una letra.
		- isDate(f)						<- comprueba si la fecha pasada es correcta.
		- isDigit(c)					<- comprueba si se paso un digito numerico.
		- isACorrectInterval(n1, n2)	<- comprueba rango de numeros N1 < N2 es correcto.
		- isACorrectPeriod(n1, n2)		<- comprueba rango de fechas N1 < N2 es correcto.
		- charInString(c, s)			<- comprueba si el char C esta en la cadena S.
		- isInteger(s)					<- comprueba si el numero S es entero.
		- isPositive(n)					<- comprueba si el numero N es positivo.
		- isNegative(n)					<- comprueba si el numero N es negativo.
		- isZero(n)						<- comprueba si el numero N es cero.
		- isNumericKey()				<- comprueba si la tecla que se presiono es numerica.
		- validarCorreo(dir)			<- otra funcion para validar email.
		- LimitarUpload(form, file)
*/



/* 
funcion para validar si se ingreso una letra:
*/
function isLetter(c) {
	return(((c >= "a")&&(c<="z"))||((c >= "A")&&(c <= "Z")));
}

/* 
Comprueba si el formato de una fecha es correcto.
*/
function isDate(f) {
	
	if (f.indexOf('/') == -1)
		return(false);
		
	d = f.substring(0, f.indexOf('/'));
	m = f.substring(f.indexOf('/')+1, f.lastIndexOf('/'));
	a = f.substring(f.lastIndexOf('/')+1, f.length);
	
	if (isNaN(a) || isNaN(d) || isNaN(m))
		return false;
		
	if ((d < 1) || (d > 31))
		return false;
		
	if ((m < 1) || (m > 12))
		return false;
		
	if ((a < 1) || (a > 9999))
		return false;
		
	if (((m == 4) || (m == 6) || (m == 9) || (m == 11)) && (d > 30)) // Meses de 30 dias
		return false;
		
	if ((m == 2) && (a%4 == 1) && (d > 28)) // Para bisiestos
		return false;
		
	return true;
}

/* 
funcion para validar si se ingreso un digito numerico:
*/
function isDigit(c) {
	return((c >= "0")&&(c <= "9"));
}

/* 
Comprueba si el intervalo de numeros es correcto. Siempre N1 tiene que ser menor a N2
*/
function isACorrectInterval(n1, n2) {
	if (isNaN(n1))
		return(false);
		
	if (isNaN(n2))
		return(false);
		
	if (n1 > n2)
		return(false);
		
	return(true);
}

/* 
Comprueba si el intervalo de periodos es correcto. Siempre N1 tiene que ser menor a N2
*/
function isACorrectPeriod(n1, n2) {
	var date1;
	var date2;
	var d1;
	var d2;
	
	if ((!isDate(n1))||(!isDate(n2)))
		return false;
		
	var date1 = n1.split("/");
	var date2 = n2.split("/");
	var d1 = new Date(date1[2], date1[1], date1[0]);
	var d2 = new Date(date2[2], date2[1], date2[0]);

	if (d1>d2)
		return(false);
	
	return(true);
}

/* 
Comprueba si existe el char C en la cadena S, devuelve TRUE en caso de encotrarlo.
*/
function charInString(c, s) {   
	for (i = 0; i<s.length; i++)
		if (s.charAt(i) == c) 
			return(true);
			
    return false;
}

/* 
Comprueba si el numero S es entero, devuelve TRUE en caso de serlo.
*/
function isInteger(s) {   
	var i;
	var c;
	
	if (s.length == 0) 
		return false;
	
    for (i = 0; i<s.length; i++){
        c = s.charAt(i);

        if (!isDigit(c)) 
			return false;
    }

    return true;
}

/* 
Comprueba si el numero N es positivo, devuelve TRUE en caso de serlo.
*/
function isPositive(n) {
	return(n > 0);
}

/* 
Comprueba si el numero N es negativo, devuelve TRUE en caso de serlo.
*/
function isNegative(n) {
	return(n < 0);
}

/* 
Comprueba si el numero N es cero, devuelve TRUE en caso de serlo.
*/
function isZero(n) {
	return(n == 0);
}

/* 
Comprueba si la tecla presionada es numerica, de no serlo no imprime el caracter en pantalla.
*/
function isNumericKey() { 
	var key=window.event.keyCode;//codigo de tecla. 
	if (key < 48 || key > 57){//si no es numero 
		if (key != 46) {
			window.event.keyCode=0;//anula la entrada de texto. 
		}
	}
} 


/* 
Comprueba si la direccion de correo pasada es valida, devuelve TRUE en ese caso.
*/
function validarCorreo(dir) {

	var caracteres_validos;
	var i;
	
	caracteres_validos = '1234567890QWERTYUIOPASDFGHJKLZXCVBNM_-.@qwertyuiopasdfghjklzxcvbnm';
	
	if (
		(dir.charAt(dir.length-1)=='-') ||
		(dir.charAt(dir.length-1)=='.') ||
		(dir.charAt(dir.length-1)=='@') ||
		(dir.charAt(dir.length-1)=='_')
		) {
		
		return false;
	}
	
	if (
		(dir.charAt(0)=='-') ||
		(dir.charAt(0)=='.') ||
		(dir.charAt(0)=='@') ||
		(dir.charAt(0)=='_')
		) {
		return false;
	}

	var j;
	j=0;
	for (i=0; i<dir.length; i++) {
		if (caracteres_validos.search(dir.charAt(i))==-1) {
			return false;
		}
		if (dir.charAt(i)=='@') j++;
	}

	//Si hay más de una @ la dirección es incorrecta
	if (j>1) {
		return false;
	}
	if (j==0) {
		return false;
	}
	
	if (dir.indexOf('.')==-1) return false;
	
	if (dir.indexOf('@.')!=-1) return false;
	if (dir.indexOf('.@')!=-1) return false;
	
	return true;
	
}

/* 
Comprueba el formato de archivo que se esta intentando subir
*/
function LimitarUpload(form, file) {
	extArray = new Array(".gif", ".jpg", ".png");
	allowSubmit = false;
	if (!file) return;
	while (file.indexOf("\\") != -1)
		file = file.slice(file.indexOf("\\") + 1);
		ext  = file.slice(file.indexOf(".")).toLowerCase();
	for (var i = 0; i < extArray.length; i++) {
		if (extArray[i] == ext) { allowSubmit = true; break; }
	}
	if (allowSubmit) form.submit();
	else
	alert("Formato de imagen invalido, solo se aceptan los siguientes formatos: " 
	+ (extArray.join("  ")) + "\nPor favor seleccione un nuevo archivo de imagen "
	+ "y vuelva a enviar el formulario.");
}
