window.addEvent('load', function() {
	if($('carroussel')) {
		carrouselDiv = document.getElementById("carroussel");
		tailleCaroussel = parseInt(carrouselDiv.offsetWidth, 10);
		init_carrousel();
	}
	if($('carroussel_vertical')) {
		carrouselDiv = document.getElementById("carroussel_vertical");
		tailleCaroussel = parseInt(carrouselDiv.offsetHeight, 10);
		init_carrousel_vertical();
	}
	if($('carroussel_vertical_partenaires')) {
		carrouselDiv = document.getElementById("carroussel_vertical_partenaires");
		tailleCaroussel = parseInt(carrouselDiv.offsetHeight, 10);
		init_carrousel_vertical();
	}
});

var carrouselDiv= '';
var tailleCaroussel = 0;
var vitesse = 5;
var vitesse_a_restaurer = 0;
var opacityOffset = 0;

var images = new Array();
var imagesAffichees = new Array();
var noImageGauche = 0;
var noImageDroite = 0;
var cpt = 0;

var processusCaroussel;

function defilement ()
{
	var pas = vitesse;
	//document.getElementById("debug").innerHTML = cpt;
	//cpt++;
	for (var y=0; y<imagesAffichees.length;y++) {
		var xPos = parseInt(imagesAffichees[y].style.left, 10);
		imagesAffichees[y].style.left = (xPos - pas) + "px";
		
		var largeurImage = parseInt(imagesAffichees[y].offsetWidth, 10);
		var ratioDisparition = (-(xPos - pas - opacityOffset) / (largeurImage + opacityOffset));
		var ratioApparition = (-(xPos - pas - tailleCaroussel) / (largeurImage + opacityOffset));
		if (xPos-pas < opacityOffset) {
			/*imagesAffichees[y].style.filter = "alpha(opacity="+((1 - ratioDisparition)*100)+")";
			imagesAffichees[y].style.opacity = 1 - ratioDisparition;*/
			if(getIEVersionNumber() != 7) {
				$(imagesAffichees[y].id).setStyle('opacity', 1 - ratioDisparition);
			}
		}
		if (xPos-pas > tailleCaroussel - largeurImage - opacityOffset) {
			if(getIEVersionNumber() != 7) {
				$(imagesAffichees[y].id).setStyle('opacity', ratioApparition);
			}
			/*imagesAffichees[y].style.opacity = ratioApparition;
			imagesAffichees[y].style.filter = "alpha(opacity="+(ratioApparition*100)+")";*/
		}
	}
	
	testPremiereImage();
	testAjoutImage();
	
	//document.getElementById("debug").innerHTML = cpt;
	//cpt++;
	window.setTimeout("defilement()", 40);
}

function init_carrousel () {
	var div;
	for(var i=0; i< 15 ; i++) {
		if(div = document.getElementById(i)) {
			images.push(div);
		}
	}
	var i = imagesAffichees.length;
	var sum = sommeLargeurImagesAffichees();

	while (sum < tailleCaroussel && i < images.length) {
		imagesAffichees.push(images[i]);
		images[i].style.left = sum + "px";
		images[i].style.top = 0;
		images[i].style.display = "";
		i++;
		if (i > imagesAffichees.length) {
			i = 0;
		}
		sum = sommeLargeurImagesAffichees();
	}
	
	noImageGauche = images.length - 1;
	noImageDroite = i;
	if (sum <= tailleCaroussel) {
		var prct = 92 / imagesAffichees.length;
		var somme = 0;
		for (var y=0; y<imagesAffichees.length;y++) {
			//imagesAffichees[y].style.width = prct+"%";
			imagesAffichees[y].style.left = somme+"px";
			somme += imagesAffichees[y].offsetWidth;
		}
	} else if (images.length - imagesAffichees.length >= 1) {
		window.setTimeout("defilement()", 40);
	}
}

function sommeLargeurImagesAffichees ()
{
	var somme = 0;
	if (imagesAffichees.length > 0) {
		for (var y=0; y<imagesAffichees.length;y++) {
			somme += parseInt(imagesAffichees[y].offsetWidth, 10);
		}
	}
	
	return somme;
}

