//Valida una número de teléfono
function validatePhone(num, allowblank)
{
	if(num.length == 0)
		return allowblank;
	if(num.length < 9)
		return false;
	var validChars = "0123456789+ ";
	for(var c=0; c<num.length; c++)
		if(validChars.indexOf(num.charAt(c)) < 0)
			return false;
	return true;
}
//Valida una hora en formato hh:mm ó h:mm
function validateHourStr(str)
{
	var hora;
	var separador;
	var minuto;
	switch(str.length)
	{
		case 4:
			hora = str.substring(0, 1);
			separador = str.substring(1,2);
			minuto = str.substring(2, 4);
			break;
		case 5:
			hora = str.substring(0, 2);
			separador = str.substring(2,3);
			minuto = str.substring(3, 5);
			break;
		default:
			return false;
	}
	if(separador != ":")
		return false;
	hora = parseInt(hora, 10);
	minuto = parseInt(minuto, 10);
	if(isNaN(hora) || isNaN(minuto))
		return false;

	return (hora >= 0 && hora <= 23 && minuto >= 0 && minuto <= 59);
}
//Valida una fecha en formato yyyy-mm-aa (el carácter separador puede ser cualquiera)
function validateDateStr(date, min_ano, max_ano)
{
	if(date.length != 10)
		return false;
	var ano = date.substring(0, 4);
	var mes = date.substring(5, 7);
	var dia = date.substring(8, 10);

	return validateDate(ano, mes, dia, min_ano, max_ano);
}
//Valida una fecha
function validateDate(ano, mes, dia, min_ano, max_ano)
{
	ano = parseInt(ano, 10);
	mes = parseInt(mes, 10);
	dia = parseInt(dia, 10);

	if(isNaN(ano) || isNaN(mes) || isNaN(dia) || dia < 1 || ano < min_ano || ano > max_ano)
		return false;

	switch(mes)
	{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return dia <= 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return dia <= 30;
		case 2:
			return dia <= (esBisiesto(ano) ? 29 : 28);
		default:
			return false;
	}
}
//Dice si un año es bisiesto
function esBisiesto(ano)
{
	return ((ano%4)==0) && ((ano%100)!=0 || (ano%400)==0);
}
//Valida un email
function validateEmail(addr, allowblank)
{
	if(addr.length == 0)
		return allowblank;

	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	for(i=0; i<invalidChars.length; i++)
		if(addr.indexOf(invalidChars.charAt(i),0) > -1)
			return false;

	for(i=0; i<addr.length; i++)
		if(addr.charCodeAt(i)>127)
			return false;

	var atPos = addr.indexOf('@',0);
	if((atPos == -1)||(atPos == 0)||(addr.indexOf('@', atPos + 1) > - 1)||(addr.indexOf('.', atPos) == -1)||(addr.indexOf('@.',0) != -1)||(addr.indexOf('.@',0) != -1)||(addr.indexOf('..',0) != -1))
		return false;

	var suffix = addr.substring(addr.lastIndexOf('.')+1);
	if(suffix.length != 2 && suffix != 'cat' && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum')
		return false;

	return true;
}
//Valida un nick o clave
function validateStringAsNickOrPass(str)
{
	var len = str.length;
	if(str == null || len < 4 || len > 12)
		return false;

	var validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for(c=0; c<len; c++)
		if(validChars.indexOf(str.charAt(c),0) == -1)
			return false;

	return true;
}