// holds array of all image objects to swap
g_aSwapImageObjects = new Array();
// called onload and creates instance of swapImageManager
function swapImages() {
  var oImageSwapper = new swapImageManager("home_swap", 3000);
  // add image swapping parameters
  oImageSwapper.addImages(4, "home", "jpg");
  // start swapping
  oImageSwapper.start();
}

function swapImageManager(sImageID, iSpeed) 
{
   this.iSpeedInMS = iSpeed;
   this.iCounter = 0;
   this.iTimer = 0;
   this.sImagePath = "/images/";
   this.oImageToSwap = document.images[sImageID];
   this.iIndex = g_aSwapImageObjects.length;
   g_aSwapImageObjects[this.iIndex] = this;
   this.sAnimated = "g_aSwapImageObjects[" + this.iIndex + "]";
}

swapImageManager.prototype.addImages = swapImageManager_addImages;
swapImageManager.prototype.start = swapImageManager_start;
swapImageManager.prototype.swap = swapImageManager_swap;

// preloads images
function swapImageManager_addImages(iTotalImagesToSwap, sImageRootName, sImageFileType)
{
   // create a new image object and src for each image to be swapped and add it to the global array of all image objects to swap
   this.oImageToSwap.aImages = new Array();
   for(var i = 0; i < iTotalImagesToSwap; i++) 
   {
      this.oImageToSwap.aImages[i] = new Image();
      this.oImageToSwap.aImages[i].src = this.sImagePath + sImageRootName + (i+1) + "." + sImageFileType;
   }
}

// starts the image swap 
function swapImageManager_start() 
{
   // loop through each image to be swapped and wait the specified time 
   for(var i = 0; i < g_aSwapImageObjects.length; i++)
   {
      g_aSwapImageObjects[i].iTimer = setInterval(g_aSwapImageObjects[i].sAnimated + ".swap()", g_aSwapImageObjects[i].iSpeedInMS);
   }                     
}

// writes out the new image src to the document 
function swapImageManager_swap()
{
   // increment counter until get to end of all images
   if(this.iCounter < this.oImageToSwap.aImages.length - 1)
   {
      this.iCounter++;
   }
   // when at end of all images, reset counter to zero
   else
   {
      this.iCounter = 0;
   }
   // set the new image src on the document
   this.oImageToSwap.src = this.oImageToSwap.aImages[this.iCounter].src;
}