	//var iEmail = "This field must be a valid email address (like foo@bar.com). Please reenter it now."
	var whitespace = " \t\n\r";
	var defaultEmptyOK = false;
	var daysInMonth = makeArray(12);
	daysInMonth[1] = 31;
	daysInMonth[2] = 29;   // must programmatically check this
	daysInMonth[3] = 31;
	daysInMonth[4] = 30;
	daysInMonth[5] = 31;
	daysInMonth[6] = 30;
	daysInMonth[7] = 31;
	daysInMonth[8] = 31;
	daysInMonth[9] = 30;
	daysInMonth[10] = 31;
	daysInMonth[11] = 30;
	daysInMonth[12] = 31;


	function makeArray(n) {
	//*** BUG: If I put this line in, I get two error messages:
	//(1) Window.length can't be set by assignment
	//(2) daysInMonth has no property indexed by 4
	//If I leave it out, the code works fine.
	//   this.length = n;
	   for (var i = 1; i <= n; i++) {
	      this[i] = 0;
	   } 
	   return this;
	}	
	function isDate (year, month, day)
	{   // catch invalid years (not 2- or 4-digit) and invalid months and days.
	    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;

	    // Explicitly change type to integer to make code work in both
	    // JavaScript 1.1 and JavaScript 1.2.
	    var intYear = parseInt(year,10);
	    var intMonth = parseInt(month,10);
	    var intDay = parseInt(day,10);
		
	    // catch invalid days, except for February
	    if (intDay > daysInMonth[intMonth]) return false; 

	    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;

	    return true;
	}
	function isYear (s)
	{   
		
		if (isEmpty(s)) 
	       if (isYear.arguments.length == 1) 
			return defaultEmptyOK;
	       else 
			return (isYear.arguments[1] == true);
	    if (!isNonnegativeInteger(s)) return false;
	    return ((s.length == 2) || (s.length == 4));
	}
	function isMonth (s)
	{   if (isEmpty(s)) 
	       if (isMonth.arguments.length == 1) return defaultEmptyOK;
	       else return (isMonth.arguments[1] == true);
	    return isIntegerInRange (s, 1, 12);
	}
	function isDay (s)
	{   if (isEmpty(s)) 
	       if (isDay.arguments.length == 1) return defaultEmptyOK;
	       else return (isDay.arguments[1] == true);   
	    return isIntegerInRange (s, 1, 31);
	}
	function daysInFebruary (year)
	{   // February has 29 days in any year evenly divisible by four,
	    // EXCEPT for centurial years which are not also divisible by 400.
	    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
	}
	function isNonnegativeInteger (s)
	{   var secondArg = defaultEmptyOK;

	    if (isNonnegativeInteger.arguments.length > 1)
	        secondArg = isNonnegativeInteger.arguments[1];

	    // The next line is a bit byzantine.  What it means is:
	    // a) s must be a signed integer, AND
	    // b) one of the following must be true:
	    //    i)  s is empty and we are supposed to return true for
	    //        empty strings
	    //    ii) this is a number >= 0
		
	    return (isSignedInteger(s, secondArg) && ( (isEmpty(s) && secondArg)  || (parseInt(s,10) >= 0) ) );
	}
	function isSignedInteger (s)

	{   
		
		if (isEmpty(s)) 
	       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
	       else return (isSignedInteger.arguments[1] == true);

	    else {
	        var startPos = 0;
	        var secondArg = defaultEmptyOK;

	        if (isSignedInteger.arguments.length > 1)
	            secondArg = isSignedInteger.arguments[1];

	        // skip leading + or -
	        s=s.toString();
	        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
	        {	
	           startPos = 1;    
	          }
	        return (isInteger(s.substring(startPos, s.length), secondArg));
	    }
	}
	function isInteger (s)

	{   var i;
	    if (isEmpty(s)) 
	       if (isInteger.arguments.length == 1) return defaultEmptyOK;
	       else return (isInteger.arguments[1] == true);

	    // Search through string's characters one by one
	    // until we find a non-numeric character.
	    // When we do, return false; if we don't, return true.
		
	    for (i = 0; i < s.length; i++)
	    {   
	        // Check that current character is number.
	        var c = s.charAt(i);

	        if (!isDigit(c)) return false;
	    }

	    // All characters are numbers.
	    return true;
	}
	function isDigit (c)
	{   
		return ((c >= "0") && (c <= "9"));
	}
	function isEmpty(s)
	{   return ((s == null) || (s.length == 0));
	}
	function isIntegerInRange (s, a, b)
	{   if (isEmpty(s)) 
	       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
	       else return (isIntegerInRange.arguments[1] == true);

	    // Catch non-integer strings to avoid creating a NaN below,
	    // which isn't available on JavaScript 1.0 for Windows.
	    if (!isInteger(s, false)) return false;

	    // Now, explicitly change the type to integer via parseInt
	    // so that the comparison code below will work both on 
	    // JavaScript 1.2 (which typechecks in equality comparisons)
	    // and JavaScript 1.1 and before (which doesn't).
	    var num = parseInt(s,10);
	    return ((num >= a) && (num <= b));
	}
