function hideshow(which) {
	if (!document.getElementById) {	return; }
	if (which.style.visibility=="visible") {
		which.style.visibility="hidden";
	} else {
	which.style.visibility="visible";
	}
}


function trim(inputString){
	if (typeof inputString != "string"){ 
		return inputString; 
	}
	var retValue = inputString;
	var ch = retValue.substring(0, 1);
	while (ch == " "){ 
		retValue = retValue.substring(1, retValue.length);
		ch = retValue.substring(0, 1);
	}
	ch = retValue.substring(retValue.length-1, retValue.length);
	while (ch == " "){ 
		retValue = retValue.substring(0, retValue.length-1);
		ch = retValue.substring(retValue.length-1, retValue.length);
	}
	while (retValue.indexOf("  ") != -1) {
		retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length); 
	}
	return retValue;
}




/**************************************************************************************************************************/
/**************************************************************************************************************************/
/*                                          Validaci?n de campos                                                          */
/**************************************************************************************************************************/
/**************************************************************************************************************************/
//Funci?n de validaci?n para campos (Javascript)
//V 2.0 (LQNE)
//Uso:
//	Colocar para validaci?n de formularios (evento onSubmit)
//	Validar(nombreCampo1,descripcionCampo1,restriccionesCampo1,nombreCampo2,descripcionCampo1,restriccionesCampo2,...)
//	Todos los par?metros son cadenas
//	nombreCampo        -> Nombre del elemento de formulario a validar
//	descripcionCampo   -> Descripcion del campo que sale en el alert si no cumple las condiciones//	
//	restriccionesCampo -> Comprobaciones que se haran sobre el campo:
//			R 			-> Requerido
//			esEmail 	-> El campo especifica una direcci?n de email
//			esNum		-> El campo debe tener un valor num?rico
//			enRangoX:Y 	-> El valor del campo debe estar en el rango num?rico (X<=valor<=Y)
//			longMinX	-> La longitud del campo como cadena debe ser mayor que X
//			longMaxY	-> La longitud del campo como cadena debe ser menor que Y
//			esCif		-> El valor del campo debe ser un Cif
//			esNif		-> El valor del campo debe ser un NIF o DNI
//			fechaReal   -> El valor del campo debe ser una fecha distinta de VALOR_PORDEFECTO_FECHA. 
//						   Por lo tanto se ha de mantener la concordancia en el codigo
//
//	Ejemplo de uso: 
//		var datos = new Array('nombre','Nombre','R','email','E-Mail','ResEmail','dni','DNI','ResNif','numhermanos','Numero de hermanos','enRango0:10');
//		Validar(datos)
//		-El nombre debe especificarse
//		-El campo email es requerido y se valida que sea una direccion de mail correcta
//		-El campo dni es requerido y se comprueba que sea un Nif correcto (numero y letra)
//		-El campo numhermanos es opcional, pero si se especifica debe estar en el rango 1-10

//Esta funcion la usa para encontrar los objetos
function MM_findObj(n, d) { //v4.01
  var p,i,x;
  if(!d) d=document; 
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
    	d=parent.frames[n.substring(p+1)].document; 
		n=n.substring(0,p);
  }
  if(!(x=d[n])&&d.all) 
  	x=d.all[n]; 
  for (i=0;!x&&i<d.forms.length;i++) 
  	x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) 
  	x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) 
  	x=d.getElementById(n); 
  return x;
}

