$.fn.jSlideR = function(options) {

	var defaults = {
		delay: 2000,
		transitionLength: 250,
		nextButtonClassOrID: ".jslider_next",
		previousButtonClassOrID: ".jslider_previous",
		firstButtonClassOrID: ".jslider_first",
		lastButtonClassOrID: ".jslider_last",
		menuClassOrID: ".jsliderMenu",
		jumpButtonClass: ".jslider_jumpbutton"
	};
	var options = $.extend(defaults, options);

	return this.each(function() {
	
	var sliderMenu = $(options.menuClassOrID);
	var isAnimating = false;
	var sliderControl = $(this);
	var miniSliderTimeoutInstance;

		$('.jslider_slide', sliderControl).hide();
		var firstItem = $('.jslider_slide', sliderControl).first();
		firstItem.show().addClass("jslider_activeslide");
		
		$(options.jumpButtonClass, sliderMenu).eq(firstItem.index()).addClass("jslider_activetab");
		
		
		
		$(options.jumpButtonClass, sliderMenu).click(function()
		{
			VJump($(this).index());
		});
		
		setTimeout(autoSlideTransition, options.delay); 
	
	
		$(options.nextButtonClassOrID).click(function()
		{

			clearTimeout(miniSliderTimeoutInstance);
			if($('.jslider_activeslide', sliderControl).next('.jslider_slide', sliderControl).length==0)
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var nextSlide = $('.jslider_slide', sliderControl).first();
			}
			else
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var nextSlide = $('.jslider_activeslide', sliderControl).next('.jslider_slide', sliderControl);
			}
			
			slideTransition(currentSlide, nextSlide);
		});
	
		$(options.previousButtonClassOrID).click(function()
		{
			clearTimeout(miniSliderTimeoutInstance);
			if($('.jslider_activeslide', sliderControl).prev('.jslider_slide', sliderControl).length==0)
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var prevSlide = $('.jslider_slide', sliderControl).last();
			}
			else
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var prevSlide = $('.jslider_activeslide', sliderControl).prev('.jslider_slide', sliderControl);
			}
			
			slideTransition(currentSlide, prevSlide);
		});
		
		
		function VJump(x)
		{
			clearTimeout(miniSliderTimeoutInstance);
			var currentSlide = $('.jslider_activeslide', sliderControl);
			var nextSlide = $('.jslider_slide', sliderControl).eq(x-1);
			
			slideTransition(currentSlide, nextSlide);
		}

		function onPrevious_Click()
		{
			clearTimeout(miniSliderTimeoutInstance);
			if($('.jslider_activeslide', sliderControl).prev('.jslider_slide', sliderControl).length==0)
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var prevSlide = $('.jslider_slide', sliderControl).last();
			}
			else
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var prevSlide = $('.jslider_activeslide', sliderControl).prev('.jslider_slide', sliderControl);
			}
			
			slideTransition(currentSlide, prevSlide);
		}

		function setActiveTab(cur, next)
		{
			$(options.jumpButtonClass, sliderMenu).eq($(cur).index()).removeClass("jslider_activetab", sliderMenu);
			$(options.jumpButtonClass, sliderMenu).eq($(next).index()).addClass("jslider_activetab", sliderMenu);
		}

		function autoSlideTransition()
		{
			if($('.jslider_activeslide', sliderControl).next('.jslider_slide', sliderControl).length==0)
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var nextSlide = $('.jslider_slide', sliderControl).first();
			}
			else
			{
				var currentSlide = $('.jslider_activeslide', sliderControl);
				var nextSlide = $('.jslider_activeslide', sliderControl).next('.jslider_slide', sliderControl);
			}
			
			slideTransition(currentSlide, nextSlide, true);
		}


		function slideTransition(from, to, auto)
		{
			if(isAnimating)
				return;
			from.removeClass("jslider_activeslide", sliderControl);
			to.addClass("jslider_activeslide", sliderControl).hide();
			isAnimating = true;
			to.fadeIn(options.transitionLength, function()
			{
				from.hide();
				to.show();
				isAnimating = false;
				if(auto)
					miniSliderTimeoutInstance = setTimeout(autoSlideTransition, options.delay);
			});
			
			setActiveTab(from, to);
		}
	
	});
	

};




