/*
 *Code by: Riccardo Cagnasso
 */
// !Globals

var ui={};
var ajax={};

var data={};

window.addEvent('domready',function () {

    ui.$login = $( 'login' );
    ui.$login.$centro = $( 'login_centro' );
    ui.$login.$pwd = $( 'login_pwd' );
    
    ui.$sessioni = $( 'sessioni' );
    ui.$sessioni.$elenco = $( 'sessioni_elenco' );
    
    ui.$errors = ajax_utils.get_message_handler( $( 'errors' ), 13000 );
    
    ui.$stage2 = $( 'stage2' );
    
    ui.$prenotazione = $( 'prenotazione' );
    
    ui.$prenotazione.$centro = $( 'prenotazione_centro' );
    ui.$prenotazione.$sessione = $( 'prenotazione_sessione' );
    
    ui.$prenotazione.$referente = {};
    ui.$prenotazione.$referente.$nome = $( 'prenotazione_referente_nome' );
    ui.$prenotazione.$referente.$ruolo = $( 'prenotazione_referente_ruolo' );
    ui.$prenotazione.$referente.$telefono = $( 'prenotazione_referente_telefono' );
    ui.$prenotazione.$referente.$email = $( 'prenotazione_referente_email' );
    
    ui.$prenotazione.$iscritti = {};
    ui.$prenotazione.$iscritti.$primaria = $( 'prenotazione_iscritti_primaria' );
    ui.$prenotazione.$iscritti.$secondaria1 = $( 'prenotazione_iscritti_secondaria1' );
    ui.$prenotazione.$iscritti.$secondaria2 = $( 'prenotazione_iscritti_secondaria2' );
    ui.$prenotazione.$iscritti.$secondaria3 = $( 'prenotazione_iscritti_secondaria3' );
    
    ui.$candidato = $( 'candidato' );
    ui.$candidato.$num = $( 'candidato_num' );
    ui.$candidato.$classe = $( 'candidato_classe' );
    ui.$candidato.$nome = $( 'candidato_nome' );
    ui.$candidato.$cognome = $( 'candidato_cognome' );
    ui.$candidato.$sesso = $('candidato_sesso');
    ui.$candidato.$data = $( 'candidato_data' );
    ui.$candidato.$anni = $( 'candidato_anni' );
    ui.$candidato.$esame = $( 'candidato_esame' );
    
    ui.$candidato.$esami = $( 'candidato_esami' );
    ui.$candidato.$esami.$quando = $( 'candidato_esami_quando' );
    ui.$candidato.$esami.$anno = $( 'candidato_esami_anno' );
    ui.$candidato.$esami.$mese = $( 'candidato_esami_mese' );
    
    ui.$candidato.$nazmadre = $( 'candidato_nazmadre' );
    ui.$candidato.$nazpadre = $( 'candidato_nazpadre' );
    
    ui.$candidato.$soggiorno = $( 'candidato_soggiorno' );
    ui.$candidato.$corsi_passati = $( 'candidato_corsi_passati' );
    ui.$candidato.$corsi = $( 'candidato_corsi' );
    
    ui.$candidato.$inseriti = $( 'candidato_inseriti' );
    ui.$candidato.$inseriti.containers = {};
    
    ui.$stage3 = $( 'stage3' );
    
    ui.$riepilogo = $( 'riepilogo' );
    ui.$riepilogo.$centro = $( 'riepilogo_centro' );
    ui.$riepilogo.$periodo = $( 'riepilogo_periodo' );
    ui.$riepilogo.$referente = $( 'riepilogo_referente' );
    ui.$riepilogo.$telefono = $( 'riepilogo_telefono' );
    ui.$riepilogo.$email = $( 'riepilogo_email' );
    ui.$riepilogo.$candidati = $( 'riepilogo_candidati' );
    ui.$riepilogo.$iscritti = $( 'riepilogo_iscritti' );

    data.candidati = [];
    
    ui.$candidato.validator = new FormValidator( ui.$candidato, {
    
        evaluateFieldsOnChange : true
    
    } );
    
    ui.$prenotazione.validator = new FormValidator( ui.$prenotazione, {
    
        evaluateFieldsOnChange : true
    
    } );
    
    ui.swapper = element_swapper( $( 'pager' ), 'src', [
    
        "../common/img/form1.gif",
        "../common/img/form2.gif",
        "../common/img/form3.gif"
    
    ] );

});

