


var numMaxMsg = 0;
var numMsg = 0;
var globalVal = true;
//Función que se llama en los submit de los formularios para validarlos
obj = "";
function validaFormulario(formData, maxMsg){
	numMsg = 0;
	 if (maxMsg == null){
		 maxMsg = 0;
	 }
	 numMaxMsg = maxMsg;
	 var globalVal = true;
	$(formData).find("input, select").each(function(){
		var val = $(this).val();
		var validado = true;
		obj = this;
		switch( $(this).attr('name') ){
			case "nombre":
				validado = textoLongitud(val,'Nombre',1);
				if (validado == false){ globalVal = false };
			break;
			case "apellido1", "apellido2":
				validado = textoLongitud(val,'Apellidos',1);
				if (validado == false){ globalVal = false };
			break;
			case "nif":
				validado = valida_nif_cif_nie(val,'NIF');
				if (validado == false){ globalVal = false };
			break;
			case "nss":
				validado = checkNSS(val);
				if (validado == false){ globalVal = false };
			break;
			case "cod_provincia":
				if ( val == "0" ){
					anadeMensaje('Debe seleccionar una provincia');
					validado = false;
				}
				
				if (validado == false){ globalVal = false };
			break;
			case "precio":
				validado = soloNumeros(val,'Precio');
				if (validado == false){ globalVal = false };
			break;
			case "accion":
				validado = soloNumeros(val,'Accion');
				if (validado){ validado = textoLongitud(val,'Accion',1);}
				if (validado){
					posiVal = $('#accToJs').val();
					if ( posiVal == '0'){
						anadeMensaje('No tiene asiganadas acciones. Consulte al administrador.');
						validado = false;
					}
				}
				if (validado){ 
					posiVal = $('#accToJs').val();
					
					posiVal = posiVal.split(",");
					esta = posiVal.inArray(val);
					
					if ( esta ){
						validado = true;
					} else {
						anadeMensaje('No es una acción válida.');
						validado = false;
					}
				}
				
				if (validado == false){ globalVal = false };
			break;
			case "horas":
				validado = soloNumeros(val,'Horas');
				if (validado){ validado = textoLongitud(val,'Horas',1);}
				if (validado == false){ globalVal = false };
			break;
			case "f_inicio":
				v = val.split("/");
				if ( isDate(v[2], v[1], v[0]) != 0){ validado = false;}
				if (validado == false){ globalVal = false; anadeMensaje('El campo F. inicio no es una fecha válida'); };
			break;
			case "f_nacimiento":
				v = val.split("/");
				if ( isDate(v[2], v[1], v[0]) != 0){ validado = false;}
				if (validado == false){ globalVal = false; anadeMensaje('El campo F. nacimiento no es una fecha válida'); };
			break;
			case "f_fin":
				v = val.split("/");
				if ( isDate(v[2], v[1], v[0]) != 0) validado = false;
				if (validado == false){ globalVal = false; anadeMensaje('El campo F. fin no es una fecha válida'); };
			break;
			case "alumnos":
				validado = soloNumeros(val,'Alumnos');
				if (validado){ validado = textoLongitud(val,'Alumnos',1);}
				if (validado == false){ globalVal = false };
			break;
			case "e_razon_social":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					validado = textoLongitud(val,'Razón Social',1);
				
					if (validado == false){ globalVal = false };
				}
			break;		
			case "e_direccion":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					validado = textoLongitud(val,'Dirección',1);
				
					if (validado == false){ globalVal = false };
				}
			break;
			case "e_cp":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					validado = soloNumeros(val,'Código Postal');
					if (validado){ validado = textoLongitud(val,'Código Postal',5);}
				
					if (validado == false){ globalVal = false };
				}
			break;
			case "e_telefono":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					validado = soloNumeros(val,'Teléfono');
					if (validado){ validado = textoLongitud(val,'Teléfono',9);}
					if (validado == false){ globalVal = false };
				}
			break;
			case "e_niss":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					validado = textoLongitud(val,'NISS',1);
					if (validado == false){ globalVal = false };
				}
			break;
			case "e_municipio":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					validado = textoLongitud(val,'Municipio',1);
					if (validado == false){ globalVal = false };
				}
			break;
			case "e_cif":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					validado = textoLongitud(val,'NIF',1);
					if (validado == false){ globalVal = false };
				}
			break;
			case "e_cod_provincia":
				if ( $('#situacion_laboral').val() == "Empleado" ){
					if ( val == "0" ){
						anadeMensaje('Debe seleccionar una provincia');
						validado = false;
					}
					
					if (validado == false){ globalVal = false };
				}
			break;
			case "centro1_raz_social":
				validado = textoLongitud(val,'Razón Social',1);
				if (validado == false){ globalVal = false };
			break;
			case "centro1_centro":
				validado = textoLongitud(val,'Centro',1);
				if (validado == false){ globalVal = false };
			break;
			case "centro1_direccion", "direccion":
				validado = textoLongitud(val,'Dirección',1);
				if (validado == false){ globalVal = false };
			break;
			case "centro1_cp", "cp":
				validado = soloNumeros(val,'Código Postal');
				if (validado){ validado = textoLongitud(val,'Código Postal',5);}
				if (validado == false){ globalVal = false };
			break;
			case "telefono":
				validado = soloNumeros(val,'Teléfono');
				if (validado){ validado = textoLongitud(val,'Teléfono',9);}
				if (validado == false){ globalVal = false };
			break;
			case "centro1_tel":
				if ( val =! "" ){
					validado = soloNumeros(val,'Teléfono');
					if (validado){ validado = textoLongitud(val,'Teléfono',9);}
					if (validado == false){ globalVal = false };
				}
			break;
			case "centro1_fax":
				if ( val =! "" ){
					validado = soloNumeros(val,'Fax');
					if (validado){ validado = textoLongitud(val,'Fax',9);}
					if (validado == false){ globalVal = false };
				}
			break;
			case "email":
				if ( val != "" ){
					validado = isValidEmail(val,'Email');
					if (validado == false){ globalVal = false };
				}
			break;
