// Rainbo Design Manual Panes Slideshow v1.1  August 24, 2009
// Copyright (C) 2009 by Richard L. Trethewey rick@rainbo.net
// All rights reserved.  http://www.rainbodesign.com/
// Use is granted as long as this notice remains intact.

// User Settings
var slideWidth = 400;     // init slide width
var slideHeight = 300;    // init slide height
var slideHMargin = 0;    // init side horizontal margin
var slideVMargin = 0;    // init side vertical margin
var descHeight = 80;      // Height of description DIV
var opIncrement = 5;      // position change increment in pixels
var maxCycles = 0;        // maximum number of slideshow cycles (0 = no limit)
var idleTime = 7;         // time (seconds) for slide to stay unchanged before changing
var delay = 20;           // timeout setting (ms) for internal updates
var showStats = 0;        // display variables flag (normally 0)

// Preset Variables
var slidesList = new Array();

var curSlide = 0;	  // current visible slide id
var nextSlide = 0;        // next visible slide index to gallery array
var cycleCount = 0;       // current cycle count
var showObject = null;    // init slideshow object variable
var statsBox = null;      // init Stats box object
var switchFlag = 0;	  // Switched slides flag
var timeoutID = null;     // ID for timeout handler
var timer = 0;            // Init transition delay timer
var pauseFlag = 0;        // Init pause start/stop flag
var s1Top = 0;            // slide #1 top position
var s1Left = 0;           // slide #1 left position
var s2Top = 0;            // slide #2 top position
var s2Left = 0;           // slide #1 left position
var curLeft = 0;
var curTop = 0;
var slideCount = 0;

if (typeof document.getElementsByClassName !== 'function') {
document.getElementsByClassName = function(cl) {
var retnode = [];
var myclass = new RegExp('\\b'+cl+'\\b');
var elem = this.getElementsByTagName('*');
for (var i = 0; i < elem.length; i++) {
var classes = elem[i].className;
if (myclass.test(classes)) retnode.push(elem[i]);
}
return retnode;
};
}

 function startShow() {
   cycleCount = 0;
   nextSlide = 1;
   curSlide = -1;	// show inital pass
   pauseFlag = 0;
   showObject = document.getElementById("slideshow");
    slidesList = document.getElementsByClassName('slide');  // go find all of the slides
    slideCount = slidesList.length;		       // now count them
     for (i=1; i<=slideCount; i++) {		       // initialize all position settings
    document.getElementById('slide' + String(i)).style.left = String(slideWidth) + "px";
    document.getElementById('slide' + String(i)).style.top = "0px";
    document.getElementById('desc' + String(i)).style.top = String(slideHeight) + "px";
    document.getElementById('desc' + String(i)).style.left = "0px";
           } // end for i
    moverNext();  // load first slide
 } // end startShow()

function lightup(imageobject, opacity){
 if ((document.getElementById) && !(document.all)) { imageobject.style.opacity=opacity/100; }
 if ((document.getElementById) && (document.all)) { imageobject.filters.alpha.opacity=opacity; }
} // end lightup()

function moveSlide(imageDiv, sTop, sLeft) {
   imageDiv.style.top = String(sTop) + 'px';
   imageDiv.style.left = String(sLeft) + 'px';
 } // end moveSlide

function doIdle() {
    if (pauseFlag == 0) {                                // Are we paused?
       timeoutID = setTimeout('doNext()', delay);       // No! Begin transition
      } else {
       timeoutID = setTimeout('doIdle()', delay);        // Yes! Check here again (soon!)
    } // endif pauseFlag   
 } // end doIdle

function doNext() {
   hideDesc();
   moverNext();
} // end doNext()

function doPrevious() {
     prevSlide = nextSlide -2;
     if (prevSlide < 1) { prevSlide = slideCount; cycleCount--; }
     nextSlide = prevSlide + 1;
     if (nextSlide > slideCount) { nextSlide = 1; }
  if (curSlide == "slide1") {
     s2Object.src = slidesList[prevSlide];           // load previous slide
     } else {
     s1Object.src = slidesList[prevSlide];           // load previous slide
   }
   moverPrevious();
} // end doPrevious()


