Validation.add('validate-nif', 'Documento de identidad erróneo.', function(dni) {
		if(Validation.get('IsEmpty').test(dni)) return true;

	var dni = dni.toUpperCase(); 
	var letters = 'TRWAGMYFPDXBNJZSQVHLCKE';
	
	if (!/(^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$|^[0-9]{8}[A-Z]{1})$/.match(dni)) {
		return false;
	}
	
	var adni = dni.split('');
	var letter = dni.charAt(8);
	
   	if (/^[0-9]{8}[A-Z]{1}$/.match(dni)) {
     	if (letter == letters.charAt( dni.substring(0, 8) % 23 )) {
			return true;
		} else {
			return false;
		}	
	}		
	
	var sum = Number(adni[2]) + Number(adni[4]) + Number(adni[6]);
	for (var i = 1; i < 8; i += 2) {
			var v = 2 * Number(adni[i]);
			var s = String(v).split('');
			sum += v>9? Number(s[0]) + Number(s[1]) : v;
    }
        
    var sumstr = String(sum);
   	var n = 10 - (sum % 10);
     
    if (n == 10) {
     	n = 0;
    }
   
	if (/^[KLM]{1}/.match(dni)) {
      	if (adni[8] == String.fromCharCode(64 + n)) {
            return true;
      	} else {
         	return false;
        }
     }
	
	 if (/^[ABCDEFGHJNPQRSUVW]{1}/.match(dni)) {
     	if (adni[8] == String.fromCharCode(64 + n) || adni[8]==n) {
       		return true;
       	} else {
       		return false;         	
       	}
     }
         
     if (/^[T]{1}/.match(dni)) {
    	if (adni[8] == /^[T]{1}[A-Z0-9]{8}$/.match(dni)) {
       		return true;
        } else {
       		return false;
       	}
	  }
		
	 if (/^[XYZ]{1}/.match(dni)) {
	 	var letter = letters.charAt( dni.replace('X','0').replace('Y','1').replace('Z','2').substring(0,8) % 23 );
 	
	 	if (adni[8] == letter) {
       		return true;
        } else {
       		return false;
       	}
	}

	
   	      
	return false;


  		
	});
	
	Validation.add('validate-phone', 'Número incorrecto.',  {
	   pattern : new RegExp("^\\d{9}$")
    }    
);


Validation.add('validate-movil', 'Número incorrecto.',  {
    pattern : new RegExp("^6\\d{8}$")
    }
    
);

Validation.add('validate-cp', 'Código postal incorrecto.',  {
    pattern : new RegExp("^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$")
    }
);

Validation.add('validate-name2', 'Este nombre es demasiado corto.',function (value) {
	if(Validation.get('IsEmpty').test(value)) return true;
	return value.length>2?true:false; 
});

Validation.add('validate-name', 'Este nombre/apellido no es válido.',function (value) {
	if(Validation.get('IsEmpty').test(value)) return true;
	return value.length>2?true:false; 
});

Validation.add('validate-password', 'El pasword debe de ser de como máximo 6 caracteres y ser igual en las dos casillas.', {
    maxLength : 6,
    equalToField: 'contrasena'
});



Validation.add('validar-usuario', 'Este número ya está registrado en eyou.', function(u,e) {
	
	if(Validation.get('IsEmpty').test(u)) return true;
	
	var result = true;
	var self = this;
	
	new Ajax.Request('/es/json/getcliente/u/'+u,
	{
	method:'get',
	asynchronous: false,
		onComplete: function(transport){
			var json = transport.responseText.evalJSON();
			if (json.exists) { 
				result =false;
			}
		}		
	});

	return result;
});




Validation.add('validate-money', 'Importe incorrecto.', function (precio) {
	if(Validation.get('IsEmpty').test(precio)) return true;
	
	var regex = new RegExp ("^\\d{1,6}(,\\d{1,2})?$","gi");
	return regex.test(precio);
	
	
});


Validation.add('validate-cc', 'Cuenta coriente incorrecto.', function (cc) {
	if(Validation.get('IsEmpty').test(cc)) return true;
	
	var c1 = cc.substr(0,4);
	var c2 = cc.substr(4,4);
	var c3 = cc.substr(8,2);
	var c4 = cc.substr(10,10);
	
	var parte1 = c1 + c2;
	var parte2 = c4;

	var Apesos = new Array(1,2,4,8,5,10,9,7,3,6);
	var DC1=0;
	var DC2=0;

	var x=8;
	

	
	while(x>0)
	{
		var digito = parte1.substr(x-1,1);
		DC1=DC1+(Apesos[x+2-1]*digito)
		x = x -1;
	}

	var Resto = DC1 % 11;
	DC1=11-Resto;

	if (DC1==10) {DC1=1}
	else if (DC1==11) {DC1=0}

	var x=10;
	while(x>0)
	{
		var digito = parte2.substr(x-1,1);
		DC2=DC2+(Apesos[x-1]*digito)
		x = x -1;
	}

	var Resto = DC2 % 11;
	var DC2=11-Resto;
	
	if (DC2==10) {DC2=1}
	else if (DC2==11) {DC2=0}

	DC = DC1+""+DC2;

	return (DC==c3);

});

