function mBox(conteneurImage,nameGalerie , activatePreload){

  this.galerieName = nameGalerie ;

	//Les objets composant la barre de navigation
	this.navigate = null;
	this.toolbar = null;
	this.next =  null;
	this.before = null ;
	this.close = null ;
	this.indicator = null;
	this.btnPlayStop = null;
	this.imageInformation = null;
	//La div + frame modale
	this.contentMain = null;
	this.contentImage = null;
	this.frameBugFlash = null;
	//Le tableau contenant toutes les images
	this.arrayImage = new Array();
	//Objet image courante
	this.imgCurrent = null;
	this.indexCurrent = 0 ;
	//Boolean permettant d'activer ou non le diaporama
	this.activateDiapo = false;
	//Un timer pour l'effet de fading et un autre pour l'aggrandissement de la boite
	this.timer = null;
	this.timer2 = null;
	this.timerDiapo = null;
	this.timeBetwenDiapo = 5000;
	this.checkOpenBox = false;
	this.x = 0;
	this.y = 0 ;
	this.largeur = 0 ;
	this.hauteur = 0;
	this.nbPas = 0 ;
	this.nbPasMaxX = 0 ;
	this.nbPasMaxY = 0 ;
	this.imgCurrent = null;
	this.maxH = 0 ;
	this.maxL = 0 ;
	this.IsIE=!!document.all;
	this.upL = false;
	this.upH = false;
	this.verifH = false;
	this.verifL = false;
	this.conteneur = conteneurImage;
	this.css = null ;
	this.imgLoader = null;
	this.spanInfo = null; 
	this.divError =  null; 
	//Variable permettant ou non d'activer le preload
	this.preload = (typeof(activatePreload)  != 'undefined') ? activatePreload:false;
	//On initialise :)
	this.init();
}
 
mBox.prototype.init = function(){
	//rï¿½cupï¿½ration de toutes les images du conteneur et de la balise alt
	this.getAllImage();
	//Ajout de la frame pour passer au dessus des flash + le conteneur transparent
	this.contentMain = this.newElement({"typeElement":"div","classeCss":"contentMain","parent":null});
	this.frameBugFlash = this.newElement({"typeElement":"div","classeCss":"modal","parent":this.contentMain});
	this.newElement({"typeElement":"iframe","classeCss":"frameBugFlash","parent":this.contentMain });
	//Ajout du conteneur de l'image
	this.contentImage = this.newElement({"typeElement":"div","classeCss":"contentImage","parent":this.contentMain});	
	this.css = this.contentImage.style;
	//Construction de la barre de navigation
	this.navigate = this.newElement({"typeElement":"div","classeCss":"navigate","parent":this.contentMain});
	
	this.imageInformation = this.newElement({"typeElement":"div","classeCss":"imageInformation","parent":this.navigate});
	this.toolbar = this.newElement({"typeElement":"div","classeCss":"toolbar","parent":this.navigate});
	this.before = this.newElement({"typeElement":"div","classeCss":"beforeOut","parent":this.toolbar});
	
	this.btnPlayStop = this.newElement({"typeElement":"div","classeCss":"btnPlay","parent":this.navigate});
	
	var me = this;
	this.before.onclick = function(){me.beforeImg()};
	this.indicator = this.newElement({"typeElement":"div","classeCss":"indicator","parent":this.toolbar});
	this.next = this.newElement({"typeElement":"div","classeCss":"nextOut","parent":this.toolbar});
	this.next.onclick = function(){me.nextImg()};
	this.close = this.newElement({"typeElement":"div","classeCss":"close","parent":this.navigate});
	this.close.onclick = function(){me.hide([me.contentMain,me.navigate]);me.activateDiapo = false};
	;
	this.btnPlayStop.onclick = function(){me.activateDiapo = (me.activateDiapo == false) ? true:false;me.btnPlayStop.className = (me.btnPlayStop.className == "btnPlay")?"btnPause":"btnPlay";me.diaporama()};
	//Crï¿½ation de l'image de load
	this.imgLoader = this.newElement({"typeElement":"img","classeCss":"","parent":this.contentImage});
	this.imgLoader.src = "images/loader.gif";
 
	//On masque les ï¿½lï¿½ments principaux
	this.hide([this.navigate,this.contentMain,this.imgLoader]);
	
	//Pour combler un bug
	if(Math.round(this.contentImage.style.width) == 0){
		this.contentImage.style.width = 0 ;
	}
	if(Math.round(this.contentImage.style.height) == 0){
		this.contentImage.style.height = 0 ;
	}
}
 
