var xmlHttp = new createXmlHttpRequestObject();
var xmlHttpFp = new createForgotPassXmlHttpRequestObject();
var xmlHttpUser = new createUserXmlHttpRequestObject();
var xmlHttpEmail = new createEmailXmlHttpRequestObject();
var xmlHttpSignup = new createSignupXmlHttpRequestObject();
var xmlHttpWidgetLogin = new createWidgetLoginXmlHttpRequestObject();

function validateFields()
{
	msgDiv = document.getElementById("loginmsg");
	
	username = document.getElementById('loginUsername').value;
	password = document.getElementById('loginPassword').value;
	if(username.length < 1 || username.length == null || password.length < 1 || password.length == null)
	{
		msgDiv.innerHTML = "Invalid username and/or password";
	}
	else
	{
		validate(username, password);	
	}
	return false;
}

function validateFieldsWidgetLogin()
{
	msgDiv = document.getElementById("loginmsg");
	
	username = document.getElementById('loginUsername').value;
	password = document.getElementById('loginPassword').value;
	if(username.length < 1 || username.length == null || password.length < 1 || password.length == null)
	{
		msgDiv.innerHTML = "Invalid username and/or password";
	}
	else
	{
		validateWidgetLogin(username, password);	
	}
	return false;
}

function validateActivateFields()
{
	msgDiv = document.getElementById("loginmsg");
	
	username = document.getElementById('loginUsername').value;
	password = document.getElementById('loginPassword').value;
	if(username.length < 1 || username.length == null || password.length < 1 || password.length == null)
	{
		msgDiv.innerHTML = "Invalid username and/or password";
	}
	else
	{
		validateActivate(username, password);	
	}
	return false;
}

function validateSignup()
{
	referral = document.getElementById('signupReferral').value;
	username = document.getElementById('signupUsername').value;
	password = document.getElementById('signupPassword').value;
	confirmPassword = document.getElementById('signupConfirmPassword').value;
	email = document.getElementById('signupEmail').value;
	country = document.getElementById('signupCountry').value;
	agree = document.getElementById('signupAgree').checked;
	
	errors = 0;
	msg = "";

	if(!stringValidate(username)){
		msg = msg + "Username must contain letters and/or numbers.\n";
		errors++;
	}else if(!validatePassword(password)){
		msg = msg + "Password must be at least 6 characters\nand must contain letters and/or numbers.\n";
		errors++;
	}else if(!validateConfirmPassword(password, confirmPassword)){
		msg = msg + "Passwords do not match.\n";
		errors++;
	}else if(!validateEmail(email)){
		msg = msg + "Please input a valid email.";
		errors++;
	}else if(!validateCountry(country)){
		msg = msg + "Please select your country.\n";
		errors++;
	}else if(!agree){
		msg = msg + "You must agree to the Terms to register.";	
		errors++;
	}
	
	if(errors > 0){
		alert(msg);	
	}else{
		validateUserName(username);
	}
	return false;
}

function validateForgotPass(){
	msgDiv = document.getElementById("fpmsg");
	email = document.getElementById("fpEmail").value;
	
	if(email.length < 1){
		msgDiv.innerHTML = "Please enter your email";
	}else{
		checkEmail(email);
	}
	return false;
}

function stringValidate(value){
	var alphaExp = /^[a-zA-Z0-9]+$/;
	if(!value.match(alphaExp)){
		return 0;
	}else if(value.length < 1){
		return 0;
	}else{
		return 1;
	}
}

function validatePassword(value){
	var alphaExp = /^[a-zA-Z0-9]+$/;
	if(!value.match(alphaExp)){ 
		return 0;
	}else if(value.length < 6){
		return 0;
	}else{
		return 1;
	}
}

function validateConfirmPassword(pass, cPass){
	if(pass == cPass){
		return 1;	
	}else{
		return 0;	
	}
}

function validateEmail(email){
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test(email) == false) {
		return 0;
	}else{
		return 1;	
	}
}

function validateCountry(country){
	if(country.length < 1 || country == ""){
		return 0;	
	}else{
		return 1;	
	}
}

