(function($){
$.fn.slideshow = function(options) {
	
	var settings = jQuery.extend({
		slides     : this.selector
	,	slide      : '.slide'
	,	slidenav   : '#slidenav'
	,	nextbutton : '#nextslide'
	,	prevbutton : '#prevslide'
	,	duration   : 6000
	,	speed      : 400
	,	style      : 'fade'
	}, options);
	
	jQuery.fn.reverse = [].reverse;
	
//  PREP SLIDE NAV  //////////
	
	function applycounter(tothis){
		var counter = 1
		$(tothis).each(function(){
			$(this).attr('data-counter', counter);
			counter++;
		}).removeClass('current').first().addClass('current');
	}
	applycounter(settings.slides + ' '+settings.slide);
	if (settings.style == 'fade') { $(settings.slides + ' '+settings.slide+':not(.current)').hide() }
	applycounter(settings.slidenav+' a');
	
//  BACK AND FORTH  //////////
	
	function forward() {
		
		var currentslide = $(settings.slides + ' ' + settings.slide+'.current');
		var nextslide = $(settings.slides + ' ' + settings.slide+'.current').next();
		
		switch (settings.style) {
		case 'push' :
			
			var slidewidth = currentslide.width();
			currentslide.animate({ 'margin-left': '-' + slidewidth }, settings.speed, function () {
				$(this).css('margin-left', '0px').removeClass('current').next().addClass('current').end().appendTo(settings.slides);
			});
			
		break;
		case 'fade' :
			
			currentslide.fadeOut(settings.speed/2, function(){
				$(this).removeClass('current').next().fadeIn(settings.speed/2).addClass('current').end().appendTo(settings.slides);
			});
			
		break;
		} // switch
		
		$(settings.slidenav+' a').removeClass('current');
		$(settings.slidenav+' a[data-counter='+nextslide.attr('data-counter')+']').addClass('current');
		
	} // forward()
	
	function backward() {
		
		var currentslide = $(settings.slides + ' ' + settings.slide+'.current');
		var prevslide = $(settings.slides + ' ' + settings.slide+':last-child');
		
		switch (settings.style) {
		case 'push' :
			
			var slidewidth = prevslide.width();
			prevslide.css('margin-left', '-' + slidewidth + 'px').prependTo(settings.slides).animate({ 'margin-left': '0px' }, settings.speed, function () {
				$(this).addClass('current').next().removeClass('current');
			});
			
		break;
		case 'fade' :
			
			currentslide.fadeOut(settings.speed/2, function(){
				$(this).removeClass('current');
				prevslide.prependTo(settings.slides).addClass('current').fadeIn(settings.speed/2)
			});
			
		break;
		} // switch
		
		$(settings.slidenav+' a').removeClass('current');
		$(settings.slidenav+' a[data-counter='+prevslide.attr('data-counter')+']').addClass('current');
		
	} // backward()
	
//  START SLIDESHOW  //////////
	
	var slideshowID = setInterval(forward, settings.duration);
	
//  PREVIOUS AND NEXT BUTTONS  //////////
	
	$(settings.nextbutton).click(function () {
		if (!$(settings.slides + ' *').is(':animated')) {
			clearInterval(slideshowID);
			forward();
			slideshowID = setInterval(forward, settings.duration);
		}
		return false;
	});
	$(settings.prevbutton).click(function () {
		if (!$(settings.slides + ' *').is(':animated')) {
			clearInterval(slideshowID);
			backward();
			slideshowID = setInterval(forward, settings.duration);
		}
		return false;
	});
	
}; // slideshow
})( jQuery );

