define(function() {
	var taskbar = {
		initialized: false,
		taskbar: undefined,
		tasklist: undefined,
		init: function() {
			var	footerEl = document.getElementById('footer');

			taskbar.taskbar = document.createElement('div');
			var jTaskbar = $(taskbar.taskbar);
			taskbar.taskbar.innerHTML = '<div class="navbar-inner"><ul class="nav navbar-nav pull-right"></ul></div>';
			taskbar.taskbar.className = 'taskbar navbar navbar-default navbar-fixed-bottom';
			taskbar.taskbar.id = 'taskbar';

			taskbar.tasklist = taskbar.taskbar.querySelector('ul');
			document.body.insertBefore(taskbar.taskbar, footerEl.nextSibling);

			// Posts bar events
			jTaskbar.on('click', 'li', function() {
				var	_btn = this,
					module = this.getAttribute('data-module'),
					uuid = this.getAttribute('data-uuid');

				require([module], function(module) {
					if (_btn.className.indexOf('active') === -1) {
						taskbar.minimizeAll();
						module.load(uuid);
						taskbar.toggleNew(uuid, false);

						// Highlight the button
						$(taskbar.tasklist).removeClass('active');
						_btn.className += ' active';
					} else {
						module.minimize(uuid);
					}
				});
			});

			jTaskbar.on('click', 'li a', function(e) {
				e.preventDefault();
			});

			taskbar.initialized = true;
		},
		update: function() {
			var	tasks = taskbar.tasklist.querySelectorAll('li');

			if (tasks.length > 0) {
				taskbar.taskbar.setAttribute('data-active', '1');
			} else {
				taskbar.taskbar.removeAttribute('data-active');
			}
		},
		discard: function(module, uuid) {
			// Commit
			var btnEl = taskbar.tasklist.querySelector('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
			btnEl.parentNode.removeChild(btnEl);
			taskbar.update();
		},
		push: function(module, uuid, options) {
			var element = $(taskbar.tasklist).find('li[data-uuid="'+uuid+'"]');
			if(element.length)
				return;

			var	btnEl = document.createElement('li');

			btnEl.innerHTML =	'<a href="#">' +
									(options.icon ? '<img src="' + options.icon + '" />' : '') +
									'<span>' + (options.title || 'NodeBB Task') + '</span>' +
								'</a>';
			btnEl.setAttribute('data-module', module);
			btnEl.setAttribute('data-uuid', uuid);
			btnEl.className = options.state !== undefined ? options.state : 'active';

			if (!options.state || options.state === 'active') taskbar.minimizeAll();
			taskbar.tasklist.appendChild(btnEl);

			taskbar.update();
		},
		minimize: function(module, uuid) {
			var btnEl = taskbar.tasklist.querySelector('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
			$(btnEl).removeClass('active');
		},
		minimizeAll: function() {
			$(taskbar.tasklist.querySelectorAll('.active')).removeClass('active');
		},
		toggleNew: function(uuid, state) {
			var btnEl = $(taskbar.tasklist.querySelector('[data-uuid="' + uuid + '"]'));
			btnEl.toggleClass('new', state);
		}
	}

	if (!taskbar.initialized) {
		taskbar.init();
	}

	return {
		push: taskbar.push,
		discard: taskbar.discard,
		minimize: taskbar.minimize,
		toggleNew: taskbar.toggleNew
	}
});