//ATTENTION!
//penser à activer le script sur les pages qui en ont besoin dans index.php

// optimisation, mise en cache des $("elem") 
var e = []; //tableau contenant le cache des éléments

function ce(id) { 
    //Retourne l'objet (du cache, et s'il n'existe pas, va la chercher...)

    if ( !e[id] ) {
        e[id] = $(id);
    }

    return e[id];
}

var App = {
    //Application principale

    init: function() {
        Chrono.start("main");
        Debug.init();
        Debug.log("start");
        
        if( $(".visuels").length == 1 ) {        
            Ticker.init();
        }
        //Enrouleur.init();
        //Enrouleur.hideAll();

        if( $(".contacts form").length == 1 ) {
            Contacts.init();
        }


        
        App.blank();

		Debug.log("end main init");

    },
    
    blank: function() {
    	//sorry for doing that...
    	
    	//on cherche tous les liens externes
    	$('a').each( function() {
    		
    		//si le lien commence par http://, on lui colle un _blank
    		
    		if( $(this).attr('href').substr(0,7) == "http://") {
    			Debug.log($(this).attr('href') + " -> blank ");
    			this.target = "_blank";
    		}
    		
    		//si le lien à la classe blank (pour forcer dans les liens internes aussi)
    		if( $(this).hasClass('blank')) {
    			Debug.log($(this).attr('href') + " -> blank ");
    			this.target = "_blank";
    		}
    		

    	});
    	
    	
    }

};

var Contacts = {
    
    init: function() {
        Debug.log("Contact.init");
    
        //on vire le captcha
        //var code = '<input type="hidden" name="antispam" value="' + $("body").attr("data-asRand") + '">';
        var code = '<input type="hidden" name="antispam" value="Oui">';
        $("#captcha").html(code);
    
    }
    
};

var Enrouleur = {

    init: function() {
        Debug.log("Enrouleur.init");
        var me = this;
        ce(".question").click(function(){
            Debug.log("click");
            me.toggle(this);
        });
    },
    
    toggle: function(obj) {
        $(obj).parent().children("p:not(.question)").toggle();
    },
    
    hideAll: function() {
        Debug.log("hideAll");
        $(".enr p:not(.question)").hide();
    }
};

var Ticker = {

    imgList: new Array(),
    run: true,
    delay: 2000, //ms
    timer: null,
    current: 0,

    init: function() {
        //Initialisation du ticker

        Debug.log("ticker init");
        
        var me = this;
        
        //recherche de la liste des images
        $("#ticker img").each( function() {
            me.imgList.push($(this));
        });
        
        //si on a pas d'image, on laisse tomber... 
        if( this.imgList.length != 0) {
         
            this.addControls();
    
            //on masque toutes les images (a la main pour éviter le premier fadeout)
            $("#ticker img").hide();
            
            //on affiche le premier ticker
            this.show();
    
            //on lance le timer...
            this.timer = setTimeout("Ticker.displayNext()", this.delay);
        } else {
            Debug.log("no images for slideShow");
        }

    },
    
    addControls: function() {
        //Ajout des boutons pour changer manuellement l'image, stopper et redémarrer le ticker
        
        var me = this;
        
        $("#menu .active").append('<ul class="controls"></ul>');
        $(this.imgList).each( function() {
            $(".controls").append( '<li id="ticker-control-' + $(this).attr("data-id") + '"><a data-show="' + $(this).attr("data-id") + '" href="#">' + $(this).attr("alt") + '</a></li>' );     
        });
        
        //on ajoute les fonctions aux boutons
        $(".controls li a").click( function() {
            //on stoppe le défilement automatique
            me.stop();
            //force l'image courante.
            me.current = parseInt( $(this).attr("data-show") ) ;
            me.show();
            return false
        }); 
        
        //au clic sur le ticker, on force l'affichage de l'image suivante, et on redémare...
        $("#ticker").click( function() {
            me.run = true;
            me.displayNext();
        });
        
    },
    
    displayNext: function() {
        //Affiche l'image suivante
        
        clearTimeout( this.timer );
        
        //seulement si le défilement est en marche
        if( this.run ) {
            this.current += 1;
            
            //reset pour ne pas dépasser les bornes
            if( this.current >= this.imgList.length ) {
                this.current = 0;
            }
            
            this.show();
  
            //on relance le timer pour boucler...         
            this.timer = setTimeout("Ticker.displayNext()", this.delay);
        }
    
    },
    
    stop: function() {
        //Arrêt du défilement automatique des images
        
        clearTimeout( this.timer );
        this.run = false;
    },
    
    show: function() {
        //affiche l'image courante
        
        this.hideAll();
        //Affiche l'image elle-même
        this.imgList[this.current].fadeIn('slow');
        //met la classe active au bouton correspondant
        $("#ticker-control-" +  this.current ).addClass("active");
    },
    
    hideAll: function() {
        //masque toutes les images
            
        $("#ticker img").fadeOut('fast');
        $("#menu .controls li").removeClass("active");
    }
    
};

var Chrono = {
    //Chronomère de l'application et les fonctions qui lui sont associées.
    //Attention, pour ne pas trop fausser les mesures, on ne vérifie pas si les compteurs existent!!! donc il faut les lancer avant de les stopper ou de les lire...

    data: new Array(), //Liste des timestamps de départ
    
    start: function( counter ) {
        //Démarrage d'un compteur
        var d = new Date();
        this.data[counter] = new Array();
        this.data[counter]['start'] = d;
    },
    
    stop: function( counter ) {
        this.data[counter]['stop'] = new Date();
    },
    
    inter: function( counter ) {
        //Retourne un temps intermédiaire

        var s = new Date();
        var d = s - this.data[counter]['start'] ;
        //Debug.log("chrono : " + counter + " : " + d );
        return d;
    },
    
    read: function( counter ) {
        var d = this.data[counter]['stop'] - this.data[counter]['start'] ;
        Debug.log("chrono : " + counter + " : " + d );
    },
    
    sr: function( counter ) {
        //stop and read
        
        this.stop( counter );
        this.read( counter );
    }
};

var Debug = {
    
    level: null, //Niveau de débug
    
    init: function() {
        this.level = ce("body").attr("data-debug");
        ce('#log').click(function() {
            //alert("reset");
            Debug.clear();
        });
       
        //this.mouseTracking();
        
    },
    
    mouseTracking: function() {
    
        if( this.level > 0 ) {
            //on traque la souris
            $().mousemove( function(e) {
                var x = e.pageX;
                var y = e.pageY;
                var x1 = x - 272;
                var y1 = y - 105;
                
                ce("#mousePos").html("x:" + x + " y:" + y + "<br>x: " + x1  + " y:" + y1);
            });
        }
        
    },
    
    log: function( msg ) {
        
        if( this.level > 0 ) {
            var t = Chrono.inter("main");
            ce('#log').prepend("<p>@" + t + "ms : <br>" + msg + "</p>");       
        }
        
    },
    
    clear: function() {
        ce('#log').empty();
    },
    
    stop: function() {
        //onFaitToutPlanter();
        throw "exit";
    }
    
};



/////////
// INIT
////////
$(document).ready(App.init);


