/*  Element functions borrowed and modified from http://www.garyharan.com/index.php/2007/11/26/how-to-unobtrusively-scroll-a-div-with-prototype-scriptaculous/ */

Element._returnOffset = function(l, t) {
  var result = [l, t];
  result.left = l;
  result.top = t;
  return result;
};

Element.addMethods({
  scrollTo: function(element, left, top){
    var element = $(element);
    if (arguments.length == 1){
      var pos = element.cumulativeOffset();
      window.scrollTo(pos[0], pos[1]);
    } else {
      element.scrollLeft = left;
      element.scrollTop  = top;
    }
    return element;
  }
});

Effect.Scroll = Class.create();
Object.extend(Object.extend(Effect.Scroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    this.start(Object.extend({x: 0, y: 0}, arguments[1] || {}));
  },
  setup: function() {
    var scrollOffsets = (this.element == window) 
                ? document.viewport.getScrollOffsets() 
                : Element._returnOffset(this.element.scrollLeft, this.element.scrollTop) ;
    this.originalScrollLeft = scrollOffsets.left;
    this.originalScrollTop  = scrollOffsets.top;
  },
  update: function(pos) {
    this.element.scrollTo(Math.round(this.options.x * pos + this.originalScrollLeft), Math.round(this.options.y * pos + this.originalScrollTop));
  }
});

/* Adjust these values to change smoothness / speed of scroller */
var deltaAmount = 7;
var durationAmount = 0.10;

/* These are set to 1 when user is moused-over the respective icons */
var mouseOverRight = 0;
var mouseOverLeft = 0;

Event.observe(window, 'load',
      function() { 
      
      if ( $("rightScroller") && $("leftScroller") ) {
      
          $("rightScroller").observe('mouseover', function() { 
            mouseOverRight = 1;
            scrollScrollerRight();
          });
          
          $("rightScroller").observe('mouseout', function() { 
            mouseOverRight = 0;
          });
          
          $("leftScroller").observe('mouseover', function() {
            mouseOverLeft = 1; 
            scrollScrollerLeft();
          });

          $("leftScroller").observe('mouseout', function() { 
            mouseOverLeft = 0;
          });
                
	   }

	   foreverScrolling();
       
      }
    );


function foreverScrolling() {

	// scroll back to the beginning
	var elements = $("thumbScroll").getElementsByTagName("div")[0].getElementsByTagName("span");
	var elementsActualWidth = elements.length * elements[0].clientWidth+15;
	if ( !mouseOverRight && !mouseOverLeft && ( $("thumbScroll").scrollLeft + $("thumbScroll").getWidth() ) >= elementsActualWidth ) {
		distance = $("thumbScroll").scrollLeft;
		new Effect.Scroll("thumbScroll", { x: -distance, duration: 1 });
		setTimeout("foreverScrolling()", 3000);
	} else if ( !mouseOverRight && !mouseOverLeft && $("thumbScroll").scrollLeft > -1 ) {
		if ( ( $("thumbScroll").scrollLeft + $("thumbScroll").getWidth() + 157 ) >= elementsActualWidth ) {
			distance = elementsActualWidth - ( $("thumbScroll").scrollLeft + $("thumbScroll").getWidth() ) + 12;
		} else {
			distance = 157;
		}
		new Effect.Scroll("thumbScroll", { x: distance, duration: 1 });
		setTimeout("foreverScrolling()", 3000);
	} else {
		setTimeout("foreverScrolling()", 10000);
	}
}

function scrollScrollerLeft ( )
{
    if ( mouseOverLeft && $("thumbScroll").scrollLeft > 0 )
    {
        var event = new Effect.Scroll("thumbScroll", { x: -deltaAmount, duration: durationAmount });
        setTimeout("scrollScrollerLeft()", (durationAmount*100)-5);
    }
}

function scrollScrollerRight ( )
{
    var elements = $("thumbScroll").getElementsByTagName("div")[0].getElementsByTagName("span");
    var elementsActualWidth = elements.length * elements[0].clientWidth+15;
    if ( mouseOverRight && ( $("thumbScroll").scrollLeft + $("thumbScroll").getWidth() ) < elementsActualWidth )
    {
        var event = new Effect.Scroll("thumbScroll", { x: deltaAmount, duration: durationAmount });
        setTimeout("scrollScrollerRight()", (durationAmount*100)-5);
    }
}
