jQuery.fn.showBookmarkLists = function()
{
	return this.each(function()
	{
		$(this).attr('src','').click(function(e)
		{
			if ($(e.target).hasClass('huvudtext12'))
			{
				$('.bookmarksPopup').remove();
			}
			var $this = $(this);
			var $popupContainerContainer =  $('<div />').css('position', 'relative');
			var $popupContainer = $('<ul />').addClass('bookmarksPopup');
			var rawUrl = $this.attr('href');
			var bookmark_id =  rawUrl.match(/id=([0-9]+)/);
			bookmark_id = bookmark_id[bookmark_id.length-1];
			var postData = {
				'bookmark_id': bookmark_id,
				'action': 'list-categories'
			};

			if (!$(e.target).hasClass('bookmarksPopup') && !$(e.target).parents('.bookmarksPopup').length)
			{
				$.ajax(
				{
					url: '/bookmarks/index.php',
					type: 'post',
					dataType: "json",
					data: postData,
					success: function(json)
					{
						function addCategory(object, bookmark)
						{
							var $link = $('<a />').attr('href', rawUrl+'&category_id='+bookmark.id).text(bookmark.name);
							var $li = $('<li />').append($link).appendTo(object);
							return $li;
						}

						function recursivlyAddSubCategories(object, bookmarks)
						{
							var $childrenContainer = $('<ul />').appendTo(object);
							
							$.each(bookmarks, function(i, bookmark)
							{
								var $temp = addCategory($childrenContainer, bookmark);

								if (bookmark.children)
								{
									recursivlyAddSubCategories($temp, bookmark.children);
								}
							});
						}

						var $li = $('<li />').addClass('title').text('Add bookmark').appendTo($popupContainer);
						$popupContainer.append($('<li />').append($('<a/>').attr('href', rawUrl).text('Root')));

						var $close = $('<div >').text('x').addClass('close').click(function(event)
						{
							$popupContainer.remove();
							return false;
						});

						$.each(json, function(i, bookmark)
						{
							var $temp = addCategory($popupContainer, bookmark);
							recursivlyAddSubCategories($temp, bookmark.children);
						});

						$popupContainer.append($close).appendTo($popupContainerContainer);

						var topValue = $this.parent().get(0).offsetTop;
						var leftValue  = $this.parent().get(0).offsetLeft;

						leftValue = leftValue + 80;

						// Positions the element relative to the containing element, use since IE doesn't apply to the rules.
						$popupContainerContainer.css({
							'position': 'absolute',
							'top': topValue+'px',
							'left': leftValue+'px',
							'z-index': 999
						}).appendTo('body');
					},
					error: function(error)
					{
						if (typeof error === 'string')
						{
							alert(error);
						}
						$this.unbind('click');
					}
				});
			}

			return false;
		});
	});
};