function ValidarVector(vector) { 
  var unpunto,val,i,j,p,q,nm,test,opcional,num,min,max,nif_num,nif_char,cif_num,cif_char,aux,numDigitos,doble,total,caracteresvalidosnif,errors='',args=vector;
  
  for (i=0; i<(vector.length-2); i+=3) {  	
  		test=vector[i+2];
        mostrar=vector[i+1];
        campo=MM_findObj(vector[i]);		
        if (campo) { 		
			nm=mostrar; 			
			val = trim(campo.value);
            if (val!="") { // Si ha introducido algo				
				//Validando longitud minima
				if (test.indexOf('longMin')!=-1){ 
					pos = test.indexOf('longMin')+7;
					longitud = 1;
					//vamos creando el numero mientras podamos
					while(longitud+pos<=test.length && !isNaN(test.substring(pos,pos+longitud)))
						longitud++;
					longitud--;
					valor = parseInt(test.substring(pos,pos+longitud))
					if(val.length<valor) {
						errors+="- El campo "+nm+" debe tener como m?nimo "+valor+" caracteres\n";						
					}
				}	
				
				//Validando longitud maxima
				if (test.indexOf('longMax')!=-1){ 
					pos = test.indexOf('longMax')+7;					
					longitud = 1;
					//vamos creando el numero mientras podamos
					while(longitud+pos<=test.length && !isNaN(test.substring(pos,pos+longitud)))
						longitud++;
					longitud--;
					valor = parseInt(test.substring(pos,pos+longitud))
					if(val.length>valor) {
						errors+="- El campo "+nm+" debe tener como m?ximo "+valor+" caracteres\n";						
					}
				}	
			
				//Validando email
      			if (test.indexOf('esEmail')!=-1) {
                    error=false;
					posicionCar=0;
					valorCar=val.charAt(0);
                    while ((posicionCar < val.length) && (valorCar!='@')) {
						posicionCar++;
						valorCar=val.charAt(posicionCar);					
					}
					if (posicionCar>=val.length) { 
                        error=true;
					} else if (val.length>(posicionCar+2)) {
						//Ahora se busca el punto.
						posicionCar+=2;
						otro=false;
						while (posicionCar<val.length) {
							 //Saltamos un caracter.
							valorCar=val.charAt(posicionCar);
							while ((posicionCar<val.length) && (valorCar!='.')) {
								posicionCar++;
								valorCar=val.charAt(posicionCar);						
							}
						
							if (valorCar=='.') {
								posicionCar+=2;
								otro=true;
							}								
                        }
						if (posicionCar>val.length) error=true;
					} else {
                        error=true;    
                    }
					primeraAr=val.indexOf('@');
					primerPu=val.indexOf('.');
					ultimaAr=val.lastIndexOf('@');
					ultimoPu=val.lastIndexOf('.');
                    if (val.indexOf(' ')>1) error=true;
					if (primeraAr!=ultimaAr) error=true;
					if (primeraAr==0) error=true;
					
					if (error) {
						errors+='- '+nm+' debe contener una direccion de correo electronico.\n';						
					} 
      			} 
      			
				//Si es un numero o se trata de un rango (los rangos siempre se consideran para los numeros)
				if (test.indexOf('esNum')!=-1 || test.indexOf('enRango') != -1) { 
	  				num = parseFloat(val);
      				if (isNaN(val)) {
						errors+='- '+nm+' debe contener un numero.\n';						
					}
      				if (test.indexOf('enRango') != -1) { 
	  					p=test.indexOf(':');                                                                                                                                                                                                                                                                                                                                              
        				min=test.substring(7,p); 
						max=test.substring(p+1);
        				if (num<min || max<num) {
							errors+='- El campo '+nm+' incluye un numero fuera del rango establecido ('+min+'-'+max+').\n';							
						}
      				} 
				} 

				//Para controlar el CIF
				//a02117463
				if(test.indexOf('esCif') != -1){					
					var control ="JABCDEFGHI";
					var temp = val.toUpperCase(); // pasar a may?sculas
					if (!/^[A-Za-z0-9]{9}$/.test(temp)) {
						errors += '- Longitud incorrecta, un CIF consta de 9 d?gitos\n';							
					}else if (!/^[ABCDEFGHKLMNPQS]/.test(temp)){
						errors += '- Error en CIF, el primer d?gito es incorrecto, debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,K,L,M,N,P,Q,S\n';							
					}else {
					  	var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
					  	var temp = 0; 
					  	for( j = 2; j <= 6; j += 2 ){
							temp = temp + v1[ parseInt(val.substr(j-1,1)) ];
							temp = temp + parseInt(val.substr(j,1));
						}
					  	temp = temp + v1[ parseInt(val.substr(7,1)) ];
					  	temp = 10 - (temp % 10);
						if (temp == 10) temp = 0;
						if (isNaN(val.substr(8,1))){
							if (control.substr(temp,1) != val.substr(8,1).toUpperCase()){
								errors += "- El CIF no es valido.\n";
							}
						}
						else{
							if ((temp%10) != parseInt(val.substr(8,1))){
								errors += "- El CIF no es valido.\n";
							}
						}
					}
				}	
				
				//Para controlar el NIF/DNI
				if(test.indexOf('esNif') != -1){					
					caracteresvalidosnif="TRWAGMYFPDXBNJZSQVHLCKET";
					//se mira que no tenga caracteres en blanco por el medio
					if(val.indexOf(' ') != -1){
						errors+='- El campo '+nm+' no tiene un formato correcto de DNI/NIF, (12345678A)\n';
					}else{
						aux=val.length;
						nif_num=val.substring(0,aux-1);
						nif_char=(val.substring(aux-1)).toUpperCase();					
						if (isNaN(nif_num) || nif_char.length != 1 || caracteresvalidosnif.indexOf(nif_char)==-1 ){
							errors+='- El campo '+nm+' no tiene un formato correcto de DNI/NIF, (12345678A)\n';
						}else{
							num=(nif_num)% 23;
							if (caracteresvalidosnif.substring(num,num+1) != nif_char) {
								errors+='- La letra del DNI/NIF no es correcta.\n';									
							}
						}
					}					
				}
				
				//Para controlar la fecha
				if(test.indexOf('fechaReal') != -1){					
					/*
					Se ha de comprobar que sea distinto de VALOR_NULO_FECHA_INTERFAZ, por lo tanto se ha de mantener la 
					concordancia con dicha variable (en el config)
					*/
					//Para este portal VALOR_NULO_FECHA_INTERFAZ="dd/mm/aaaa"
					if(val=="dd/mm/aaaa"){
						errors+='- El campo '+nm+' no tiene una fecha establecida.\n';
					}
				}
				
			//Si no ha introducido nada
			} else if (test.charAt(0) == 'R'){
				errors += '- El campo '+nm+' es requerido.\n'; 
			} 
		} //fin if(val)
  } //fin for
  
  if (errors) {
	  alert('El/Los siguiente(s) error(es) ha(n) ocurrido:\n'+errors);
  }
  return (errors == ''); //devolvemos true si se ha validado bien
}
/**************************************************************************************************************************/
/**************************************************************************************************************************/
/*                                          FIN  Validaci?n de campos                                                     */
/**************************************************************************************************************************/
/**************************************************************************************************************************/


