/**
 * Show new logged users like Twiter
 */
(function($) {

	var default_options = {
		animation_duration: 1000,
		update_duration: 	15000,
		limit: 				3,
		action: 			'/home/last-logged-users',
		height: 			195
	};

	var methods = {

		init : function(options) {

			var computed_defaul_options = $.extend({}, default_options, options);

			return this.each(function() {

				var widget = $(this);

				// marge otptions
				var options = $.extend(computed_defaul_options, $(this).metadata());

				// saving options do element data
				widget.data('options', options);

				widget.find('div.js-list').css({
					height: 	widget.data('options').height + 'px',
					overflow: 	'hidden',
					position: 	'relative'
				});


				// first load diferent??
				widget.find('div.js-list').load(widget.data('options').action, function() {

					// intial ul css setings
					$(this).find('ul').css({
						position: 	'absolute',
						top: 		'0px',
						width: 		'100%'
					});

					$(this).find('.js-datetime').easydate();

					widget.slideDown();

					// auto loading last logged users
					setInterval(function() {
						methods._loadNewLoggedUsers(widget);
					}, widget.data('options').update_duration);

				});

			});

		},

		_loadNewLoggedUsers: function(div)
		{
			var li = div.find('li').first();

			// finding last activity id
			var lastTimestamp = li.size() ? li.metadata().lastTimestamp : null;

			// load newest logging activity
			$.get(
				div.data('options').action,
				{
					limit: div.data('options').limit,
					lastTimestamp: lastTimestamp
				},
				function(data, status) {

					var lis = $(data).find('li').detach();
					if(lis.size() == 0) {
						return;
					}

					var lis = $(lis.toArray().reverse());
					var ul = div.find('ul');
					var height = 0;

					lis.each(function() {
						$(this).prependTo(ul);
						$(this).find('.js-datetime').easydate();
						height += $(this).outerHeight();
					});

					ul.css({ top: '-' + height + 'px' });
					ul.animate(
						{ 'top': '0px' },
						div.data('options').animation_duration * lis.size()
					);

				}
			);

		}

	};

	$.fn.lastloggedUsers = function(method)
	{
		if(methods[method]) {
    		return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    	} else if(typeof method === 'object' || !method) {
    		return methods.init.apply( this, arguments );
    	} else {
    		$.error( 'Method ' +  method + ' does not exist on jQuery.lastloggedUsers' );
    	}
	};

})(jQuery);

