   function checkRegex() {
      var isValid = true;
      var thisValid = new Array();
      var ids = new Array();
      var texts = new Array();
      var regex = new Array();
      var errorMsg = new Array();
      var required = new Array();
      var i = 0;
      
      ids[0] = new Array("foto","dni","nacimiento","segsocial","nombrevia","numvia","sexo","estatura");
      texts[0] = new Array("Fotograf&iacute;a de carnet (menor de 500KB)","D.N.I. / N.I.E.","Fecha de Nacimiento","N&ordm; de Seguridad Social","Nombre de la v&iacute;a","N&uacute;mero","Sexo","Estatura");
      regex[0] = /^[^/\s\ñ/\Ñ/\º/\ª/\á/\é/\í/\ó/\ú/\,/\;/\:/\-/\_/\ü/\[/\]/].*/;
      errorMsg[0] = "El campo [label] es obligatorio";
      required[0] = new Array("1","1","1","1","1","1","1","1");
      ids[1] = new Array("cp","movil1","movil2","vicasol1","vicasol2","estatura");
      texts[1] = new Array("Cod. Postal","Tel&eacute;fono m&oacute;vil","2&ordm; Tel&eacute;fono","Ultimo a&ntilde;o en Vicasol 1","Ultimo a&ntilde;o en Vicasol 2","Estatura");
      regex[1] = /^[0-9]+$/;
      errorMsg[1] = "El campo [label] debe ser un número";
      required[1] = new Array("1","1","0","0","0","1");
      ids[2] = new Array("nombre","apellidos","poblacion","nacionalidad");
      texts[2] = new Array("Nombre","Apellidos","Localidad","Nacionalidad");
      regex[2] = /^[a-zA-Z\s/\ñ/\Ñ/\º/\ª/\á/\é/\í/\ó/\ú/\,/\;/\:/\-/\_/\ü/\[/\]/]+$/;
      errorMsg[2] = "El campo [label] solo puede contener letras";
      required[2] = new Array("1","1","1","1");
      ids[3] = new Array("almacenes","experiencia");
      texts[3] = new Array("Experiencia en otros almacenes (Nombre)","Otra experiencia");
      regex[3] = /^[a-zA-Z0-9\s\ñ/\Ñ/\º/\ª/\á/\é/\í/\ó/\ú/\,/\;/\:/\-/\_/\ü/\[/\]/]+$/;
      errorMsg[3] = "El campo [label] solo puede contener letras y números";
      required[3] = new Array("0","0");    
      for (i = 0; i < 4; i++)
        thisValid[i] = applyRegex(regex[i], ids[i], texts[i], errorMsg[i], required[i]);
      for (i = 0; i < thisValid.length; i++)
        isValid = isValid && thisValid[i];
      return isValid;
    }

    function applyRegex(regex, ids, texts, errorMsg, required) {
      var obj, thisValid = true;
      var i = 0;
      for (i = 0; i < ids.length; i++) {
        obj = document.getElementById(ids[i]);
        removeErrorDiv(ids[i]);
        if (obj.value.match(regex) == null && required[i]=="1") {
          var errorStr = errorMsg.replace("[label]", texts[i]);
          addErrorDiv("contains_" + ids[i], errorStr, "98%");
          thisValid = false;
        }
        else {        	    
	        if (obj.value != "" && required[i]=="0") {
		        if (obj.value.match(regex) == "") {
		          var errorStr = errorMsg.replace("[label]", texts[i]);
		          addErrorDiv("contains_" + ids[i], errorStr, "98%");
		          thisValid = false;
		        }
	        }           
	      }
      }
      return thisValid;
    }

    function addErrorDiv(domID, msg, width) {
     var add = true;
     var target = document.getElementById(domID);
     var errorDiv = document.createElement("div");
     var errorDivID = "error_" + domID;
     if (document.getElementById(errorDivID))
       return;
     errorDiv.setAttribute("id", errorDivID);
     errorDiv.className = "validation_error";
     errorDiv.style.width = width;
     errorDiv.style.padding = "1%";
     errorDiv.innerHTML = msg;
     target.appendChild(errorDiv);
   }

   function removeErrorDiv(domID) {
     var errorDivID = "error_contains_" + domID;
     if (document.getElementById(errorDivID)) {
       var child = document.getElementById(errorDivID);
       var parent = document.getElementById("contains_" + domID); 
       parent.removeChild(child);
     }
   }
   
