/**************************************************************	Script		: SlideShow	Version		: 1.3	Authors		: Samuel Birch	Desc		: 	Licence		: Open Source MIT Licence**************************************************************/var SlideShow = new Class({		getOptions: function(){		return {			effect: 'fade', //fade|wipe|slide|random			duration: 2000,			transition: Fx.Transitions.linear,			direction: 'right', //top|right|bottom|left|random			color: false,			wait: 5000,			loop: false,			thumbnails: false,			thumbnailCls: 'outline',			backgroundSlider: false,			loadingCls: 'loading',			onClick: false		};	},	initialize: function(container, images, options){		this.setOptions(this.getOptions(), options);				this.container = $(container);		this.container.setStyles({			position: 'relative',			overflow: 'hidden'		});		if(this.options.onClick){			this.container.addEvent('click', function(){				this.options.onClick(this.imageLoaded);			}.bind(this));		}						this.imagesHolder = new Element('div').setStyles({			position: 'absolute',			overflow: 'hidden',			top: this.container.getStyle('height'),			left: 0,			width: '0px',			height: '0px',			display: 'none'		}).injectInside(this.container);				if($type(images) == 'string' && !this.options.thumbnails){			var imageList = [];			$$('.'+images).each(function(el){				imageList.push(el.src);				el.injectInside(this.imagesHolder);			},this);			this.images = imageList;					}else if($type(images) == 'string' && this.options.thumbnails){			var imageList = [];			var srcList = [];			this.thumbnails = $$('.'+images);			this.thumbnails.each(function(el,i){				srcList.push(el.href);				imageList.push(el.getElement('img'));				el.href = 'javascript:;';				el.addEvent('click',function(){					this.stop();					this.play(i);				 				}.bind(this,el,i));			},this);			this.images = srcList;			this.thumbnailImages = imageList;						if(this.options.backgroundSlider){				this.bgSlider = new BackgroundSlider(this.thumbnailImages,{mouseOver: false, duration: this.options.duration, className: this.options.thumbnailCls, padding:{top:0,right:-2,bottom:-2,left:0}});				this.bgSlider.set(this.thumbnailImages[0]);			}				}else{			this.images = images;		}				this.loading = new Element('div').addClass(this.options.loadingCls).setStyles({			position: 'absolute',			top: 0,			left: 0,			zIndex: 3,			display: 'none',			width: this.container.getStyle('width'),			height: this.container.getStyle('height')		}).injectInside(this.container);				this.oldImage = new Element('div').setStyles({			position: 'absolute',			overflow: 'hidden',			top: 0,			left: 0,			opacity: 0,			width: this.container.getStyle('width'),			height: this.container.getStyle('height')		}).injectInside(this.container);				this.newImage = this.oldImage.clone();		this.newImage.injectInside(this.container);								this.timer = 0;		this.image = -1;		this.imageLoaded = 0;		this.stopped = true;		this.started = false;		this.animating = false;	},		load: function(){		$clear(this.timer);		this.loading.setStyle('display','block');		this.image++;		var img = this.images[this.image];		delete this.imageObj;				doLoad = true;		this.imagesHolder.getElements('img').each(function(el){			var src = this.images[this.image];			if(el.src == src){				this.imageObj = el;				doLoad = false;				this.add = false;				this.show();			}		},this);				if(doLoad){			this.add = true;			this.imageObj = new Asset.image(img, {onload: this.show.bind(this)});		}			},	show: function(add){				if(this.add){			this.imageObj.injectInside(this.imagesHolder);		}				this.newImage.setStyles({			zIndex: 1,			opacity: 0		});		var img = this.newImage.getElement('img');		if(img){			img.replaceWith(this.imageObj.clone());		}else{			var obj = this.imageObj.clone();			obj.injectInside(this.newImage);		}		this.imageLoaded = this.image;		this.loading.setStyle('display','none');		if(this.options.thumbnails){						if(this.options.backgroundSlider){				var elT = this.thumbnailImages[this.image];				this.bgSlider.move(elT);				this.bgSlider.setStart(elT);			}else{				this.thumbnails.each(function(el,i){					el.removeClass(this.options.thumbnailCls);					if(i == this.image){						el.addClass(this.options.thumbnailCls);					}				},this);			}		}		this.effect();	},		wait: function(){		this.timer = this.load.delay(this.options.wait,this);	},		play: function(num){		if(this.stopped){			if(num > -1){this.image = num-1};			if(this.image < this.images.length){				this.stopped = false;				if(this.started){					this.next();				}else{					this.load();				}				this.started = true;			}		}	},		stop: function(){		$clear(this.timer);		this.stopped = true;	},		next: function(wait){		var doNext = true;		if(wait && this.stopped){			doNext = false;		}		if(this.animating){			doNext = false;		}		if(doNext){			this.cloneImage();			$clear(this.timer);			if(this.image < this.images.length-1){				if(wait){					this.wait();				}else{					this.load();					}			}else{				if(this.options.loop){					this.image = -1;					if(wait){						this.wait();					}else{						this.load();						}				}else{					this.stopped = true;				}			}		}	},		previous: function(){		if(this.imageLoaded == 0){			this.image = this.images.length-2;			}else{			this.image = this.imageLoaded-2;		}		this.next();	},		cloneImage: function(){		var img = this.oldImage.getElement('img');		if(img){			img.replaceWith(this.imageObj.clone());		}else{			var obj = this.imageObj.clone();			obj.injectInside(this.oldImage);		}				this.oldImage.setStyles({			zIndex: 0,			top: 0,			left: 0,			opacity: 1		});				this.newImage.setStyles({opacity:0});	},			effect: function(){		this.animating = true;		this.effectObj = this.newImage.effects({			duration: this.options.duration,			transition: this.options.transition		});				var myFxTypes = ['fade','wipe','slide'];		var myFxDir = ['top','right','bottom','left'];				if(this.options.effect == 'fade'){			this.fade();					}else if(this.options.effect == 'wipe'){			if(this.options.direction == 'random'){				this.setup(myFxDir[Math.floor(Math.random()*(3+1))]);			}else{				this.setup(this.options.direction);			}			this.wipe();					}else if(this.options.effect == 'slide'){			if(this.options.direction == 'random'){				this.setup(myFxDir[Math.floor(Math.random()*(3+1))]);			}else{				this.setup(this.options.direction);			}			this.slide();					}else if(this.options.effect == 'random'){			var type = myFxTypes[Math.floor(Math.random()*(2+1))];			if(type != 'fade'){				var dir = myFxDir[Math.floor(Math.random()*(3+1))];				if(this.options.direction == 'random'){					this.setup(dir);				}else{					this.setup(this.options.direction);				}			}else{				this.setup();			}			this[type]();		}	},		setup: function(dir){		if(dir == 'top'){			this.top = -this.container.getStyle('height').toInt();			this.left = 0;			this.topOut = this.container.getStyle('height').toInt();			this.leftOut = 0;					}else if(dir == 'right'){			this.top = 0;			this.left = this.container.getStyle('width').toInt();			this.topOut = 0;			this.leftOut = -this.container.getStyle('width').toInt();					}else if(dir == 'bottom'){			this.top = this.container.getStyle('height').toInt();			this.left = 0;			this.topOut = -this.container.getStyle('height').toInt();			this.leftOut = 0;					}else if(dir == 'left'){			this.top = 0;			this.left = -this.container.getStyle('width').toInt();			this.topOut = 0;			this.leftOut = this.container.getStyle('width').toInt();					}else{			this.top = 0;			this.left = 0;			this.topOut = 0;			this.leftOut = 0;		}	},		fade: function(){		this.effectObj.start({			opacity: [0,1]		});		this.resetAnimation.delay(this.options.duration+90,this);		if(!this.stopped){		this.next.delay(this.options.duration+100,this,true);		}	},		wipe: function(){		this.oldImage.effects({			duration: this.options.duration,			transition: this.options.transition		}).start({			top: [0,this.topOut],			left: [0, this.leftOut]		})		this.effectObj.start({			top: [this.top,0],			left: [this.left,0],			opacity: [1,1]		},this);		this.resetAnimation.delay(this.options.duration+90,this);		if(!this.stopped){		this.next.delay(this.options.duration+100,this,true);		}	},		slide: function(){		this.effectObj.start({			top: [this.top,0],			left: [this.left,0],			opacity: [1,1]		},this);		this.resetAnimation.delay(this.options.duration+90,this);		if(!this.stopped){		this.next.delay(this.options.duration+100,this,true);		}	},		resetAnimation: function(){		this.animating = false;	}	});SlideShow.implement(new Options);SlideShow.implement(new Events);/*************************************************************/
