var ImageScroller = function(_imageScrollerParentDivID, _imageScrollerChildDivID) {

   _imageScrollerParentDivID = getElem(_imageScrollerParentDivID); 

   _imageScrollerChildDivID = getElem(_imageScrollerChildDivID); 

   var prImagePaths = new Array(); 

   var prImageAltText = new Array(); 

   var prImageClicks = new Array(); 

   var prImageDescription = new Array(); 

   var iNumOfThumbsShown = 1; 

   var iNumOfImages; 

   

   var bAutoScroll = 0; 

   //0=false, 1=true

   var iAutoScrollDelay = 2000; 

   var bAutoScrollDirection = 1; 

   //0=back, 1=forward

   var bAutoReverse = 1; 

   //0=false, 1=true

   var iScrollType = 1; 

   //0=horizontal, 1=vertical

   var bEnableThumbBorder = 0; 

   //0=no, 1=yes

   var bEnableCurrentCount = 0; 

   //0=no, 1=yes

   var bEnableThumbDescription = 0; 

   //0=no, 1=yes

   var bClickOpenType = 0; 

   //0=same window, 1=new window

   var iImageScrollAmount = 1;

   //number of images to scroll

   

   var objCounterDiv = ""; 

   var objDescriptionDiv = ""; 

   var iSmoothSlideInterval = 3; 

   var iSmoothSlideAmount = 7; 

   var moveTimer; 

   

   this.THUMB_HEIGHT = 80; 

   this.THUMB_WIDTH = 80; 

   this.THUMB_PADDING = 4; 

   

   var CURRENT_THUMB_INDEX = 1; 

   var NEW_REVERSE_OFFSET = 0; 

   var MAX_REVERSE_OFFSET = 0; 

   var NEW_FORWARD_OFFSET = 0; 

   var IS_SCROLLING = false; 

   //* BEGIN FUNCTIONS *//

   this.setNumOfImageToScroll = function(_NumOfImagesToScroll) {

        iImageScrollAmount = parseInt(_NumOfImagesToScroll);

   };

   this.enableThumbnailDescription = function(_descriptionDivID) {

      bEnableThumbDescription = 1; 

      objDescriptionDiv = _descriptionDivID; 

      }; 

   this.setScrollType = function(_iType) {

      if (_iType == 0) {

         iScrollType = 0; 

         }

      else {

         iScrollType = 1; 

         }

      }; 

   this.setScrollSpeed = function(_iSpeed) {

      if (_iSpeed > 0 || _iSpeed < 1000) {

         iSmoothSlideInterval = _iSpeed; 

         }

      else {

         iSmoothSlideInterval = 7; 

         }

      }; 

   this.setScrollAmount = function(_iAmount) {

      if (_iAmount > 0 || _iAmount < 1000) {

         iSmoothSlideAmount = _iAmount; 

         }

      else {

         iSmoothSlideAmount = 7; 

         }

      }; 

   this.setClickOpenType = function(_openType) {

      if (_openType == 0 || _openType == 1) {

         bClickOpenType = _openType; 

         }

      }; 

   this.enableCurrentCount = function(_counterDivID) {

      bEnableCurrentCount = 1; 

      objCounterDiv = _counterDivID; 

      }; 

   this.enableThumbBorder = function(_boolean) {

      bEnableThumbBorder = _boolean; 

      }; 

   this.setThumbsShown = function(_newNumOfThumbsShown) {

      iNumOfThumbsShown = parseInt(_newNumOfThumbsShown); 

      }; 

   this.addThumbnail = function(_thumbnailURL, _fullClickURL, _thumbnailAlt, _thumbnailDescription) {

      prImagePaths[prImagePaths.length] = _thumbnailURL; 

      prImageClicks[prImageClicks.length] = _fullClickURL; 

      prImageAltText[prImageAltText.length] = _thumbnailAlt; 

      prImageDescription[prImageDescription.length] = _thumbnailDescription; 

      }; 

   this.setThumbnailHeight = function(_newThumbHeight) {

      this.THUMB_HEIGHT = _newThumbHeight; 

      }; 

   this.getThumbnailHeight = function() {

      return this.THUMB_HEIGHT; 

      }; 

   this.setThumbnailWidth = function(_newThumbWidth) {

      this.THUMB_WIDTH = _newThumbWidth; 

      }; 

   this.getThumbnailWidth = function() {

      return this.THUMB_WIDTH; 

      }; 

   this.setThumbnailPadding = function(_newThumbPadding) {

      this.THUMB_PADDING = _newThumbPadding; 

      }; 

   this.getThumbnailPadding = function() {

      return THUMB_PADDING; 

      }; 

   this.getCurrentThumbIndex = function() {

      return CURRENT_THUMB_INDEX; 

      }; 

   this.getThumbnailCount = function() {

      return iNumOfImages; 

      }; 

   this.renderScroller = function() {

      iNumOfImages = prImagePaths.length; 

      if (iNumOfThumbsShown > iNumOfImages) {

         iNumOfThumbsShown = iNumOfImages; 

         }

      MAX_REVERSE_OFFSET = 0 - (iNumOfImages - iNumOfThumbsShown) * this.THUMB_WIDTH; 

      if (this.THUMB_PADDING > 0) {

         MAX_REVERSE_OFFSET = MAX_REVERSE_OFFSET - (iNumOfImages * this.THUMB_PADDING); 

         }

      if (bEnableThumbBorder == 1) {

         MAX_REVERSE_OFFSET = MAX_REVERSE_OFFSET - (iNumOfImages * 4); 

         }

      if (iScrollType == 0) {

         _imageScrollerParentDivID.style.width = (this.THUMB_WIDTH * iNumOfThumbsShown) + (iNumOfThumbsShown * (this.THUMB_PADDING * 2)) + "px"; 

         if (bEnableThumbBorder == 1) {

            _imageScrollerParentDivID.style.width = (parseInt(_imageScrollerParentDivID.style.width) + (iNumOfThumbsShown * 4)) + "px"; 

            }

         _imageScrollerParentDivID.style.height = this.THUMB_HEIGHT + (this.THUMB_PADDING * 2) + "px"; 

         if (bEnableThumbBorder == 1) {

            _imageScrollerParentDivID.style.height = (parseInt(_imageScrollerParentDivID.style.height) + 4) + "px"; 

            }

         _imageScrollerChildDivID.style.width = (this.THUMB_WIDTH * iNumOfImages) + (iNumOfImages * (this.THUMB_PADDING * 2)) + "px"; 

         if (bEnableThumbBorder == 1) {

            _imageScrollerChildDivID.style.width = (parseInt(_imageScrollerChildDivID.style.width) + (iNumOfImages * 4)) + "px"; 

            }

         }

      else if (iScrollType == 1) {

         _imageScrollerParentDivID.style.width = (this.THUMB_WIDTH) + ((this.THUMB_PADDING * 2)) + "px"; 

         if (bEnableThumbBorder == 1) {

            _imageScrollerParentDivID.style.width = (parseInt(_imageScrollerParentDivID.style.width) + (4)) + "px"; 

            }

         _imageScrollerParentDivID.style.height = (this.THUMB_HEIGHT * iNumOfThumbsShown) + (iNumOfThumbsShown * (this.THUMB_PADDING * 2)) + "px"; 

         if (bEnableThumbBorder == 1) {

            _imageScrollerParentDivID.style.height = (parseInt(_imageScrollerParentDivID.style.height) + (iNumOfThumbsShown * 4)) + "px"; 

            }

         _imageScrollerChildDivID.style.width = (this.THUMB_WIDTH) + (this.THUMB_PADDING * 2) + "px"; 

         if (bEnableThumbBorder == 1) {

            _imageScrollerChildDivID.style.width = (parseInt(_imageScrollerChildDivID.style.width) + 4) + "px"; 

            }

         }

      //*** [Begin] Image Cacheing code ***//

      var oHref;

      var oImage;

        oHref = document.createElement("a");

        oImage = document.createElement("img");

        

      for (i = 0; i < iNumOfImages; i++) {

        oHref = document.createElement("a");

        oHref.href = prImageClicks[i];

        oHref.title = prImageAltText[i];

        

        if (bClickOpenType == 1) {

            oHref.target = "_self";

        }

        

        oImage = document.createElement("img");

            oImage.src = prImagePaths[i];

            oImage.alt = prImageAltText[i];

            oImage.border = 0;

            oImage.width = this.THUMB_WIDTH;

            oImage.height = this.THUMB_HEIGHT;

            oImage.style.padding = this.THUMB_PADDING;

            

          oHref.appendChild(oImage);

          _imageScrollerChildDivID.appendChild(oHref);

            

      }

      //*** [End]   Image Cacheing code ***//

      

      if (bEnableCurrentCount == 1) {

         addAnEvent(window, "load", this.updateCurrentCount); 

         }

      if (bEnableThumbDescription == 1) {

         addAnEvent(window, "load", this.updateCurrentDescription); 

         }

      }; 

   this.scrollUp = function() {

      _origOffset = parseInt(_imageScrollerChildDivID.style.top); 

      _currentOffset = parseInt(_imageScrollerChildDivID.style.top); 

      _newOffset = _currentOffset - (this.THUMB_HEIGHT * iImageScrollAmount); 

      if (this.THUMB_PADDING > 0) {

         _newOffset = _newOffset - (2 * this.THUMB_PADDING); 

         }

      if (bEnableThumbBorder == 1) {

         _newOffset = _newOffset - 4; 

         }

      if (IS_SCROLLING == false && _newOffset >= MAX_REVERSE_OFFSET) {

         NEW_FORWARD_OFFSET = _newOffset; 

         moveScrollerUp(); 

         }

      }; 

   this.scrollDown = function() {

      _origOffset = parseInt(_imageScrollerChildDivID.style.top); 

      _currentOffset = parseInt(_imageScrollerChildDivID.style.top); 

      _newOffset = _currentOffset + (this.THUMB_HEIGHT * iImageScrollAmount); 

      if (this.THUMB_PADDING > 0) {

         _newOffset = _newOffset + (2 * this.THUMB_PADDING); 

         }

      if (bEnableThumbBorder == 1) {

         _newOffset = _newOffset + 4; 

         }

      if (_newOffset <= 0) {

         if(_currentOffset > (_origOffset - this.THUMB_HEIGHT)) {

            if (IS_SCROLLING == false && _newOffset >= MAX_REVERSE_OFFSET) {

               NEW_REVERSE_OFFSET = _newOffset; 

               moveScrollerDown(); 

               }

            }

         }

      }; 

   this.scrollTop = function() {

      if (IS_SCROLLING == false) {

         NEW_FORWARD_OFFSET = ( - 1 * (iNumOfImages - iNumOfThumbsShown) * this.THUMB_HEIGHT); 

         CURRENT_THUMB_INDEX = iNumOfImages - iNumOfThumbsShown; 

         moveScrollerUp(); 

         }

      }; 

   this.scrollBottom = function() {

      if (IS_SCROLLING == false) {

         NEW_REVERSE_OFFSET = 0; 

         CURRENT_THUMB_INDEX = iNumOfImages - iNumOfThumbsShown; 

         moveScrollerDown(); 

         }

      }; 

   this.scrollReverse = function() {

      _origOffset = parseInt(_imageScrollerChildDivID.style.left); 

      _currentOffset = parseInt(_imageScrollerChildDivID.style.left); 

      _newOffset = _currentOffset + (this.THUMB_WIDTH * iImageScrollAmount); 

      if (this.THUMB_PADDING > 0) {

         _newOffset = _newOffset + (this.THUMB_PADDING * (2 * iImageScrollAmount)); 

         }

      if (bEnableThumbBorder == 1) {

         _newOffset = _newOffset + 4; 

         }

      if (_newOffset <= 0) {

         if(_currentOffset > (_origOffset - (this.THUMB_WIDTH * iImageScrollAmount))) {

            if (IS_SCROLLING == false) {

               NEW_REVERSE_OFFSET = _newOffset; 

               moveScrollerRight(); 

               }

            }

         }

      }; 

   this.scrollForward = function() {

      _origOffset = parseInt(_imageScrollerChildDivID.style.left); 

      _currentOffset = parseInt(_imageScrollerChildDivID.style.left); 

      _newOffset = _currentOffset - (this.THUMB_WIDTH * iImageScrollAmount); 

      if (this.THUMB_PADDING > 0) {

         _newOffset = _newOffset - ((2 * iImageScrollAmount) * this.THUMB_PADDING); 

         }

      if (bEnableThumbBorder == 1) {

         _newOffset = _newOffset - 4; 

         }

      if (IS_SCROLLING == false && _newOffset >= MAX_REVERSE_OFFSET) {

         NEW_FORWARD_OFFSET = _newOffset; 

         moveScrollerLeft(); 

         }

      }; 

   this.scrollEnd = function() {

      if (IS_SCROLLING == false) {

         NEW_FORWARD_OFFSET = MAX_REVERSE_OFFSET; 

         CURRENT_THUMB_INDEX = iNumOfImages - iNumOfThumbsShown; 

         moveScrollerLeft(); 

         }

      }; 

   this.scrollBegin = function() {

      if (IS_SCROLLING == false) {

         NEW_REVERSE_OFFSET = 0; 

         CURRENT_THUMB_INDEX = 2; 

         moveScrollerRight(); 

         }

      }; 

   this.updateCurrentDescription = function() {

      getElem(objDescriptionDiv).innerHTML = prImageDescription[CURRENT_THUMB_INDEX - 1]; 

      }; 

   this.updateCurrentCount = function() {

      getElem(objCounterDiv).innerHTML = CURRENT_THUMB_INDEX + "/" + iNumOfImages; 

      }; 

   function moveScrollerUp() {

      _ElementObj = _imageScrollerChildDivID; 

      _currentOffset = parseInt(_ElementObj.style.top); 

      if (_currentOffset > NEW_FORWARD_OFFSET && (_currentOffset - iSmoothSlideAmount) >= NEW_FORWARD_OFFSET) {

         _ElementObj.style.top = _currentOffset - iSmoothSlideAmount + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerUp, iSmoothSlideInterval); 

         }

      else if (_currentOffset > NEW_FORWARD_OFFSET) {

         _ElementObj.style.top = _currentOffset - 1 + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerUp, iSmoothSlideInterval); 

         }

      else {

         IS_SCROLLING = false; 

         CURRENT_THUMB_INDEX++; 

         window.clearTimeout(moveTimer); 

         if (bEnableThumbDescription == 1) {

            getElem(objDescriptionDiv).innerHTML = prImageDescription[CURRENT_THUMB_INDEX - 1]; 

            }

         if (bEnableCurrentCount == 1) {

            getElem(objCounterDiv).innerHTML = CURRENT_THUMB_INDEX + "/" + iNumOfImages; 

            }

         }

      }; 

   function moveScrollerDown() {

      _ElementObj = _imageScrollerChildDivID; 

      _currentOffset = parseInt(_ElementObj.style.top); 

      if (_currentOffset < NEW_REVERSE_OFFSET && (_currentOffset + iSmoothSlideAmount) <= NEW_REVERSE_OFFSET) {

         _ElementObj.style.top = _currentOffset + iSmoothSlideAmount + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerDown, iSmoothSlideInterval); 

         }

      else if (_currentOffset < NEW_REVERSE_OFFSET) {

         _ElementObj.style.top = _currentOffset + 1 + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerDown, iSmoothSlideInterval); 

         }

      else {

         IS_SCROLLING = false; 

         CURRENT_THUMB_INDEX--; 

         window.clearTimeout(moveTimer); 

         if (bEnableThumbDescription == 1) {

            getElem(objDescriptionDiv).innerHTML = prImageDescription[CURRENT_THUMB_INDEX - 1]; 

            }

         if (bEnableCurrentCount == 1) {

            getElem(objCounterDiv).innerHTML = CURRENT_THUMB_INDEX + "/" + iNumOfImages; 

            }

         }

      }; 

   function moveScrollerRight() {

      _ElementObj = _imageScrollerChildDivID; 

      _currentOffset = parseInt(_ElementObj.style.left); 

      if (_currentOffset < NEW_REVERSE_OFFSET && (_currentOffset + iSmoothSlideAmount) <= NEW_REVERSE_OFFSET) {

         _ElementObj.style.left = _currentOffset + iSmoothSlideAmount + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerRight, iSmoothSlideInterval); 

         }

      else if (_currentOffset < NEW_REVERSE_OFFSET) {

         _ElementObj.style.left = _currentOffset + 1 + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerRight, iSmoothSlideInterval); 

         }

      else {

         IS_SCROLLING = false; 

         CURRENT_THUMB_INDEX--; 

         window.clearTimeout(moveTimer); 

         if (bEnableThumbDescription == 1) {

            getElem(objDescriptionDiv).innerHTML = prImageDescription[CURRENT_THUMB_INDEX - 1]; 

            }

         if (bEnableCurrentCount == 1) {

            getElem(objCounterDiv).innerHTML = CURRENT_THUMB_INDEX + "/" + iNumOfImages; 

            }

         }

      }; 

   function moveScrollerLeft() {

      _ElementObj = _imageScrollerChildDivID; 

      _currentOffset = parseInt(_ElementObj.style.left); 

      if (_currentOffset > NEW_FORWARD_OFFSET && (_currentOffset - iSmoothSlideAmount) >= NEW_FORWARD_OFFSET) {

         _ElementObj.style.left = _currentOffset - iSmoothSlideAmount + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerLeft, iSmoothSlideInterval); 

         }

      else if (_currentOffset > NEW_FORWARD_OFFSET) {

         _ElementObj.style.left = _currentOffset - 1 + "px"; 

         IS_SCROLLING = true; 

         moveTimer = window.setTimeout(moveScrollerLeft, iSmoothSlideInterval); 

         }

      else {

         IS_SCROLLING = false; 

         CURRENT_THUMB_INDEX++; 

         window.clearTimeout(moveTimer); 

         if (bEnableThumbDescription == 1) {

            getElem(objDescriptionDiv).innerHTML = prImageDescription[CURRENT_THUMB_INDEX - 1]; 

            }

         if (bEnableCurrentCount == 1) {

            getElem(objCounterDiv).innerHTML = CURRENT_THUMB_INDEX + "/" + iNumOfImages; 

            }

         }

      }; 

   function addAnEvent(_obj, _eventName, _functionName) {

      if (window.addEventListener) {

         _obj.addEventListener(_eventName, _functionName, false); 

         }

      else {

         _obj.attachEvent("on" + _eventName, _functionName); 

         }

      }; 

   function getElem(_elemID) {

      return document.getElementById(_elemID); 

      }; 

   };

