// fadegallery framework, version 1.4.0

// par Takashi Okamoto

// infos supplementaires sur http://www.mudcorp.com/





var FadeGallery = Class.create();



FadeGallery.FADE_UP = new Array(0, 6, 11, 17, 23, 30, 38, 47, 56, 66, 75, 84, 92, 100);



FadeGallery.prototype = {



	onFadeStart: function() {

		$(this.id+"_num").innerHTML = "image " + (this.imgCurrent+1) + "/" + this.imgTotal;

	},

	

	initialize: function(thisObj, id, imgsArray, options) {

		this.id = id;

		this.thisObj = thisObj;

		this.imgsArray = imgsArray;

		this.imgTotal = imgsArray.length;

		this.opacity = 100;

		this.fadeFrame = 0;

		this.timerID = null;

		this.apTimerID = null;

		this.imgsLoaded = new Array(this.imgTotal);

		this.options = options;

		this.start = 0;

		this.imgCurrent = (this.options.startNum) ? this.options.startNum : 0;

		if (this.options.preload) {

			window.setTimeout(this.thisObj+'.preloadImgs()', 50);

		}

		if (this.options.autoplay > 0) {

			var delay = this.options.autoplay * 1000 + 1000;

			this.apTimerID = window.setTimeout(this.thisObj + '.autoplayImgs(' + delay + ')', delay);

		}

	},

	

	changeImg: function(imgNum) {

		if (!this.imgsLoaded[imgNum]) {

			this.loadImgNumber(imgNum);

		}

		$(this.id).src = this.imgsLoaded[imgNum].src;

	},

	

	nextImg: function() {

		this.imgCurrent++;

		if (this.imgCurrent == this.imgTotal) {

			this.imgCurrent = 0;

		}

		this.doFade();

	},

	

	prevImg: function() {

		this.imgCurrent--;

		if (this.imgCurrent == -1) {

			this.imgCurrent = this.imgTotal - 1;

		}

		this.doFade();

	},

	

	showImg: function(imgNum) {

		if (this.imgCurrent != imgNum) {

			if (this.imgCurrent == -1) {

				this.imgCurrent = this.imgTotal - 1;

			}

			else if (this.imgCurrent > this.imgTotal-1) {

				this.imgCurrent = 0;

			}

			else this.imgCurrent = imgNum;

			this.doFade();

		}

	},

	

	doFade: function() {

		this.onFadeStart();

		Element.hide(this.id);

		window.setTimeout(this.thisObj+'.changeImg('+this.imgCurrent+')', 50);

		if (!(/MSIE/.test(navigator.userAgent) && /Mac/.test(navigator.userAgent)))

			this.startFade();

		else {

			Element.show(this.id);

		}

	},

	

	startFade: function() {

		if (this.timerID) {

			window.clearTimeout(this.timerID);

			this.timerID = null;

		}

		this.timerID = window.setTimeout(this.thisObj + ".fade()", 500);

	},

	

	preloadImgs: function() {

		for (var i = 0; i < this.imgTotal; i++) {

			this.loadImgNumber(i);

		}

	},

	

	loadImgNumber: function(imgNumber) {

		if (!this.imgsLoaded[imgNumber]) {

			this.imgsLoaded[imgNumber] = new Image();

			this.imgsLoaded[imgNumber].src = this.imgsArray[imgNumber].image;

		}

	},

	

	autoplayImgs: function(delay) {

		if (this.apTimerID) {

			window.clearTimeout(this.apTimerID);

			this.apTimerID = null;

		}

		this.nextImg();

		this.apTimerID = window.setTimeout(this.thisObj + ".autoplayImgs(" + delay + ")", delay);

	},

	

	apStart: function(delay) {

		if (this.start == 1){

    		this.start = 0;

        this.apStop(delay);

    }

    else{

    		if (!delay || delay < 1) delay = 1;

    		delay = delay * 1500 + 1500;

    		this.autoplayImgs(delay);

    		this.start = 1;

    }

	},

	

	apStop: function(delay) {

		if (this.apTimerID) {

			window.clearTimeout(this.apTimerID);

			this.apTimerID = null;

		}

	},

	

	fade: function() {

		if (this.timerID) {

			window.clearTimeout(this.timerID);

			this.timerID = null;

		}

		this.calcOpacity(this.fadeFrame);

		this.setOpacity(this.opacity);

		this.fadeFrame++;

		if ($(this.id).style.display == "none") Element.show(this.id);

		if (this.fadeFrame < FadeGallery.FADE_UP.length) {

			this.timerID = window.setTimeout(this.thisObj + ".fade()", 20);

		}

		else {

			this.fadeFrame = 0;

		}

	},

	

	calcOpacity: function(frameNumber) {

		this.opacity = FadeGallery.FADE_UP[frameNumber];

	},

	

	setOpacity: function(opacity) {

		var obj = $(this.id).style;

		opacity = (opacity == 100) ? 99.999 : opacity;

		obj.filter = "alpha(opacity:"+opacity+")";

		obj.KHTMLOpacity = opacity/100;	

		obj.MozOpacity = opacity/100;

		obj.opacity = opacity/100;

	}

}

