var tb_first_name;
var tb_last_name;
var tb_username;
var tb_password;
var tb_confirm_password;
var tb_email;
var tb_confirm_email;
var btn_register;
var cbb_timezone;
var tb_captcha;
var frm_register;

function init_registration()
{
	tb_first_name = get_elem("tb_first_name");
	tb_last_name = get_elem("tb_last_name");
	tb_username = get_elem("tb_username");
	tb_password = get_elem("tb_password");
	tb_confirm_password = get_elem("tb_confirm_password");
	tb_email = get_elem("tb_email");
	tb_confirm_email = get_elem("tb_confirm_email");
	btn_register = get_elem("btn_register");
	cbb_timezone = get_elem("cbb_timezone");
	tb_captcha = get_elem("tb_captcha");
	frm_register = get_elem("frm_register");
	
	
	add_handler(tb_first_name, "focus", reg_field_focus);
	add_handler(tb_last_name, "focus", reg_field_focus);
	add_handler(tb_username, "focus", reg_field_focus);
	add_handler(tb_password, "focus", reg_field_focus);
	add_handler(tb_confirm_password, "focus", reg_field_focus);
	add_handler(tb_email, "focus", reg_field_focus);
	add_handler(tb_confirm_email, "focus", reg_field_focus);
	add_handler(tb_captcha, "focus", reg_field_focus);
	
	add_handler(tb_first_name, "blur", reg_field_blur);
	add_handler(tb_last_name, "blur", reg_field_blur);
	add_handler(tb_username, "blur", reg_field_blur);
	add_handler(tb_password, "blur", reg_field_blur);
	add_handler(tb_confirm_password, "blur", reg_field_blur);
	add_handler(tb_email, "blur", reg_field_blur);
	add_handler(tb_confirm_email, "blur", reg_field_blur);
	add_handler(tb_captcha, "blur", reg_field_blur);
	
	add_handler(frm_register, "keyup", frm_register_key_up);
}

function frm_register_key_up(e)
{
	if(getKey(e) == 13 && btn_register.className != "button_disabled")
	{
		register();
	}
}

function register()
{
	overlay();
	protoAjax = new Ajax.Request (acturl,
	{
		method: 'post',
		parameters: {
						act: 'register',
						first_name: tb_first_name.value,
						last_name: tb_last_name.value,
						username: tb_username.value,
						password: tb_password.value,
						email: tb_email.value,
						timezone: cbb_timezone.value,
						captcha: tb_captcha.value
					},
		onComplete : registered
	});
}

function registered(t)
{
	overlay();
	var response = process_ajax_response(t);
	var root = response.root;
	var success = response.success;

	if(success)
	{
		// Registration Successfull
		alert("Thank you for registering, your account has been created. You may now login with your username and password.");
		document.location = "/login.php" + (typeof redirect_url != 'undefined' ? "?redirect=" + redirect_url : "");
	}
	else
		show_ajax_error(root);
}

function check_username_availability()
{
	set_form_field_working(tb_username);
	protoAjax = new Ajax.Request (acturl,
	{
		method: 'post',
		parameters: {
						act: 'check_username_availability',
						username: tb_username.value
					},
		onComplete : username_availability_checked
	});
}

function username_availability_checked(t)
{
	var response = process_ajax_response(t);
	var root = response.root;
	var success = response.success;

	if(success)
	{
		set_form_field_correct(tb_username);
	}
	else
	{
		set_form_field_error(tb_username, get_ajax_error(root));
	}
	validate_register();
}

function check_email_availability()
{
	set_form_field_working(tb_email);
	protoAjax = new Ajax.Request (acturl,
	{
		method: 'post',
		parameters: {
						act: 'check_email_availability',
						email: tb_email.value
					},
		onComplete : email_availability_checked
	});
}

