/*
window.addEvent('domready', function(){
	var bandeau = new bandeauDefilant("bandeau", {
		largeur_zone_visible: 400,
		hauteur_zone_visible: 200,
		vitesse: 60
	});
});
<div id="bandeau">
	intérieur (soit un div avec tout le contenu, soit une succession de div ou span, ...)
</div>
*/
var bandeauDefilant = new Class ({

	Implements: [Events, Options],
	
	options: {
		largeur_zone_visible: 200,
		hauteur_zone_visible: 150,
		vitesse: 200,
		zone_reactive:35,			//Zone réactive à la souris de chaque côté du bandeau, en %
		acceleration_max: 5
	},
	
	initialize: function (bandeau, options) {
	
		this.setOptions (options);
		this.bandeau = $(bandeau);
		
		//--> Mise en place du conteneur
		this.conteneur = new Element('div', {
			'id': 'conteneurBandeau',
			'styles':{
				'display':'block',
				'width':this.options.largeur_zone_visible,
				'height':this.options.hauteur_zone_visible,
				'overflow':'hidden'
			}
		});
		
		//--> Insertion du conteneur autour du bandeau
		this.conteneur.inject(this.bandeau, 'before');
		this.conteneur.grab(this.bandeau);
		this.positionX = this.conteneur.getPosition().x;
		
		//--> Détermination de la longeur du bandeau
		var children = this.bandeau.getChildren();
		this.largeur_bandeau = 0;
		children.each(function(item, index){
			var larg = item.getSize().x;
			item.clone().inject(this.bandeau);
			this.largeur_bandeau += larg;
		}.bind(this));
		
		//--> Réglage de la taille du bandeau
		this.bandeau.setStyle("width", this.largeur_bandeau * 2);
		
		//--> durée
		this.dureeInit = this.calculVitesse();
		
		//--> Mise en mouvement du bandeau
		this.myEffect = new Fx.Tween(this.bandeau, {
			fps: 60,
			duration: this.dureeInit,
			transition: 'linear',
			onComplete: function (){
				//this.myEffect.options.duration = 100;
				this.avance();
			}.bind(this)
		});
		this.avance();
		
		/*this.conteneur.addEvent('mousemove', function(event){
			this.mousemove(event);
		}.bind(this));
		
		this.conteneur.addEvent('mouseleave', function(event){
			this.mouseleave(event);
		}.bind(this));*/
	},
	
	avance: function (){
		this.bandeau.setStyle("margin-left", 0);
		this.myEffect.start('margin-left', this.largeur_bandeau * -1);
	},
	
	mousemove: function(event){
		var position_x = event.client.x - this.positionX;
		var position_pourcent = position_x * 100 / this.options.largeur_zone_visible;
		if(position_pourcent > (100 - this.options.zone_reactive)){
			var multiplicateur = ((position_pourcent - (100 - this.options.zone_reactive)) / this.options.zone_reactive) * (this.options.acceleration_max - 1) +1;
			this.myEffect.cancel();
			this.myEffect.options.duration = this.calculVitesse() / multiplicateur;
			this.myEffect.start('margin-left', this.largeur_bandeau * -1);
		}
	},
	
	mouseleave: function(event){
		this.myEffect.cancel();
		this.myEffect.options.duration = this.calculVitesse();
		this.myEffect.start('margin-left', this.largeur_bandeau * -1);
	},
	
	calculVitesse: function(){
		var position_actuelle = this.bandeau.getStyle('margin-left');
		position_actuelle = position_actuelle.substring(0, position_actuelle.indexOf('p'));
		if(position_actuelle <= (this.largeur_bandeau * -1)) return 1;
		var duree = (this.largeur_bandeau + parseInt(position_actuelle)) / this.options.vitesse * 1000;
		var vitesse = (this.largeur_bandeau + parseInt(position_actuelle)) / duree;
		return duree;
	}
	
});