jQuery.fn.VSlide = function(options){
	
	settings = jQuery.extend({
     delay: 5000, //interval between change
		 speed: 'slow', //speed of animation
		 show: 1 //number of visible slides
  }, options);

	var container = jQuery(this);
	var slides = container.children();
	
	if (slides.length < 1) {
		return this;	
	}
	
	settings.show = (settings.show > Math.floor(slides.length / 2))? Math.floor(slides.length / 2) : settings.show;
	settings.show = (settings.show == 0)? 1 : settings.show;
	
	var h = 0;
	var w = container.innerWidth();
	var borderLeft = parseInt(slides.css('borderLeftWidth').split('px')[0]) || 0;
	var borderRight = parseInt(slides.css('borderRightWidth').split('px')[0]) || 0;
	var paddingLeft = parseInt(slides.css('paddingLeft').split('px')[0]) || 0;
	var paddingRight = parseInt(slides.css('paddingRight').split('px')[0]) || 0;
	
	w -= (borderLeft + borderRight + paddingLeft + paddingRight);
	
	for (var i = 0; i<slides.length; i++){
		h = (jQuery(slides[i]).outerHeight(true) > h) ? jQuery(slides[i]).outerHeight(true) : h;
		jQuery(slides[i]).css('display', 'none');
		jQuery(slides[i]).css('position', 'absolute');
		jQuery(slides[i]).css('top', 0);
	}

	h *= settings.show;
	
	container.height(h);
	container.css('overflow', 'hidden');
	container.css('position', 'relative');
	
	slides.width(w);
	
	container.data('slides', slides);
	container.data('currentSlide', slides.length -1);
	container.data('delay', settings.delay);
	
	function goNext(o, speed, show){
		return function(){
		
			var h = o.height();	//get the height of the container
			var slides = o.data('slides'); //get the slides
			var currentSlide = o.data('currentSlide'); //get the current slide
			
			//calculate the next slide, wrapping to 0
			var nextSlide = (currentSlide + 1 >= slides.length)? 0 : currentSlide + 1;
			
			for (var i=0; i<show; i++){
				
				var nextSlideI = (nextSlide + i >= slides.length)? (nextSlide + i)-slides.length : nextSlide + i; //incoming slide index
				var currentSlideI = (currentSlide - i < 0)? slides.length + (currentSlide - (i)) : currentSlide - i; //outgoing slide index
				var hI = 0 + ((h/show) * i); //incoming slide destination
				
				jQuery(slides[currentSlideI]).animate({top:-(h + hI)}, speed); //outgoing slide animation
				//setup incoming slide for animation
				jQuery(slides[nextSlideI]).css('top', h + hI); 
				jQuery(slides[nextSlideI]).css('display', 'block');
				jQuery(slides[nextSlideI]).animate({top:hI}, speed); //incoming slide animation
			}
			
			o.data('currentSlide', nextSlideI);
		}
	}
	
	container.data('next', goNext(container, settings.speed, settings.show));
	container.data('timer', setInterval(container.data('next'), settings.delay));
	
	container.bind('mouseenter', function(event){
		var container = jQuery(this);	
		clearInterval(container.data('timer'));
		container.removeData('timer');
	});
	container.bind('mouseleave', function(event){
		var container = jQuery(this);
		container.data('timer', setInterval(container.data('next'), container.data('delay')));
	});
	
	container.data('next')();
	
	return this;
}