//CONTACTO DEL CENTRO			
			case "centro1_contacto":
				validado = textoLongitud(val,'Contacto',1);
				if (validado == false){ globalVal = false };
			break;
			case "centro1_contacto_tel":
				validado = soloNumeros(val,'Teléfono');
				if (validado){ validado = textoLongitud(val,'Teléfono',9);}
				if (validado == false){ globalVal = false };
			break;
			case "centro1_contacto_mail":
				validado = isValidEmail(val,'Email');
				if (validado == false){ globalVal = false };
			break;
//HORARIOS			
			case "h_manana1":
				if ( val != "" ){
					validado = isValidTime(val,'Horario Mañana');
					if (validado == false){ globalVal = false };
				}
			break;
			case "h_manana2":
				if ( val != "" ){
					validado = isValidTime(val,'Horario Mañana');
					if (validado == false){ globalVal = false };
				}
			break;
			case "h_tarde1":
				if ( val != "" ){
					validado = isValidTime(val,'Horario Tarde');
					if (validado == false){ globalVal = false };
				}
			break;
			case "h_tarde2":
				if ( val != "" ){
					validado = isValidTime(val,'Horario Tarde');
					if (validado == false){ globalVal = false };
				}
			break;
			case "h_tutoria1":
				if ( val != "" ){
					validado = isValidTime(val,'Horario Tutoria');
					if (validado == false){ globalVal = false };
				}
			break;
			case "h_tutoria2":
				if ( val != "" ){
					validado = isValidTime(val,'Horario Tutoria');
					if (validado == false){ globalVal = false };
				}
			break;
//FORMADORES
			case "formador1_nombre":
				if (( $('#modalidad').val() == "P" ) || ( $('#modalidad').val() == "M" )){
					validado = textoLongitud(val,'Nombre',1);
					if (validado == false){ globalVal = false };
				}
			break;
			case "formador1_dni":
				if (( $('#modalidad').val() == "P" ) || ( $('#modalidad').val() == "M" )){
					validado = valida_nif_cif_nie(val,'DNI');
					if (validado == false){ globalVal = false };
				}
			break;	
			
			case "tutor1_nombre":
				if ( $('#modalidad').val() != "P" ){
					validado = textoLongitud(val,'Nombre',1);
					if (validado == false){ globalVal = false };
				}
			break;
			case "tutor1_dni":
				if ( $('#modalidad').val() != "P" ){
					validado = valida_nif_cif_nie(val,'DNI');
					if (validado == false){ globalVal = false };
				}
			break;	
		}
		
	});
	
	
	
	
	if (globalVal){
		return true;
	} else {
		return false;
	}
}

function anadeMensaje(msg){
	numMsg ++;
	
	msg = "<a class='msgValred' id='"+$(obj).attr('id')+"'>"+ msg +"</a>";
	if ( numMsg < numMaxMsg){
		$('#mensajesValida').append(msg+'<br>');
	}
}