// FORGOT PASSWORD
function showForgotPassForm(){
	fpDiv = document.getElementById('forgotpassForm');
	fpDiv.innerHTML = '<div class="windowTitle">FORGOT PASSWORD</div><form class="fpForm" name="pForm" id="fpForm" action="" method="post" onsubmit="return validateForgotPass();"><label class="loginLabel">Email:</label> <input class="loginInput" type="text" name="fpEmail" id="fpEmail" value="" /><br/>\n<input class="loginSubmit" id="fpSubmit" type="submit" name="submit" value="Reset Password" /><br />\n<div id="fpmsg"></div>\n</form>';
}

function validate(username, password)
{
	msgDiv = document.getElementById("loginmsg");
	
	msgDiv.innerHTML = "<span class='loader' style='margin:15px 0 0 95px; float:left;'><img src='images/loader.gif' height='32' width='32' alt=''></span>"; 
	if(xmlHttp)
	{
		try
		{
			var params = "username="+username+"&password="+password; 
			xmlHttp.open("POST", "php/processLogin.php", true);
			xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlHttp.onreadystatechange = handleLoginRequestStateChange;
			xmlHttp.send(params);
		}
		catch (e)
		{
			msgDiv.innerHTML = "Can't connect to server.";
			return false;
		}
	}
}

function validateWidgetLogin(username, password)
{
	msgDiv = document.getElementById("loginmsg");
	
	msgDiv.innerHTML = "<span class='loader' style='margin:15px 0 0 95px; float:left;'><img src='../images/loader.gif' height='32' width='32' alt=''></span>"; 
	if(xmlHttpWidgetLogin)
	{
		try
		{
			var params = "username="+username+"&password="+password; 
			xmlHttpWidgetLogin.open("POST", "../php/processLogin.php", true);
			xmlHttpWidgetLogin.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlHttpWidgetLogin.onreadystatechange = handleWidgetLoginRequestStateChange;
			xmlHttpWidgetLogin.send(params);
		}
		catch (e)
		{
			msgDiv.innerHTML = "Can't connect to server.";
			return false;
		}
	}
}

function validateActivate(username, password)
{
	msgDiv = document.getElementById("loginmsg");
	
	if(xmlHttp)
	{
		try
		{
			var params = "username="+username+"&password="+password; 
			xmlHttp.open("POST", "php/processLogin.php", true);
			xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlHttp.onreadystatechange = handleLoginRequestStateChange;
			xmlHttp.send(params);
		}
		catch (e)
		{
			msgDiv.innerHTML = "Can't connect to server.";
			return false;
		}
	}
}

function checkEmail(email)
{	
	if(xmlHttpFp)
	{
		try
		{
			var params = "email="+email; 
			xmlHttpFp.open("POST", "http://widget.billytalent.com/php/processForgotPass.php", true);
			xmlHttpFp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlHttpFp.onreadystatechange = handleForgotPassRequestStateChange;
			xmlHttpFp.send(params);
		}
		catch (e)
		{
			alert("Can't connect to server.");
			return false;
		}
	}
}

function validateUserName(username)
{	
	if(xmlHttpUser)
	{
		try
		{
			var params = "username="+username; 
			xmlHttpUser.open("POST", "php/processUsername.php", true);
			xmlHttpUser.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlHttpUser.onreadystatechange = handleUserRequestStateChange;
			xmlHttpUser.send(params);
		}
		catch (e)
		{
			alert("Can't connect to server.");
			return false;
		}
	}
}

function validateUserEmail()
{	
	if(xmlHttpEmail)
	{
		try
		{
			var params = "email="+email; 
			xmlHttpEmail.open("POST", "php/processEmail.php", true);
			xmlHttpEmail.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlHttpEmail.onreadystatechange = handleEmailRequestStateChange;
			xmlHttpEmail.send(params);
		}
		catch (e)
		{
			alert("Can't connect to server.");
			return false;
		}
	}
}

function register()
{
	//msgDiv.innerHTML = "<span class='loader' style='margin:15px auto; float:left;'><img src='images/loader.gif' height='32' width='32' alt=''></span>"; 
	
	if(xmlHttpSignup)
	{
		try
		{
			var params = "username="+username+"&password="+password+"&email="+email+"&country="+country+"&referral="+referral;
			xmlHttpSignup.open("POST", "php/processSignup.php", true);
			xmlHttpSignup.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlHttpSignup.onreadystatechange = handleSignupRequestStateChange;
			xmlHttpSignup.send(params);
		}
		catch (e)
		{
			alert("Can't connect to server.");
			return false;
		}
	}
}

