// =============================================================================
function init_frm_edit_prs(){

  // Ajout d'une personne...
  if( jq("#prs_id").val() == 'new' ){
    jq("#editLlbPersonneTabs").tabs({ disabled: [1,2,3,4,5,6,8] });

  }else{
    jq("#editLlbPersonneTabs").tabs();

    init_specific_structures();
    init_specific_auteur();
  }
  

  //jq("#aAddImage").click( function(){ add_image_to_prs();});

  // Parcours de tous les champs et application d'actions
  // génériques en fonction de leur classe
  jq("input, select,textarea").each(
    function(){
      set_validation_rules( jq(this) );

      // Repérage des champs dates
      if( /isDate/.test(jq(this).attr('class'))){
        jq(this).datepicker({
          dateFormat: 'yy-mm-dd',
          minDate: new Date(1910, 1 - 1, 1),
          maxDate: new Date(),
          yearRange: '-200:+200',
          changeYear: true,
          changeMonth: true
        });
      }
    }
  );

  jq("#prs_login").keypress(function(o){
    test_dispo_login( jq(this) );
  });

  jq("#prs_login").keyup(function(o){
    test_dispo_login( jq(this) );
  });

  if( jq("#prs_email_unique").length > 0 ){
    jq("#prs_email").blur(
      function(o){
        test_dispo_email( jq(this) );
        window.clearTimeout(window.uniqueTimer);
        window.uniqueTimer = window.setTimeout(
            function(){
              var iUnique = jq("#prs_email_unique").val();
              if( iUnique != 0 ){
                alert("L'adresse e-mail saisie est déjà utilisée. \nMerci d'un choisir une autre.");
                jq("#prs_email").addClass('frm-error').focus();
              }else{
                jq("#prs_email").removeClass('frm-error');
              }
            }
            ,500);
      }
    ).focus(function(){return true; /*alert('focus')*/});
  }

  $('#prs_pwd').val('').keyup( check_pass_strength );
  $('#prs_pwd2').val('').blur( check_pass_confirm );


  $("#type_auteur-4").click(
    function(){
      if( $(this).is(":checked") ){
        $("#divCharteIllust").show();
      }
      else {
        $("#prs_charte_illustrateur").attr('checked', false);
        $("#divCharteIllust").hide();
      }
    }
  )


  jq("#frmEditLlbPersonne #save").click(
    function (){
      tinyMCE.triggerSave();
      if( validate_edit_prs() ){
        if( $('#prs_pwd').val() != '' && $('#prs_pwd2').val() != '' ){
          var sAlertPwd  = "Vous avez choisi de changer de mot de passe.\n";
              sAlertPwd += "Votre session actuelle va être réinitialisée.\n";
              sAlertPwd += "Vous devrez vous reconnecter avec ce nouveau mot de passe.";
          alert( sAlertPwd );
        }
        jq("#frmEditLlbPersonne").submit();
      }else{
        return false;
      }
    }
  );

	jq("#add_image").click( function(){
		openMediaManager("IMG","personne",jq("#prs_id").val());
	});
	jq("#add_video").click( function(){
		openMediaManager("VID","personne",jq("#prs_id").val());
	});
	jq("#add_audio").click( function(){
		openMediaManager("AUD","personne",jq("#prs_id").val());
	});
	jq("#add_doc").click( function(){
		openMediaManager("BUR","personne",jq("#prs_id").val());
	});
	updateAssocDocList(jq("#prs_id").val(),'personne');

}
// =============================================================================
function validate_edit_prs(){
  
  var errContainer = jq('#frmErrors');
  
  jq("#frmEditLlbPersonne").validate({
    errorContainer: errContainer,
    errorClass: "frm-error",
    wrapper: "li",
    errorPlacement: function(error, element) {
      error.appendTo( jq("#frmErrors ul") );
    },
    invalidHandler: function(e, validator) {
      var errors = validator.numberOfInvalids();
      if (errors) {
        var message = errors == 1
        ? 'Vous avez oublié le champ mentionné ci-dessous : '
        : 'Vous avez oublié les ' + errors + ' champs mentionnés ci-dessous : ';
        jq(errContainer).html(message+"<ul></ul>");
        jq(errContainer).show();
      } else {
        jq(errContainer).hide();
      }
    }
  });
  if( jq("#frmEditLlbPersonne").valid() ){
    return true
  }else{
    return false;
  }
}
// =============================================================================
// Fonction générique sur l'association personnes-structures
function llb_prs_ajax_dbaction( sAction, oParams ){

  var func;
  var aParams = eval ('('+oParams+')');
  switch (sAction) {
    case 'update_resp':
      func = 'llb_update_prs_stc_resp';
      break;

    case 'update_edit':
      func = 'llb_update_prs_stc_editeur';
      break;

    case 'delete_prs_stc':
      func = 'llb_delete_prs_stc';
      break;

    case 'do_add_prs_stc':
      func = 'llb_add_prs_stc';
      break;

    case 'delete_prs_medit':
      func = 'llb_delete_prs_aut_stc';
      break;

    case 'do_add_prs_medit':
      func = 'llb_add_prs_aut_stc';
      break;

    default:
      return false;
      break;
  }

  jq("#ajax-response")
      .css({'right':'250px','top':'250px'})
      .html( "Action en cours..." )
      .attr("class", "frmInfo")
      .show();

  // Exécution de l'appel ajax
  jq.ajax({
    url: llbRestBaseUri+'?function='+func+'&array_args='+oParams
    ,dataType:'json'
    ,success: function(msg){
      if( msg["status"] == 'OK' ){
        jq("#ajax-response").html( msg["message"] ).attr("class", "frmSuccess").show();

        // STRUCTURES ------------------------------------------------
        if( func == 'llb_add_prs_stc' ){ // Ajout
          update_prs_stc_table( 'add', aParams );
        }
        // -------------------------------------------------
        if( func == 'llb_delete_prs_stc' ){ // Suppression
          update_prs_stc_table( 'delete', aParams );
        }

        // MAISONS EDITIONS --------------------------------------------
        if( func == 'llb_add_prs_aut_stc'){
          update_prs_medit_table( 'add', oParams );
        }
        if( func == 'llb_delete_prs_aut_stc'){
          update_prs_medit_table( 'delete', oParams );
        }


      }else {
        jq("#ajax-response").html( msg["message"] ).attr("class", "frmError").show();
      }
      window.clearTimeout(window.timer);
      window.timer = window.setTimeout('jq("#ajax-response").hide()', 2500);
    }
    ,error: function(XMLHttpRequest, textStatus, errorThrown){
      jq("#ajax-response").html( 'Erreur : '+textStatus ).attr("class", "frmError").show();
      window.clearTimeout(window.timer);
      window.timer = window.setTimeout('jq("#ajax-response").hide()', 2500);
    }
  });
  return true;
}

