/**************************************************************************************************************************************/
//     Definición de variables
/**************************************************************************************************************************************/
var dcwCharLet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // letras
var dcwCharNum="0123456789";                                           // numeros
var dcwCharCon="§#!|ºª\"\\·$%&/()=?¿¡{}+*'[],;:<>¬€¨´`^~";           // control
var dcwCharEsp="ñÑçÇàèìòùäëïöüáéíóúÀÈÌÒÙÄËÏÖÜÁÉÍÓÚ";                   // especiales
var dcwCharPun=".,;:";                                                 // puntuacion
var dcwCharEspa=" ";                                                   // espacio

var dcwCampForm=new Array();   // campos del formulario (general)
var dcwNameForm;               // nombre del formulario

// variables del campo CHECKBOX
var dcwCampCheck=new Array();   // campos del formulario
var dcwContCampCheck=0;         // contador
var dcwPropCheck=new Array();   // propiedades
var dcwVarCheck="";             // variables
var dcwSiCheck=false;           // validación

// variables del campo MAIL
var dcwCampMail=new Array();    // campos del formulario
var dcwPropMail=new Array();    // propiedades
var dcwVarMail="";              // variables
var dcwSiMail=false;            // validación

// variables del campo TEXT
var dcwCampText=new Array();    // campos del formulario
var dcwContCampText=0;          // contador
var dcwPropText=new Array();    // propiedades
var dcwVarText="";              // variables
var dcwSiText=false;            // validación

// variables del campo IGUAL
var dcwCampIgual=new Array();   // campos del formulario
var dcwPropIgual=new Array();   // propiedades
var dcwVarIgual="";             // variables
var dcwSiIgual=false;           // validación

// variables del campo NUMERO
var dcwCampNumero=new Array();  // campos del formulario
var dcwPropNumero=new Array();  // propiedades
var dcwVarNumero="";            // variables
var dcwSiNumero=false;          // validación

// variables del campo CARACTER
var dcwCampChar=new Array();// campos del formulario
var dcwPropChar=new Array();// propiedades
var dcwVarChar="";          // variables
var dcwSiChar=false;        // validación

// variables del campo DNI
var dcwCampDni=new Array();     // campos del formulario
var dcwPropDni=new Array();     // propiedades
var dcwVarDni="";               // variables
var dcwSiDni=false;             // validación

