/**
 * @author mthornton, jquery ninja
 */
		(function($){
			jQuery.fn.vscrollerMT = function(options) {
				var defaults = {
					/*---------------------------------
					*scrollerCSS controls css for our container box
					*scrollMessage includes/excludes starting instructional message
					*scrollSpeed is how fast the scrolling is, obviously
					---------------------------------*/

					scrollerCSS : {
						overflow: 'hidden',
						position: 'relative',
						height: '339px',
						width: '202px',
						margin: '20px 15px'
					},
					scrollMessage : false,
					scrollSpeed : 1000
				};
				
				var settings = $.extend({}, defaults, options); //merges the options and defaults (options takes precedence) into one variable, settings, that stores our objects
				
				return this.each(function(){
					var $this = $(this);
					var domThis = $this.get(0);
					/*---------------------------------
					*SETUP FOR:
					*	GLOBAL VARIABLES
					*	CONTAINER CSS
					*	INSTRUCTIONAL MESSAGE
					*	LAST-CHILD ELEMENT
					*	NAVIGATIONAL CONTROLS
					---------------------------------*/

					var scrolling = 0; //used to determine if we are already sliding the panel
					var scrollDistance = settings.scrollerCSS.height.split("px")[0] -25; //slides the height of the container minus a set ammount to allow users to still see a reference element at the top or bottom for reading purposes

					$this.css(settings.scrollerCSS); //sets up css for container element

					if (settings.scrollMessage) {
						//displays the instructional message if settings.scrollMessage is set to true
						$('<div id="scrollMessage" style="background: yellow; display: none;">You may use the scroll wheel to view the text below.</div>').prependTo($this);
						//adds the scrollMessage div to the container div
						$('#scrollMessage').slideDown(600);
						$('#scrollMessage').mouseover( function(){
							$(this).slideUp(300);
						});
						//animates it in and out
					}
					
					/*---------------------------------
					*creates a new last-child element, very important to keep this as the scroller won't scroll
					*all of the way down sometimes if the real last-child is long, such as a 20 sentence paragraph.
					*this allows for proper calculation of the real bottom of the container's content
					---------------------------------*/
					$('<br />').appendTo($this);
				
					//creation and positioning of control box, calculations based on dimensions and positioning of container
					/*var controlTop = $this.offset().top + parseInt(settings.scrollerCSS.height) + (parseInt(settings.scrollerCSS.padding) * 2);
					controlTop += "px";
					var controlLeft = $this.offset().left;
					controlLeft += "px";
					var scrollerControlCSS = {
						position: 'absolute',
						top: controlTop,
						left: controlLeft,
						width: settings.scrollerCSS.width,
						height: settings.scrollerCSS.marginBottom,
						padding: settings.scrollerCSS.padding
					}
				    	var $scrollerControl = $('<div style="' + scrollerControlCSS +'"></div>');
					$scrollerControl.css(scrollerControlCSS);
					$('<a class="up" href="javascript();">Up</a><a class="down" href="javascript();">Down</a>').appendTo($scrollerControl);
					$scrollerControl.appendTo('body');*/
				    
					/*---------------------------------
					*SETUP FOR:
					*	EVENT LISTENERS FOR SCROLLWHEEL AND CONTROL BOX
					---------------------------------*/

					$this.bind('mousewheel', function(e,delta){
				    		var dir = delta > 0 ? 'Up' : 'Down';
					    	var scrollTest = isScrolling();
					    	if(dir === 'Up'){
					    		if(scrollTest !== 1) {
						    		scrollUp();
						    	}
				    		}
					    	else {
					    		if(scrollTest !== 1) {
						    		scrollDown();
						    	}
					    	}
				    		return false;
					});
				    
					$('.up')
						.click( function(){
					    		var scrollTest = isScrolling();
						    	if(scrollTest !== 1){
			    			    		scrollUp();
	    					    }
								
								return false;
						});
				    
					$('.down')
						.click( function(){
						    	var scrollTest = isScrolling();
						    	if(scrollTest !== 1){
							    	scrollDown() 
							}
							
							return false;
						});
				    	

					/*---------------------------------
					*SETUP FOR:
					*	HELPER FUNCTIONS WHICH PERFORM ACTUAL SLIDING AND CHECK TO SEE IF CURRENTLY SLIDING
					---------------------------------*/
					function scrollUp(){
				    	var divOffset = domThis.offsetTop;
						var firstOffset = domThis.firstChild.offsetTop;
   						var offset = firstOffset - divOffset;
					    	if(offset<0) {
					    		$this.animate({scrollTop: '-=' + scrollDistance + 'px'}, settings.scrollSpeed, "linear", function(){
						    		scrolling = false;
					    		});
					    	}
					    	else {
					    		scrolling = false;
					    	}
					}
				    
					function scrollDown(){
						var divOffset = domThis.offsetTop;
						var lastOffset = domThis.lastChild.offsetTop;
						var offset = lastOffset - divOffset;
							if(offset>0) {
				    			$this.animate({scrollTop: '+=' + scrollDistance + 'px'}, settings.scrollSpeed, "linear", function(){
				    				scrolling = false;
				    			});
				    		}
					    	else {
					    		scrolling = false;
					    	}				    	
					}
				    
				    	function isScrolling(){
				    		var scroll;
					    	if (scrolling === true){
					    		scroll = 1;
					    	}
					    	else {
					    		scroll = 0;
				    			scrolling = true;
					    	}
					    	return scroll;
					}
				});//END THIS.EACH FUNCTION
			};//END jQuery.fn.vscrollerMT FUNCTION
		})(jQuery);