// ----------------------------------------------------------------------
function update_prs_stc_table( sAction, aParams ){
  if(sAction == 'add'){
    var iPrsId      = aParams['iPrsId'];
    var newStcId    = aParams['iStcId'];
    var newStcResp  = ( aParams['iStcResp'] > 0 )? ' checked="checked"' :'';
    var newStcEdit  = ( aParams['iStcEdit'] > 0 )? ' checked="checked"' :'';

    var sNewTr  = '<tr id="tr-stc-'+newStcId+'">';
        sNewTr += '<td class="td-stc-nom">';
        sNewTr += '</td><td class="center">';
    if( /front-llb-form/.test(jq("#frmEditLlbPersonne").attr('class')) ){
        sNewTr += '<input type="hidden" name="prs_stc-'+newStcId+'-resp" value="'+aParams['iStcResp']+'" />';
        sNewTr += '<input type="hidden" name="prs_stc-'+newStcId+'-edit" value="'+aParams['iStcEdit']+'" />';
        sNewTr += '<a href="#null"class="button aDel" onclick="delete_prs_stc('+iPrsId+','+newStcId+');">Supprimer</a>';
        sNewTr += '</td></tr>';
    }else{
        sNewTr += '<input type="checkbox" name="prs_stc-'+newStcId+'-resp" value="1" '+newStcResp+' onclick="update_prs_stc_resp(this, '+iPrsId+','+newStcId+');" />';
        sNewTr += '</td><td class="center">';
        sNewTr += '<input type="checkbox" name="prs_stc-'+newStcId+'-edit" value="1" '+newStcEdit+' onclick="update_prs_stc_editeur(this, '+iPrsId+','+newStcId+');" />';
        sNewTr += '</td><td class="center">';
        sNewTr += '<a href="#null"class="button aDel" onclick="delete_prs_stc('+iPrsId+','+newStcId+');">Supprimer</a>';
        sNewTr += '</td></tr>';
    }

    jq("#tr-add-prs-stc").before(sNewTr).hide();
    // Récupération et insertion du nom de la structure.
    jq.ajax({
      url: llbRestBaseUri+'?function=llb_get_stc_by_id&array_args=['+newStcId+',true]'
      ,dataType:'json'
      ,success: function(msg){
        jq("#tr-stc-"+newStcId+" > td.td-stc-nom").html( msg['stc_nom'] )
      }
    });


    // Suppression de la ligne no-results
    if( jq("#tb-list-prs-stc tr.no-result").length > 0 ){
      jq("#tb-list-prs-stc tr.no-result").remove();
    }


  }
  else if(sAction == 'delete'){
    jq("#tr-stc-"+aParams['iStcId']).remove();

    var iNumPrsStc = jq("#tb-list-prs-stc tr").length;
    // Mise en place de la ligne no-results si plus d'association.'
    // iNumPrsStc == 2 => TR titre + TR ajout
    if( iNumPrsStc == 2 && jq("#tb-list-prs-stc tr.no-result").length == 0 ){

      var sNoresTr  = '<tr class="no-result">';
          sNoresTr += '<td colspan="4">Aucune structure de rattachement...</td>';
          sNoresTr += '</tr>';

      jq("#tr-add-prs-stc").before(sNoresTr).hide();
    }
  }
  // -----------------------
  init_specific_structures();
}


