startDocumentLoading = function()
{
  $("body").setStyle({cursor: 'wait'});
}
var endDocumentLoading = function()
{
  $("body").setStyle({cursor: 'default'});
}
/**
 *  Fonction affichant/masquant le notice complète
 *  @param {String} Le rang de la notice dans le jeu de résultats
 *  @param {String} L'identifiant de la notice
 */
var hs = new Array(); // Un tableau contenant les hauteurs de notice
toggleNotice = function(no,id) {
  if ( no.blank() || id.blank() ) return false;
  var tr = $("rnotice-" + no);
  var di = $("dnotice-" + no);
  if( tr==null || di==null ) return false;
  // Masquer
  if ( tr.visible() )
  {
    if ( hs && !hs[di.id] ) {
      var h = di.getHeight();
      hs[di.id] = h;
    }
    var d = 300;
    var anim = new YAHOO.util.Anim(di, {height: {to: 0}}, d/1000, YAHOO.util.Easing.EaseOut);
    anim.animate();
    setTimeout(function() {di.hide(); tr.hide();}, d+20);
  }
  // Afficher
  else
  {
    var tmp = di.down(2);
    if ( tmp==null || !(tmp.id.startsWith("bib-doc")) )
    {
      // On doit recuperer la notice complete. En route avec Ajax !
      new Ajax.Updater({success: "dnotice-"+no}, "functions/bib/bib-doc.xsp?id="+id+"&ti18n", {
        method: 'get',
        insertion: Insertion.Bottom,
        onCreate: startDocumentLoading,
        onComplete: stopNoticeLoading(tr,di)
      });
    }
    else
    {  // La notice complete est deja dans la page. On ne fait que l'afficher de nouveau
      animateDI(tr,di);
    }
 }
  return false;
}
/**
 * Fonction affichant la notice complete et mettant fin a la recuperation via
 * Ajax.
 * @param {HTMLObject} Le <tr> contenant la notice
 * @param {HTMLObject} Le <div> contenant la notice
 */
stopNoticeLoading = function(tr,di){
  return function(){
    animateDI(tr,di);
    $("body").setStyle({cursor: 'default'});
  }
}
/**
 * Fonction animant l'affichage de la notice complete
 *
 * @param {HTMLObject} Le <tr> contenant la notice
 * @param {HTMLObject} Le <div> contenant la notice
 */
animateDI = function(tr,di){
  tr.show();
  var h;
  if (!hs[di.id])
    h = di.getHeight();
  else
    h = hs[di.id];
  di.setStyle({height: '1px'});
  var d = 300;
  var anim = new YAHOO.util.Anim(di, {height: {from: 0, to: h}}, d/1000, YAHOO.util.Easing.EaseOut);
  anim.animate();
  di.show();
}
/**
 * Fonction modifiant le tri d'un resultat de recherche
 * Le but est d'ajouter ou de modifier la cle de tri presente dans l'URL de la
 * page
 */
toggleTri = function(field) {
   if ( !field.blank() )
   {
      // parser les parametres dans l'URL et ajouter/modifier le parametre sf =field
      var s = window.location.search;
      if ( !s.blank() )
      {
        s = s.substr(1);
        var ps = s.split("&");
        var u = "?";
        var ok = false;
        for ( var i=0, l=ps.length; i < l; i++ )
        {
           if ( !ps[i].blank() )
           {
             var pp = ps[i].split("=");
             if ( !pp[0].blank() && pp[0]=="sf" && !pp[1].blank() && pp[1]!=field )
             {
                u += ( (i==0) ? "" : "&" ) + "sf=" + field;
                ok = true;
             }
             else
                u += ( (i==0) ? "" : "&" ) + ps[i];
           }
        }
        if ( !ok ) u += ( (u=="?") ? "":"&" ) + "sf=" + field
        window.location.href = u;
      }
   }
}
/**
 * Fonction supprimant une notice
 */
