(function($) {

			var current = 0;
			var maxLength = 0;
			var objSliderWidth = 0;
			var objSliderImage = new Object();
			var objSliderButton = new Object();
			var myTimer;
			var carouselNumber = 0;
			var carLength = 0;
			var currentInCar = true;
			var direction = '';
			var thumbsPerCar = 0;
			var actualThumbsPerCar = 0;
			var thumbspacing = 0;
			var carouselWidth = 0;
			var spaceRemainder = 0;
			var currentSlide = 0;
			var liRemainder = 0;
			var thumbSpacingR = 0;
			
			$.fn.sdSlider = function(options) {

			// Configuration Options
			var defaults = {
				sliderWidth:	500,
				auto:			false,
				singleNav:		false,
				showThumbs:		false,
				thumbHeight:	70,
				thumbWidth: 	70				
			};
				
			var options = $.extend(defaults, options);
				
				carouselWidth = (options.sliderWidth-70); // adjusts the carousel width to make room for carousel navigation
				spaceRemainder = carouselWidth%(options.thumbWidth+4);
				thumbsPerCar = Math.floor(carouselWidth/options.thumbWidth);  // determine (preemptively) how many thumbs there will be per carousel
				thumbSpacingR = Math.floor((spaceRemainder/thumbsPerCar)/2); // determine the spacing for the thumbnails
				thumbSpacingL = Math.ceil((spaceRemainder/thumbsPerCar)/2); // determine the spacing for the thumbnails
				actualThumbsPerCar = Math.floor(carouselWidth/(options.thumbWidth+(thumbSpacingL+thumbSpacingR)));  // definitive number of thumbs per carousel
				maxLength = $('ul#the_slides li').length; // total number of slides
				carLength = Math.ceil(maxLength/actualThumbsPerCar); // total number of carousels needed
					liRemainder = carouselWidth-(actualThumbsPerCar*((thumbSpacingL+thumbSpacingR)+(options.thumbWidth+4)));  // some math to adjust for the leftover padding in each carousel
					carouselAdjust = liRemainder+thumbSpacingL; // more math
				
					var thumbSlideCSS = {
						'margin-left' : thumbSpacingL,
						'margin-right' : thumbSpacingR,
						'float' : 'left',
						'height' : options.thumbHeight,
						'width' : options.thumbWidth,
						'overflow' : 'hidden'
					};
					$("ul#thumb_slide li.thumber").css(thumbSlideCSS);
					$("ul#thumb_slide li:nth-child("+actualThumbsPerCar+"n)").css("margin-right",""+carouselAdjust+"px"); // adds a margin to the last thumbnail in each carousel so they'll be even.

				
				var slideCSS = {
					'width' : options.sliderWidth,
					'height' : options.sliderHeight,
					'overflow' : 'hidden'
					};
				var carouselCSS = {
					'width' : carouselWidth,
					'height' : (options.thumbHeight+10),  // add 10 to give it some room to breathe. We gave it a margin of 20 in the CSS so we've got the space.
					'overflow' : 'hidden'
					};		

				$("div#slider").css(slideCSS);
				$("ul#the_slides li").css("float","left");
				$("#slides_menu").css(carouselCSS);
				$("#thumb-outer-wrapper").css('height', (options.thumbHeight+15));
				
				$("ul#thumb_slide li:first-child").addClass("active");
				showNav();
				if(maxLength > 1) {
					$("span#nextBtn").css('visibility', 'visible');
				}
				carNav();
				$("div.slider-single-nav").attr("rel","up");

				if(carLength > 1) { $("span#carousel-right").css('visibility', 'visible'); }
				objSliderWidth = $('ul#the_slides').width();
				objSliderImage = $("ul#the_slides li.the_slide");
				objSliderButton = $("ul#thumb_slide li.thumber");
				objThumbWidth = $('ul#thumb_slide').width();
				objCarousel = $('div#thumb-page-nav');
				objSingleLeft = $('span#prevBtn');
				objSingleRight = $('span#nextBtn');
				objCarouselLeft = $('span#carousel-left');
				objCarouselRight = $('span#carousel-right');
				$("span#current_slide").html("1");
				$("span#total_slides").html(""+maxLength+"");
				
				$("ul#thumb_slide").css('width',maxLength*objThumbWidth);			
				$("ul#the_slides").css('width',maxLength*objSliderWidth);			
				
				objSliderButton.click(function(){
					currentSlide = current+1;
					$("span#current_slide").html(""+currentSlide+"");
					current = objSliderButton.index(this);
					sliderAction(current);
					window.clearInterval(myTimer); //Stop the rotation
					sliderSwitch();
				});
				
				sliderAction = function(){
					currentSlide = current+1;
					$("span#current_slide").html(""+currentSlide+"");
					objSliderImage.animate({left:-objSliderWidth * current});
					objSliderButton.removeClass('active');
					objSliderButton.eq(current).addClass('active');
					$("div.slider-single-nav").attr("rel","up"); // reset direction for auto
					showNav();
				}
				
				thumbAction = function(){
					objSliderButton.removeClass('active');
					objSliderButton.eq(current).addClass('active');
				}				
				
				if(options.singleNav) {
					objSingleLeft.click(function() {
						current--;
						currentSlide = current+1;
						$("span#current_slide").html(""+currentSlide+"");						
						$("div.slider-single-nav").attr("rel","down");
						thumbAction(current);
						leftMove = (options.sliderWidth*current);
						objSliderImage.animate({left:-leftMove});
						showNav();
						checkCar();
						window.clearInterval(myTimer); //Stop the rotation
						sliderSwitch();
					});
					
					objSingleRight.click(function() {
						current++;
						currentSlide = current+1;
						$("span#current_slide").html(""+currentSlide+"");						
						$("div.slider-single-nav").attr("rel","up");
						thumbAction(current);
						theMove = (options.sliderWidth*current*-1);
						objSliderImage.animate({left:theMove});
						showNav();
						checkCar();
						window.clearInterval(myTimer); //Stop the rotation
						sliderSwitch();
			//	$("ul#thumb_slide").addClass(''+maxLength+''); // troubleshooter
						
					});
				}
				
				function showNav() {
					if(options.singleNav == true) {
						if(current > 0) {
							$("span#prevBtn").css('visibility', 'visible');
						} else {
							$("span#prevBtn").css('visibility', 'hidden');
						}
						
						if(current >= (maxLength-1)) {
							$("span#nextBtn").css('visibility', 'hidden');
						} else {
							$("span#nextBtn").css('visibility', 'visible');
						}
					} else {
						$("span#nextBtn").css('visibility', 'hidden');
						$("span#prevBtn").css('visibility', 'hidden');
					}
				}
				
				objCarouselLeft.click(function() {
					carouselNumber--;
					carMove = (carouselWidth*carouselNumber);
					objCarousel.animate({left:-carMove});
					carNav();
					current = Math.floor(carouselNumber*5);
					sliderAction(current);
					window.clearInterval(myTimer); //Stop the rotation
					sliderSwitch();						
				});
				
				objCarouselRight.click(function() {
					carouselNumber++;
					carMoveRight = (carouselWidth*carouselNumber*-1);
					objCarousel.animate({left:carMoveRight});
					carNav();
					current = Math.floor(carouselNumber*5);
					sliderAction(current);
					window.clearInterval(myTimer); //Stop the rotation
					sliderSwitch();					
				});
					
				function carNav() {
					if(maxLength > actualThumbsPerCar) {
						if(carouselNumber > 0) {
							$("span#carousel-left").css('visibility', 'visible');
						} else {
							$("span#carousel-left").css('visibility', 'hidden');
						}
						
						if(carouselNumber >= (carLength-1)) {
							$("span#carousel-right").css('visibility', 'hidden');
						} else {
							$("span#carousel-right").css('visibility', 'visible');
						}
					} else {
						$("span#carousel-right").css('visibility', 'hidden');
						$("span#carousel-left").css('visibility', 'hidden');
					}
				}
				
				function checkCar() {
					direction = $("div.slider-single-nav").attr("rel");
					if(current > (maxLength -1)){
						current = 0;
						objCarousel.animate({left:0});
						carouselNumber = 0;
					} else if(direction == 'up' && current % 5 == 0 && current != 0) {	
						carouselNumber++;
						carMoveRight = (carouselWidth*carouselNumber*-1);
						objCarousel.animate({left:carMoveRight});
						current = Math.floor(carouselNumber*5);
					} else if(direction == 'down' && (current+1) % 5 == 0) {
						carouselNumber--;
						carMove = (carouselWidth*carouselNumber);
						objCarousel.animate({left:-carMove});
						current = Math.floor((carouselNumber*5)+4);
					}
					carNav();
				}
				
				
				sliderSwitch = function(){
					if(options.auto) {
						myTimer = setInterval(function(){
							current++;
							checkCar();
							sliderAction();
						},10000);
					} else {
						checkCar();
						sliderAction();
					}
				}
				sliderSwitch();
				
			};
})(jQuery);			
