function Validar(Length,MaxLength){
	
	CambiaComillaPegado('frmDatos');

//Propósito:	Comprobar que se han rellenado todos los elementos obligatorios
//Entradas:		sNuevo=indica si se trata de un nuevo registro o de una modificación
//Efectos:		Muestra un mensaje de error informando de cada uno de los campos erroneos y
//				marca el nombre del campo erroneo en rojo

	//establezco las variables que me indicaran si todo esta correcto y las que mostrarán los posibles errores
	var bTodoOK=true;
	var sErroresIni="<table width='100%' cellpadding='0' cellspacing='0'><tr><td class='error'><b>Errores</b></td></tr>";
	var sErroresFin="</table>";
	var sErrores="";

	//llamo a la función que lo resetea todo para que no se muestren errores corregidos
	Limpia();

	//validamos el correo	
	if (Trim(document.frmDatos.txtLogin.value.length)==0){
			sErrores=sErrores+"<tr><td class='error'>Por favor escriba una direcci&oacute;n de <b>e-mail</b></td></tr>";
			bEmailOK=false;
	}else{//si escribe algo le validamos el correo o login
		
		//comienza el procedimiento de validación del email
		var sEmail=Trim(document.frmDatos.txtLogin.value)
		
		//establezco el formato de una direccion de correo electrónico, ( algo@algo.xx) 
		var sEmailPat=/^(.+)@(.+)$/ 
		
		// Verificar la existencia de caracteres. ( ) < > @ , ; : \ " . [ ] 
		var sSpecialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]" 
		
		// Verifica los caracteres que son válidos en una dirección de email
		var sValidChars="\[^\\s" + sSpecialChars + "\]" 
		
		var sQuotedUser="(\"[^\"]*\")" 
		
		// Verifica si la dirección de email está representada con una dirección IP Válida 
		var sIpDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
		
		var bEmailOK=true;
		
		// Verificar caracteres inválidos 
		var atom=sValidChars + '+'
		var word="(" + atom + "|" + sQuotedUser + ")"
		var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
		var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
		
		
		var matchArray=sEmail.match(sEmailPat)
		//si no coincide con el formato establecido casca
		if (matchArray==null){		
			sErrores=sErrores+"<tr><td class='error'>Por favor escriba una direcci&oacute;n de <b>e-mail</b> v&aacute;lida</td></tr>";
			bEmailOK=false;
		}else{
			var user=matchArray[1]
			var domain=matchArray[2]
		
			// Si el user "user" es valido 
			if (user.match(userPat)==null) {
			// Si no
				sErrores=sErrores+"<tr><td class='error'>Por favor escriba una direcci&oacute;n de <b>e-mail</b> v&aacute;lida</td></tr>";
				bEmailOK=false;
			}else{
			
				// Si la dirección IP es válida 
				var IPArray=domain.match(sIpDomainPat)
				if (IPArray!=null) {
					for (var i=1;i<=4;i++) {
						if (IPArray[i]>255) {
							sErrores=sErrores+"<tr><td class='error'>Por favor escriba una direcci&oacute;n de <b>e-mail</b> v&aacute;lida</td></tr>";
							bEmailOK=false;
						}
					}
				}
				if (bEmailOK){
					var domainArray=domain.match(domainPat)
					//si el dominio tiene un formato no válido casca
					if (domainArray==null) {
						sErrores=sErrores+"<tr><td class='error'>Por favor escriba una direcci&oacute;n de <b>e-mail</b> v&aacute;lida</td></tr>";
						bEmailOK=false;
					}else{
						
						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){ 
							sErrores=sErrores+"<tr><td class='error'>Por favor escriba una direcci&oacute;n de <b>e-mail</b> v&aacute;lida</td></tr>";
							bEmailOK=false;
						}else{
							if (len<2) {
								var errStr="La direcci&oacute;n es erronea"
								sErrores=sErrores+"<tr><td class='error'>Por favor escriba una direcci&oacute;n de <b>e-mail</b> v&aacute;lida</td></tr>";
								bEmailOK=false;
							}
						}
					}
				}
			}		
		}			
	}	

	//compruebo que ha escrito un password
	if (Trim(document.frmDatos.txtPass1.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>password</b> para el usuario</td></tr>";
		document.getElementById("cabPass").innerHTML="<font color='red'>!Contrase&ntilde;a</font>";
		bTodoOK=false;
	}else if(Trim(document.frmDatos.txtPass1.value.length)<5){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>password</b> para el usuario de m&aacute;s de 5 letras</td></tr>";
		document.getElementById("cabPass").innerHTML="<font color='red'>!Contrase&ntilde;a</font>";
		bTodoOK=false;
	}	

	//compruebo que ha escrito una verificacion del password
	if (Trim(document.frmDatos.txtPass2.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe <b>verificar el password</b> del usuario</td></tr>";
		document.getElementById("cabPass").innerHTML="<font color='red'>!Contrase&ntilde;a</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un pregunta
	if (Trim(document.frmDatos.txtPregunta.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe seleccionar una <b>pregunta para restablecer contrase&ntildea</b> para el usuario</td></tr>";
		document.getElementById("cabRestablecer").innerHTML="<font color='red'>!Restablecer Contrase&ntilde;a</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un biografia
	if (Trim(document.frmDatos.txtBiografia.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe introducir su <b>biografía</b></td></tr>";
		document.getElementById("cabBiografia").innerHTML="<font color='red'>!Biograf&iacute;a</font>";
		bTodoOK=false;
	}
	//compruebo que ha escrito un respuesta
	if (Trim(document.frmDatos.txtRespuesta.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe indicar una <b>respuesta para restablecer contrase&ntildea</b> para el usuario</td></tr>";
		document.getElementById("cabRestablecer").innerHTML="<font color='red'>!Restablecer Contrase&ntildea</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un nombre
	if (Trim(document.frmDatos.txtNombre.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>nombre</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}
	
	//compruebo que ha escrito un apellido
	if (Trim(document.frmDatos.txtApel1.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>apellido</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}
	
	//compruebo que ha escrito un domicilio
	if (Trim(document.frmDatos.txtDomicilio.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>domicilio</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un poblacion
	if (Trim(document.frmDatos.txtPoblacion.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>poblaci&oacute;n</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un provincia
	if (Trim(document.frmDatos.txtProvincia.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir una <b>provincia</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un cp
	if (Trim(document.frmDatos.txtCP.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>c&oacute;digo postal</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un nacionalidad
	if (Trim(document.frmDatos.txtNacionalidad.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe seleccionar una <b>nacionalidad</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un telefono
	if (Trim(document.frmDatos.txtTelf.value.length)==0){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir un <b>tel&eacute;fono</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}

	//compruebo que ha escrito un fecha de nacimiento
	if( Trim(document.frmDatos.txtDia.value.length)==0 || Trim(document.frmDatos.txtMes.value.length)==0 || Trim(document.frmDatos.txtAno.value.length)==0 ){
		sErrores=sErrores+"<tr><td class='error'>Debe escribir una <b>fecha de nacimiento</b> para el usuario</td></tr>";
		document.getElementById("cabDatos").innerHTML="<font color='red'>!Datos</font>";
		bTodoOK=false;
	}

	//compruebo que ha aceptado las condiciones legales
	if(!document.frmDatos.chkCondiciones.checked){
		sErrores=sErrores+"<tr><td class='error'>Debe aceptar las <b>condiciones legales</b> para el usuario</td></tr>";
		document.getElementById("cabCondiciones").innerHTML="<font color='red'>!Aceptar condiciones</font>";
		bTodoOK=false;
	}



	if (!bEmailOK){//el Email era erroneo o nulo
			bTodoOK=false;
			document.getElementById("cabLogin").innerHTML="<font color='red'>!Identificador</font>";
	}

	//si se han encontrado errores debo mostrarlos
	if (bTodoOK==false){
		document.getElementById("Errores").innerHTML=sErroresIni + sErrores + sErroresFin;
		location.href="#";
		return false;
	}
	
	return true;
}

function Limpia(){
//Propósito:	Restaurar las cadenas de error a su forma original
//Efectos:		Reemplaza los posibles mensajes  de error por los textos originales de los campos
	
	document.getElementById("Errores").innerHTML="";
	document.getElementById("cabLogin").innerHTML="<strong>Escriba su Identificador</strong>";
	document.getElementById("cabPass").innerHTML="<strong>Elija una contrase&ntilde;a</strong>";	
	document.getElementById("cabRestablecer").innerHTML="<strong>Pregunta para restablecer contrase&ntildea</strong> ";
	document.getElementById("cabDatos").innerHTML="<strong>Sus datos</strong>";	
	document.getElementById("cabCondiciones").innerHTML="<strong>Aceptar condiciones</strong>";	
	document.getElementById("cabBiografia").innerHTML="<strong>Biograf&iacute;a</strong>";	
}