function isValidTime(val, campo){
	var reg = /^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/;
	if(reg.test(val) == false) {
		anadeMensaje('El campo ' + campo + " no es una hora válida");
	    return false;
	}
	return true;
}

function isValidEmail(val, campo){
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test(val) == false) {
		anadeMensaje('El campo ' + campo + " no es un email válido");
	    return false;
	}	
	return true;
}

function checkNSS(nss) {
	if (!nss) return false;
	if (nss.length != 11 && nss.length != 12){
		anadeMensaje('El NSS no es válido');
	    return false;
	}
	if (nss.substr(2, 1) == 0) nss = "" + nss.substr(0, 2) + nss.substr(3, nss.length-1);
	
	if ( nss.substr(0, nss.length-2) % 97 == nss.substr(nss.length-2, 2) ){
		return true;
	} else {
		anadeMensaje('El NSS no es válido');
	    return false;
	}
}

function validarCIF(texto){
    
    var pares = 0;
    var impares = 0;
    var suma;
    var ultima;
    var unumero;
    var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
    var xxx;
    
    texto = texto.toUpperCase();
    
    var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g);
     if (!regular.exec(texto)){
    	 anadeMensaje('El CIF no es correcto');
    	 return false;
     }
         
     ultima = texto.substr(8,1);

     for (var cont = 1 ; cont < 7 ; cont ++){
         xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
         impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
         pares += parseInt(texto.substr(cont,1));
     }
     xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0";
     impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
     
     suma = (pares + impares).toString();
     unumero = parseInt(suma.substr(suma.length - 1, 1));
     unumero = (10 - unumero).toString();
     if(unumero == 10) unumero = 0;
     
     if ((ultima == unumero) || (ultima == uletra[unumero]))
         return true;
     else{
    	 anadeMensaje('El CIF no es correcto');
         return false;
     }

} 


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))
		{
			anadeMensaje('El número de idintificación no es correcto');
			return false;
		}
 
		//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 true;
			}
			else
			{
				anadeMensaje('El número de idintificación no es correcto');
				return false;
			}
		}
 
		//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 true;
			}
			else
			{
				anadeMensaje('El número de idintificación no es correcto');
				return false;
			}
		}
 
		//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 true;
			}
			else
			{
				anadeMensaje('El número de idintificación no es correcto');
				return false;
			}
		}
 
		//comprobacion de NIEs
		//T
		if (/^[T]{1}/.test(temp))
		{
			if (a[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp))
			{
				return true;
			}
			else
			{
				anadeMensaje('El número de idintificación no es correcto 1');
				return false;
			}
		}
 
		//XYZ
		if (/^[XYZ]{1}/.test(temp))
		{
			temp = temp.replace('X','0');
			temp = temp.replace('Y','1');
			temp = temp.replace('Z','2');
			
			pos = temp.substring(0, 8) % 23;
			
			
			if (a.substring(8,9) == cadenadni.substring(pos, pos + 1))
			{
				return true;
			}
			else
			{
				anadeMensaje('El número de idintificación no es correcto 2');
				return false;
			}
		}
	}
 
	anadeMensaje('El número de idintificación no es correcto');
	return false;
}
function isNIF(val, campo){
	var ControlValue = 0; 
    var NIFCharIndex = 0;
    var NIFChars = new Array('T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E');
    var NIFNumber;
    var NIFChar;
    
	NIFNumber = val.substring(0, 8); //Almacenamos la parte numŽrica del DNI en "NIFNumber"
    NIFChar = val.substring(8, 9); //Almacenamos la letra del DNI en "NIFChar"
    NIFChar = NIFChar.toUpperCase(); //Pasamos la letra del DNI a mayœsculas por si acaso estaba en minœsculas
    
    vali = true;
   	
    vali = caractIlegales(val,'dni');
   	if (vali){ vali = soloNumeros(NIFNumber,'dni');}
   	if (vali){ vali = sololetras(NIFChar,'dni');}
   	if (vali){      
  	  	//Los siguientes 4 c‡lculos sirven para calcular la posici—n de la letra correspondiente al la parte numŽrica del DNI "NIFNumber" en array "NIFChars"
    	ControlValue = NIFNumber / 23 ;
    	ControlValue = Math.floor(ControlValue);
    	ControlValue = ControlValue * 23;
	  	NIFCharIndex = NIFNumber - ControlValue;

		if (NIFChar == NIFChars[NIFCharIndex]) {
			return true;
		}else {
			anadeMensaje('La letra del DNI no es correcta');
			return false;
	    }
         
   	} else {
   		anadeMensaje('La letra del DNI no es correcta');
		return false;
   	}
}
	
