|  | @@ -143,10 +143,14 @@
 | 
	
		
			
				|  |  |        _attracter.fixed = true;
 | 
	
		
			
				|  |  |        _repulser_center = _physics.makeParticle(100, _canvas.width/2, _canvas.height/2);
 | 
	
		
			
				|  |  |        _repulser_center.fixed = true;
 | 
	
		
			
				|  |  | -      _repulser_top = _physics.makeParticle(100, _canvas.width/2, 100);
 | 
	
		
			
				|  |  | -      _repulser_top.fixed = true;
 | 
	
		
			
				|  |  | -      _repulser_bottom = _physics.makeParticle(100, _canvas.width/2, _canvas.height-100);
 | 
	
		
			
				|  |  | -      _repulser_bottom.fixed = true;
 | 
	
		
			
				|  |  | +      _scrambler_TL = _physics.makeParticle(100, -100, -100);
 | 
	
		
			
				|  |  | +      _scrambler_TL.fixed = true;
 | 
	
		
			
				|  |  | +      _scrambler_TR = _physics.makeParticle(100, _canvas.width+100, -100);
 | 
	
		
			
				|  |  | +      _scrambler_TR.fixed = true;
 | 
	
		
			
				|  |  | +      _scrambler_BR = _physics.makeParticle(100, _canvas.width+100, _canvas.height+100);
 | 
	
		
			
				|  |  | +      _scrambler_BR.fixed = true;
 | 
	
		
			
				|  |  | +      _scrambler_BL = _physics.makeParticle(100, -100, _canvas.height+100);
 | 
	
		
			
				|  |  | +      _scrambler_BL.fixed = true;
 | 
	
		
			
				|  |  |        // TODO: move _attracter and _repulser on window resize
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -196,14 +200,14 @@
 | 
	
		
			
				|  |  |        this.velocity_threshold = 0.01;
 | 
	
		
			
				|  |  |        // define radius regarding entries length
 | 
	
		
			
				|  |  |        switch(true){
 | 
	
		
			
				|  |  | -        case this.entrees.length > 1 & this.entrees.length <= 3:
 | 
	
		
			
				|  |  | -          this.r = 7.5;
 | 
	
		
			
				|  |  | -          break;
 | 
	
		
			
				|  |  |          case this.entrees.length > 3:
 | 
	
		
			
				|  |  |            this.r = 10;
 | 
	
		
			
				|  |  |            break;
 | 
	
		
			
				|  |  | +        case this.entrees.length > 1 && this.entrees.length <= 3:
 | 
	
		
			
				|  |  | +          this.r = 7;
 | 
	
		
			
				|  |  | +          break;
 | 
	
		
			
				|  |  |          default:
 | 
	
		
			
				|  |  | -          this.r = 5;
 | 
	
		
			
				|  |  | +          this.r = 4;
 | 
	
		
			
				|  |  |            break;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -214,6 +218,7 @@
 | 
	
		
			
				|  |  |        this.faded = false;
 | 
	
		
			
				|  |  |        this.center = false;
 | 
	
		
			
				|  |  |        this.aside = false;
 | 
	
		
			
				|  |  | +      this.scrambling = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // prototypes
 | 
	
		
			
				|  |  |        if (typeof Node.initialized == "undefined") {
 | 
	
	
		
			
				|  | @@ -224,7 +229,14 @@
 | 
	
		
			
				|  |  |            this.x = this.wall_limits.left + Math.random()*(this.wall_limits.right - this.wall_limits.left);
 | 
	
		
			
				|  |  |            this.y = this.wall_limits.top  + Math.random()*(this.wall_limits.bottom - this.wall_limits.top);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          // physics
 | 
	
		
			
				|  |  | +          this.initPhysics();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          // if(this.id == '620'){
 | 
	
		
			
				|  |  | +          //   _node_pop_up.setNode(this);
 | 
	
		
			
				|  |  | +          // }
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Node.prototype.initPhysics = function(){
 | 
	
		
			
				|  |  |            // particule
 | 
	
		
			
				|  |  |            this.p = _physics.makeParticle(this.mass, this.x, this.y);
 | 
	
		
			
				|  |  |            this.p.velocity = new Physics.Vector((Math.random()-0.5)*_p_velocity_factor, (Math.random()-0.5)*_p_velocity_factor);
 | 
	
	
		
			
				|  | @@ -234,14 +246,15 @@
 | 
	
		
			
				|  |  |            // repulsers
 | 
	
		
			
				|  |  |            this.repulse_center = _physics.makeAttraction(_repulser_center, this.p, -100, _canvas.height/2);
 | 
	
		
			
				|  |  |            this.repulse_center.on = false;
 | 
	
		
			
				|  |  | -          // this.repulse_left = _physics.makeAttraction(_repulser_top, this.p, -100, _canvas.height/3);
 | 
	
		
			
				|  |  | -          // this.repulse_left.on = false;
 | 
	
		
			
				|  |  | -          // this.repulse_right = _physics.makeAttraction(_repulser_bottom, this.p, -100, _canvas.height/3);
 | 
	
		
			
				|  |  | -          // this.repulse_right.on = false;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          // if(this.id == '620'){
 | 
	
		
			
				|  |  | -          //   _node_pop_up.setNode(this);
 | 
	
		
			
				|  |  | -          // }
 | 
	
		
			
				|  |  | +          this.scramble_TL = _physics.makeAttraction(_scrambler_TL, this.p, -100, _canvas.height/3);
 | 
	
		
			
				|  |  | +          this.scramble_TL.on = false;
 | 
	
		
			
				|  |  | +          this.scramble_TR = _physics.makeAttraction(_scrambler_TR, this.p, -100, _canvas.height/3);
 | 
	
		
			
				|  |  | +          this.scramble_TR.on = false;
 | 
	
		
			
				|  |  | +          this.scramble_BR = _physics.makeAttraction(_scrambler_BR, this.p, -100, _canvas.height/3);
 | 
	
		
			
				|  |  | +          this.scramble_BR.on = false;
 | 
	
		
			
				|  |  | +          this.scramble_BL = _physics.makeAttraction(_scrambler_BL, this.p, -100, _canvas.height/3);
 | 
	
		
			
				|  |  | +          this.scramble_BL.on = false;
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Node.prototype.calcWallLimits = function(){
 | 
	
	
		
			
				|  | @@ -262,11 +275,11 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            // this.p.velocity.multiplyScalar(0.99);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          // if(!this.p.resting()){
 | 
	
		
			
				|  |  | -          //   this.checkVelocityThreshold();
 | 
	
		
			
				|  |  | +          if(!this.p.resting()){
 | 
	
		
			
				|  |  | +            // this.checkVelocityThreshold();
 | 
	
		
			
				|  |  |              this.checkWallBouncing();
 | 
	
		
			
				|  |  |              this.updatePos();
 | 
	
		
			
				|  |  | -          // }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  |            if(!this.aside)
 | 
	
		
			
				|  |  |              this.checkMouse();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -276,10 +289,12 @@
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Node.prototype.checkVelocityThreshold = function(){
 | 
	
		
			
				|  |  | -          if (Math.abs(this.p.velocity.x) < this.velocity_threshold
 | 
	
		
			
				|  |  | -           && Math.abs(this.p.velocity.y) < this.velocity_threshold){
 | 
	
		
			
				|  |  | +          if(!this.centered || !this.aside){
 | 
	
		
			
				|  |  | +            if (Math.abs(this.p.velocity.x) < this.velocity_threshold
 | 
	
		
			
				|  |  | +            && Math.abs(this.p.velocity.y) < this.velocity_threshold){
 | 
	
		
			
				|  |  |                this.p.velocity.multiplyScalar(0);
 | 
	
		
			
				|  |  |                // this.p.makeFixed();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -358,29 +373,50 @@
 | 
	
		
			
				|  |  |            this.faded = false;
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        Node.prototype.setCenteredOnEntree = function(tid){
 | 
	
		
			
				|  |  | +          this.e_color = 'e_col_'+tid;
 | 
	
		
			
				|  |  | +          this.setCentered();
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          Node.prototype.setCentered = function(){
 | 
	
		
			
				|  |  |            this.center = true;
 | 
	
		
			
				|  |  | +          this.stopScrambling();
 | 
	
		
			
				|  |  |            this.unsetAside();
 | 
	
		
			
				|  |  | -          this.unFade();
 | 
	
		
			
				|  |  |            this.attract.on = true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          Node.prototype.unsetCentered = function(){
 | 
	
		
			
				|  |  |            this.center = false;
 | 
	
		
			
				|  |  |            this.attract.on = false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          Node.prototype.setAside = function(){
 | 
	
		
			
				|  |  |            this.aside = true;
 | 
	
		
			
				|  |  |            this.fade();
 | 
	
		
			
				|  |  | +          this.stopScrambling();
 | 
	
		
			
				|  |  |            this.unsetCentered();
 | 
	
		
			
				|  |  |            this.repulse_center.on = true;
 | 
	
		
			
				|  |  | -          // this.repulse_left.on = true;
 | 
	
		
			
				|  |  | -          // this.repulse_right.on = true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          Node.prototype.unsetAside = function(){
 | 
	
		
			
				|  |  |            this.aside = false;
 | 
	
		
			
				|  |  | +          this.unFade();
 | 
	
		
			
				|  |  |            this.repulse_center.on = false;
 | 
	
		
			
				|  |  | -          // this.repulse_left.on = false;
 | 
	
		
			
				|  |  | -          // this.repulse_right.on = false;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Node.prototype.scramble = function(){
 | 
	
		
			
				|  |  | +          this.scrambling = true;
 | 
	
		
			
				|  |  | +          this.unsetCentered();
 | 
	
		
			
				|  |  | +          this.unsetAside();
 | 
	
		
			
				|  |  | +          this.scramble_TL.on = true;
 | 
	
		
			
				|  |  | +          this.scramble_TR.on = true;
 | 
	
		
			
				|  |  | +          this.scramble_BR.on = true;
 | 
	
		
			
				|  |  | +          this.scramble_BL.on = true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Node.prototype.stopScrambling = function(){
 | 
	
		
			
				|  |  | +          this.scrambling = false;
 | 
	
		
			
				|  |  | +          this.scramble_TL.on = false;
 | 
	
		
			
				|  |  | +          this.scramble_TR.on = false;
 | 
	
		
			
				|  |  | +          this.scramble_BR.on = false;
 | 
	
		
			
				|  |  | +          this.scramble_BL.on = false;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Node.prototype.draw = function(){
 | 
	
	
		
			
				|  | @@ -421,6 +457,8 @@
 | 
	
		
			
				|  |  |        // colisions between _particules
 | 
	
		
			
				|  |  |        for (var n = 0; n < _nodes.length; n++) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        if(_nodes[n].scrambling) continue;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          for (var q = n+1; q < _nodes.length; q++) {
 | 
	
		
			
				|  |  |            if(q===n) continue;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -458,8 +496,8 @@
 | 
	
		
			
				|  |  |            _nodes[q].p.velocity.y = newVelY2;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            // slow down particule on impact
 | 
	
		
			
				|  |  | -          _nodes[n].p.velocity.multiplyScalar(_nodes[n].center ? 0.95 : 0.90);
 | 
	
		
			
				|  |  | -          _nodes[q].p.velocity.multiplyScalar(_nodes[q].center ? 0.95 : 0.90);
 | 
	
		
			
				|  |  | +          _nodes[n].p.velocity.multiplyScalar(_nodes[n].center ? 0.90 : 0.90);
 | 
	
		
			
				|  |  | +          _nodes[q].p.velocity.multiplyScalar(_nodes[q].center ? 0.90 : 0.90);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |            // move particles if they overlap
 | 
	
	
		
			
				|  | @@ -500,31 +538,25 @@
 | 
	
		
			
				|  |  |      // | _|| ' \  _| '_/ -_) -_|_-<
 | 
	
		
			
				|  |  |      // |___|_||_\__|_| \___\___/__/
 | 
	
		
			
				|  |  |      function filterEntree(t){
 | 
	
		
			
				|  |  | -      // for (tid of _nodes_by_entries) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        for (var n = 0; n < _nodes.length; n++) {
 | 
	
		
			
				|  |  |          if(_nodes[n].entrees.indexOf(t) == -1){
 | 
	
		
			
				|  |  |            _nodes[n].setAside();
 | 
	
		
			
				|  |  |          }else{
 | 
	
		
			
				|  |  | -          _nodes[n].setCentered();
 | 
	
		
			
				|  |  | +          _nodes[n].setCenteredOnEntree(t);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      // for (var i = 0; i < _nodes_by_entries[t].length; i++) {
 | 
	
		
			
				|  |  | -      //   // _nodes_by_entries[t][i].unsetAside();
 | 
	
		
			
				|  |  | -      //   _nodes_by_entries[t][i].setCentered();
 | 
	
		
			
				|  |  | -      // }
 | 
	
		
			
				|  |  | -      // for (var tid in _nodes_by_entries) {
 | 
	
		
			
				|  |  | -      //   if (tid == t) continue;
 | 
	
		
			
				|  |  | -      //   for (var i = 0; i < _nodes_by_entries[tid].length; i++) {
 | 
	
		
			
				|  |  | -      //     // _nodes_by_entries[tid][i].unsetCentered();
 | 
	
		
			
				|  |  | -      //     _nodes_by_entries[tid][i].setAside();
 | 
	
		
			
				|  |  | -      //   }
 | 
	
		
			
				|  |  | -      // }
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    function resetFilterEntree(){
 | 
	
		
			
				|  |  | +    function scrambleCollection(){
 | 
	
		
			
				|  |  | +      for (var i = 0; i < _nodes.length; i++) {
 | 
	
		
			
				|  |  | +        _nodes[i].scramble();
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      setTimeout(stopScrambling, 5000);
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function stopScrambling(){
 | 
	
		
			
				|  |  |        for (var i = 0; i < _nodes.length; i++) {
 | 
	
		
			
				|  |  | -        _nodes[i].unsetAside();
 | 
	
		
			
				|  |  | +        _nodes[i].stopScrambling();
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -628,7 +660,7 @@
 | 
	
		
			
				|  |  |            filterEntree(tid);
 | 
	
		
			
				|  |  |          }else{
 | 
	
		
			
				|  |  |            $li.removeClass('opened');
 | 
	
		
			
				|  |  | -          resetFilterEntree(tid);
 | 
	
		
			
				|  |  | +          scrambleCollection();
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return false;
 | 
	
		
			
				|  |  |        });
 |