  function esEntero(valor) {
    var myRegExp = /^-?\d+$/;
	return  (myRegExp.test(valor)); 
  }


  function esBlancos(valor) {
    var myRegExp = /^\s*$/;
	return  (myRegExp.test(valor)); 
  }

  function esDecimal(valor) {
    var myRegExp = /^-?\d+\.?\d+$/;
	return  (esEntero(valor) || myRegExp.test(valor)); 
  }


function esEmail (emailStr) {
/* Patron para verificar que el email siga el formato user@domain */
   var emailPat=/^(.+)@(.+)$/
/* Patron para reconocer caracteres especiales validos en un email ( ) < > @ , ; : \ " . [ ]    */
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
/* Caracteres validos en un username o dominio. Representa los que no son permitidos */
   var validChars="\[^\\s" + specialChars + "\]"
/* El siguiente patron es para los casos en que el usuario va entre comillas.
   En ese caso no hay restricciones de comillas dobles. */
   var quotedUser="(\"[^\"]*\")"
/* El siguiente patron es para dominios que son direcciones IP.
   Por ejemplo: joe@[123.124.233.4] incluyendo los [] */
   var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
/* El siguiente patron representa un atomo i.e una serie de caracteres no especiales. */
    var atom=validChars + '+'
/* El siguiente patron representa una palabra en un user name.
   Por ejemplo en in john.doe@somewhere.com, john y  doe son palabras.
   Basicamente, una palabra es un atomo o una cadena entre comillas. */
   var word="(" + atom + "|" + quotedUser + ")"
// El siguiente patron describe la estructura de un usuario
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
/* El siguiente patron describe la estructura de un dominio simbolico normal
    (no un dominio basado en direccion IP. */
   var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


/* Inician  las validaciones */

/* Se parte el email en sus diferentes partes para facilitar el analisis */
var matchArray=emailStr.match(emailPat)

if (matchArray==null) {
  /* Muchas o pocas @'s or algo; Basicamente esta direccion no llena los requisitos de un email en general. */
	alert("Email  incorrecto (verifique @  y puntos )")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

// Verificar si el usuario es valido
if (user.match(userPat)==null) {
    // usuario invalido
    alert("EL user name no es valido.")
    return false
}

/* Si el dominio es una IP, verificar que el IP tenga una estructura valida. */
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert("Dierrción IP destino invalida")
		return false
	    }
    }
    return true
}

// El Domainio es un nombre symbolico
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("El domino del email es invaldo")
    return false
}

/* El dominio en aparencia es correcto, pero debe terminar en una plabra de tres letras (como com, edu, gov)
   o en una palabra de dos letras de pais (co, uk), y debe haber un nombre de host que precede el pais o dominio */

/* Se parte el dominio para saber cuantos atomos contiene */
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {
   // La dirrecion no termina en una palabra de 2 o 3 letras.
   alert("La direcion de email debe terminar en dos letras de pais (co, uk, ...) o en tres de dominio (edu, com, org...)")
   return false
}

// verifcar que haya un nombre de host precediendo el dominio.
if (len<2) {
   alert("EL email no incluye el nombre del host")
   return false
}

// La direccion es correcta
return true;
}

  function esFecha(fecha,formato){
     var posano, posmes, posdia;

     if (fecha.length != 10) {
		 return 0;
     }

	 formato = formato.toLowerCase();
	 posano = formato.indexOf("yyyy");
	 posmes = formato.indexOf("mm");
	 posdia = formato.indexOf("dd");


     ano = fecha.substr(posano, 4);
	 mes = fecha.substr(posmes,2);
	 dia = fecha.substr(posdia,2);

	 if (! esEntero(ano)) {
		return 0;
	 }
	 if (! esEntero(mes)) {
		return 0;
	 }
	 if (! esEntero(dia)) {
		return 0;
	 }
     if (dia <= 0) {
		 return 0;
     }
     ano = parseInt(ano);
	 if (mes == "08") {
		 mes = 8;
	 } 
	 else if (mes == "09") {
		 mes = 9;
	 }
	 else {
		 mes = parseInt(mes);
     }

	 if (dia == "08") {
		 dia = 8;
	 } 
	 else if (dia == "09") {
		 dia = 9;
	 }
	 else {
		 dia = parseInt(dia);
     }



	 switch (mes) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12: return (dia <= 31);
			     break;
		case 4:
        case 6:
        case 9:
	    case 11: 
			     return (dia <= 30);
			     break;
		case 2: if ( ((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0) ) {
			       return (dia <= 29);
		        }
				else {
                   return (dia <= 28);
                }  
				break;
        default:
			   return 0;
     }
  } 


function tildes(texto) {
  cadena = texto.replace("&aacute;","á");
  while (cadena != texto) {
      texto = cadena;
      cadena = texto.replace("&aacute;","á");
  }
  cadena = texto.replace("&eacute;","é");
  while (cadena != texto) {
      texto = cadena;
      cadena = texto.replace("&eacute;","é");
  }
  cadena = texto.replace("&íacute;","í");
  while (cadena != texto) {
      texto = cadena;
      cadena = texto.replace("&iacute;","í");
  }
  cadena = texto.replace("&oacute;","ó");
  while (cadena != texto) {
      texto = cadena;
      cadena = texto.replace("&oacute;","ó");
  }
  cadena = texto.replace("&uacute;","ú");
  while (cadena != texto) {
      texto = cadena;
      cadena = texto.replace("&uacute;","ú");
  }
  cadena = texto.replace("&ntilde;","ñ");
  while (cadena != texto) {
      texto = cadena;
      cadena = texto.replace("&ntilde;","ñ");
  }
  cadena = texto.replace("&Ntilde;","Ñ");
  while (cadena != texto) {
      texto = cadena;
      cadena = texto.replace("&Ntilde;","Ñ");
  }

  return cadena;
}

function valideEntero(texto, campo) {
	if (! esEntero(texto) )	{
		alert("Error: El campo " + tildes(campo) + " debe ser un numero entero");
		return 0;
	}
	return 1;
}

function valideEmail(texto, campo) {
	if (! esEmail(texto) )	{
		alert("Error: El campo " + tildes(campo) + " debe ser una direccion de email válida");
		return 0;
	}
	return 1;
}

function valideFecha(texto, campo) {
	if (! esFecha(texto, "yyyy/mm/dd") )	{
		alert("Error: El campo " + tildes(campo) + " debe ser una fecha en fromato yyyy/mm/dd ");
        return 0;
	}
	return 1;
}

function valideFloat(texto, campo) {
	if (! esDecimal(texto) )	{
		alert("Error: El campo " + tildes(campo) + " debe ser un número decimal ");
		return 0;
	}
	return 1;
}