mBox.prototype.show = function(element){
	if(element instanceof Array){
		for(var i = 0 , l = element.length ; i <l ; i++){
			element[i].style.display = "block";
		}
	}
	else{
		element.style.display = "block";
	}
}
 
mBox.prototype.hide = function(element){
	if(element instanceof Array){
		for(var i = 0 , l = element.length ; i <l ; i++){
			element[i].style.display = "none";
		}
	}
	else{
		element.style.display = "none";
	}
}
 
mBox.prototype.seeCurent = function(numCurrent)
{
	var me = this;
	//Index de l'image courante
	this.indexCurrent = numCurrent;
	//On tue les anciens timers
	clearTimeout(this.timer);
	clearTimeout(this.timer2);
	//On supprimer l'ancienne image
		this.removeImg();
		this.show([this.navigate,this.contentMain]);
		//On ajoute la nouvelle
		this.createImg(this.arrayImage[this.indexCurrent]);
		this.seeCurentPosition();
}
 
mBox.prototype.diaporama = function(){
	var me =  this;
	if(this.activateDiapo){
		this.nextImg();
		this.timerDiapo = setTimeout(function(){me.diaporama();},me.timeBetwenDiapo);
	}
	else{
		 clearTimeout(this.timerDiapo);
		 this.activateDiapo = false;
	}
}
 
mBox.prototype.nextImg = function()
    {
      if(this.indexCurrent < (this.arrayImage.length-1)){this.indexCurrent++;}else{this.indexCurrent=0;}
      
      clearTimeout(this.timer);
      clearTimeout(this.timer2);
      this.removeImg();
      this.createImg(this.arrayImage[this.indexCurrent]);
      this.seeCurentPosition();
    }
    
    mBox.prototype.beforeImg = function()
    {
      if(this.indexCurrent > 0){this.indexCurrent--;}else{this.indexCurrent=(this.arrayImage.length-1);}
      
      clearTimeout(this.timer);
      clearTimeout(this.timer2);
      this.removeImg();
      this.createImg(this.arrayImage[this.indexCurrent]);
	  this.seeCurentPosition();
    }
 
mBox.prototype.createImg = function(iSrc)
{
	var me =  this ;
	this.imgCurrent = document.createElement('img')
	this.imgCurrent.className = "imgHide";	
	//this.imgCurrent.onerror = function(){me.MsgErreurShow();};
	this.imgCurrent.src = iSrc;
	this.imgCurrent.style.visibility = "hidden";
	this.imgCurrent.id = "imgCurrent";
	this.verifLoadImg();
}
 
mBox.prototype.removeImg = function()
{
       try{
	  if(this.imgCurrent!=null){
		this.contentImage.removeChild(this.imgCurrent);
	 }
	 }
	 catch(err){}
}
 
