$.fn.gallery = function($options) {
	var $defaults = {display : 'gallery', interval : 5000, speed : 1500};
	var $opts = $.extend($defaults, $options);
	var _amount = $(this).children('li').length-1;
	var _images = new Array();
	var _current = 0;
	
	$(this).children('li').each(function(i) {
		_images[i] = new Array();
		var src = $(this).children('img').attr('src');
        var img = new Image();
        _images[i]['src'] = src;
        $(img).load(function() {
            if (i == _amount) {
				activate();
			}
        }).error(function () {
        	
        }).attr('src', src);
	});
	
	function activate() {
		if (_images[_current]) {
			var img = $(new Image()).attr('src',_images[_current]['src']).css({position : 'absolute', display : 'none'}).addClass('gallery_active');
			$('#'+$opts.display).append(img);
			img.fadeIn($opts.speed, function() {
				window.setTimeout(function() {
					return nextImage();
				}, $opts.interval);
			});
		} else {
			window.setTimeout(function() {
				return activate();
			}, 100);
		}
	}
	
	function nextImage() {
		_current = _current+1;
		if (_current > _amount) _current = 0;		
		var img = $(new Image()).attr('src',_images[_current]['src']).css({position : 'absolute',display : 'none'});
		$('#'+$opts.display).append(img);
		img.fadeIn($opts.speed);
		$('img.gallery_active').fadeOut($opts.speed, function() {
			$('img.gallery_active').remove();
			img.addClass('gallery_active');
			window.setTimeout(function() {
				return nextImage();
			}, $opts.interval);
		});
	}
};
