(function($){
	
	function slider(){
		
		function Animate(){
			var speed = 1500;
			
			function show($element){
				$element.fadeIn(speed);
			}
			
			function hide($element){
				$element.fadeOut(speed);
			}

			return {
				show: show,
				hide: hide
			};
		}

		function Controller(animate, $viewport){
			var $elements = $viewport.children(),
				currentId = 0;
			
			var slideshowTimer;

			//$elements.filter(':gt(' + currentId + ')').hide();

			function change(toId){
				animate.hide($elements.eq(currentId));
				currentId = toId;
				animate.show($elements.eq(currentId));
				
			}
			
			function next(){
				if (currentId + 1 >= $elements.length) {
					change(0);
				} else {
					change(currentId + 1);
				}
			}
			
			function slideshow(delay){
				clearTimeout(slideshowTimer);
				slideshowTimer = setInterval(function(){
					next();
				}, delay)
			}

			$elements.css({
				position: 'absolute',
				left: 0,
				top: 0
			}).hide();
			
			$(window).load(function(){
				animate.show($elements.first());
				slideshow(6000);
			});
			
		}
		
		var $viewport = this;
		
		var controller = new Controller(
			new Animate(),
			$viewport
		);
	}
	
	$.fn.slider = slider;
	
})(jQuery);