function email_availability_checked(t)
{
	var response = process_ajax_response(t);
	var root = response.root;
	var success = response.success;

	if(success)
	{
		set_form_field_correct(tb_email);
		if(tb_email.value != tb_confirm_email.value)
		{
			set_form_field_error(tb_confirm_email, "E-Mail Address does not match");
		}
	}
	else
	{
		set_form_field_error(tb_email, get_ajax_error(root));
	}
		
	validate_register();
}


function check_captcha()
{
	set_form_field_working(tb_captcha);
	protoAjax = new Ajax.Request (acturl,
	{
		method: 'post',
		parameters: {
						act: 'check-captcha',
						captcha: tb_captcha.value
					},
		onComplete : captcha_checked
	});
}

function captcha_checked(t)
{
	var response = process_ajax_response(t);
	var root = response.root;
	var success = response.success;

	if(success)
	{
		set_form_field_correct(tb_captcha);
	}
	else
	{
		set_form_field_error(tb_captcha, get_ajax_error(root));
	}
		
	validate_register();
}				

function validate_register()
{
	if(tb_first_name.value == "" || tb_last_name.value == "" || tb_username.value == "" || tb_password.value == "" || tb_confirm_password.value == "" || tb_email.value == "" || tb_confirm_email.value == "" || tb_captcha.value == "" || tb_password.value != tb_confirm_password.value || tb_email.value != tb_confirm_email.value || tb_username.value.length < 3 || tb_password.value.length < 6 || !is_email_valid(tb_email.value) || tb_captcha.value.length < 5 || !is_field_valid(tb_username) || !is_field_valid(tb_captcha) || !is_field_valid(tb_email))
		disable_button(btn_register);
	else
		enable_button(btn_register);
}

function reg_field_focus(e)
{
	var sender = get_sender(e);
	if(sender.className == "textbox")
		sender.className = "textbox_selected";
}

function reg_field_blur(e)
{
	var sender = get_sender(e);
	if(sender.className == "textbox_selected")
		sender.className = "textbox";
		
	set_form_field_correct(sender);
		
	if(sender.value == "")
	{
		var error = "This field is required";
		if(sender == tb_confirm_password)
			error = "Please re-enter your password";
		else if(sender == tb_confirm_email)
			error = "Please re-enter your E-Mail address";
			
		set_form_field_error(sender, error);
	}
	else
	{
		if(sender == tb_username)
		{
			if(sender.value.length < 3)
				set_form_field_error(sender, "Length must be between 3 and 20 characters");
			else
				check_username_availability();
		}
		else if(sender == tb_captcha)
		{
			if(sender.value.length < 5)
				set_form_field_error(sender, "Enter the 5 digits shown in the above picture");
			else
				check_captcha();
		}
		else if(sender == tb_password || sender == tb_confirm_password)
		{
			if(sender.value.length < 6)
			{
				set_form_field_error(sender, "Length must be between 6 and 30 characters");
			}
			else if(sender == tb_confirm_password && tb_password.value != tb_confirm_password.value)
			{
				set_form_field_error(tb_confirm_password, "Password does not match");
			}
			else if(tb_password.value.length >= 6 && tb_confirm_password.value.length >= 6)
			{
				set_form_field_correct(sender);
				set_form_field_correct(tb_confirm_password);
			}
		}
		else if(sender == tb_email || sender == tb_confirm_email)
		{
			if(sender == tb_email && is_email_valid(sender.value))
			{
				check_email_availability();
			}
			
			else if(!is_email_valid(sender.value))
			{
				set_form_field_error(sender, "Invalid E-Mail Address");
			}
			else if(tb_email.value != tb_confirm_email.value)
			{
				set_form_field_error(sender, "E-Mail Address does not match");
			}
			else if(is_email_valid(tb_email.value) && tb_email.value == tb_confirm_email.value)
			{
				if(is_field_virgin(tb_email))
					set_form_field_correct(sender);
				
				set_form_field_correct(tb_confirm_email);
			}
		}
	}
}

