/**
 * ------------------------------------
 * Fonction de pré-chargement d'images.
 * ------------------------------------
 * Pré-charge les images qui sont passées en paramètres.
 * Exemple d'utilisation :
 * preloadImages("/images/img1.jpg", "/images/img2.gif", "http://www.imaginance/logo.png");
 */
function preloadImages()
{
	var aImages			=	new Array();
	for (var i=0; i < preloadImages.arguments.length; i++)
	{
		aImages[i]		= new Image();
		aImages[i].src	= preloadImages.arguments[i];
	}
}


/** Fonction d'ouverture d'image en popup.
 * Cette fonction s'applique sur les balises de liens "<a>" ayant comme classe css sDefinitionClass (configurable dans la fonciton).
 * La fonction parcours tous les liens d'une page en recherchant la classe css sDefinitionClass. Si la classe css est trouvée, l'action du lien
 * (dont l'attribut "href" doit pointer vers une image valide) est modifié permettre l'ouverture d'un popup.
 * La configuration du popup (couleur de fond, marges autour de l'image) doit être faite dans la fonction.
 */
function SetPopupImages() {
    // Déclaration de la classe CSS servant de repère pour l'application des actions Javascript.
    var sDefinitionClass    =   "SetPopupImages";
    // Marge du popup en pixels.
    var iMargeH             =   10;
    var iMargeV             =   10;
    // Couleur de fond du popup.
    var sBackground         =   "#FFFFFF";
    // Tableau d'images
    var aImages             =   new Array();            
    var i;
    
    // Récupération du titre de la page.
    var sDocumentTitle      =   document.title;

    // Les navigateurs ne supportant pas le DOM n'utiliseront pas les popup.
    if (! document.getElementsByTagName && ! document.getElementById )
    {
        return false;
    }
    // Récupération des liens.
    var oLinks     =   document.getElementsByTagName("a");

    // Préchargement des images pour éviter le bug "du popup mal dimensionné" (qui est dû au chargement incomplet de l'image).
    for (i = 0 ; i < oLinks.length ; i ++) {
        // Seuls les liens possedant la classe css sDefinitionClass seront pris en compte.
        if (oLinks[i].className.indexOf(sDefinitionClass) > -1)
        {
            aImages[oLinks[i].href]     =   new Image();
            aImages[oLinks[i].href].src =   oLinks[i].href;
        }
    }

    // Second parcours des liens pour application de l'action "ouverture popup".
    for (i = 0 ; i < oLinks.length ; i ++)
    {
        // Seuls les liens possedant la classe css sDefinitionClass seront pris en compte.
        if (oLinks[i].className.indexOf(sDefinitionClass) > -1)
        {

            // Application de la fonction popup aux images.                                                                   
            oLinks[i].onclick  =   function() {

                // Calcul de la taille du popup en fonction des dimensions de l'image et des marges.
                var iPopupWidth     =   (aImages[this.href].width + (iMargeH * 2));
                var iPopupHeight    =   (aImages[this.href].height + (iMargeV * 2));

                // Positionnement du popup (centré sur le navigateur ... pas sur la zone écran) !
                var screenX;
                var screenY;
                var iPopupTop;
                var iPopupLeft;
                if (window.screenX) // pour mozilla & co
                {
                    screenX =   window.screenX;
                    screenY =   window.screenY;
                }
                else // Pour IE 
                {
                    screenX =   window.screenLeft;
                    screenY =   window.screenTop;
                }

				// Calcul de la surface de visualisation.
                var viewportWidth, viewportHeight;
				if (self.outerWidth) // all except Explorer
				{
					viewportWidth	= self.outerWidth;
					viewportHeight	= self.outerHeight;
				}
				else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
				{
					viewportWidth	= document.documentElement.clientWidth;
					viewportHeight	= document.documentElement.clientHeight;
				}
				else if (document.body) // other Explorers
				{
					viewportWidth	= document.body.clientWidth;
					viewportHeight	= document.body.clientHeight;
				} 
				
				if (iPopupWidth > viewportWidth) {
					iPopupWidth		=	viewportWidth - 100;
				}
				if (iPopupHeight > viewportHeight) {
					iPopupHeight	=	viewportHeight - 100;
				}
               
                iPopupTop    =   parseInt((viewportHeight / 2) - (iPopupHeight / 2) + screenY);
                iPopupLeft   =   parseInt((viewportWidth / 2) - (iPopupWidth / 2) + screenX);
			
                // Construction du contenu du popup XHTML avec l'image.
                var sHtmlContent    =   "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
                                               +   "<html>\n"
                                               +   "<head>\n"
                                               +   "<title>" + sDocumentTitle + "</title>\n"   
                                               +   "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\" />\n"
                                               +   "<style type=\"text/css\">\n"
                                               +   "html { margin: 0px; padding: 0px; }\n"
                                               +   "body { margin: 0px; padding: 0px; background-color: " + sBackground + "; }\n"
                                               +   "p { margin: 0px; padding: 0px; }\n"
                                               +   "img { margin-top: " + iMargeV + "px; margin-left: " + iMargeH + "px; padding: 0px; }\n"
                                               +   "</style>\n"
                                               +   "</head>\n"
                                               +   "<body onclick=\"window.close();\">\n"
                                               +   "<p><img src=\"" + aImages[this.href].src + "\" alt=\"\"/></p>\n"
                                               +   "</body>\n"
                                               +   "</html>\n";

                // Ouverture du popup.
                oPopup              =   window.open("about:blank", "_blank", "top=" + iPopupTop + ",left=" + iPopupLeft + ",width=" + iPopupWidth + ",height=" + iPopupHeight + ",resizable=yes");
                oPopup.document.write(sHtmlContent);
                oPopup.document.close();
                oImage              =   null;
                sHtmlContent        =   null;
                return false;
            }
        }
    }
	oLinks          =   null;
}                          


/**
 * Fonction : Event Handlers
 * Description : Fonction permettant d'attacher des actions (fonctions Javascript) à des évènements.
 * Cette fonction a été créée à partir de celles de Scott Andrew LePera (http://www.scottandrew.com/weblog/articles/cbs-events),
 * Simon Willison (http://simon.incutio.com/archive/2004/05/26/addLoadEvent) et du commentaire 
 * de Mark Wubben (http://simon.incutio.com/archive/2004/05/26/addLoadEvent#comment2)
 * Les techniques de chacun des auteurs ont été adaptées afin de fonctionner de façon homogène et d'assurer la compatibilité
 * avec un maximum de navigateur (style W3C / netscape mozilla, Internet Explorer, et autres).
 
 @author : Julien Fredon @ imaginance
*/
function addEvent(obj, evType, fn, useCapture)
{
	/* Attachement d'évènements standard w3c dom (netscape / mozilla / safari 1.2) */
	if (obj.addEventListener)
	{
		obj.addEventListener(evType, fn, useCapture);
		return true;
	}
	else 
	{
		/* Attachement d'évènements Internet Explorer */
		if (obj.attachEvent)
		{
			var r = obj.attachEvent("on" + evType, fn);
			return r;
		}
		else 
		{
			/* Attachement d'évènements navigateurs non compatibles (safari 1.0, etc.) */
			var buffer = obj["on" + evType];
			if (typeof buffer != "function") {
				obj["on" +evType] = fn;
			}
			else
			{
				obj["on" +evType] = function() {
										buffer();
										fn();
									};
			}
		}
	}
};




/* 
Déclaration de la fonction si cela n'a pas déjà été fait dans un autre script.
*/

//addEvent(window, 'load', SetPopupImages);



