/*===============================================
  Register Functions
  Functions surrounding new user registration.
===============================================*/

Event.observe(window, 'load', register_init);
registerCheck = {};
registerCheck.goodUsername = false;
registerCheck.goodPassword = false;
registerCheck.goodEmail = false;

function register_init() {
	$('reg_username').onchange = register_username_check;
	$('reg_password').onchange = register_password_check;
	$('reg_email').onchange = register_email_check;
	$('reg_tacs').onclick = register_validate;
}

function register_username_check() {
	$('reg_username').value = $F('reg_username').strip();
	if (!$F('reg_username').empty()) { 
		registerCheck.goodUsername = false;
		$('reg_username_val').removeClassName('validate_cross').removeClassName('validate_tick').addClassName('validate_wait');
		new Ajax.Request('json/register.php', {
			parameters: { action: 'checkname', n:$F('reg_username') }, 
			onSuccess: function(transport){
				trace(transport.responseText,1);
				var json = transport.responseText.evalJSON();
				if (json.uc == 0) {
					registerCheck.goodUsername = true;
					$('reg_username_val').addClassName('validate_tick').removeClassName('validate_wait');
					register_validate();
				} else {
					registerCheck.goodUsername = false;
					$('reg_username_val').addClassName('validate_cross').removeClassName('validate_wait');
					register_validate();
				}
			}
		});
	} else { 
		registerCheck.goodUsername = false; 
		$('reg_username_val').removeClassName('validate_tick').addClassName('validate_cross');
	}
	register_validate();
}

function register_password_check() {
	registerCheck.goodPassword = !$F('reg_password').empty(); 
	if (registerCheck.goodPassword) { 
		$('reg_password_val').removeClassName('validate_cross').addClassName('validate_tick');
	} else { 
		$('reg_password_val').removeClassName('validate_tick').addClassName('validate_cross');
	}
	register_validate();
}

function register_email_check() {
	$('reg_email').value = $F('reg_email').strip();
	if (isValidEmail($F('reg_email'))) { 
		registerCheck.goodEmail = false;
		$('reg_email_val').removeClassName('validate_cross').removeClassName('validate_tick').addClassName('validate_wait');
		new Ajax.Request('json/register.php', {
			parameters: { action: 'checkemail', e:$F('reg_email') }, 
			onSuccess: function(transport){
				trace(transport.responseText,1);
				var json = transport.responseText.evalJSON();
				if (json.uc == 0) {
					registerCheck.goodEmail = true;
					$('reg_email_val').addClassName('validate_tick').removeClassName('validate_wait');
					register_validate();
				} else {
					registerCheck.goodEmail = false;
					$('reg_email_val').addClassName('validate_cross').removeClassName('validate_wait');
					register_validate();
				}
			}
		});
	} else { 
		registerCheck.goodEmail = false;
		$('reg_email_val').removeClassName('validate_tick').addClassName('validate_cross');
	}
	register_validate();
}

function register_validate() {
	if (registerCheck.goodUsername && registerCheck.goodPassword && $F('reg_tacs')=='yes' && registerCheck.goodEmail) {
		$('register_button').enable();
	} else {
		$('register_button').disable();
	}
}

// ==== 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;
}
