// TNC dynamic html slideshow JavaScript Document /*==================================================* $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. *==================================================*/ //================================================== // slide object //================================================== function slide(src,link,text,target,attr) { // This is the constructor function for the slide object. // It is called automatically when you create a new slide object. // For example: // s = new slide(); // Image URL this.src = src; // Link URL this.link = link; // Text to display this.text = text; // Photo credit this.target = target; // Custom duration for the slide, in milliseconds. // This is an optional parameter. // this.timeout = 3000 // Attributes for the target window: // width=n,height=n,resizable=yes or no,scrollbars=yes or no, // toolbar=yes or no,location=yes or no,directories=yes or no, // status=yes or no,menubar=yes or no,copyhistory=yes or no // Example: "width=200,height=300" // Create an image object for the slide if (document.images) { this.image = new Image(); } // Flag to tell when load() has already been called this.loaded = false; //-------------------------------------------------- this.load = function() { // This method loads the image for the slide if (!document.images) { return; } if (!this.loaded) { this.image.src = this.src; this.loaded = true; } } } //================================================== // slideshow object //================================================== function slideshow( slideshowname ) { // This is the constructor function for the slideshow object. // It is called automatically when you create a new object. // For example: // ss = new slideshow("ss"); // Name of this object // (required if you want your slideshow to auto-play) // For example, "SLIDES1" this.name = slideshowname; // Number of images to pre-fetch. // -1 = preload all images. // 0 = load each image as it is used. // n = pre-fetch n images ahead of the current image. // I recommend preloading all images unless you have large // images, or a large amount of images. this.prefetch = -1; // IMAGE element on your HTML page. // For example, document.images.SLIDES1IMG this.image; // ID of a DIV element on your HTML page that will contain the text. // For example, "slides2text" // Note: after you set this variable, you should call // the update() method to update the slideshow display. this.textid; // TEXTAREA element on your HTML page. // For example, document.SLIDES1FORM.SLIDES1TEXT // This is a depracated method for displaying the text, // but you might want to supply it for older browsers. this.textarea; // Hook functions to be called before and after updating the slide // this.pre_update_hook = function() { } // this.post_update_hook = function() { } // These are private variables this.slides = new Array(); this.current = 0; //-------------------------------------------------- // Public methods //-------------------------------------------------- this.add_slide = function(slide) { // Add a slide to the slideshow. // For example: // SLIDES1.add_slide(new slide("s1.jpg", "link.html")) var i = this.slides.length; // Prefetch the slide image if necessary if (this.prefetch == -1) { slide.load(); } this.slides[i] = slide; } //-------------------------------------------------- this.update = function() { // This method updates the slideshow image on the page // Make sure the slideshow has been initialized correctly if (! this.valid_image()) { return; } // Convenience variable for the current slide var slide = this.slides[ this.current ]; // Determine if the browser supports filters var dofilter = false; if (this.image && typeof this.image.filters != 'undefined' && typeof this.image.filters[0] != 'undefined') { dofilter = true; } // Load the slide image if necessary slide.load(); // Update the image. this.image.src = slide.image.src; // Play the image transition filters if (dofilter) { this.image.filters[0].Play(); } // Update the text this.display_text(); // Call the post-update hook function if one was specified if (typeof this.post_update_hook == 'function') { this.post_update_hook(); } // Do we need to pre-fetch images? if (this.prefetch > 0) { var next, prev, count; // Pre-fetch the next slide image(s) next = this.current; prev = this.current; count = 0; do { // Get the next and previous slide number // Loop past the ends of the slideshow if necessary if (++next >= this.slides.length) next = 0; if (--prev < 0) prev = this.slides.length - 1; // Preload the slide image this.slides[next].load(); this.slides[prev].load(); // Keep going until we have fetched // the designated number of slides } while (++count < this.prefetch); } } //-------------------------------------------------- this.next = function() { // This method advances to the next slide. // Increment the image number if (this.current < this.slides.length - 1) { this.current++; } else if (this.repeat) { this.current = 0; } this.update(); } //-------------------------------------------------- this.previous = function() { // This method goes to the previous slide. // Decrement the image number if (this.current > 0) { this.current--; } else if (this.repeat) { this.current = this.slides.length - 1; } this.update(); } //-------------------------------------------------- this.get_text = function() { // This method returns the text of the current slide return(this.slides[ this.current ].text); } //-------------------------------------------------- this.get_all_text = function(before_slide, after_slide) { // Return the text for all of the slides. // For the text of each slide, add "before_slide" in front of the // text, and "after_slide" after the text. // For example: // document.write("