LoginManager = Class.create({
	initialize: function(element) {
		this.initializeElement(element);
	},
	
	initializeElement: function(element) {
		this.element = $(element);
		if (this.element)
		{
			this.url = this.element.readAttribute("url");
			this.base = this.element.readAttribute("base");
			$("loginButton").observe("click", this.loginClickListener.bindAsEventListener(this));
			$("logoffButton").observe("click", this.logoffClickListener.bindAsEventListener(this));
			$("forget").observe("click", this.forgetClickListener.bindAsEventListener(this));
			var listener = this.keyListener.bindAsEventListener(this);
			$("username").observe("keypress", listener);
			$("password").observe("keypress", listener);
		}
	},
	
	keyListener: function(e)
	{
		var keyCode = e.keyCode;
		if (keyCode == Event.KEY_RETURN)
		{
			this.login();
		}
	},
	
	forgetClickListener: function(e) 
	{
		this.forget();
	},
	
	loginClickListener: function(e) 
	{
		this.login();
	},
	
	logoffClickListener: function(e) 
	{
		this.logoff();
	},
	
	login: function ()
	{
		var usernameVal = $("username").value;
		var passwordVal = $("password").value;
		
		new Ajax.Request(this.url, {
					method		: 'get',
					parameters	: {action: "login", username:usernameVal, password:passwordVal}, 
					onComplete 	: this.loginResponse.bind(this)
				});
	},
	
	loginResponse: function(transport)
	{
		var response = transport.responseText.evalJSON();
		if(response.status == 'success') 
		{
			$('loginTable').hide();
			$('loggedTable').show();
			$('usernameDisplayer').update("Greetings " + response.user + "!");
			$('profileAddress').writeAttribute("href", this.base + "profile/" + response.user + ".html");
			
			addFavorite = $('addFavoriteRow');
			if (addFavorite) 
			{
				addFavorite.show();
			}
		
			if(response.user == 'admin') 
			{
				adminArea = $('adminArea');
				if (adminArea) 
				{
					adminArea.setStyle({'display': ''});
				}
			}	
			else
			{
				adminArea = $('adminArea');
				if (adminArea) 
				{
					adminArea.setStyle({'display': 'none'});
				}			
			}
		}
		else
		{
			alert(response.message);		
		}
	},
	
	logoff: function ()
	{
		new Ajax.Request(this.url, {
					method		: 'get',
					parameters	: {action: "logoff"}, 
					onComplete 	: this.logoffResponse.bind(this)
				});
	},
	
	logoffResponse: function(transport)
	{
		var response = transport.responseText.evalJSON();
		if(response.status == 'success') 
		{
			$('loggedTable').hide();
			$('loginTable').show();
			addFavorite = $('addFavoriteRow');
			if (addFavorite) 
			{
				addFavorite.hide();
			}
		}
	},
	
	forget: function ()
	{
		var emailVal = window.prompt("Please write your email.\nWe will send your password to your email.","");
	
		new Ajax.Request(this.url,
				{
					method		: 'get',
					parameters	: {action: "forget", email:emailVal.replace("@", "(at)")}, 
					onComplete 	: this.forgetResponse.bind(this)
				});
	},
	
	forgetResponse: function(transport)
	{
		var response = transport.responseText.evalJSON();
		if(response.status == 'success') 
		{
			alert("Your new password has been sent to your email address.");
		}
		else {
			alert("The E-Mail address you have specified has not been found!");
		}
	}
});

function windowLoadedLoginManager()
{
	new LoginManager("loginTable");
}

(function() {
	Event.observe(window, "load", windowLoadedLoginManager);
})();
