jQuery.validator.addMethod(
	"regex", 
	function(value, element, regexp) { 
		var re = new RegExp(regexp);
		return this.optional(element) || re.test(value);
	}, 
	"Entrada incorrecta");

$(function() {
	
	$("#user_signin").validate({

		onfocusout: false,
  	onkeyup: false,
  	
		rules: {
			'user_signin[username]': {
				required: true,
				minlength: 4, 
				maxlength: 20
			},
			'user_signin[password]': {
				required: true,
				minlength: 4, 
				maxlength: 128
			}
		},
		messages: {
			'user_signin[username]': {
				required: 'El nombre de usuario es obligatorio',
				minlength: 'El nombre de usuario es demasiado corto',
				maxlength: 'El nombre de usuario es demasiado largo'
			},
			'user_signin[password]': {
				required: 'La contraseña es obligatoria',
				minlength: 'La contraseña es demasiado corta',
				maxlength: 'La contraseña es demasiado larga'
			}
		}
	});
	
	$("#user_register").validate({
		rules: {
			'user_register[username]': {
				required: true,
				minlength: 4, 
				maxlength: 20, 
				regex: /^[0-9A-Za-z]+$/
			},
			'user_register[password]': {
				required: true,
				minlength: 4, 
				maxlength: 128, 
				equalTo: "#user_register_password_again"
			},
			'user_register[terms]': {
				required: true
			},
			'user_register[profile][email]': {
				required: true,
				email: true,
				maxlength: 80
			}
		},
		messages: {
			'user_register[username]': {
				required:  'El nombre de usuario es obligatorio',
				minlength: 'El nombre de usuario es demasiado corto',
				maxlength: 'El nombre de usuario es demasiado largo',
				regex:     'El nombre de usuario solo puede contener letras y/o números'
			},
			'user_register[password]': {
				required:  'La contraseña es obligatoria',
				minlength: 'La contraseña es demasiado corta',
				maxlength: 'La contraseña es demasiado larga',
				equalTo:   'La contraseñas no son iguales. Por favor, asegurate que introduces el mismo texto en los dos campos'
			},
			'user_register[terms]': {
				required: 'Debes aceptar los términos y condiciones'
			},
			'user_register[profile][email]': {
				required:  'El email es obligatorio',
				email:     'El email es incorrecto',
				maxlength: 'El email es demasiado largo'
			}
		}
	});
	
	$("#user_password_reminder").validate({
		rules: {
			'user_password_reminder[email]': {
				required: true,
				email: true,
				maxlength: 80
			}
		},
		messages: {
			'user_password_reminder[email]': {
				required:  'El email es obligatorio',
				email:     'El email es incorrecto',
				maxlength: 'El email es demasiado largo'
			}
		}
	});
	
	$("#user_password_change").validate({
		rules: {
			'user_password_change[password]': {
				required: true,
				minlength: 4, 
				maxlength: 128, 
				equalTo: "#user_password_change_password_again"
			}
		},
		messages: {
			'user_password_change[password]': {
				required:  'La contraseña es obligatoria',
				minlength: 'La contraseña es demasiado corta',
				maxlength: 'La contraseña es demasiado larga',
				equalTo:   '<strong>La contraseñas no son iguales</strong>.<br /> Por favor, asegurate que introduces el mismo texto en los dos campos'
			}
		}
	});
	
	$("#user_profile").validate({
		rules: {
			'user_profile[first_name]': {
				maxlength: 80 
			},
			'user_profile[last_name]': {
				maxlength: 80
			},
			'user_profile[message]': {
				maxlength: 200
			}
		},
		messages: {
			'user_profile[first_name]': {
				maxlength: 'El nombre es demasiado largo'
			},
			'user_profile[last_name]': {
				maxlength: 'El apellido es demasiado largo'
			},
			'user_profile[message]': {
				maxlength: 'El mensaje es demasiado largo'
			}
		}
	});
	
	$("#contact").validate({
		rules: {
			'contact[name]': {
				required: true, 
				maxlength: 80
			},
			'contact[email]': {
				required: true,
				email: true,
				maxlength: 80
			},
			'contact[topic]': {
				required: true, 
				maxlength: 80
			},
			'contact[message]': {
				required: true 
			}
		},
		messages: {
			'contact[name]': {
				required: 'El nombre de contacto es obligatorio', 
				maxlength: 'El nombre de contacto es demasiado largo'
			},
			'contact[email]': {
				required:  'El email de contacto es obligatorio',
				email:     'El email de contacto es incorrecto',
				maxlength: 'El email de contacto es demasiado largo'
			},
			'contact[topic]': {
				required: 'El asunto de contacto es obligatorio', 
				maxlength: 'El asunto de contacto es demasiado largo'
			},
			'contact[message]': {
				required: '<br>El mensaje de contacto es obligatorio' 
			}
		}
	});
	
});