function isCuentaBanco( val, campo ){
	longit=val.length;
    if ( longit < 20 ){
    	anadeMensaje('El campo ' +campo+' no es una cuenta válida'  );
    	return false;
    }
	var Banco = val.substr(0,8) ;
	var Cuenta = val.substr(10,10);
	Pesos= new Array(6,3,7,9,10,5,8,4,2,1);
	var result =0;
	var iTemp =0;
	for (var n=0;n<=7;n++){
		iTemp  = iTemp + Banco.substr(7 - n, 1) * Pesos[n];
	}
	
	result = 11 - (iTemp % 11);
	if (result > 9){
		 result=1-(result % 10);
	}
	iTemp=0;
	for (var n=0;n<=9;n++){
	   iTemp  = iTemp + Cuenta.substr(9 - n, 1) * Pesos[n];
	}
	iTemp =11 - (iTemp % 11);
	if (iTemp > 9){
		iTemp =1-(iTemp % 10);
	}
	
	result=result*10+iTemp;
		
	if (result != val.substr(8,2)){
		anadeMensaje('El campo ' +campo+' no es una cuenta válida'  );
		return false;
	} else {
	  return true;
	}
	
	        
}
//comprueba q solo hay numeros
function soloNumeros(val, campo){
    var ValidChars = "0123456789";
    var esnum=true;
    var Char;

	for (i = 0; i < val.length && esnum == true; i++) { 
   		Char = val.charAt(i); 
		if (ValidChars.indexOf(Char) == -1){ esnum = false; }
    }
	if (esnum){
		return true;
	} else {
		anadeMensaje('El campo '+campo+ ' solo puede contener números');
		return false;	
	}
    
}

//comprueba que el tamaño NO es menor que el que se le asa por parametro
function textoLongitud(val,campo, tam){
	if (val.length < tam){
		if ( tam == 1){
			anadeMensaje('El campo '+campo+ ' no puede estar vacio');	
		} else {
			anadeMensaje('El campo '+campo+ ' no puede tener menos de '+tam+' caracteres');
		}
		
		return false;	
	}	else {
		return true;
	}
}


//comprueba que el tamaño NO es mayor que el que se le asa por parametro
function textoLongitudMenor(val,campo, tam){
	if (val.length > tam){
		anadeMensaje('El campo '+campo+ ' no puede ser mayor de '+tam+' caracteres');
		return false;	
	}	else {
		return true;
	}
}

//Comprueba si hay caracteres ilegales
function caractIlegales(val,campo){
	var ile = /[(\*\(\)\[\]\+\,\?\:\;\'\"\`\~\\#\$\%\^\&\<\>)+]/;
	
	if (!val.match(ile)){
		return true;
	} else {
		anadeMensaje('En el campo '+campo+' no se permiten caracteres especiales');
		return false;
	}
}

function sololetras(val, campo){
    var ValidChars = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijkmnñopqrstuvwxyz";
    var esnum=true;
    var Char;

	for (i = 0; i < val.length && esnum == true; i++) { 
   		Char = val.charAt(i); 
		if (ValidChars.indexOf(Char) == -1){ esnum = false; }
    }
	if (esnum){
		return true;
	} else {
		anadeMensaje('En el campo ' +campo+' solo se admiten letras');
		return false;	
	}
    
}

isDate = function(y, m, d){
    if(typeof y == "string" && m instanceof RegExp && d){
        if(!m.test(y)) return 1;
        y = RegExp["$" + d.y], m = RegExp["$" + d.m], d = RegExp["$" + d.d];
    }
    d = Math.abs(d) || 0, m = Math.abs(m) || 0, y = Math.abs(y) || 0;
    return arguments.length != 3 ? 1 : d < 1 || d > 31 ? 2 : m < 1 || m > 12 ? 3 : /4|6|9|11/.test(m) && d == 31 ? 4
    : m == 2 && (d > ((y = !(y % 4) && (y % 1e2) || !(y % 4e2)) ? 29 : 28)) ? 5 + !!y : 0;
};
/*
 * # 0 = Valid date
# 	1 = Date format invalid (regular expression failed or amount of arguments != 3)
# 	2 = Day isn't between 1 and 31
# 	3 = Month isn't between 1 and 12
# 	4 = On April, June, September and November there isn't the day 31
# 	5 = On February the month has only 28 days
# 	6 = Leap year, February has only 29 days
 */

Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};
