//*****************************************************************
//
// Libreria Javascript para Chequeo de forms          BWD 4-4-2001
//
//*****************************************************************

/*parametros: 	-elemento sobre el que se aplica el checkform
				-formato que ha de tomar el mensaje de error (0=sin formato, ventana javascript, 1=con formato, layer html)
				-clase CSS de los inputs en estado normal
				-clase CSS de los inputs en estado de error
*/
function checkForm(element,formato,classInput,classError)
{
	//propiedades de la clase
	if(classInput===undefined) 	//especifica la clase css a aplicar en los inputs cuando no hay error, por defecto "formInput"
		this.claseForm = "formInput";
	else
		this.claseForm = classInput;
	if(classInput===undefined)
		this.claseError = "formError";  //especifica la clase css a aplicar en los inputs cuando aparece un error, por defecto "formError"
	else
		this.claseError =  classError;
	this.controldeflujo = 0; //indicador sobre si ha habido error 
	this.element = element; //elemento(formulario) sobre el que se se aplica el checkform
	this.formato = formato; //formato en el que se mostraran los errores (0=javascript; 1 = layers)
	
	//funciones de la clase
	this.ponEstiloError = ponEstiloError;
	this.limpiarEstilos = limpiarEstilos;
	this.PonFocus = PonFocus;
	this.ChequeoVacio = ChequeoVacio;
	this.ChequeoVacioList = ChequeoVacioList;
	this.ChequeoMail = ChequeoMail;
	this.ChequeoPassword = ChequeoPassword;
	this.ChequeoNumeros = ChequeoNumeros;
	this.ChequeoCombos = ChequeoCombos;
	this.ChequeoLongitud = ChequeoLongitud;
	this.ChequeoCamposTexto = ChequeoCamposTexto;
	this.ChequeoFecha = ChequeoFecha;
	this.CalculaNIF = CalculaNIF;
	this.CalculaNIE = CalculaNIE;
	this.muestraError = muestraError;
	this.end = end;	
	
	//limpiamos los estilos de todos los imputs, para luego poner el estilo de error en el que contenga error (si se da el caso)
	//this.limpiarEstilos(element);
	
}

//FUNCIONES PRIVADAS (utilizadas solo en la clase)

//crea dinamicamente la capa dónde se mostrara el mensaje de error
function creaCapa(mensaje)
{
	//ojo, en explorer si la capa está creada no modificará el texto de explicación del error. Hay que diferenciar si la capa ha sido creada o no
	//si ha sido creada, solo hay que modificar el HTML, en caso contrario se debe crear la capa tambien
	
	if(document.getElementById("errorLayer")==null) //la capa no existe, hay que crearla
	{
		newDiv = document.createElement("div");
		newDiv.setAttribute("id","errorLayer");
		newDiv.setAttribute("name","errorLayer");
	}
	
	codigo = '<p>&nbsp;</p>  <p>&nbsp;</p>  <table border="0" align="center" cellpadding="0" cellspacing="0">    <tr>      <td class="errSupIzq">&nbsp;</td>      <td class="errPixelSup">&nbsp;</td>      <td class="errSupDcha">&nbsp;</td>    </tr>    <tr>      <td class="errPixelIzq">&nbsp;</td>      <td class="errTexto"><p><img src="lib/checkForm/images/errorIcon.png" width="36" height="36" align="middle" /><span class="errTitulo"> ERROR</span></p>        <p align="center">'+mensaje+'</p>      <p onclick="document.getElementById(\'errorLayer\').style.visibility=\'hidden\'"><a href="#">Cerrar</a></p></td>      <td class="errPixelDcha">&nbsp;</td>    </tr>    <tr>      <td class="errInfIzq">&nbsp;</td>      <td class="errPixelInf">&nbsp;</td>      <td class="errInfDcha">&nbsp;</td>    </tr>  </table>  <p align="center" class="Estilo1">&nbsp;</p>';
	
	if(document.getElementById("errorLayer")==null) //la capa no existe
	{
		newDiv.innerHTML = codigo;
		document.body.appendChild(newDiv);
	}
	else //la capa existe, solo hay que modificar el codigo HTML de la capa
	{
		document.getElementById("errorLayer").innerHTML = codigo;	
	}
}

//devuelve a todos los inputs del elemento sobre el que se aplica el checkform su valor de clase css original
function limpiarEstilos(element)
{
	for(x=0;x<document.getElementById(element).length;x++)
	{
		anchura = document.getElementById(element).elements[x].style.width;
		alert(document.getElementById(element).elements[x].style.width);
		document.getElementById(element).elements[x].className = "";
		document.getElementById(element).elements[x].style['background-color'] = "#FFFFFF";
		document.getElementById(element).elements[x].style['width'] = anchura;
		document.getElementById(element).elements[x].style['height'] = "80%";
		document.getElementById(element).elements[x].style['border'] = "0px";
	}
}

//impone al input que contiene el error el valor de la clase css que representa al error
function ponEstiloError(field,classError)
{
	field.className = classError;
}

