function Signin() {

	var imageLoading = "/images/loadingSmall.gif";
	var imageWarning = "/images/alerta.png";
	var imageOk = "/images/active.png";
	var imageError = "/images/error.png";
	var suggetedUsername = false;
	var previousEmail = "";
	var previousUsername = "";
	var previousCaptcha = "";
	//var previousDni = "";
	var emailOk = false;
	var remailOk = false;
	var usernameOk = false;
	var passwordOk = false;
	var sexOk = false;
	var dateOk = false;
	var captchaOk = false;
	//var dniOk = false;
	var paisOk = false;
        var locationOk = false;
	var confirmPassword = false;	
	var firstLoad = true;	
	var invalidateValidation = false;
	var urlValidateUsername = null;
	//var urlValidateDni = null;
	var urlValidateEmail = null;
	var urlValidateCaptcha = null;
	
	//this.configureUrl = function(usernameUrl, dniUrl, emailUrl, captchaUrl) {
	this.configureUrl = function(usernameUrl, emailUrl, captchaUrl) {
		urlValidateUsername = usernameUrl;
//		urlValidateDni = dniUrl;
		urlValidateEmail = emailUrl;
		urlValidateCaptcha = captchaUrl;
	},
	
	this.invalidate = function() {
		invalidateValidation = true;		
	},
	
	this.revalidate = function(){
		invalidateValidation = false;
	},
		
	this.sign = function() {
		Modalbox.hide({
			afterHide: function() {
				var email = $('email');
				if (email) {
					email.focus();
				}
			}
		});
	},
	
	this.validateEdit = function(){
		jQuery(function($) {
			var msgContrasena = $('#msgContrasena');
			
			signin.validateUsername();
			if (!usernameOk) {
				msgContrasena.html("El nombre de usuario (apodo) no es válido o ya esta siendo utilizado");
				return false;
			}
	
			signin.validateDate();
			if (!dateOk){
				msgContrasena.html("La fecha de nacimiento no es válida, rellena todos los campos");
				return false;
			}
	
			signin.validateSex();
			if (!sexOk){
				msgContrasena.html("El sexo no es válido");
				return false;
			}		
	
			if ($('#msgPais')){
				signin.validatePais();
				if (!paisOk){
					msgContrasena.html("Por favor, elije un país.");
					return false;			
				}
			}
	
			if ($('#msgLocation')){
				signin.validateLocation();
				if (!locationOk){
					msgContrasena.html("Por favor, elije una población.");
					return false;			
				}
			}
	
//			signin.validateDni();
//			if(!dniOk){
//				msgContrasena.html("Este Documento de indentificación ya pertenece a otro usuario");
//				return false;
//			}
			
//			if($('#suscriber_dni')){
//			if($('#suscriber_dni').length == 0){
//				msgContrasena.html("El campo Documento de Identificaci&oacute;n es obligatorio.");
//				return false;
//			}
//			
//			signin.validateDni();
//			if(!dniOk){
//				msgContrasena.html("Este Documento de indentificación ya pertenece a otro usuario");
//				return false;
//			}			
//		}
	
//			if(dniOk){	
				$('#form_suscriber').submit();
				return true;
//			}
//			else{
//				return false;
//			}
		});
	},
		
	this.validateSignIn = function(validaEmail) {
		jQuery(function($){	
			var msgContrasena = $('#msgContrasena');		
			
			if (validaEmail){			
				
				signin.validateEmail();
				if (!emailOk) {			
					msgContrasena.html("El correo electrónico no es válido o ya ha sido registrado");
					return false;
				}
				
				signin.validateRemail();
				if (!remailOk){
					msgContrasena.html("Los correos electrónicos no coinciden.");
					return false;
				}
						
				signin.validateSex();
				if (!sexOk){
					msgContrasena.html("El sexo no es válido");
					return false;
				}
				
				signin.validateDate();
				if (!dateOk){
					msgContrasena.html("La fecha de nacimiento no es válida, rellena todos los campos");
					return false;
				}
                                
                                if ($('#msgLocation')){
                                    signin.validateLocation();
                                    if (!locationOk){
                                            msgContrasena.html("Por favor, elije una población.");
                                            return false;			
                                    }
                                }

				signin.validateCaptcha();
				if(!captchaOk){
					msgContrasena.html("El código captcha no es válido");
					return false;
				}
			}
			
			signin.validateUsername();
			if (!usernameOk) {
				msgContrasena.html("El nombre de usuario (apodo) no es válido o ya esta siendo utilizado");
				return false;
			}
			
					
			if (!passwordOk){
				msgContrasena.html("La contraseña debe tener por lo menos de 8 caracteres y no debe contener") + "-.^*{}!\"·$%&/()=";
				return false;			
			}
			
			if ($('#msgPais')){
				signin.validatePais();
				if (!paisOk){
					msgContrasena.html("Por favor, elije un país.");
					return false;			
				}
			}
			
			if(!$('#suscriber_conditions').is(':checked')){
				msgContrasena.html("Debes leer y aceptar las condiciones para el registro.");
				return false;
			}
					
//			var validation = new Validation('form_register', {stopOnFirst:true, onSubmit: false, useTitles: true});
//			
//			var result = validation.validate();
//			if (!result) {	
//				return false;
//			} else {
				if($('#form_register').valid()){
					$('#form_register').submit();			
					return true;
				}

//			}
		});
	},	

	this.validateRemail = function(){	
		jQuery(function($){	
			//alert(invalidateValidation);
			if(!invalidateValidation){
				
				var email = $('#suscriber_mail');
				var msgRemail = $('#msgRemail');
				var msgContrasena = $('#msgContrasena');
				msgContrasena.html("");
				if (emailOk){
					var statusRemail = $('#img_statusRemail');
					$('#validationRemail').show();
					
					var remail = $('#remail');
					if (remail.val() == "" && email.val() != ""){
						msgRemail.html("Debe repetir el correo electrónico.");
						statusRemail.attr("src", imageError);
						return;
					}
					else{
						msgRemail.html("");
						if(remail.val().toLowerCase() != email.val().toLowerCase()){
							msgRemail.html("Los correos electrónicos no coinciden.");
							statusRemail.attr("src", imageError);	
							return;
						}
						else{
							statusRemail.attr("src", imageOk);
							remailOk = true;
						}
					}
				}
			}
		});
	},

	this.validateConfirmPassword = function(){
		jQuery(function($){	
			if(!invalidateValidation){
				var password = $('#suscriber_new_password');
				var msgConfirmPass = $('#msgConfirmPass');
				var msgContrasena = $('#msgContrasena');
				msgContrasena.html("");
				var confirmPassword = $('#suscriber_confirm_new_password');
				var statusPassword = $('#img_statusPassword');
				$('#validationPassword').css('visibility', 'visible');
				if (confirmPassword.val() == "" && password.val() != ""){
					msgConfirmPass.html("Debe confirmar la contraseña.");
					statusPassword.attr("src", imageError);
					return;
				}
				else{
		
					msgConfirmPass.html("");
					if(confirmPassword.val().toLowerCase() != password.val().toLowerCase()){
						msgConfirmPass.html("Las contraseñas no coinciden.");
						statusPassword.attr("src", imageError);
						return;
					}
					else{
						if(password.val().length < 8 || confirmPassword.val().length < 8){
							msgConfirmPass.html("La contraseña debe tener mínimo 8 caracteres.");
							statusPassword.attr("src", imageError);
							return;
						}else{
							statusPassword.attr("src", imageOk);
							confirmPassword = true;
						}
					}
				}
			}
		});
	},
		
	this.validateEmail = function() {
		jQuery(function($){	
			if (!invalidateValidation){
				var msgEmail = $('#msgEmail');
				var msgContrasena = $('#msgContrasena');
				msgContrasena.html("");
		
				var email = $('#suscriber_mail');
				if (email.val() == ""){
					msgEmail.html("Debe introducir un correo electrónico.");
					return;
				}
				
				//validation because IE dont fire onchange the first time		
				if (email.val() == previousEmail) return;
				emailOk = false;
				previousEmail = email.val(); 
		
				//set image visible
//				$('#validationEmail').css('visibility', 'visible'); 
				$('#validationEmail').show(); 
				
				var statusEmail = $('#img_statusEmail');
		
				var validEmail = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(email.val());

				if (!validEmail) {
					statusEmail.src = imageWarning;
					msgEmail.html("Email inválido.");
					return;
				}
		
				statusEmail.attr("src", imageLoading);
				
				
				//alert(current.urlValidateEmail);
				var url = urlValidateEmail + "/mail/" + email.val();
				
		      	jQuery.ajax({
					type: "GET",
					url: url,
					dataType:"xml",
					success: function(xml) {
						//var emails = transport.responseXML.getElementsByTagName('email');
		      			var emails = $(xml).find('email');
						var numEmails =emails.length;
						//alert(numEmails);
						if(numEmails == 0){
							emailOk = true;
							statusEmail.attr("src", imageOk);
							msgEmail.html("");
						}
						else{
							msgEmail.html("Este correo electrónico ya ha sido registrado, elije otro. <br> Si ya te habias registrado, escribenos a info@esloultimo para activar tu cuenta.");					
							statusEmail.attr("src", imageWarning);
						}
					}
				});			
			}
		});
	},
	
//	this.validateDni = function() {
//		jQuery(function($){	
//			if (!invalidateValidation){
//				var msgDni = $('#msgDni');
//				var msgContrasena = $('#msgContrasena');
//				msgContrasena.html("");	
//				//set image visible
//				var validationDni = $('#validationDni')
//				var statusDni = $('#img_statusDni');
//				
//				var current = this;
//				
//				var dni = $('#suscriber_dni');
//				if(dni.val().length > 0) {
//					validationDni.css('visibility', 'visible');
//					if ($('#lastDni').val().toLowerCase() == dni.val().toLowerCase()){
//						dniOk = true;
//						statusDni.attr("src", imageOk);
//						msgDni.html("Este era el Documento que estaba guardado.");
//						msgDni.css('color', '#2e6788');
//					} else{			
//						var isValid="";
//				      	jQuery.ajax({
//							type: "GET",
//							url: urlValidateDni + "/dni/" + dni.val().toLowerCase(),
//							dataType: "xml",
//							beforeSend: function () {
//				      			statusDni.attr("src", imageLoading);
//				      		},
//							success: function(xml) {
//						  		isValid = $(xml).find('valid').text();
//					  			
//								if(isValid == 1) {
//									current.dniOk = true;
//									statusDni.attr("src", imageOk);
//									msgDni.html("");
//									msgDni.css('color', '#FF0000');
//								} else {
//									current.dniOk = false;
//									msgDni.html("Este Documento de Indentificación ya pertenece a otro usuario, revisalo.");
//									msgDni.css('color', '#FF0000');
//									statusDni.attr("src", imageWarning);
//								}
//							}
//						});	
//					}
//				} else {
//					validationDni.css('visibility', 'hidden');
//					msgDni.html("");
//					dniOk = true;
//				}
//			}
//		});
//	},
	
	this.validateClau = function() {
		jQuery(function($){	
			if(!invalidateValidation){
				var msgClau = $('#msgClau');
				var msgContrasena = $('#msgContrasena');
				msgContrasena.html("");
				
				var password = $('#suscriber_clau');
				
				if (password.val() == ""){
					msgClau.html("Debe introducir la contraseña.");
					return;
				}
				
				// set image visible
				$('#validationPassword').css('visibility', 'visible');
				var statusPassword = $('#img_statusPassword');
		
				var rg = new RegExp("^([0-9a-zA-Z\\s]*)$", "g");
				var validPassword = rg.test(password.val());
				//var validPassword = Validation.get('validate-alphanum').test(password.value);
				if (!validPassword) {
					msgClau.html("La contraseña no permite caracteres: !?_\"#·$%&/()=¿¡!.");
					statusPassword.attr('src', imageWarning);
					return;
				}		
						
				statusPassword.attr('src', imageLoading);
				
				if (password.val().length > 7){
					passwordOk = true;
					statusPassword.attr('src', imageOk);
					msgClau.html("");
				}
				else{
					msgClau.html("La contraseña debe tener al menos 8 caracteres.");
					statusPassword.attr('src', imageWarning);
					passwordOk = false;
					return;			
				}
			}
		});
	},
		
	this.validatePais = function(){
		jQuery(function($){	
			var msgPais = $('#msgPais');
			var msgContrasena = $('#msgContrasena');
			msgContrasena.html("");
			
			var pais = $('#suscriber_pais_id');
			
			if (pais.val() == ""){
				paisOk = false;
				msgPais.html("Por favor, elije el país donde resides.");
			}
			else{
				paisOk = true;
				msgPais.html("");
			}
		});
	},
		
	this.validateLocation = function(){
		jQuery(function($){	
                        var msgLocation = $('#msgLocation');
			var msgContrasena = $('#msgContrasena');
			msgContrasena.html("");
			
			var location = $('#suscriber_poblacion');
			
			if (location.val() == ""){
				locationOk = false;
				msgLocation.html("Por favor, elije la población donde resides.");
			}
			else{
				locationOk = true;
				msgLocation.html("");
			}
		});
	},
		
	this.validateSex = function(){
		jQuery(function($){	
			var msgSex = $('#msgSex');
			var msgContrasena = $('#msgContrasena');
			msgContrasena.html("");
			
			var sex = $('#suscriber_sexo');
			
			if (sex.val() == "H" || sex.val() == "M"){			
				sexOk = true;
				msgSex.html("");
			}
			else{			
				sexOk = false;
				msgSex.html("Por favor, elije tu sexo.");
			}
		});
	},
	
	this.validateDate = function(){
		jQuery(function($){	
			var msgDate = $('#msgDate');
			var msgContrasena = $('#msgContrasena');
			msgContrasena.html("");
			
			var day = $('#suscriber_data_nacimiento_day');
			var month = $('#suscriber_data_nacimiento_month');
			var year = $('#suscriber_data_nacimiento_year');
			
			if (day.val() == "" || month.val() == "" || year.val() == ""){
				dateOk = false;
				msgDate.html("Por favor, elije la fecha completa.");
			}
			else{
				dateOk = true;
				msgDate.html("");
			}
		});
	},
	
	this.validatePassword = function() {
		jQuery(function($){	
			var msgContrasena = $('#msgContrasena');
			msgContrasena.html("");
			
			var statusPassword = $('#statusPassword');
			var password = $('#password');
			var password2 = $('#password2'); 
	
			$('#validationPassword').css('visibility', 'visible');
			
			if (password.val() == "" || password2.val() == "") {
				msgContrasena.html("Debe introducir la contraseña y la confirmación de la contraseña");
				statusPassword.attr('src', imageWarning);
				return;
			}
	
			if(password.val() != password2.val()) {
				msgContrasena.html("La contraseña no coincide");
				statusPassword.attr('src', imageWarning);
			} else {
				statusPassword.attr('src', imageOk);
			}
		});
	},
	
	this.validateUsername = function() {
		jQuery(function($) {
			if(!invalidateValidation){
				
				var msgUsername = $('#msgUsername');
				var msgContrasena = $('#msgContrasena');
				msgContrasena.html("");
				
				var username = $('#suscriber_codigo');
				if (username.val() == ""){
					msgUsername.html("Debe introducir un nombre de usuario.");
					return;
				}
				$('#validationUsername').show();
				var statusUsername = $('#img_statusUsername');
			
				var rg = new RegExp("^([0-9a-zA-Z\\s]*)$", "g");
		  		var validUsername = rg.test(username.val());
				if (!validUsername) {
					msgUsername.html("El username no permite caracteres: !?_\"#·$%&/()=¿¡!.");				
					statusUsername.attr("src", imageWarning);
					usernameOk = false;
					return;
				}
		
				if ( $('#lastUsername') ){
					var lastUsername = $('#lastUsername');
				}else{
					var lastUsername = "";
				}
				
				if (lastUsername.val() == username.val()){
					usernameOk = true;
					statusUsername.attr("src", imageOk);
					msgUsername.html("Este es el apodo que ya tenias guardado.");
					msgUsername.css('color', '#2e6788');
				}
				else{
					//validation because IE dont fire onchange the first time		
					if (username.val() == previousUsername) return;
					usernameOk = false;
					previousUsername = username.val(); 
		
					statusUsername.attr("src", imageLoading);			
					var url = urlValidateUsername + "/username/" + username.val();
			      	jQuery.ajax({
						type: "GET",
						url: url,
						dataType:"xml",
						success: function(xml) {				  			
					  		//var usernames = transport.responseXML.getElementsByTagName('username');
					  		var usernames = $(xml).find('username');
					  		var numUsernames = usernames.length;
							if (numUsernames == 0) {
								usernameOk = true;
								statusUsername.attr("src", imageOk);
								msgUsername.html("");
							} 
							else {					
								statusUsername.attr("src", imageWarning);
								msgUsername.html("Ya existe un usuario con ese nombre, por favor elija otro.");
								msgUsername.css('color', '#FF0000');
							}
						}
					});
				}
			}
		});
	},
	
	this.validateCaptcha = function() {
		jQuery(function($) {			
			var msgCaptcha = $('#msgCaptcha');
			var msgContrasena = $('#msgContrasena');
			
			if (msgContrasena!= null)
				msgContrasena.html("");
			
			var captcha = $('#captcha');
			if (captcha.val() == ""){
				if (!firstLoad)
					msgCaptcha.html("Debe ingresar el código que se ve en la imagen (captcha).");
				captchaOk = false;
				firstLoad = false;
				return;
			}
			
	
			//validation because IE dont fire onchange the first time		
			//if (captcha.value == previousCaptcha) { captcha.value = previousCaptcha;/*alert("caso raro"); return; */}
			//captchaOk = false;
			previousCaptcha = captcha.val();
	
			$('#validationCaptcha').css('visibility', 'visible');
			var statusCaptcha = $('#img_statusCaptcha');		
			statusCaptcha.attr("src", imageLoading);	
			var captchaImgValue = "";		
			var captchaValid = "";
			
			var url = urlValidateCaptcha + '/captcha/' + hex_md5(captcha.val());
			jQuery.ajax({
				type: "GET",
				url: url,
				dataType:"xml",
				success: function(xml) {				  			
	//		  		var text = transport.responseText;
	//		  		var temp = transport.responseXML;
	//		  		captchaValid = temp.getElementsByTagName('valid')[0].firstChild.nodeValue;	
					captchaValid = $(xml).find('valid');
	
			  		if (captchaValid.text() == 1) {
						captchaOk = true;					
						statusCaptcha.attr("src", imageOk);
						msgCaptcha.html("");
						//alert(captchaOk);
					}
					else{
						statusCaptcha.attr("src", imageWarning);
						msgCaptcha.html("Código incorrecto.");
					}
				}
			});
		});
		firstLoad = false;
	}
	
	
} //END SIGNIN


var signin = new Signin(); 
