// FUNCIONES PARA VALIDAR LOS FORMULARIOS DE LOS PRODUCTOS DE LAS DIFERENTES CATEGORÍAS EN FUNCION DE LAS CLASES QUE SE LES ASIGNE A LOS INPUT.
/*
Clases de validacion:
Campos TXT:
        class_txt_obligatorio
        class_txt_numero
        class_txt_email
        class_txt_telefono
        class_txt_fecha
Campos CHK

Campos RDO

Campos CMB
        class_cmb_obligatorio.
        class_cmb_tipodocumento --> class_txt_numerodocumento

RESTRICCIONES:  
        * Todos los campos deben tener la propiedad title con el valor del título que se escriba antes del campo, ya que dichos títulos se guardarán en la base de datos para despues ser visualizados a los usuarios que reciban los formularios.
        * Nombre del formulario "formulario_contenido"
        * Todos los formularios se envían a la página inc_sendform.asp
        * Para los campos del tipo cmb, el primer valor del opction debe ser 0 o vacio.
        * Crear un campo oculto llamado valores, el cual almacenara toda la información del formulario separada por <*> entre informacion del campo y <**> entre campos.
        * Los campos comunes para todos los formularios que se almacenes son:
                txt_nombre --> Nombre
                txt_apellidos --> Apellidos
                txt_email --> Email
                txt_telefono --> Telefono
                txt_movil --> Movil
*/

var mensaje = '';
function validar_form(){
	var clases;
	var opcion;
	var i;
	$('#formulario_contenido input,select,textarea').each(
							function(){
								opcion = $(this).attr('id');
								opcion = opcion.substr(0, 3);
								switch (opcion){
									case 'txt':
											clases = $(this).attr('class');
											clases = clases.split(' ');
											for (i=0;i<=clases.length - 1;i++){
												//Validamos el campo en función de las clases que contenga el vector clases.
												switch (clases[i]){
													case 'class_txt_obligatorio':
														campo_txt_obligatorio(this);
													break;
													case 'class_txt_numero':
														if ($(this).val() != ''){campo_txt_numero(this);}
													break;
													/*case 'class_txt_DNI':
														if ($(this).val() != ''){campo_txt_DNI(this);}
													break;
													case 'class_txt_CIF':
														if ($(this).val() != ''){campo_txt_CIF(this);}
													break;*/
													case 'class_txt_email':
														if ($(this).val() != ''){campo_txt_email(this);}
													break;
													case 'class_txt_telefono':
														if ($(this).val() != ''){campo_txt_telefono(this);}
													break;
													case 'class_txt_fecha':
														if ($(this).val() != ''){campo_txt_fecha(this);}
													break;
												}
											}
										break;
										
									case 'chk':
										break;
										
									case 'rdo':
										break;
										
									case 'cmb':
											clases = $(this).attr('class');
											clases = clases.split(' ');
											for (i=0;i<=clases.length - 1;i++){
												//Validamos el campo en función de las clases que contenga el vector clases.
												switch (clases[i]){
													case 'class_cmb_obligatorio':
														campo_cmb_obligatorio(this);
													break;
													
													case 'class_cmb_tipodocumento':
														//Cuando exista esta clase dentro del formulario, debe existir un campo txt llamado class_txt_numerodocumento para validar el número del documento en función del tipo de documento seleccionado. Los tres valores permitidos para el combo son DNI, CIF y NIE.
														switch ($(this).attr('value')){
															case 'DNI':
																//Utilizamos la función "campo_txt_numerodocumento"
																validarDNI('#txt_numerodocumento');
																break;
															case 'CIF':
																//Utilizamos la función "campo_txt_numerodocumento"
																validarCIF('#txt_numerodocumento');
																break;
															case 'NIE':
																//Utilizamos la función "campo_txt_numerodocumento"
																validarNIE('#txt_numerodocumento');
																break;
														}
													break;
												}
											}
										break;
								}
								
							});
	if (mensaje != ''){
		alert('Mensaje de Error:\n' + mensaje)	
		mensaje = ''
	}else{
		var cadena = '';
		var prefijo;
		$('#formulario_contenido input, select, textarea').each(
								function(){
								prefijo = $(this).attr('id').substr(0,3);
								if ((prefijo == 'txt') || (prefijo == 'cmb') || (prefijo == 'chk') || (prefijo == 'rdo')){
									if ($(this).attr('id') != 'cadena_post'){
										if (cadena == ''){
											cadena = $(this).attr('id') + '<*>' + $(this).attr('title') + '<*>' + $(this).val();
										}else{
											cadena = cadena + '<**>' + $(this).attr('id') + '<*>' + $(this).attr('title') + '<*>' + $(this).val();
										}
									}
								}
								});
		//asignamos el valor de la cadena a un campo oculto del formulario para que se envie a la siguiente página sin que sea visto en la barra de dirección.
		$('#cadena_post').val(cadena);
		document.formulario_contenido.submit();
	}
}

/*/////////////////////////////////////////////////////////////////
	FUNCIONES PARA VALIDAR LOS DIFERENTES CAMPOS DEL FORMULARIO.
//////////////////////////////////////////////////////////////////*/
function campo_txt_obligatorio(elemento){
	if ($(elemento).val() == ''){
		$(elemento).addClass('class_errorencampo');
		mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' es obligatorio.\n';
	}else{
		$(elemento).removeClass('class_errorencampo');		
	}
}

//////////////////////////////////////////////////////////////////
function campo_txt_numero(elemento){
	var expr = /^([0-9])*$/;
	if (!expr.test($(elemento).val())){
		mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es numérico.\n';
		$(elemento).addClass('class_errorencampo');
	}else{
		$(elemento).removeClass('class_errorencampo');
	}
}