/**************************************************************************************************************************************/
//     Validación de un formulario
//     nombre formulario, tipo de campos, propiedades de campos
//     retorna false o envia el formulario
/**************************************************************************************************************************************/
function dcwValidarForm()
 {

// inicializamos las variables
 dcwVarIgual="";
 dcwVarText="";
 dcwVarMail="";
 dcwVarCheck="";
 dcwVarNumero="";
 dcwVarChar="";
 dcwVarDni="";
 dcwNameForm=dcwValidarForm.arguments[0];
 dcwCampForm=dcwValidarForm.arguments[1].split(",");

// asignamos un array de propiedades según el campo
 for(i=0;i<dcwCampForm.length;i++)
  {
  if(dcwCampForm[i]=="text"){dcwPropText=dcwValidarForm.arguments[2+i].split(",");}
  if(dcwCampForm[i]=="checkbox"){dcwPropCheck=dcwValidarForm.arguments[2+i].split(",");}
  if(dcwCampForm[i]=="mail"){dcwPropMail=dcwValidarForm.arguments[2+i].split(",");}
  if(dcwCampForm[i]=="igual"){dcwPropIgual=dcwValidarForm.arguments[2+i].split(",");}
  if(dcwCampForm[i]=="numero"){dcwPropNumero=dcwValidarForm.arguments[2+i].split(",");}
  if(dcwCampForm[i]=="caracter"){dcwPropChar=dcwValidarForm.arguments[2+i].split(",");}
  if(dcwCampForm[i]=="dni"){dcwPropDni=dcwValidarForm.arguments[2+i].split(",");}
  }

//  --> Validacion de TEXT <--
 for(i=0;i<dcwPropText.length;i++){dcwVarText+=",'"+dcwPropText[i]+"'";}
 if(!eval("dcwValText("+dcwVarText.substring(1)+")")){dcwSiText=false;return false;}
 else{dcwSiText=true;}

//  --> Validacion de MAIL <--
 for(i=0;i<dcwPropMail.length;i+=2)
  {
  dcwVarMail=eval("document."+dcwNameForm+"."+dcwPropMail[i]+".value");

  for(c=0;c<dcwVarMail.length;c++)
  {
  	if(dcwVarMail.charAt(c)=="'")
	{
		alert("This "+dcwPropMail[i+1]+" is not correct. It can not contain the character '.");
		eval("document."+dcwNameForm+"."+dcwPropMail[i]+".focus()");
		dcwSiMail=false;
		return false;
	}
  }

  dcwVarMail="'"+eval("document."+dcwNameForm+"."+dcwPropMail[i]+".value")+"'";
  if(!eval("dcwValMail("+dcwVarMail+")"))
   {
   alert("This "+dcwPropMail[i+1]+" is not correct. Please, check it.");
   eval("document."+dcwNameForm+"."+dcwPropMail[i]+".focus()");
   dcwSiMail=false;
   return false;
   }
  else{dcwSiMail=true;}
  }

//  --> Validacion de CHECKBOX <--
 for(i=0;i<dcwPropCheck.length;i++){dcwVarCheck+=",'"+dcwPropCheck[i]+"'";}
 if(!eval("dcwValCheckBox("+dcwVarCheck.substring(1)+")")){dcwSiCheck=false;return false;}
 else{dcwSiCheck=true;}
 
//  --> Validacion de NUMERO <--
 for(i=0;i<dcwPropNumero.length;i+=3)
  {
  dcwVarNumero="'"+eval("document."+dcwNameForm+"."+dcwPropNumero[i]+".value")+"',"+dcwPropNumero[i+2];
  if(!eval("dcwValNumero("+dcwVarNumero+")"))
   {
   alert("Field "+dcwPropNumero[i+1]+" is not correct. Please, don't input empty spaces neither special characters.");
   eval("document."+dcwNameForm+"."+dcwPropNumero[i]+".focus()");
   dcwSiNumero=false;
   return false;
   }
  else{dcwSiNumero=true;}
  }

// --> Validación de CARACTER <--
 for(i=0;i<dcwPropChar.length;i+=3)
  {
  dcwVarChar="'"+eval("document."+dcwNameForm+"."+dcwPropChar[i]+".value")+"',"+dcwPropChar[i+2]+",'algun'";
  if(eval("dcwValCaracter("+dcwVarChar+")"))
   {
   alert("El campo "+dcwPropChar[i+1]+" no es correcto.");
   eval("document."+dcwNameForm+"."+dcwPropChar[i]+".focus()");
   dcwSiChar=false;
   return false;
   }
  else{dcwSiChar=true;}
  }

//  --> Validacion de DNI <--
 for(i=0;i<dcwPropDni.length;i+=3)
  {
  dcwVarDni="'"+eval("document."+dcwNameForm+"."+dcwPropDni[i]+".value")+"','"+eval("document."+dcwNameForm+"."+dcwPropDni[i+1]+".value")+"'";
  if(!eval("dcwValDni("+dcwVarDni+")"))
   {
   alert("El campo "+dcwPropDni[i+2]+" no es correcto.");
   eval("document."+dcwNameForm+"."+dcwPropDni[i]+".focus()");
   dcwSiDni=false;
   return false;
   }
  else{dcwSiDni=true;}
  }

  
//  --> Validacion de IGUAL <--
 for(i=0;i<dcwPropIgual.length-1;i++)
 {
 	dcwVarIgual+=",'"+eval("document."+dcwNameForm+"."+dcwPropIgual[i]+".value")+"'";
	iguales=eval("document."+dcwNameForm+"."+dcwPropIgual[i]+".value")
	for(c=0;c<iguales.length;c++)
	{
		if(iguales.charAt(c)=="'")
		{
		alert("El campo "+dcwPropIgual[dcwPropIgual.length-1]+" no es correcto. no puede contener el caracter '.");
		eval("document."+dcwNameForm+"."+dcwPropIgual[i]+".focus()");
		dcwSiIgual=false;
		return false;
		}
	}
}

 if(!eval("dcwValIgual("+dcwVarIgual.substring(1)+")"))
  {
  for(i=0;i<dcwPropIgual.length-1;i++){eval("document."+dcwNameForm+"."+dcwPropIgual[i]+".value=''");}
  eval("document."+dcwNameForm+"."+dcwPropIgual[0]+".focus()");
  alert("Los valores de los campos "+dcwPropIgual[dcwPropIgual.length-1]+" han de coincidir");
  dcwSiIgual=false;
  return false;
  }
 else{dcwSiIgual=true;}

  
 // si se cumple lo siguiente enviamos el formulario
 if((!dcwSiText && dcwValidarForm.arguments[1].indexOf("text")>0) ||
    (!dcwSiCheck && dcwValidarForm.arguments[1].indexOf("checkbox")>0) ||
	(!dcwSiIgual && dcwValidarForm.arguments[1].indexOf("igual")>0) ||
	(!dcwSiMail && dcwValidarForm.arguments[1].indexOf("mail")>0) ||
	(!dcwSiNumero && dcwValidarForm.arguments[1].indexOf("numero")>0) ||
	(!dcwSiChar && dcwValidarForm.arguments[1].indexOf("caracter")>0) ||
	(!dcwSiDni && dcwValidarForm.arguments[1].indexOf("dni")>0)){return false;}
 else{eval("document."+dcwNameForm+".submit()");}

 }

