Prima di tutto un sito che ho trovato molto utile sull'argomento:
http://www.html5canvastutorials.com/
Un consiglio è, una volta capite grosso modo le basi, impiegare delle librerie che incapsulino la programmazione a basso livello. Il sito che ti ho consigliato, dopo aver insegnato le basi, ti consiglia due librerie rispettivamente per il 2d e il 3d.
Venendo al tuo codice c'é un errore concettuale, una volta che si disegna il canvas per effettuare modifiche occorre pulirlo (con context.clearRect()) e ridisegnare.
L'approccio che seguirei (giusto per fare la prova è questo):
- funzione disegno con parametro disegnoLinee che effettui prima la pulitura del canvas (context.clearRect()) e poi disegna, testi il parametro se disegnare le linee o meno;
- windows.onload faccio andare la procedura con parametro disegnoLinee true;
- le funzioni nascondi e mostra chiamano la funzione disegno con l'opportuno valore nel parametro.
Migliore approccio sarebbe incapsulare la logica in un oggetto, cosa che ti verrà naturale impiegando le librerie.