/*
* Script : Diapo plugin for DOMAssistant
* Auteur:  Samuel desnoes - http://www.ifacta.fr
* Création : 26 01 2010
* Version : 0.1b - 27 01 2010 ( for DOMAssistant v2.7 )
* Licence : X11 - MIT
* Documentation : http://www.ifacta.fr/labo/scripts/domassistant.diapo/
* Requires DOMAssistant library - http://www.domassistant.com
*/

DOMAssistant.diapo = function () {
	return {
		
		targ : null,
		curDisplay : 1,
		currentInd : 1,
		preloader : null,
		opt : {
			delay : 4,
			fadeSpeed : 30
		},
		timerFade : false,
		timerDelay : false,
		curOpacity : 100,

		publicMethods : [
			"addImg",
			"diapo"
		],
			
		diapo : function (opt) {
			if (opt && typeof opt === "object") {
				DOMAssistant.diapo.opt = opt
			}
			var cont;
			if (typeof $$(this).id === "undefined") {
				$$(this).setAttributes({
					id : "DADiapoImg1"
				});
			}
			DOMAssistant.diapo.targ = $$(this).id;
			$$(DOMAssistant.diapo.targ).setStyle({
				display : "block",
				position : "absolute",
				top : 0
			});
			cont = $$(this.parentNode).create("div", {
				id : "DADiapoCont"
			}, 1).setStyle({
				position : "relative",
				margin: 0,
				padding: 0,
				border: 0
			});
			$$(cont).create("img", {
				id : "DADiapoImg2",
				src : "",
				width : $$(DOMAssistant.diapo.targ).width,
				height : $$(DOMAssistant.diapo.targ).height
			}, 1).setStyle({
				display : "block",
				position: "absolute",
				top : 0
			});
			$$(cont).addContent($$(this));
			//alert($$(cont).innerHTML);//debug
			DOMAssistant.diapo.targ = $$(DOMAssistant.diapo.targ);
			DOMAssistant.diapo.preloader = $(document.body).create("img");
			DOMAssistant.diapo.preload();
			return $$(this);
		},
		
		addImg : function (urlImg) {
			if (typeof DOMAssistant.diapo.opt.images === "undefined") {
				DOMAssistant.diapo.opt.images = [];
			}
			DOMAssistant.diapo.opt.images.push(urlImg);
		},
		
		preload : function () {
			//alert(typeof DOMAssistant.diapo.opt.images + "\n" + DOMAssistant.diapo.opt.images.length);
			if (typeof DOMAssistant.diapo.opt.images !== "undefined" && DOMAssistant.diapo.opt.images.length > 0) {
				$$(DOMAssistant.diapo.preloader).removeEvent("load").addEvent("load", function () {
					//alert("Chargé");//debug
					DOMAssistant.diapo.change();
				}).setAttributes({
					src : DOMAssistant.diapo.opt.images[DOMAssistant.diapo.currentInd]
				});
				DOMAssistant.diapo.currentInd = (DOMAssistant.diapo.currentInd < DOMAssistant.diapo.opt.images.length - 1) ? (DOMAssistant.diapo.currentInd + 1) : 0;
			}
		},
		
		change : function () {
			//alert("changement!");//debug
			var curTarg = (DOMAssistant.diapo.curDisplay === 1) ? $$("DADiapoImg2") : $$(DOMAssistant.diapo.targ);
			//alert("display = " + DOMAssistant.diapo.curDisplay + "\nurl img : " + DOMAssistant.diapo.preloader.src + "\nTarget : " + $$(curTarg));//debug
			//alert($$(curTarg).id + "\ncourant : " + $$(curTarg).getAttribute("src") + "\ndoit afficher : " + $$(DOMAssistant.diapo.preloader).src);//debug
			$$(curTarg).removeEvent("load").addEvent("load", function () {
				//alert("démarrage timerDelay");//debug
				//alert("timerDelay : " + typeof DOMAssistant.diapo.timerDelay + "\n" + DOMAssistant.diapo.timerDelay);//debug
				if (DOMAssistant.diapo.timerDelay !== false) {
					clearTimeout(DOMAssistant.diapo.timerDelay);
				}
				//alert(DOMAssistant.diapo.curDisplay === 1);//debug
				DOMAssistant.diapo.timerDelay = (DOMAssistant.diapo.curDisplay === 1) ? setTimeout("DOMAssistant.diapo.fadeOut()", DOMAssistant.diapo.opt.delay * 1000) : setTimeout("DOMAssistant.diapo.fadeIn()", DOMAssistant.diapo.opt.delay * 1000);
				DOMAssistant.diapo.curDisplay = (DOMAssistant.diapo.curDisplay === 1) ? 2 : 1;
			}).setAttributes({
				src : $$(DOMAssistant.diapo.preloader).src
			});
			//$$(curTarg).src = $$(DOMAssistant.diapo.preloader).src;
			//alert("affiche : " + $$(curTarg).getAttribute("src"));//debug
		},
		
		fadeIn : function () {
			//alert("timerFade : " + typeof DOMAssistant.diapo.timerFade + "\n" + DOMAssistant.diapo.timerFade);//debug
			if (DOMAssistant.diapo.timerFade !== false) {
				clearTimeout(DOMAssistant.diapo.timerFade);
			}
			DOMAssistant.diapo.timerFade = setTimeout("DOMAssistant.diapo.changeOpacity(1)", DOMAssistant.diapo.opt.fadeSpeed);
		},
		
		fadeOut : function () {
			//alert("timerFade : " + typeof DOMAssistant.diapo.timerFade + "\n" + DOMAssistant.diapo.timerFade);//debug
			if (DOMAssistant.diapo.timerFade !== false) {
				clearTimeout(DOMAssistant.diapo.timerFade);
			}
			DOMAssistant.diapo.timerFade = setTimeout("DOMAssistant.diapo.changeOpacity(-1)", DOMAssistant.diapo.opt.fadeSpeed);
		},
		
		changeOpacity : function (dir) {
			//alert(dir);//debug
			//alert((dir < 0 && parseInt(DOMAssistant.diapo.curOpacity + (dir * 10)) <= 0));//debug
			if ((dir < 0 && parseInt(DOMAssistant.diapo.curOpacity + (dir * 10)) <= 0) || (dir > 0 && parseInt(DOMAssistant.diapo.curOpacity + (dir * 10)) >= 100)) {
				clearTimeout(DOMAssistant.diapo.timerFade);
				DOMAssistant.diapo.curOpacity = (dir < 0) ? 0 : 100;
				//alert("alpha(opacity=" + DOMAssistant.diapo.curOpacity + ")");//debug
				//alert($$(DOMAssistant.diapo.targ).tagName);//debug
				$$(DOMAssistant.diapo.targ).setStyle({
					filter : "alpha(opacity=" + DOMAssistant.diapo.curOpacity + ")",
					opacity : (DOMAssistant.diapo.curOpacity/100),
					"-moz-opacity" : (DOMAssistant.diapo.curOpacity/100),
					"-webkit-opacity" : (DOMAssistant.diapo.curOpacity/100)
				});
				DOMAssistant.diapo.preload();
			}
			else {
				DOMAssistant.diapo.curOpacity =  parseInt(DOMAssistant.diapo.curOpacity + (dir * 10));
				$$(DOMAssistant.diapo.targ).setStyle({
					filter : "alpha(opacity=" + DOMAssistant.diapo.curOpacity + ")",
					opacity : (DOMAssistant.diapo.curOpacity/100),
					"-moz-opacity" : (DOMAssistant.diapo.curOpacity/100),
					"-webkit-opacity" : (DOMAssistant.diapo.curOpacity/100)
				});
				DOMAssistant.diapo.timerFade = setTimeout("DOMAssistant.diapo.changeOpacity("+ dir +")", DOMAssistant.diapo.opt.fadeSpeed);
			}
		}
	};
}();

DOMAssistant.attach(DOMAssistant.diapo);