function moverNext() {
   switchFlag = 0;	  // init change completed flag
    if (curSlide > 0) {   // special case 1st slide
   s1 = document.getElementById('slide' + String(curSlide));
   curLeft = parseInt(s1.style.left) - opIncrement;
     }
   s2 = document.getElementById('slide' + String(nextSlide));
   nextLeft = parseInt(s2.style.left) - opIncrement;

    if (nextLeft >= 0) {
      if (curSlide > 0) { moveSlide(s1, 0, curLeft); }
      moveSlide(s2, 0, nextLeft);
      if (showStats) { stats(); }
      timeoutID = setTimeout('moverNext()', delay);  // Not done - Come back after delay
    } else {
    switchFlag = 1;
    if (curSlide < 1) { curSlide = 0; nextSlide = 1; // special case 1st slide
      } else {
// put 'invisible' curSlide back into stack
    document.getElementById('slide' + String(curSlide)).style.left = String(slideWidth) + "px";
    document.getElementById('desc' + String(curSlide)).style.top = String(slideHeight) + "px";
     }
    curSlide = nextSlide;
    nextSlide++;
    if (nextSlide > slideCount) { nextSlide = 1; cycleCount++; }
   }

  if (switchFlag == 1) {
   showDesc();
     if (showStats) { stats(); }
    timeoutID = setTimeout('doIdle()', idleTime * 1000);
   }

 } // end moverNext()

function showDesc() {
  theDesc = document.getElementById('desc' + String(curSlide));
  theDescBG = document.getElementById('descBG' + String(curSlide));
   curDTop = parseInt(theDesc.style.top) - opIncrement;
    if (curDTop >= (slideHeight - descHeight)) {
      moveSlide(theDesc, curDTop, 0);
      moveSlide(theDescBG, curDTop, 0);
      timeoutID = setTimeout('showDesc()', delay);      // Not this time, so continue transition!
     if (showStats) { stats(); }
    } else {
     if (showStats) { stats(); }
   }
 } // end showDesc()

function hideDesc() {
  theDesc = document.getElementById('desc' + String(curSlide));
  theDescBG = document.getElementById('descBG' + String(curSlide));
   curDTop = parseInt(theDesc.style.top) + opIncrement;
    if (curDTop <= slideHeight) {
      moveSlide(theDesc, curDTop, 0);
      moveSlide(theDescBG, curDTop, 0);
      timeoutID = setTimeout('hideDesc()', delay);      // Not this time, so continue transition!
     if (showStats) { stats(); }
    } else {
     if (showStats) { stats(); }
   }
 } // end hideDesc()

function moverPrevious() {
     switchFlag = 0;				  // No! Continue processing fade/transition sequence
    if (curSlide == "slide1") {
     s1Left += opIncrement;			  // Move Slide 1 to the left by opIncrement
     if (s1Left >= slideWidth) {
        curSlide = "slide2";			  // switch current slide
        s2BoxObject.style.zIndex = '22';
        s1BoxObject.style.zIndex = '21';	  // swap z-idexes
        s1Top = 0;				  // slide #1 top position
        s1Left = 0;				  // slide #1 left position
        s1Object.src = gallery[nextSlide];
        switchFlag = 1;				  // Show we switched slides
      } // endif op1 >= slideWidth
     moveSlide(s1BoxObject, s1Top, s1Left);
   } else {
     s2Left += opIncrement;
     if (s2Left >= slideWidth) {
        curSlide = "slide1";			  // switch current slide
        s1BoxObject.style.zIndex = '22';
        s2BoxObject.style.zIndex = '21';	  // swap z-idexes
        s2Top = 0;				  // slide #2 top position
        s2Left = 0;				  // slide #2 left position
        s2Object.src = gallery[nextSlide];
        switchFlag = 1;				  // Show we switched slides
     } // endif op2 >= slideWidth
     moveSlide(s2BoxObject, s2Top, s2Left);
   } // endif curSlide == "slide2"

   if ((cycleCount < maxCycles) || (maxCycles == 0)) { // Have we completed slideshow cycles?
      if (switchFlag == 0) {			       // No! Did we switch slides?
        timeoutID = setTimeout('moverPrevious()', delay);      // Not this time, so continue transition!
          } else {
        if (nextSlide == gallery.length) { nextSlide = 0; cycleCount++; }
      } // endif switchFlag
    } // endif cycleCount

   if (showStats) { stats(); } // display variables data

 } // end moverPrevious()



  function pauseShow() {
     pauseFlag = 1;
     return true;
   }

  function resumeShow() {
     pauseFlag = 0;
     return true;
  }

    function stats() {
         sMessage = '<p>curTop = ' + curTop;
         sMessage += '<br>curLeft = ' + curLeft;
         sMessage += '<br>curSlide = ' + curSlide;
         sMessage += '<br>nextSlide = ' + nextSlide;
      for (i=1; i<=slideCount; i++) {
        s2 = document.getElementById('slide' + String(i));
        sMessage += '<br>s' + i + 'Top = ' + parseInt(s2.style.top);
        sMessage += '<br>s' + i + 'Left = ' + parseInt(s2.style.left);
      } 
         sMessage += '<br>Cycle = ' + cycleCount;
         sMessage += '</p>';
         document.getElementById('status').innerHTML = sMessage;
      } // end stats()



