/* 
	Code JS de la fiche identit?, centralis? dans un fichier ind?pendant !

	Variables des sous-formulaires d?finies ici :

*/
	// total de tous les produits selectionn?s sur fiche entreprise (= affich? dans 'selection en cours')
    var total=0;
    // nb de documents selectionn?s sur fiche entreprise (= affich? dans 'selection en cours')
    var nbdoc=0;
    
    // nbformat<section> = nb media selectionne
    var nbformatkbis = 0;
    // total<section> = 
    var totalkbis = 0;
    // additional<section> = a rajouter en plus (renvoye par callback)
    var additionalkbis = 0;
    var nbexkbis = 0; // Nombre exemplaire pour le kbis
    var diligencekbis = 0;
    
    var nbformatendettement = 0;
    var totalendettement = 0;
    var additionalendettement = 0;
    var diligenceendettement = 0;
    var diligencegage = 0;
    
    var nbformathisto = 0;
    var totalhisto = 0;
    var additionalhisto = 0;
    var diligencehisto = 0;
    
    var nbformatrjlj = 0;
    var totalrjlj = 0;
    var additionalrjlj = 0;
    var diligencerjlj = 0;
    
    var nbformatcomptes = 0;
    // total des tarifs de base + frais d'envoi (sauf diligences) pour tous les bilans
    var totalcomptes = 0;
    // toujours à 0
    var additionalcomptes = 0;
    // nbdocs<section> = nb de documents a rajouter au nb total de document qui se trouve dans le bandeau 'cart'
    var nbdocscomptes = 0;
    // total de tous les frais de diligences TTC de tous les bilans
    var diligencecomptes = 0;
    
    var nbformatstatuts = 0;//nb media != nb de docs
    var totalstatuts = 0;
    var nbdocsstatuts = 0; // 1 acte = +1 document pour le panier (pas de notion de depot)
    var additionalstatuts = 0;
    var diligencestatuts = 0;
    var diligencestatutsConst = 0;
    
    var nbformatdap = 0;
    var totaldap = 0;
    var nbdocsdap = 0;
    var additionaldap = 0;
    var diligencedap = 0;
    // Sert à mémoriser le dernier DAP visible
    var lastIndexDapVisible = 0;
    
    var nbformatcomplet = 0;
    var totalcomplet = 0;
    var additionalcomplet = 0;
    var nbdocscomplet = 0;
    var diligencecomplet = 0;
    
    // nb inscriptions  au gage sans depossession
    var nbformatgage = 0;
    // total du gage 
    var totalgage = 0;
    // additional<section> = a rajouter en plus (renvoye par callback)
    var additionalgage = 0;
    
    /** Map [key: section sur laquelle on veut lancer l'effet,value:boolean lock ou pas du div en question]*/
    var revealLocks = new Array();
    
    // pour ?viter le double clic ? la validation
    isFormNotAlreadySubmitOnce=true;
	function formSubmitSynchronized(form) {
		if (isFormNotAlreadySubmitOnce) {
	   		isFormNotAlreadySubmitOnce = false;
	   		form.elements['montantTotalSelection'].value = total.toFixed(2);
	   		document.body.style.cursor = 'wait';
       		form.submit();
       		return true;
		}
		return false;
	}
    
    function isDefined(variable){
    	if ( variable == null ) return false;
    	return (typeof(variable) == "undefined")?  false: true;
	}
	
	/**
	  pour form bilans 'comptes'.
	  Incremente/decremente un compteur de document global en fonction de la valeur d'une checkbox
	  @param control : checkbox produit
	  @param nbjs : variable nombre javascript global a updater e
	 */
    function updateNbDocs(control,section) {
	    var variableName = 'nbdocs'+section;
//	    try {
//	    } catch (e) { // si la variable existe pas
//	    }
	    if (control.checked) {
	    	eval(variableName+'++');
	    } else {
	    	eval(variableName+'--');
	    }
    }
    
    /**
      * recalcule du total d'une section 
      * et cachage du 'recap selection' si ?gale ? z?ro
      ( du nombre total de documents, total prix)
      */
 	function updateTotals(section)
    {
      totalsection = (eval('total'+section) + eval ('diligence'+section) + eval('additional'+section)).toFixed(2);      
      // set total
      total = totalkbis + additionalkbis + totalendettement + additionalendettement + totalhisto + additionalhisto + totalrjlj + additionalrjlj + totalcomptes + additionalcomptes + totalstatuts + additionalstatuts + totaldap + additionaldap + totalcomplet + additionalcomplet+totalgage;      
      totalDiligence = diligencehisto+ diligencekbis+diligencecomptes+diligencestatuts+diligencedap+diligenceendettement+diligencerjlj+diligencecomplet+diligencegage;
      
      total+=totalDiligence;
      // update totals (format francais avec une virgule)
      if ($('totaltotal')!=null)
	      $('totaltotal').innerHTML= toFixValueDecimale(total);
      if(totalsection == 0)
      {
        $('total'+section).innerHTML = '';
        $('divTotal'+section).style.display = 'none';
      } else {
        $('total'+section).innerHTML = totalsection;    
        $('divTotal'+section).style.display = 'block';  
      }
      
      // set number of documents (from all sections)
      nbdoc = ((nbformatkbis>0) ? 1 : 0) + ((nbformatendettement>0) ? 1 : 0) + ((nbformathisto>0) ? 1 : 0) + ((nbformatrjlj>0) ? 1 : 0) + nbdocsdap + nbdocscomptes + nbdocsstatuts + ((totalcomplet>0) ? 1 : 0);
   
      if(nbdoc == 0) {
        $('cart').style.visibility = 'hidden';
      }
      
      // traitement spécifique au gage sans depos en attente modif v3
      if (nbformatgage>0 && nbformatendettement==0)
      {
      	nbdoc+=1;
      }
      
      // update number of documents dans includeSelectionEnCours.jsp
      if ($('nbdocs')!=null)
	      $('nbdocs').innerHTML = nbdoc;
	  if ($('nbdocsplural')!=null)  
    	  $('nbdocsplural').style.display = (nbdoc>1) ? "inline" : "none" ;  
    	  
      if ($('totaltotal')!=null)
	      new Effect.Highlight('cart',{startcolor:'#FFFF3C', endcolor:'#FFFFBD', restorecolor:'#FFFFBD'});
    }
    
    function addOrRemoveQuantity(control, price, section, quantitycontrol)
    {
      if(control.checked)
      {
        $(quantitycontrol).disabled = false;
        $(quantitycontrol).value = 1;
      } else {
        $(quantitycontrol).disabled = true;
        $(quantitycontrol).value = 0;        
      }
      updateQuantity(control, section, $(quantitycontrol));    
      addOrRemove(control, price, section);
    }
    
    /**
     * Maj checkbox courrier suite maj quantitÃ© courrier
     * Inverse de AddOrRemoveQuantity qui maj quantity depuis checkbox   
     * @author GOI       
     */         
    function addOrRemoveCheck(quantitycontrol, price, section, checkcontrolname)
    {
      if(quantitycontrol.value == 0) {
        $(checkcontrolname).checked = false;
      } else {
        $(checkcontrolname).checked = true;
      }
      updateQuantity($(checkcontrolname), section, quantitycontrol);    
      if (quantitycontrol.value == 0 || quantitycontrol==null) {
        addOrRemove($(checkcontrolname), price, section);
      }
    }
    
    //
    // quasi-similaire ? addOrRemoveQuantity
    // mais pour l'initialisation des jsp
    // (utile si traitement diff?rent initialisation)
    //
    function initQuantity(control, price, section, quantitycontrol)
    {
      if(control.checked)
      {
        $(quantitycontrol).disabled = false;
      } else {
        $(quantitycontrol).disabled = true;  
      }
      updateQuantity(control, section, $(quantitycontrol));
      addOrRemove(control, price, section);
    }

    function updateQuantity(control, section, quantitycontrol)
    { 
      // doit ?tre num?rique
      if (!isNumeric(quantitycontrol.value)) {
	  		quantitycontrol.value = '1';
	  }
    
      if (quantitycontrol.value == null || quantitycontrol.value == "" || quantitycontrol.value == 0) {
			quantitycontrol.value = '0';
			$(control).checked = false;
			quantitycontrol.disabled = true;
			showCheck(control);  
	  }
      
      // Callback for section
      eval('additional'+section+' = '+section+'Callback()');
      
      // nombre de produits..
      $('displaynbex'+section).innerHTML = (quantitycontrol.value >1) ? 'x'+quantitycontrol.value : '';
      // Sauvegarde nombre exemplaire pour cancel sur envoi périodique
      eval('nbex'+section+' = ' + quantitycontrol.value);
      
      updateTotals(section);
      
      if (quantitycontrol.value == "")
      {
       addOrRemove(control, 0, section);
      }
    }
    
    /**
     * Utilis? par form etat endettement uniquement.
     * Va appeler addOrRemove() sur chaque sous controle(de controlarray)     
     * @param control: checkbox mere
     * @param controlarray: array[checkbox] ? updater en fonction de checkbox mere
     * @param unitprice: utilis? pour appeler addOrRemove
     * @param section: nom conventionnel du form utilis? pour appeler addOrRemove
     * @param grandparentcontrol: checkbox on le passe ? false on appelle showCheck() dessus
     */
    function addOrRemoveGroup(control, controlarray, unitprice, section, grandparentcontrol,avecDiligence)
    {
      is_checked = control.checked;
      showCheck(control);  
      if(is_checked)
      {       
        controlarray.each(function(subcontrol) {
          if(!$(subcontrol).checked){
            $(subcontrol).checked = true;
            addOrRemove($(subcontrol), unitprice, section,avecDiligence); 
          }
        });

      } else {       
        controlarray.each(function(subcontrol) {
          if($(subcontrol).checked){
            $(subcontrol).checked = false;
            addOrRemove($(subcontrol), unitprice, section,avecDiligence); 
          }
        });
        $(grandparentcontrol).checked = false;
        showCheck(grandparentcontrol);      
      }
      return true;
    }
    
    function addOrRemoveGrandGroup(control, parentarray, controlarray, unitprice, section,avecDiligence)
    {
      is_checked = control.checked;
      showCheck(control);  
      if(is_checked)
      {      
        parentarray.each(function(subcontrol) {
          $(subcontrol).checked = true;
          showCheck(subcontrol);       
        });
        controlarray.each(function(subcontrol) {
          if(!$(subcontrol).checked){
            $(subcontrol).checked = is_checked;
            addOrRemove($(subcontrol), unitprice, section,avecDiligence); 
          }
        });
      } else {     
        parentarray.each(function(subcontrol) {
          $(subcontrol).checked = false;
          showCheck(subcontrol);        
        });
        controlarray.each(function(subcontrol) {
          if($(subcontrol).checked){
            $(subcontrol).checked = is_checked;
            addOrRemove($(subcontrol), unitprice, section,avecDiligence); 
          }
        });
      }
      return true;
    }
    
    function checkParent(control, parentcontrol, grandparentcontrol)
    {
      if(!control.checked)
      {
        $(parentcontrol).checked = false;
        $(grandparentcontrol).checked = false;
        showCheck(parentcontrol);
        showCheck(grandparentcontrol);       
      } 
    }
    
    // version sp?ciale cat?gories (utilis?e etat endettement)
    // v?rifie les valeurs du tableau :
    //  > tableau des cat?gories
    // (afin de mettre ? jour les checkbox)
    function addOrRemoveGroup(control, controlarray, unitprice, section, grandparentcontrol, tableauCat,avecDiligence)
    {
      is_checked = control.checked;
      showCheck(control);  
      if(is_checked)
      {       
        controlarray.each(function(subcontrol) {
          if(!$(subcontrol).checked){
            $(subcontrol).checked = true;
            addOrRemove($(subcontrol), unitprice, section,avecDiligence); 
          }
        });

		var toutCocheCat = true;
      	for (i = 0; i< tableauCat.length && toutCocheCat; i++) {
      		var valeur = tableauCat[i];
      		if ($(valeur).checked == false) {
      			toutCocheCat = false;
      		}
      	}
      	if (toutCocheCat) {
      		$(grandparentcontrol).checked = true;
        	showCheck(grandparentcontrol);
        }

      } else {       
        controlarray.each(function(subcontrol) {
          if($(subcontrol).checked){
            $(subcontrol).checked = false;
            addOrRemove($(subcontrol), unitprice, section,avecDiligence); 
          }
        });
        $(grandparentcontrol).checked = false;
        showCheck(grandparentcontrol);      
      }
      return true;
    }
        
    // version sp?ciale (utilis?e etat endettement)
    // v?rifie les valeurs des tableaux :
    // 	> tableau des privileges de la cat?gorie
    //  > tableau des cat?gories
    // (afin de mettre ? jour les checkbox)
    function checkParent(control, parentcontrol, grandparentcontrol, tableauPriv, tableauCat)
    {
      if(!control.checked)
      {
        $(parentcontrol).checked = false;
        $(grandparentcontrol).checked = false;
        showCheck(parentcontrol);
        showCheck(grandparentcontrol);       
      } 
      else {
        var toutCochePriv = true;
      	for (i = 0; i< tableauPriv.length && toutCochePriv; i++) {
      		var valeur = tableauPriv[i];
      		if ($(valeur).checked == false) {
      			toutCochePriv = false;
      		}
      	}
      	if (toutCochePriv) {
      		$(parentcontrol).checked = true;
        	showCheck(parentcontrol);
        	var toutCocheCat = true;
	      	for (i = 0; i< tableauCat.length && toutCocheCat; i++) {
	      		var valeur = tableauCat[i];
	      		if ($(valeur).checked == false) {
	      			toutCocheCat = false;
	      		}
	      	}
	      	if (toutCocheCat) {
	      		$(grandparentcontrol).checked = true;
	        	showCheck(grandparentcontrol);
	      	}
      	}
      }
    }
    
    /**
     * Appel? par chaque modification d'un 'input media'
     * - update tarifs globaux 
     * - affiche le 'cart' (selection en cours) si 'control' check?
     * - appelle une fonction callback specifique pour ce formulaire
        (ce callback doit gerer les effets dhtml genre surlignage et eventuellement renvoyer le tarif du media concerne (ex: nb courrier dans kbis influence le prix)
     * - appelle updateNbDocs sur la section
        @param control: objet checkbox
        @param price: number prix de cet element (sera ajout? ou retranch?)
        @param section: string nom conventionnel du form qui sert pour retrouver les variables globals qui correspondent ? ce form/type produit.
        @param doUpdateTotals: boolean indiquant si on doit appeler la methode updateTotals ? la fin.
     */
     
       
    function addOrRemove(control, price, section,avecDiligence)
    {
      // Initialize totals
      totalsection = eval('total'+section);
      diligence = 0;
           
      // Get value from control
      if(control!=null && control.checked)
      {
        totalsection += price;
        eval('nbformat'+section+'++;');
        if($('cart') && $('cart').style.visibility != 'visible')
        {
          $('cart').style.visibility = 'visible';
        }
      
      } else if (control!=null){
        totalsection -= price;
        eval('nbformat'+section+'--;');      
      }
      else
      {
         totalsection -= price;
      }
	
      
      if(control!=null) 
	      showCheck(control);
	      
	      
      // calcul des frais de diligence pour la section	       
      if (avecDiligence==null || avecDiligence == true)
      {
      	diligence = calculFraisDiligence(control, section);       
	    // set total for section
    	eval('diligence'+section+' = '+diligence);
      }
      eval('total'+section+' = totalsection;');
      
      // Callback for section
      eval('additional'+section+' = '+section+'Callback()');
      updateTotals(section);
    }
    
    /**
     * Calcul des frais de diligence en fonction de la checkbox passée 
     * en parametre  param control et de la section 
     * (kbis, endettement,histo,rjlj,comptes,statuts,complet)
     */
    function calculFraisDiligence(control, section)
    {

	// Récupération du total actuel des frais de diligence de la section
	var diligenceSection = eval('diligence'+section); 

    // Si on est dans le cas des actes et statuts et seulement pour la selection
    // des medias pas pour la sélection d'un produit   
   	 if (section == 'statuts'){
   	 
	   	 	// on vérifie que le control passé en paramètre est bien une 
	   	 	// checkbox de media(visu, tel, mail ,courrier) et 
	   	 	//pas une checkbox de produit
	   	 	if (control!=null && control.id.indexOf('acces') == -1)
	   	 	{
	   	 	
				// Récupération de l'identifiant du control de type  "chkVisuSXX"
				// chkVisuS1X --> Derniers statuts à jour
				// chkVisuS11X --> Statuts constitutifs   	 	
				// chkVisuS2X --> Dernier depot/ derniers actes déposés   	 	
		   	 	id = control.id.substring(0,control.id.length-1);   	 	
		   	 	
		   	 	// Récupération des 4 checkbox pour le produit en fonction de l'id
			   	var checkBoxVisu = $(id+'a'); // visu
			   	var checkBoxTel = $(id+'b');  // tel
			   	var checkBoxMail = $(id+'c'); // mail
			   	var checkBoxCourier = $(id+'d'); // courrier
			   	
			   	var acteSelectionneVisu = checkBoxVisu != null && checkBoxVisu.checked;
		    	var acteSelectionneTele = checkBoxTel != null && checkBoxTel.checked;
		    	var acteSelectionneMail = checkBoxMail != null && checkBoxMail.checked;
		    	var acteSelectionneCour = checkBoxCourier != null && checkBoxCourier.checked;
		   	
		   	// Si la checkbox est selectionné et que le produit n'est pas 
		   	// Dernier depot/ derniers actes déposés
	    	if(control!=null && control.checked && id.indexOf('S2') == -1)
	      	{
	      	  /*
	   		   * Si premier cochage d'un des médias électroniques alors ajout 
	   		   * frais de diligence
		       */
	        	if ((acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail)
	        	|| (!acteSelectionneVisu && acteSelectionneTele && !acteSelectionneMail)
	        	|| (!acteSelectionneVisu && !acteSelectionneTele && acteSelectionneMail)) {
	        		// evite l'ajout de frais si on coche le courrier avec 
	        		// un seul média electronique 
	        		// déjà selectionné
		        	if (checkBoxCourier==null || control.id != checkBoxCourier.id)
		        	{
			          diligenceSection += eval('fraisDiligence'+section);
		    	    }
		        }  	
	      	}
	     	// Si la checkbox n'est pas selectionné et que le produit n'est pas 
		   	// Dernier depot/ derniers actes déposés
	      	else if (control!=null && id.indexOf('S2') == -1)
	      	{
	      	  /*
         	   * si dernier décochage d'un media electronique , plus de frais de diligence 
               */ 
			  if (!acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail)
		      {
		      		if ((diligenceSection>0  && checkBoxCourier!=null && control.id != checkBoxCourier.id )
		      		|| (diligenceSection>0  && checkBoxCourier==null))
		      		{
			      		diligenceSection-=eval('fraisDiligence'+section)
		      		}
		      }		           			  		     
	      	}
	      	// Si le produit est Dernier depot/ derniers actes déposés
	      	// cas particulier de ce produit il ne peut il  y avoir 
	      	// plusieurs medias cochés
	      	else if (control!=null && id.indexOf('S2') != -1)
	      	{
	      		// premier cochage (diligencestatutsConst == 0) d'un des medias 
	      		// electronique, on ajoute les frais de diligence
	      	   if (diligencestatutsConst == 0 
	      	   && (acteSelectionneVisu || acteSelectionneTele || acteSelectionneMail) ) 
      			   {
			          diligencestatutsConst = eval('fraisDiligence'+section);
			          diligenceSection += eval('fraisDiligence'+section);
			       }
			   // il y a dejà des frais de diligence pour le produit Dernier depot/ derniers actes déposés    
			   // le media selectioné est le courrier, on enleve les frais de diligence
			   else if (diligencestatutsConst > 0 && acteSelectionneCour){
					   diligencestatutsConst = 0;
					   if (diligenceSection>0)
					   {
						   diligenceSection -= eval('fraisDiligence'+section);
					   }
			       }
				// il y a des frais de diligence pour le produit Dernier depot/ derniers actes déposés    
			   // aucun media selectioné, on enleve les frais de diligence    
  			   else if (diligencestatutsConst > 0 && !acteSelectionneCour && !acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail){
					   diligencestatutsConst = 0;	
				     if (diligenceSection>0)
					   {
						   diligenceSection -= eval('fraisDiligence'+section);
					   }				
			       }
			    // le courrier est selectioné, donc il n'y a pas de frais de diligence,
			    // on click sur un media electronique donc on ajoute les frais de diligence.       
			    else if (diligencestatutsConst == 0 && acteSelectionneCour 
			    && (checkBoxVisu !=null || checkBoxTel!=null || checkBoxMail !=null))
			    {
					  diligencestatutsConst = eval('fraisDiligence'+section);
			          diligenceSection += eval('fraisDiligence'+section);
			     }			     
			  }
		}			  
    	}
    	// Si on est dans le cas des bilans
    	else if (section == 'comptes')
    	{    		  	
    		/*
    		 * récup nom des checkboxes, le format est chkComptesMedia[V|T|M|C]{0-n} pour 
    		 * coche média et chkComptes{0-n} pour coche produit.
    		 */
 	 		numBilan = control.id.substring(16,17);
 	 		if (numBilan.length != 0) {
 	 			// on ne fait rien sur le cochage/décochage du produit.
		   		var checkBoxVisu = $('chkComptesMediaV'+numBilan);
			   	var checkBoxTel = $('chkComptesMediaT'+numBilan);
			   	var checkBoxMail = $('chkComptesMediaM'+numBilan);
			   	var checkBoxCourier = $('chkComptesMediaC'+numBilan);
			   	// récup état des checkboxes
			   	var acteSelectionneVisu = checkBoxVisu != null && checkBoxVisu.checked;
		    	var acteSelectionneTele = checkBoxTel != null && checkBoxTel.checked;
		    	var acteSelectionneMail = checkBoxMail != null && checkBoxMail.checked;
		    	var acteSelectionneCour = checkBoxCourier != null && checkBoxCourier.checked;
		    	if(control!=null && control.checked) {
		      	  /*
		   		   * Si cochage média et premier cochage (tous les média électro décoché)
			       */
		        	if ((acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail)
		        	    || (acteSelectionneTele && !acteSelectionneVisu && !acteSelectionneMail)
		        	    || (acteSelectionneMail && !acteSelectionneVisu && !acteSelectionneTele)) {
		        	    // evite l'ajout de frais si on coche le courrier avec 
		        		// un seul média electronique 
		        		// déjà selectionné
			        	if (checkBoxCourier==null || control.id != checkBoxCourier.id)
			        	{
						diligenceSection += eval('fraisDiligence'+section);
//						console.info('ajout frais de diligence');
				        }
			        }
			    } else if (control!=null) {
		      	  /*
	         	   * si au final, les trois média électroniques sont maintenant décochés
	               */ 
//					console.debug(!acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail);
					if (!acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail) {
						if ((checkBoxCourier!=null && control.id != checkBoxCourier.id && diligenceSection>0)
						|| (checkBoxCourier==null && diligenceSection>0))
						{
							diligenceSection-=eval('fraisDiligence'+section);
//							console.info('suppressin frais de diligence');
						}
					}		     
		      	}
 	 		}
    	}

   	 	// since EIRL_LOT2
    	// Si on est dans le cas des dap
    	else if (section == 'dap')
    	{
    		/*
    		 * récup nom des checkboxes, le format est chkDapMedia[V|T|M|C]{0-n} pour 
    		 * coche média et chkComptes{0-n} pour coche produit.
    		 */
    		lastIndexDapVisible = control.id.substring(12, 13);
 	 		if (lastIndexDapVisible.length != 0) {
 	 			// on ne fait rien sur le cochage/décochage du produit.
 	 			var checkBoxVisu = $('chkDapMediaV' + lastIndexDapVisible);
			   	var checkBoxTel = $('chkDapMediaT' + lastIndexDapVisible);
			   	var checkBoxMail = $('chkDapMediaM' + lastIndexDapVisible);
			   	var checkBoxCourier = $('chkDapMediaC' + lastIndexDapVisible);
			   	// récup état des checkboxes
			   	var acteSelectionneVisu = checkBoxVisu != null && checkBoxVisu.checked;
		    	var acteSelectionneTele = checkBoxTel != null && checkBoxTel.checked;
		    	var acteSelectionneMail = checkBoxMail != null && checkBoxMail.checked;
		    	var acteSelectionneCour = checkBoxCourier != null && checkBoxCourier.checked;
		    	if(control!=null && control.checked) {
		      	  /*
		   		   * Si cochage média et premier cochage (tous les média électro décoché)
			       */
		        	if ((acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail)
		        	    || (acteSelectionneTele && !acteSelectionneVisu && !acteSelectionneMail)
		        	    || (acteSelectionneMail && !acteSelectionneVisu && !acteSelectionneTele)) {
		        	    // evite l'ajout de frais si on coche le courrier avec 
		        		// un seul média electronique 
		        		// déjà selectionné
			        	if (checkBoxCourier==null || control.id != checkBoxCourier.id)
			        	{
						diligenceSection += eval('fraisDiligence'+section);
				        }
			        }
			    } else if (control!=null) {
		      	  /*
	         	   * si au final, les trois média électroniques sont maintenant décochés
	               */ 
					if (!acteSelectionneVisu && !acteSelectionneTele && !acteSelectionneMail) {
						if ((checkBoxCourier!=null && control.id != checkBoxCourier.id && diligenceSection>0)
						|| (checkBoxCourier==null && diligenceSection>0))
						{
							diligenceSection-=eval('fraisDiligence'+section);
						}
					}		     
		      	}
 	 		}
    	}
    	// pour tous les autres produits
    	else
    	{
    		// on vérifie que le control passé en paramètre est bien une 
	   	 	// checkbox de media(visu, tel, mail ,courrier) et 
	   	 	//pas une checkbox de produit
    		if (control !=null && control.id.indexOf('envoiActif') == -1)
    		{
    			// on ne fait rien sur le cochage/décochage du produit.
		   		var checkBoxVisu = $('visu'+section);
			   	var checkBoxTel = $('tele'+section);
			   	var checkBoxMail = $('mail'+section);
			   	var checkBoxCourier = $('courrier'+section);
			   	
			   	// aucun media proposé, on est dans le cas des produit 
			   	// sans medias pcl dossier complet
			   	if (checkBoxVisu == null && checkBoxTel ==null &&  checkBoxMail == null && checkBoxCourier==null)
			   	{
			   		if(control!=null && control.checked)
		      		{
		      		  diligenceSection = eval('fraisDiligence'+section);
		      		}
				 	else if (control!=null && control.id.indexOf('privilege') == -1)
				 	{
				 	  diligenceSection = 0;
				 	}
				 	else if (control.id.indexOf('privilege') != -1 && eval('nbformat'+section)==0)
				 	{
				 		 diligenceSection = 0;
				 	}
			   	
			   	}
			   	// pour le kbis et l'histo rcs
			   	else
			   	{
			   	
			   	// récup état des checkboxes
			   	var selecVisu = checkBoxVisu != null && checkBoxVisu.checked;
		    	var selectTele = checkBoxTel != null && checkBoxTel.checked;
		    	var selectMail = checkBoxMail != null && checkBoxMail.checked;
		    	var selectCour = checkBoxCourier != null && checkBoxCourier.checked;
    		
	    		if(control!=null && control.checked)
		      	{
		      	  /*
		   		   * Si premier cochage de média électronique alors ajour frais de diligence
			       */
			       if ((selecVisu && !selectTele && !selectMail)
	        		|| (!selecVisu && selectTele && !selectMail)
	        		|| (!selecVisu && !selectTele && selectMail)) 
	        		{		        
			          diligenceSection = eval('fraisDiligence'+section);
			        }  	
		      	}
		      	else if (control!=null)
		      	{
		      	  /*
	         	   * si dernier décochage, plus de frais de diligence (manque test electronique)
	               */ 	              	             
	      		  if (eval('nbformat'+section)==0) 
	      		  {
			          diligenceSection = 0;
	        	  }
			      else if (selectCour && !selecVisu && !selectTele && !selectMail)
			      {
		        	 diligenceSection = 0;
			      }
		      	}
		     }
	      }
	      	
    	}
    	return diligenceSection;
    }

    /**
	  * Cette fonction permet de changer la couleur de la <div> de la jsp 
	  * qui contient la phrase d'information sur le frais de diligence
	  * Utilisé pour le kbis et l'hitorique des evenement 
	  * section== kbis et section== histo
	  * Si medias electronique selectionnés en jaune sinon en blanc
      */
     function jauniDivDiligence(section)
    {
    	 	var selecVisu = $('visu'+section) != null && $('visu'+section).checked;
	    	var selectTele = $('tele'+section) != null && $('tele'+section).checked;
	    	var selectMail = $('mail'+section) != null && $('mail'+section).checked;
	    	var selectCour = $('courrier'+section) != null && $('courrier'+section).checked;
    

    	if (selecVisu || selectTele ||selectMail )
    	{
    	    $('diligence'+section).style.backgroundColor='#FFFFBD';
    	}
    	else
    	{
    	 $('diligence'+section).style.backgroundColor='#FFFFFF';
    	}
    }
        
    /** 
      * maj visibilite du div 'cart' (selection en cours)
      * en fonction des variables global nbdoc et/ou total (cf selection en cours)
      */
    function updateCartStatus() {
		//if( total.toFixed(2) == 0 ) {
		if( nbdoc == 0 ) {
			 $('cart').style.visibility = 'hidden';
		} else {
	        if($('cart').style.visibility != 'visible') {
    	      $('cart').style.visibility = 'visible';
        	}
        }
    }
    
   /**
    * Modifie la couleur du fond en fonction de l'?tat du boutton
    * @param control : instance de checkbox	
    */
    function showCheck(control) {
      if(typeof(control) != "object") 
      {
      control = $(control);
      }
      if (control!=null && control.id.indexOf('privilege')!=-1)
      {
      	  idPrivilege = control.id;
          div = $(idPrivilege+'div');
  	      if(control.checked) {
  	      	if (control.parentNode !=null)
  	      	{
		        control.parentNode.style.backgroundColor='#FFFFBD';
		    }
   	      	div.style.backgroundColor='#FFFFBD'; 	      	
	      } else {
	      if (control.parentNode !=null)
  	      	{
	        	control.parentNode.style.backgroundColor='#FFFFFF';
	        }
  	      	div.style.backgroundColor='#FFFFFF';	      	
	      }   	

      }
      else
      {
	      if(control.checked) {
	        control.parentNode.style.backgroundColor='#FFFFBD';
	      } else {
	        control.parentNode.style.backgroundColor='#FFFFFF';
	      }
      }      
    }
   
    function comptesCallback()
    {
      return 0;
    }
    
    /**
     * Effet d?roulant d'onglet et maj des checkbox medias en d?pendant
     * Devient une fonction retournant TRUE/FALSE
       @param control: objet checkbox group
       @param subcontrolsdiv: div qui va etre ouvert/ferme avec un effet d?roulant
       @param section: string nom conventionnel du form qui sert pour retrouver les variables globales
        qui correspondent ? ce form/type produit.
       @param checkarrays: tableau de tableau des checkbox fils[checkbox, prix unitaire] ordonn?.
       Attention certains ids peuvent ne pas exister (cas pour des raisons de droits les medias 
       ne sont pas propos?s et pour une raison de taille de page ils ne sont pas affich?s cach?s)
       @return true si ok, false si la section etait lock?e et n'a pas ete touch?e 
     */
    function revealAndCheckFirstMedia(control, subcontrolsdiv, checkarrays, section) {
    	// Lockage sur le nom de la div 'subcontrolsdiv'
    	if (!isLockedReveal(subcontrolsdiv)) {
          	LockReveal(subcontrolsdiv);
      		if(control.checked) {
	    		// recupere le premier checkbox media existant
	    		var firstCheckbox = null;
	    		var priceFirstMedia = 0;
	    		var k=0;
	    		while ( firstCheckbox == null && k < checkarrays.length ) {
	    		    var acheck = $(checkarrays[k][0]);
	    			if ( acheck != null ) { 
	    				firstCheckbox = acheck;
	    				priceFirstMedia = checkarrays[k][1];
	    			}
	    			k++;
	    		}	    		
	    		if ( firstCheckbox != null && isDefined(firstCheckbox) ) {
		    		firstCheckbox.checked = true;
					addOrRemove(firstCheckbox, priceFirstMedia, section);        			
	      		}
      		} else {
        		//deselection de ceux qui existent
        		checkarrays.each(function(subarray) {        		        		 
        		    var aCheck = $(subarray[0]);
          			if ( aCheck != null && aCheck.checked){
            			aCheck.checked=false;
            			addOrRemove(aCheck, subarray[1], section)
          			}
        		});
      		}      		      		      		
      		Effect.toggle(subcontrolsdiv,'slide');
      		return true;      		
      	} else {
      		// si lock? on annule en inversant la valeur de la checkbox qui a provoqu?e l'appel
      		if(control.checked) {
        		control.checked=false;
      		} else {
        		control.checked=true;
        	}
        	return false;
      	}
    }
    
      /**
     * Effet deroulant d'onglet et maj des checkbox medias en d?pendant
     * Devient une fonction retournant TRUE/FALSE
       @param control: objet checkbox group
       @param subcontrolsdiv: div qui va etre ouvert/ferme avec un effet d?roulant
       @param section: string nom conventionnel du form qui sert pour retrouver les variables globales
        qui correspondent ? ce form/type produit.
       @param checkarrays: tableau de tableau des checkbox fils[checkbox, prix unitaire] ordonn?.
       Attention certains ids peuvent ne pas exister (cas pour des raisons de droits les medias 
       ne sont pas propos?s et pour une raison de taille de page ils ne sont pas affich?s cach?s)
       @return true si ok, false si la section etait lock?e et n'a pas ete touch?e 
     */
    function revealAndCheckEnvoiPeriodique(control, subcontrolsdiv, checkarrays, section) {
    	// Lockage sur le nom de la div 'subcontrolsdiv'
    	if (!isLockedReveal(subcontrolsdiv)) {
          	LockReveal(subcontrolsdiv);
      		if(control.checked) {
	    		// recupere le premier checkbox media existant
	    	    var firstCheckbox = null;
	    		var priceFirstMedia = 0;
	    		var k=0;
	    		while ( firstCheckbox == null && k < checkarrays.length ) {
	    		    var acheck = $(checkarrays[k][0]);
	    			if ( acheck != null ) { 
	    				firstCheckbox = acheck;
	    				priceFirstMedia = checkarrays[k][1];	    				
	    			}
	    			k++;
	    		}	    		
	    		if ( firstCheckbox != null && isDefined(firstCheckbox) ) {
		    		firstCheckbox.checked = true;
					addOrRemove(firstCheckbox, priceFirstMedia, 'kbis');
					if ($('nbCourrierkbis').value==0)
					{
					addOrRemoveQuantity(control, 0, 'kbis', 'nbCourrierkbis');   
					}

					setMessageEnvoi();     			
	      		}
      		} 
      		else {
          		//deselection de ceux qui existent
        		addOrRemove(null, 0, 'kbis');
        		addOrRemove($('nbexkbis'), 0, 'kbis');
     			showCheck($('envoiActif')); 
        			
      		}      		      		      		
      		Effect.toggle(subcontrolsdiv,'slide');
      		return true;      		
      	} else {
      		// si lock? on annule en inversant la valeur de la checkbox qui a provoqu?e l'appel
      		if(control.checked) {
        		control.checked=false;
      		} else {
        		control.checked=true;
        	}
        	return false;
      	}
    }
    
    
    /**
      * ajoute une lock pour 1s sur cette section (appellera la methode UnLockReveal)
      */
    function LockReveal(section) {
        revealLocks[section] = true;
        setTimeout("UnLockReveal('"+section+"')", 1000);
    }
   
    function UnLockReveal(section) {
        revealLocks[section] = false;
    }
   
    function isLockedReveal(section) {
        return revealLocks[section];
    }
        
    /**
     * appelle l'effet 'deroulant/slide' si section pas lock?e
     */
    function reveal(section)
    {
       if (!isLockedReveal(section)) {
          LockReveal(section);
          if($(section).style.display == 'none')
	      {
	        Element.addClassName('a_'+section, 'unfolded');
	      } else {
	        window.setTimeout(function(){Element.removeClassName('a_'+section, 'unfolded');}, 1000);
	      }
	      Effect.toggle(section,'slide');
	   }
    }
    
    /**
     * initialise une section onglet produit deroulant comme ouvert
     * - change le style.display de l'element (? rien pour visible)
     * - change le style css (un)folded pour g?rer le petit triangle en rapport avec l'ouverture de l'onglet
     */
    function initRevealed(section)
    {
      $(section).style.display = '';
      Element.addClassName('a_'+section, 'unfolded');
    }
    
    /**
     * initialise une section onglet deroulant comme ferme
     * - change le style.display de l'element (? none)
     * - appelle l'init de prototype.
     */
    function initUnRevealed(section)
    {
    	if ($(section) != null) {
	      $(section).style.display = 'none';
	      Element.addClassName('a_'+section, 'folded');
    	}
    }