function checkEmail (theField, emptyOK)
		{   if (checkEmail.arguments.length == 1) emptyOK = defaultEmptyOK;
		    if ((emptyOK == true) && (isEmpty(theField))) return true;
		    else if (!isEmail(theField, false)) 
		       return false;
		    else return true;
		}
		
		function isEmail (s)
		{   if (isEmpty(s)) 
		       if (isEmail.arguments.length == 1) return defaultEmptyOK;
		       else return (isEmail.arguments[1] == true);
		   
		    // is s whitespace?
		    if (isWhitespace(s)) return false;
		    
		    // there must be >= 1 character before @, so we
		    // start looking at character position 1 
		    // (i.e. second character)
		    var i = 1;
		    var sLength = s.length;

		    // look for @
		    while ((i < sLength) && (s.charAt(i) != "@"))
		    { i++;
		    }

		    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
		    else i += 2;

		    // look for .
		    while ((i < sLength) && (s.charAt(i) != "."))
		    { i++;
		    }

		    // there must be at least one character after the .
		    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
		    else return true;
		}
		function isWhitespace (s)
		{   var i;

		    // Is s empty?
		    if (isEmpty(s)) return true;

		    // Search through string's characters one by one
		    // until we find a non-whitespace character.
		    // When we do, return false; if we don't, return true.

		    for (i = 0; i < s.length; i++)
		    {   
		        // Check that current character isn't whitespace.
		        var c = s.charAt(i);

		        if (whitespace.indexOf(c) == -1) return false;
		    }

		    // All characters are whitespace.
		    return true;
		}
		function CompDate (year1, month1, day1, year2, month2, day2)
		/*
			Compara que la fecha 2 sea mayor que la 1.
			Si es mayor devuelve true, sino devuelve false

		*/
		{
			var y1= parseInt (year1,10);
			var m1 =parseInt (month1,10);
			var d1 = parseInt (day1,10);

			var y2= parseInt (year2,10);
			var m2 =parseInt (month2,10);
			var d2 = parseInt (day2,10);

			if (y1>y2)
			{
				return false;
			}
			else
			{
				if (y1==y2 && m1>m2)
				{
					return false;
				}
				if (y1==y2)
				{
					if (m1==m2 && d1>d2)
					{
						return false;
					}
				}
			}
			return true;
		}		
		
		function checkHora(sHora)
		{
			var Hora= parseInt (sHora,10);
			
			if(!isInteger(Hora) || (Hora<0 || Hora>23))
			{		
				return false;
			}		
		
			return true;
		}
		
		function checkMinutos(sMinutos)	
		{
			var Minutos = parseInt (sMinutos,10);
			
			if(!isInteger(Minutos) || (Minutos<0 || Minutos>59))
			{
				return false;
			}			
			return true;
		}
		
		function MayorEdad (year, month, day, hoyYear, hoyMonth, hoyDay)		
		{
			//Si es mayor devuelve true, sino devuelve false
			
			//Fecha nacimiento introducida por el usuario
			var y = parseInt (year,10);
			var m = parseInt (month,10);
			    m = m - 1;
			var d = parseInt (day,10);
		
			//Fecha nacimiento introducida
			var fecNacimiento = new Date(y,m,d);
		
			//fecha de hoy
			var hYear = parseInt(hoyYear,10);
			var hMonth = parseInt(hoyMonth,10);
				hMonth = hMonth - 1;
			var hDay = parseInt(hoyDay,10);
			
			//año hace 18 años
			var Year18 = (parseInt(hYear,10)-18);
			
			//fecha hace 18 años
			var fecHace18 = new Date(Year18,hMonth,hDay);
			
			//alert("FEC NAC: " + fecNacimiento + "  fecHace18: " + fecHace18);		
			
			if ( fecNacimiento > fecHace18) 
			{
				//alert("Eres menor de Edad");
				return false;				
			}
			else
			{
				//alert("Eres mayor de edad");
				return true;
			}		
		}

	// ***** Comprueba Telefono *****		
	function checkTelefono(p_sTelefono)
	{
		if (!isInteger(p_sTelefono))
		{
			alert("El telefono debe ser un valor numérico");
			return false;
		}
		else
		{
			if (p_sTelefono.length != 9)
			{
				alert("Debe ser un número de 9 dígitos");
				return false;
			}
			else
			{
				if((p_sTelefono.substring(0,1)=="6") || (p_sTelefono.substring(0,1) =="9"))
				{
					return true;
				}
				else
				{
					alert("El telefono debe empezar por 6 o 9");
					return false;
				}
			}
		}
		return true;
	}
	
	// ***** Comprueba Telefono (sin mostrar alert) *****			
	function bcheckTelefono(p_sTelefono)
	{
		if (!isInteger(p_sTelefono))
		{
			return false;
		}
		else
		{
			if (p_sTelefono.length != 9)
			{
				return false;
			}
			else
			{
				if((p_sTelefono.substring(0,1)=="6") || (p_sTelefono.substring(0,1) =="9"))
				{
					return true;
				}
				else
				{
					return false;
				}
			}
		}
		return true;
	}
	
	
	//**** LTRIM ****
	function LTrim(cadena) {				
		var vacio = true;
		var i;
		var posPrimerCaracter;
		
		for (i=0;i<cadena.length;i++) {
			if (cadena.charAt(i)!=" ") {
				vacio=false;
				posPrimerCaracter=i;
				break;
			}//if			
		}//for
		if (vacio==false) {
			cadena = cadena.slice(parseInt(posPrimerCaracter,10),parseInt(cadena.length,10));
		}
		else {	cadena="";}

		return cadena;
	}//end function LTrim
		
	function RTrim(cadena) {
		var vacio = true;
		var i;
		var posPrimerCaracter;
				
		for (i=cadena.length-1;i>=0;i--) {	
		
			if (cadena.charAt(i)==" ") {
				vacio=false;
				posPrimerCaracter=i;	
				break;
			}//if	
		
		}//for
		if (vacio==false) {			
			cadena = cadena.slice(0,parseInt(posPrimerCaracter,10));
		}
		else {	cadena="";}
		
		return cadena;
	}//end RTrim
	
	
	//**** ELIMINA CARACTERES ****
	/*
	function RemoveBad(Cadena) {
		Cadena = Cadena.replace(/\</g,"");
		Cadena = Cadena.replace(/\>/g,"");
		Cadena = Cadena.replace(/\"/g,"");
		Cadena = Cadena.replace(/\'/g,"");
		Cadena = Cadena.replace(/\%/g,"");
		Cadena = Cadena.replace(/\;/g,"");
		Cadena = Cadena.replace(/\(/g,"");
		Cadena = Cadena.replace(/\)/g,"");
		Cadena = Cadena.replace(/\&/g,"");
		Cadena = Cadena.replace(/\+/g,"");
		return Cadena;
	}//RemoveBad	
	*/
	
	//**** FORMATEA UN MUNERO ****
	function FormatoNumero (Valor, FormatoActual, SeparadorMillar, SeparadorDecimal, PosicionesMillares, PosicionesDecimales, SignoPositivo, SignoNegativo, SignoMonetario, PosicionSignoMonetario)
	{
		var MilesActual;
		var DecimalActual;
		var Numero;
		var ParteEntera;
		var ParteDecimal;
		var Contador;
		var FormatoMiles;
		var Signo;
		var Redondeo;
		var Resultado;
		
		Valor = Valor.toString();
		
		MilesActual = FormatoActual.charAt(0);
		DecimalActual = FormatoActual.charAt(1);
		
		Numero = Valor.split(DecimalActual);

		if (Valor.indexOf(DecimalActual) == -1)
		{
			Numero = Valor.toString();
			Numero = Numero.replace(" ", "");

			if (Numero == "")
			{
				ParteEntera = "0";
			}
			else
			{
				ParteEntera = parseFloat(Numero.replace(MilesActual, ""));
			}

			ParteDecimal = "0";
		}
		else
		{
			Numero[0] = Numero[0].replace(" ", "");
			Numero[1] = Numero[1].replace(" ", "");

			if (Numero[0] == "")
			{
				ParteEntera = "0";
			}
			else
			{
				ParteEntera = parseFloat(Numero[0].replace(MilesActual, ""));
			}

			if (Numero[1] == "")
			{
				ParteDecimal = "0";
			}
			else
			{
				ParteDecimal = Numero[1];
			}
		}

		Signo = SignoPositivo;

		ParteEntera = ParteEntera.toString();
		ParteDecimal = ParteDecimal.toString();
		
		if (Valor.indexOf("-") == -1)
		{
			Signo = SignoPositivo;
			ParteEntera = ParteEntera.replace(MilesActual, "");
		}
		else
		{
			Signo = SignoNegativo;
			
			if (ParteEntera.indexOf("-") != -1)
			{
	 			ParteEntera = ParteEntera.substring(1, ParteEntera.length);
			}

			ParteEntera = ParteEntera.replace(MilesActual, "");
		}
	
		switch(ParteEntera.charAt(0))
		{
			case "0":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "1":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "2":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "3":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "4":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "5":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "6":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "7":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "8":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			case "9":
			{
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
			default:
			{
				ParteEntera = ParteEntera.substring(1, ParteEntera.length);
				ParteEntera = ParteEntera.replace(MilesActual, "");
				break;
			}
		}
		
		if (ParteDecimal.length < PosicionesDecimales)
		{
			for (Contador = 0; Contador < (PosicionesDecimales - ParteDecimal.length); Contador++)
			{
				ParteDecimal += "0";
			}
		}
		else
		{		
			if (ParteDecimal.length > PosicionesDecimales)
			{
				if (parseFloat(ParteDecimal) > 0)
				{
					ParteDecimal = "0." + ParteDecimal.toString();
					
					Redondeo = "0.";

					for (Contador = 0; Contador < PosicionesDecimales; Contador++)
					{
						Redondeo += "0";
					}

					Redondeo += "1";
					
					ParteDecimal = (parseFloat(ParteDecimal) + parseFloat(Redondeo)).toString();
					
					if (parseFloat(ParteDecimal) >= 1)
					{
						ParteEntera = (parseFloat(ParteEntera) + 1).toString();
						ParteDecimal = ParteDecimal.substring(2, 2 + PosicionesDecimales);
						
						ParteDecimal = ParteDecimal.replace(" ", "");
						if (ParteDecimal == "")
						{
							for (Contador = 0; Contador < (PosicionesDecimales - ParteDecimal.length); Contador++)
							{
								ParteDecimal += "0";
							}
						}
					}
					else
					{
						ParteEntera = parseFloat(ParteEntera);
						ParteEntera = ParteEntera.toString();
						
						ParteDecimal = ParteDecimal.substring(2, 2 + PosicionesDecimales);
					}
				}
				else
				{
					ParteEntera = parseFloat(ParteEntera);
					ParteEntera = ParteEntera.toString();
					
					for (Contador = 0; Contador < (PosicionesDecimales - ParteDecimal.length); Contador++)
					{
						ParteDecimal += "0";
					}
				}
			}
		}
		
		for (Contador = 0; Contador < (PosicionesDecimales - ParteDecimal.length); Contador++)
		{
			ParteDecimal += "0";
		}

		ParteEntera = ParteEntera.replace(" ", "");
		
		FormatoMiles = "";
		
		for (Contador = (ParteEntera.length - PosicionesMillares); Contador >= ( 1 - PosicionesMillares); Contador -= PosicionesMillares)
		{
			if (Contador <= 0)
			{
				FormatoMiles = ParteEntera.substring(0, (PosicionesMillares + Contador)) + FormatoMiles;
			}
			else
			{
				FormatoMiles = SeparadorMillar + ParteEntera.substring(Contador, PosicionesMillares + Contador) + FormatoMiles;
			}
		}

		ParteEntera = FormatoMiles;
		
		if (ParteEntera == "")
		{
			ParteEntera = "0";
		}
	
		if (PosicionSignoMonetario == 1)
		{
			if (PosicionesDecimales == 0)
			{
				Resultado = SignoMonetario + Signo + ParteEntera.toString();
			}
			else
			{
				Resultado = SignoMonetario + Signo + ParteEntera.toString() + SeparadorDecimal + ParteDecimal.toString();
			}
		}
		else
		{
			if (PosicionesDecimales == 0)
			{
				Resultado = Signo + ParteEntera.toString() + SignoMonetario;
			}
			else
			{
				Resultado = Signo + ParteEntera.toString() + SeparadorDecimal + ParteDecimal.toString() + SignoMonetario;
			}
		}
		
		return (Resultado);	
	}
	
	
	function bCarneConducir (year1, month1, day1, year2, month2, day2)
	/*
		Recibe 2 parametros:
			-	Fecha 2 : Carné de conducir
			-	Fecha 1	:	Fecha de nacimiento
		Comprueba por fecha2 - fecha1 es mayor de 18 años
	*/
	{
		var y1= parseInt (year1);
		var m1 =parseInt (month1,10);
		var d1 = parseInt (day1,10);

		var y2= parseInt (year2);
		var m2 =parseInt (month2,10);
		var d2 = parseInt (day2,10);

		if (y2-y1<18){
			return false;
		}
		else{
			if(y2-y1==18)
			{
				if(m2-m1<0){
					return false;
				}else if(m2-m1==0){
					if(d2-d1<0){
						return false;
					}
				}
			}
		}
		return true;
	}		

