/*
This file is part of JonDesign's SmoothSlideshow v2.0.
JonDesign's SmoothSlideshow 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.
JonDesign's SmoothSlideshow is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Foobar; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Main Developer: Jonathan Schemoul (JonDesign: http://www.jondesign.net/)
Contributed code by:
- Christian Ehret (bugfix)
- Simon Willison (addLoadEvent)
*/
// declaring the class
var timedSlideShow = Class.create();
// implementing the class
timedSlideShow.prototype = {
initialize: function(element, data) {
this.currentIter = 0;
this.lastIter = 0;
this.maxIter = 0;
this.slideShowElement = element;
this.slideShowData = data;
this.slideShowInit = 1;
this.slideElements = Array();
this.slideShowDelay = 9000;
this.articleLink = "";
this.slideInfoZone = "";
element.style.display="block";
this.articleLink = document.createElement('a');
this.articleLink.className = 'global';
element.appendChild(this.articleLink);
this.articleLink.href = "";
this.maxIter = data.length;
for(i=0;i<data.length;i++)
{
var currentImg = document.createElement('div');
currentImg.className = "slideElement";
currentImg.style.position="absolute";
currentImg.style.left="0px";
currentImg.style.top="0px";
currentImg.style.margin="0px";
currentImg.style.border="0px";
currentImg.style.backgroundImage="url('" + data[i][0] + "')";
currentImg.style.backgroundPosition="center center";
this.articleLink.appendChild(currentImg);
currentImg.currentOpacity = new fx.Opacity(currentImg, {duration: 400});
currentImg.setStyle('opacity',0);
this.slideElements[parseInt(i)] = currentImg;
}
this.loadingElement = document.createElement('div');
this.loadingElement.className = 'loadingElement';
this.articleLink.appendChild(this.loadingElement);
this.slideInfoZone = document.createElement('div');
this.slideInfoZone.className = 'slideInfoZone';
this.articleLink.appendChild(this.slideInfoZone);
this.slideInfoZone.style.opacity = 0;
this.doSlideShow();
},
destroySlideShow: function(element) {
var myClassName = element.className;
var newElement = document.createElement('div');
newElement.className = myClassName;
element.parentNode.replaceChild(newElement, element);
},
startSlideShow: function() {
this.loadingElement.style.display = "none";
this.lastIter = this.maxIter - 1;
this.currentIter = 0;
this.slideShowInit = 0;
this.slideElements[parseInt(this.currentIter)].setStyle('opacity', 1);
setTimeout(this.showInfoSlideShow.bind(this),1000);
setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);
setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);
},
nextSlideShow: function() {
this.lastIter = this.currentIter;
this.currentIter++;
if (this.currentIter >= this.maxIter)
{
this.currentIter = 0;
this.lastIter = this.maxIter - 1;
}
this.slideShowInit = 0;
this.doSlideShow.bind(this)();
},
doSlideShow: function() {
if (this.slideShowInit == 1)
{
imgPreloader = new Image();
// once image is preloaded, start slideshow
imgPreloader.onload=function(){
setTimeout(this.startSlideShow.bind(this),10);
}.bind(this);
imgPreloader.src = this.slideShowData[0][0];
} else {
if (this.currentIter != 0) {
this.slideElements[parseInt(this.currentIter)].currentOpacity.options.onComplete = function() {
this.slideElements[parseInt(this.lastIter)].setStyle('opacity',0);
}.bind(this);
this.slideElements[parseInt(this.currentIter)].currentOpacity.custom(0, 1);
} else {
this.slideElements[parseInt(this.currentIter)].setStyle('opacity',1);
this.slideElements[parseInt(this.lastIter)].currentOpacity.custom(1, 0);
}
setTimeout(this.showInfoSlideShow.bind(this),1000);
setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);
setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);
}
},
showInfoSlideShow: function() {
this.articleLink.removeChild(this.slideInfoZone);
this.slideInfoZone = document.createElement('div');
this.slideInfoZone.styles = new fx.Styles(this.slideInfoZone);
this.slideInfoZone.setStyle('opacity',0);
var slideInfoZoneTitle = document.createElement('h2');
slideInfoZoneTitle.innerHTML = this.slideShowData[this.currentIter][2]
this.slideInfoZone.appendChild(slideInfoZoneTitle);
var slideInfoZoneDescription = document.createElement('p');
slideInfoZoneDescription.innerHTML = this.slideShowData[this.currentIter][3];
this.slideInfoZone.appendChild(slideInfoZoneDescription);
this.articleLink.appendChild(this.slideInfoZone);
this.articleLink.href = this.slideShowData[this.currentIter][1];
this.slideInfoZone.className = 'slideInfoZone';
this.slideInfoZone.normalHeight = this.slideInfoZone.getStyle('height', true).toInt();
this.slideInfoZone.styles.custom({'opacity': [0, 0.7], 'height': [0, this.slideInfoZone.normalHeight]});
},
hideInfoSlideShow: function() {
this.slideInfoZone.styles.custom({'opacity': [0.7, 0]});
}
};
function initTimedSlideShow(element, data) {
var slideshow = new timedSlideShow(element, data);
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