// -------------------------------------------------
function update_prs_stc_resp( oChk, iPrsId  , iStcId ){
  var iIsResp = ( oChk.checked )? '1' : '0';
  var oParams = '{"isResp":"'+iIsResp+'","iPrsId":"'+iPrsId+'","iStcId":"'+iStcId+'"}';
  return llb_prs_ajax_dbaction( 'update_resp', oParams );
}
// -------------------------------------------------
function update_prs_stc_editeur( oChk, iPrsId  , iStcId ){
  var iIsEdit = ( oChk.checked )? '1' : '0';
  var oParams = '{"isEdit":"'+iIsEdit+'","iPrsId":"'+iPrsId+'","iStcId":"'+iStcId+'"}';
  return llb_prs_ajax_dbaction( 'update_edit', oParams );
}
// -------------------------------------------------
function delete_prs_stc( iPrsId , iStcId){
  var sConfirm = "Etes-vous sûr de vouloir supprimer le lien entre cette personne et cette structure ?";
  if( confirm(sConfirm) ){
    var oParams = '{"iPrsId":"'+iPrsId+'","iStcId":"'+iStcId+'"}';
    return llb_prs_ajax_dbaction( 'delete_prs_stc', oParams );
  }else{
    return false;
  }
}
// -------------------------------------------------
function add_prs_assoc( sStcType ){

  switch (sStcType) {
    case 'medit':
      sIdTr   = 'tr-add-prs-medit';
      sIdAc   = 'get-medit-list';
      sAcFunc = 'llb_get_autocomplete_medit';
      sIdAdd  = 'prs_medit-id-add';
      break;

    case 'stc':
      sIdTr   = 'tr-add-prs-stc';
      sIdAc   = 'get-stc-list';
      sAcFunc = 'llb_get_autocomplete_stc';
      sIdAdd  = 'prs_stc-id-add';
      break;

    default:
      return false;
      break;
  }


   jq("#"+sIdTr).show();

   // Initialisation de l'auto-complétion
   jq("#"+sIdAc).autocomplete(
    llbRestBaseUri+"?function="+sAcFunc,
    {
      dataType: 'json', minChars: 3, max: 15,autoFill: false,
      mustMatch: false, matchContains: true, cacheLength:0,
      selectFirst:false, matchSubset:true, delay: 150,
      parse: function(data) {
        var rows = [];
        if (data!=null){
          for(var i=0; i<data.length; i++){
            rows[i] = {
              data:data[i],
              value:data[i].stc_nom+ " ("+ data[i].stc_sigle+")",
              result:data[i].stc_nom+ " ("+ data[i].stc_sigle+")"
            };
          }
        }
        return rows;
      },
      formatItem: function(row, i, n) {
        return row.stc_nom;
      }
   }
  ).result(function(event, data, formatted) {
      jq("#"+sIdAdd).val( data.stc_id );
  });
}

// -------------------------------------------------
function add_prs_stc(){
  return add_prs_assoc('stc');
}

// -------------------------------------------------
function do_add_prs_stc(){

   var iPrsId   = jq("#prs_id").val();
   var iStcId   = jq("#prs_stc-id-add").val();
   var iStcResp = jq("#prs_stc-resp-add").is(":checked") ? '1' : '0';
   var iStcEdit = jq("#prs_stc-edit-add").is(":checked") ? '1' : '0';


   var oParams = '{"iPrsId":"'+iPrsId+'","iStcId":"'+iStcId+'", "iStcResp":"'+iStcResp+'","iStcEdit":"'+iStcEdit+'"}';

   // Ré-initialisation des champs d'ajout...
   jq("#get-stc-list").val('');
   jq("#prs_stc-id-add").val('');
   jq("#prs_stc-resp-add").attr("checked", false );
   jq("#prs_stc-edit-add").attr("checked", false);

   return llb_prs_ajax_dbaction( 'do_add_prs_stc', oParams );
}



