function gforcesArrowScroller() {
	
	/******************************************************************
	*  Configuration
	******************************************************************/
	
	var mainSlider, locationSlider, sliderEffect;
	var leftSlide 		= 960;
	var rightSlide 		= 960;
	var slideBuffer 	= 999;  		//  Number of slides to have at the beginning and end of the slider before moving the ends
	var slideScrollX	= 960;
	var locOffsetX		= 5;
	var locScrollX		= 24;
	var loopSlides		= true;		//  Do we want to loop the slides?
	
	/******************************************************************
	*  Setup, element referencing and calculations
	******************************************************************/
	
	var getSlides = function () {					//  Function to get the slides (easier in case of layout changes
		return $$( 'li.scrollerItem' );
	}
	
	var $slides			= getSlides();				//  Slides as-is currently
	var numSlides   	= $slides.length;			//  Number of slides
	var currentIndex 	= 1;						//  Our current RELATIVE position in the stack of slides
	var slideIndex 		= 1;						//  Our current ABSOLUTE position in the stack of slides
	
	$slideList = $slides[0].up( 'ul' );				//  <ul> containing the <li> slides
		
	mainSlider 		= $('sliderContainer');			//  Main slider being slid
	
	
	/******************************************************************
	*  Functions
	******************************************************************/
	
	//  This function copies the end slide to the start when doing lots of left-sliding
	var moveEndSlideToStart = function () {
		if ( ( !loopSlides ) || ( currentIndex >= slideBuffer ) ) {		//  Not near the start so do nothing
			return;
		}

		$slideList.insert({top: getSlides().last()});	//  Copy to start

		//  After copying, the offset changes to this allows for that so the sliding appears smooth
		mainSlider.setStyle({
			'left': ( mainSlider.positionedOffset()[0] - slideScrollX ) + 'px'
		});
		
		currentIndex++;
	}
	
	
	//  This function copies the start slide to the end when doing lots of right-sliding
	var moveStartSlideToEnd = function () {
	
		if ( ( !loopSlides ) || ( ( $slides.length - currentIndex - 1 ) > slideBuffer ) ) {			//  Not near the end so do nothing
			return;
		}
		
		$slideList.insert({bottom: getSlides()[0]});	//  Copy to start

		//  After copying, the offset changes to this allows for that so the sliding appears smooth
		// IE doesnt calculate the positioned offset correctly so this has to be hardcoded
		mainSlider.setStyle({
			//'left': ( mainSlider.positionedOffset()[0] + slideScrollX ) + 'px'
			'left': ( -1920 + slideScrollX ) + 'px'
		});

		currentIndex--;
	}
	
	
	
	var findNext = function (obj) {
		results = obj.element.getElementsByTagName('li');
		
		for (k=0; k < results.length; k++) {
			if (k == 2) { // 3rd item in the list (the next one sliding in)
				closeLargeBgs(results[k].id);
			}
		}
	}
	
	var findPrev = function (obj) {
		results = obj.element.getElementsByTagName('li');
		
		for (k=0; k < results.length; k++) {
			if (k == 0) { // 1st item in the list (the next one sliding in)
				closeLargeBgs(results[k].id);
			}
		}
	}
	
	function closeLargeBgs(spanToOpen) {
		spanList = $('adOverlay').getElementsByTagName('div');
		for (i=0; i < spanList.length; i++) {
			if (spanList[i].className == spanToOpen) {
				//spanList[i].style.display = 'block';
				if (! $(spanList[i]).visible()) {
					//alert(spanList[i]);					
					Effect.Appear($(spanList[i]), {
						duration: 1
					} );
				}				
			} else {				
				if ($(spanList[i]).visible()) {
					//spanList[i].style.display = 'none';					
					Effect.Fade($(spanList[i]), {
						duration: 1
					} );
				}
			}
		}
	}
	
	
	
	
	//  Function to do the left-sliding
	var doSlideLeft = function () {
		if (sliderEffect == null || sliderEffect.state == "finished") {
            if ( $('sliderContainer').offsetLeft < 0 ) {
                currentIndex--;
                slideIndex--;
                
			    sliderEffect = new Effect.Move(mainSlider, {
					duration: 1,
			    	x: slideScrollX,
			    	y: 0,
			    	mode: 'relative',
	    			beforeStart: findPrev,
			    	afterFinish: moveEndSlideToStart		//  Do this BEFORE we slide so it's there before we slide
			    });
            }
		}
	}
	
	//  Function to do the right-sliding
	var doSlideRight = function () {
		if (sliderEffect == null || sliderEffect.state == "finished") {
		
			if ( ( !loopSlides ) && ( currentIndex == ( numSlides - 1 ) ) ) {
				return;
			}
       	  
            currentIndex++;
            slideIndex++;
            
			sliderEffect = new Effect.Move(mainSlider, {
				duration: 1,
				x: -slideScrollX,
				y: 0,
				mode: 'relative',
    			beforeStart: findNext,
				afterFinish: moveStartSlideToEnd		//  Do this AFTER we slide so it's doesn't disappear immediately
			});
		}
	}

	/******************************************************************
	*  Button setup
	******************************************************************/
	$$('#leftHand a.left').invoke( 'observe', 'click', doSlideLeft );
	$$('#rightHand a.right').invoke( 'observe', 'click', doSlideRight );

	/******************************************************************
	 * Auto scroll only when mouse is not over banner
	 ******************************************************************/
	var mouseOverBanner = false;
	$('sliderContainerOuter').observe('mouseover', function(event) {		
		mouseOverBanner = true;
	});
	$('sliderContainerOuter').observe('mouseout', function(event) {		
		mouseOverBanner = false;
	});

	var autoScroll = function autoScroll() {
		if ( mouseOverBanner == false ) {
			doSlideRight();
		}
	}

	setInterval(autoScroll, 3000);


}

