// JavaScript Document
//****************************************************************************//
//Total Validator JS 1.0
//	LLamada - onKeyUp="totalvalidatorjs('MM_campo1','MM_campo2','iguala')" onclick="totalvalidatorjs('txtDominio','','vacio')"
//	valores de MM_tipo = vacio / iguala / mail / fecha / string / tamanyo_min / tamanyo_max / numeric / password
// valores para la funcion entero maxN número maximo de caracteres minN número minimo de carateres tam número de caracteres
//MarcarError(MM_campo,MM_Error)
//	Funcion para cambiar estilos del error 
//	MM_campo = id del input
//	MM_Error = valor de l error = 1 / 0




//incluir la libreria debajo de la etiqueta body
//****************************************************************************//

function totalvalidatorjs (MM_campo1,MM_campo2,MM_tipo){
 		//inicializamos el valor del error a cero
		Error = '0'
		//recuperamos el valor del campo 1
		MM_valortxt1 = document.getElementById(MM_campo1).value;
		
		//tipos de validaciones
		//vacio - iguala - mail - fecha - tamanyo
		switch (MM_tipo)
		{
			//campo vacio - campo vacio - campo vacio - campo vacio
			case 'vacio':
				if (MM_valortxt1==''){
					Error='1'
				}
				MarcarError(MM_campo1,Error)
				break;
			//campo = campo - campo = campo - campo = campo - campo = campo
			case 'iguala':
				MM_valortxt2 = document.getElementById(MM_campo2).value;
				Error='1'
				if (MM_valortxt1 == MM_valortxt2){
					Error='0'
				}
				MarcarError(MM_campo1,Error)
				MarcarError(MM_campo2,Error)
				break;
			//mail - mail - mail - mail - mail - mail - mail - mail - mail
			case 'email':

				var filter=/^[0-9a-z_\-\.]+@[0-9a-z\-\.]+\.[a-z]{2,4}$/i;
				if (MM_valortxt1.length == 0 );
				if (filter.test(MM_valortxt1)){
					Error = '0';
				}
				else{
					Error = '1';
				}
				MarcarError(MM_campo1,Error)
				break;
			
			
			//fecha - fecha - fecha - fecha - fecha - fecha - fecha - fecha
			case 'fecha':
				var filter= /^\d{1,2}\/\d{1,2}\/\d{2,4}$/;
				if (MM_valortxt1.length == 0 );
				if (filter.test(MM_valortxt1)){
					Error = '0';
				}
				else{
					Error = '1';
				}
				MarcarError(MM_campo1,Error)
				break;
			//case 'tamanyo_max':
//				
//				if (MM_valortxt1.length <= MM_campo2 ){
//					Error = '0';
//				}
//				else{
//					Error = '1';
//				}
//				MarcarError(MM_campo1,Error)
//				break;
//			case 'tamanyo_min':
//				
//				if (MM_valortxt1.length >= MM_campo2 ){
//					Error = '0';
//				}
//				else{
//					Error = '1';
//				}
//				MarcarError(MM_campo1,Error)
//				break;
			
			case 'string':	
				if (MM_valortxt1.length == 0 )
				{
					Error = '1';
				}
				else
				{
					if(MM_campo2.length > 0)
					{
						tipo=MM_campo2.substr(0, 3);
						
						switch (tipo)
						{
							case "min":
								if (MM_valortxt1.length >= MM_campo2.substr(3))
								{
									Error = '0';
								}
								else{
									Error = '1';
								}
								MarcarError(MM_campo1,Error)
								break;
							case "max":
								if (MM_valortxt1.length <= MM_campo2.substr(3) ){
									Error = '0';
								}
								else{
									Error = '1';
								}
								MarcarError(MM_campo1,Error)
								break;
							case "tam":
								//alert (MM_campo2.substr(3));
								if (MM_valortxt1.length == MM_campo2.substr(3) ){
									Error = '0';
								}
								else{
									Error = '1';
								}
								MarcarError(MM_campo1,Error)
								break;
							}
						}
				
				}
				MarcarError(MM_campo1,Error)
				break;
				
			case 'numeric':
				var filter= /^\d*$/;
				if (MM_valortxt1.length == 0 )
				{
					Error = '1';
				}
				else{
					if (filter.test(MM_valortxt1))
					{
						if(MM_campo2.length > 0)
						{
							tipo=MM_campo2.substr(0, 3);
							
							switch (tipo)
							{
								case "min":
									if (MM_valortxt1.length >= MM_campo2.substr(3))
									{
										Error = '0';
									}
									else{
										Error = '1';
									}
									MarcarError(MM_campo1,Error)
									break;
								case "max":
									if (MM_valortxt1.length <= MM_campo2.substr(3) ){
										Error = '0';
									}
									else{
										Error = '1';
									}
									MarcarError(MM_campo1,Error)
									break;
								case "tam":
									//alert (MM_campo2.substr(3));
									if (MM_valortxt1.length == MM_campo2.substr(3) ){
										Error = '0';
									}
									else{
										Error = '1';
									}
									MarcarError(MM_campo1,Error)
									break;
							}
						}
					}
					else
					{
						Error='1';
					}

					MarcarError(MM_campo1,Error)
				}
					//alert(MM_campo1 + "/n" + MM_campo2 + "/n" + tipo + "/n" + MM_campo2.substr(3) )
					
					
					break;

			//Contraseña - Contraseña - Contraseña - Contraseña - Contraseña - Contraseña - Contraseña - Contraseña - Contraseña
			case 'password':
				var filter= /^(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{8,10})$/;
				if (MM_valortxt1.length == 0 );
				if (filter.test(MM_valortxt1)){
					Error = '0';
				}
				else{
					Error = '1';
				}
				MarcarError(MM_campo1,Error)
				break;	 	

			case 'codigo_postal':
				var frase;
				frase=MM_valortxt1.replace(/[.]/gi,'');
				
				var filter= /^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$/;
				if (frase.length == 0 );
				if (filter.test(frase)){
					Error = '0';
				}
				else{
					Error = '1';
				}
				MarcarError(MM_campo1,Error)
				break;		

			case 'telefono':
				var filter=/^[689]\d{8}$/;
				if (MM_valortxt1.length == 0 )
				{
					Error = '1';
				}
				else
				{
					str=MM_valortxt1.replace(/ /g, '');
					if (filter.test(str)){
						Error = '0';
					}
					else{
						Error = '1';
					}
				}
				MarcarError(MM_campo1,Error)
				break;
				
			case 'dni':
				var resul = true;
				var temp = MM_valortxt1.toUpperCase();
				var cadenadni = "TRWAGMYFPDXBNJZSQVHLCKE";
				if (temp !== '') {
					//algoritmo para comprobacion de codigos tipo CIF
					suma = parseInt(temp.charAt(2)) + parseInt(temp.charAt(4)) + parseInt(temp.charAt(6));
					for (i = 1; i < 8; i += 2) {
						temp1 = 2 * parseInt(temp.charAt(i));
						temp1 += '';
						temp1 = temp1.substring(0,1);
						temp2 = 2 * parseInt(temp.charAt(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));
					//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)) {
						if ((temp.length == 9) && (/^[0-9]{9}$/.test(temp))) {
							var posicion = temp.substring(8,0) % 23;
							var letra = cadenadni.charAt(posicion);
							var letradni = temp.charAt(8);
							Error="1";
						} else if (temp.length == 8) {
							if (/^[0-9]{1}/.test(temp)) {
								var posicion = temp.substring(8,0) % 23;
								var letra = cadenadni.charAt(posicion);
								var tipo = 'NIF';
							} else if (/^[KLM]{1}/.test(temp)) {
								var letra = String.fromCharCode(64 + n);
								var tipo = 'NIF';
							} else if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp)) {
								var letra = String.fromCharCode(64 + n);
								var tipo = 'CIF';
							} else if (/^[T]{1}/.test(temp)) {
								var letra = String.fromCharCode(64 + n);
								var tipo = 'NIE';
							} else if (/^[XYZ]{1}/.test(temp)) {
								var pos = str_replace(['X', 'Y', 'Z'], ['0','1','2'], temp).substring(0, 8) % 23;
								var letra = cadenadni.substring(pos, pos + 1);
								var tipo = 'NIE';
							}
							if (letra !== '') {
								Error="1";
							} else {
								Error="1";
							}
							Error="1";
						} else if (temp.length < 8) {
							Error="1";
						} else {
							Error="1";
						}
					}
					//comprobacion de NIFs estandar
					else if (/^[0-9]{8}[A-Z]{1}$/.test(temp)) {
						var posicion = temp.substring(8,0) % 23;
						var letra = cadenadni.charAt(posicion);
						var letradni = temp.charAt(8);
						if (letra == letradni) {
							Error="0";
						} else if (letra != letradni) {
							Error="1";
						} else {
							Error="1";
						}
					}
					//comprobacion de NIFs especiales (se calculan como CIFs)
					else if (/^[KLM]{1}/.test(temp)) {
						if (temp[8] == String.fromCharCode(64 + n)) {
							Error="0";
						} else if (temp[8] != String.fromCharCode(64 + n)) {
							Error="1";
						} else {
							Error="1";
						}
					}
					//comprobacion de CIFs
					else if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp)) {
						
						var temp_n = n + '';
						var letra=parseInt(temp_n.substring(temp_n.length-1, temp_n.length));
						var letra2= String.fromCharCode(64 + n);
						//alert (letra);
						//alert (letra2);
						if (temp.charAt(8) ==  letra2 || temp.charAt(8) == letra) {
							Error="0";
						} else if (temp.charAt(8) != letra2) {
							Error="1";
						} else if (temp.charAt(8) != letra) {
							Error="1";
						} else {
							Error="1";
						}
					}
					//comprobacion de NIEs
					//T
					else if (/^[T]{1}/.test(temp)) {
						if (temp[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp)) {
							return 3;
						} else if (temp[8] != /^[T]{1}[A-Z0-9]{8}$/.test(temp)) {
							var letra = String.fromCharCode(64 + n);
							var letranie = temp.charAt(8);
							if (letra != letranie) {
								Error="1";
							} else {
								Error="1";
							}
						}
					}
					//XYZ
					else if (/^[XYZ]{1}/.test(temp)) 
					{
						//var pos = str_replace(['X', 'Y', 'Z'], ['0','1','2'], temp).substring(0, 8) % 23;
						if (/^[X]{1}/.test(temp))
						{
							temp=temp.replace('X', '0');
						}
						else if (/^[Y]{1}/.test(temp))
						{
							temp=temp.replace('Y', '1');
						}
						else if (/^[Z]{1}/.test(temp))
						{
							temp=temp.replace('Z', '2');
						}
						
						var pos=temp.substring(0, 8) % 23;
						var letra = cadenadni.substring(pos, pos + 1);
						var letranie = temp.charAt(8);
						if (letranie == letra) 
						{
							Error="0";
						} 
						else if (letranie != letra)
						{
							Error="1";
						} else {
							Error="1";
						}
					}
				}
				MarcarError(MM_campo1,Error)
				break;

		}

		//funcion para cambiar el estilo del input, la ruta de la imagen debe ser dinámica ya que la librería se va a poder utilizar en cualquier sitio		
		
		function MarcarError(MM_campo,MM_Error){
			//para recuperar la posicion exacta del input
			var elem = document.getElementById(MM_campo);
			
		//estilos validado ok
		if (MM_Error == '0' )  {
			document.getElementById(MM_campo).style.borderColor = '#00ff00';
			document.getElementById(MM_campo).style.borderWidth = '2px';
			document.getElementById(MM_campo).style.borderStyle = 'solid';
			document.getElementById(MM_campo).style.visibility = 'visible';
		}
		//estilos no valido ko
		if (MM_Error == '1' )  {
			document.getElementById(MM_campo).style.borderColor = '#ff0000';
			document.getElementById(MM_campo).style.borderWidth = '2px';
			document.getElementById(MM_campo).style.borderStyle = 'solid';
			document.getElementById(MM_campo).style.visibility = 'visible';
		}
	}
}

//esta funcion debe interrupir el formulario y comprobar que no hay error 
//hay que desayorrarla

function TotalValidatorjsEnvio(MM_boton){
	if (TotalValidatorjsError == '1'){
		document.getElementById(MM_boton).type = 'button';
		alert('El formulario contiene errores')
	}
	if (TotalValidatorjsError == '0'){
		document.getElementById(MM_boton).type = 'submit';
	}
}