function handleLoginRequestStateChange()
{

	msgDiv = document.getElementById("loginmsg");

	if(xmlHttp.readyState == 4)
	{
		if(xmlHttp.status == 200)
		{
			try
			{
				response = xmlHttp.responseText;

				if(response == 'nomatch'){
					msgDiv.innerHTML = 'Invalid username and/or password.';
					return false;
				}else if(response == 'match'){
					window.location.href = 'main.php'; 
				}else if(response == 'inactive'){
					msgDiv.innerHTML = 'Your account has not been activated.';	
					return false;
				}
			}
			catch (e)
			{
				alert("Server Error. Please try again.");
				return false;
			}
		}
		else
		{
			alert("Server Error. Please try again.");
			return false;
		}
	}
}

function handleWidgetLoginRequestStateChange()
{

	msgDiv = document.getElementById("loginmsg");

	if(xmlHttpWidgetLogin.readyState == 4)
	{
		if(xmlHttpWidgetLogin.status == 200)
		{
			try
			{
				response = xmlHttpWidgetLogin.responseText;

				if(response == 'nomatch'){
					msgDiv.innerHTML = 'Invalid username and/or password.';
					return false;
				}else if(response == 'match'){
					window.location.href = '../main.php'; 
				}else if(response == 'inactive'){
					msgDiv.innerHTML = 'Your account has not been activated.';	
					return false;
				}
			}
			catch (e)
			{
				alert("Server Error. Please try again.");
				return false;
			}
		}
		else
		{
			alert("Server Error. Please try again.");
			return false;
		}
	}
}

function handleForgotPassRequestStateChange()
{

	msgDiv = document.getElementById("fpmsg");

	if(xmlHttpFp.readyState == 4)
	{
		if(xmlHttpFp.status == 200)
		{
			try
			{
				response = xmlHttpFp.responseText;

				if(response == 'sent'){
					msgDiv.innerHTML = '<font color="#009900">An email has been sent to your inbox.\nCheck your junk mail if your email does not arrive.</font>';
					//var t=setTimeout("msgDiv.innerHTML = ''; forgotpassForm.innerHTML = ''; $('#loginWindow').aqLayer('hide');", 2500);
					return false;
				}else if(response == 'notsent'){
					msgDiv.innerHTML = 'Error sending reset password email.\nPlease try again.';
					return false;
				}else if(response == 'notexists'){
					msgDiv.innerHTML = 'Invalid email. Try again.';
					return false;
				}
			}
			catch (e)
			{
				alert("Server Error. Please try again.");
				return false;
			}
		}
		else
		{
			alert("Server Error. Please try again.");
			return false;
		}
	}
}

function handleUserRequestStateChange()
{

	if(xmlHttpUser.readyState == 4)
	{
		if(xmlHttpUser.status == 200)
		{
			try
			{
				response = xmlHttpUser.responseText;

				if(response == 1){
					msg = msg + 'Username is already taken.\n';
					errors++;
					alert(msg);
					return false;
				}else{
					//register();	
					validateUserEmail()
				}
			}
			catch (e)
			{
				//alert("Error reading the response.");
				alert("Server Error. Please try again.");
				return false;
			}
		}
		else
		{
			//msgDiv.innerHTML = "Problem retrieving data: " + xmlHttp.statusText;
			alert("Server Error. Please try again.");
			return false;
		}
	}
}

function handleEmailRequestStateChange()
{

	if(xmlHttpEmail.readyState == 4)
	{
		if(xmlHttpEmail.status == 200)
		{
			try
			{
				response = xmlHttpEmail.responseText;

				if(response == 1){
					msg = msg + 'Email is already registered under another account.\n';
					errors++;
					alert(msg);
					return false;
				}else{
					register();
				}
			}
			catch (e)
			{
				//alert("Error reading the response.");
				alert("Server Error. Please try again.");
				return false;
			}
		}
		else
		{
			//msgDiv.innerHTML = "Problem retrieving data: " + xmlHttp.statusText;
			alert("Server Error. Please try again.");
			return false;
		}
	}
}

