(function($){

$.fn.imageSwap = function(options){
	var settings = jQuery.extend({
	image: ''
	}, options);
		
	var __rotateImage = function(element, image){
		element = $(element);
		element.fadeOut("slow", function(){
			element
				.attr({src: image})
				.fadeIn("slow");
		});
	};
	
	return this.each(function(){
		__rotateImage(this, settings.image);
	});
};

$.fn.imageRotator = function(options){
	var settings = jQuery.extend({
	speed: 5000,
	currentImage: 0,
	images: [],
	elements: this
	}, options);
	
	var __rotateImages = function(element, image, settings){
		setTimeout(function(){
			$(element).imageSwap({image: image});
			settings.elements.imageRotator(settings);
		}
		, settings.speed);
	}
	
	return this.each(function(){
		settings.currentImage++;
		if(settings.currentImage == settings.images.length) settings.currentImage = 0;
		__rotateImages($(this), settings.images[settings.currentImage], settings);
	});
};

$.fn.contentSwap = function(options){
	var settings = jQuery.extend({
	content: '',
	contentType: 'text'
	}, options);
		
	var __rotateContent = function(element, contentType, content){
		element = $(element);
		switch(contentType){
			case "html":
				element.fadeOut("fast", function(){
					element
						.html(content)
						.fadeIn("slow");
				});
				break;
			default:
				element.fadeOut("fast", function(){
					element
						.text(content)
						.fadeIn("slow");
				});
				break;
		}
	};
	
	return this.each(function(){
		__rotateContent(this, settings.contentType, settings.content);
	});
};

$.fn.contentRotator = function(options){
	var settings = jQuery.extend({
	speed: 5000,
	currentContent: 0,
	contentType: 'text',
	contents: [],
	elements: this
	}, options);
	
	var __rotateContents = function(element, contentType, content, settings){
		setTimeout(function(){
			$(element).contentSwap({contentType: contentType, content: content});
			settings.elements.contentRotator(settings);
		}
		, settings.speed);
	}
	
	return this.each(function(){
		settings.currentContent++;
		if(settings.currentContent == settings.contents.length) settings.currentContent = 0;
		__rotateContents($(this), settings.contentType, settings.contents[settings.currentContent], settings);
	});
};

})(jQuery);