init


    
    function init()
    {  
      var canvas = document.getElementById('blob');
      if(canvas.getContext == null)
      {
        alert("You need Firefox version 1.5 or higher for this to work, sorry."); 
        return; 
      }
  
      document.onkeydown = function(event) 
      {
        var keyCode; 
        
        if(event == null)
        {
          keyCode = window.event.keyCode; 
        }
        else 
        {
          keyCode = event.keyCode; 
        }
  
        switch(keyCode)
        {
          // left 
          case 37: 
            blobColl.addForce(new Vector(-50.0, 0.0)); 
            break; 
           
          // up 
          case 38: 
            blobColl.addForce(new Vector(0.0, -50.0)); 
            break; 
            
          // right 
          case 39: 
            blobColl.addForce(new Vector(50.0, 0.0)); 
            break; 
          
          // down
          case 40: 
            blobColl.addForce(new Vector(0.0, 50.0)); 
            break; 
            
          // join 'j' 
          case 74:
            blobColl.join(); 
            break;  
          
          // split 'h'
          case 72: 
            blobColl.split(); 
            break; 
            
          // toggle gravity 'g'
          case 71: 
            toggleGravity(); 
            break; 
  
          default: 
            break; 
        } 
      }
      
    
      function getMouseCoords(event)
      {
        if(event == null)
        {
          event = window.event; 
        }
        if(event == null)
        {
          return null; 
        }
        if(event.pageX || event.pageY){
          return {x:event.pageX / scaleFactor, y:event.pageY / scaleFactor};
        }
        return null;
      }
      document.onmousedown = function(event)
      {
        var mouseCoords; 
        
        if(stopped == true)
        {
          return; 
        }
        mouseCoords = getMouseCoords(event); 
        if(mouseCoords == null)
        {
          return; 
        }
        selectOffset = blobColl.selectBlob(mouseCoords.x, mouseCoords.y);         
      }
      document.onmouseup = function(event)
      {
        blobColl.unselectBlob(); 
        savedMouseCoords = null; 
        selectOffset = null; 
      }
      document.onmousemove = function(event)
      {
        var mouseCoords; 
        
        if(stopped == true)
        {
          return; 
        }
        if(selectOffset == null)
        {
          return; 
        }
        mouseCoords = getMouseCoords(event); 
        if(mouseCoords == null)
        {
          return; 
        }
        blobColl.selectedBlobMoveTo(mouseCoords.x - selectOffset.x, mouseCoords.y - selectOffset.y); 
        
        savedMouseCoords = mouseCoords; 
      }
      
      env = new Environment(0.2, 0.2, 2.6, 1.6); 
      blobColl = new BlobCollective(1.0, 1.0, 1, 200); 
      gravity = new Vector(0.0, 10.0); 
      stopped = false; 
  
      timeout(); 
    }