function testPremiereImage ()
{
	var elt = -1;
	if (vitesse > 0) {
		elt = 0;
	} else if (vitesse < 0) {
		elt = parseInt(imagesAffichees.length, 10) - 1;
	} else {
		return;
	}
	//alert(elt);
	var xPos = parseInt(imagesAffichees[elt].style.left, 10);
	var widthPremiereImage = parseInt(imagesAffichees[elt].offsetWidth, 10);
	if (vitesse < 0) {
		xPos = xPos - tailleCaroussel + widthPremiereImage;
	}
	
	if (Math.abs(xPos) > widthPremiereImage) {
		imagesAffichees[elt].style.display = "none";
		//imagesAffichees[elt].style.opacity = "1";
		if (vitesse > 0) {
			noImageGauche = (noImageGauche + 1) % (images.length);
			imagesAffichees.shift();
		} else if (vitesse < 0) {
			noImageDroite = (noImageDroite - 1 + images.length) % (images.length);
			imagesAffichees.pop();
		}
	}
}

function testAjoutImage ()
{
	if (vitesse > 0) {
		var sum = sommeLargeurImagesAffichees();
		var posPremiereImage = parseInt(imagesAffichees[0].style.left, 10);
		if (sum + posPremiereImage < tailleCaroussel) {
			imagesAffichees.push(images[noImageDroite]);
			images[noImageDroite].style.left = (sum + posPremiereImage) + "px";
			images[noImageDroite].style.top = 0;
			images[noImageDroite].style.display = "";
			
			noImageDroite = (noImageDroite + 1) % (images.length);
		}
	} else if (vitesse < 0) {
		var posPremiereImage = parseInt(imagesAffichees[0].style.left, 10);
		if (posPremiereImage > 0) {
			//alert(noImageGauche);
			imagesAffichees.unshift(images[noImageGauche]);
			images[noImageGauche].style.top = 0;
			images[noImageGauche].style.display = "";
			images[noImageGauche].style.left = (posPremiereImage - parseInt(imagesAffichees[0].offsetWidth, 10)) + "px";
			
			noImageGauche = (noImageGauche - 1 + images.length) % (images.length);
		}
	} else {
		return;
	}
}

function plus ()
{
	vitesse += 2;
}

function moins ()
{
	vitesse -= 2;
}

function highlight (id_div)
{
	for (no_div in imagesAffichees) {
		if (imagesAffichees[no_div].id != id_div) {
			var id_image = imagesAffichees[no_div].id;
			document.getElementById("img_"+id_image).className = "fade";
		}
	}
}

function unHighlight (id_div)
{
	for (no_div in imagesAffichees) {
		if (imagesAffichees[no_div].id != id_div) {
			var id_image = imagesAffichees[no_div].id;
			document.getElementById("img_"+id_image).className = "";
		}
	}
}

function stop ()
{
	vitesse_a_restaurer = vitesse;
	vitesse = 0;
}

function go ()
{
	vitesse = vitesse_a_restaurer;
}

/*** Fonction pour le carrousel vertical ****/

function init_carrousel_vertical () {
	var div;
	for(var i=0; i< 15 ; i++) {
		if(div = document.getElementById(i)) {
			images.push(div);
		}
	}
	
	var i = imagesAffichees.length;
	var sum = sommeHauteurImagesAffichees();

	while (sum < tailleCaroussel && i < images.length) {
		
		imagesAffichees.push(images[i]);
		images[i].style.top = sum + "px";
		images[i].style.left = 0;
		images[i].style.display = "";
		i++;
		if (i > imagesAffichees.length) {
			i = 0;
		}
		sum = sommeHauteurImagesAffichees();		
	}
	
	noImageGauche = images.length - 1;
	noImageDroite = i;
	
	if (sum <= tailleCaroussel) {
		var prct = 92 / imagesAffichees.length;
		var somme = 0;
		for (var y=0; y<imagesAffichees.length;y++) {
			//imagesAffichees[y].style.height = prct+"%";
			imagesAffichees[y].style.top = somme+"px";
			imagesAffichees[y].align = "center";
			somme += imagesAffichees[y].offsetHeight;
		}
	} else if (images.length - imagesAffichees.length >= 2) {
		window.setTimeout("defilement_vertical()", 40);
	}
}

