var GMJAM = function() {
	var body = undefined;
	var url = 'index.php';

	function keyDown(ev) { // Find the key pressed.
		switch (ev.keyCode) {
		case Event.KEY_RETURN: handleReturns(ev.element()); break;
		}
	}

	function handleButtons(button) {
		switch (button.className) {
		case 'button_sign_in': Spawn.loginForm(button); break;
		}
	}

	function handleReturns(el) {
		switch (el.name.toLowerCase()) {
		case 'username': el.next().focus(); break;
		case 'password':
			var prm = '&which=login_user&user_name=' + el.previous().value + '&user_pass=' + el.value;
			el.up('div.login_area').remove();
			Content.update(prm);
			break;
		}
	}

	function onClick(ev) { // Find the tag clicked.
		switch (ev.element().tagName.toLowerCase()) {
		case 'a': Menu.load(ev.element()); break;
		case 'b': handleButtons(ev.element()); break;
		}
	}

	var BottomBar = function() {
		var proper = undefined;

		return {
			initialise: function() {
				proper = body.down('div.bar_bottom');
				proper.observe('click', onClick);
			}
		};
	} ();

	var Content = function() {
		var proper = undefined;

		return {
			initialise: function() {
				proper = body.down('div.content');
			}
			,update: function(prm) {
				var a = new Ajax.Updater(proper, url, {
					method: 'post',
					parameters: prm
				});
			}
		};
	} ();

	var Menu = function() {
		var proper = undefined;

		return {
			initialise: function() {
				proper = body.down('div.menu');
				proper.observe('click', onClick);
			}
			,load: function(el) {
				Content.update('&which=update_content&item=' + el.id);
			}
		};
	} ();

	var Spawn = function() {
		var proper = undefined;

		var type = {
			Login: 'login_'
		};

		function input(type, atrName, atrType) {
			var inputTag = document.createElement('input');
			inputTag.className = type+'input';
			inputTag.name = atrName;

			if (atrType) {
				inputTag.type = atrType;
			}

			return inputTag;
		}

		function paragraph(content) {
			var pTag = document.createElement('p');
			pTag.innerHTML = content;

			return pTag;
		}

		return {
			initialise: function() {
				proper = body.down('div.spawn');
				proper.observe('keydown', keyDown);
			}
			,loginForm: function(el) {
				var loginArea = proper.down('div.login_area');

				if (loginArea) {
					loginArea.remove();
				} else {
					loginArea = document.createElement('div');
					loginArea.className = 'login_area';

					loginArea.appendChild(paragraph('Enter your user-pass'));
					loginArea.appendChild(input(type.Login, 'username'));
					loginArea.appendChild(input(type.Login, 'password', 'password'));

					proper.insert(loginArea);
					proper.down('input[name="username"]').focus();
				}
			}
		};
	} ();

	return {
		initialise: function() {
			body = ($$('body'))[0];

			BottomBar.initialise();
			Content.initialise();
			Menu.initialise();
			Spawn.initialise();
		}
	};
} ();

document.observe('dom:loaded', GMJAM.initialise);

