(function (window, undefined) {

	var likeJS = {

		ajaxUrl : '/ajax/like.ajax.php',
		likers : {},

		init : function () {

			var that = this;

			$('.likeButton').click(function () {that.toggleLike($(this));});
			$('.likeContainer').children().find('.other').click(function (){that.showLikers($(this));});
			$('.likeContainer').children().find('.number').click(function (){that.showLikers($(this));});
		},

		toggleLike : function (sender) {
			
			var that = this;

			var refId = sender.data('reference-id');
			var type = sender.data('type');

			var data = {
				act : 'toggleLike', 
				type : type,
				referenceId : refId
			}
			that.likers['likers_' + type + '_' + refId] = undefined;

			$.getJSON(that.ajaxUrl, data, function(response){that.likeToggled(response, sender);});
		},

		likeToggled : function (response, sender) {
			
			if (response.hasOwnProperty('error')) {
				return;
			}

			var elements = sender.parent().children();
			var numberOfLikes = sender.parent().children('input[name="numberOfLikes"]').val();
			
			switch (response.succes) {
				case 'like added':
					sender.addClass('disabled');
					sender.html('<img src="/images/icons/thumb-down.png" /> Synes ikke godt om længere');
					elements.find('.you').show();
					if (numberOfLikes > 0) {
						elements.find('.and').show();
						elements.find('.other').show();
					}
					elements.find('.likesIt').show();
					break;
				case 'like deleted':
					sender.removeClass('disabled');
					elements.find('.you').hide();
					elements.find('.and').hide();
					elements.find('.other').hide();
					sender.html('<img src="/images/icons/thumb-up.png" /> Synes godt om')
					if (numberOfLikes == 0) {
						elements.find('.likesIt').hide();
					}
					break;
			}

		},

		showLikers : function (sender) {

			var that = this;

			var refId = sender.parent().data('reference-id');
			var type = sender.parent().data('type');

			console.log(that.likers['likers_' + type + '_' + refId]);

			if (that.likers.hasOwnProperty('likers_' + type + '_' + refId) && that.likers['likers_' + type + '_' + refId] != undefined) {
				that.showLikersDiv(sender, type, refId);
			} else {
				var data = {
					act : 'getLikers',
					type : type,
					referenceId : refId
				}
				$.getJSON(that.ajaxUrl, data, function(response){that.likersReceived(response, sender);});
			}
		},

		likersReceived : function (response, sender) {

			var that = this;

			var refId = sender.parent().data('reference-id');
			var type = sender.parent().data('type');

			that.likers['likers_' + type + '_' + refId] = response;
			that.showLikersDiv(sender, type, refId);
			
		},

		showLikersDiv : function (sender, type, referenceId) {

			var that = this;
			var likersContainer = sender.parent().parent().children('.likers');
			likersContainer.html('');
			if (that.likers['likers_' + type + '_' + referenceId].length > 0) {
				for (var i = 0; i < that.likers['likers_' + type + '_' + referenceId].length; i++) {

					var liker = that.likers['likers_' + type + '_' + referenceId][i];
					likersContainer.append(
						'<a href="/memberlist.php?mode=viewprofile&u=' + liker['userId'] + '">' + liker['username'] + '</a>, '
					);
				}
				likersContainer.html(likersContainer.html().substr(0, likersContainer.html().length - 2));
			}

			likersContainer.toggle();

		}
		
	};

	$(function(){likeJS.init();});

}(window));
