(function(){
	
	var phoneText = '\
		<div class="register_popup"> \
			Usamos o telem\u00F3vel como uma forma de impedir registos falsos. \
			Ao mesmo tempo com o telem\u00F3vel vais poder ter acesso aos passatempos e a possibilidade de falares gr\u00E1tis com outros TAG. \
			<br/><br/>Mantemos o n\u00FAmero sempre o confidencial. Nunca ningu\u00E9m o vai poder ver. \
			<br/><br/>Podes utilizar qualquer telem\u00F3vel de qualquer rede, desde que receba SMS. \
		</div> \
		';
	
	var recoverTemplate = '\
		<div id="recover"> \
			<span class="recover_title">PARA RECEBERES O C&Oacute;DIGO DE RECUPERA&Ccedil;&Atilde;O INSERE:</span> \
			<div class="recover_separator"></div> \
			<form action="" onsubmit="javascript: Registration.checkRecover(\'{{red}}\');"> \
				<span class="recover_lbl">TELEM&Oacute;VEL:</span> \
				<input type="text" class="recover_input" id="recover_msisdn"> \
				<div class="recover_separator"></div> \
				<span class="recover_text">OU</span> \
				<div class="recover_separator"></div> \
				<span class="recover_lbl">EMAIL:</span> \
				<input type="text" class="recover_input" id="recover_email"> \
				<input type="submit" style="display:none;"/> \
				<div class="recover_separator"></div> \
				<div class="recover_button" onclick="javascript:Registration.checkRecover(\'{{red}}\');">CONTINUAR</div> \
				<div class="recover_button" onclick="javascript:WindowPopUp.close();">CANCELAR</div> \
			</form> \
		</div> \
		';
	
	var getUserInvalidChar = function(user){
		var accepted = 'abcdefghijklmnopqrstuvwxyz0123456789_';
		
		user = user.toLowerCase();
		
		var invalid = [];
		
		for(var i = 0; i < user.length; i++){
			for(var j = 0; j < accepted.length; j++){
				if(user.charAt(i) == accepted.charAt(j))
					break;
			}
			
			if(j == accepted.length){
				for(var k = 0; k < invalid.length; k++){
					if(invalid[k] == user.charAt(i))
						break;
				}
				
				if(k == invalid.length)
					invalid.push(user.charAt(i));
			}
		}
		
		var result = 'Nick n\u00E3o pode conter ';
		
		if(invalid.length == 1){
			if(invalid[0] == ' ') result +='espa\u00E7os';
			else result += invalid[0];
		} else {
			for(var i = 0; i < invalid.length; i++){
				if(invalid[i] == ' ') invalid[i] = 'espa\u00E7os';
				
				if(i == 0) result += ' ' + invalid[i];
				else result += ', ' + invalid[i];
			}
		}

		return result;
	};
	
	var R = {
		check : function(){
			var user = $('#register_name').val();
			var msisdn = $('#register_msisdn').val();
			var email = $('#register_email').val();
			var captcha = $('#register_captcha').val();
			var code = $('#register_code').val();
			var red = $('#register_redirect').val();
	
			if(user == '') showMessage('Preenche campo nick!');
			else if(user.length <= 3 || user.length > 14) showMessage('Nick deve ter entre 4 e 14 caracteres!');
			else if(!Validation.username(user)) showMessage(getUserInvalidChar(user));
			else if(email == '') showMessage('Preenche campo email!');
			else if(!Validation.email(email)) showMessage('Insere um endere\u00E7o de email v\u00E1lido!');
			else if(msisdn == '') showMessage('Preenche campo telem\u00F3vel!');
			else if(!Validation.msisdn(msisdn)) showMessage('Insere um n\u00FAmero de telem\u00F3vel v\u00E1lido!');
			else if(captcha == '') showMessage('Preenche campo c\u00F3digo de valida\u00E7\u00E3o!');
			else Registration.register(user, msisdn, email, captcha, code);
			
			return false;
		},
		register : function(nick, msisdn, email, captcha, code){
			var red = $('#register_redirect').val();
			WindowShade.load();
			$.ajax({
				url: '/Comunidade/account/register.jsp',
				type: 'GET',
				dataType: 'json',
				data: 'username=' + nick + '&msisdn=' + msisdn + '&email=' + email + '&captcha='  + captcha + ((code != null) ? ('&code=' + code) : ''),
  				error: function(){ showMessage('Ocorreu um erro! Tenta mais tarde.'); WindowShade.unload();  Registration.refreshCaptcha();},
				success: function(result){
					if(result.status == 1){
						if(result.account == null){
							window.location = '/Comunidade/activar.jsp?id=' + result.id + '&msisdn=' + msisdn + ((red != null) ? ('&redirect=' + red) : '');
						} else {
							window.location = '/Comunidade/activar.jsp?id=' + result.account.id + '&msisdn=' + result.account.msisdn + '&user=' + result.account.username + ((red != null) ? ('&redirect=' + red) : '');
						}
					} else {
						Registration.refreshCaptcha();
						showMessage(result.message);
					}
					
					WindowShade.unload();
				}
			});
		},
		checkUsername : function(){
			var user = $('#register_name').val();
			
			if(user != null && user.length != 0){
				if(user.length <= 3 || user.length > 14) showMessage('Nick deve ter entre 4 e 14 caracteres!');
				else if(Validation.usernameSlash(user)) showMessage('Nick deve conter letras e/ou n&uacute;meros!')
				else if(!Validation.username(user)) showMessage(getUserInvalidChar(user));
				else {
					$.ajax({
						url: '/Comunidade/account/checkUsername.jsp',
						type: 'GET',
						dataType: 'json',
						data: 'username=' + user,
	  					error: function(){},
						success: function(result){
							if(result.status == 1) 
								if(result.invalid != null) showMessage(result.invalid);
						}
					});
				}
			}
		},
		refreshCaptcha : function(){
			var tmp = new Date();
   			tmp = '?' + tmp.getTime();
   			
    		$('#register_captcha_image').attr('src', "/jcaptcha" + tmp);
    		$('#register_captcha').val('');
		},
		explainPhone : function(){
			$(document).bind('click', Registration.unloadExplainPhone);
			WindowPopUp.load(phoneText);
		},
		unloadExplainPhone : function(){
			$(document).unbind('click', Registration.unloadExplainPhone);
			WindowPopUp.close();
		},
		checkActivation : function(){
			var id = $('#activate_id').val();
			var nick = $('#activate_nick').val();
			var code = $('#activate_code').val();
			var password = $('#activate_password').val();
			var confirm = $('#activate_password_confirm').val();
			
			if(code == '') showMessage('Preenche campo c\u00F3digo de valida\u00E7\u00E3o!');
			else if(password == '') showMessage('Preenche campo password!');
			else if(password.length < 5) showMessage('A password tem de ter pelo menos 5 caracteres!');
			else if(confirm == '') showMessage('Preenche campo confirma\u00E7\u00E3o de password!');
			else if(password != confirm) showMessage('As passwords s\u00E3o diferentes!');
			else if(nick == password) showMessage('A password deve ser diferente do nick!');
			else Registration.activate(id, code, password);
			
			return false;
		},
		activate : function(id, code, password){
			WindowShade.load();
			
			var red = $('#activate_redirect').val();
			
			$.ajax({
				url: '/Comunidade/account/activate.jsp',
				type: 'GET',
				dataType: 'json',
				data: 'id=' + id + '&code=' + code + '&password='  + hex_md5(password) + '&v=' + Math.random(),
  				error: function(){ showMessage('Ocorreu um erro! Tenta mais tarde.'); WindowShade.unload(); },
				success: function(result){
					if(result.status == 1){
						if(red == null)
							window.location = '/Comunidade/' + result.username + '/perfil';
						else window.location = registerRedirect;
					} else {
						showMessage(result.message);
					}
					
					WindowShade.unload();
				}
			});
		},
		recover: function(redirect){
			Mustache.to_html(recoverTemplate, { red : redirect }, {}, function(val){
				WindowPopUp.load(val);
			});
			
			WindowPopUp.center();
		},
		checkRecover : function(redirect){
			var msisdn = $('#recover_msisdn').val();
			var email = $('#recover_email').val();
			
			if(msisdn == '' && email == '') showMessage('Preenche campo telem\u00F3vel ou campo email!');
			else if(msisdn != '' && !Validation.msisdn(msisdn)) showMessage('Insere um n\u00FAmero de telem\u00F3vel v\u00E1lido!');
			else if(email != '' && !Validation.email(email)) showMessage('Insere um email v\u00E1lido!');
			else{
				$.ajax({
					url: '/Comunidade/account/recover.jsp',
					type: 'GET',
					dataType: 'json',
					data: 'msisdn=' + msisdn + '&email=' + email + '&v=' + Math.random(),
  					error: function(){ showMessage('Ocorreu um erro! Tenta mais tarde.'); WindowShade.unload(); },
					success: function(result){
						if(result.status == 1){
							var url = '/Comunidade/recuperar.jsp?id=' + result.id +  '&username=' + result.username;
							
							if(result.email != null) url += '&mail=true';
							if(redirect != null && redirect != '') 
								url += '&redirect=' + redirect;
							
							window.location = url;
						} else {
							showMessage(result.message);
						}
						
						WindowShade.unload();
					}
				});
			}
			
			return false;
		},
		checkRecoverPassword : function(redirect){
			var id = $('#activate_id').val();
			var nick = $('#activate_nick').val();
			var code = $('#activate_code').val();
			var password = $('#activate_password').val();
			var confirm = $('#activate_password_confirm').val();
			
			if(code == '') showMessage('Preenche campo c\u00F3digo de valida\u00E7\u00E3o!');
			else if(password == '') showMessage('Preenche campo password!');
			else if(password.length < 5) showMessage('A password tem de ter pelo menos 5 caracteres!');
			else if(confirm == '') showMessage('Preenche campo confirma\u00E7\u00E3o de password!');
			else if(password != confirm) showMessage('As passwords s\u00E3o diferentes!');
			else if(nick == password) showMessage('A password deve ser diferente do nick!');
			else Registration.recoverPassword(id, code, password, redirect);
		},
		recoverPassword : function(id, code, password, redirect){
			WindowShade.load();
			
			$.ajax({
				url: '/Comunidade/account/password.jsp',
				type: 'GET',
				dataType: 'json',
				data: 'id=' + id + '&code=' + code + '&password='  + hex_md5(password) + '&v=' + Math.random(),
  				error: function(){ showMessage('Ocorreu um erro! Tenta mais tarde.'); WindowShade.unload(); },
				success: function(result){
					if(result.status == 1){
						if(redirect == null || redirect == '')
							window.location = '/Comunidade/' + result.username + '/home';
						else window.location = '/' + redirect;
					} else {
						showMessage(result.message);
					}
					
					WindowShade.unload();
				}
			});
		}
	};
	
	window.Registration = R;
})();

(function(){

	var U = {
		msisdn : function(value){
			var v1 = value.charAt(0);
			var v2 = value.charAt(1);
			var msisdn = parseInt(value, 10);
	
			if(isNaN(msisdn) || msisdn > 969999999 || value.length != 9)
				return false;
	
			if(v1 != "9")
				return false;
	
			if(v2 != "1" && v2 != "2" && v2 != "3" && v2 != "6")
				return false;

			return true;
		},
		email : function(value){
			return (value.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1);
		},
		username : function(value){
			return(value.search(/^[A-Za-z0-9_]+$/) != -1);
		},
		usernameSlash : function(value){
			return(value.search(/^(_)*$/) != -1)
		}
	};
	
	window.Validation = U;
})();