// =============================================================================
// Fonction générique sur l'association personnes-maisons édition
function update_prs_medit_table( sAction, oParams ){

  var aParams     = eval ('('+oParams+')');
  var iPrsId      = aParams['iPrsId'];
  var newMeditId  = aParams['iStcId'];

  switch (sAction) {
      
    case 'delete':
      jq("#tb-list-prs-medit #tr-medit-"+aParams['iStcId']).remove();
      
      var iNumPrsMedi = jq("#tb-list-prs-medit tr").length;
      // Mise en place de la ligne no-results si plus d'association.'
      // iNumPrsMedi == 2 => TR titre + TR ajout
      if( iNumPrsMedi == 2 && jq("#tb-list-prs-medit tr.no-result").length == 0 ){

        var sNoresTr  = '<tr class="no-result">';
            sNoresTr += '<td colspan="2">Aucune maison d\'édition de rattachement...</td>';
            sNoresTr += '</tr>';

        jq("#tr-add-prs-medit").before(sNoresTr).hide();
      }
      break;

    case 'add':

      var sNewTr  = '<tr id="tr-medit-'+newMeditId+'">';
          sNewTr += '<td class="td-medit-nom">';
          sNewTr += '</td><td class="center">';
          sNewTr += '<a href="#null"class="button aDel" onclick="delete_prs_medit('+iPrsId+','+newMeditId+');">Supprimer</a>';
          sNewTr += '</td></tr>';

      jq("#tr-add-prs-medit").before(sNewTr).hide();

      // Suppression de la ligne no-results
      if( jq("#tb-list-prs-medit tr.no-result").length > 0 ){
        jq("#tb-list-prs-medit tr.no-result").remove();
      }

      // Récupération et insertion du nom de la structure.
      jq.ajax({
        url: llbRestBaseUri+'?function=llb_get_stc_by_id&array_args=['+newMeditId+',true]'
        ,dataType:'json'
        ,success: function(msg){
          jq("#tr-medit-"+newMeditId+" > td.td-medit-nom").html( msg['stc_nom'] );
        }
      });


      break;
  }
  return true;
}
// -------------------------------------------------
function delete_prs_medit( iPrsId , iMeditId){
  var sConfirm = "Etes-vous sûr de vouloir supprimer le lien entre cette personne et cette maison d'édition ?";
  if( confirm(sConfirm) ){
    var oParams = '{"iPrsId":"'+iPrsId+'","iStcId":"'+iMeditId+'"}';
    return llb_prs_ajax_dbaction( 'delete_prs_medit', oParams );
  }else{
    return false;
  }
}

// -------------------------------------------------
function add_prs_medit(){
   return add_prs_assoc( 'medit' );
}
// -------------------------------------------------
function do_add_prs_medit(){

   var iPrsId   = jq("#prs_id").val();
   var iMeditId   = jq("#prs_medit-id-add").val();
   var oParams = '{"iPrsId":"'+iPrsId+'","iStcId":"'+iMeditId+'", "iStcResp":"0","iStcEdit":"0"}';
   // Ré-initialisation des champs d'ajout...
   jq("#get-stc-list").val('');
   jq("#prs_stc-id-add").val('');

   return llb_prs_ajax_dbaction( "do_add_prs_medit", oParams );
}


// =============================================================================
function init_specific_auteur(){
  var jqAuteurChk = jq("#type_personne-PAUTE");
  var AUTEUR_TAB_INDEX = 4;

  // Liste des champs requis si AUTEUR = checked
  var aReqFlds = [];

  // Au chargement ......................
  if( !jqAuteurChk.is(":checked") ){
    // Désactivation de l'onglet "Auteur"
    jq("#editLlbPersonneTabs").tabs('disable' , AUTEUR_TAB_INDEX );
  }
  else {
    set_array_validation_rules( aReqFlds );
  }

  // Au CLICK ......................
  jqAuteurChk.click(
    function(){
      if( jq(this).is(":checked") ) {
        set_array_validation_rules( aReqFlds );
        // Activation de l'onglet "Auteur"
        jq("#editLlbPersonneTabs").tabs('enable' , AUTEUR_TAB_INDEX );
      }else{
        remove_array_validation_rules( aReqFlds);
        // Désactivation de l'onglet "Auteur"
        jq("#editLlbPersonneTabs").tabs('disable' , AUTEUR_TAB_INDEX );
      }
    }
  );

}
// -------------------------------------------------
function init_specific_structures(){
  var aPrsStcIds = eval(jq("#prs_stc").val());
  // Champs requis si pas prs rattaché à stc.
  var aReqFlds = ["prs_adresse","prs_ville_lib"];
  if( aPrsStcIds.length <= 0 ){
    set_array_validation_rules( aReqFlds );
  }else{
    remove_array_validation_rules( aReqFlds);
  }
}