mBox.prototype.verifLoadImg = function() 
    {
	  var temp = this ;
	  //Si l'image est complï¿½tement chargï¿½e
       if(this.imgCurrent.complete)
      {
	  	if(this.imgCurrent.width != 0){
			//On masque le message d'erreur et l'image de loading
			this.hide(this.imgLoader);
			//On tue le timer
			clearTimeout(this.timer);
			//Rï¿½cupï¿½ration de la taille de l'ï¿½cran 
			result=this.returnSize();
			
			var myWidth=result[0];
			var myHeight=result[1];
			var maxLBefore = this.maxL;
			var maxHBefore = this.maxH ;
			//test si l'image est plus grande en largeur ou hauteur :
			if(myWidth < (this.imgCurrent.width+150) || myHeight < (this.imgCurrent.height+150)){
				//On calcul les tailles maximum par rapport a 60% de la taille maximum de l'ï¿½cran
				var MaxSize = this.getMaxSizeDisplay(parseInt(myWidth/100*50),parseInt(myHeight/100*50));
 
				this.maxL = MaxSize[0] + 20;
				this.maxH = MaxSize[1] + 20;
			}
			else{
				this.maxL = this.imgCurrent.width;
				this.maxH = this.imgCurrent.height;
			}
			
			//Si la taille de la div contenant est plus grand , on diminue sinon on agrandit
			this.upL = (maxLBefore <= this.maxL) ? true:false;
			this.upH = (maxHBefore <= this.maxH) ? true:false;
 
			this.verifH = false;
			this.verifL = false;
			
			this.nbPasMaxX = (this.upL) ? parseInt((this.maxL-maxLBefore) / 20):parseInt((maxLBefore-this.maxL) / 20) ;
			this.nbPasMaxY = (this.upH) ? parseInt((this.maxH-maxHBefore) / 20):parseInt((maxHBefore-this.maxH) / 20) ;
			
			this.openBox();
		}
      }
      else
      {
	  this.show(this.imgLoader);
        this.imgLoader.style.position = "absolute";
	  this.imgLoader.style.top = "50%";
	  this.imgLoader.style.left = "50%";
        this.imgLoader.style.marginLeft = -(parseInt(this.imgLoader.offsetWidth)/2) +"px" ;
        this.imgLoader.style.marginTop =- (parseInt(this.imgLoader.offsetHeight) /2) +"px";
        var temp = this;
        this.timer = setTimeout(function() {temp.verifLoadImg();}, 500);
      }
    }
 
mBox.prototype.getMaxSizeDisplay = function(inMW, inMH)
{
	// inMW  : Largeur maximale
	// inMH   : Hauteur maximale
	var maxWidth = inMW;
	var maxHeight = inMH;
	// Declarations des variables "Nouvelle Taille"
	var dW = 0;
	var dH = 0;
	// On recupere les tailles reelles
	var h = dH = this.imgCurrent.height;
	var w = dW = this.imgCurrent.width;
	// Si la largeur ou la hauteur depasse la taille maximale
	if ((h >= maxHeight) || (w >= maxWidth)) {
	// Si la largeur et la hauteur depasse la taille maximale
	if ((h >= maxHeight) && (w >= maxWidth)) {
	  // On cherche la plus grande valeur
	  if (h > w) {
		dH = maxHeight;
		// On recalcule la taille proportionnellement
		dW = parseInt((w * dH) / h, 10);
	  } else {
		dW = maxWidth;
		// On recalcule la taille proportionnellement
		dH = parseInt((h * dW) / w, 10);
	  }
	} else if ((h > maxHeight) && (w < maxWidth)) {
	  // Si la hauteur depasse la taille maximale
	  dH = maxHeight;
		// On recalcule la taille proportionnellement
	  dW = parseInt((w * dH) / h, 10);
	} else if ((h < maxHeight) && (w > maxWidth)) {
	  // Si la largeur depasse la taille maximale
	  dW = maxWidth;
		// On recalcule la taille proportionnellement
	  dH = parseInt((h * dW) / w, 10);
	}
	}
	return new Array(dW,dH)
}
	
//Rï¿½cupï¿½ration de la taille de l'ï¿½cran
mBox.prototype.returnSize = function()
{
	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) 
	{
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} 
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) 
	{
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} 
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) 
	{
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	var result = new Array(myWidth,myHeight);
	return result;
}
 
mBox.prototype.openBox = function(){
		this.openX();
}
 
mBox.prototype.openX = function(){
	if(this.nbPas != this.nbPasMaxX){
 
		if(!this.upL){
			this.contentImage.style.width = (parseInt(this.contentImage.style.width) - 20) + 'px';
		}
		if(this.upL){
			this.contentImage.style.width = (parseInt(this.contentImage.style.width) + 20) + 'px';
		}
	this.contentImage.style.left = "50%";
	this.contentImage.style.marginLeft = -(parseInt(this.contentImage.offsetWidth)/2) +"px" ;
	this.contentImage.style.top = "50%";
	this.contentImage.style.marginTop =- (parseInt(this.contentImage.offsetHeight) /2) +"px";
	this.nbPas++;
	var temp =  this;
		setTimeout(function(){temp.openX();},15);
	}
	else{
		this.nbPas = 0 ;
		this.openY();
	}
}
 
