function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'
 
    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 
    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    };
 
    return sa ? s : s[0];
}


//Retorna: 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])+parseInt(a[4])+parseInt(a[6]);
		for (i = 1; i < 8; i += 2)
		{
			temp1 = 2 * parseInt(a[i]);
			temp1 += '';
			temp1 = temp1.substring(0,1);
			temp2 = 2 * parseInt(a[i]);
			temp2 += '';
			temp2 = temp2.substring(1,2);
			if (temp2 == '')
			{
				temp2 = '0';
			}
 
			suma += (parseInt(temp1) + parseInt(temp2));
		}
		suma += '';
		n = 10 - parseInt(suma.substring(suma.length-1, suma.length));
 
		//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)))
			{
				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 CompruebaCIF(elCIF) 
  {
    var resul = false;
    var temp = elCIF.value.toUpperCase(); 
    if (!/^[A-Za-z0-9]{9}$/.test(temp))
      resul=false;	  //alert ("Longitud incorrecta, un CIF consta de 9 dígitos");
    else if (!/^[ABCDEFGHKLMNPQS]/.test(temp)) // Es una letra de las admitidas ?
		resul=false
      //alert("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 ");
    else 
      resul = true;
    return resul;
  }

  function ValidaCIF(elCIF) 
  {
    var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
	var letras = "JABCDEFGHIJ";
    var temp = 0; 
    var temp1;
	var resul=false;
    for( i = 2; i <= 6; i += 2 ) 
    {
      temp = temp + v1[ parseInt(elCIF.value.substr(i-1,1)) ];
      temp = temp + parseInt(elCIF.value.substr(i,1));
    };

    temp = temp + v1[ parseInt(elCIF.value.substr(7,1)) ];
    temp = (10 - ( temp % 10));
	  if (elCIF.value.charAt(8)==0 && temp == 10)
	  	resul = true;
	  if (elCIF.value.charAt(8)==temp || elCIF.value.charAt(8)==letras.charAt(temp))
	   resul=true;
    return resul;
  }
	
	function ComprobarDNI(DNI){
	var correcto=true;
	DNI=DNI.toUpperCase();
	if (!/^(\d{8}[TRWAGMYFPDXBNJZSQVHLCKE]|X\d{7}[TRWAGMYFPDXBNJZSQVHLCKE])$/.test(DNI)) {
	 correcto=false;
	}else{
	if ( DNI.charAt(0)=='X'){
	DNI="0"+DNI.substr(1,8);
	//alert (DNI); 
	}
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
    var letra = DNI.charAt(8);
	DNI=DNI.substring(0,8);
	var numero = DNI%23;
	if (letra!=letras.substring(numero,numero+1)){
	   correcto=false; 
	}
}	
	return correcto;
	}
	
  function fEsFecha(p_valor) {
// extraido de http://www.programacion.com/html/foros/3/msg/83108/
	if(!p_valor) p_valor = (this.value ? this.value : "");
	var l_valido = fEsFormatoFecha(p_valor);
	if (l_valido) {
	var l_fecha = new Date(RegExp.$3, parseFloat(RegExp.$2)-1, RegExp.$1);
	l_valido = (l_fecha.getDate()==RegExp.$1)&&((l_fecha.getMonth()+1)==RegExp.$2)&&(l_fecha.getFullYear()==RegExp.$3)
	}
	return l_valido;

}
	function fEsFormatoFecha(p_valor) {
     return /^(\d{2})\/(\d{2})\/(\d{4})$/.test(p_valor);
     }
     
// comprobación del mail si está escrito correcto o no

function isEmailAddress(theElement)
{
var s = theElement.value;
var filter=/^[A-Za-z][A-Za-z0-9_.]*@[A-Za-z0-9_]+\.[A-Za-z0-9_.]+[A-za-z]$/;
if (s.length == 0 ) return true;
if (filter.test(s))
return 1;
else
return 0;
}
	
	function ComprobarCampos(){
	 var correcto=true;
	 var fallos="Los errores son los siguientes:\n";
	 //var el=document.formulario.CombDependiente;
	 var indice=1;
	 var t=0;

	 //el=document.formulario.C1;
	 //el1=document.formulario.C2;
	 //el2=document.formulario.C3;
 	 //el3=document.formulario.C4;
 	 //el4=document.formulario.C5;
 	 //el5=document.formulario.C6;
 	 //el6=document.formulario.C7;
 	 //el7=document.formulario.C8;
 	 //el8=document.formulario.C9;
 	 //el9=document.formulario.C10;
 	 //el10=document.formulario.C11;
 	 //el11=document.formulario.C12;
 	 
 	 
	 //if (eval("document.formulario.C1.checked")==false&&eval("document.formulario.C2.checked")==false&&eval("document.formulario.C3.checked")==false&&eval("document.formulario.C4.checked")==false&&eval("document.formulario.C5.checked")==false&&eval("document.formulario.C6.checked")==false&&eval("document.formulario.C7.checked")==false&&eval("document.formulario.C8.checked")==false&&eval("document.formulario.C9.checked")==false&&eval("document.formulario.C10.checked")==false&&eval("document.formulario.C11.checked")==false&&eval("document.formulario.C12.checked")==false){
	  if (eval("document.formulario.C1.checked")==false&&eval("document.formulario.C2.checked")==false&&eval("document.formulario.C3.checked")==false&&eval("document.formulario.C4.checked")==false&&eval("document.formulario.C5.checked")==false&&eval("document.formulario.C6.checked")==false&&eval("document.formulario.C7.checked")==false&&eval("document.formulario.C8.checked")==false){
	  correcto=false;
	  fallos=fallos+indice+")Tiene que seleccionar al menos una accion formativa\n";
	  indice++;
	 }
	 
/*	 
	 for (m=1;m<9;m++)
	 {
		if (eval("document.formulario.C"+m+".checked")==true){
			t=t+1;		}
	 }
	 
	 
	 if (t>4){
	  correcto=false;
	  fallos=fallos+indice+")No puede selecionar más de 4 acciones formativas\n";
	  indice++;
	 }
*/	 

	 
	 el=document.formulario.apellido1;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el primer apellido\n";
	  indice++;
	 }
	 
	 el=document.formulario.apellido2;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el segundo apellido\n";
	  indice++;
	 }



	 el=document.formulario.dninie;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")Seleccione DNI o NIE\n";
	  indice++;
	 }

	 
	 el=document.formulario.nombre;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el nombre\n";
	  indice++;
	 }
	 
	 el=document.formulario.nif;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el nif\n";
	  indice++;
	 }else
	 if (!valida_nif_cif_nie(el.value)){
	   correcto=false;
	   fallos=fallos+indice++ +")El Documento escrito no es correcto\n";
	 }
	 
	 el=document.formulario.fnac;
	 if (el.value==""||el.value=="dd/mm/aaaa"){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito la fecha de nacimiento\n";
	  indice++;
	 }else
	  if ( !/^([012]\d|30|31)\/[01]\d\/19\d{2}$/.test(el.value)){
	   correcto=false;
	   fallos=fallos+indice++ +")La fecha de nacimiento no está en el formato correcto o es incorrecta\n";
	 }else
	   if (!fEsFecha(el.value)){
	    correcto=false;
	    fallos=fallos+indice++ +")La fecha de nacimiento no es correcta\n";
	  }

	   el=document.formulario.nacionalidad;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito la nacionalidad\n";
	  indice++;
	 }


	   el=document.formulario.direccion;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito la direccion\n";
	  indice++;
	 }
	
	 el=document.formulario.provincia;
	 if (el.value==""||el.value==-1){
	  correcto=false;
	  fallos=fallos+indice+")No ha seleccionado la provincia\n";
	  indice++;
	 }
	 
	 el=document.formulario.localidad;
	 if (el.value==""||el.value==-1){
	  correcto=false;
	  fallos=fallos+indice+")No ha seleccionado la localidad\n";
	  indice++;
	 }
	 
	 el=document.formulario.cp;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el codigo postal\n";
	  indice++;
	 }else
	  if (!/^\d{5}$/.test(el.value)){
	  correcto=false;
	  fallos=fallos+indice+")El codigo postal es erroneo. Debe de ser de 5 cifras\n";
	  indice++;
	  }
	  
	  el=document.formulario.email1
	  if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el correo electrónico\n";
	  indice++;
	 }
	 else
	 {
	 if (!isEmailAddress(el)){
	 correcto=false;
	  fallos=fallos+indice+")La dirección de correo electrónico es incorrecta. Revísela\n";
	  indice++;
	 }
	 }


	  
	  el=document.formulario.telefono;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el telefono\n";
	  indice++;
	 }
	 
	 el=document.formulario.razon_social;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el nombre de la empresa\n";
	  indice++;
	 }
	 
	 el=document.formulario.cif;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el CIF de la empresa\n";
	  indice++;
	 }else
	  if (CompruebaCIF(el)){
	   if (!ValidaCIF(el)){
	    correcto=false;
	    fallos=fallos+indice+")El CIF no es correcto\n";
	    indice++;
		}
	  //correcto=false;
	   }
	   else
	   if (!ComprobarDNI(el.value)){
	   	correcto=false;
	    fallos=fallos+indice+")El CIF no es correcto\n";
	    indice++;
		}
	    
	el=document.formulario.profesion;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito su profesion\n";
	  indice++;
	 }	


	  el=document.formulario.claboral;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha seleccionado la condicion laboral\n";
	  indice++;
	 }
		
	el=document.formulario.dir_empresa;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito la direccion de la empresa\n";
	  indice++;
	 }
	 
	 el=document.formulario.cp_empresa;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el codigo postal de la empresa\n";
	  indice++;
	 }else
	  if (!/^\d{5}$/.test(el.value)){
	  correcto=false;
	  fallos=fallos+indice+")El codigo postal de la empresa es erroneo. Debe de ser de 5 cifras\n";
	  indice++;
	  }
	    
	 el=document.formulario.telefono_empresa;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")No ha escrito el telefono de la empresa\n";
	  indice++;
	 }
	 
	 el=document.formulario.provincia_empresa;
	 if (el.value==""||el.value==-1){
	  correcto=false;
	  fallos=fallos+indice+")No ha seleccionado la provincia de la empresa\n";
	  indice++;
	 }
	 
	 el=document.formulario.localidad_empresa;
	 if (el.value==""||el.value==-1){
	  correcto=false;
	  fallos=fallos+indice+")No ha seleccionado la localidad de la empresa\n";
	  indice++;
	 }	  
	
	 
	 	 el=document.formulario.tipojornada;
	 if (el.selectedIndex==0){
	  correcto=false;
	  fallos=fallos+indice+")No ha seleccionado el tipo de jornada\n";
	  indice++;
	 }
	 el=document.formulario.estudios;
	 if (el.selectedIndex==0){
	  correcto=false;
	  fallos=fallos+indice+")No ha seleccionado el nivel de estudios\n";
	  indice++;
	 }
	 if (!correcto){
	  alert(fallos);
	  return false;
	}
	return true;
	}

function ComprobarCamposInfo(){
	 var correcto=true;
	 var fallos="Los errores son los siguientes:\n";
	 var indice=1;
	 
	 el=document.frm.nombre;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")Tiene que especificar su nombre\n";
	  indice++;
	 }
	 el=document.frm.correoe;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")Tiene que especificar su correo electrónico\n";
	  indice++;
	 }
	 else
	 {
	 if (!isEmailAddress(el)){
	 correcto=false;
	  fallos=fallos+indice+")La dirección de correo electrónico es incorrecta. Revísela\n";
	  indice++;
	 }
	 }
	 el=document.frm.comentarios;
	 if (el.value==""){
	  correcto=false;
	  fallos=fallos+indice+")Tiene que indicar su consulta en el campo 'Comentarios'\n";
	  indice++;
	 }
	 
	 if (!correcto){
	  alert(fallos);
	  return false;
	}
	 
	 return true;
	}


