// JavaScript Document

// COSTANTI
	// tipi di palla
	var PALLA_PIOGGIA = 1;
	var PALLA_PROIETTILE = 2;

	// CODICI TASTI, utilizzati dalla funzione tastiera()
	var LEFTARROW = 37; // Frecce e tastierino numerico con il BlocNum disattivo
	var LEFTUPARROW = 36;
	var UPARROW = 38;
	var RIGHTARROW = 39;
	var RIGHTUPARROW = 33;
	var NUM_4 = 100; // Tastierino numerico con il BlocNum attivo
	var NUM_6 = 102;
	var NUM_7 = 103;
	var NUM_8 = 104;
	var NUM_9 = 105;
	var SPAZIO = 32; // Altri tasti
	var PAUSA = 19;

	
	
	// PUNTEGGI
	var PUNTI_ESPLOSIONE_POSITIVA = 10; // punteggio ottenuto quando 2 palle di pioggia esplodono
	var PUNTI_ESPLOSIONE_NEGATIVA = -20; // punteggio perso quando una palla tocca il terreno
	var PUNTEGGIO_MINIMO = -400; // punteggio minimo per restare in vita
	var PUNTEGGIO_MASSIMO = 1000; // soglia di punteggio per la vittoria 

// dimensioni div
	var POSIZIONE_CARICATORE_X; // utilizzati dalla funzione
	var POSIZIONE_CARICATORE_Y; // creaProiettile()
	var LARGHEZZA_GIOCO; // utilizzati per la gestione degli urti
	var ALTEZZA_GIOCO; // contro le pareti dello schema di gioco
	var PERNO_CANNONE_X; // utilizzati per il calcolo della
	var PERNO_CANNONE_Y; // posizione della bocca del cannone
	var RAGGIO = 30; // raggio della pallina per il calcolo delle collisioni
	
	// costanti generali
	var NUMERO_IMMAGINI = 21; // numero di posizioni del cannone
	var DELTA_ALPHA = 80 / ((NUMERO_IMMAGINI - 1) / 2); // variazione dell'angolo del cannone per ogni immagine
	var COLORI = new Array("rosso", "giallo", "verde", "blu"); // set di colori delle palline
	var LUNGHEZZA_CANNONE = 80; // utilizzati per il calcolo della
	var LARGHEZZA_CANNONE = 60; // posizione della bocca del cannone
	var DURATA_ESPLOSIONE = 425; // Tempo di riproduzione della GIF animata per l'esplosione delle gocce

// VARIABILI
	// Oggetti e variabili generali
	var punteggio = 0; // punteggio corrente
	var pallePerse = 0; // palle perse
	var pallePrese = 0; // palle prese
	var vento = 0; // intensità del vento
	var inputPunteggio; // riferimento all'oggetto input per il punteggio
	var inputPalleResidue; // riferimento all'oggetto input per le palle residue
	var picVento; // riferimento all'immagine per il vento
	var divMenu; // riferimento al div del menu
	var divGioco; // riferimento all'oggetto div per il gioco
	var divCaricatore; // riferimento all'oggetto div per il caricatore
	var divCannone; // riferimento all'oggetto div per il cannone
	var inputPausa; // riferimento all'oggetto input per la messa in pausa
	var inputRiavvia; // riferimento all'oggetto input per il riavvio del gioco
	var alpha; // angolo corrente del cannone, misurato in senso antiorario rispetto all'orizzontale
	var palle = new Array(); // array di riferimenti a palle
	var palleDaEsplodere = new Array(); // array per la gestione della palle da eliminare
	var prossimaPalla = null; // riferimento alla palla nel caricatore
	var ultimoDeltaVento = 0; // ultima variazione del vento
	var immaginiPreload = new Array();
	var demo = false;
	var muoviSinistra = false;
	var muoviDestra = false;
	
	// Gestione timer
	var timerCreazione = null; // timer per la creazione delle nuove palline di pioggia
	var timerMovimento = null; // timer per la gestione degli spostamenti e della rilevazione delle collisioni
	var timerVento = null; // timer per l'aggiornamento dell'intensità del vento
	var timerIA = null; // timer per l'intelligenza Artificiale
	var timerControlloPreload = null; // timer per la gestione del preload delle immagini
	var timerMovimentoCannone = null; // timer per il movimento del cannone
	var delayCreazioneBase = 2500;
	var delayCreazione;		 // intervalli per i timer
	var delayMovimento = 30; //   "
	var delayVento = 5000; //     "
	var delayIA = 100;	   //     "
	var delayMovimentoCannone = 80; // intervallo di ripetizione del movimento del cannone
	var tempoTrascorso = 0; // Tempo trascorso dall'ultimo sparo
	var tempoMinimoDiAttesa = 15; // Tempo di attesa tra uno sparo e l'altro