/************************************************************
 *             GESTIONE DELLE ATTIVITA' AJAX                *
 *              (By Dalubar - Luglio 2007)                  *
 *************************************************************/

var ajax = {

    // ***** variabili globali ******
    handlerAjaxPhp: 'ajaxHandler.php',  // il file PHP che processa le richieste AJAX
    http: null,                         // variabile di richiesta Ajax 
    counter: 0,                         // contatore per flash dei bordi sondaggio
    
    // ***** elenco degli ID gestiti da AJAX (vedi file index.php) ******
    idTitleMurphy: 'sondTitle',         // <td class='fascia' style='background:#ee65a0' id='sondTitle'>
    idBodyMurphy: 'sondaggio',          // <div class='motto' id='sondaggio'>
    idTitleImg: 'imgTitle',             // <td class='fascia' style='background:#3090a0' id='imgTitle'>
    idBodyImg: 'browserimage',          // <td><div class='motto' id='browserimage'>
    idPromobanner: 'promobanner',       // <div id='promobanner'>
    idSurprise: 'frank',                // <div id='frank'>
    idDizIT: 'dizIt',                   // <input maxLength='18' id='dizIt' ...>
    idDizEN: 'dizEn',                   // <input maxlength='18' id='dizEn' ...>
    objDizEn: null,                     // oggetto textbox di idDizEN
    objDizIt: null,                     // oggetto textbox di idDizIT
    
    init: function () {
        ajax.http = ajax.createRequestObject();
        // inizializzazione eventi caselle di testo per Dizionario
        ajax.initINIT();
        // messaggi di Murphy (si auto-attiva con tempo dipendente dal msg)
        ajax.sndReq('MURPHY', '');
        // immagini casuali (l'intervallo di 2s è scelto apposta x dare il tempo al logo, 
        // ke impiega pure la dissolvenza, di visualizzarsi completamente)
        setTimeout("ajax.showRandomImage()", 2000); 
    },
    
    // inizializza eventi e logica x dizionario Inglese<-->Italiano
    initINIT: function () {
        ajax.objDizEn = document.getElementById(ajax.idDizEN);
        ajax.objDizIt = document.getElementById(ajax.idDizIT);
        ajax.objDizEn.onkeypress = ajax.activeDizEn;
        ajax.objDizEn.onkeyup = ajax.activeDizEn;
        ajax.objDizEn.onkeydown = ajax.activeDizEn;
        ajax.objDizEn.onfocus = function () {
            ajax.objDizEn.select(); 
            ajax.objDizEn.className = 'attivo'; 
            ajax.objDizEn.style.background='#fff';
        };
        ajax.objDizEn.onblur = function () {ajax.objDizEn.className='nonattivo'};
        ajax.objDizIt.onkeypress = ajax.activeDizIt;
        ajax.objDizIt.onkeyup = ajax.activeDizIt;
        ajax.objDizIt.onkeydown = ajax.activeDizIt;
        ajax.objDizIt.onfocus = function () {
            ajax.objDizIt.select(); 
            ajax.objDizIt.className='attivo';
            ajax.objDizIt.style.background='#fff';
        };
        ajax.objDizIt.onblur = function () {ajax.objDizIt.className='nonattivo'};
    },
    
    activeDizEn: function () {
        ajax.objDizIt.style.background='#e88';
        ajax.sndReq('ENGLISH', ajax.objDizEn.value);
    },

    activeDizIt: function () {
        ajax.objDizEn.style.background='#e88';
        ajax.sndReq('ITALIANO', ajax.objDizIt.value);
    },
    

    // crea riferimento oggetto XMLHttpRequest
    createRequestObject: function () { 
        var reqObj; 
        if(document.all) 
            reqObj = new ActiveXObject("Microsoft.XMLHTTP"); 
        else
            reqObj = new XMLHttpRequest(); 
        return reqObj; 
    }, 
    
    // Invia richiesta al server passando una stringa di comando e un valore    
    sndReq: function (action, value) {
        // chiama lo script in PHP
        ajax.http.open('GET', ajax.handlerAjaxPhp + '?action=' + action + '&value=' + value); 
        // al cambio stato avvia la funzione 'handleresponse'
        ajax.http.onreadystatechange = ajax.handleResponse; 
        ajax.http.send(null); 
    },
    
    // Funzione callback asincrona per gestire la risposta del server
    handleResponse: function () { 
        if (ajax.http.readyState == 4 && ajax.http.status == 200) { 
            // recupera lo stream XML
            var responseXML = ajax.http.responseXML.documentElement;
            // se contiene dati visualizzali
            if (responseXML != null) {
                // preleva Stringa ACTION della richiesta per poterla smistare
                var resAction = responseXML.getElementsByTagName('action')[0].firstChild.data;
                switch (resAction) {
                
                    case 'MURPHY':  // Leggi di Murphy (si auto-attiva)
                        var resValue = responseXML.getElementsByTagName('title');
                        // titolo della sezione "Curiosità"
                        document.getElementById(ajax.idTitleMurphy).innerHTML = resValue[0].firstChild.data;
                        var murphyArea = responseXML.getElementsByTagName('MurphyArea')[0].firstChild.data;
                        var murphyText = responseXML.getElementsByTagName('MurphyText')[0].firstChild.data;
                        // corpo dell'area "Curiosità"
                        document.getElementById(ajax.idBodyMurphy).innerHTML = 
                            'Area: <b>' + murphyArea + '</b><br /><br />' + murphyText + 
                            "<hr /><i style='color:#777'>(rimane per "+(murphyText.length * 60/1000)+" secondi)</i>";
                        // avverte l'utente del nuovo messaggio con una...flashata ai bordi!
                        ajax.flashBorder(); 
                        // aspetta un tempo dipendente dalla lunghezza del testo (50ms a char)
                        setTimeout("ajax.sndReq('MURPHY', '');", murphyText.length * 65);
                    break;

                    case 'IMAGE':           // preleva immagine richiesta
                    case 'RANDOM_IMAGE':    // preleva immagine casuale
                        // titolo
                        var resValue = responseXML.getElementsByTagName('title')[0].firstChild.data;
                        document.getElementById(ajax.idTitleImg).innerHTML = resValue;                    
                        // controlla condizione d'errore
                        var resErrore = responseXML.getElementsByTagName('error')[0].firstChild.data;
                        if (resErrore == 'true') {
                            // estrae errore e lo visualizza
                            var resCodErr = responseXML.getElementsByTagName('CodeError')[0].firstChild.data;
                            document.getElementById(ajax.idBodyImg).innerHTML = resCodErr;
                        }
                        else {
                            // estrae codice html contenente l'immagine
                            var code = responseXML.getElementsByTagName('code')[0].firstChild.data;
                            document.getElementById(ajax.idBodyImg).innerHTML = code;
                            // fa entrare l'immagine in dissolvenza (si avvale di 'service')
                            service.startFade(document.getElementById(ajax.idBodyImg), true);
                        }
                    break;

                    case 'ENGLISH':  // Traduttore  Inglese - Italiano
                        var resIt = responseXML.getElementsByTagName('italiano');
                        if (resIt.length) {
                            // mostra solo il primo dei termini trovati
                            document.getElementById(ajax.idDizIT).value = resIt[0].firstChild.data;
                            document.getElementById(ajax.idDizIT).style.background='#ffeeaa';
                        }
                        else {
                            document.getElementById(ajax.idDizIT).value = '';
                            document.getElementById(ajax.idDizIT).style.background='#000055';
                        }
                    break;
                    
                    case 'ITALIANO':  // Traduttore  Italiano - Inglese
                        var resEn = responseXML.getElementsByTagName('inglese');
                        if (resEn.length) {
                            // mostra solo il primo dei termini trovati
                            document.getElementById(ajax.idDizEN).value = resEn[0].firstChild.data;
                            document.getElementById(ajax.idDizEN).style.background='#ffeeaa';
                        }
                        else {
                            document.getElementById(ajax.idDizEN).value = '';
                            document.getElementById(ajax.idDizEN).style.background='#000055';
                        }
                    break;
                    
                    case 'KEYCODE':  // Codice della tastiera dietro il logo
                        if (responseXML.getElementsByTagName('error')[0].firstChild.data == 'false') {
                            // variabile contenente il codice HTML finale
                            var out = '';
                            // recupera messaggio html dal db
                            var bodyKeyCode = responseXML.getElementsByTagName('keycodeHTML')[0].firstChild.data;
                            // recupera lista file in formato HTML
                            var file = responseXML.getElementsByTagName('file');
                            for (var i=0; i< file.length; i++) {
                                out += file[i].firstChild.data;
                            }
                            out = bodyKeyCode + "<hr />" + out;
                            // inserisce il msg nello spazio promozione
                            document.getElementById(ajax.idPromobanner).innerHTML = out;
                            // azzera stringa che contiene il codice (impedisce accessi multipli)
                            service.keySequence = '';
                        }
                    break;
                    
                }
            }
        }
    },
    
    
    // Fa "flashare" il background di idName velocemente per 10 volte
    flashBorder: function () {
        var col1 = '#cc7777', col2 = '#77bb77', coldef = '#57a5e4';
        var sond = document.getElementById(ajax.idTitleMurphy).style;
        var bordo = sond.background;
        if (ajax.counter++ < 15) {
            if (bordo != col1 || bordo == col2) sond.background = col1;
            if (bordo == col1) sond.background = col2;
            setTimeout("ajax.flashBorder()", 80);
        }
        else {
            ajax.counter = 0;
            sond.background = coldef;
        }
    },
    
    // Estrae una immagine casuale    
    showRandomImage: function () {
        ajax.sndReq('RANDOM_IMAGE', '');
        setTimeout("ajax.showRandomImage()", 12000);  
    }
}