/*==================================================*
 $Id: slideshow.js,v 1.16 2003/10/14 12:39:00 pat Exp $
 Copyright 2000-2003 Patrick Fitzgerald
 http://slideshow.barelyfitz.com/
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 *==================================================*/
function slide(src){
 this.src=src;
 if(document.images)
   this.image=new Image();
 this.loaded=false;
 this.load=function(){
   if(!document.images) 
	 return;
   if(!this.loaded){
     this.image.src=this.src;
     this.loaded=true;
   }
 }
}

function slideshow(slideshowname){
 this.name=slideshowname;
 this.repeat=true;
 this.prefetch=-1;
 this.image;
 this.timeout=4500;
 this.slides=new Array();
 this.current=0;
 this.timeoutid=0;
 this.add_slide=function(slide){ 
  var i=this.slides.length;
  if(this.prefetch==-1)
    slide.load();
  this.slides[i]=slide;
 }
 this.play=function(timeout){
  this.pause();
  if(timeout)
    this.timeout=timeout;
  if(typeof this.slides[this.current].timeout !='undefined')
    timeout=this.slides[this.current].timeout;
  else
    timeout=this.timeout;
  this.timeoutid=setTimeout(this.name + ".loop()",timeout);
 }
 this.pause=function(){  
  if(this.timeoutid !=0){
    clearTimeout(this.timeoutid);
    this.timeoutid=0;
   }
 }
 this.update=function(){
  if(!this.valid_image())
	return;
  if(typeof this.pre_update_hook =='function')
    this.pre_update_hook();
  var slide=this.slides[this.current];
  var dofilter = false;
  if(this.image && typeof this.image.filters !='undefined' && typeof this.image.filters[0] !='undefined')
    dofilter=true;
  slide.load();
  if(dofilter){
    if(slide.filter && this.image.style && this.image.style.filter)
	  this.image.style.filter=slide.filter;
    this.image.filters[0].Apply();
   }
  this.image.src=slide.image.src;
  if(dofilter)
    this.image.filters[0].Play();
  this.display_text();
  if(typeof this.post_update_hook =='function')
   this.post_update_hook();
  if(this.prefetch>0){
    var next,prev,count;
    next=this.current;
    prev=this.current;
    count=0;
    do{
      if(++next>=this.slides.length) next=0;
      if(--prev< 0) prev = this.slides.length-1;
      this.slides[next].load();
      this.slides[prev].load();
      }
	while(++count<this.prefetch);
  }
 }
 this.goto_slide=function(n){
  if(n==-1)
    n=this.slides.length-1;  
  if(n<this.slides.length &&n>=0)
    this.current=n;  
  this.update();
 }
 this.next=function(){
  if(this.current<this.slides.length-1)
    this.current++;
  else if(this.repeat)
    this.current=0;
  this.update();
 } 
 this.previous=function(){
  if(this.current>0)
    this.current--;
  else if(this.repeat)
    this.current = this.slides.length-1;  
  this.update();
 }
 this.display_text=function(text){
   if(!text)
     text=this.slides[this.current].text;
   if(this.textarea && typeof this.textarea.value !='undefined')
     this.textarea.value=text;
   if(this.textid){
      r=this.getElementById(this.textid);
      if(!r) return false;
      if(typeof r.innerHTML=='undefined') return false;
      r.innerHTML=text;
   }
 }
 this.loop=function(){
  if(this.current<this.slides.length-1){
    next_slide=this.slides[this.current+1];
    if (next_slide.image.complete==null || next_slide.image.complete)
       this.next();
  } 
  else
   this.next();
   this.play();
 }
 this.valid_image=function(){
  if(!this.image)
    return false;
  else
    return true;
 }
 this.set_image=function(imageobject){
  if(!document.images)
    return;
  this.image=imageobject;
 } 
}