function calcular_edad(fecha){

    //calculo la fecha de hoy
    var hoy=new Date()
    //alert(hoy)

    //calculo la fecha que recibo
    //La descompongo en un array
    var array_fecha = fecha.split("-")
    //si el array no tiene tres partes, la fecha es incorrecta
    if (array_fecha.length!=3)
       return ""

    //compruebo que los ano, mes, dia son correctos
    var ano
    ano = parseInt(array_fecha[2],10);
    if (isNaN(ano))
       return ""

    var mes
    mes = parseInt(array_fecha[1],10);
    if (isNaN(mes))
       return ""

    var dia
    dia = parseInt(array_fecha[0],10);
    if (isNaN(dia))
       return ""


    //si el año de la fecha que recibo solo tiene 2 cifras hay que cambiarlo a 4
    if (ano<=99)
       ano +=1900

    //resto los años de las dos fechas
    var edad=hoy.getFullYear()- ano - 1; //-1 porque no se si ha cumplido años ya este año

    //si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido
    if (hoy.getMonth() + 1 - mes < 0) //+ 1 porque los meses empiezan en 0
       return edad
    if (hoy.getMonth() + 1 - mes > 0)
       return edad+1

    //entonces es que eran iguales. miro los dias
    //si resto los dias y me da menor que 0 entonces no ha cumplido años. Si da mayor o igual si ha cumplido
    if (hoy.getUTCDate() - dia >= 0)
       return edad + 1
    
    return edad
} 