/**************************************************************************************************************************************/
//     Validación del campo e-mail (comprueba arroba, último punto, extensión, caracteres especiales, espacios y caracteres de control)
//     m: string con el e-mail
//     retorna: true o false
/**************************************************************************************************************************************/
function dcwValMail(m)
 {if(m==""){return false;}
 else{if(m.indexOf("@")<1){return false;}
 else{if(m.lastIndexOf(".")<1){return false;}
 else{if(m.substring(m.lastIndexOf("."),m.length).length-1<2){return false;}
 else{if(m.substring(m.lastIndexOf("."),m.length).length-1>5){return false;}
 else{if(m.substring(m.indexOf("@"),m.lastIndexOf(".")).length-1<1){return false;}
 else{if(dcwValCaracter(m,dcwCharEspa,'algun')){return false;}
 else{if(dcwValCaracter(m,dcwCharEsp,'algun')){return false;}
 else{if(dcwValCaracter(m,dcwCharCon,'algun')){return false;}
 else{return true;}}}}}}}}}}

/**************************************************************************************************************************************/
//     Validación de campos de texto (comprueba que los campos no estén vacios)
//     nombres de campos, textos de campos
//     retorna: true o false
/**************************************************************************************************************************************/
function dcwValText()
 {

 dcwContCampText=0;
 dcwCampText=dcwValText.arguments;
 for(i=0;i<dcwCampText.length;i+=2)
  {

  if(eval("document."+dcwNameForm+"."+dcwCampText[i]+".value")!=""){dcwContCampText++;}
  else
   {
   alert("El campo "+dcwCampText[i+1]+ " es obligatorio.");
   eval("document."+dcwNameForm+"."+dcwCampText[i]+".focus()");
   return false;
   }
  }
 return true;
 }

/**************************************************************************************************************************************/
//     Validación de campos checkbox (comprueba que haya un mínimo de selecciones)
//     nombre nombres de campos, titulo de la selección, minimo campos rellenos
//     retorna: true o false
/**************************************************************************************************************************************/
function dcwValCheckBox()
 {
 dcwContCampCheck=0;
 dcwCampCheck=dcwValCheckBox.arguments;
 for(i=0;i<dcwCampCheck.length-2;i++){if(eval("document."+dcwNameForm+"."+dcwCampCheck[i]+".checked")){dcwContCampCheck++;}}
 if(dcwContCampCheck<dcwCampCheck[dcwCampCheck.length-1])
  {
  if(dcwCampCheck[dcwCampCheck.length-1]>1)
   {
   alert("You must select almost "+dcwCampCheck[dcwCampCheck.length-1]+" option in "+dcwCampCheck[dcwCampCheck.length-2]+".");
   return false;
   }
  else
   {
   alert("You must select the field "+dcwCampCheck[dcwCampCheck.length-2]+".");
   return false;
   }
  }
 else{return true;}
 }

/**************************************************************************************************************************************/
//     Validación de campos igual (comprueba que 2 ó más campos sean iguales)
//     textos a comparar
//     retorna: true o false
/**************************************************************************************************************************************/
function dcwValIgual()
 {
 dcwCampIgual=dcwValIgual.arguments;
 for(i=0;i<dcwCampIgual.length-1;i++)
  {
  if(dcwCampIgual[i]=="" || dcwCampIgual[i+1]==""){return false;}
  if(dcwCampIgual[i]!=dcwCampIgual[i+1]){return false;}
  }
 return true;
 }
 
/**************************************************************************************************************************************/
//     Validación de campos numero (comprueba que el campo sea un número de x dígitos)
//     numero,tamaño
//     retorna: true o false
/**************************************************************************************************************************************/
function dcwValNumero(numNum,numTam)
 {if(isNaN(numNum)){return false;}
 else{if(numNum.length!=numTam){return false;}
 else{return true;}}}

/**************************************************************************************************************************************/
//     Validación de caracteres (comprueba que el campo tenga los caracteres permitidos)
//     strCaracter: cadena a validar, tipoCaracter: tipo de caracter peermitido, cuantosCaracter: solo o algun
//     retorna: true o false
/**************************************************************************************************************************************/
function dcwValCaracter(strChar,tipoChar,cuantosChar)
 {
 if(cuantosChar=="solo"){for(c=0;c<strChar.length;c++){if(tipoChar.indexOf(strChar.charAt(c))==-1){return false;}}return true;}
 if(cuantosChar=="algun"){for(c=0;c<strChar.length;c++){if(tipoChar.indexOf(strChar.charAt(c))>-1){return true;}}return false;}
 }

