Iniziando dalle cose semplici:
codice:
context.width = context.width;
serve a svuotare il canvas nel caso ci fosse qualcosa sopra.
codice:
context.canvas.addEventListener('mousedown' , function() { mouseDown = 1; },false );
  context.canvas.addEventListener('mousemove' , getMousePosition ,false );
  context.canvas.addEventListener('mouseup' ,   function() { mouseDown = 0; } ,false );
  context.canvas.addEventListener('mouseleave' ,   function() { mouseDown = 0; } ,false );
Questi sono degli EventListener. A dire il vero li ho scoperti ieri pure io ma sono molto simili a quelli di ActionScript3.
Quello che fanno è richiamare una funzione al verificarsi di un determinato evento.
La sintassi è questa:
object.addEventListener (NomeEvento, function, useCapture);
NomeEvento è un identificativo per il tipo di evento che ti interessa (es: 'mousedown', 'click' etc)
Function è la funzione che viene richiamata al verificarsi dell'evento. Se non vengono specificati parametri viene passato l'evento.
useCapture è un valore Booleano che spacifica se l'evento debba essere catturato o no. Personalmente lo metto sempre a false

Se avessi bisogno di chiamare una funzione passando l'evento più altri parametri usa:
object.addEventListener ('event', function (e) { NomeFunzione(e, par1, par2);}, false);

Probabilemente non è il modo migliore ma funziona

EDIT: non avevo capito in che senso "spostati" Questo succede perchè non ho regolato il rapporto tra le coordinate del mouse (che sono rispetto allo schermo) e quelle del quadrato da disegnare nel canvas (che sono rispetto al canvas stesso). Come detto prima il codice è solo di prova... una volta riuscito a farlo funzionare sarei passato ad ottimizzarlo.
Non è quello... lo avevo pensato anch'io ma non c'entra. Comunque lo spostamento aumenta costantemente man mano che ci sia allontana dall'origine (0,0). Se scopri quella costante basta che fai:
codice:
MouseX = MouseX * costante;
Per trovare la costante fai un rapporto fra la X ipotetica e la X reale.
e lo stesso per la Y. Dovrebbe funzionare