function mBox(conteneurImage,activatePreload){ //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.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 ; //Un timer pour l'effet de fading et un autre pour l'aggrandissement de la boite this.timer = null; this.timer2 = null; this.x = 0; this.y = 0 ; this.largeur = 0 ; this.hauteur = 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":null}); 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}); 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])}; //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]); } mBox.prototype.show = function(element){ if(element instanceof Array){ for(var i = 0 , l = element.length ; i 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() { if(this.imgCurrent!=null){ this.contentImage.removeChild(this.imgCurrent); } } mBox.prototype.verifLoadImg = function() { var temp = this ; 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]; //test si l'image est plus grande en largeur ou hauteur : if(myWidth < (this.imgCurrent.width+100) || myHeight < (this.imgCurrent.height+100)){ //On va récupérer les nouvelles valeur var MaxSize = this.getMaxSizeDisplay(parseInt(myWidth/100*60),parseInt(myHeight/100*60)); this.maxL = MaxSize[0] + 20; this.maxH = MaxSize[1] + 20; } else{ this.maxL = this.imgCurrent.width + 20; this.maxH = this.imgCurrent.height + 20; } this.upL = (this.largeur <= this.maxL) ? true:false; this.upH = (this.hauteur <= this.maxH) ? true:false; this.verifH = false; this.verifL = false; 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.windowCenter(this.contentImage); if(this.largeur < this.maxL && this.upL) { this.largeur += 20 ; this.css.width = this.largeur + "px"; } else if(this.largeur > this.maxL && !this.upL) { this.largeur -= 20 ; this.css.width = this.largeur + "px"; } else { this.verifL = true; } if(this.hauteur < this.maxH && this.upH) { this.hauteur += 20 ; this.css.height = this.hauteur + "px"; } else if(this.hauteur > this.maxH && !this.upH) { this.hauteur -= 20 ; this.css.height = this.hauteur + "px"; } else { this.verifH = true; } if(this.verifH && this.verifL) { this.css.width = this.maxL + "px"; this.css.height = this.maxH +"px"; this.windowCenter(this.contentImage); clearTimeout(this.timer); this.imgCurrent.style.visibility = "visible"; this.appendImg(); this.fadePic(0,100,this.imgCurrent); } else { this.windowCenter(this.contentImage); var temp = this; this.timer = setTimeout(function(){temp.openBox();},20); } } mBox.prototype.windowCenter = function(elementT) { result=this.returnSize(); var myWidth=result[0]; var myHeight=result[1]; var elementWidth=elementT.offsetWidth; var elementHeight=elementT.offsetHeight; var myScrollLeft=document.documentElement.scrollLeft; var myScrollTop=document.documentElement.scrollTop; var posX=myScrollLeft+myWidth-myWidth/2-elementWidth/2 var posY=myScrollTop+myHeight-myHeight/2-elementHeight/2; elementT.style.left=posX+"px"; elementT.style.top=posY+"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); this.windowCenter(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'; } //Nom de l'image //this.spanInfo.innerHTML = this.imgCurrent.src.substring(this.imgCurrent.src.lastIndexOf("\/")+1).split(".")[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].onclick = 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.appendChild(newElement); } else{ parent.appendChild(newElement); } return newElement; } mBox.prototype.seeCurentPosition = function(){ this.indicator.innerHTML = (this.indexCurrent+1)+ " / " +this.arrayImage.length ; this.imageInformation .innerHTML = this.imgCurrent.src.substring(this.imgCurrent.src.lastIndexOf("\/")+1).split(".")[0] }