function handleSignupRequestStateChange()
{
	
	if(xmlHttpSignup.readyState == 4)
	{
		if(xmlHttpSignup.status == 200)
		{
			try
			{
				response = xmlHttpSignup.responseText;

				if(response == 'n'){
					//msgDiv.innerHTML = 'Registration Error.\nPlease try again later.';
					alert("Registration Error. Please try again later.");
					errors++;
					return false;
				}else if(response == 'y'){
					alert("An activation email has been sent to your inbox. Click on the provided link to complete the registration. Check your junk mail if the email does not arrive.");
					window.location.href = 'index.php'; 
					return true;
				}
			}
			catch (e)
			{
				//msgDiv.innerHTML = "Error reading the response.";
				alert("Server Error. Please try again.");
				return false;
			}
		}
		else
		{
			//msgDiv.innerHTML = "Problem retrieving data: " + xmlHttp.statusText;
			alert("Server Error. Please try again.");
			return false;
		}
	}
}

function createXmlHttpRequestObject()
{
	var xmlHttp;
	try
	{
		xmlHttp = new XMLHttpRequest();
	}
	catch(e)
	{
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		for(var i=0; i < XmlHttpVersions.length && !xmlHttp; i++)
		{
			try
			{
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if(!xmlHttp){
		alert("AJAX error. Please try again later.");
	}else{
		return xmlHttp;
	}
}

function createForgotPassXmlHttpRequestObject()
{
	var xmlHttpFp;
	try
	{
		xmlHttpFp = new XMLHttpRequest();
	}
	catch(e)
	{
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		for(var i=0; i < XmlHttpVersions.length && !xmlHttpFp; i++)
		{
			try
			{
				xmlHttpFp = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if(!xmlHttpFp){
		alert("AJAX error. Please try again later.");
	}else{
		return xmlHttpFp;
	}
}

function createUserXmlHttpRequestObject()
{
	var xmlHttpUser;
	try
	{
		xmlHttpUser = new XMLHttpRequest();
	}
	catch(e)
	{
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		for(var i=0; i < XmlHttpVersions.length && !xmlHttpUser; i++)
		{
			try
			{
				xmlHttpUser = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if(!xmlHttpUser){
		//msgDiv.innerHTML = "Error creating XMLHttpRequest object.";	
		alert("AJAX error. Please try again later.");
	}else{
		return xmlHttpUser;
	}
}

function createEmailXmlHttpRequestObject()
{
	var xmlHttpEmail;
	try
	{
		xmlHttpEmail = new XMLHttpRequest();
	}
	catch(e)
	{
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		for(var i=0; i < XmlHttpVersions.length && !xmlHttpEmail; i++)
		{
			try
			{
				xmlHttpEmail = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if(!xmlHttpEmail){
		//msgDiv.innerHTML = "Error creating XMLHttpRequest object.";	
		alert("AJAX error. Please try again later.");
	}else{
		return xmlHttpEmail;
	}
}

function createSignupXmlHttpRequestObject()
{
	var xmlHttpSignup;
	try
	{
		xmlHttpSignup = new XMLHttpRequest();
	}
	catch(e)
	{
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		for(var i=0; i < XmlHttpVersions.length && !xmlHttpSignup; i++)
		{
			try
			{
				xmlHttpSignup = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if(!xmlHttpSignup){
		//msgDiv.innerHTML = "Error creating XMLHttpRequest object.";	
		alert("AJAX error. Please try again later.");
	}else{
		return xmlHttpSignup;
	}
}

function createWidgetLoginXmlHttpRequestObject()
{
	var xmlHttpWidgetLogin;
	try
	{
		xmlHttpWidgetLogin = new XMLHttpRequest();
	}
	catch(e)
	{
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP",
										"Microsoft.XMLHTTP");
		for(var i=0; i < XmlHttpVersions.length && !xmlHttpWidgetLogin; i++)
		{
			try
			{
				xmlHttpWidgetLogin = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {}
		}
	}
	if(!xmlHttpWidgetLogin){
		alert("AJAX error. Please try again later.");
	}else{
		return xmlHttpWidgetLogin;
	}
}