/* 
	Clean Form Validation was written from scratch by Marc Grabanski
// http://marcgrabanski.com/code/clean-form-validation
/* Under the Creative Commons Licence http://creativecommons.org/licenses/by/3.0/
	Share or Remix it but please Attribute the authors. */

var cleanValidator = {
	init: function (settings) {
		this.settings = settings;
		this.form = document.getElementById(this.settings["formId"]);
		formInputs = this.form.getElementsByTagName("input");
		
		// change color of inputs on focus
		for(i=0;i<formInputs.length;i++)
		{
			if(formInputs[i].getAttribute("type") != "submit") {
				input = formInputs[i];
				input.style.backgroundColor = settings["inputColors"][0];
				input.onblur = function () {
					this.style.backgroundColor = settings["inputColors"][0];
				}
				input.onfocus = function () {
					this.style.backgroundColor = settings["inputColors"][1];
				}
			}
		};
	   
	},
	validate: function () {
		error = '';
		validationTypes = new Array("isRequired", "isEmail", "isNumeric", "isEqual", "isDni", "isCreditcard");
		for(n=0; n<validationTypes.length; n++) {
			var x = this.settings[validationTypes[n]];
			if(x != null) {
				for(i=0; i<x.length; i++) 
				{
					inputField = document.getElementById(x[i]);
					switch (validationTypes[n]) {
						case "isRequired" :
							valid = !isRequired(inputField);
							errorMsg = "Campo obligatorio.";
							break;
						case "isEmail" :
							valid = isEmail(inputField.value);
							errorMsg = "Email incorrectamente escrito.";
							break;
						case "isNumeric" :
							valid = isNumeric(inputField.value);
							errorMsg = "Solo puede introducir n&uacute;meros.";
							break;
						case "isEqual" :
							valid = isEqual(inputField.value);
							errorMsg = "Deben ser iguales";
							break;
						case "isDni" :
							valid = isDni(inputField.value);
							errorMsg = "Deben ser DNI Válido con su letra y sin espacios";
							break;
						case "isCreditcard" :
							valid = isCreditcard(inputField.value);
							errorMsg = "Deben una tarjeta válida y sin espacios en blanco";
							break;
					}
					if(!valid) {
						if (x[i]=='legal')
							{nombre_campo='Aviso legal'}
							else
							{nombre_campo=x[i];}
						error += nombre_campo +" "+errorMsg+"\n";
						inputField.style.backgroundColor = this.settings["errorColors"][0];
						//inputField.style.border = "1px solid "+this.settings["errorColors"][1];
					} else {
						inputField.style.backgroundColor = this.settings["inputColors"][0];
						//inputField.style.border = '1px solid';
					}
				}
			}
		}
		return error;
	},
	printError: function (error) {
		alert(error);
	}
};

// returns true if the string is not empty
function isRequired(inputlocal){
	if(inputlocal.type=="checkbox")
	{
	return (!inputlocal.checked);
	}
	else
	{
	str = inputlocal.value
	return (str == null) || (str.length == 0);
	}
}
// returns true if the string is a valid email
function isEmail(str){
	//if(isRequired(str)) return false;
	var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,4}$/i
	//var re = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/
	return re.test(str);
}
// returns true if the string only contains characters 0-9 and is not null
function isNumeric(str){
	if(isRequired(str)) return false;
	var re = /[\D]/g
	if (re.test(str)) return false;
	return true;
}
/*jose*/
// devuelve true si los parametros introducidos son iguales
function isEqual(matrix){
	if(isRequired(matrix[0])) return false;
	if(isRequired(matrix[1])) return false;		
	if (matrix[0]!=matrix[1]) return false;
	return true;
}
function isDni(numero)
{
	if(isRequired(str)) return false;
	
	var numero_local = numero.substring(0,8);
	var letra_introducida = numero.substring(8);
	
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	var calculo = numero_local%23;
	
	letra_calculada = letras.substring(calculo,calculo+1);
	
	/*
	 * salida
	 */
	if (letra_calculada == letra_introducida)
	{
		//console.log('exito!');
		return true;
	}
	else
	{
		return false;
	}
}
function isCreditcard(numero)
{
	/*
	 * Versión modificada del código existente en: http://www.braemoor.co.uk/software/creditcard.shtml
	 */
	
	var i;
	var numero;
	
	//if(!isNumeric(numero)) return false;
	if(numero == '1111222233334444') return false;
	if((numero.length > 19)||(numero.length < 13)) return false; // solo permite el rango válido de dígitos
	
	 		var checksum = 0;	// suma del checsum
		    var mychar = "";	// Siguiente caracter a procesar
		    var j = 1;			// Alterna su valor para actuar de multiplicador en el algoritmo
		  
		    // procesar todos los dígitos empezando por la derecha (De esta forma se ahorra el tener que detectar si es par o impar en el algoritmo de luhn)
		    var calc;
		    for (i = numero.length - 1; i >= 0; i--) 
		    {		    
		      // Extract the next digit and multiply by 1 or 2 on alternative digits.
		      	calc = Number(numero.charAt(i)) * j;
		    
		      // Si el resultado es mayor a 9 restar 9
		      if (calc > 9) 
		      {
		    	  calc = calc - 9;
		      }
		    
		      // Añadir al sumatorio de control
		      checksum = checksum + calc;
		    
		      // Cambiar el multiplicador
		      if (j ==1) {j = 2} else {j = 1};
		    }
		    // hecho si el sumatorio de control es divisible entre 10
		    // En caso ocntrario es un error.
		    if (checksum % 10 != 0)  
		    {
		    	return false; 
		    }
		    else
		    {
		    	return true;
		    }  
}
