
// Slideshow Class /////////////////////////////////////////////////////////////

function Slideshow(id, sl, w, p, ars, arb) {

	// VARS
	this.ID = id;	
	this.currentPosition = 0;
	this.direction = 1;
	this.Pause = (p!=null ? p : false);
	this.User = false;
	this.slideWidth = w;
	this.slides = sl;
	this.numberOfSlides = this.slides.length;
	this.timeoutID = {};
	this.arrowSize = (ars!=null ? ars : 24);
	this.showArrows = (arb!=null ? arb : false);
	
	// METHODS
	this.manageControls = function(position) {
		var self = this;
		if (position==0) {$('#leftControl'+self.ID).css('opacity',.25).data('active',false)} else {$('#leftControl'+self.ID).css('opacity',1).data('active',true)}
		if (position==this.numberOfSlides-1) {$('#rightControl'+self.ID).css('opacity',.25).data('active',false)} else { $('#rightControl'+self.ID).css('opacity',1).data('active',true)}
	}
	
	this.slide = function() {
		var self = this;
		this.manageControls(this.currentPosition);
		$('#slideInner'+self.ID).animate({'marginLeft' : self.slideWidth*(-self.currentPosition)}, 500);
	}
	
	this.slideshow = function() {
		var self = this;
		if (this.User || !this.Pause) {
			if (this.currentPosition == this.numberOfSlides-1)
				this.direction = -1;
			else if (this.currentPosition == 0)
				this.direction = 1;
			this.currentPosition += this.direction;
			this.slide();
			this.User = false;
		}
			
		if (!this.Pause)
			this.timeoutID = setTimeout(function(){self.slideshow();}, 7500);
	}
	
	// BINDING & LAUNCHING
	this.launch = function() {
		var self = this;
		
		$('#slidesContainer'+self.ID).css('overflow', 'hidden');
		this.slides.wrapAll('<div id="slideInner'+self.ID+'"></div>')
				   .css({'float' : 'left', 'width' : self.slideWidth});
		$('#slideInner'+self.ID).css({'width' : self.slideWidth * (self.numberOfSlides+1), 'opacity' : 0});
		this.slides.css({'visibility' : 'visible'});
		$('#slideInner'+self.ID).animate({'opacity' : 1}, 1000, 'linear', function(){
                                                                $('#loadingSlideshow'+self.ID).remove();
                                                            });
		$('#slideshow'+self.ID)
			.prepend('<div class="control'+self.ID+'" id="leftControl'+self.ID+'"></div>')
			.append('<div class="control'+self.ID+'" id="rightControl'+self.ID+'"></div>'); // pas de <a> pour éviter les pointillés autour générés par les browsers qd on clique
		$('#leftControl'+self.ID).bind('mouseenter mouseover', function(){if (!$(this).data('active')) return; $(this).css('background-position',-self.arrowSize+'px 0px')});
		$('#leftControl'+self.ID).bind('mouseleave mouseout', function(){$(this).css('background-position','0px 0px')});
		$('#rightControl'+self.ID).bind('mouseenter mouseover', function(){if (!$(this).data('active')) return; $(this).css('background-position','0px 0px')});
		$('#rightControl'+self.ID).bind('mouseleave mouseout', function(){$(this).css('background-position',-self.arrowSize+'px 0px')});
		$('#slideshow'+self.ID)
			.bind('mouseenter mouseover', function(){
				clearTimeout(self.timeoutID);
				//self.Pause = true;
				$('.control'+self.ID).show();
			})
			.bind('mouseleave mouseout', function(){
				clearTimeout(self.timeoutID);
		        if (!self.Pause)
			        self.timeoutID = setTimeout(function(){self.slideshow();}, 1500);
				if (!self.showArrows)
			        $('.control'+self.ID).hide();
			});
		$('.control'+self.ID)
			.bind('click', function(){
				if (!$(this).data('active')) return;
	        	self.currentPosition += ($(this).attr('id')=='rightControl'+self.ID ? 1 : -1);
	        	self.User = true;
	        	self.slide();
    		});
    	if (this.showArrows)
    		$('.control'+self.ID).show();
    	else
    		$('.control'+self.ID).hide();
    		
		this.manageControls(this.currentPosition);
		this.timeoutID = setTimeout(function(){self.slideshow();}, 7500);
	}
}

