
function register_init() {
	
	$('#reg_username').bind('blur', {}, function(e){
		// Clear messages
		$('#reg_username_msg').html('');
		$(this).removeClass('good').removeClass('bad').removeClass('checking');
		
		// Test length
		if ($(this).val().length < 6) {
			$(this).addClass('bad');
			$('#reg_username_msg').html('Must be at least 6 characters');
		// Test valid characters?
		// Test unique
		} else {
			$(this).addClass('checking');
			$.ajax( {
				url:'json/register.php',
				data:'action=checkname&n=' + $(this).val(),
				type:'POST',
				dataType:'json',
				success:function(data, textStatus) {
						if($.trace) $.trace(data);
						$('#reg_username').removeClass('checking');
						if (data.uc != '0') {
							$('#reg_username').addClass('bad');
							$('#reg_username_msg').html('Username already in use');
						} else {
							$('#reg_username').addClass('good');
						}
					},
				error:function (XMLHttpRequest, textStatus, errorThrown) {
						if($.trace) $.trace("Error:\n" + XMLHttpRequest + "\n" + textStatus + "\n" + errorThrown);
						$('#reg_username').addClass('bad').removeClass('checking');
						$('#reg_username_msg').html('Error contacting server');
					}
			} );
			
		}
	});
	
	$('#reg_password, #reg_password2').bind('blur', {}, function(e){
		// Clear messages
		$('#reg_password, #reg_password2').removeClass('good').removeClass('bad').removeClass('checking');
		$('#reg_password_msg, #reg_password2_msg').html('');
		
		// Test length
		if ($('#reg_password').val().length < 6) {
			$('#reg_password').addClass('bad');
			$('#reg_password_msg').html('Must be at least 6 characters');
		}
		
		// Test match
		if ($('#reg_password').val() != '' && $('#reg_password2').val() != '') {
			if ($('#reg_password').val() != $('#reg_password2').val()) {
				$('#reg_password, #reg_password2').addClass('bad');
				$('#reg_password2_msg').html('Passwords do not match');
			} else {
				// Check for unique username
				$('#reg_password, #reg_password2').addClass('good');
			}
		}
	});
	
	$('#reg_email, #reg_email2').bind('blur', {}, function(e){
		// Clear messages
		$('#reg_email, #reg_email2').removeClass('good').removeClass('bad').removeClass('checking');
		$('#reg_email_msg, #reg_email2_msg').html('');
		
		// Test valid
		if ($('#reg_email').val() != '' && !isValidEmail($('#reg_email').val())) {
			$('#reg_email').addClass('bad');
			$('#reg_email_msg').html('Not a valid email address');
		}
		
		// Test match
		if ($('#reg_email').val() != '' && $('#reg_email2').val() != '') {
			if ($('#reg_email').val() != $('#reg_email2').val()) {
				$('#reg_email, #reg_email2').addClass('bad');
				$('#reg_email2_msg').html('Email addresses do not match');
			} else {
				// Check for unique email
				$('#reg_email').addClass('checking');
				
				$.ajax( {
					url:'json/register.php',
					data:'action=checkemail&e=' + $('#reg_email').val(),
					type:'POST',
					dataType:'json',
					success:function(data, textStatus) {
							if($.trace) $.trace(data);
							$('#reg_username').removeClass('checking');
							if (data.uc != '0') {
								$('#reg_email').addClass('bad');
								$('#reg_email_msg').html('Email already in use');
							} else {
								$('#reg_email').addClass('good');
							}
						},
					error:function (XMLHttpRequest, textStatus, errorThrown) {
							if($.trace) $.trace("Error:\n" + XMLHttpRequest + "\n" + textStatus + "\n" + errorThrown);
							$('#reg_email').addClass('bad').removeClass('checking');
							$('#reg_email_msg').html('Error contacting server');
						}
				} );
				
				
			}
		}
	});
	
	$('.active').bind('keyup', {}, function(e){
		var name = $(this).attr('id');
		$(this).removeClass('good').removeClass('bad').removeClass('checking');
		$('#'+name+'_msg').html('');
	});
}
	
// ==== Helpers ==================================

function isValidEmail (emailStr) {
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) return false; 
	var user=matchArray[1];
	var domain=matchArray[2];
	if (user.match(userPat)==null) return false;
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) return false;
		}
		return true;
	}
	var domainArray=domain.match(domainPat);
	if (domainArray==null) return false;
	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if (domArr[len-1].length<2 || domArr[len-1].length>4) return false; 
	if (len<2) return false;
	return true;
}
