//alert("loading gallery_slideshows.inc.js");

// Flag to indicate if effects queue still busy
var IsLastOpFinished;

// Direction of slides
var right2left;

// Number of image now shown
var current;

// Number of image to slide in next
var next;

// Milliseconds between image changes
var viewtime;

// Paused or Playing
var paused;

// Image pointers
var imagetofade;
var imagetoslide;

// New Direction requested
var goleft2right;
var goright2left;

// Controls disabled
var ctldisabled;

function MarkImageAsLoaded(i) { // mark an image as loaded
if (debug) {mywindow.document.writeln('<br>MarkImageasLoaded '+i+'<br>');};
  var xy;
  imagestk[i][1] = true;
  xy = FindXY('splash');
  new Effect.Move('image_'+i, { x: xy[0], y: xy[1], mode: 'absolute', delay: 0, duration: 0 });
};

function IsImageLoaded(i) {
  return imagestk[i][1];
};

function goleft() {
  if (ctldisabled) {return;};
  ctldisabled = true;
  if (right2left) {
    goleft2right = false;
    goright2left = false;
  } else {
    goleft2right = false;  
    goright2left = true;
  };
  ctldisabled = false;
  if (paused) {pauseplay();};
};

function goright() {
  if (ctldisabled) {return;};
  ctldisabled = true;
  if (right2left) {
    goleft2right = true;
    goright2left = false;  
  } else {
    goleft2right = false;
    goright2left = false;
  };
  ctldisabled = false;
  if (paused) {pauseplay();};
};

function pauseplay() {
  var obj;
  var img;
  if (ctldisabled) {return;};
  ctldisabled = true;
  if (paused) {
    paused = false;
    if (IsLastOpFinished) {self.setTimeout('RunSequence()', viewtime);};
  } else {
    paused = true;
  };
  ctldisabled = false;
};

function StartSlideshow() {
  IsLastOpFinished = true;
  right2left = true;
  current = -1;
  next = 0;
  viewtime = 1000;
  paused = false;
  goleft2right = false;
  goright2left = false;
  ctldisabled = false;
  self.setTimeout('RunSequence()', viewtime);
};

function RunSequence() {
if (debug) {mywindow.document.writeln('<br>RunSequence '+next+', '+right2left+'<br>');};

  if (paused) {return;};
if (debug) {mywindow.document.writeln('RunSequence not paused, so continuing<br>');};
  if (!IsLastOpFinished) {return;};
if (debug) {mywindow.document.writeln('RunSequence last op is finished, so continuing<br>');};

// Deal with 'next' going out of bounds and also requested direction changes
  if ((next < 0) || goright2left) {
if (debug) {mywindow.document.writeln('RunSequence incrementing next and changing direction '+next+'<br>');};
    next = next + 2;
    right2left = true;
  } else if ((next > (imagestk.length-1)) || goleft2right) {
if (debug) {mywindow.document.writeln('RunSequence decrementing next and changing direction '+next+'<br>');};
    next = next - 2;
    right2left = false;
  } else {
if (debug) {mywindow.document.writeln('RunSequence next is OK and nothing requested, so no changes '+next+'<br>');};
  };

// Cancel direction change requests
  goright2left = false;
  goleft2right = false;

// Set image to fade and slide
  if (current==-1) {
    imagetofade = 'splash_effects';
  } else {
    imagetofade = 'image_'+current+'_effects';
  };
  imagetoslide = 'image_'+next+'_effects';

// Check next image to slide is loaded
  if (IsImageLoaded(next)) {
if (debug) {mywindow.document.writeln('RunSequence image is loaded, so continuing<br>');};
  } else {
if (debug) {mywindow.document.writeln('RunSequence image not loaded, so waiting a bit<br>');};
    self.setTimeout('RunSequence()', 500); // Wait a bit and try again
    return;
  };

// Get location of canvas again
  xy = FindXY('splash_effects');

// Fade and slide as appropriate
  IsLastOpFinished = false;
  if (right2left) { // slide right to left
if (debug) {mywindow.document.writeln('RunSequence fading '+imagetofade+' and sliding right to left '+imagetoslide+'<br>');};

    new Effect.Parallel(
      [
        new Effect.SlideLeftIn(
          imagetoslide
        ),
        new Effect.Fade(
          imagetofade
        )
      ],
      {
        delay: 1,
        duration: 2,
        afterFinish: function() { IsLastOpFinished = true; self.setTimeout('RunSequence()', viewtime); }
      }
      );
    current = next;
    next++;

  } else { // slide left to right

if (debug) {mywindow.document.writeln('RunSequence fading '+imagetofade+' and sliding left to right '+imagetoslide+'<br>');};

    new Effect.Parallel(
      [
        new Effect.SlideRightIn(
          imagetoslide
        ),
        new Effect.Fade(
          imagetofade
        )
      ],
      {
        delay: 1,
        duration: 2,
        afterFinish: function() { IsLastOpFinished = true; self.setTimeout('RunSequence()', viewtime); }
      }
    );
    current = next;
    next--;

  }; // if (right2left)

// Display texts
  html = '<div style="vertical-align: top; color: white; line-height: 14px; font-size: 14px; font-weight: bold; font-family: verdana;">';
  html = html+imagestk[current][2];
  html = html+'</div>';
  obj = this.document.getElementById('caption');
  obj.innerHTML = html;

  html = '<div style="vertical-align: top; color: white; line-height: 10px; font-size: 10px; font-weight: bold; font-family: verdana;">';
  html = html+imagestk[current][3];
  html = html+'</div>';
  obj = this.document.getElementById('credit');
  obj.innerHTML = html;
};

//alert("gallery_slideshows.inc.js loaded");