ui.collect_login = function(){

    data.login = {};
    
    data.login.centro = ui.$login.$centro.value;
    data.login.pwd = ui.$login.$pwd.value;

};

ui.login = function(){

    ui.$errors.clear();

    ui.collect_login();
    
    ajax.login();

};

ui.scegli_sessione = function(){

    ui.$errors.clear();

    var sessione = ui.$sessioni.getElement('input[type=radio]:checked');
    
    if( !sessione ){
    
        ui.$errors.add_sticky_message( "Nessuna sessione selezionata" );
    
    }else{
    
        data.sessione = sessione.value;
        ajax.scegli_sessione();
    
    }

};

ui.display_sessioni = function(){

    var html = '';

    data.sessioni.forEach( function( s ){
    
            html = '<div><input type=radio name=sessioni value="'+s.id_sessione+'"> '+s.descr+'</div>';
    
        }
    
    );
    
    ui.$sessioni.$elenco.innerHTML = html;
    
    ui.$sessioni.setStyle( "display","block" );
    
    ui.$login.setStyle( "display", "none" );

};

ui.get_current_sessione = function(){

    var sess = data.sessioni.filter(function(s){return s.id_sessione==data.sessione;});
    
    if( sess.length == 1 ){
        return sess[0];
    }else{
        return undefined;
    }

};

ui.display_stage_2 = function(){

    ui.swapper.next();

    ui.$sessioni.setStyle( 'display', 'none' );
    
    ui.$stage2.setStyle( 'display', 'block' );

    ui.$prenotazione.$centro.innerHTML = data.centro.id + ' ' + data.centro.attributes.nome;
    
    ui.$prenotazione.$sessione.innerHTML = data.sessione;
    
    var sess = ui.get_current_sessione;
    
    if( sess ){
    
        ui.$prenotazione.$sessione.innerHTML = sess.descr;
    
    }
    
    ui.$prenotazione.$referente.$nome.value = data.resoconto.nome;
    ui.$prenotazione.$referente.$ruolo.value = data.resoconto.ruolo;
    ui.$prenotazione.$referente.$telefono.value = data.resoconto.telefono;
    ui.$prenotazione.$referente.$email.value = data.resoconto.email;

};

ui.display_stage_3 = function(){

    ui.swapper.next();

    ui.$stage2.setStyle( 'display', 'none' );
    
    ui.$stage3.setStyle( 'display', 'block' );
    
    ui.$riepilogo.$centro.innerHTML = data.centro.id + ' ' + data.centro.attributes.nome;
    
    var sess = ui.get_current_sessione();
    
    if( sess ){
    
        ui.$riepilogo.$periodo.innerHTML = sess.descr;
    
    }
    
    var referente = data.resoconto.nome;
    
    if( data.resoconto.ruolo && data.resoconto.ruolo !== "" ){
    
        referente += " (" + data.resoconto.ruolo + ")";
    
    }
    
    ui.$riepilogo.$referente.innerHTML = referente;
    
    ui.$riepilogo.$telefono.innerHTML = data.resoconto.telefono;
    ui.$riepilogo.$email.innerHTML = data.resoconto.email;
    ui.$riepilogo.$candidati.innerHTML = data.iscritti.tot;
    
    ui.display_riepilogo_iscritti();

};

