function validateGRRegistrationForm(getObjThis) {
	var valideForm = 0;
	$("#registration_error").find(".message_fail").text("");
	$("#registration_error").hide();
	with (getObjThis){
		hideUsernameAvailabilityMessage();
		returnUserNameChk = validateGRUsername(username.value);
		returnPasswordChk = validateGRPassword(password.value, passwordRetype.value, username.value);
		returnEmailChk = validateGREmail(email.value);
		if (returnUserNameChk != "0"){
			valideForm = 1;
			$("#registration_error").find(".message_fail").text(returnUserNameChk);
			$.scrollTo("#scroll_point");
			$("#registration_error").show();
			$("#gr_username_column").addClass("error_form_title");
			// $("#gr_username_column").parents(".form_row").find(".login_input_text").css("border","1px solid #f00");
			username.focus();
			return false;
		}
		else if (returnPasswordChk != "0"){
			valideForm = 1;
			$("#registration_error").find(".message_fail").text(returnPasswordChk);
			if (returnPasswordChk == "The password and retyped password do not match."){
				$("#gr_repassword_column").addClass("error_form_title");
			}
			$.scrollTo("#scroll_point");
			$("#registration_error").show();
			$("#gr_password_column").addClass("error_form_title");
			password.focus();
			return false;
		}
		else if (returnEmailChk != "0"){
			valideForm = 1;
			$("#registration_error").find(".message_fail").text(returnEmailChk);
			$.scrollTo("#scroll_point");
			$("#registration_error").show();
			$("#gr_email_column").addClass("error_form_title");
			email.focus();
			return false;
		}
	}
	if (valideForm == 0){
		$("#submit_button").hide();
		$("#submit_loading").show();
	}
	return true;
}

function checkAvailabilityOfUsername() {
	hideUsernameAvailabilityMessage();
	var xmlHttp;
	var regexFirstCharCheck = /^[a-z]+/i;
	var regexTotalCharCheck = /^[-_\.a-zA-Z0-9]{3,64}$/;
	var getUserName = document.registrationForm.username.value;
	var returnGRUserName = validateGRUsername(getUserName)

	if (returnGRUserName != "0"){
		$("#registration_error").find(".message_fail").text(returnGRUserName);
		$("#registration_error").show();
		$("#gr_username_column").addClass("error_form_title");
	}
	else {
		$("#registration_error").hide();
		$(".ajax_gr_username_availability").show();
		$.ajax({
			url: '/radarnation/username-availability?username='+getUserName,
			type: 'GET',
			timeout: 15000,
			error: function(e){
				alert('Your request cannot be processed at this time.\nPlease try again later.');
			},
			success: function(responseText){
				try {
					$(".ajax_gr_username_availability").hide();
					if (responseText.indexOf("unavailable") != -1) {
						document.getElementById('username_taken').style.visibility='visible';
						document.getElementById('username_taken').style.display='block';
					} else if (responseText.indexOf("empty") != -1) {
						document.getElementById('username_empty').style.visibility='visible';
						document.getElementById('username_empty').style.display='block';
					} else if (responseText.indexOf("invalid") != -1) {
						document.getElementById('username_invalid').style.visibility='visible';
						document.getElementById('username_invalid').style.display='block';
					} else {
						document.getElementById('username_available').style.visibility='visible';
						document.getElementById('username_available').style.display='block';
					}
				} catch (err) {
				}
			}
		});
	}
}

function hideUsernameAvailabilityMessage() {
	$("#gr_username_column").removeClass("error_form_title");
	$("#gr_password_column").removeClass("error_form_title");
	$("#gr_repassword_column").removeClass("error_form_title");
	$("#gr_email_column").removeClass("error_form_title");
	$("#gr_username_column").addClass("form_title");
	$("#gr_password_column").addClass("form_title");
	$("#gr_repassword_column").addClass("form_title");
	$("#gr_email_column").addClass("form_title");

	document.getElementById('username_available').style.display='none';
	document.getElementById('username_taken').style.display='none';
	document.getElementById('username_empty').style.display='none';
	document.getElementById('username_invalid').style.display='none';
}

function validateGRUsername(getUsernameStr){
	var regexFirstCharCheck = /^[a-z0-9]+/i;
	var regexTotalCharCheck = /^[-_\.a-zA-Z0-9]{3,64}$/;
	var userNameLower = getUsernameStr.toLowerCase();

	if ((trim(getUsernameStr)).length == 0) {
		return "You did not provide a username.";
	}
	else if (!(regexFirstCharCheck.test(getUsernameStr))){
		return "Your username must start with a letter or a number.";
	}
	else if (!(userNameLower.search(/[a-z]+/) > -1)){
		return "The username must contain at least 1 letter.";
	}
	else if ((trim(getUsernameStr)).length < 3) {
		return "The username should contain minimum 3 characters.";
	}
	else if (!(regexTotalCharCheck.test(getUsernameStr))){
		return "The username you selected is invalid.";
	}
	else if ((userNameLower == "admin") || (userNameLower == "administrator") || (userNameLower == "editor") || (userNameLower == "moderator")) {
		return "You are trying to use a reserve keyword. Please choose a different username.";
	}
	return 0;
}

function validateGRPassword(getPasswordStr, getRePasswordStr, getUsernameStr){
	if (!((getPasswordStr.search(/[a-z]+/) > -1) && (getPasswordStr.search(/[A-Z]+/) > -1) && (getPasswordStr.search(/[0-9]+/) > -1))){
		return "The password you entered must contain at least 1 uppercase, lowercase, and numeric character.";
	}
	else if (getPasswordStr.length < 6){
		return "The password you entered must be at least 6 characters long.";
	}
	else if (getPasswordStr == getUsernameStr){
		return "The password entered cannot match your username.";
	}
	else if (getPasswordStr != getRePasswordStr){
		return "The password and retyped password do not match.";
	}
	return 0;
}

function validateGREmail(getEmailStr){
	var emailFilter=/^.+@.+\..{2,4}$/;
	if (!(emailFilter.test(getEmailStr))) {
		return "The email you entered doesn't appear to be valid.";
	}
	return 0;
}
