$(document).ready(function() {

// ----------------------------- Form Input Validation ---------------------------- //
	
// substitue required for key
		var requiredFlag = ' * ';
		var requiredKey = $('input.required:first').next('span').text(); 
		requiredKey = requiredFlag + requiredKey.replace(/^\((.+)\)$/,"$1");
	
// Add class to labels of required fields
		$('form :input').filter('.required')
		.next('span').text(requiredFlag).end()
		.prev('label').addClass('req-label');

// Only allow letter,numbers, @ on selected input fields
	$('#user_name').alphanumeric();
	$('#email').alphanumeric({allow:"@."});
	$('#password').alphanumeric();
	$('#edit_pass').alphanumeric();
	$('#confirm_password').alphanumeric();
	$('#confirm_edit_pass').alphanumeric();
	
	
// Validate form on blur
$('form :input').blur(function(){
		//  Remove error messages
		$(this).parents('li:first').removeClass('warning')
		.find('p.error-message').remove();
		// Validate required input fields	
		if($(this).is('.required')){
			var $listItem = $(this).parents('li:first');
			if(this.value == ''){
				var errorMessage = ' Esse é um campo obrigatório.';		
				$('<p></p>')
			 .addClass('error-message')
			 .text(errorMessage)
			 .appendTo($listItem);
				$listItem.addClass('warning');
			}
		}		
			
		// Validate Correct email format
		if($(this).is('#email')){
			var $listItem = $(this).parents('li:first');
			if(this.value != '' && !/.+@.+\.[a-zA-Z]{2,4}$/.test(this.value)){
				var errorMessage = 'Formato de email errado.';
				$('<p></p>')
				.addClass('error-message')
				.text(errorMessage)
				.appendTo($listItem);
				$listItem.addClass('warning');
			}
		}		
		
		// Check if user name already exists in the database				
		if($(this).is('#user_name')){
			var $listItem = $(this).parents('li:first');
			$.post('check_user_name.php', {'user_name': $(this).val()}, function(data){	
				if(data != ""){
					var errorMessage = 'Username ' + data + ' já existe. Por favor escolha outro.';
				$('<p></p>')
				.addClass('error-message')
				.text(errorMessage)
				.appendTo($listItem);
				$listItem.addClass('warning');
				}
			});						
		}		

		// Check if passwords match						
		if($(this).is('#confirm_password')){ 	
			var pass = $(this).parents().find('#password').val();
			var $listItem = $(this).parents('li:first');
			if(this.value != pass){
				var errorMessage = 'Senhas não são iguais';
				$('<p></p>')
				.addClass('error-message')
				.text(errorMessage)
				.appendTo($listItem);
				$listItem.addClass('warning');
			}
		}		

}); // End validate form on blur

// if javascript is not enabled the form will be disabled
$('#submit').removeAttr("disabled");

$('#sumbit').click(function(){
	$(this).attr("disabled", "disabled");
});
	
// Validate form again on submission
$('form').submit(function(){
		
		$('#submit-message').remove();
		$(':input.required').trigger('blur');

		//get Total number of warnings
		var  numWarnings = $('.warning', this).length;
		if(numWarnings){
			var fieldList = [];
			
			$('.warning label').each(function(){
				fieldList.push($(this).text());
			});
			$('#submit').removeAttr("disabled");
			$('<div></div>').attr({'id': 'submit-message', 'class': 'warning'})
			.append('Por favor corrija problemas com ' + numWarnings + ' campos:<br />') 
			.append('&bull; ' + fieldList.join('<br />&bull; '))
			.insertBefore('#submit');
			return false;
		}		
});

	
});
