(function ($) {

	var inFlight = false,
		currentSlide = 0,
		totalSlides,
		slideWidth;

	var _settings = {
		'key_nav'     : true,					// Allow keyboard navigation
		'slide'       : '.slide',				// Individual slide classes
		'next_button' : '.slider_next',			// Next button classes
		'back_button' : '.slider_back',			// Back button classes
		'restart'	  : '.restart_slide',		// Restart button class
		'speed'       : 700,					// Slider speed
		'easing'      : 'swing',				// Animation easing style
		'repeat'      : true,					// Loop back to first slide if next is clicked on last slide
		'skip'        : 1						// Move this many slides each time
	};

	var $nextButton, $backButton, $container, $slides;

	$.fn.slider = function (settings) {

		if(typeof settings === 'object') {
			$.extend(_settings, settings);
		}

		$reel       = $(this);
		$nextButton = $(_settings['next_button']);
		$backButton = $(_settings['back_button']);
		$restartBtn = $(_settings['restart']);
		$slides     = $(_settings['slide']);
		$document   = $(document);

		totalSlides = $slides.length;
		slideWidth = $slides.width();

		attachBinds();
	};

	function attachBinds() {
		$nextButton.bind('click', function (e) {
			nextSlide();
			e.preventDefault();
		});

		$backButton.bind('click', function (e) {
			previousSlide();
			e.preventDefault();
		});
		
		$restartBtn.bind('click', function (e) {
			restart();
			e.preventDefault();
		});
		
		if(_settings['key_nav']) {
			$reel.hover(function () {
				$document.bind('keydown', keyNav);
			}, function () {
				$document.unbind('keydown', keyNav);
			});
		}
	}

	function keyNav(e) {
		if(e.keyCode === 39) {
			nextSlide();
		}
		switch(e.keyCode) {
			case 37:
				$backButton.trigger('click');
			break;

			case 39:
				$nextButton.trigger('click');
			break;
		}
	}

	function nextSlide() {
		if(inFlight) {
			return false;
		}

		if(_settings['repeat'] && currentSlide >= totalSlides -1 ) {
			restart();
			return;
		}

		currentSlide = currentSlide + 1;

		var offset = slideWidth * (currentSlide * _settings['skip']);

		inFlight = true;

		$reel.animate({ left : '-' + offset + 'px' }, _settings['speed'], _settings['easing'], function() {
			inFlight = false;
		});
	}

	function previousSlide() {
		if(inFlight) {
			return false;
		}

		if(_settings['repeat'] && currentSlide == 0) {
			lastSlide();
			return false;
		}

		currentSlide = currentSlide - 1;

		var offset = slideWidth * (currentSlide * _settings['skip']);

		inFlight = true;

		$reel.animate({ left: '-' + offset + 'px' },  _settings['speed'], _settings['easing'], function() {
			inFlight = false;
		});
	}

	function lastSlide() {
		if(inFlight) {
			return false;
		}

		currentSlide = totalSlides - 1;
		inFlight = true;

		var offset = slideWidth * ((totalSlides * _settings['skip']) - _settings['skip']);

		$reel.animate({ left: '-' + offset + 'px' }, _settings['speed'], _settings['easing'], function() {
			inFlight = false;
		});
	}

	function restart() {
		currentSlide = 0;
		inFlight = true;

		$reel.animate({ left: '0px' }, _settings['speed'], _settings['easing'], function() {
			inFlight = false;
		});
	}

})(jQuery);

// 
// (function () {
// 
// 	var slider = SFL.Slider = function () {
// 
// 		var pub = {};
// 
// 		var inFlight = false,
// 			currentSlide = 0,
// 			totalSlides,
// 			slideWidth;
// 			
// 		var _settings = {
// 			'reel'         : '#slide-reel',			// Wrapper for the slides
// 			'slide'        : '.slide',				// Individual slide classes
// 			'next_button' : '.tour_next',			// Next button classes
// 			'back_button' : '.tour_back',			// Back button classes
// 			'speed'       : 700,					// Slider speed
// 			'easing'      : 'swing',				// Animation easing style
// 			'repeat'      : true,					// Loop back to first slide if next is clicked on last slide
// 			'skip'        : 1						// Move this many slides each time
// 		};
// 
// 		var $nextButton, $backButton, $container, $slides;
// 
// 		pub.init = function (override) {
// 			if(typeof override === 'object') {
// 				$.extend(_settings, override);
// 			};
// 
// 			$nextButton = $(_settings['next_button']);
// 			$backButton = $(_settings['back_button']);
// 			$reel       = $(_settings['reel']);
// 			$slides     = $(_settings['slide']);
// 
// 			totalSlides = $slides.length;
// 			slideWidth = $slides.width();
// 
// 			attachBinds();	
// 		};
// 
// 		function attachBinds() {
// 			$(_settings['next_button']).bind('click', function (e) {
// 				nextSlide();
// 				e.preventDefault();
// 			});
// 
// 			$(_settings['back_button']).bind('click', function (e) {
// 				previousSlide();
// 				e.preventDefault();
// 			});
// 		};
// 
// 		function nextSlide() {
// 			if(inFlight) {
// 				return false;
// 			};
// 
// 			if(_settings['repeat'] && currentSlide >= totalSlides -1 ) {
// 				restart();
// 				return;
// 			};
// 
// 			currentSlide = currentSlide + 1;
// 
// 			var offset = slideWidth * (currentSlide * _settings['skip']);
// 
// 			inFlight = true;
// 
// 			$reel.animate({ left : '-' + offset + 'px' }, _settings['speed'], _settings['easing'], function() {
// 				inFlight = false;
// 			});
// 		};
// 
// 		function previousSlide() {
// 			if(inFlight) {
// 				return false;
// 			}
// 
// 			if(_settings['repeat'] && currentSlide == 0) {
// 				lastSlide();
// 				return false;
// 			};
// 
// 			currentSlide = currentSlide - 1;
// 
// 			var offset = slideWidth * (currentSlide * _settings['skip']);
// 
// 			inFlight = true;
// 
// 			$reel.animate({ left: '-' + offset + 'px' },  _settings['speed'], _settings['easing'], function() {
// 				inFlight = false;
// 			});
// 		};
// 
// 		function lastSlide() {
// 			if(inFlight) {
// 				return false;
// 			};
// 
// 			currentSlide = totalSlides;
// 			inMotion = true;
// 
// 			var offset = slideWidth * ((totalSlides * _settings['skip']) - _settings['skip']);
// 
// 			$reel.animate({ left: '-' + offset + 'px' }, _settings['speed'], _settings['easing'], function() {
// 				inFlight = false;
// 			});
// 		};
// 
// 		function restart() {
// 			currentSlide = 0;
// 			inFlight = true;
// 
// 			$reel.animate({ left: '0px' }, _settings['speed'], _settings['easing'], function() {
// 				inFlight = false;
// 			});
// 		};
// 
// 		return pub;
// 
// 	}();
// 
// })();

