function panoramaScroll(id, subImagePrefix, subImageExtension, subImageCount, subImageWidth, displayWidth) {
	this.id = id;
	this.subImagePrefix = subImagePrefix;
	this.subImageExtension = subImageExtension;
	this.subImageCount = subImageCount;
	this.subImageWidth = subImageWidth;
	this.subImageODCount = Math.floor(displayWidth / subImageWidth) - 1;
	this.imageWidth = subImageWidth * subImageCount;
	this.imageScrollWidth = this.imageWidth - (this.subImageWidth * this.subImageODCount);
	this.imageOffset = 0;
	this.scrollStepDuration = -1;
	this.scrollCountDown = 0;
	this.borderOffset = 0;
	this.saveFirstImageNo = -2;
	this.saveFirstImageODNo = -1;
	this.saveSubImageODOpacity = -1;
}

panoramaScroll.prototype.onLoad = function() {
	var conElem = document.getElementById(this.id + 'container');
	for (var i = 0; i < this.subImageODCount; i++) { 
	  conElem.innerHTML += '<img id=\"' + this.getSubImageODIdByNo(i) + '\" class=\"' + this.id +'imageod\" src=\"' + IM.getImagePath() + 'Transparent_S8.gif\" alt=\"\" />';
	}
	conElem.innerHTML += '<div id=\"' + this.id + 'bleft\"></div>';
	conElem.innerHTML += '<div id=\"' + this.id + 'bright\"></div>';
	for (var i = 0; i < this.subImageCount; i++) { 
	  IM.addSmartImage(this.getSubImageIdByNo(i), this.getSubImageFileNameByNo(i), '', false); 
	}
}

panoramaScroll.prototype.getNoAsText2 = function(no) { return (no <= 9) ? '0'+no : ''+no; }
panoramaScroll.prototype.getSubImageIdByNo = function(no) { return this.id + 'image' + this.getNoAsText2(no); }
panoramaScroll.prototype.getSubImageFileNameByNo = function(no) { return this.subImagePrefix + this.getNoAsText2(no) + this.subImageExtension; }
panoramaScroll.prototype.getSubImageODIdByNo = function(no) { return this.id + 'iod' + this.getNoAsText2(no); }
panoramaScroll.prototype.initTimer = function() { this.scrollStepDuration = 50; }

panoramaScroll.prototype.timerEvent = function(timeInterval, visible) {
	if (visible && (this.scrollStepDuration >= 0)) {
	  this.scrollCountDown -= timeInterval;
	  if (this.scrollCountDown <= 0) {
	    var steps = (Math.floor(-this.scrollCountDown / this.scrollStepDuration) + 1);
  	    this.scrollCountDown += (this.scrollStepDuration * steps);
	    this.imageOffset -= steps;
	    if (this.imageOffset <= (-this.imageScrollWidth)) {
	      this.imageOffset = 0;
	    }
	    var imageNo = Math.floor(-this.imageOffset/this.subImageWidth);  
	    var imageODNo = imageNo % this.subImageODCount; 
	    var shiftOD = (imageNo != this.saveFirstImageNo);
	    var refreshOD = (shiftOD) ? (imageNo != (this.saveFirstImageNo + 1)) : false;
	    var imageODOpacity = 100;
            if ((-this.imageOffset) < this.subImageWidth) { imageODOpacity = (-this.imageOffset); }
            if ((this.imageScrollWidth+this.imageOffset) < this.subImageWidth) { imageODOpacity = (this.imageScrollWidth+this.imageOffset); }
	    var changeODOpacity = (imageODOpacity != this.saveSubImageODOpacity);
	    this.saveFirstImageNo = imageNo;
	    this.saveFirstImageODNo = imageODNo;
	    this.saveSubImageODOpacity = imageODOpacity;
	    for (var i = 0; i < this.subImageODCount; i++) {
	      var imageOD = document.getElementById(this.getSubImageODIdByNo(imageODNo));
	      imageOD.style.left = (this.imageOffset+((imageNo+1)*100))+'px';
	      if (refreshOD || (shiftOD && (i==(this.subImageODCount-1)))) {
	        imageOD.src = IM.getSmartImageById(this.getSubImageIdByNo(imageNo)).src();
	      }
	      if (changeODOpacity) { setElementOpacity(imageOD, imageODOpacity); }
	      imageNo += 1;
	      imageODNo = (imageODNo + 1) % this.subImageODCount;
	    }
     	  }
	}
}
