/**
 * File: ajax/registration.js
 * These are functions used in registration. They
 * set flags to help the form validation. note this is
 * front side only, see the registration component for 
 * the server side validation
 *
 * Copyright:
 * 	2007 DailyStrength.org
 */

var verified_user = false;
var verified_email = false;
var check_timeout = null;

function validateEmailOk(id, name, v) {
	var orgemail = document.getElementById("email").value;
	if(orgemail == v && verified_email)
		return true;
	
	return false;
}

function validateUserNameOk(id, name, v) {
	var eleusername = document.getElementById("vusername");
	var uval = eleusername.value;
	//make sure the value isn't blank. This can happen if they check a username
	//get it verified, delete it then submit
	if(uval.toString().length < 3)
		return false;
		
	var reg1Str = /admin|dailystrength|staff/i;		//dont allow usernames containing these strings
	if(reg1Str.test(uval.toString())) 
		return false;
		
	return verified_user;
}

function checkUserNameAvailable(username) {
	//start out by invalidating the username
	verified_user = false;
	
	if(username.toString().length < 3 || username.toString().length > 20) {
		markAsError("vusername");
		if(check_timeout){
			clearTimeout(check_timeout);
			check_timeout = null;
		}
		return;
	}
	
	if(check_timeout != null){
		clearTimeout(check_timeout);
		check_timeout = null;
	}
	
	check_timeout = setTimeout( 
		function() { queryAvailable("UserExists", username); }, 500
	);
}

function checkEmailAvailable(email) {
	if(email != "")
		queryAvailable("EmailExists", email);
}

function queryAvailable(func, params) {
	var continuebtn = document.getElementById("btnNextStep");
	var emailpattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
	continuebtn.disabled = true;
	continuebtn.value = "Please Wait...";
	
	var callback = { 
		success: function(o) { 
			var name_taken = JSON.parse(o);
			//this bit is kind of lame...
			if(func == "UserExists") {
				if(name_taken == "true") {
					verified_user = false;
					markAsError("vusername");
				} else {
					verified_user = true;
					markAsOk("vusername");
				}
					
			}
			else {
				if(name_taken == "true") {
					verified_email = false;
					markAsError("email");
				} else {
					verified_email = true;
					if (emailpattern.test(params)) {
						markAsOk("email");
					}
					else {
						markAsError("email");
					}
				}
			}
			
			continuebtn.disabled = false;
			continuebtn.value = "Continue";
		}, 
		failure: function(o) {
			continuebtn.disabled = false;
			continuebtn.value = "Continue";
		}
	};
	
	var localparam = {item: params};
	ds_remote_api_jq(func, localparam, callback);
}


function markAsOk(id) {
	var unamebox = document.getElementById(id);
	unamebox.className = "ok";
}

function markAsError(id) {
	var unamebox = document.getElementById(id);
	unamebox.className = "error";
}


function validateReg(form) {
	var username = $('#vusername').val();
	var email = $('#email').val();
	var regAllowed = false;
	verified_user = false;
	verified_email = false;

	ds_remote_api_jq('UserExists', {'item':username}, { 
		success: 
			function(o) { 
				var username_taken = JSON.parse(o);
				verified_user = (username_taken == 'true') ? false : true;

				ds_remote_api_jq('EmailExists', {'item':email}, {
					success: function(o) { 
						var email_taken = JSON.parse(o);
						verified_email = (email_taken == 'true') ? false : true;
						regAllowed = validateStandard(form); 
						if (regAllowed) { form.submit(); }
					},
					failure: function() { 
						regAllowed = validateStandard(form); 
						if (regAllowed) { form.submit(); }
					}
				});
			}, 
		failure: 
			function() { regAllowed = validateStandard(form); if (regAllowed) { form.submit(); } }
	});


}

