// <![CDATA[

// on DOM ready, let the magic begin
$(document).ready(function(){
	// function to if first and last name are provided
	var nameError = false;
	function checkName(){
		$("#firstNameStatus").removeClass("checkOK");
		$("#lastNameStatus").removeClass("checkOK");
		$("#firstNameStatus").removeClass("checkNotOK");
		$("#lastNameStatus").removeClass("checkNotOK");
		// check that first name is present
		if($("#first_name").val().length == 0){ // name missing
			$("#firstNameStatus").addClass("checkNotOK");
			nameError = true;
		}else nameError = false;
		
		if($("#last_name").val().length == 0){ // name missing
			$("#lastNameStatus").addClass("checkNotOK");
			nameError = true;
		}else nameError = false;
		
		if(!nameError){
			$("#firstNameStatus").addClass("checkOK");
			$("#lastNameStatus").addClass("checkOK");
		}
	}
	
	// capitalize the first letter of first name
	$("#first_name").keyup(function(){
		this.value = this.value.substr(0,1).toUpperCase()+this.value.substr(1);
	});
	// check first name after moving to next field
	$("#first_name").blur(function(){
		$("#firstNameStatus").removeClass("checkOK");						   
		$("#firstNameStatus").removeClass("checkNotOK");
		if($("#first_name").val().length == 0){ // name missing
			$("#firstNameStatus").addClass("checkNotOK");
			nameError = true;
		}else{
			$("#firstNameStatus").addClass("checkOK");
			nameError = false;
		}
	});

	// capitalize the first letter of last name
	$("#last_name").keyup(function(){
		checkName();
		this.value = this.value.substr(0,1).toUpperCase()+this.value.substr(1);
	});
	
	// minimize all letters of email address
	$("#email").keyup(function(){
		this.value = this.value.toLowerCase();
	});
	
	// check email once the field is out of focus
	var emailError = false;
	$("#email").blur(function(e){
		var email = this.value;
		
		$("#emailStatus").addClass("ajaxLoader");
		$.ajax({
			type: "POST",
			url: "ajax_check_email.php",
			data: "q=" + email,
			success: function(ajaxResponse){
				$("#emailStatus").removeClass("ajaxLoader");
				switch(ajaxResponse){
					case "NOTFOUND": // email OK
						$("#emailStatus").removeClass("checkNotOK");
						$("#emailStatus").addClass("checkOK");
						$("#emailStatus").text("");
						emailError = false;
					break;
					
					case "INVALID": // not valid
						$("#emailStatus").removeClass("checkOK");
						$("#emailStatus").addClass("checkNotOK");
						$("#emailStatus").text("Does not appear to be valid.");
						emailError = true;
					break;
					
					case "FOUND": // already registered
						$("#emailStatus").removeClass("checkOK");
						$("#emailStatus").addClass("checkNotOK");
						$("#emailStatus").text("Email already in the system.");
						emailError = true;
					break;
					
					case "FAILED":
					default: // something's up
						$("#emailStatus").removeClass("checkOK");
						$("#emailStatus").addClass("checkNotOK");
						$("#emailStatus").text("Please enter your email address.");
						emailError = true;
					break;
				}
			}
		});
	});
	
	var usernameError = false;
	// username on key up
	$("#username").keyup(function(){
		$("#usernameStatus").removeClass("checkNotOK");
		$("#usernameStatus").removeClass("checkOK");
		
		if($("#username").val().length < 4){ // name too short
			$("#usernameStatus").addClass("checkNotOK");
			$("#usernameStatus").text("Minimum 4 characters.");
			usernameError = true;
		}else{
			//$("#usernameStatus").addClass("checkOK");
			$("#usernameStatus").text("");
			usernameError = false;
		}
	});
	
	// check username once the field is out of focus
	$("#username").blur(function(){
		$("#usernameStatus").removeClass("checkNotOK");
		$("#usernameStatus").removeClass("checkOK");
		
		if($("#username").val().length < 4){ // name too short
			$("#usernameStatus").addClass("checkNotOK");
			$("#usernameStatus").text("Minimum 4 characters.");
			usernameError = true;
		}else{
			$("#usernameStatus").addClass("checkOK");
			$("#usernameStatus").text("");
			usernameError = false;
		}
		
		if(usernameError == false){
			$("#usernameStatus").addClass("ajaxLoader");
			var username = this.value;
			$.ajax({
				type: "POST",
				url: "ajax_check_username.php",
				data: "q=" + username,
				success: function(ajaxResponse){
					$("#usernameStatus").removeClass("ajaxLoader");
					switch(ajaxResponse){
						case "NOTFOUND": // username Unique (OK)
							$("#usernameStatus").removeClass("checkNotOK");
							$("#usernameStatus").addClass("checkOK");
							$("#usernameStatus").text("");
							usernameError = false;
						break;
						case "INVALID2": // not alphanumeric + _ + .
							$("#usernameStatus").removeClass("checkOK");
							$("#usernameStatus").addClass("checkNotOK");
							$("#usernameStatus").text("Must be alphanumeric separated by . or _");
							usernameError = true;
						break;
						case "INVALID": // not acceptable
						case "FOUND": // alrady taken
							$("#usernameStatus").removeClass("checkOK");
							$("#usernameStatus").addClass("checkNotOK");
							$("#usernameStatus").text("Sorry, already taken.");
							usernameError = true;
						break;
						
						case "FAILED":
						default: // something's up
							$("#usernameStatus").removeClass("checkOK");
							$("#usernameStatus").addClass("checkNotOK");
							$("#usernameStatus").text("Please choose a username.");
							usernameError = true;
						break;
						
					}
				}
			});
		}
	});
	
	// check if password is long enough
	var passwordError = false;
	$("#password").blur(function(){
		passwordError = false;
		if(this.value.length < 6){ // too short
			$("#passwordStatus").removeClass("checkOK");
			$("#passwordStatus").addClass("checkNotOK");
			$("#passwordStatus").text("At least 6 characters long.");
			passwordError = true;
		}
		
		if(this.value.toLowerCase() == $("#username").val()){ // not good
			$("#passwordStatus").removeClass("checkOK");
			$("#passwordStatus").addClass("checkNotOK");
			$("#passwordStatus").text("Must be different than your username.");
			passwordError = true;
		}
		
		if(passwordError == false){ // if no error, add check as OK
			$("#passwordStatus").removeClass("checkNotOK");
			$("#passwordStatus").addClass("checkOK");
			$("#passwordStatus").text("");
		}
	});
	
	// check if the country is selected
	var countryError = false;
	$("#country").change(function(){
		if(this.value == "NULL"){
			$("#countryStatus").removeClass("checkOK");
			$("#countryStatus").addClass("checkNotOK");
			$("#countryStatus").text("Please choose a valid country.");
			countryError = true;
		}else{
			$("#countryStatus").removeClass("checkNotOK");
			$("#countryStatus").addClass("checkOK");
			$("#countryStatus").text("");
			countryError = false;
		}
	});
	
	// if touched primary role, add the checkmark for consistency
	$("#developer").change(function(){
		if(this.value == "NULL"){ // beta tester
			$("#developerStatus").removeClass("checkNotOK");
			$("#developerStatus").addClass("checkOK");
			$("#developerStatus").text("Howdy Beta Tester!");
		}else{ // developer
			$("#developerStatus").removeClass("checkNotOK");
			$("#developerStatus").addClass("checkOK");
			$("#developerStatus").text("Howdy Developer!");
		}
	});
	
	// toggles the reCaptcha on TOS Checkbox acceptance
	var tosError = false;
	$("#tos").click(function(){
		// If checked
		if(!$("#tos").is(":checked")){
			//otherwise, hide it
			$("#recaptcha").hide("fast");
			tosError = true;
		}else{     
			//show the hidden div
			$("#recaptcha").show("fast");
			tosError = false;
		}
	});
	
	// submit
	$("#userRegistration").submit(function(e){
		var validates = true;
		$("#errorsList").html("");
		$("#errors").hide("fast");
		
		if(nameError){ // first or last name missing
			$("#errorsList").append("<li>Please enter your full name (both first and last)</li>");
			validates = false;
		}
		
		if(emailError){
			$("#errorsList").append("<li>We require a valid email address in order to activate your account</li>");
			validates = false;
		}
		if(usernameError){ // username not acceptable or not available
			$("#errorsList").append("<li>Valid username is required</li>");
			validates = false;
		}
		
		if(passwordError){ // user hasn't corrected the mistake
			$("#errorsList").append("<li>Password is not acceptable</li>");
			validates = false;
		}
		
		if(countryError){ // not a valid country chosen
			$("#errorsList").append("<li>Valid country is needed</li>");
			validates = false;
		}
		
		if(tosError){ // user hasn't accepted TOS
			$("#errorsList").append("<li>You must agree to our Terms of Service in order to use the system</li>");
			validates = false;
		}
		
		if(validates == false){ // show error and stop submit
			$("#errorTitle").show();
			$("#errors").show("fast");
			$('html, body').animate({scrollTop:0}, 'slow'); 
			return false;
		}
		
		// if all OK - then disable submit button while processing
		$("#submitButton").attr("disabled", "false");
		$("#submitStatus").addClass("ajaxLoader");
	});
	
});

// ]]>