// JavaScript Document

function camposLigados(){
  this.Switch=null;
  this.negativo=false;
  this.tipo=0; //0:input,select;1:radio,check
  this.campos=new Array();
  this.mensaje="";
}

er_mail=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
er_NIF=/^([0-9]{8}[a-zA-Z]$)|^([a-zA-Z][0-9]{8}$)/
er_telefono=/(^[1-9][0-9]{8}$)|(^\+[0-9]{1,2}[1-9][0-9]{8}$)|(^6[0-9]{4}$)/
er_codPostal=/^[0-9]{5}$/
er_n28=/^[0-9]{28}$/
er_nombre=/^[áéíóúÁÉÍÓÚa-zA-ZñÑçÇ][ñÑçÇáéíóúÁÉÍÓÚa-zA-Z ,]*$/
er_contri=/^[0-9áéíóúÁÉÍÓÚa-zA-ZñÑçÇ][0-9 ñÑçÇáéíóúÁÉÍÓÚa-zA-Z ,]*[, ]?[0-9 ñÑçÇáéíóúÁÉÍÓÚa-zA-Z ,]*$/
er_numero=/^[0-9]+$/
er_dinero=/^[0-9]*([.,][0-9]*)?$/
er_dia=/(^0?[1-9]$)|(^[1-2][0-9]$)|(^3[01]$)/
er_mes=/(^0?[1-9]$)|(^1[012]$)/
er_anno=/(^19[789][0-9]$)|(^2[0-9]{3}$)/
er_expedi=/^[0-9]+[\/-]([0-9]{4}$)/
er_concepto=/^[áéíóúÁÉÍÓÚa-zA-ZñÑçÇ][ñÑçÇáéíóúÁÉÍÓÚa-zA-Z. ,]*$/
validaciones=new Array();
validaciones["mail"]=new Array(er_mail,'Asegurese de que introduce una dirección de correo electrónico correcta')
validaciones["NIF"]=new Array(er_NIF,'Asegurese de que incluye un NIF o CIF correctos (8 digitos) con su letra correspondiente')
validaciones["telefono"]=new Array(er_telefono,'Asegurese de que introduce un número de teléfono correcto')
validaciones["codPostal"]=new Array(er_codPostal,'Asegurese que inserta 5 dígitos en este campo')
validaciones["n28"]=new Array(er_n28,'Asegurese que introduce un número de 28 dígitos en este campo')
validaciones["cadena"]=new Array(er_nombre,'Asegurese de no introducir caracteres extraños en este campo')
validaciones["numero"]=new Array(er_numero,'Asegurese de  introducir solo números en este campo')
validaciones["dinero"]=[er_dinero,'Asegurese de que inserta un importe correcto en este campo']
validaciones["dia"]=[er_dia,'El dia debe estar entre 1-31 ']
validaciones["mes"]=[er_mes,'El mes debe estar entre 1-12']
validaciones["anno"]=[er_anno,'El año debe tener 4 digitos']
validaciones["contri"]=[er_contri,'Asegurese de no introducir caracteres extraños en este campo']
validaciones["expediente"]=[er_expedi,'El expediente debe ser de la forma n/aaaa ó n-aaaa']
validaciones["concepto"]=new Array(er_concepto,'Asegurese de no introducir caracteres extraños en este campo')

err_fecha="";
err_camp=null;
err_fecha_camp=-1;
//campos=null;
vCamposLigados=new Array();
vCamposLigados2=new Array();
function validar(er,cadena,obligatorio){
	
	if ((er==null)||(er==""))
		if (cadena=="")
		   return false;
		else 
		  return true;  
		    
	if (cadena=="")
		if (!obligatorio)
		   return true;
		else
		   return false;  
	if (er.substr(0,2)=="n?")
	  { aux="/^[0-9]{"+er.substr(2)+"}$/"
	    expReg=null
	    eval("expReg="+aux);
		if (expReg.test(cadena))
			  return true;//
		else 
		  return false;		
	  }

	if (er.substr(0,2)=="n|")
	  { 
		aux=er.substr(2).split(":");
	    if ((isNaN(cadena))||(aux.length!=2))
			return false;
	    else
			if ((cadena>=aux[0])&&(cadena<=aux[1]))
			  return true;
			else
			  {
			  return false;		
			  }
	  }
	  
	if (validaciones[er][0].test(cadena))
		  return true;//alert('0k');
	else 
	  return false;//alert(validaciones[er][1])  

}

