/* imgFader, version 1.0
* (c) 2008 Malte Sieb (http://www.maltesieb.de)
*
* imgFader is freely distributable under the terms of the GPL license.
* For details, see my web site: http://www.maltesieb.org/skripte
*
*--------------------------------------------------------------------------
*
* c Container element id
* ce Current visible element
* pe Previous visible element
* fps Frames per second
* eo Current elements opacity
* po Previous elements opacity
*
* _g Get Alias for document.getElementById
* _a Append Append new image element to container
* _u Update Rebuild container after resorting images
* _so Set opacity (element,aim of opacity) Set opacity in 2 different methods
* _f Fade function is called each frame
* _s Show Start fading to next image
*/
var Fade=function(c,d) {
/* Default values */
this.fDur=1;
this.delay=6;
this.imgs=new Array();
this.clear=true;
for (var i in d) this[i]=d[i];
/* Prevent longer fade duration than delay */
if (this.fDur>this.delay) this.fDur=this.delay;
/* Script variables */
this.ce=0;
this.eo=1;
this.po=0;
this.fps=25;
this.c=c;
/* Prepare container element and put all images into it */
if (this.clear) this._g(this.c).innerHTML='';
this._g(c).style.position='relative';
for (i=0;i'+"\n";
this._g('img'+i).style.position='absolute';
this._so(i,(i==this.ce?this.eo:(i==this.pe?this.po:0)));
};
/**
* Rebuild container e.g. after resorting images
*/
Fade.prototype._u=function(n) {
this.imgs=n;
this._g(this.c).innerHTML='';
for (i=0;i1?1:(o<0?0:o);
e.style.opacity=o;
e.style.filter="alpha(opacity="+(o*100)+")";
};
Fade.prototype._f=function(){
if (this.eo>=1) {window.clearInterval(this.f);}
var d=1/(this.fps*this.fDur);
this._so(this.pe,(this.po-=d));
this._so(this.ce,(this.eo+=d));
};
Fade.prototype._s = function(ce) {
if (this.s) {window.clearInterval(this.s);window.clearInterval(this.f);}
for (i=0;i0) {
this.pe=this.ce;
if (ce || ce==0) {
this.ce=ce;
this.fe=null;
} else if (this.mode=='random') {
do r=Math.round((Math.random()*this.imgs.length)-0.499);
while(r==this.ce);
this.ce=r;
} else {
if (++this.ce>(this.imgs.length-1)) {
this.ce=0;
}
}
this.eo=0;
this.po=1;
this.f=window.setInterval(function() { p._f(); },Math.round(this.fDur*1000/this.fps));
}
this.start();
};
Fade.prototype.add = function(img,d) {
var p,n=new Array();
p=this._d(img);
if (!p || d.force) {
if (d.pos && d.pos=='first') d.pos=1;
if (d.pos && d.pos<=this.imgs.length) {
d.pos--;
for (i=0;i=d.pos){this.ce++;}
if (this.pe>=d.pos){this.pe++;}
this._u(n);
p=d.pos;
} else {
this.imgs[this.imgs.length]=img;
p=this.imgs.length-1;
this._a(p,img);
}
}
if (d.mode && d.mode=='immediate') {this._s(p);}
};
Fade.prototype.go=function(p) {
if (typeof p=='string' && p.indexOf('+')>-1) {
p=parseInt(p.substr(1))+this.ce+1;
if (p>this.imgs.length) p=p-this.imgs.length;
} else if (typeof p=='string' && p.indexOf('-')>-1) {
p=this.ce-parseInt(p.substr(1))+1;
if (p<=0) p=p+this.imgs.length;
}
this._s(parseInt(p)-1);
};
Fade.prototype.preload = function(img) {
var i=new Image;
i.src=img;
};