/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


function SlideShowManager(frontImgId, backImgId, linkId) {
  this.currentImageIndex = -1;
  this.imageArray        = new Array();
  this.targetArray       = new Array();
  this.frontImageId      = frontImgId;
  this.backImageId       = backImgId;
  this.linkId            = linkId;
  this.browserType       = "Unknown";
  this.container         = "Unknown";
  this.pageContainer     = "Unknown";
  this.navContainer      = "Unknown";
  this.fadeValue         = 0;
  this.fadeChange        = 5;
  this.fadeMax           = 100;
  this.waitTime          = 1000; // 1 second
  this.left              = 0;
  this.top               = 0;
  this.fadeTimeout       = 0;
  this.paused            = 0;
  this.iconWidth         = 19;
  this.iconHeight        = 19;
  this.iconHLMod         = 10;

  this.setBrowserType = function() {
    if (document.getElementById && document.all) {
      this.browserType = "IE";
    } else if (document.getElementId && !document.all) {
      this.browserType = "Firefox"
    } else {
      this.browserType = "Unknown";
    }
  }

  this.loadBackImage = function(srcPath) {
    var e = document.getElementById(this.backImageId);

    if (e) {
      // alert("loadbackImage:srcPath = " + srcPath);
      e.src = srcPath;
      e.alt = srcPath;
    }
  }

  this.changeFrontImage = function(srcPath, targetValue) {
    var e = document.getElementById(this.frontImageId);
    var a = document.getElementById(this.linkId);

    if (e) {
      e.src = srcPath;
      e.alt = srcPath + "    ->    " + targetValue;
    }

    if (a) {
      a.href = targetValue;
    }
  }

  this.topPosition = function(obj) {
    var top = obj.offsetTop;

    // alert("[" + obj.id + "] offsetTop = " + obj.offsetTop);

    if (obj.offsetParent && (obj.offsetParent.id != this.pageContainer)) {
      top += this.topPosition(obj.offsetParent);
    }

    return top;
  }

  this.leftPosition = function(obj) {
    var left = obj.offsetLeft;

    // alert("[" + obj.id + "] offsetLeft = " + obj.offsetLeft);

    if (obj.offsetParent && (obj.offsetParent.id != this.pageContainer)) {
      left += this.leftPosition(obj.offsetParent);
    }

    return left;
  }

  this.positionSlideShow = function() {
    var e  = document.getElementById(this.container);
    var fi = document.getElementById(this.frontImageId);
    var bi = document.getElementById(this.backImageId);
    var n  = document.getElementById(this.navContainer);

    if (e) {
      var top  = this.topPosition(e);
      var left = this.leftPosition(e);

      fi.style.top = top;
      bi.style.top = top;

      fi.style.left = left;
      bi.style.left = left;

      n.style.left = parseInt(left);
      n.style.top  = top + parseInt(fi.height) - 44;
      // alert("fi.style.top  = " + fi.style.top  + "\nbi.style.top  = " + bi.style.top);
      // alert("fi.style.left = " + fi.style.left + "\nbi.style.left = " + bi.style.left);
    }
  }

  this.fadeImage = function(){
    var e = document.getElementById(this.frontImageId);

    if (e) {
      e.style.opacity = 1.0 - (parseInt(this.fadeValue) / 100);
    }
  }

  this.nextFadeValue = function() {
    this.fadeValue += this.fadeChange;
    if (this.fadeValue >= this.fadeMax) {
      this.fadeValue = this.fadeMax;
      return(1);
    }
    return(0);
  }

  this.fadeFGImage = function(myName, nextImagePath, nextImageIndex, nextImageTarget, direction) {
    // alert("myName = " + myName);
    this.fadeImage(this.frontImageId, this.fadeValue);
    this.playPauseImage(myName, (this.pause?-1:1), 0, nextImageIndex);
    if (this.nextFadeValue()) {
      this.changeFrontImage(nextImagePath, nextImageTarget);
      this.currentImageIndex = parseInt(nextImageIndex);
      this.fadeValue         = 0;
      this.fadeImage();
      if (this.pause == 0) {
        if (direction) {
          this.fadeTimeout = setTimeout(myName + ".previousImage('" + myName + "')", 3000);
        } else {
          this.fadeTimeout = setTimeout(myName + ".nextImage('" + myName + "')", 3000);
        }
      }
    } else {
      this.fadeTimeout = setTimeout(myName + ".fadeFGImage('" + myName + "','" + nextImagePath + "'," + nextImageIndex + ",'" + nextImageTarget + "'," + direction + ")", 0);
    }
  }

  this.loadSlideShow = function(myName, pauseTime) {
    for (var i = 0; i < this.imageArray.length; i++) {
      var imagePath = this.imageArray[i];
      this.loadBackImage(imagePath);
    }
  }

  this.nextImage = function(myName, pauseTime) {
    var nextImageIndex  = (this.currentImageIndex + 1) % this.imageArray.length;
    var nextImagePath   = this.imageArray[nextImageIndex];
    var nextImageTarget = this.targetArray[nextImageIndex];

    if (! pauseTime) {
      pauseTime = 0;
    }
    this.playPauseImage(myName, 1, 0);
    document.getElementById(myName + "ForwardImage").src   = "CalendarImages/RightArrowStraitGreen.png";
    document.getElementById(myName + "BackwardImage").src  = "CalendarImages/LeftArrowStrait.png";

    if (this.fadeTimeout) {
      clearTimeout(this.fadeTimeout);
    }
    setTimeout(myName + ".loadBackImage('" + nextImagePath + "')", 0);
    // alert(myName + ":" + pauseTime + ", " + nextImageIndex + ", " + this.waitTime);
    this.fadeTimeout = setTimeout(myName + ".fadeFGImage('" + myName + "','" + nextImagePath + "'," + nextImageIndex + ",'" + nextImageTarget + "', 0)", this.waitTime + pauseTime);
  }

  this.pauseImage = function(myName, picIndex) {
    if ((typeof(picIndex) == "undefined") || (picIndex < 0) || (picIndex >= this.imageArray.length)) {
      picIndex = this.currentImageIndex;
    }

    var nextImageIndex  = picIndex;
    var nextImagePath   = this.imageArray[picIndex];
    var nextImageTarget = this.targetArray[picIndex];

    this.playPauseImage(myName, -1, 0);
    document.getElementById(myName + "ForwardImage").src   = "CalendarImages/RightArrowStrait.png";
    document.getElementById(myName + "BackwardImage").src  = "CalendarImages/LeftArrowStrait.png";

    if (this.fadeTimeout) {
      clearTimeout(this.fadeTimeout);
    }
    setTimeout(myName + ".loadBackImage('" + nextImagePath + "')", 0);
    this.fadeTimeout = setTimeout(myName + ".fadeFGImage('" + myName + "','" + nextImagePath + "'," + nextImageIndex + ",'" + nextImageTarget + "', 0)", 0);
  }

  this.previousImage = function(myName, pauseTime) {
    var previousImageIndex  = (this.currentImageIndex + this.imageArray.length - 1) % this.imageArray.length;
    var previousImagePath   = this.imageArray[previousImageIndex];
    var previousImageTarget = this.targetArray[previousImageIndex];

    if (!pauseTime) {
      pauseTime = 0;
    }
    this.playPauseImage(myName, 1, 0);
    document.getElementById(myName + "ForwardImage").src   = "CalendarImages/RightArrowStrait.png";
    document.getElementById(myName + "BackwardImage").src  = "CalendarImages/LeftArrowStraitGreen.png";

    if (this.fadeTimeout) {
      clearTimeout(this.fadeTimeout);
    }
    setTimeout(myName + ".loadBackImage('" + previousImagePath + "')", 0);
    // alert(myName + ":" + pauseTime + ", " + nextImageIndex + ", " + this.waitTime);
    this.fadeTimeout = setTimeout(myName + ".fadeFGImage('" + myName + "','" + previousImagePath + "'," + previousImageIndex + ",'" + previousImageTarget + "', 1)", this.waitTime + pauseTime);
  }

  this.playPauseImage = function(myName, play, callNext, setPicIndex) {
    if (typeof(play) == "undefined") {
      play = 0;
    }
    if (play == 1) {
      this.pause = 1;
    } else if (play == -1) {
      this.pause = 0;
    }

    if (typeof(setPicIndex) == "undefined") {
      setPicIndex = -1;
    }

    if (typeof(callNext) == "undefined") {
      callNext = 0;
    }

    if ((callNext == 0) && (setPicIndex >= 0)) {
      var i = 0;
      var e;
      do {
        e = document.getElementById(myName + "Image" + i);

        if (e) {
          if (i == setPicIndex) {
            e.style.border      = "4px";
            e.style.borderStyle = "solid";
            e.style.borderColor = "black";
            e.width             = this.iconWidth - 8;
            e.height            = this.iconHeight - 8;
            e.iconSelected      = true;
          } else {
            e.style.border      = "0px";
            e.width             = this.iconWidth;
            e.height            = this.iconHeight;
            e.iconSelected      = false;
          }
          if (e.iconHighlighted) {
            e.height += parseInt(this.iconHLMod);
            e.width  += parseInt(this.iconHLMod);
          }
          i++;
        }
      } while (e);
    }

    if (this.pause == 0) {
      this.pause = 1;
      if (this.fadeTimeout) {
        clearTimeout(this.fadeTimeout);
      }
      document.getElementById(myName + "ForwardImage").src   = "CalendarImages/RightArrowStrait.png";
      document.getElementById(myName + "BackwardImage").src  = "CalendarImages/LeftArrowStrait.png";
    } else {
      this.pause = 0;
      if (callNext == 1) {
        this.nextImage(myName, 0);
      }
    }
  }

  this.modifyIconSize = function(myName, id, tWidth, iteration) {
    var e       = document.getElementById(id);
    var sWidth  = parseInt(e.width);
    var diff    = parseInt(tWidth) - parseInt(sWidth);
    var inc     = 1;

    if (typeof(iteration) == "undefined") {
      iteration = 0;
    }

    if (diff < 0) {
      inc = -1;
    }

    if (iteration >= 50) {
      e.width  += diff;
      e.height += diff;
      sWidth    = parseInt(e.width);
    }

    if (sWidth != tWidth) {
      e.width  += parseInt(inc);
      e.height += parseInt(inc);

      iteration++;
      setTimeout(myName + ".modifyIconSize('" + myName + "','" + e.id + "'," + tWidth + "," + iteration + ")", 1);
    }
  }

  this.highlightIcon = function(myName, index) {
    var i = 0;
    var e;
    do {
      e = document.getElementById(myName + "Image" + i);

      if (e) {
        var mod = 0;

        e.iconHighlighted = false;
        if (i == index) {
          mod = this.iconHLMod;
          e.iconHighlighted = true;
        }
        if (e.iconSelected) {
          mod -= 8;
        }

        this.modifyIconSize(myName, e.id, parseInt(this.iconWidth) + parseInt(mod));
        i++;
      }
    } while (e);
  }
  
  this.showNavigation = function(myName) {
    e = document.getElementById(myName + "Navigator");
    e.style.visibility = "visible";
  }

  this.hideNavigation = function(myName) {
    e = document.getElementById(myName + "Navigator");
    e.style.visibility = "hidden";
  }
}