mBox.prototype.openY = function(){
	if(this.nbPas != this.nbPasMaxY){
	//Dans le cas ou l'on diminue
	if(!this.upH){
		this.contentImage.style.height = parseInt(this.contentImage.style.height) -20 + 'px';
	}
	//Dans le cas ou on agrandit
	if(this.upH){
		this.contentImage.style.height = parseInt(this.contentImage.style.height) + 20 + 'px';
	}
	this.contentImage.style.top = "50%";
	this.contentImage.style.marginTop =- (parseInt(this.contentImage.offsetHeight) /2) +"px";
		this.contentImage.style.left = "50%";
	this.contentImage.style.marginLeft = -(parseInt(this.contentImage.offsetWidth)/2) +"px" ;
	this.nbPas++;
	var temp =  this;
		setTimeout(function(){temp.openY();},15);
	}
	else{
		this.nbPas = 0 ;
		//On donne la taille finale 
		this.contentImage.style.height = this.maxH + "px";
		this.contentImage.style.width = this.maxL + "px";
		this.contentImage.style.padding=10+"px";
		this.imgCurrent.style.visibility = "visible";
		this.appendImg();
		this.checkOpenBox = false;	
		this.fadePic(0,100,this.imgCurrent);
	}
}
 
mBox.prototype.windowCenter = function(elementT) 
    {
	  elementT.style.left = 50+"%";
	  elementT.style.top = 50+"%";
	  elementT.style.marginLeft = -(elementT.offsetWidth / 2) + "px";
	  elementT.style.marginTop = -(elementT.offsetHeight / 2) + "px";
    } 
 
mBox.prototype.appendImg = function()
    {
	  var temp = this;
      //Ajout de l'ï¿½lï¿½ment dans la div avec les tailles redimensionnï¿½e
	  this.imgCurrent.style.width = this.maxL + "px";
	  this.imgCurrent.style.height = this.maxH + "px";
      this.contentImage.appendChild(this.imgCurrent);
      //Ajout du filtre
      if(this.IsIE)
      {
        this.imgCurrent.style.filter='alpha(opacity=0)';
        this.imgCurrent.filters[0].opacity=0;
      }
      else
      {
        this.imgCurrent.style.opacity='0';
      }
    }
    
mBox.prototype.fadePic = function(debut, fin , element)
    {
      if(debut==fin){return false}
      this.IsIE?element.filters[0].opacity=debut:element.style.opacity=debut/100;
      debut>fin?debut-=5:debut+=5;
      var temp  = this ;
      if(debut != fin)
      {
        this.timer2 = setTimeout(function(){temp.fadePic(debut,fin,element);},10);
      }
      else
      {
        clearTimeout(this.timer2);
      }
    }
	
mBox.prototype.getAllImage = function(){
	//On rï¿½cupï¿½re toutes les images de notre liste , puis on ajoute au tableau toute les images des balises alt
	var listeImg =  this.conteneur.getElementsByTagName('img');
	var temp = this ;
	var indexImg = 0 ;

	for(var i = 0 , l = listeImg.length ; i < l ; i++){
		//On ajoute l'image
		this.arrayImage.push(listeImg[i].alt);
		//On lui affecte une mï¿½thode sur le onclick pour l'afficher elle et une propriï¿½tï¿½ indiquant son index
		listeImg[i].indexImg = i ;
		listeImg[i].ondblclick = function(){temp.seeCurent(this.indexImg);};
		//Si le preload est activï¿½
		if(this.preload == true){
			var imgTemp =  document.createElement('img');
			imgTemp.src = listeImg[i].alt;
		}
	}
}
 
  mBox.prototype.newElement = function (parameter){
		var typeElement = parameter['typeElement'];
		var classToAffect = parameter['classeCss'];
		var parent = parameter['parent'];
		
		var newElement = document.createElement(typeElement);
		newElement.className = classToAffect;
		if(parent == null){
				document.body.insertBefore(newElement, document.body.firstChild);
		}
		else{
			parent.appendChild(newElement);
		}
		return newElement;
	}
  
	mBox.prototype.seeCurentPosition = function(){
	   this.indicator.innerHTML =  (this.indexCurrent+1)+ " / " +this.arrayImage.length ;
		//this.imageInformation.innerHTML = this.galerieName; 
	}


