/**
 * Object PhotoScroll
 * 
 * @author Peter Riet
 * @copyright Serve it V.O.F. 2006
 */
function cPhotoScroll() {
	var _self = this;
	this.divPhotos;

	this.intPosition = 0;
	this.intPositionMin = 0;
	this.intPositionMax = 0;
	this.intPhotoVisibleRestWidth = 0;
	
	this.intPhotoCount = 0;
	this.intPhotoWidth = 0;
	this.intPhotosVisible = 0;
	this.intScrollSpeed = 0;
	this.intScrollSpeedMax = 0;
	this.intScrollSpeedFastForwardMax = 0;
	this.intStopSpeed = 0;
	this.intStartSpeed = 0;
	
	this.blnStopScrolling = false;
	this.blnFastForward = false;
	
	/**
	 * Scrollt de balk
	 * 
	 * @access private
	 */
	this.scroll = function() {
		_self.divPhotos.style.marginLeft = (_self.intPosition * -1) + "px";
	}
	
	/**
	 * Controleert de maximale scroll naar links, corrigeert indien te ver
	 * 
	 * @access private
	 */
	this.checkLeftScroll = function() {
		// Controleer of nieuwe positie te ver is
		if (_self.intPosition < _self.intPositionMin) {
			var intTeveel = _self.intPositionMin - _self.intPosition;
			_self.intPosition += intTeveel;
		}
	}
	
	/**
	 * Controleert de maximale scroll naar rechts, corrigeert indien te ver
	 * 
	 * @access private
	 */
	this.checkRightScroll = function() {
		// Controleer of nieuwe positie te ver is
		if (_self.intPosition > _self.intPositionMax) {
			var intTeveel = _self.intPositionMax - _self.intPosition;
			_self.intPosition += intTeveel;
		}
	}
	
	/**
	 * Initialiseert de fotobalk
	 *  
	 * @access public
	 */
	_self.init = function() {
		_self.divPhotos = document.getElementById("divPhotoScroll");
		if (!_self.divPhotos) alert("div not found!");
		
		_self.intPhotoWidth = 113;
		_self.intPhotosVisible = 6;
		_self.intPhotoVisibleRestWidth = 6;
		_self.intScrollSpeedMax = 35;
		_self.intScrollSpeedFastForwardMax = _self.intScrollSpeedMax * 2;
		_self.intStopSpeed = 4;
		_self.intStartSpeed = 3;
		_self.intPosition = 0;
		_self.intPositionMax = _self.intPhotoWidth * (_self.intPhotoCount - _self.intPhotosVisible ) - _self.intPhotoVisibleRestWidth;
	}
	
	/**
	 * Scrollt de fotobalk één foto naar links
	 * 
	 * @access public
	 */
	this.scrollPhotoLeft = function() {
		if (_self.intPosition <= _self.intPositionMin) return;

		_self.scrollLeft(true, (_self.intPosition - _self.intPhotoWidth));
	}
	
	/**
	 * Scrollt de fotobalk één foto naar rechts
	 * 
	 * @access public
	 */
	this.scrollPhotoRight = function() {
		if (_self.intPosition >= _self.intPositionMax) return;	
		
		_self.scrollRight(true, (_self.intPosition + _self.intPhotoWidth));
	}

	/**
	 * Scrollt de fotobalk naar links
	 * 
	 * @access 	public
	 * @param	integer	Scroll naar een minimum positiie
	 */
	this.scrollLeft = function(blnStart, intPositionStop) {
		if (_self.intPosition <= _self.intPositionMin) return;
		
		// Scroll een minimum positie, verlaag de snelheid als eindpunt in zicht komt
		if (typeof intPositionStop == "undefined") intPositionStop = null;
		if (intPositionStop != null && (_self.intPosition <= intPositionStop || (_self.intPosition - ((_self.intScrollSpeedMax / _self.intStopSpeed) *  _self.intStopSpeed)) <= intPositionStop)) 
			_self.blnStopScrolling = true;

		// Start met scrollen
		if (blnStart) {
			_self.blnStopScrolling = false;
			_self.intScrollSpeed = 0;
		}
		
		// Vertragen als er gestopt moet worden
		if (_self.blnStopScrolling) {
			_self.intScrollSpeed -= _self.intStopSpeed;
		
			// Scroll volledig gestopt
			if (_self.intScrollSpeed <= 0) return;
		}
		else {
			// Versnellen bij opstarten
			_self.intScrollSpeed += _self.intStartSpeed;
			
			if (_self.intScrollSpeed > _self.intScrollSpeedMax)
				_self.intScrollSpeed = _self.intScrollSpeedMax;
		}
		
		_self.intPosition -= _self.intScrollSpeed;

		if (intPositionStop != null && _self.intPosition <= intPositionStop) {
			var intTeveel = intPositionStop - _self.intPosition;
			_self.intPosition += intTeveel;
		}
						
		// Controleer of nieuwe positie te ver is
		_self.checkLeftScroll();
		
		_self.scroll();

		if (intPositionStop == null || (intPositionStop != null && _self.intPosition > intPositionStop))
			setTimeout("objPhotoScroll.scrollLeft(" + false + ", " + intPositionStop + ")", 100);
	}
	
	/**
	 * Scrollt de fotobalk naar rechts
	 * 
	 * @access 	public
	 * @param	integer	Scroll een maximum positie
	 */
	this.scrollRight = function(blnStart, intPositionStop) {
		//console.log(" ");
		if (_self.intPosition >= _self.intPositionMax) {
			_self.blnFastForward = false;
			return;
		}
		
		// Start met scrollen
		if (blnStart) {
			_self.blnStopScrolling = false;
			_self.intScrollSpeed = 0;
		}
		
		// Scroll een maximaal positie, verlaag de snelheid als eindpunt in zicht komt
		if (typeof intPositionStop == "undefined") intPositionStop = -1;
		if (!blnStart && intPositionStop != -1) {
			var intScrollSpeed = (_self.blnFastForward) ? _self.intScrollSpeedFastForwardMax : _self.intScrollSpeedMax;
			if (_self.intPosition >= intPositionStop || (_self.intPosition + ((intScrollSpeed / _self.intStopSpeed) * _self.intStopSpeed)) >= intPositionStop) {
				//console.log("Stoppen of afremmen: intPosition: %s | intPositionStop: %s", _self.intPosition, intPositionStop);
				_self.blnStopScrolling = true;
			}
		}
		
		//console.log("intPositionStop: %s | blnStopScrolling: %s | scrollSpeed: %s", intPositionStop, _self.blnStopScrolling, _self.intScrollSpeed);
		
		// Vertragen als er gestopt moet worden
		if (_self.blnStopScrolling) {
			_self.intScrollSpeed -= _self.intStopSpeed;
		
			// Scroll volledig gestopt
			if (_self.intScrollSpeed <= 0) {
				_self.blnFastForward = false;
				//console.log("Scroll volledig gestopt");
				return;
			}
		}
		else {
			// Versnellen bij opstarten
			_self.intScrollSpeed += _self.intStartSpeed;
			
			if (_self.intScrollSpeed > _self.intScrollSpeedMax)
				_self.intScrollSpeed = _self.intScrollSpeedMax;
		}		
				
		_self.intPosition += (_self.blnFastForward) ? _self.intScrollSpeedFastForwardMax : _self.intScrollSpeed;
		
		if (intPositionStop != -1 && _self.intPosition >= intPositionStop) {
			var intTeveel = intPositionStop - _self.intPosition;
			_self.intPosition += intTeveel;
			//console.log("Scroll te ver met %s pixels", intTeveel);
		}
		
		// Controleer of nieuwe positie te ver is
		_self.checkRightScroll();
		
		_self.scroll();

		if (intPositionStop == -1 || (intPositionStop != -1 && _self.intPosition < intPositionStop)) {
			//console.log("setTimeout(objPhotoScroll.scrollRight(false, intPositionStop: %s), 100);)", intPositionStop);
			setTimeout("objPhotoScroll.scrollRight(" + false + ", " + intPositionStop + ")", 100);
		}
		else
			_self.blnFastForward = false;
	}
	
	/**
	 * Scrollt naar een foto
	 * 
	 * @access	void
	 * @param 	integer Index van foto, start bij 0
	 */
	this.scrollToPhotoIndex = function(intPhotoIndex) {
		var fltLeft = (intPhotoIndex - (_self.intPhotosVisible / 2) + 1) * _self.intPhotoWidth; // + (_self.intPhotoWidth / 2) + _self.intPhotoVisibleRestWidth + 2;
		
		if (fltLeft > 0) {
			if (intPhotoIndex > objFotoalbum.intPrevPhotoIndex) {
				_self.scrollRight(true, fltLeft);
			}
			else {
				_self.scrollLeft(true, fltLeft);
			}
		}
	}

	/**
	 * Scrollt op dubbele snelheid naar een foto
	 * 
	 * @access	void
	 * @param 	integer Index van foto, start bij 0
	 */	
	this.fastForwardToPhotoIndex = function(intPhotoIndex) {
		// Skip naar intPhotoIndex - intPhotosVisible zodat de balk niet te lang blijft scrollen
		if (intPhotoIndex > (_self.intPhotosVisible * 1)) {
			_self.intPosition = (intPhotoIndex - (_self.intPhotosVisible * 1)) * _self.intPhotoWidth;
			_self.scroll();
		}
		
		//_self.blnFastForward = true;
		_self.scrollToPhotoIndex(intPhotoIndex);
	}

	/**
	 * Stopt met scrollen
	 * 
	 * @access public
	 */
	this.stopScrolling = function() {
		_self.blnStopScrolling = true;
	}
}

var objPhotoScroll = new cPhotoScroll();