//Event.observe(window, 'scroll', repositionCart, false);
// Variables pour "borner" le déplacement (on ne remonte pas au dessus de la position initiale, on ne descend pas en dessous de la zone de navigation principale)
var cartYInit;
var maxYPos;
repositionCart();
function repositionCart() {
	if ($('cart')) {
	  // Pour la borne supérieure, on utilise la position initiale. On la calcule une seule fois au premier passage avec le cart défini, cette valeur est ensuite fixe
	  if (!cartYInit) {
		cartYInit = findPosY($('cart'));
	  }
	  // Pour la borne inférieure on utilise la position du DIV commentaire. Il faut recalculer à chaque fois car la zone a pu bouger sur les ouvertures / fermetures
	  // On n'a donc pas de borne inférieure sur la pop up, ni sur le gage sans dépo
	  if ($('commentaire')) {
	  	maxYPos = findPosY($('commentaire'));
	  }
	  if (cartYInit) {
		  var cartY = findPosY($('cart'));
		  var scrollpos = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
		  var windowsize = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
		  // Calcul du déplacement à appliquer
		  var moveToApply = 0;
		  if (scrollpos > cartY) {
		  	moveToApply = scrollpos-cartY;
		  } else if (cartY > scrollpos+windowsize-140) {
		  	moveToApply = scrollpos+windowsize-cartY-200; //200 au lieu de 160 pour essayer de remonter le plus possible
		  }
		  // On vérifie que ça ne nous fait pas remonter au dessus de la valeur initiale ou redescendre sur la zone de commentaire
		  if (cartY+moveToApply<cartYInit) {
		  	// Pour éviter de remonter au dessus de la position initiale, dans ce cas on fixe la translation pour se retrouver sur la position initiale
		  	moveToApply = cartYInit - cartY;
		  } else if (maxYPos && cartY+moveToApply+140>maxYPos) {
		  	// pour éviter de descendre au dessous de la zone de navigation, on fixe dans ce cas au bas de celle ci
		  	moveToApply = maxYPos - 180 - cartY;
		  }
		  if (moveToApply!=0) {
			new Effect.MoveBy($('cart'), moveToApply, 0) ;
		  }
		}
	}
	// On execute toutes les secondes pour repositionner (la réexécution sur l'évènement de scroll posait trop de problèmes en cas de scrol un peu trop violent)
	setTimeout('repositionCart()',1000)
}

