
//"namespace" visionneuse
window.visio =
{
    /******************** PARAMETRES *******************/
    
    //variables
    taille_reelle: false,
    header: 'header',
    //miniatures
    miniatures: 'mini',
    nb_miniatures_maxi: 8,
    hauteur_bandeau: 90,
    //boutons
    diapo_btns: 'diapo',
    //pub
    affpub: true,
    pub_parent: 'pub',
    pub_display: 'pub_display',
    iframe_url: 'http://'+ window.location.hostname +'/pub_visionneuse.htm',
    iframe_id: 'iframe_pub',
    //infos de l'image
    img_id: 'img',
    descr_img: 'descr_img',
    copy_img: 'copy_img',
    full_link: 'lien_full',
    star_name: 'star_name',
    diapo_div: 'diaporamas',
    diapo_img: 'related_diapo',
    more_stars: 'more_stars',
    article_div: 'articles',
    article_img: 'related_article',
    //textes
    more_diapo: 'Autre diaporama &raquo;',
    more_diapos: 'Autres diaporamas &raquo;',
    more_article: 'Les 3 dernières infos &raquo;',
    les_photos_de: 'Les photos de ',
    //compteur
    counter: 'counter',
    counter_base: '/visionneuse/',
    counter_format: '',
    //dossiers images
    base_url_img: '',
    base_url_small_img: '',
    base_url_big_img: '',  

    /*******************************************************/

    onclicks: //fonctions pour la gestion des onclick. Le nom de la fct est l'id de l'objet
    {
        lent: function ()
        {
            visio.onclicks.arret();
            visio.diapo.allumerBtn( "lent" );
            visio.diapo.intervalle = visio.diapo.intervalle_lent;
            visio.diapo.precharger();
            return false;
        },

        rapide: function ()
        {
            visio.onclicks.arret();
            visio.diapo.allumerBtn( "rapide" );
            visio.diapo.intervalle = visio.diapo.intervalle_rapide;
            visio.diapo.precharger();
            return false;
        },

        arret: function ()
        {
            visio.diapo.allumerBtn( "arret" );
            clearTimeout( visio.diapo.timeout );
            visio.diapo.img_pre = null;
            return false;
        },

        precedente: function () 
        {
            visio.onclicks.arret();
            visio.choisirImage( ( visio.index_act-1+visio.nbi ) %visio.nbi );
            return false;
        },

        suivante: function () 
        {
            visio.onclicks.arret();
            visio.allerSuivante();
            return false;
        },

        mini: function (e) 
        {
            visio.onclicks.arret();
            e = xbevent( e );
            var cible = e.cible;
            //cible.blur();
            while( cible.nodeName.toLowerCase()!="li" && cible.nodeName.toLowerCase()!="ul" ) {
                cible = cible.parentNode;
            }
            if( cible.nodeName.toLowerCase()=="li" ) {
                visio.choisirImage( cible.index_image );
            }
            return false;
        },

        lien_full: function ()
        {
            //afficher l'image taille r�elle
            visio.onclicks.arret();
            visio.taille_reelle = true;
            visio.img_aff.style.width = '';
            visio.img_aff.style.height = '';
            // vérification d'une grande image, si on la trouve, on l'affiche, sinon on garde la normale
            var image_big = new Image();
            image_big.src = visio.img_aff.src.replace(/\.(\w+)$/gi, '_big.$1');
            image_big.onload = function () {
              if (this.width && this.height) {
              	visio.img_aff.src = this.src;
                visio.onresize();
              }
            }
            addClass(doc.byId(visio.img_id), 'full');
            doc.byId(visio.full_link).style.display = 'none';
            doc.byId(visio.pub_parent).style.display = 'none';
            visio.onresize();
            return false;
        }
        
    },

    diapo:  //ce qui concerne le diaporama
    {
        timeout: null,
        intervalle_lent: 2.5*1000,
        intervalle_rapide: 1000,

        //  allume le bouton avec l'id sp�cifi�, et �teint les autres
        allumerBtn: function ( id_btn ) {
            var tmp = doc.byId(visio.diapo_btns).getElementsByTagName( "a" );
            for( var i=0; i!=tmp.length; i++ )
            {
                delClass( tmp[ i ], "on" );
            }
            addClass( doc.byId( id_btn ), "on" );
        },

        //  pr�charge la diapo suivante
        precharger: function () {
            var img_pre = visio.diapo.img_pre = new Image();
            img_pre.onload = visio.diapo.onload;
            visio.diapo.timeout = setTimeout( visio.diapo.ontimeout, visio.diapo.intervalle );
            img_pre.src = visio.getInfosImage( ( visio.index_act+1 ) %visio.nbi ).url_full;
        },

        ontimeout: function () {
            visio.diapo.timeout = null;
            if( visio.diapo.img_pre.complete ) {
                visio.diapo.suivante();
            }
        },

        onload: function () {
            if( visio.diapo.timeout==null ) {
                visio.diapo.suivante();
            }
        },

        //  appel� quand l'image suivante est pr�charg�e ET que le timer diapos est pass�
        suivante: function () {
            visio.allerSuivante();
            visio.diapo.precharger();
        }
    },

    //  va � l'image suivante. utilis� par onclicks.suivante et les diapos
    allerSuivante: function () {
        visio.choisirImage( ( visio.index_act+1 ) %visio.nbi );
    },

    //choisit dans la liste d'images celle dont l'index est fourni en param�tre et l'affiche
    choisirImage: function ( index ) {
    
        var num_prec, num_suiv, start, stop;
        var i_reel, infos, li, infos, descr;
        var com, h1;
        var nb_miniatures_maxi = visio.nb_miniatures_maxi;
        var ul = doc.byId(visio.miniatures);
        var star_name = doc.byId(visio.star_name);
        var descr_img = doc.byId(visio.descr_img);
        var copy_img = doc.byId(visio.copy_img);
        var diapo_img = doc.byId(visio.diapo_img);
        var display_pub = doc.byId(visio.pub_display);
        var counter = doc.byId(visio.counter);
        var more_stars = doc.byId(visio.more_stars);
        var article_img = doc.byId(visio.article_img);   
        var others_stars = '';
        var diapos = '';
        var articles = '';

        visio.affRedimAuto();

        //  nombre d'images
        var nbi = visio.nbi;
        num_prec = ( index+nbi-1 ) % nbi;
        num_suiv = ( index+1 ) %nbi;

        if( nbi<=nb_miniatures_maxi ) {
            start = 0;
            stop = nbi;
        } else {
            start = num_prec;   //  afficher une image avant l'image actuelle
            stop = start + nb_miniatures_maxi;
        }

        ul.innerHTML = '';
        while( ul.firstChild ) {
            ul.removeChild( ul.firstChild );
        }
        for( var i_img = start; i_img != stop; i_img++ ) {
            i_reel = i_img % nbi;
            
            infos = visio.getInfosImage( i_reel );
            li = doc.createEl( 'li', null,
                [ doc.createEl( 'a', { href: infos.url_htm, title: infos.title_img },
                    [ doc.createEl( 'img', { src: infos.url_mini, alt: infos.title_img } ) ]
                ) ] );
                
            li.index_image = i_reel;
            
            switch( i_reel )
            {
                case index:
                    visio.img_aff.src = infos.url_full;

                    addClass( li, 'on' );

                    if(visio.titre_base) {
                      doc.title = infos.title_img + ' - ' + visio.titre_base;
                    }

                    visio.img_aff.title = infos.title_img;
                    visio.img_aff.alt = infos.title_img;

                    if(star_name != null) {
                      star_name.innerHTML = '';
                      star_name.innerHTML = stripTags(infos.title_img);
                    }

                    if(descr_img != null) {
                      descr_img.innerHTML = '';
                      descr_img.innerHTML = stripTags(infos.info_img);
                    }
                   	
                    if(article_img != null && infos.info_article != '' && infos.info_article.length > 0) 
										{
                      doc.byId(visio.article_div).getElementsByTagName('h4')[0].innerHTML = visio.more_article; 
                    } 
										else 
										{
                      if(doc.byId(visio.article_div) != null) {
                        doc.byId(visio.article_div).getElementsByTagName('h4')[0].innerHTML = '';
                        article_img.innerHTML = '';
                      }
                    }
                    
                    if(diapo_img != null && infos.info_diapo.length > 0) {
                      if(infos.info_diapo.length > 1) {
                        doc.byId(visio.diapo_div).getElementsByTagName('h4')[0].innerHTML = visio.more_diapos;
                      } else {
                        doc.byId(visio.diapo_div).getElementsByTagName('h4')[0].innerHTML = visio.more_diapo;                      
                      }
                      for(i=0; i<infos.info_diapo.length;i++) {
                        diapos += '<li><a href="/images/' + infos.info_diapo[i][0] + '/' + infos.info_diapo[i][1] + '_0.htm" title="' + stripTags(infos.info_diapo[i][2]) + '">';
                        /* cas où star */
                        if(infos.info_diapo[i][3] == 3) { diapos += visio.les_photos_de; }
                        
                        diapos += infos.info_diapo[i][2] + '</a></li>';
                      }
                      diapo_img.innerHTML = diapos;
                    } 
                    
                    if(more_stars != null) {
                      more_stars.innerHTML = '';
                      for(i=0; i<infos.info_tags.length;i++) {
                        others_stars += '<li><a href="' + infos.info_tags[i][1] + '" title="' + stripTags(infos.info_tags[i][0]) + '">' + infos.info_tags[i][0] + '</a>';
                        if(i<infos.info_tags.length-1) { others_stars += ', '; }    
                        others_stars += '</li>';
                      }
                      more_stars.innerHTML = others_stars;
                    }

                    if(copy_img != null) {
                      copy_img.innerHTML = '';
                      if(infos.info_copy != '&copy; ') { copy_img.innerHTML = stripTags(infos.info_copy); }
                    }
                    
                    if(counter != null) {
                      counter.src = visio.counter_base + infos.info_id + visio.counter_format;
                    }
                                        
                    if( window.s && s.t )
                    {
                        s.t();      //omniture
                    }
                    
                    // reload google analytics
                    try {
                    	var pageTracker = _gat._getTracker("UA-1183843-8");
                    	pageTracker._trackPageview();
                    } catch(err) {}

                    break;
                case num_prec:
                    doc.byId( 'precedente' ).href = infos.url_htm;
                    break;
                case num_suiv:
                    doc.byId( 'suivante' ).href = infos.url_htm;
                    visio.img_aff.parentNode.href = infos.url_htm;
                    break;
                default:
                    break;
            }

            ul.appendChild( li );
        }
        
        visio.txt_img_sur.nodeValue = " Image "+(index+1)+' sur '+nbi;
        visio.index_act = index;

        //on cache l'iframe pour �viter le flash blanc
        if(doc.byId(visio.pub_display) != null) {
          doc.byId(visio.pub_display).style.visibility = 'hidden';
        }
        
        visio.displayAds();

        visio.onresize();
        
    },

    onloadimgdims: function ()
    {
        this.chargee = true;
        visio.onresize();
    },

    onresize: function ()
    {
        if( !visio.img_cachee || visio.img_aff.src != visio.img_cachee.src )
        {
            visio.img_cachee = new Image();
            visio.img_cachee.onload = visio.onloadimgdims;
            visio.img_cachee.src = visio.img_aff.src;
        }        
        else if( visio.img_cachee.chargee )
        {
            var posdiv = findPos( doc.byId( visio.img_id ) );
            var dim = findClientDimensions();
            posdiv[ 1 ] = findPos( visio.img_aff )[ 1 ];

            doc.byId(visio.img_id).style.paddingRight = '0px';
            dim[ 0 ] -= ( visio.affpub ? doc.byId(visio.pub_parent).offsetWidth : 0 ) + 10;   //sky (éventuellement) + marge à droite de l'image
           
            var cal;
            
            if(doc.byId(visio.more_stars) != null) {
              cal = doc.byId(visio.more_stars).offsetHeight;
            }
            if(doc.byId(visio.copy_img) != null) {
              cal = cal + doc.byId(visio.copy_img).offsetHeight;
            }
           
            dim[1] = dim[1] - cal - 3; // 3px car bordures image + 1px
            if(doc.byId(visio.full_link).style.display == 'block') {
              dim[1] = dim[1] - doc.byId(visio.full_link).offsetHeight; 
            }
            
            for( var i=0; i!=2; i++ ) {
              dim[ i ] -= posdiv[ i ] + 20;   //20: marge pour les éventuelles scrollbars
            }
            
            var x = dim[0];   //place disponible en largeur
            var y = dim[1];   //et en hauteur
            var l = visio.img_cachee.width;     //largeur de l'image
            var h = visio.img_cachee.height;    //hauteur

            if(l >= x) {
              if(l >= h) { //paysage
                visio.img_aff.style.width = '';
                visio.img_aff.style.height = y + 'px';
                document.getElementsByTagName('table')[0].style.width = '';
                document.getElementsByTagName('td')[0].style.width = '';
                doc.byId(visio.pub_parent).style.left = '';
                doc.byId(visio.pub_parent).style.position = '';
                doc.byId(visio.full_link).style.display = 'block';  
              } else { //portrait
              
                if(l - x <= doc.byId(visio.pub_parent).offsetWidth) {
                  x = x - doc.byId(visio.pub_parent).offsetWidth;
                  visio.img_aff.style.height = '';
                  visio.img_aff.style.width = x + 'px';
                }
                if(h >= y) {
                  visio.img_aff.style.width = '';
                  visio.img_aff.style.height = y + 'px';                
                }
              
                document.getElementsByTagName('table')[0].style.width = doc.byId(visio.miniatures).offsetWidth + 'px';
                document.getElementsByTagName('td')[0].style.width = doc.byId(visio.miniatures).offsetWidth + 'px';
                doc.byId(visio.pub_parent).style.left = doc.byId(visio.diapo_btns).offsetLeft + 'px';
                doc.byId(visio.pub_parent).style.position = 'absolute';
                doc.byId(visio.full_link).style.display = 'none';
              }           
            } else {    
               
              if(h >= y) {             
                visio.img_aff.style.width = ''; 
                visio.img_aff.style.height = y + 'px';
                doc.byId(visio.full_link).style.display = 'block';         
              } else {
                if(l >= h) { //paysage      
                  visio.img_aff.style.height = '';
                  visio.img_aff.style.width = l + 'px';
                } else { //portrait
                  visio.img_aff.style.width = '';
                  visio.img_aff.style.height = h + 'px';
                }
                doc.byId(visio.full_link).style.display = 'none';   
              }      
            
              if(x > l && l > h) {   // paysage
                document.getElementsByTagName('table')[0].style.width = '';
                document.getElementsByTagName('td')[0].style.width = '';
                doc.byId(visio.pub_parent).style.left = '';
                doc.byId(visio.pub_parent).style.position = '';
                doc.byId(visio.full_link).style.display = 'block';  
              } else {
                document.getElementsByTagName('table')[0].style.width = doc.byId(visio.miniatures).offsetWidth + 'px';
                document.getElementsByTagName('td')[0].style.width = doc.byId(visio.miniatures).offsetWidth + 'px';
                doc.byId(visio.pub_parent).style.left = doc.byId(visio.diapo_btns).offsetLeft + 'px';
                doc.byId(visio.pub_parent).style.position = 'absolute'; 
              }
              
            }    
            if (visio.taille_reelle) {
              doc.byId(visio.full_link).style.display = 'none'; 
            }
        }
        
    },

    affRedimAuto: function ()
    {
        // annule le "taille_réelle" de l'image
        visio.img_aff.src = visio.img_aff.src.replace('_big', '');
        visio.taille_reelle = false;
        delClass( doc.byId(visio.img_id), 'full' );
        doc.byId(visio.full_link).style.display = 'block';  
        doc.byId(visio.pub_parent).style.display = '';      
        visio.onresize();
    },

    onclick_image: function ( e )
    {
        e = xbevent( e );
        
        if( visio.taille_reelle )
        {
            visio.onclicks.arret();
            visio.affRedimAuto();
        }
        else
        {
            switch( e.type )
            {
                case 'click':
                    visio.onclicks.suivante();
                    break;
                case 'contextmenu':
                    visio.onclicks.precedente();
                    break;
            }
        }

        return false;
    },
    
    displayAds: function() 
    { 
      if(doc.byId(visio.iframe_id) != null) { doc.byId(visio.pub_parent).removeChild(doc.byId(visio.iframe_id)); }

      visio.iframe = doc.createEl('iframe', { src: visio.iframe_url, id: visio.iframe_id, border:'0', scrolling:'no', frameBorder:'0' });
      doc.byId(visio.pub_parent).appendChild(visio.iframe);
      if(doc.byId(visio.pub_display) != null) {
        doc.byId(visio.pub_display).style.visibility = 'visible';
      }
  
    },

    /*
    initialise la visionneuse
    les �l�ments HTML doivent d�j� exister, ils seront pris par id:
    var visio.miniatures -> ul qui contient les images dans des liens
    */
    preparerVisionneuse: function ()
    {
    
        cleanNode( doc.byId(visio.miniatures) );
        visio.txt_img_sur = doc.byId(visio.header).getElementsByTagName( 'h1' )[ 0 ].lastChild;
        visio.index_act = parseInt( visio.txt_img_sur.nodeValue.match( /Image (\d+) sur \d+/ )[ 1 ] )- 1;
        visio.nbi = visio.liste_images.length;

        for( var id in visio.onclicks )
        {
            doc.byId( id ).onclick = visio.onclicks[ id ];
        }

        //  image utilis�e pour l'affichage
        visio.img_aff = doc.byId(visio.img_id).getElementsByTagName( "img" )[ 0 ];
        visio.img_aff.parentNode.onclick = visio.onclick_image;
        if( visio.stop_contextmenu )
        {
            visio.img_aff.parentNode.oncontextmenu = visio.onclick_image;
        }

        window.onresize = visio.onresize;
        

        if(doc.byId(visio.diapo_btns) != null) { appear(visio.diapo_btns); }
        
        if(doc.byId(visio.pub_parent) != null) { appear(visio.pub_parent); }

        //initialise certaines choses (comme la propri�t� index_image pour chaque li) et appelle onresize
        visio.choisirImage( visio.index_act );
        
    }
    
};
