﻿function Slide(imageSource, link, text, target, attributes)
{   this.imageSource = imageSource;
    this.link = link;
    this.text = text;
    this.target = target;
    this.attrib = attributes;
    if (document.images)
    { this.image = new Image(); }
    this.loaded = false;
    
    this.load = function()
    { if (!document.images)
        return;
      if (!this.loaded)
      { this.image.src = this.imageSource;
        this.loaded = true; }
    }
}

function InitializeSlides(namesList, slidesRotator)
{   Slides = new SlideShow("Slides");
    Slides.timeout = 5000;
    Slides.prefetch = -1;
    Slides.repeat = true;
    for (index = 0; index < namesList.length; index++)
    {   var newSlide = new Slide();
        newSlide.imageSource = '../GallPics/' + namesList[index];
        newSlide.text = newSlide.link = newSlide.target = newSlide.attr = newSlide.filter = '';
        Slides.add_slide(newSlide); }
    Slides.image = Slides.getElementById(slidesRotator);
    Slides.update();
    Slides.play();
}

function SlideShow(slideShowName)
{   this.name = slideShowName;
    this.repeat = true;
    this.prefetch = -1;
    this.image;
    this.textid;
    this.textarea;
    this.timeout = 1000;
    this.slides = new Array();
    this.current = 0;
    this.timeoutid = 0;
    
    this.add_slide = function(newSlide)
    {   var slidesCount = this.slides.length;
        if (this.prefetch == -1)
            newSlide.load();
        this.slides[slidesCount] = newSlide;
    }
    
    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.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.shuffle = function()
    {   var i, i2, clonedSlides, randomizedSlides;
        clonedSlides = new Array();
        for (i = 0; i < this.slides.length; i++)
        {   clonedSlides[i] = this.slides[i]; }
        
        randomizedSlides = new Array();
        do
        {   i = Math.floor(Math.random() * clonedSlides.length);
            randomizedSlides[randomizedSlides.length] = clonedSlides[i];
            for (i2 = i + 1; i2 < clonedSlides.length; i2++)
            { clonedSlides[i2 - 1] = clonedSlides[i2]; }
            clonedSlides.length--;
        } while (clonedSlides.length);
        this.slides = randomizedSlides;
    }

    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.noscript = function()
    {   $html = "\n";
        for (i = 0; i < this.slides.length; i++)
        {   slide = this.slides[i];
            $html += '<P>';
            if (slide.link)
                $html += '<a href="' + slide.link + '">';
            $html += '<img src="' + slide.imageSource + '" ALT="SlideShow Image">';
            if (slide.link)
                $html += "<\/a>";
            if (slide.text)
                $html += "<BR>\n" + slide.text;
            $html += "<\/P>" + "\n\n"; }
        $html = $html.replace(/\&/g, "&amp;");
        $html = $html.replace(/</g, "&lt;");
        $html = $html.replace(/>/g, "&gt;");
        return ('<pre>' + $html + '</pre>');
    }
    
    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.getElementById = function(element_id)
    {   if (document.getElementById)
            return document.getElementById(element_id);
        else if (document.all)
            return document.all[element_id];
        else if (document.layers)
            return document.layers[element_id];
        else return undefined;
    }
}