function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


    
    /** v?rifie si un des ?l?ments du tableau est check?
     * @param tab: tableau des id des checkbox 
     * @return true si une des checkbox est check?e.
     */
    function isChecked(tab) {
    	for (var i = 0; i != tab.length; i++) {
    	    var aCheck = $(tab[i]);
    		if ( aCheck != null && aCheck.checked ) return true;
    	}
    	return false;
    }
    
    /** methode utilitaire
      si la checkbox existe, change sa valeure
    */
    function checkifexist(checkbox, value) {
		if ( checkbox != null && isDefined(checkbox)) {
			checkbox.checked = value;
		}
    }
    
    /** a appeler sur chaque modif de media pour empecher le decochage du dernier media
    * (affiche une alerte), si ce n'est pas le dernier, appel addOrRemove avec tous les parametres
	* @param obj object ? checker
	* @param tab tableau des id des checkbox ? v?rifier (peuvent ne pas exister)
	* @param prix prix du mode de transmission
	* @return true si ok, false si alerte
	  */
	function modifyCheckboxMedia(obj, prix, section, tab, messageAlerte) {
		if (!(this.obj || isChecked(tab))) {
			alert(messageAlerte);
			obj.checked = !obj.checked;
			return false
		} else {
			addOrRemove(obj, prix, section);
			return true;
		}
    }
    
    // Variable pour la section produit ? partir de laquelle on acc?de ? la pop up de l'ancien si?ge.
    // Les liens sur la pop up positionnent cette variable ? la valeur appropri?e (endettement, statuts ou comptes)
    var srcOpenPopup = '';
    
