var userData = {};
userData.elementId="userData";
userData.userEMail="";
userData.userName="";
userData.userPassword="";
userData.userVerified=false;
userData.userTask="";
userData.userMessage="";
userData.notifyFunctions = [];
userData.addNotification = function(callback)
{
	userData.notifyFunctions.push(callback);
}
userData.notify = function(message)
{
	for(var index=0;index<userData.notifyFunctions.length;++index)
	{
		userData.notifyFunctions[index](message);
	}
}
userData.updateTask=function()
{
	var element = document.getElementById(this.elementId);
	var content = "";
	if(this.userMessage!="")
	{
		content+="<p>"+this.userMessage+"</p>";
		this.userMessage="";
	}
	content += this.taskContentGenerator[this.userTask]();
	element.innerHTML=content;
	this.notify(this.userTask);
}
userData.switchTask=function()
{
	this.setTask(document.getElementById("taskList").value);
}
userData.setTask=function(newTask)
{
	this.userTask=newTask;
	this.updateTask();
}
userData.generateTaskList=function()
{
	var result="";
	result+="<p>";
	result+="I would like to:";
	result+="<select id=\"taskList\" onchange=\"javascript:userData.switchTask();\">";
	if(!this.userVerified)
	{
		result+="<option value=\"signin\""+((this.userTask=="signin")?(" selected"):(""))+">Sign in";
		result+="<option value=\"remind\""+((this.userTask=="remind")?(" selected"):(""))+">Get a password reminder";
		result+="<option value=\"create\""+((this.userTask=="create")?(" selected"):(""))+">Create a new account";
	}
	else
	{
		result+="<option value=\"signout\""+((this.userTask=="signout")?(" selected"):(""))+">Sign out";
		result+="<option value=\"modifyname\""+((this.userTask=="modifyname")?(" selected"):(""))+">Change my display name";
		result+="<option value=\"modifypassword\""+((this.userTask=="modifypassword")?(" selected"):(""))+">Change my password";
		result+="<option value=\"close\""+((this.userTask=="close")?(" selected"):(""))+">Close my account";
	}
	result+="</select>";
	result+="</p>";
	return(result);
}
userData.taskContentGenerator={};
userData.taskContentGenerator["loading"]=function()
{
	return("Loading....");
}
userData.taskContentGenerator["status"]=function()
{
	var result="";
	if(userData.userVerified)
	{
		result+="<p>";
		result+="Signed in as "+userData.userName+".";
		result+=" <button onclick=\"javascript:userData.setTask('signout');\">Change</button>";
		result+="</p>";
	}
	else
	{
		result+="<p>";
		result+="Not signed in";
		result+="<button onclick=\"javascript:userData.setTask('signin');\">Sign In/Create Account</button>";
		result+="</p>";
	}
	return(result);
}
userData.taskContentGenerator["signin"]=function()
{
	var result="";
	result+=userData.generateTaskList();
	result+="<p>";
	result+="E-Mail: ";
	result+="<input type=\"text\" id=\"userEMail\">";
	result+="Password:";
	result+="<input type=\"password\" id=\"userPassword\">";
	result+="<button onclick=\"javascript:userData.doSignIn();\">Sign in</button>";
	result+="</p>";
	return(result);
}
userData.taskContentGenerator["signout"]=function()
{
	var result="";
	result+=userData.generateTaskList();
	result+="<p>";
	result+="<button onclick=\"javascript:userData.doSignOut();\">Sign Out</button>";
	result+="</p>";
	return(result);
}
userData.taskContentGenerator["create"]=function()
{
	var result="";
	result+=userData.generateTaskList();
	result+="<p>";
	result+="E-Mail: ";
	result+="<input id=\"userEMail\" type=\"text\">";
	result+="Display Name:";
	result+="<input id=\"userName\" type=\"text\">";
	result+="<button onclick=\"javascript:userData.doCreateAccount();\">Create Account</button>";
	result+="</p>";
	return(result);
}
userData.taskContentGenerator["close"]=function()
{
	var result="";
	result+=userData.generateTaskList();
	result+="<p>";
	result+="<input id=\"closeFlag\" type=\"checkbox\">";
	result+="Yes, I'm sure";
	result+="<button onclick=\"javascript:userData.doCloseAccount();\">Close Account</button>";
	result+="</p>";
	return(result);
}
userData.taskContentGenerator["remind"]=function()
{
	var result="";
	result+=userData.generateTaskList();
	result+="<p>";
	result+="E-Mail: ";
	result+="<input type=\"text\" id=\"userEMail\">";
	result+="<button onclick=\"javascript:userData.doPasswordReminder();\">Send Password Reminder</button>";
	result+="</p>";
	return(result);
}
userData.taskContentGenerator["modifyname"]=function()
{
	var result="";
	result+=userData.generateTaskList();
	result+="<p>";
	result+="New Display Name: ";
	result+="<input id=\"displayName\" type=\"text\">";
	result+="<button onclick=\"javascript:userData.doChangeDisplayName();\">Change Display Name</button>";
	result+="</p>";
	return(result);
}
userData.taskContentGenerator["modifypassword"]=function()
{
	var result="";
	result+=userData.generateTaskList();
	result+="<p>";
	result+="New Password: ";
	result+="<input id=\"newPassword\" type=\"password\">";
	result+="Repeat New Password: ";
	result+="<input id=\"newPasswordRepeat\" type=\"password\">";
	result+="<button onclick=\"javascript:userData.doChangePassword();\">Change Password</button>";
	result+="</p>";
	return(result);
}
userData.saveToCookie = function()
{
	var data = {};
	data.userEMail = this.userEMail;
	data.userPassword = this.userPassword;
	data.userName = this.userName;
	data.userVerified = this.userVerified;
	setCookie("playdeezaccount",data.toJSONString(),365);
}
userData.loadFromCookie = function()
{
	var s = getCookie("playdeezaccount");
	if(s!=null & s!="")
	{
		var data = s.parseJSON();
		this.userEMail = data.userEMail;
		this.userPassword = data.userPassword;
		this.userName=data.userName;
		this.userVerified=data.userVerified;
	}
	this.setTask("status");
}
userData.createUserAccountCallback = function (result)
{
	var status = result.parseJSON();
	if(status.Result)
	{
		userData.userMessage="Account created.  Check your e-mail for account password.";
		userData.setTask("signin");
	}
	else
	{
		userData.userMessage=status.ResultMessage;
		userData.setTask("status");
	}
}
userData.createUserAccount = function (userEMail,userName)
{
	ajax("http://www.playdeez.com/hiscores/useraxnsilentMySQL.asp","axn=signup&UserEMail="+userEMail+"&UserName="+userName,userData.createUserAccountCallback);
}
userData.remindUserPasswordCallback = function remindUserPasswordCallback(result)
{
	var status = result.parseJSON();
	if(status.Result)
	{
		userData.userMessage="Password reminder sent.  Check your e-mail for account password.";
		userData.setTask("signin");
	}
	else
	{
		userData.userMessage=status.ResultMessage;
		userData.setTask("status");
	}
}
userData.remindUserPassword = function (userEMail)
{
	ajax("http://www.playdeez.com/hiscores/useraxnsilentMySQL.asp","axn=remind&UserEMail="+userEMail,userData.remindUserPasswordCallback);
}
userData.verifyUserAccountCallback=function (result)
{
	var status = result.parseJSON();
	if(status.Result)
	{
		userData.userVerified=true;
		userData.userName=status.UserName;
		userData.saveToCookie();
		userData.userMessage="Welcome!";
		userData.setTask("status");
	}
	else
	{
		userData.userMessage=status.ResultMessage;
		userData.setTask("signin");
	}
}
userData.verifyUserAccount = function (userEMail,userPassword)
{
	ajax("http://www.playdeez.com/hiscores/useraxnsilentMySQL.asp","axn=verify&UserEmail="+userEMail+"&UserPassword="+userPassword,userData.verifyUserAccountCallback);
}
userData.modifyUserAccountCallback = function (result)
{
	var status = result.parseJSON();
	if(status.Result)
	{
		userData.userName = userData.newUserName;
		userData.userPassword = userData.newPassword;
	}
	delete userData.newUserName;
	delete userData.newPassword;
	userData.userMessage=status.ResultMessage;
	userData.setTask("status");
}
userData.modifyUserAccount = function (userEMail,userPassword,newNameFlag,newUserName,newPasswordFlag,newUserPassword,newUserPassword_Repeat)
{
	this.newUserName = (newNameFlag!="")?(newUserName):(this.userName);
	this.newPassword=(newPasswordFlag!="")?(newUserPassword):(this.userPassword);
	ajax("http://www.playdeez.com/hiscores/useraxnsilentMySQL.asp","axn=modify&UserEmail="+userEMail+"&UserPassword="+userPassword+"&NewNameFlag="+newNameFlag+"&NewUserName="+newUserName+"&NewPasswordFlag="+newPasswordFlag+"&NewUserPassword="+newUserPassword+"&NewUserPassword_Repeat="+newUserPassword_Repeat,userData.modifyUserAccountCallback);
}
userData.closeUserAccountCallback = function (result)
{
	var status = result.parseJSON();
	if(status.Result)
	{
		userData.userVerified=false;
		userData.userEMail="";
		userData.userPassword="";
		userData.userName="";
		userData.userMessage="Account closed.  Sorry to see you go.";
		userData.setTask("status");
	}
	else
	{
		userData.userMessage=status.ResultMessage;
		userData.setTask("status");
	}
}
userData.closeUserAccount = function (userEMail,userPassword,closeAccountFlag)
{
	ajax("http://www.playdeez.com/hiscores/useraxnsilentMySQL.asp","axn=close&UserEmail="+userEMail+"&UserPassword="+userPassword+"&CloseAccountFlag="+closeAccountFlag,userData.closeUserAccountCallback);
}
userData.doSignIn=function()
{
	this.userEMail=document.getElementById("userEMail").value;
	this.userPassword=document.getElementById("userPassword").value;
	this.setTask("loading");
	this.verifyUserAccount(this.userEMail,this.userPassword);
}
userData.doSignOut=function()
{
	this.userEMail="";
	this.userName="";
	this.userPassword="";
	this.userVerified=false;
	this.userMessage="You have been signed out.";
	this.setTask("status");
}
userData.doCreateAccount=function()
{
	var userEMail = document.getElementById("userEMail").value;
	var userName = document.getElementById("userName").value;
	this.setTask("loading");
	this.createUserAccount(userEMail,userName);
}
userData.doCloseAccount=function()
{
	var closeAccountFlag = (document.getElementById("closeFlag").checked)?("y"):("");
	this.setTask("loading");
	this.closeUserAccount(this.userEMail,this.userPassword,closeAccountFlag);
}
userData.doPasswordReminder=function()
{
	var userEMail = document.getElementById("userEMail").value;
	this.setTask("loading");
	this.remindUserPassword(userEMail);
}
userData.doChangeDisplayName=function()
{
	var userName = document.getElementById("displayName").value;
	this.setTask("loading");
	this.modifyUserAccount(this.userEMail,this.userPassword,"y",userName,"","","");
}
userData.doChangePassword=function()
{
	var newUserPassword=document.getElementById("newPassword").value;
	var newUserPassword_Repeat=document.getElementById("newPasswordRepeat").value;
	this.setTask("loading");
	userData.modifyUserAccount(this.userEMail,this.userPassword,"","","y",newUserPassword,newUserPassword_Repeat);
}
userData.loadFromCookie();
