// imageTransitions.js
//
var leaderTransitions = {} ;
leaderTransitions.images = []; 
leaderTransitions.imageCache = [];
leaderTransitions.targetObj = []; 
leaderTransitions.transition = "swapfade";
leaderTransitions.direction = "rl";
leaderTransitions.timeout = 4;
leaderTransitions.speed = 1;
leaderTransitions.displayedImage = [];
leaderTransitions.imageByTarget = [];

function isArray(testObject) 
{
   return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number';
}

function addImageToRotate(targetObj, newSource)
{
   var i = leaderTransitions.images.length; // 0 based...
   leaderTransitions.images[i] = newSource; 
   leaderTransitions.targetObj[i] = targetObj; 
   var id = targetObj.id;
   if (!isArray(leaderTransitions.imageByTarget[id]))
   {
      leaderTransitions.imageByTarget[id] = [];
   }
   var len = leaderTransitions.imageByTarget[id].length;
   leaderTransitions.imageByTarget[id][len] = newSource;
   leaderTransitions.displayedImage[id] = 0;
   //cache the image
   leaderTransitions.imageCache[i] = new Image;
   leaderTransitions.imageCache[i].src = leaderTransitions.images[i];
   return;
}

function swapImage()
{
   var rnd = 0;
   var numImages = leaderTransitions.images.length;
   var imageNum = Math.floor(numImages * Math.random());
   var myElement = leaderTransitions.targetObj[imageNum];
   var targetID = leaderTransitions.targetObj[imageNum].id;
   var groupSize = leaderTransitions.imageByTarget[targetID].length;
   leaderTransitions.displayedImage[targetID]++; 
   var nextImage = leaderTransitions.displayedImage[targetID];
   if (nextImage >= groupSize)
   {
      nextImage = 0;
      leaderTransitions.displayedImage[targetID] = nextImage;
   }
   var newImage = leaderTransitions.imageByTarget[targetID][nextImage];
   //var newImage = leaderTransitions.images[imageNum];
   var mySpeed = leaderTransitions.speed;
   var transition = leaderTransitions.transition;
   var myDirection = leaderTransitions.direction;
   if (transition == "random")
   {
      var rnd = Math.floor(3 * Math.random());
      if (rnd == 0) transition = "crossfade";
      if (rnd == 1) transition = "crosswipe";
      if (rnd == 2) transition = "swapfade";
      //mySpeed = Math.floor(10 * Math.random());
   }
   if (transition == "crossfade")
   {
      crossfade(myElement, newImage, mySpeed);
   }
   if (transition == "crosswipe")
   {
      if (myDirection == "random")
      {
         var rnd = Math.floor(10 * Math.random());
         if (rnd == 0) myDirection = "lr";
         if (rnd == 1) myDirection = "tb";
         if (rnd == 2) myDirection = "rl";
         if (rnd == 3) myDirection = "bt";
         if (rnd == 4) myDirection = "tlbr";
         if (rnd == 5) myDirection = "trbl";
         if (rnd == 6) myDirection = "brtl";
         if (rnd == 7) myDirection = "bltr";
         if (rnd == 8) myDirection = "cve"; //center to vert edge
         if (rnd == 9) myDirection = "che"; //center to horiz edge
      }
      crosswipe(myElement, newImage, mySpeed, myDirection);
   }
   if (transition == "swapfade")
   {
      swapfade(myElement, newImage, mySpeed);
   }
   return;
}

function startSwapping(transition, timeout, speed, direction)
{
   var numImages = leaderTransitions.images.length;
   if (numImages < 2)
   {
      return;
   }
   if (typeof transition != 'undefined' && transition != "") 
   {
     leaderTransitions.transition = transition;
   }
   if (typeof timeout != 'undefined' && timeout != "") 
   {
     leaderTransitions.timeout = timeout;
   }
   if (typeof speed != 'undefined' && speed != "") 
   {
     leaderTransitions.speed = speed;
   }
   if (typeof direction != 'undefined' && direction != "") 
   {
     leaderTransitions.direction = direction;
   }
   // first let's pre-load the images.
   var preloadImg = {};
   preloadImg.cache = [];
   for (var i=0 ; i < leaderTransitions.images.length ; i++)
   {
      preloadImg.cache[i] = new Image;
      preloadImg.cache[i].src = leaderTransitions.images[i];
   }
   setInterval(swapImage, (leaderTransitions.timeout) * 1000);
   return;
}