////////////////////////////////////////////////////////////////////////////////
///////////// POUR LE PRODUIT ACTE

	// RETOURNE VRAI si pour un media il existe 
	// des checkbox check?es 
	// @param mediaAChecker String du media (visualisation ,m..,t..,c..)
	function getActeStAj(mediaAChecker) {
		var nomElement = 'listeActesForm.derniersStatutsAJour.' + mediaAChecker;
		var elementAChecker = document.forms[0].elements[nomElement];
		if ( isDefined(elementAChecker) ) {
			return elementAChecker;
		}
		return null;
	}

	// RETOURNE VRAI si cette checkbox existe et est coch?e 
	// @param mediaAChecker String du media (visualisation ,m..,t..,c..)
	function checkActeStAj(mediaAChecker) {
		var elementAChecker = getActeStAj(mediaAChecker);
		if ( elementAChecker != null ) {
			return elementAChecker.checked;
		}
		return false;
	}

	function checkActeStAjToutMedia() {
		var tableauAChecker = ['visualisation', 'telechargement', 'email', 'courrier'];
		for (var i = 0; i<tableauAChecker.length ; i++) {
			if (checkActeStAj(tableauAChecker[i])) {
				return true;
			}
		} 
		return false;
	}		
	
	// RETOURNE VRAI si pour un media il existe 
	// des checkbox check?es 
	// @param mediaAChecker String du media (visualisation ,m..,t..,c..)
	function getActeStDe(mediaAChecker) {
		var nomElement = 'listeActesForm.statutsConstitutifs.' + mediaAChecker;
		var elementAChecker = document.forms[0].elements[nomElement];
		if ( isDefined(elementAChecker) ) {
			return elementAChecker;
		}
		return null;
	}
	
	// RETOURNE VRAI si pour un media il existe 
	// des checkbox check?es 
	// @param mediaAChecker String du media (visualisation ,m..,t..,c..)
	function checkActeStDe(mediaAChecker) {
		var elementAChecker = getActeStDe(mediaAChecker);
		if ( elementAChecker != null ) {
			return elementAChecker.checked;
		}
		return false;
	}

	function checkActeStDeToutMedia() {
		var tableauAChecker = ['visualisation', 'telechargement', 'email', 'courrier'];
		for (var i = 0; i<tableauAChecker.length ; i++) {
			if (checkActeStDe(tableauAChecker[i])) {
				return true;
			}
		} 
		return false;
	}	

	function getActeDernierDepot(indexActe, mediaAChecker) {
		var nomElement = 'listeActesForm.dernierDepot.produitFormIndexed[' + indexActe + '].' + mediaAChecker;
		var elementAChecker = document.forms[0].elements[nomElement];
		if ( isDefined(elementAChecker) ) {
			return elementAChecker;
		}
		return null;
	}
	
	// RETOURNE VRAI si pour un media il existe 
	// des checkbox check?es 
	// @param posElement index de l'acte particulier ? tester
	// @param mediaAChecker String du media (visualisation ,m..,t..,c..)
	function checkActeDernierDepot(posElement, mediaAChecker) {
		var elementAChecker = getActeDernierDepot(posElement, mediaAChecker);
		if ( elementAChecker != null ) {
			return elementAChecker.checked;
		}
		return false;
	}

	// RETOURNE VRAI si pour un media il existe 
	// des checkbox check?es 
	// @param posElement index de l'acte particulier ? tester
	// @param mediaAChecker String du media (visualisation ,m..,t..,c..)
	function checkActeDernierDepotToutMediaAtIndex(posElement) {
		var tableauAChecker = ['visualisation', 'telechargement', 'email', 'courrier'];
		for (var i = 0; i<tableauAChecker.length ; i++) {
			if (checkActeDernierDepot(posElement,tableauAChecker[i] )) {
				return true;
			}
		} 
		return false;
	}
		
	function checkActesDernierDepotToutMediaFromPalette() {
		var tableauAChecker = ['visualisation', 'telechargement', 'email', 'courrier'];
		for (var i = 0; i<tableauAChecker.length ; i++) {
			if (checkActesDernierDepotFromPalette(tableauAChecker[i])) {
				return true;
			}
		} 
		return false;
	}	
	
	// fonction utilitaire dernier depot
	// initialise les checkboxs 'gui' en fonction de celles cach?es initialis?es par la jsp en fonction du panier
	// puisque les actes du d?pot sont, pour un m?dia, soit tous coch?s, 
	// soit tous d?coch?s, on peut ?crire :
	// @param checkboxGui objet checkbox
	// @parma elementATester media
	function updateCheckboxMediaDernierDepotFromActesCaches(checkboxGui, media) {
		if ( checkboxGui != null && isDefined(checkboxGui) ) {
			if ( checkActesDernierDepot(media) ) {
				checkboxGui.checked = true;
			} else {
				checkboxGui.checked = false;
			}
		}
	}	

	function getActeDepotAnterieur(indexDepot, indexActe, mediaAChecker) {
		//ex:	listeActesForm.produitFormIndexed[61].produitFormIndexed[2].visualisation				
		var produit = 'listeActesForm.produitFormIndexed['+ indexDepot +'].produitFormIndexed['+ indexActe +'].'+ mediaAChecker;
		var elementAChecker = document.forms[0].elements[produit];
		if ( isDefined(elementAChecker) ) {
			return elementAChecker;
		}
		return null;
	}
	
	// RETOURNE VRAI si pour un media il existe 
	// des checkbox check?es 
	// @param mediaAChecker String du media (visualisation ,m..,t..,c..)
	function checkActeDepotAnterieur(indexDepot, indexActe, mediaAChecker) {
		var elementAChecker = getActeDepotAnterieur(indexDepot, indexActe, mediaAChecker);
		if ( elementAChecker != null ) {
			return elementAChecker.checked;
		}
		return false;
	}
		
	function checkActeDepotAnterieurToutMediaAtIndex(indexDepot, indexActe) {
		var tableauAChecker = ['visualisation', 'telechargement', 'email', 'courrier'];
		for (var i = 0; i<tableauAChecker.length; i++) {
			if ( checkActeDepotAnterieur(indexDepot, indexActe, tableauAChecker[i]) ) {
				return true;
			}
		} 
		return false;
   }
	
	// check des actes anterieurs
	// RETOURNE VRAI si un element check?
	// @param mediaAChecker String du media (visualisation , m,t,c)
	function checkActesAnterieursToutMedia() {
		var tableauAChecker = ['visualisation', 'telechargement', 'email', 'courrier'];
		for (var i = 0; i<tableauAChecker.length; i++) {
			if (checkActesAnterieurs(tableauAChecker[i]) > 0) {
				return true;
			}
		} 
		return false;
   }

	// fonction appel?e sur chaque action "statuts", pour update les statuts et totaux
	// Appeler aussi ? la validation de la popup !
	// recalcul le total a chaque appel en fonction du statut de tous les champs cach?s
	// Sert aussi pour dernier d?pot ? updater les champs cach?s lors des changements de selection des checkboxs 'facades' 
	// ce qui entraine beaucoup d'effet de bords (sur la validation de popup ou les changements sont annul?s)
	// @param isFromPopup true signifie que la methode est appelee lors de la validation de la popup
	
	function statutsCallback() { 
		statutsCallback(false);
	}
	
	function statutsCallback(isFromPopup) { 
		
		// prix de retour
		var totalRetour = 0;
    
    	// CALCUL FRAIS + TARIF PRODUIT pour dernier d?p?t
    	var chkVisuS2a = $('chkVisuS2a');
    	var chkVisuS2b = $('chkVisuS2b');
    	var chkVisuS2c = $('chkVisuS2c');
    	var chkVisuS2d = $('chkVisuS2d');
    	// pour eviter tout les effets de bord :
    	var chkDivDenirDepot = $('accesDernierDepot');    	    	
    	
    	// synchro des champs cach?s avec les checkboxs medias facades :    	
    	if ( !isFromPopup && chkDivDenirDepot != null && chkDivDenirDepot.disabled != true ) {	    	
	    	updateActesDernierDepot(chkVisuS2a, 'visualisation');
	    	updateActesDernierDepot(chkVisuS2c, 'email');
	    	updateActesDernierDepot(chkVisuS2b, 'telechargement');
	    	updateActesDernierDepot(chkVisuS2d, 'courrier');	    	
    	}
    	    	
    	var acteSelectionneVisu = chkVisuS2a != null && chkVisuS2a.checked;
    	var acteSelectionneTele = chkVisuS2b != null && chkVisuS2b.checked;
    	var acteSelectionneMail = chkVisuS2c != null && chkVisuS2c.checked;
    	var acteSelectionneCour = chkVisuS2d != null && chkVisuS2d.checked;
    	if (acteSelectionneVisu || acteSelectionneTele || acteSelectionneMail || acteSelectionneCour) {
    		totalRetour += prixDernierDepot;	//on paye une fois par depot
    		totalRetour += (acteSelectionneTele ? prixDernierDepotTele : 0) + (acteSelectionneMail ? prixDernierDepotMail : 0) + (acteSelectionneCour ? prixDernierDepotCour : 0);
    	}    	    	   		
    	
    	/*
    		 IMPORTANT : METHODE UN PEU LOURDE APPELEE SUR CHAQUE ACTION STATUTS ET ACTES.
    		 RETOURNE LE PRIX CORRECT EN FONCTION DES DIFFERENTS CAS.
    		 Complexe au niveau des actes ant?rieurs : on doit regarder chaque d?pot 
    		 s?par?ment pour calculer les prix et ajouter les ?ventuels frais d'envoi.
    	*/
    	

    	totalRetour += computeTotalActesAnterieurs();    	
    	nbdocsstatuts = computeNbDocsActes();    	
    	return totalRetour; 
	}

    // since EIRL_LOT2
    function dapCallback()
    {
    	return 0;
    } 
	
	// @return media ? selectionne dans la popup
	// parcours tous les champs cach?s pour trouver le premier media selectionne (dans l'ordre de preference v,m,t,c).
	// sur tous les produits dans l'ordre: staj, stde, dernier dept, depot anterieurs
	// si en trouve aucun, renverra ''
	function getMediaToSelectInPopup() {
		var tableauAChecker = ['visualisation', 'telechargement', 'email', 'courrier'];
		var typeCheck = '';	// un seul type possible si cas popup (en fait 2 a cause des non num?ris?s qui deviennent courrier)		
		for (var i = 0; i<tableauAChecker.length; i++) {
			typeCheck = tableauAChecker[i] ;
			if ( checkActeStAj(typeCheck) 
			    || checkActeStDe(typeCheck)
			    || checkActesAnterieurs(typeCheck) 
			    || checkActesDernierDepot(typeCheck) ) {
				return typeCheck;				
			}
		} 
		return '';
	}	    
	
	// set ? false toutes les checkboxs actes li?es au formulaire 
	function resetAllHiddenActes() {
		var checkboxIdArray = ['chkVisuS1a', 'chkVisuS1b','chkVisuS1c','chkVisuS1d','chkVisuS11a', 'chkVisuS11b','chkVisuS11c','chkVisuS11d','chkVisuS2a', 'chkVisuS2b','chkVisuS2c','chkVisuS2d'];
		for (var i=0; i<checkboxIdArray.length; i++) {
			var checkboxMedia = document.getElementById(checkboxIdArray[i]);
			if ( checkboxMedia != null && isDefined(checkboxMedia) ) {
				checkboxMedia.checked = false;
			}
		}				
		// efface tout sur dernier depot (actes cach?s)
		for (var posCourant = 0;posCourant < nbActesDansDernierDepot; posCourant++ ){
			var elementV = getActeDernierDepot(posCourant,'visualisation');
			var elementT = getActeDernierDepot(posCourant,'telechargement');
			var elementM = getActeDernierDepot(posCourant,'email');
			var elementC = getActeDernierDepot(posCourant,'courrier');
			checkifexist(elementV,false); 
			checkifexist(elementM,false); 
			checkifexist(elementT,false); 
			checkifexist(elementC,false); 
		} 
		//  efface tout sur actes anterieurs  
		for ( var posElement = 0;posElement < nbDepotsAnterieurs ; posElement++) {
			for ( var ssPosElement = 0;ssPosElement < nbActesDesDepotsArray[posElement] ; ssPosElement++) {
				var elementV = getActeDepotAnterieur(posElement,ssPosElement, 'visualisation');
				var elementT = getActeDepotAnterieur(posElement,ssPosElement, 'telechargement');
				var elementM = getActeDepotAnterieur(posElement,ssPosElement, 'email');
				var elementC = getActeDepotAnterieur(posElement,ssPosElement, 'courrier');
				checkifexist(elementV,false); 
				checkifexist(elementM,false); 
				checkifexist(elementT,false); 
				checkifexist(elementC,false); 
			}			
		}		
	}
	
	// @return le nombre de documents concernant les actes ? afficher dans la selection en cours
	function computeNbDocsActes() {
		var result = 0;
		if ( checkActeStAjToutMedia() ) {
			result++;
		}
		if ( checkActeStDeToutMedia() ) {
			result++;
		}
			
		// efface tout sur dernier depot (actes cach?s)
		for (var posCourant = 0;posCourant < nbActesDansDernierDepot; posCourant++ ){
			if ( checkActeDernierDepotToutMediaAtIndex(posCourant) ) {
				result++;
			}
		} 
		//  efface tout sur actes anterieurs  
		for ( var indexDepot = 0;indexDepot < nbDepotsAnterieurs ; indexDepot++) {
			for ( var indexActe = 0;indexActe < nbActesDesDepotsArray[indexDepot] ; indexActe++) {
				if ( checkActeDepotAnterieurToutMediaAtIndex(indexDepot, indexActe) ) {
					result++;
				}
			}
		}		
		return result;
	}