//pone el focus en el campo donde se ha producido el error
function PonFocus(Objeto){
   Objeto.focus();
   Objeto.blur();
   Objeto.select();
}

//en modo de errores formateados(error mostrado en capa), crea la capa y posteriormente la muestra 
function muestraError(mensaje)
{
	creaCapa(mensaje);  //creamos la capa donde se mostrará el error, pasando el texto explicativo del error
	document.getElementById("errorLayer").style.visibility = "visible"; //mostramos la capa de error
}


//FUNCIONES PUBLICAS (METODOS DE LA CLASE)

//si no se han producido errores, hace un submit del formulario sobre el que se hace el checkform
function end()
{
	if (this.controldeflujo==0)
	{
		document.getElementById(this.element).submit();
	}
}

function ChequeoVacio(field,bufalo,classError){
  if (this.controldeflujo==0){
    if (field.value == "") {
		if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			if(bufalo=="Voto")
			{
				this.muestraError("Debes votar por alguno de los candidatos haciendo clic encima su imagen.");
			}
			else
			{
				this.muestraError("El campo de "+bufalo+" est&aacute; vac&iacute;o por favor rell&eacute;nelo");
			}
		}
		else
		{
			alert("El campo '"+bufalo+"' está vacío por favor rellénelo");
       		PonFocus(field);
		}
	this.controldeflujo=1;
    }
  }
}

function ChequeoVacioList(field,bufalo,classError){
  if (this.controldeflujo==0){
    if (field.options.length == 0) 
	{
		if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			this.muestraError("El campo de "+bufalo+" está vacío por favor rellénelo");
		}
		else
		{
			alert("El campo '"+bufalo+"' está vacío por favor rellénelo");
       		PonFocus(field);
		}
		this.controldeflujo=1;
    }
  }
}


function ChequeoMail(field,bufalo,classError){
 if (this.controldeflujo==0){
   if ((field.value.indexOf("@") == -1)  || (field.value.indexOf(".") == -1 ))
   {
	   if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			this.muestraError("El "+bufalo+" parece no ser correcto.\nPor favor repásalo");
		}
		else
		{
			alert("El '"+bufalo+"' parece no ser correcto.\nPor favor repásalo");
       		PonFocus(field);
		}
	this.controldeflujo=1;
   }
 }
}

function ChequeoPassword(password,repassword,classError){
 if (this.controldeflujo==0){
   if (password!=repassword){
	   if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			this.muestraError("Por favor asegúrate de que has repetido correctamente la contraseña");
		}
		else
		{
			alert("Por favor asegúrate de que has repetido correctamente la contraseña");
       		PonFocus(field);
		}
	 this.controldeflujo=1;
   }
 }
}

function ChequeoNumeros(field,bufalo,classError){
 if (this.controldeflujo==0){
    var ok;
    var c1;
    estado = "inicio"; 
    c1 = 0;
    var str1;
    str1 = field.value;
    while (estado=="inicio"){
        if (str1.substring(c1,c1+1)!='1' &&
            str1.substring(c1,c1+1)!='2' &&
            str1.substring(c1,c1+1)!='3' &&
            str1.substring(c1,c1+1)!='4' &&
            str1.substring(c1,c1+1)!='5' &&
            str1.substring(c1,c1+1)!='6' &&
            str1.substring(c1,c1+1)!='7' &&
            str1.substring(c1,c1+1)!='8' &&
            str1.substring(c1,c1+1)!='9' &&
            str1.substring(c1,c1+1)!='0')
                {estado="kaka";};
      	c1++;
	if (c1>str1.length) {
	   estado="final";
      return(true);
	   this.controldeflujo=1;
	}
    }
    if (estado=="kaka") {
		if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			this.muestraError("El campo "+bufalo+" debe ser un número");
		}
		else
		{
			alert("El campo "+bufalo+" debe ser un número");
       		PonFocus(field);
		}
        
		  this.controldeflujo=1;
        return(false);
    }
 }
}

function ChequeoCombos(field,bufalo,classError)
 {
 if (this.controldeflujo==0){
 if (field.value=="-" ) 
 	{
		if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			this.muestraError("Debes seleccionar una opción del desplegable en " + bufalo);
		}
		else
		{
			alert("Debes seleccionar una opción del desplegable en " + bufalo);
       		PonFocus(field);
		}
	this.controldeflujo=1;
	}
 }
}

function ChequeoLongitud(field,bufalo,longitud,classError) 
{
	if (this.controldeflujo==0)
	{ 	
		if (field.value.length<longitud) 
  		{
			if(this.formato)
			{
				//this.ponEstiloError(field,classError);
				this.muestraError("El campo '" + bufalo + "' debe de tener como mínimo "+longitud+" caracteres");
			}
			else
			{
				alert("El campo '" + bufalo + "' debe de tener como mínimo "+longitud+" caracteres");
    	   		PonFocus(field);
			} 
			this.controldeflujo=1;
  		}	
  	}
}
 
 function ChequeoCamposTexto(field,bufalo,classError){
 if (this.controldeflujo==0){ 
  if (field.value.length>1000 && controldeflujo==0) 
 	{
		if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			this.muestraError("Has excedido el número máximo de caracteres disponibles para el campo" + bufalo);
		}
		else
		{
			alert("Has excedido el número máximo de caracteres disponibles para el campo" + bufalo);
       		PonFocus(field);
		}
	this.controldeflujo=1;
 }	}
}