deleteNotice = function(no, id) {
  if ( id.blank() ) return false;
  if ( confirm( _usersMessagesLocale.admin_delete_confirm + " : " + id ) )
  {
    var dmsg = $("dltNtcMsg");  // la cible pour le message d'informations sur la suppression
    var msg;
    new Ajax.Request("edit/functions/bib-delete.xml?delete=true&field=sdxdocid&value=" + id, {
          method: 'get',
          onCreate: function(){
            if ( startDocumentLoading ) startDocumentLoading();
            dmsg.update(_usersMessagesLocale.admin_delete_onloading);
            dmsg.show();
          },
          onSuccess: function(trans){
            if(trans.responseText!=null){
              if ( trans.responseText.match(/failures=\"0\"/) )
                  msg = _usersMessagesLocale.admin_delete_success;
              if ( trans.responseText.match(/deletions=\"0\"/) )
                  msg = _usersMessagesLocale.admin_delete_failure;
            }
            dmsg.update(msg);
            var node = $("result-" + id);
            node.addClassName("notice-deleted");
            node = $("rnotice-"+no);
            if (node!=null) node.remove();
            node = $("supprimer-notice-"+no);
            if (node!=null) node.disabled();
          },
          onComplete: function(){
            if ( endDocumentLoading ) endDocumentLoading();
          },
          onFailure: function(){
            dmsg.update(_usersMessagesLocale.admin_delete_exception);
          }
        });
  }
  return false;
}
deleteAllDocs = function(qid) {
  if ( qid.blank() ) return false;
  if ( confirm( _usersMessagesLocale.admin_deleteAll_confirm ) )
  {
    var dmsg = $("dltNtcMsg");  // la cible pour le message d'informations sur la suppression
    var msg;
    new Ajax.Request("edit/functions/bib-delete.xml?delete=true&hpp=-1&qid=" + qid, {
          method: 'get',
          onCreate: function(){
            if ( startDocumentLoading ) startDocumentLoading();
            dmsg.update(_usersMessagesLocale.admin_deleteAll_onloading);
            dmsg.show();
          },
          onSuccess: function(trans){
            var txt=trans.responseText;
            if(txt!=null){
              if ( txt.match(/failures=\"0\"/) )
                  msg = _usersMessagesLocale.admin_deleteAll_success;
              if ( txt.match(/deletions=\"0\"/) )
                  msg = _usersMessagesLocale.admin_deleteAll_failure;
            }
            dmsg.update(msg);
            $$('.pl-rslt').each(function(o,i){
              markDelete(o);
            });
            $$('.pl-rnotice').each(function(o,i){
              if(o!=null){
                o.remove;
              }
            });
            try{
              $$('.pl-rslt-bttn-dlt-all span.yui-push-button').each(function(o,i){
                if(o!=null){
                  o.addClassName("yui-button-disabled yui-push-button-disabled");
                  o.descendants().each(function(o2,i){
                    if(o2!=null && o2.nodeName=="BUTTON"){
                      o2.disabled=true;
                    }
                  });
                }
              });
            } catch(e){}
          },
          onComplete: function(){
            if ( endDocumentLoading ) endDocumentLoading();
          },
          onFailure: function(){
            dmsg.update(_usersMessagesLocale.admin_deleteAll_exception);
          }
        });
  }
  return false;
}
markDelete = function(node){
  if(node==null) return;
  node.addClassName("notice-deleted");
}
/**
 *  Fonction initialisant le formulaire de recherche dans l'état civil
 */
var commune;
var communeSlct;
initSearchForm_eta = function(){

   var myForm = document.forms['eta'];

   if (myForm==null) return false;

  if ( commune==null || commune.blank() ) commune = "94001";
  if ( communeSlct==null ) communeSlct = myForm.elements['query1'];

  Event.observe(communeSlct, "change", function(){
                changeCarte();
                changeActe();
  });
  Event.observe(communeSlct,   "blur", function(){
                changeCarte();
                changeActe();
  });

}
changeCarte = function(){
  var v = $F(communeSlct);
  if ( commune && !(v.blank()) && commune!=v )
  {
    commune = v;
    var img = $('carte').down();
    if ( img!=null ) {
      img.src = img.src.gsub( /[^/]+\.gif/, v+".gif" );
    }
  }
}
changeActe = function(){
  var v = $F(communeSlct);
  var acteSlct = document.forms[0].elements['query2'];
  if (acteSlct!=null) {
    var c = $F(acteSlct);
    if (c!=v) {
      for ( var i=0, l=acteSlct.options; i < l; i++ ) {
        var o = acteSlct.options[i];
        if (o!=null && o.value==v) acteSlct.selectedIndex = i;
      }
    }
  }
}
/**
 * Fonction traitant le formulaire de recherche dans l'etat civil
 * La particularite ici est d'afficher les resultats de recherche dans la meme
 * page que le formulaire en s'aidant d'Ajax (via la librairie Javascript
 * Prototype (version 1.5, versions ulterieures non testees)
 *
 * Les resultats sont affiches dans un element XHTML dont l'identifiant doit
 * obligatoirement etre : "request-container"
 *
 * Les resultats sont retournes par l'URL functions/eta/eta-results.ajax
 * Au moment de l'affichage, les liens de navigation dans les pages de resultats
 * (leur classe CSS est "navlink") sont interceptes de maniere a traiter cette
 * navigation en Ajax, de la meme maniere que l'affichage des resultats de
 * recherche.
 *
 * @param myForm {Node} Le formulaire
 */
etaFormSubmit = function(myForm){
  if( !myForm ) return false;
   var target = $('request-container');
   if ( !target ) {
     // on soumet normalement le formulaire : on n'a pas de conteneur pour les resultats
     myForm.submit();
     return false;
   }
   var params = $(myForm).serialize(true);
   getAjaxResults(target, "eta", params);
   return false;
}
/**
 * Fonction gerant l'affichage des resultats de recherche
 *
 * @param target {Node} L'element XHTML cible qui contiendra les resultats
 * @param params {Array|String} Les parametres de l'URL. Un tableau ou une
 *                              String
 */
function getAjaxResults(target, base, params){
  if( target==null || params==null ) return;
  new Ajax.Updater( target, "functions/"+base+"/"+base+"-results.ajax", {
    method: 'get',
    parameters: params,
    evalScripts: true,
    onCreate: startResultsLoading(target),
    onComplete: endResultsLoading(target, base),
    onFailure: failureResultsLoading(target)
 });
  return false;
}
/**
 * Fonction gerant le demarrage de la recuperation des resultats
 *
 * @param target {Node} L'element XHTML cible qui contiendra le message
 */
function startResultsLoading(target){
  return function(){
    if ( startDocumentLoading )
        startDocumentLoading();
    if ( target!=null )
        target.update( "Construction des résultats de recherche en cours...<br/>" + target.innerHTML );
  }
}
/**
 * Fonction gerant la fin de la recuperation des resultats
 * C'est ici que l'on intercepte les boutons de navigation. On y "branche" un
 * gestionnaire d'evenement sur le "click". Cela fonctionne donc aussi bien avec
 * la souris qu'avec le clavier.
 *
 * @param target {Node} L'element XHTML cible qui contiendra le message
 */
function endResultsLoading(target, base){
  return function(){
    if ( endDocumentLoading )
        endDocumentLoading();
    controlNavLink(target, base);
  }
}
controlNavLink = function(target, base){
  var nl = $$(".navlink");
  if ( nl.length !=0 ) {
    nl.each(function(o,i){
      Event.observe(o, "click", function(){
        var href = o.href;
        o.href="javascript:void(0);";
        var p = href;
        if (p.indexOf("?")>-1)
          p = p.substring( href.indexOf("?") + 1 );
        getAjaxResults(target, base, p);
      });
    });
  }
}
/**
 * Fonction gerant l'echec de la recuperation des resultats
 *
 * @param target {Node} L'element XHTML cible qui contiendra le message
 */
function failureResultsLoading(target){
  return function(){
    if ( endDocumentLoading )
        endDocumentLoading();
    if (target!=null)
      target.update(_usersMessagesLocale.failure_results_loading);
  }
}
openPIV = function(url) {
  if ( url.blank() || !imgDir ) return;
  if (!url.endsWith("vierwer.html")){
    if (!url.endsWith("/")) url += "/viewer.html";
    else url += "viewer.html";
  }
  window.open( "img-viewer" + imgDir + url, 'piv' );
};
function validateDeleteInseeButtonClick( base , insee ){

  // alert("dans validateDeleteInseeButtonClick:"+base+" ; "+insee);

  if(insee==null || insee.blank()){
    // TODO: i18n [MP]
    alert("Vous devez sélectionner une commune avant de cliquer.");
  }
  else{
    var onReturnFunction = function(){
      return initEtaDeleteButtons(insee);
    };
    deleteDocs(base, 'pl-dlt-insee', 'field=insee&value='+insee, onReturnFunction);
  }

}
function initEtaDeleteButtons(insee){
  // alert("dans initEtaDeleteButtons:"+insee);
  var slct=$('pl-dlt-insee-slct');
  if(slct!=null){
    if(insee!=null && !insee.blank()){
      var opt=null;
      $A(slct.options).each(function(o,i){
        if(o!=null && o.value==insee){
          opt=o;
          return;
        }
      });
      if(opt!=null){
        opt.disabled=true;
        opt.remove();
        slct.selectedIndex=0;
      }
    }
    if(slct.options.length<=1){
      slct.disabled=true;
      disablePleadeDeleteButtons();
    }
    else{
      slct.disabled=false;
      var bttn=$('pl-dlt-insee');
      if(bttn!=null){
        bttn.disabled=false;
        var yuib = bttn.up(1);
        if(yuib!=null && yuib.nodeName=="SPAN"){
          yuib.removeClassName("yui-button-disabled yui-push-button-disabled");
        }
      }
    }
  }
}