function defilement_vertical ()
{
	var pas = vitesse;
	for (var y=0; y<imagesAffichees.length;y++) {
		var yPos = parseInt(imagesAffichees[y].style.top, 10);
		imagesAffichees[y].style.top = (yPos - pas) + "px";
		
		var largeurImage = parseInt(imagesAffichees[y].offsetHeight, 10);
		var ratioDisparition = (-(yPos - pas - opacityOffset) / (largeurImage + opacityOffset));
		var ratioApparition = (-(yPos - pas - tailleCaroussel) / (largeurImage + opacityOffset));
		if (yPos-pas < opacityOffset) {
			imagesAffichees[y].style.filter = "alpha(opacity="+((1 - ratioDisparition)*100)+")";
			imagesAffichees[y].style.opacity = 1 - ratioDisparition;
		}
		if (yPos-pas > tailleCaroussel - largeurImage - opacityOffset) {
			imagesAffichees[y].style.opacity = ratioApparition;
			imagesAffichees[y].style.filter = "alpha(opacity="+(ratioApparition*100)+")";
		}
	}
	
	testPremiereImage_vertical();
	testAjoutImage_vertical();
	
	//document.getElementById("debug").innerHTML = cpt;
	//cpt++;
	window.setTimeout("defilement_vertical()", 40);
}

function testPremiereImage_vertical ()
{
	var elt = -1;
	if (vitesse > 0) {
		elt = 0;
	} else if (vitesse < 0) {
		elt = parseInt(imagesAffichees.length, 10) - 1;
	} else {
		return;
	}
	//alert(elt);
	var yPos = parseInt(imagesAffichees[elt].style.top, 10);
	var heightPremiereImage = parseInt(imagesAffichees[elt].offsetHeight, 10);
	if (vitesse < 0) {
		yPos = yPos - tailleCaroussel + heightPremiereImage;
	}
	
	if (Math.abs(yPos) > heightPremiereImage) {
		imagesAffichees[elt].style.display = "none";
		//imagesAffichees[elt].style.opacity = "1";
		if (vitesse > 0) {
			noImageGauche = (noImageGauche + 1) % (images.length);
			imagesAffichees.shift();
		} else if (vitesse < 0) {
			noImageDroite = (noImageDroite - 1 + images.length) % (images.length);
			imagesAffichees.pop();
		}
	}
}

function testAjoutImage_vertical ()
{
	if (vitesse > 0) {
		var sum = sommeHauteurImagesAffichees();
		var posPremiereImage = parseInt(imagesAffichees[0].style.left, 10);
		if (sum + posPremiereImage < tailleCaroussel) {
			imagesAffichees.push(images[noImageDroite]);
			images[noImageDroite].style.top = (sum + posPremiereImage) + "px";
			images[noImageDroite].style.left = 0;
			images[noImageDroite].style.display = "";
			images[noImageDroite].style.opacity = 0;
			images[noImageDroite].style.filter = "alpha(opacity=0)";
			
			noImageDroite = (noImageDroite + 1) % (images.length);
		}
	} else if (vitesse < 0) {
		var posPremiereImage = parseInt(imagesAffichees[0].style.top, 10);
		if (posPremiereImage > 0) {
			//alert(noImageGauche);
			imagesAffichees.unshift(images[noImageGauche]);
			images[noImageGauche].style.left = 0;
			images[noImageGauche].style.display = "";
			images[noImageGauche].style.top = (posPremiereImage - parseInt(imagesAffichees[0].offsetHeight, 10)) + "px";
			images[noImageGauche].style.opacity = 0;
			images[noImageGauche].style.filter = "alpha(opacity=0)";
			
			noImageGauche = (noImageGauche - 1 + images.length) % (images.length);
		}
	} else {
		return;
	}
}
function sommeHauteurImagesAffichees ()
{
	var somme = 0;
	if (imagesAffichees.length > 0) {
		for (var y=0; y<imagesAffichees.length;y++) {
			somme += parseInt(imagesAffichees[y].offsetHeight, 10);
		}
	}
	
	return somme;
}

function getIEVersionNumber() {
    var ua = navigator.userAgent;
    var MSIEOffset = ua.indexOf("MSIE ");
    
    if (MSIEOffset == -1) {
        return 0;
    } else {
        return parseFloat(ua.substring(MSIEOffset + 5, ua.indexOf(";", MSIEOffset)));
    }
}
