(function ($) {
	$.fn.fl_slideshow = function (options) {
		var opts = $.extend({}, $.fn.fl_slideshow.defaults, options);

		return this.each(function () {
			$t = $(this);
			$t.data('pointer', 0);

			var o = $.meta ? $.extend({}, opts, $t.data()) : opts;
			var x = {slides:[], paging:[]}, i = 0;

			function advance (index) {
				if (typeof index !== 'number')            index = $t.data('pointer');
				if (index >= $t.find('.slides a').length) index = 0;

				$t.find('.slides a:not(:eq(' + index + '))').fadeOut(o.fade_speed).parent().find('a:eq(' + index + ')').fadeIn(o.fade_speed);
				$t.find('.paging a:not(:eq(' + index + '))').removeClass('selected').parent().find('a:eq(' + index + ')').addClass('selected');

				$t.data('pointer', index + 1);

				clearTimeout($t.data('timer'));
				$t.data('timer', window.setTimeout(function () { advance(); }, o.delay * 1000));
			}

			$t.html('<div class="slides"></div><div class="paging"></div>');

			for (var slide in o.slides) {
				if (slide && o.slides[slide]) {
					x.slides.push('<a href="' + o.slides[slide] + '" style="display: none; background-image: url(' + slide + ');"></a>');
					x.paging.push('<a href="javascript:;">' + ++i + '</a>');
				}
			}

			$t.find('.slides').html(x.slides.join('')).parent().find('.paging').html(x.paging.join('')).find('a').click(function () {
				advance($(this).parent().find('a').index($(this)));
			});

			advance(0);
		});
	};
	$.fn.fl_slideshow.defaults = {
		slides:     {},
		delay:      5,
		fade_speed: 600
	};
})(jQuery);