define(function() {
	var Unread = {},
		loadingMoreTopics = false;

	Unread.init = function() {
		app.enterRoom('recent_posts');

		ajaxify.register_events([
			'event:new_topic',
			'event:new_post',
			'topics.markAllRead'
		]);

		var newTopicCount = 0,
			newPostCount = 0;

		$('#new-topics-alert').on('click', function() {
			$(this).addClass('hide');
		});

		socket.on('event:new_topic', function(data) {
			++newTopicCount;
			updateAlertText();
		});

		function updateAlertText() {
			var text = 'There';

			if (newTopicCount > 1) {
				text += ' are ' + newTopicCount + ' new topics';
			} else if (newTopicCount === 1) {
				text += ' is a new topic';
			}

			if (newPostCount > 1) {
				text += (newTopicCount?' and ':' are ') + newPostCount + ' new posts';
			} else if(newPostCount === 1) {
				text += (newTopicCount?' and ':' is ') + ' a new post';
			}

			text += '. Click here to reload.';

			$('#new-topics-alert').html(text).removeClass('hide').fadeIn('slow');
			$('#category-no-topics').addClass('hidden');
		}

		socket.on('event:new_post', function(data) {
			++newPostCount;
			updateAlertText();
		});

		$('#mark-allread-btn').on('click', function() {
			var btn = $(this);
			socket.emit('topics.markAllRead', function(err) {
				if(err) {
					return app.alertError('There was an error marking topics read!');
				}

				btn.remove();
				$('#topics-container').empty();
				$('#category-no-topics').removeClass('hidden');
				app.alertSuccess('All topics marked as read!');
				$('#numUnreadBadge')
					.removeClass('badge-important')
					.addClass('badge-inverse')
					.html('0');
			});
		});

		function onTopicsLoaded(topics) {

			var html = templates.prepare(templates['unread'].blocks['topics']).parse({
				topics: topics
			});

			translator.translate(html, function(translatedHTML) {
				var container = $('#topics-container');

				$('#category-no-topics').remove();

				html = $(translatedHTML);
				container.append(html);
				$('span.timeago').timeago();
				app.createUserTooltips();
				app.makeNumbersHumanReadable(html.find('.human-readable-number'));
			});
		}

		function loadMoreTopics() {
			loadingMoreTopics = true;
			socket.emit('topics.loadMoreUnreadTopics', {
				after: parseInt($('#topics-container').attr('data-next-start'), 10)
			}, function(err, data) {
				if(err) {
					return app.alertError(err.message);
				}

				if (data.topics && data.topics.length) {
					onTopicsLoaded(data.topics);
					$('#topics-container').attr('data-next-start', data.nextStart);
				} else {
					$('#load-more-btn').hide();
				}

				loadingMoreTopics = false;
			});
		}

		$(window).off('scroll').on('scroll', function() {
			var bottom = ($(document).height() - $(window).height()) * 0.9;

			if ($(window).scrollTop() > bottom && !loadingMoreTopics) {
				loadMoreTopics();
			}
		});


		if ($("body").height() <= $(window).height() && $('#topics-container').children().length >= 20) {
			$('#load-more-btn').show();
		}

		$('#load-more-btn').on('click', function() {
			loadMoreTopics();
		});
	};

	return Unread;
});