// ..
// =============================================================================
// CREER UN COMPTE (FRONT)
// =============================================================================
function init_frm_creer_compte(){

  jq("#prs_login").keyup(function(o){
    test_dispo_login( jq(this) );
  })

  jq("#prs_email").blur(
    function(o){
      test_dispo_email( jq(this) );
    }
  );



  $('#prs_pwd').val('').keyup( check_pass_strength );

  init_prs_stc_autocomplete();

  jq("#frmPrsCreerCompte").validate({
     errorClass: "error",
     errorElement: "em",
     errorPlacement: function(error, element) {
       var sId = element.attr('id');
       error.insertBefore( jq("#"+sId) );
     },
     rules: {
       prs_nom: "required",
       prs_prenom: "required",
       // compound rule
       prs_email: {
         required: true,
         email: true
       },
       prs_email_unique:{
        required: true,
        max: 0
       },
       get_stc_list: "required",
       prs_stc_id: {
        required: true,
        number: true
       },
       prs_login: "required",
       prs_pwd: "required",
       prs_pwd2: {
        equalTo: "#prs_pwd"
       }
     },
     messages: {
       prs_nom: "Merci d'indiquer votre nom",
       prs_prenom: "Merci d'indiquer votre prénom",
       prs_email: {
         required: "Merci d'indiquer votre e-mail",
         email: "Votre adresse email doit avoir le format suivant 'nom@domaine.com'"
       },
       prs_email_unique :{
         max: "Cette adresse mail est déjà utilisée. Merci d'en saisir une autre."
       },
       get_stc_list: "Merci de sélectionner une structure de rattachement dans la liste proposée",
       prs_stc_id: {
        required: "Merci de sélectionner une structure de rattachement dans la liste proposée",
        number: "Merci de sélectionner une structure de rattachement dans la liste proposée"
       },
       prs_login: "Merci de saisir un identifiant unique",
       prs_pwd: "Merci de saisir un mot de passe",
       prs_pwd2: "Les 2 mots de passe ne sont pas équivalents."
    }
  });

  jq("#btn_creer_compte").click(
    function(){
      if( jq("#frmPrsCreerCompte").valid() ){
        jq("#frmPrsCreerCompte").submit();
      }
    }
  )

}

function init_prs_stc_autocomplete(){
   // Initialisation de l'auto-complétion
   jq("#get_stc_list").autocomplete(
    llbRestBaseUri+"?function=llb_get_autocomplete_stc",
    {
      dataType: 'json', minChars: 3, max: 15,autoFill: false,
      mustMatch: false, matchContains: true, cacheLength:0,
      selectFirst:false, matchSubset:true, delay: 150,
      parse: function(data) {
        var rows = [];
        if (data!=null){
          for(var i=0; i<data.length; i++){
            rows[i] = {
              data:data[i],
              value:data[i].stc_nom,
              result:data[i].stc_nom
            };
          }
        }
        return rows;
      },
      formatItem: function(row, i, n) {
        var sOut  = '<div title="'+row.stc_nom+'">'+row.stc_nom+'</div>';
        return sOut;
      }
   }
  ).result(function(event, data, formatted) {
    set_prs_stc_id(data.stc_nom);
  }).blur(function() {
    set_prs_stc_id( jq(this).val() );
  })
}

function set_prs_stc_id( stcNom ){
  // Récupération et insertion de la structure par son nom
  jq.ajax({
    url: llbRestBaseUri+'?function=llb_get_stc_by_nom&array_args=["'+stcNom+'","true"]'
    ,dataType:'json'
    ,success: function(stcdatas){
      if( null == stcdatas ){
        jq("#prs_stc_id").val( '' );
      }
      else if( 'object' == typeof(stcdatas) ){
        jq("#prs_stc_id").val( stcdatas.stc_id );
      }
    }
  });
}

// ..
// =============================================================================
// Fonction lancée dans le $(document).ready() du fichier "llb_admin.js"
// =============================================================================
function init_prs_back(){
    init_frm_edit_prs();
    init_ac_villes('prs_ville_lib','prs_cp','prs_ville','prs_dpt');
    set_ville_from_inseeid('prs_ville_lib', 'prs_ville','prs_cp','prs_dpt');
}
