// *************************************************************************************************************************************************
// AJAX
// *************************************************************************************************************************************************

// Crea l'oggetto-browser XHR e ne gestisce invio e risposta di dati asincorna verso il webserver.

function comunicazione_ajax(server_page,var_nome,var_valore)
    {
    // Ottengo l'oggetto ajax a seconda del browser **per i browser che lo supportano** (aggiungere controlli per quelli vecchi).
    if (typeof window.ActiveXObject!="undefined") ajax = new ActiveXObject("Microsoft.XMLHTTP");
    else ajax = new XMLHttpRequest();

    // Istruisco l'oggetto ad aprire una connessione asincrona (terzo parametro a true). I metodi possibili sono i soliti GET o POST.
    // La pagina PHP cui inviare i dati è server_page (data come parametro).
    // Nel caso di un invio dati in POST, bisogna specificare il Content-Type a valore application/x-www-form-urlencoded ed usare send() per inviare le variabili spedendo anche queste come coppie chiave/valore.
    ajax.open("POST",server_page,true);
    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
    ajax.setRequestHeader("Connection","close"); // no connessioni persistenti.

    // Handler della risposta.
    // onreadystatechange è un parametro dell'oggetto ajax; si comporta da gestore di evento, permettendo di assegnare una funzione chiamata al variare di readyState.
    // È un parametro di sola lettura che rappresenta in ogni istante lo stato della richiesta; "4" vuol dire operazione completata, ovvero il client ha inviato e successivamente ricevuto dati dal server.
    // ajax.responseText è ciò che viene ritornato dal server.
    ajax.onreadystatechange = function()
        {
        if (ajax.readyState==4) handler_risposta_server(ajax.responseText);
        }

    // Essendo POST vars, spediamo le variabili nel payload dell'HTTP come coppie nome = valore separate da "&".
    // (dobbiamo pulire preventivamente le variabili dai caratteri di & con la funzione *escape* per non creare "confusione").
    var risorsa = escape(var_nome)+ "=" +escape(var_valore);
    ajax.send(risorsa);
    return true;
    }
    

// Handler della risposta (modifica il DOM della pagina con quanto ricevuto, secondo la logica dell'applicazione).
// Salva la risposta (sfida) ottenuta dal server nell'hidden input copia_sfida.

function handler_risposta_server(risposta)
    {
    document.login.copia_sfida.value = risposta;
    document.login.submit.disabled = false
    return true;
    }


// Codifica la password con la sfida.
// Algoritmo: HASH ( sfida + HASH ( password_in_chiaro ) ), con HASH scelto = MD5.
// "+" = concatenazione.

function codifica_password()
    {
    var sfida = document.login.copia_sfida.value;
    var password_in_chiaro = document.login.pwd.value;

    document.login.pwd.value = SHA1(sfida+SHA1(password_in_chiaro));
    return true;
    }

