
var SIDEBAR_TYPE = { MOST_POPULAR: "most_popular", MOST_COMMENTED: "most_commented", BLOGGERS: "bloggers" };

(function($) {
	
	$.fn.sidebarlist = function(options) {
		
		var opts = $.extend({}, $.fn.sidebarlist.defaults, options);
		var listOffset = opts.listLength;
		var imageListOffset = 0;
		var imageList = [];
		
		return this.each(function() {
			
			var obj = this;
			var $obj = $(this);
			
			var setupList = function() {
				
				try {
					$.ajax({
						type: "get",
						url: opts.ajaxUrl,
						dataType: "json",
						data: { list: opts.type, limit: opts.listLength },
						timeout: 10000,
						error: function(request, error) {},
						success: function(data) {
							$obj.empty();
							for (var i = $obj.contents().length; i < opts.listLength; i++) {
								$obj.append($('<a href="'+(opts.type == SIDEBAR_TYPE.BLOGGERS ? data[i].blog : data[i].url)+'"><img src="'+data[i].image+'" alt=""/></a>'));
							}
						}
					});
				}
				catch (e) { console.log(e); return; }
				
				var sequence = [];
				for (var i = 0; i < opts.listLength; i++)
					sequence.push(i);
				for (var i = 0; i < opts.listLength; i++) {
					var rand = Math.floor(Math.random() * sequence.length);
					imageList.push(sequence[rand]);
					sequence.splice(rand, 1);
				}
			}
			
			var updateList = function() {
				try {
					$.ajax({
						type: "get",
						url: opts.ajaxUrl,
						dataType: "json",
						data: { list: opts.type, limit: 1, offset: listOffset },
						timeout: 10000,
						error: function(request, error) {},
						success: function(data) {
							if (data && data.length > 0) {
								var post = data[0];
								$($obj.find("a")[imageList[imageListOffset]]).attr("href", (opts.type == SIDEBAR_TYPE.BLOGGERS) ? post.blog : post.url).find("img").attr("src", post.image);
							}
							listOffset = (listOffset + 1) % (opts.listLength * 4);
							imageListOffset = (imageListOffset + 1) % opts.listLength;
						}
					});
				}
				catch (e) { console.log(e); return; }
			}
			
			setupList();
			setInterval(updateList, opts.refreshTime * 1000);
		});
	}
	
	$.fn.sidebarlist.defaults = { type: 'all', listLength: 6, refreshTime: 5, ajaxUrl: '/ajax/post/' };

	$(document).ready(function() {
		$("#sidebar-most-popular").sidebarlist({type:SIDEBAR_TYPE.MOST_POPULAR});
		$("#sidebar-most-commented").sidebarlist({type:SIDEBAR_TYPE.MOST_COMMENTED});
		$("#sidebar-bloggers").sidebarlist({type:SIDEBAR_TYPE.BLOGGERS});
	});

})(jQuery);