//////////////////////////////////////////////////////////////////
function campo_txt_telefono(elemento){
	var expr = /^([0-9]){9}$/;
	if (!expr.test($(elemento).val())){
		mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es valido (Ej: 922922922).\n';
		$(elemento).addClass('class_errorencampo');
	}else{
		$(elemento).removeClass('class_errorencampo');
	}
}

// /////////////////////////////////////////////////////////////
function campo_txt_email(elemento){
var expr = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$/;
	if (!expr.test($(elemento).val())){
		mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es valido (Ej: email@proveedor.com).\n';
		$(elemento).addClass('class_errorencampo');
	} else {
		$(elemento).removeClass('class_errorencampo');
	}
}

// /////////////////////////////////////////////////////////////
function validarNIE(elemento){
	var nie = $(elemento).val();
	var letraX;
	var numero;
	letraX = nie.substr(0,1)
	
	if ((letraX == 'X') || (letraX == 'x')){
		$(elemento).removeClass('class_errorencampo');
		nie = nie.substr(1, nie.length-1);
 	 	numero = nie.substr(0,nie.length-1);
  		let = nie.substr(nie.length-1,1);
		let = let.toUpperCase(); 
  		numero = numero % 23;
  		letra='TRWAGMYFPDXBNJZSQVHLCKET';
  		letra=letra.substring(numero,numero+1);
  		if (letra!=let){
			mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es valido.\n';
			$(elemento).addClass('class_errorencampo');
  		}else{
			$(elemento).removeClass('class_errorencampo');
  		}
	}
	else{
		mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es valido.\n';
		$(elemento).addClass('class_errorencampo');
	}
}

// ////////////////////////////////////////////////////////////
function validarDNI(elemento){
  var dni = $(elemento).val();
  numero = dni.substr(0,dni.length-1);
  let = dni.substr(dni.length-1,1);
  let = let.toUpperCase();
  numero = numero % 23;
  letra='TRWAGMYFPDXBNJZSQVHLCKET';
  letra=letra.substring(numero,numero+1);
  if (letra!=let){
	mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es valido.\n';
	$(elemento).addClass('class_errorencampo');
  }else{
	$(elemento).removeClass('class_errorencampo');
  }
}


// /////////////////////////////////////////////////////////////
function validarCIF(elemento){
	if (CIFValido($(elemento).val())){
		$(elemento).removeClass('class_errorencampo');
	}else{
		mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es valido.\n';
		$(elemento).addClass('class_errorencampo');
	}
}
// /////////////////////////////////////////////////////////////

function CIFValido(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)) 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
		return false;		
}



// /////////////////////////////////////////////////////////////
//Validación de una fecha.
function esDigito(sChr){
var sCod = sChr.charCodeAt(0);
return ((sCod > 47) && (sCod < 58));
}
function valSep(elemento){
var fecha = $(elemento).val();
var bOk = false;
bOk = bOk || ((fecha.charAt(2) == "-") && (fecha.charAt(5) == "-"));
bOk = bOk || ((fecha.charAt(2) == "/") && (fecha.charAt(5) == "/"));
return bOk;
}
function finMes(elemento){
var fecha = $(elemento).val();
var nMes = parseInt(fecha.substr(3, 2), 10);
var nRes = 0;
switch (nMes){
case 1: nRes = 31; break;
case 2: nRes = 29; break;
case 3: nRes = 31; break;
case 4: nRes = 30; break;
case 5: nRes = 31; break;
case 6: nRes = 30; break;
case 7: nRes = 31; break;
case 8: nRes = 31; break;
case 9: nRes = 30; break;
case 10: nRes = 31; break;
case 11: nRes = 30; break;
case 12: nRes = 31; break;
}
return nRes;
}
function valDia(elemento){
var bOk = false;
var fecha = $(elemento).val();
var nDia = parseInt(fecha.substr(0, 2), 10);
bOk = bOk || ((nDia >= 1) && (nDia <= finMes(elemento)));
return bOk;
}
function valMes(elemento){
var bOk = false;
var fecha = $(elemento).val();
var nMes = parseInt(fecha.substr(3, 2), 10);
bOk = bOk || ((nMes >= 1) && (nMes <= 12));
return bOk;
}
function valAno(elemento){
var bOk = true;
var fecha = $(elemento).val();
var nAno = fecha.substr(6);
bOk = bOk && ((nAno.length == 2) || (nAno.length == 4));
if (bOk){
for (var i = 0; i < nAno.length; i++){
bOk = bOk && esDigito(nAno.charAt(i));
}
}
return bOk;
}
function campo_txt_fecha(elemento){
var bOk = true;
if ($(elemento).val() != ""){
bOk = bOk && (valAno(elemento));
bOk = bOk && (valMes(elemento));
bOk = bOk && (valDia(elemento));
bOk = bOk && (valSep(elemento));
if (!bOk){
mensaje = mensaje + 'El campo ' + $(elemento).attr('title') + ' no es valido (Ej: 01/01/1900).\n';
$(elemento).addClass('class_errorencampo');
}else{
$(elemento).removeClass('class_errorencampo');
}
}
}
// /////////////////////////////////////////////////////////////

function campo_cmb_obligatorio(elemento){
	if (($(elemento).val() == '') || ($(elemento).val() == 0)){
		mensaje = mensaje + 'Debe seleccionar una opción del campo ' + $(elemento).attr('title') + '.\n';
		$(elemento).addClass('class_errorencampo');
	}else{
		$(elemento).removeClass('class_errorencampo');
	}
}
