(function($) {
	$.fn.slideshow = function(options) {
		var config = {
			interval: 4000,
			speed: "normal"
		};
		
		$.extend(config, options);
		
		this.each(function() {
			var elem = $(this);
			
			if (elem.children().length < 2)
				return false;
			
			elem.children(":gt(0)").hide();
			setInterval(function() {
				var first = elem.children().eq(0);
				var next = first.next();
				
				var speed = config["speed"];
				
				first.fadeOut(speed).appendTo(elem);
				next.fadeIn(speed);
				
				var following = next.next();
				
				if ((!following.attr("src") || following.attr("src") == "")
				&& following.data("meta"))
				{
					following.attr("src", following.data("meta")["href"]);
				}
				
			}, config["interval"]);
		});
		
		return this;
	};
	
	$.fn.appendImages = function(images) {
		var imagesLength = images.length;
		
		for (var i = 0; i < imagesLength; i++)
		{
			var data = images[i];
			
			var image = $("<img />")
				.attr("width", data["width"])
				.attr("height", data["height"])
				.attr("alt", data["title"])
				.data("meta", data)
				.hide()
				.appendTo(this);
			
			if (i < 2)
				image.attr("src", data["href"]);
			
			if (i == 0)
				image.show();
		}
		
		return this;
	};
	
	$.getGalleryXml = function(url, callback) {
		$.ajax({
			type: "GET",
			url: url,
			dataType: "xml",
			success: function(xml) {
				var images = parseXml(xml);
				if (callback)
					callback(images);
			}
		});

		function parseXml(xml)
		{
			var gallery = $(xml).children().eq(0);
			
			var images = [];
			var imagesLength = 0;
			
			var base = gallery.attr("base");
			
			gallery.find("image").each(function() {
				var img = $(this);
				images[imagesLength] = {
					href: base + img.attr("href"),
					width: img.attr("width"),
					height: img.attr("height"),
					title: img.attr("title"),
					desc: img.attr("desc")
				};
				imagesLength++;
			});
			
			return images;
		}
	};
})(jQuery);