function vali1(formu,campos){
  for (i=0;i<formu.length-1;i++)
   { 
	 nombre=formu.elements[i].name
	 if (campos[nombre])
	 {
	     	cad=formu.elements[i].value;
	 		obligatorio=(campos[nombre][1]=='O')
	        er=campos[nombre][2]
	        if ((obligatorio)||((er!=null)&&(er!=""))){
		       if (!validar(er,cad,obligatorio))
			    { 
			       alert('Error en el campo '+campos[nombre][0]);
			       return false;
			    }  
	        }
	 }	
   }
   return true;	  
}

function vali_fecha(dia,mes,anno){
   if ((anno<1970)||(anno>2100))
   {  err_fecha_camp=2
	  err_fecha="El año debe estar entre 1970 y 2100";  
      return false;
   }
   if ((mes<1)||(mes>12))
   {err_fecha_camp=1
	  err_fecha="El mes debe estar entre 1 y 12";   
      return false;
   } 	  
   bi=(anno%4==0)?1:0;
   diaMes=(mes==2)?28+bi:(((mes==4)||(mes==6)||(mes==9)||(mes==11))?30:31);  

   if ((dia<1)||(dia>diaMes))
	  {err_fecha_camp=0
	    err_fecha="Para este mes el día debe estar entre 1 y "+diaMes;
	    return false;
	  }
   return true;	  	  	  
}
function vali(formu,campos,fecha){
var condicion=false;
  var j=0;
  var encontrado=false;
  for (i=0;i<vCamposLigados2.length;i++)
  {
	encontrado=false;
	for (j=0;j<vCamposLigados2[i].length;j++)
	{
	    if ((vCamposLigados2[i][j].value!="")&&(vCamposLigados2[i][j].value!=null))
		  encontrado=true;
	}	  
    if (encontrado)
	  for (j=0;j<vCamposLigados2[i].length;j++)	  		  	
		{
		campos[vCamposLigados2[i][j].name][1]="O";}
	else

	  for (j=0;j<vCamposLigados2[i].length;j++)
       {
		campos[vCamposLigados2[i][j].name][1]="N";	  		
	}	
  }

  for (i=0;i<vCamposLigados.length;i++)
  {
    T=vCamposLigados[i].tipo
	if (vCamposLigados[i].negativo)
	   condicion=(((T==0)&&(vCamposLigados[i].Switch.value==""))||((T==1)&&(!vCamposLigados[i].Switch.checked)))
	else
       condicion=(((T==0)&&(vCamposLigados[i].Switch.value!=""))||((T==1)&&(vCamposLigados[i].Switch.checked)))	
	if (condicion)
	  for (j=0;j<vCamposLigados[i].campos.length;j++)
	  	campos[vCamposLigados[i].campos[j].name][1]="O";
	else
	  for (j=0;j<vCamposLigados[i].campos.length;j++)
	  	campos[vCamposLigados[i].campos[j].name][1]="N";	  	
		
  }
  for (i=0;i<formu.length;i++)
   { 
	 nombre=formu.elements[i].name
	 if (campos[nombre])
	 {
           if (formu.elements[i].disabled)
		       formu.elements[i].value=""
	     	cad=formu.elements[i].value;
	 		obligatorio=(campos[nombre][1]=='O')
	        er=campos[nombre][2]
			
	        if ((obligatorio)&&(cad==""))
			  {
			   alert("El campo \""+campos[nombre][0]+"\" es obligatorio.\n Rellenelo y vuelva a intentarlo")
			       formu.elements[i].focus();
				   if(formu.elements[i].type.toLowerCase=='text')
				   		formu.elements[i].select();
			   return false;
			  }
			if ((obligatorio)||((er!=null)&&(er!=""))){
		       if (!validar(er,cad,obligatorio))
			    {  
				   switch(er.substr(0,2)){
				     case "n?":
					    mensajeError="Asegurese que introduce un número de "+er.substr(2)+" dígitos"
						break;
				     case "n|":
					    unDia=new Date();
						mensajeError="Asegurese que introduce un número ejercicio correcto comprendido entre "+(unDia.getFullYear()-10)+" y "+unDia.getFullYear()					 		
						break;
					default:	
						mensajeError=validaciones[er][1]
						break;
						}
				   err_camp=formu.elements[i]
			       alert('Error en el campo "'+campos[nombre][0]+"\".\n"+mensajeError);
			       formu.elements[i].focus();
				   formu.elements[i].select();
				   return false;
			    }  
	        }

	 }	
   }
   if ((fecha!=null)&&(fecha!="")){
		variasFechas=(fecha[0][0])?true:false;
		if (variasFechas)
		   for (i=0;i<fecha.length;i++)
			{  
			  obligatorio=(fecha[i][3].toLowerCase()=="o")
    	  	  fechaVacia=(formu[fecha[i][0]].value=="")&&(formu[fecha[i][1]].value=="")&&(formu[fecha[i][2]].value=="");
			  if ((obligatorio)||(!fechaVacia))
			  {
			    if (validar('numero',formu[fecha[i][0]].value,true))
				  	 v_dia=formu[fecha[i][0]].value
			    else{
			         if (formu[fecha[i][0]].value=="")
					    alert('error en la fecha\n'+'Falta el día');
					 else
					    alert('error en la fecha\n'+'Este campo debe ser numérico');
                     formu[fecha[i][0]].focus();
                     formu[fecha[i][0]].select();
                     return false;
			    }				     
			    if (validar('numero',formu[fecha[i][1]].value,true))
					 v_mes=formu[fecha[i][1]].value
			    else{
			         if (formu[fecha[i][1]].value=="")
					    alert('error en la fecha\n'+'Falta el mes');
					 else
					    alert('error en la fecha\n'+'Este campo debe ser numérico');
                     formu[fecha[i][1]].focus();
                     formu[fecha[i][1]].select();
                     return false;
				}				     
				     
			    if (validar('numero',formu[fecha[i][2]].value,true))
					 v_ano=formu[fecha[i][2]].value
			    else{
			         if (formu[fecha[i][2]].value=="")
					    alert('error en la fecha\n'+'Falta el año');
					 else
					    alert('error en la fecha\n'+'Este campo debe ser numérico');
                     formu[fecha[i][2]].focus();
                     formu[fecha[i][2]].select();
					 return false;
				}				     
			 		 				    		 
			    if (!vali_fecha(v_dia,v_mes,v_ano))
			    {
                  formu[fecha[i][err_fecha_camp]].focus();
                  formu[fecha[i][err_fecha_camp]].select();
                  alert('error en la fecha\n'+err_fecha);				
				  return false;
			    } 	
	          }		
			}
		
		else
			{  
			  obligatorio=(fecha[3].toLowerCase()=="o")
			  if ((!obligatorio))
			      if ((formu[fecha[0]].value=="")&&(formu[fecha[1]].value=="")&&(formu[fecha[2]].value==""))
			         return true;			  
			  if (validar('numero',formu[fecha[0]].value,true))
{					 v_dia=0;v_dia=formu[fecha[0]].value;}
			  else{
			         if (formu[fecha[0]].value=="")
					    alert('error en la fecha\n'+'Falta el día');
					 else
					    alert('error en la fecha\n'+'Este campo debe ser numérico');
                     formu[fecha[0]].focus();
                     formu[fecha[0]].select();
                     return false;
			  }				     
			  if (validar('numero',formu[fecha[1]].value,true))
                  {v_mes=0;
				    v_mes=formu[fecha[1]].value}
			  else{
			         if (formu[fecha[1]].value=="")
					    alert('error en la fecha\n'+'Falta el mes');
					 else
					    alert('error en la fecha\n'+'Este campo debe ser numérico');
                     formu[fecha[1]].focus();
                     formu[fecha[1]].select();
                     return false;
				}				     
				     
			  if (validar('numero',formu[fecha[2]].value,true))
					 {v_ano=0;v_ano=formu[fecha[2]].value}
			  else{
			         if (formu[fecha[2]].value=="")
					    alert('error en la fecha\n'+'Falta el año');
					 else
					    alert('error en la fecha\n'+'Este campo debe ser numérico');
                     formu[fecha[2]].focus();
                     formu[fecha[2]].select();
					 return false;
				}				     
			 		 				    		 
			  if (!vali_fecha(v_dia,v_mes,v_ano))
			  {
                formu[fecha[err_fecha_camp]].focus();
                formu[fecha[err_fecha_camp]].select();
                alert('error en la fecha\n'+err_fecha);				
				return false;
			  } 			  
			}			  		   		
   }
   return true;	  
}
