/*    Script: olMoveDirection.js
        
        Dependencies:
        
      Class: olMoveDirection
        8 Flèches de directions sur la carte.
*/
var olMoveDirection = new Class({
/*  Function: getOptions
        Options du contrôle
    
        Paramètres:
        options - objet avec des clés/valeurs
        
        Options:
        container - element du DOM ou sont les 8 DIV (1 DIV par flèche)
    */
    getOptions: function(){
        return {
            classContainer: 'moveDirection'
        };
    },
	initialize: function(pMap, options){
        this.map = pMap;
        this.setOptions(this.getOptions(), options);
        
        //Récupère la liste des 8 flèches en fonction du nom de la classe du div container.
        var divs = $$('.'+ this.options.classContainer +' div');
        // Ajoute les événements sur les 8 boutons
        divs.addEvent('mousedown', this.zoomDirection.bind(this));
        
        //Effet de transparence + affichage au survol
        divs.setOpacity(0.5);
        divs.addEvent('mouseover', this.show.bind(this));
        divs.addEvent('mouseout', this.hide.bind(this));
    },
    show: function(evt){
        var div = evt.target;
        if(div) div.setOpacity(1);
    },
    hide: function(evt){
        var div = evt.target;
        //if(div) div.setOpacity(0.5);
        //Avec une transition !
        if(div) div.effect('opacity').start(1,0.5);
    },
	/* Function: zoomdirection
	    zoom à partir des flêches sur au bord de la carte
	*/
	zoomDirection: function(evt){
        Event.stop(evt);
		var direction = Event.element(evt).id;
        var dx = dy = 0;
        
        //Récupère le 1/4 de la largeur et hauteur de la map en mètres
    	var iDeltaHeight = this.map.size.h/4;
    	var iDeltaWidth = this.map.size.w/4;
        
	    switch(direction){	        
    	  case  'movenorth':
                dy = iDeltaHeight;
                break;
    	  case  'moveeast':
                dx = iDeltaWidth;
                break;
    	  case  'movewest':
                dx = -iDeltaWidth;
                break;
    	  case  'movesouth':
                dy = -iDeltaHeight;
                break;
    	  case  'movenortheast':
                dx = iDeltaWidth;
                dy = iDeltaHeight;
                break;
    	  case  'movenorthwest':
                dx = -iDeltaWidth;
                dy = iDeltaHeight;
                break;
    	  case  'movesoutheast':
                dx = iDeltaWidth;
                dy = -iDeltaHeight;
                break;
    	  case  'movesouthwest':
                dx = -iDeltaWidth;
                dy = -iDeltaHeight;
                break;
          default:
                break;
        }
        
        //Mise à jour de la carte
        this.map.pan(dx, -dy);
    }
});

olMoveDirection.implement(new Options);