/**************************************************************************************************************************************/
//     Validación de dni (comprueba que la letra corresponda al número)
//     numeroDni: numero de 8 digitos, letraDni: letra de 1 caracter
//     retorna: true o false
/**************************************************************************************************************************************/
function dcwValDni(numDni,letDni)
 {
 if(!dcwValNumero(numDni,8)){return false;}
 if(letDni.length!=1){return false;}
 var divisionDni=Math.floor(numDni/23);
 var res=divisionDni*23;
 var res=numDni-res;
 if(res==0){if(letDni=="T"||letDni=="t"){return true;};}
 if(res==1){if(letDni=="R"||letDni=="r"){return true;};}
 if(res==2){if(letDni=="W"||letDni=="w"){return true;};}
 if(res==3){if(letDni=="A"||letDni=="a"){return true;};}
 if(res==4){if(letDni=="G"||letDni=="g"){return true;};}
 if(res==5){if(letDni=="M"||letDni=="m"){return true;};}
 if(res==6){if(letDni=="Y"||letDni=="y"){return true;};}
 if(res==7){if(letDni=="F"||letDni=="f"){return true;};}
 if(res==8){if(letDni=="P"||letDni=="p"){return true;};}
 if(res==9){if(letDni=="D"||letDni=="d"){return true;};}
 if(res==10){if(letDni=="X"||letDni=="x"){return true;};}
 if(res==11){if(letDni=="B"||letDni=="b"){return true;};}
 if(res==12){if(letDni=="N"||letDni=="n"){return true;};}
 if(res==13){if(letDni=="J"||letDni=="j"){return true;};}
 if(res==14){if(letDni=="Z"||letDni=="z"){return true;};}
 if(res==15){if(letDni=="S"||letDni=="s"){return true;};}
 if(res==16){if(letDni=="Q"||letDni=="q"){return true;};}
 if(res==17){if(letDni=="V"||letDni=="v"){return true;};}
 if(res==18){if(letDni=="H"||letDni=="h"){return true;};}
 if(res==19){if(letDni=="L"||letDni=="l"){return true;};}
 if(res==20){if(letDni=="C"||letDni=="c"){return true;};}
 if(res==21){if(letDni=="K"||letDni=="k"){return true;};}
 if(res==22){if(letDni=="E"||letDni=="e"){return true;};}
 return false;
 }
  
/**************************************************************************************************************************************

E J E M P L O :
---------------

dcwValidarForm(
  'formulario', ---------------------------------------------> nombre del formulario.
  'text,checkbox,mail,igual,numero,caracter,dni',------------> tipo de campos a validar.
  'txt1,texto 1,txt2,texto 2', ------------------------------> campos de texto: nombre_del_campo,texto_a_mostrar_en_el_alert... (para que sean válidos han de tener algún caracter).
  'check1,check2,CHECKBOX,1', -------------------------------> campos de checkbox: nombres_de_los_campos,texto_a_mostrar_en_el_alert,mínimo_de_selecciones (para que sean válidos ha de haber un mínimo de selecciones).
  'mail1,correo 1,mail2,correo 2', --------------------------> campos de mail: nombre_del_campo,texto_a_mostrar_en_el_alert... (para que sean válidos han de tener texto antes y después de la arroba, 2 ó 3 caracteres después del último punto, no sirven caracteres especiales, ni de control, ni espacios).
  'pws1,pws2,IGUAL', ----------------------------------------> campos de igual: nombre_de_los_campos,texto_a_mostrar_en_el_alert (para que sean válidos han de ser todos los textos iguales).
  'tlf1,telefono 1,9,tlf2,telefono 2,9,cp,código postal,5', -> campos de numero: nombre_del_campo,texto_a_mostrar_en_el_alert,número_exacto_de_cifras... (para que sean válidos han de ser números de las cifras indicadas).
  'txt1,texto 1,dcwCharCon', --------------------------------> campos de caracter: nombre_del_campo,texto_a_mostrar_en_el_alert,tipo_de_caracter_prohibido... (para que sean válidos no han de tener los carácteres prohibidos).
  'dninum,dniletra,DNI' -------------------------------------> campos de dni: nombre_del_campo_numero,nombre_del_campo_letra,texto_a_mostrar_en_el_alert... (para que sean válidos ha de coincidir la letra con el numero).
);
   
Si se cumplen todos los requisitos se envia el formulario y si no se muestra un alert y se retorna FALSE.


O T R A S   F U N C I O N E S :
-------------------------------

dcwValText();
dcwValCheckBox();
dcwValMail();
dcwValIgual();
dcwValNumero();
dcwValCaracter();
dcwValDni();

**************************************************************************************************************************************/

function valida_tel(tel, minimo)
{
	if(isNaN(tel))
	{return false;}
	else
	{
	 if( tel.length >= minimo )
	 { return true; }
	 else{ return false; }
	}
}  