ui.collect_ref_cand = function(){

    data.resoconto.nome = ui.$prenotazione.$referente.$nome.value;
    data.resoconto.ruolo = ui.$prenotazione.$referente.$ruolo.value;
    data.resoconto.telefono = ui.$prenotazione.$referente.$telefono.value;
    data.resoconto.email = ui.$prenotazione.$referente.$email.value;

    data.iscritti = {};
    
    data.iscritti.primaria    = ui.$prenotazione.$iscritti.$primaria.value.toInt();
    data.iscritti.secondaria1 = ui.$prenotazione.$iscritti.$secondaria1.value.toInt();
    data.iscritti.secondaria2 = ui.$prenotazione.$iscritti.$secondaria2.value.toInt();
    data.iscritti.secondaria3 = ui.$prenotazione.$iscritti.$secondaria3.value.toInt();
    
    data.iscritti.tot =
        data.iscritti.primaria +
        data.iscritti.secondaria1 + 
        data.iscritti.secondaria2 +
        data.iscritti.secondaria3;
        
    data.iscritti.manager = iscritti_manager( {
    
        'Scuola primaria' : data.iscritti.primaria,
        'Scuola secondaria di primo grado' : data.iscritti.secondaria1,
        'Scuola secondaria di secondo grado (termine biennio)' : data.iscritti.secondaria2,
        'Scuola secondaria di secondo grado' : data.iscritti.secondaria3
        
    
    } );

};

ui.get_candidato_inseriti_container = function( candidato ){

    if( ui.$candidato.$inseriti.containers[ candidato.classe ] === undefined ){
    
        var div =  new Element( 'div' ).inject( ui.$candidato.$inseriti );
        
        new Element( 'h4', { html : candidato.classe } ).inject( div );
    
        var span = new Element( 'span' ).inject( div );
    
        ui.$candidato.$inseriti.containers[ candidato.classe ] = span;
    
    }
    
    return ui.$candidato.$inseriti.containers[ candidato.classe ];

};

ui.display_candidati_inseriti = function(){

    

    for( var classe in ui.$candidato.$inseriti.containers ){
    
        ui.$candidato.$inseriti.containers[ classe ].innerHTML = '';
    
    }
    
    if(data.candidati.length > 0){
    
        ui.$candidato.$inseriti.setStyle( 'display', 'block' );
    
    }
    
    data.candidati.forEach( function( c ){
    
        container = ui.get_candidato_inseriti_container( c );
        
        container.innerHTML += "<div> " + c.nome + " " + c.cognome + " </div>";
        
    } );

};

ui.send_ref_cand = function(){

    ui.$errors.clear();

    ui.collect_ref_cand();
    
    if( data.iscritti.tot > 0 ){

        ajax.put_ref_cand();
    
    }else{
    
        ui.$errors.add_sticky_message( 'Attenzione, specificare un numero di iscritti valido' );
    
    }

};

ui.next_candidato = function(){

    ui.$errors.clear();

    if( data.num_candidato != 0 && !ui.$candidato.validate() ){
    
        ui.$errors.add_sticky_message( "Dati del candidato non validi" );
        
        return;
    
    }
    
    tipo_iscrizione = data.iscritti.manager.pop();

    var num_now = data.num_candidato;
    var tot = data.iscritti.tot;
    
    ui.$candidato.setStyle( 'display', 'block' );
    
    ui.$prenotazione.setStyle( 'display', 'none' );
    
    if( num_now >= tot ){
    
        //put data and done
        ui.fetch_candidato( tipo_iscrizione );
        
        ajax.put_candidati();
    
    }else{
    
        //turn page
        if(data.num_candidato == 0){
        
        }else{
        
            ui.fetch_candidato( tipo_iscrizione );
        
        }
        
        data.num_candidato++;
        
        ui.$candidato.$num.innerHTML = data.num_candidato + "/" + data.iscritti.tot;
    
    }
    
    ui.$candidato.$classe.innerHTML = tipo_iscrizione;
    
    ui.$candidato.$nome.value = "";
    ui.$candidato.$cognome.value = "";
    ui.$candidato.$data.value = "";
    ui.$candidato.$anni.value = "";
    //ui.$candidato.$esame.value = "";
    ui.$candidato.$nazmadre.value = "";
    ui.$candidato.$nazpadre.value = "";
    ui.$candidato.$esami.$anno.value = "";
    ui.$candidato.$esami.$mese.value = "";
    
    ui.display_candidati_inseriti();

};

