/**
 * @version $Id$
 * @author Thomas Crespin <thomas.crespin@sesamath.net>
 * @copyright Thomas Crespin 2009-2022
 * 
 * ****************************************************************************************************
 * SACoche <http://sacoche.sesamath.net> - Suivi d’Acquisitions de Compétences
 * © Thomas Crespin pour Sésamath <http://www.sesamath.net> - Tous droits réservés.
 * Logiciel placé sous la licence libre Affero GPL 3 <https://www.gnu.org/licenses/agpl-3.0.html>.
 * ****************************************************************************************************
 * 
 * Ce fichier est une partie de SACoche.
 * 
 * SACoche est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant les termes 
 * de la “GNU Affero General Public License” telle que publiée par la Free Software Foundation :
 * soit la version 3 de cette licence, soit (à votre gré) toute version ultérieure.
 * 
 * SACoche est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE :
 * sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER.
 * Consultez la Licence Publique Générale GNU Affero pour plus de détails.
 * 
 * Vous devriez avoir reçu une copie de la Licence Publique Générale GNU Affero avec SACoche ;
 * si ce n’est pas le cas, consultez : <http://www.gnu.org/licenses/>.
 * 
 */

// Activer le mode strict afin de tendre vers un code rigoureux
'use strict';

// jQuery !
$(document).ready
(
  function()
  {

    // ////////////////////////////////////////////////////////////////////////////////////////////////////
    // Initialisation
    // ////////////////////////////////////////////////////////////////////////////////////////////////////

    var memo_classe      = 0;
    var memo_groupe      = 0;
 // var memo_eleve         = 0; // déjà défini de façon globale par script.js car besoin dans script.js
    var memo_eleve_first = 0;
    var memo_eleve_last  = 0;
    var memo_objet_td_button = '';

    // ////////////////////////////////////////////////////////////////////////////////////////////////////
    // Changement de groupe
    // -> charger la liste des élèves
    // ////////////////////////////////////////////////////////////////////////////////////////////////////

    $('#f_groupe').change
    (
      function()
      {
        $('#span_eleve').hide();
        $('#form_imprimer').hide(0);
        $('#ajax_msg_imprimer').removeAttr('class').html('');
        $('#go_selection_eleve').html('<option value=""></option>');
        var ids = $('#f_groupe option:selected').val();
        if(ids==='')
        {
          memo_classe = 0;
          memo_groupe = 0;
          memo_eleve = 0;
          $('#zone_tableau_eleve').html('');
        }
        else
        {
          var groupe_nom = $('#f_groupe option:selected').text();
          var tab_ids = ids.split('_');
          memo_classe = tab_ids[0];
          memo_groupe = tab_ids[1];
          $('#zone_tableau_eleve').html('<label class="loader">Chargement en cours&hellip;</label>');
          $.ajax
          (
            {
              type : 'POST',
              url : 'ajax.php?page='+window.PAGE,
              data : 'csrf='+window.CSRF+'&f_action='+'lister_eleves'+'&f_classe='+memo_classe+'&f_groupe='+memo_groupe+'&f_groupe_nom='+encodeURIComponent(groupe_nom),
              dataType : 'json',
              error : function(jqXHR, textStatus, errorThrown)
              {
                $('#zone_tableau_eleve').html('<label class="alerte">'+afficher_json_message_erreur(jqXHR,textStatus)+'</label>');
                return false;
              },
              success : function(responseJSON)
              {
                initialiser_compteur();
                if(responseJSON['statut']==false)
                {
                  $('#zone_tableau_eleve').html('<label class="alerte">'+responseJSON['value']+'</label>');
                }
                else
                {
                  $('#go_selection_eleve').html(responseJSON['value']);
                  $('#span_eleve').show();
                  memo_eleve_first = entier( $('#go_selection_eleve option:first').val() );
                  memo_eleve_last  = entier( $('#go_selection_eleve option:last' ).val() );
                  charger_nouvel_eleve(memo_eleve_first);
                }
              }
            }
          );
        }
      }
    );

    // ////////////////////////////////////////////////////////////////////////////////////////////////////
    // Navigation d’un élève à un autre
    // -> charger les données pour cet élève
    // ////////////////////////////////////////////////////////////////////////////////////////////////////

    function charger_nouvel_eleve(eleve_id)
    {
      $('#go_selection_eleve option[value='+eleve_id+']').prop('selected',true);
      memo_eleve = eleve_id;
      masquer_element_navigation_choix_eleve();
      $('#zone_tableau_eleve').html('<label class="loader">Chargement en cours&hellip;</label>');
      $.ajax
      (
        {
          type : 'POST',
          url : 'ajax.php?page='+window.PAGE,
          data : 'csrf='+window.CSRF+'&f_action='+'afficher_donnees'+'&f_eleve='+eleve_id+'&f_classe='+memo_classe,
          dataType : 'json',
          error : function(jqXHR, textStatus, errorThrown)
          {
            $('#zone_tableau_eleve').html('<label class="alerte">'+afficher_json_message_erreur(jqXHR,textStatus)+'</label>');
            return false;
          },
          success : function(responseJSON)
          {
            initialiser_compteur();
            if(responseJSON['statut']==false)
            {
              $('#zone_tableau_eleve').html('<label class="alerte">'+responseJSON['value']+'</label>');
            }
            else
            {
              $('#zone_tableau_eleve').html(responseJSON['value']);
              $('#form_imprimer').show(0);
              // scroller verticalement le plus bas
              window.scrollTo(0,10000);
            }
          }
        }
      );
    }

    function masquer_element_navigation_choix_eleve()
    {
      $('#span_eleve button').css('visibility','visible');
      if(memo_eleve==memo_eleve_first)
      {
        $('#go_premier_eleve , #go_precedent_eleve').css('visibility','hidden');
      }
      if(memo_eleve==memo_eleve_last)
      {
        $('#go_dernier_eleve , #go_suivant_eleve').css('visibility','hidden');
      }
    }

    $('#go_premier_eleve').click
    (
      function()
      {
        var eleve_id = entier( $('#go_selection_eleve option:first').val() );
        charger_nouvel_eleve(eleve_id,false);
      }
    );

    $('#go_dernier_eleve').click
    (
      function()
      {
        var eleve_id = entier( $('#go_selection_eleve option:last').val() );
        charger_nouvel_eleve(eleve_id,false);
      }
    );

    $('#go_precedent_eleve').click
    (
      function()
      {
        if( $('#go_selection_eleve option:selected').prev().length )
        {
          var eleve_id = $('#go_selection_eleve option:selected').prev().val();
          charger_nouvel_eleve(eleve_id);
        }
      }
    );

    $('#go_suivant_eleve').click
    (
      function()
      {
        if( $('#go_selection_eleve option:selected').next().length )
        {
          var eleve_id = $('#go_selection_eleve option:selected').next().val();
          charger_nouvel_eleve(eleve_id);
        }
      }
    );

    $('#go_selection_eleve').change
    (
      function()
      {
        var eleve_id = $('#go_selection_eleve option:selected').val();
        charger_nouvel_eleve(eleve_id);
      }
    );

    // ////////////////////////////////////////////////////////////////////////////////////////////////////
    // Affichage du formulaire pour éditer une moyenne
    // ////////////////////////////////////////////////////////////////////////////////////////////////////

    $('#zone_tableau_eleve').on
    (
      'click',
      'button.modifier',
      function()
      {
        var objet_button     = $(this);
        memo_objet_td_button = objet_button.parent();
        var objet_td_moyenne = memo_objet_td_button.prev();
        var objet_tr         = memo_objet_td_button.parent();
        var objet_tbody      = objet_tr.parent();
        var objet_thead      = objet_tbody.prev();
        var objet_table      = objet_tbody.parent();
        var objet_tr_tds     = objet_tr.find('td');
        var objet_head_ths   = objet_thead.find('th');
        var periodes_nb      = entier( objet_table.data('periodes') );
        var is_manuel        = objet_td_moyenne.hasClass('bj');
        var is_auto_possible = is_manuel && entier( memo_objet_td_button.data('auto') );
        var is_disp_possible = entier( memo_objet_td_button.data('dispense') );
        var moyenne_auto     = memo_objet_td_button.data('moyenne');
        // renseigner les valeurs
        $('#saisir_f_eleve').val(memo_eleve);
        $('#saisir_f_classe').val(memo_classe);
        $('#saisir_f_rubrique').val( memo_objet_td_button.data('rubrique') );
        $('#saisir_f_saisie').val( memo_objet_td_button.data('id') );
        $('#saisir_f_moyenne').val( moyenne_auto );
        // afficher les textes
        $('#report_eleve').html( $('#go_selection_eleve option:selected').text() );
        $('#report_moyenne').html( objet_td_moyenne.text() ).attr('class','td '+objet_td_moyenne.attr('class'));
        $('#texte_periode1').html( objet_head_ths.eq(1).text()+' :' );
        $('#texte_periode2').html( objet_head_ths.eq(2).text()+' :' );
        $('#texte_periode3').html( (periodes_nb==2) ? '' : objet_head_ths.eq(2).text()+' :' );
        $('#report_matiere').html( objet_tr_tds.eq(0).text() );
        $('#report_periode1').html( objet_tr_tds.eq(1).text() );
        $('#report_periode2').html( objet_tr_tds.eq(2).text() );
        $('#report_periode3').html((periodes_nb==2) ? '' : objet_tr_tds.eq(3).text() );
        // s’occuper des boutons radio et des messages associés
        initialiser_input_radio(moyenne_auto, is_disp_possible, is_auto_possible);
        // pour finir
        $('#ajax_msg_gestion').removeAttr('class').html('');
        $.fancybox( { href:'#form_saisir_note' , modal:true , minWidth:800 } );
      }
    );

    // ////////////////////////////////////////////////////////////////////////////////////////////////////
    // Boutons radio de choix
    // ////////////////////////////////////////////////////////////////////////////////////////////////////

    function initialiser_input_radio(moyenne_auto, is_disp_possible, is_auto_possible)
    {
      $('#p_radio').find('input[type=radio]').prop('checked',false);
      $('#texte_neant').hide(0);
      $('#f_position').val(moyenne_auto);
      if(is_disp_possible)
      {
        $('label[for=objet_dispense]').removeClass('notnow');
        $('#objet_dispense').prop('disabled',false);
      }
      else
      {
        $('label[for=objet_dispense]').addClass('notnow');
        $('#objet_dispense').prop('disabled',true);
      }
      if(is_auto_possible)
      {
        $('label[for=objet_auto]').removeClass('notnow');
        $('#objet_auto').prop('disabled',false);
      }
      else
      {
        $('label[for=objet_auto]').addClass('notnow');
        $('#objet_auto').prop('disabled',true);
      }
    }

    $('#p_radio').on
    (
      'click',
      'input[type=radio]',
      function()
      {
        $('#ajax_msg_gestion').removeAttr('class').html('');
        $('#texte_neant').hideshow( $(this).val() == 'neant' );
      }
    );

    $('#form_saisir_note').on
    (
      'click',
      '#f_position',
      function()
      {
        $('#objet_valeur').prop('checked',true);
      }
    );

    // ////////////////////////////////////////////////////////////////////////////////////////////////////
    // Fermeture ou soumission du formulaire pour éditer une moyenne
    // ////////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * Intercepter la touche entrée ou escape pour valider ou annuler les modifications
     * @return void
     */
    function intercepter(e)
    {
      if(e.which==13)  // touche entrée
      {
        $('#bouton_valider').click();
      }
      else if(e.which==27)  // touche escape
      {
        $('#bouton_annuler').click();
      }
    }
    // Envoi du formulaire (avec jquery.form.js)
    $('#form_saisir_note').submit
    (
      function()
      {
        return false;
      }
    );

    $('#form_choix_classe_eleve').on( 'keydown', 'button, select', function(e){return false;} );
    $('#zone_tableau_eleve').on( 'keydown', 'button', function(e){return false;} );
    $('#form_imprimer').on( 'keydown', 'button', function(e){return false;} );
    $('#form_saisir_note').on( 'keydown', 'button, input', function(e){intercepter(e);} );

    $('#form_saisir_note').on
    (
      'click',
      '#bouton_annuler',
      function()
      {
        $.fancybox.close();
      }
    );

    $('#form_saisir_note').on
    (
      'click',
      '#bouton_valider',
      function()
      {
        $('#ajax_msg_gestion').removeAttr('class').html('');
        var saisie_objet = $("input[type=radio]:checked").val();
        var note_valeur = decimal($("#f_position").val(),9);
        if(typeof(saisie_objet)=='undefined')
        {
          $('#ajax_msg_gestion').attr('class','erreur').html('Effectuer un choix de type de moyenne !');
          return false;
        }
        else if( (saisie_objet=='valeur') && ( isNaN(note_valeur) || (note_valeur==='') || (note_valeur<0) || (note_valeur>20) ) )
        {
          $('#ajax_msg_gestion').attr('class','erreur').html('Saisir un nombre décimal valide entre 0 et 20 !');
          return false;
        }
        else
        {
          $('#form_saisir_note').find('button').prop('disabled',true);
          $('#ajax_msg_gestion').attr('class','loader').html('En cours&hellip;');
          $.ajax
          (
            {
              type : 'POST',
              url : 'ajax.php?page='+window.PAGE,
              data : 'csrf='+window.CSRF+'&'+$('#form_saisir_note').serialize(),
              dataType : 'json',
              error : function(jqXHR, textStatus, errorThrown)
              {
                $('#form_saisir_note').find('button').prop('disabled',false);
                $('#ajax_msg_gestion').attr('class','alerte').html(afficher_json_message_erreur(jqXHR,textStatus));
                return false;
              },
              success : function(responseJSON)
              {
                initialiser_compteur();
                $('#form_saisir_note').find('button').prop('disabled',false);
                if(responseJSON['statut']==true)
                {
                  memo_objet_td_button.data('id', responseJSON['id']);
                  memo_objet_td_button.children('img').replaceWith(responseJSON['img']);
                  memo_objet_td_button.prev().replaceWith(responseJSON['td']);
                  $('#ajax_msg_gestion').attr('class','valide').html('Enregistrement effectué.');
                  $.fancybox.close();
                }
                else
                {
                  $('#ajax_msg_gestion').attr('class','alerte').html(responseJSON['value']);
                }
                return false;
              }
            }
          );
        }
      }
    );

    // ////////////////////////////////////////////////////////////////////////////////////////////////////
    // Soumission de la demande d’impression d’un récapitulatif PDF
    // ////////////////////////////////////////////////////////////////////////////////////////////////////

    $('#form_imprimer').on
    (
      'click',
      '#bouton_imprimer',
      function()
      {
        var groupe_nom = $('#f_groupe option:selected').text();
        $('#bouton_imprimer').prop('disabled',true);
        $('#ajax_msg_imprimer').attr('class','loader').html('En cours&hellip;');
        $.ajax
        (
          {
            type : 'POST',
            url : 'ajax.php?page='+window.PAGE,
            data : 'csrf='+window.CSRF+'&f_action='+'imprimer_tableau'+'&f_classe='+memo_classe+'&f_groupe='+memo_groupe+'&f_groupe_nom='+encodeURIComponent(groupe_nom),
            dataType : 'json',
            error : function(jqXHR, textStatus, errorThrown)
            {
              $('#bouton_imprimer').prop('disabled',false);
              $('#ajax_msg_imprimer').attr('class','alerte').html(afficher_json_message_erreur(jqXHR,textStatus));
              return false;
            },
            success : function(responseJSON)
            {
              initialiser_compteur();
              $('#bouton_imprimer').prop('disabled',false);
              if(responseJSON['statut']==true)
              {
                $('#ajax_msg_imprimer').removeAttr('class').html(responseJSON['value']);
              }
              else
              {
                $('#ajax_msg_imprimer').attr('class','alerte').html(responseJSON['value']);
              }
              return false;
            }
          }
        );
      }
    );

  }
);
