/* TOUT LES COMMENTAIRES RESTENT A CHANGER ET OU AJOUTER!!! */

function varyOpacityESV(_paneNode,_delay){
	if(_paneNode==undefined) throw new Error("paneNode is undefined");
	if(_paneNode==null) throw new Error("paneNode is null");
	if(_delay==undefined) throw new Error("delay is undefined");
	if(_delay==null) throw new Error("delay is null");
	if(typeof(_delay)!="number") throw new Error("delay is not a number");

	/**
	 * Cette constante fixe le bloc dont on fiat changer l'opacité.
	 */
	var paneNode=_paneNode;
	/**
	 * Gets the pane node, i.e; the sliding block.
	 */
	this.getPaneNode=function() {
		return paneNode;
	}
	/**
	 * Cette constante fixe la durée d'un changement d'opacité en ms
	 */
	var delay=_delay;
	/**
	 * On définit l'opacité initiale, finale, et courante
	 */
	var opacityStart=getStyleValue(paneNode,"opacity");
	var opacityEnd=0;
	var opacity=opacityStart;
	
	/**
	 * This private constant defines the delay of the timeline internally used 
	 * by the slider. CAUTION: modifying this constant can cause a strong 
	 * resource consumption.
	 */
	var INTERVAL=60;
	
	/**
	 * constante définissant l'action d'une diminution de l'opacité
	 */
	var DECREASE=0;
	/**
	 * constante définissant l'action d'une augmentation de l'opacité
	 */
	var INCREASE=1;
	var direction=INCREASE;
	
	var timeline=new Timeline(INTERVAL);
	
	var incrementOpacity=INTERVAL*(opacityStart-opacityEnd)/delay;
	
	function VaryOpacityTimelineListener(){
 		this.throwTimelineEvent=function(timelineEvent) {
			if(timelineEvent.getType()!=TimelineEventType().STOP){// START|RUNNING
				if ((direction==INCREASE||opacity>opacityEnd)&&((direction==DECREASE||opacity<opacityStart))) {
					if(direction==DECREASE) opacity=opacity-incrementOpacity;
					else opacity=opacity+incrementOpacity;
					paneNode.style.opacity=opacity;
					paneNode.style.filter='Alpha(Opacity='+(opacity*100)+')';
				}
				else{
					timeline.stop();			
				}
			}
			else{// STOP
				if (direction==DECREASE) {
					paneNode.style.opacity=opacityEnd;
					paneNode.style.filter='Alpha(Opacity='+(opacityEnd*100)+')';
					opacity=opacityEnd;
				}
				else {
					paneNode.style.opacity=opacityStart;
					paneNode.style.filter='Alpha(Opacity='+(opacityStart*100)+')';
					opacity=opacityStart;
				}
			}
		}
	}
 	VaryOpacityTimelineListener.prototype=new TimelineListener();
 	var varyOpacityTimelineListener=new VaryOpacityTimelineListener();
 	timeline.addTimelineListener(varyOpacityTimelineListener);
	
	/**
	 * Cette méthode baisse l'opacité
	 */
	this.decrease=function() {
		direction=DECREASE;
		if(!timeline.isRunning()){			
			timeline.start();
		}
	}
	/**
	 * Cette méthode augmente l'opacité
	 */
	this.increase=function() {
		direction=INCREASE;
		if(!timeline.isRunning()){
			timeline.start();
		}
	}
}