ui.fetch_candidato = function(){

    data.candidati.push( {

        classe : ui.$candidato.$classe.innerHTML,
        nome : ui.$candidato.$nome.value,
        cognome : ui.$candidato.$cognome.value,
        sesso : ui.$candidato.$sesso.getElement('input:checked').value,
        data_di_nascita : ui.$candidato.$data.value,
        anni_compiuti : ui.$candidato.$anni.value,
        livello_trinity : ui.$candidato.$esame.getElement( 'option:selected' ).value,
        nazmadre : ui.$candidato.$nazmadre.value,
        nazpadre : ui.$candidato.$nazpadre.value,
        soggiorno : ui.$candidato.$soggiorno.getElement( 'input[type=radio]:checked' ).value,
        corsi_passati : ui.$candidato.$corsi_passati.getElement( 'input[type=radio]:checked' ).value,
        corsi : ui.$candidato.$corsi.getElement( 'input[type=radio]:checked' ).value,
        
        esami_anno : function(){
            var sel=ui.$candidato.$esami.getElement('input[name=esami]:checked');
            if(sel.value==0){
                return null;
            }else{
                return ui.$candidato.$esami.$anno.value;
            }
        }(),
        esami_mese : function(){
            var sel=ui.$candidato.$esami.getElement('input[name=esami]:checked');
            if(sel.value==0){
                return null;
            }else{
                return ui.$candidato.$esami.$mese.getElement('option:selected').value;
            }
        }()
    } );

};

ui.display_riepilogo_iscritti = function(){

    var html = '';

    data.candidati.forEach(function( c ){
    
        html += "<div>" + c.nome + " " + c.cognome;
        html += " ("+ c.data_di_nascita +") livello: " + c.livello_trinity + "</div>";
    
    });
    
    ui.$riepilogo.$iscritti.innerHTML = html;

};

ui.swap_candidato_esami_quando=function(){
    var sel=ui.$candidato.$esami.getElement('input[name=esami]:checked');
    if(sel.value==0){
        ui.$candidato.$esami.$quando.setStyle('display', 'none');
    }else{
        ui.$candidato.$esami.$quando.setStyle('display', 'block');
    }
};

ajax.login = function(){

    ajax_utils.ophelia_request( 
        'iscritti',
        'login',
        { login : data.login },
        function(rdata){
        
            data.sessioni = rdata.sessioni;
            
            ui.display_sessioni();   
        
        },
        ui.$errors
    );

};

ajax.scegli_sessione = function(){

    ajax_utils.ophelia_request( 
        'iscritti',
        'sessione',
        { login : data.login, sessione : data.sessione },
        function(rdata){
        
            data.centro = rdata.centro;
            data.resoconto = rdata.resoconto;
            
            ui.display_stage_2();
        
        },
        ui.$errors
    );

};

ajax.put_ref_cand = function(){

    ajax_utils.ophelia_request( 
        'iscritti',
        'refcand',
        { login : data.login, sessione : data.sessione, resoconto : data.resoconto },
        function(rdata){
        
            data.num_candidato = 0;
            
            ui.next_candidato();
        
        },
        ui.$errors
    );    

};

ajax.put_candidati = function(){

    ajax_utils.ophelia_request( 
        'iscritti',
        'candidati',
        { login : data.login, sessione : data.sessione, candidati : data.candidati },
        function(rdata){
        
            ui.display_stage_3();
        
        },
        ui.$errors
    );

};

function iscritti_manager( cand ){

    var elenchi_candidati = {};
    
    //clone by hand sigh
    for ( var tipo in cand ){
    
        elenchi_candidati[ tipo ] = cand[tipo];
    
    }
    

    return {
    
        get : function( tipo ){
        
            return elenchi_candidati[tipo];
        
        },
        pop : function(){
        
            for ( var tipo in elenchi_candidati ){
            
                if ( elenchi_candidati[ tipo ] > 0 ){
                
                    elenchi_candidati[ tipo ]--;
                    
                    return tipo;
                
                }
            
            }
            
            return undefined;
        
        }
    
    };

};


function element_swapper( element, attribute, elements ){

    var i = 0;
    
    var set = function(){
    
        element.set( attribute, elements[i] );
    
    };
    
    set();

    return {
    
        next : function(){
            
            if( i < elements.length ){
            
                i++;
            
            }
            
            set();
        
        },
        
        prev : function(){
        
            if( i > 0 ){
                
                i--;
            
            }
            
            set();
        
        }
    
    };

};