//Devuelve: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error
function valida_nif_cif_nie(a) 
{
	var temp=a.toUpperCase();
	var cadenadni="TRWAGMYFPDXBNJZSQVHLCKE";
 
	if (temp!==''){
		//si no tiene un formato valido devuelve error
		if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			return 0;
		}
 
		//comprobacion de NIFs estandar
		if (/^[0-9]{8}[A-Z]{1}$/.test(temp))
		{
			posicion = a.substring(8,0) % 23;
			letra = cadenadni.charAt(posicion);
			var letradni=temp.charAt(8);
			if (letra == letradni)
			{
			   	return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//algoritmo para comprobacion de codigos tipo CIF
		suma = parseInt(a[2],10)+parseInt(a[4],10)+parseInt(a[6],10);
		for (i = 1; i < 8; i += 2)
		{
			temp1 = 2 * parseInt(a[i],10);
			temp1 += '';
			temp1 = temp1.substring(0,1);
			temp2 = 2 * parseInt(a[i],10);
			temp2 += '';
			temp2 = temp2.substring(1,2);
			if (temp2 == '')
			{
				temp2 = '0';
			}
 
			suma += (parseInt(temp1,10) + parseInt(temp2,10));
		}
		suma += '';
		n = 10 - parseInt(suma.substring(suma.length-1, suma.length),10);
 
		//comprobacion de NIFs especiales (se calculan como CIFs)
		if (/^[KLM]{1}/.test(temp))
		{
			if (a[8] == String.fromCharCode(64 + n))
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
 
		//comprobacion de CIFs
		if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp))
		{
			temp = n + '';
			if (a[8] == String.fromCharCode(64 + n) || a[8] == parseInt(temp.substring(temp.length-1, temp.length),10))
			{
				return 2;
			}
			else
			{
				return -2;
			}
		}
 
		//comprobacion de NIEs
		//T
		if (/^[T]{1}/.test(temp))
		{
			if (a[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
 
		//XYZ
		if (/^[XYZ]{1}/.test(temp))
		{
			pos = str_replace(['X', 'Y', 'Z'], ['0','1','2'], temp).substring(0, 8) % 23;
			if (a[8] == cadenadni.substring(pos, pos + 1))
			{
				return 3;
			}
			else
			{
				return -3;
			}
		}
	}
 
	return 0;
}

function valida_nass(nass)
{
		var a = parseInt(nass.substr(0,2),10);
		var b = parseInt(nass.substr(2,8),10);
		var c = parseInt(nass.substr(10,2),10);
		var d = 0;
		
		if (b < 10000000)
			d = b + a * 10000000;
		else
			d = parseInt(nass.substr(0,2) + nass.substr(2,8),10);

		var dc = d % 97;
		if (dc != c && nass!= "")
			return false;
		else
			return true;
}

function valida_longitud(dato,longitud)
{
		if (dato.length == longitud)
			return true;
		else
			return false;
}

function valida_minusvalia()
{
	if (document.solicitud.tipominusvalia.value == "" && document.solicitud.gradominusvalia.value == "")
		document.solicitud.minusvalia.value="No";
	else
		document.solicitud.minusvalia.value="Si";
}

function valida_tipominusvalia()
{
	if (document.solicitud.minusvalia.value == "No")
	{
		document.solicitud.tipominusvalia.value="";
		document.solicitud.gradominusvalia.value="";
	}
}

function verificar_imagen(dato) {
	var arrExtensions=new Array("bmp", "gif", "jpg", "png");
	var strFilePath = dato.value;
	var arrTmp = strFilePath.split(".");
	var strExtension = arrTmp[arrTmp.length-1].toLowerCase();
	var blnExists = false;
	var i = 0;
	for (i=0; i<arrExtensions.length; i++) {
		if (strExtension == arrExtensions[i]) {
			blnExists = true;
			break;
		}
	}
			
	if (!blnExists)
		alert("Debe seleccionar una imagen válida. Solo se admiten los formatos bmp, gif, jpg y png");
	return blnExists;
}

function verificar_fecha_carnet(dato,intervalo)
{    
    var fecha_inicio=dato;
    var array_fecha = fecha_inicio.split("-");
    if (array_fecha.length!=3)
       return "";

    var ano = parseInt(array_fecha[2],10)+intervalo;       

    var mes = parseInt(array_fecha[1],10);

    var dia = parseInt(array_fecha[0],10);
    
	  var miFecha = new Date( ano, mes, dia );  
			 	  
	  if (miFecha<=new Date())
	  	return miFecha.getDate()+"-"+miFecha.getMonth()+"-"+miFecha.getFullYear();
	  else
	  	return false;
}

function habilitar_rama()
{
var mylist = document.getElementById("estudios");
var valor = mylist.selectedIndex;

if ( valor == 4 || valor == 5) 
	{ document.solicitud.rama.readOnly=false; }
else 
	{ document.solicitud.rama.value="";
		document.solicitud.rama.readOnly=true; }
}

function validar_datos()
{
var valor;
valor=true;
valida_minusvalia(); 
fechacad=verificar_fecha_carnet(document.solicitud.fechamanipulador.value,5); 
if (fechacad) {
	document.solicitud.manipulador.value="No"; 
	alert("El carnet de manipulador caducó el día: "+fechacad);} 
else {
	document.solicitud.manipulador.value="Si";} 
	
document.solicitud.edad.value=calcular_edad(document.solicitud.nacimiento.value); 
if (document.solicitud.edad.value<18 && document.solicitud.edad.value) 
{
	alert("No se admiten solicitudes para menores de 18 años"); 
	valor=false;} 
if ((document.solicitud.estudios.selectedIndex==4 || document.solicitud.estudios.selectedIndex==5) && document.solicitud.rama.value=="")
{
	alert ("Debe especificar la rama de sus estudios de F.P.");
	valor=false;}

return valor;
}
