
function isaNumber(c)
	{
	//-------------------------------------------------------------
	//Funcion: devuelve si el caracter pasado es un numero o no
	//-------------------------------------------------------------
		return ((c=='0') ||
				(c=='1') ||
				(c=='2') ||
				(c=='3') ||
				(c=='4') ||
				(c=='5') ||
				(c=='6') ||
				(c=='7') ||
				(c=='8') ||
				(c=='9'))

	}
	function isNumeric(str)
	{
	//-------------------------------------------------------------
	//Funcion: devuelve si la cadena pasada es un numero valido.
	//Para ello utiliza 'isNumber'.
	//-------------------------------------------------------------
		var isNum;
		var i;

		isNum=true;
		i=0;

		while ((isNum) && (i<str.length))
		{
			isNum=(isaNumber(str.charAt(i)));
			if (isNum) i++;
		}
		return isNum;
	}

	function isaLetter(c)
	{
	//-------------------------------------------------------------
	//Funcion: devuelve si el caracter pasado es una letra o no
	//-------------------------------------------------------------
		c=c.toUpperCase();
		return ((c=='A') ||
				(c=='B') ||
				(c=='C') ||
				(c=='D') ||
				(c=='E') ||
				(c=='F') ||
				(c=='G') ||
				(c=='H') ||
				(c=='I') ||
				(c=='J') ||
				(c=='K') ||
				(c=='L') ||
				(c=='M') ||
				(c=='N') ||
				(c=='O') ||
				(c=='P') ||
				(c=='Q') ||
				(c=='R') ||
				(c=='S') ||
				(c=='T') ||
				(c=='U') ||
				(c=='V') ||
				(c=='W') ||
				(c=='X') ||
				(c=='Y') ||
				(c=='Z')); 
	}
	function isNIF(nifStr)
	{
	//-------------------------------------------------------------
	//Funcion: devuelve si la cadena pasada es un NIF valido.
	//Para ello comprueba que los primeros caracteres sean
	//dígitos y el último letra.
	//-------------------------------------------------------------
		var isValid;
		var last;
		last=nifStr.charAt(nifStr.length-1);
		nifStr=nifStr.slice(0,nifStr.length-1);
		
		while ((nifStr.length>1)&&(nifStr.charAt(0)=='0')) nifStr=nifStr.slice(1,nifStr.length);
		
		isValid=isNumeric(nifStr);
		if (isValid)
		{
			isValid= isaNIFLetter(parseInt(nifStr), last.toUpperCase())
		}
		return isValid;
	}

	function isaNIFLetter(DNI, letra)
	{
		var i = DNI % 23;
		var letras = "TRWAGMYFPDXBNJZSQVHLCKET";
		return (letra==letras.charAt(i));
	}

	function isNIE(nieStr)
	{
	//-------------------------------------------------------------
	//Funcion: devuelve si la cadena pasada es un NIE o tarjeta de residencia valido.
	//Para ello comprueba que la cadena conste de 9 caracteres,
	//siendo el primero una X, el último una letra y los 7 intermedios números.
	//-------------------------------------------------------------
		var isValid;
		var last, first;
		isValid=(nieStr.length==9)
		last=nieStr.charAt(nieStr.length-1);
		first=nieStr.charAt(0);
		nieStr=nieStr.slice(1,nieStr.length-1);
		
		while ((nieStr.length>1)&&(nieStr.charAt(0)=='0')) nieStr=nieStr.slice(1,nieStr.length);
		
		if (isValid)
		{
			isValid=isNumeric(nieStr);
		}
		if (isValid)
		{
			isValid=(isaLetter(last));
		}
		if (isValid)
		{
			isValid=((first.toUpperCase())=="X");
		}
		return isValid;
	}
	
	
	
	function valNIF_NIE(valor)
	{
		var ok=true;
		ok = ((isNIF(valor)) || (isNIE(valor)));
		
		return ok;
	}
function esValidoEmail(emailStr) {
	var valido=true;
	/* El sig. patrón se usa para chequear si el email es de la forma
	   usuario@dominio. Se usa para separar el usuario del dominio*/
	var emailPat=/^(.+)@(.+)$/
	/* La sig. cadena representa el patrón para caracteres especiales.
	   No se permiten estos caracteres*/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	/* La sig. cadena representa el rango de caacteres permitidos en el
	   nombre o dominio*/
	var validChars="\[^\\s" + specialChars + "\]"
	/* El sig. patrón se aplica si el usuario va entre comillas*/
	var quotedUser="(\"[^\"]*\")"
	/* El sig. patrón se aplica para dominios que son direcciones IP.
	   Ejemplo: yo@[123.124.233.4]. Los [] son necesarios*/
	var ipDomainPat="/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/"
	/* La sig. cadena representa caracteres no especiales*/
	var atom=validChars + '+'
	/* La sig. cadena representa varias palabras en un nombre de usuario (yo.soy@dominio.com)*/
	var word="(" + atom + "|" + quotedUser + ")"
	/* El sig. patrón describe la estructura del nombre usuario*/
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	/* El sig. patrón describe la estructura del dominio en contraposición a la IP*/
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) {
	  /* Demasiadas o pocas @'s*/
		valido=false;
		return false;
	}
	var user=matchArray[1]
	var domain=matchArray[2]
	if (user.match(userPat)==null) {
		valido=false;
		return false;
	}
	/* Si la dirección de correo es una IP, comprobar q es válida*/
	
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		valido=false;
		return false;
	}
	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 dirección de correo debe acabar con 2 ó 3 caracteres*/
	   valido=false;
	   return false;
	}
	/* Se asegura de que el nombre del Host precede al nombre del dominio*/
	if (len<2) {
	   valido=false;
	   return false;
	}
	return valido;
	}


function ValidarFecha(Fecha)
{
	var fec = Fecha.split("/");
	if (fec.length !=3)
		{
			
			return false;
		}
	else
	{
		var dia = parseInt(fec[0]);
		var mes = parseInt(fec[1]);
		var anio = parseInt(fec[2]);
		if (!FechaCorrecta(dia,mes,anio))
			{
				return false;
			}

	}
	return true;
		
}

function anyoBisiesto(anyo)
    {
        /**
        * si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925
        */
        if (anyo < 100)
            var fin = anyo + 1900;
        else
            var fin = anyo ;
        if (fin % 4 != 0)
            return false;
        else
        {
            if (fin % 100 == 0)
            {
                if (fin % 400 == 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return true;
            }
        }
    }
    function FechaCorrecta(dia,mes,anyo )
    {
       var febrero,d,m,a;
	   d=isNaN(dia);
	   m=isNaN(mes);
	   a=isNaN(anyo);
	   if ((d)||(m)||(a)) 
	   {
	    return false;
	   }
       if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
      
       if ((mes<1) || (mes>12))
       {
           return false;
       }
   
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           return false;
       }
   
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {

		   return false;
       }
   
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
		   return false;
       }
       if ((anyo<1900) || (anyo>2050))
       {
			return false;
       } 
      return true;    
    }