function ChequeoFecha(ob_dia,ob_mes,ob_anyo,bufalo,classError)
{
		b=new Date();
		a=b.getYear();
		if (a>100 && a<110)
		{
			a=(a-100)+2000;
		}
		Anyo1 = ob_anyo.value;
		if (Anyo1 != "" && this.controldeflujo==0)
		{
			ChequeoNumeros(ob_anyo,bufalo);
		if (this.controldeflujo == 0)
		{
			if ((Anyo1 < 1900) || (Anyo1 > a))
			{
					if(this.formato)
					{
						//this.ponEstiloError(field,classError);
						this.muestraError("El año debe ser entre 1900 y "+a+" en "+bufalo);
					}
					else
					{
						alert("El año debe ser entre 1900 y "+a+" en "+bufalo);
						PonFocus(ob_anyo);
					}
					this.controldeflujo=1;
			}
		}
	}
	
	dia=ob_dia.value;
	mes=ob_mes.value;
	anyo=ob_anyo.value;
	if (this.controldeflujo==0 && anyo!="")
	{
		if ((dia>=31 && mes==4) || (dia>=31 && mes==2) || (dia>=31 && mes==6) || (dia>=31 && mes==9) || (dia>=31 && mes==11))
		{
			if(this.formato)
			{
				//this.ponEstiloError(field,classError);
				this.muestraError("El día está mal con el mes "+mes+" en "+bufalo);
			}
			else
			{
				alert("El día está mal con el mes "+mes+" en "+bufalo); 
				PonFocus(ob_dia);
			}
			this.controldeflujo=1;
		}
		if (dia>=30 && mes==2)
		{
			if(this.formato)
			{
				//this.ponEstiloError(field,classError);
				this.muestraError("El día está mal con el mes "+mes+" en "+bufalo);
			}
			else
			{
				alert("El día está mal con el mes "+mes+" en "+bufalo); 
				PonFocus(ob_dia);
			}
			this.controldeflujo=1;
		}
		if (dia>=29 && mes==2 && (anyo%4)!=0)
		{
			if(this.formato)
			{
				//this.ponEstiloError(field,classError);
				this.muestraError("El día está mal con el mes "+mes+" y el año "+anyo+" en "+bufalo);
			}
			else
			{
				alert("El día está mal con el mes "+mes+" y el año "+anyo+" en "+bufalo); 
				PonFocus(ob_dia);
			}
			this.controldeflujo=1;
		} 
	}
}

function CalculaNIF(Dni,letra,classError){
 if (this.controldeflujo==0){ 	
	var clave=new Array("T","R","W","A","G","M","Y","F","P","D","X"
			   ,"B","N","J","Z","S","Q","V","H","L","C",
			    "K","E");
	if (isNaN(Dni)){
		
		if(this.formato)
		{
			//this.ponEstiloError(field,classError);
			this.muestraError("El DNI debe estar formado exclusivamente por números");
		}
		else
		{
			alert("El DNI debe estar formado exclusivamente por números");
			PonFocus(ob_dia);
		}
		this.controldeflujo=1;
	}
	else{
		if (clave[Dni%23]!=letra.toUpperCase()){
			
			if(this.formato)
			{
			//	this.ponEstiloError(field,classError);
				this.muestraError("El DNI no parece ser válido.\nRepasa la entrada de números y la letra.");
			}
			else
			{
				alert("El DNI no parece ser válido.\nRepasa la entrada de números y la letra.");
				PonFocus(ob_dia);
			}
			this.controldeflujo=1;
		}
       }
  }
}

function CalculaNIE(Dni,letra,classError){
 if (this.controldeflujo==0){ 
	nie=Dni.substr(1);
	var clave=new Array("T","R","W","A","G","M","Y","F","P","D","X"
			   ,"B","N","J","Z","S","Q","V","H","L","C",
			    "K","E");
	if (isNaN(nie)){
		
		if(this.formato)
			{
				//this.ponEstiloError(field);
				this.muestraError("El NIE debe empezar por 'X' y seguidamente estar formado exclusivamente por números");
			}
			else
			{
				alert("El NIE debe empezar por 'X' y seguidamente estar formado exclusivamente por números");
				PonFocus(ob_dia);
			}
		this.controldeflujo=1;
	}
	else{
		if (clave[nie%23]!=letra.toUpperCase()){
			if(this.formato)
			{
				//this.ponEstiloError(field);
				this.muestraError("El NIE no parece ser válido.\nRepasa la entrada de números y la letra.");
			}
			else
			{
				alert("El NIE no parece ser válido.\nRepasa la entrada de números y la letra.");
				PonFocus(ob_dia);
			}
			this.controldeflujo=1;
		}
	}
 }
}

