



	function libererForfait(a_ligne, a_format)
	{				 
//alert("libererForfait:"+a_format+"#"+tabfrmtpapi[a_format]);
		tab = eval ('frmt_forf' + tabfrmtpapi[a_format]);

		var _libere = 0;
		for (j=0; j < tab.length; j++)
		{
			// on recupere l'id de forfait utilisable
			// on regarde la quantite associee
			var _idforf = tab[j];
//alert("liberation#"+forf_utilise[a_ligne][_idforf]+"###utilisable#"+forf_utilisable[_idforf]);
			
			if (isNaN(forf_utilise[a_ligne][_idforf]))        forf_utilise[a_ligne][_idforf] = 0;
			forf_utilisable[_idforf] = parseInt(forf_utilisable[_idforf]) + parseInt(forf_utilise[a_ligne][_idforf]);
			
			//
			if (isNaN(seuil_utilise[a_ligne][_idforf]))        seuil_utilise[a_ligne][_idforf] = 0;
			forf_activation[_idforf] = parseInt(forf_activation[_idforf]) + parseInt(seuil_utilise[a_ligne][_idforf]);
				
			
			_libere += parseInt(forf_utilise[a_ligne][_idforf]) + parseInt(seuil_utilise[a_ligne][_idforf]);
			//
			forf_utilise[a_ligne][_idforf] = 0;
			seuil_utilise[a_ligne][_idforf] = 0;
		}

		// Exploitation page livraison: offrir ami
		return (_libere);
	}	 
	

	
	function libererTousForfait()
	{
		for (i=0; i < idebut; i++)
		{
			_format = tab_hidden_line[i][0];
			libererForfait(i, _format);
		}

		for (i=idebut; i<ifin; i++)
		{
//			Format = document.getElementById('formatLigne'+i);  // Format de la ligne
			_format = tab_visible_line[i][0];
			libererForfait(i, _format);
		}
		
		for (i=ifin; i < nbTotImg; i++)
		{
			_format = tab_hidden_line[i][0];
			libererForfait(i, _format);
		}

	}

	
	

	function utiliser_forfait_visible(a_ligne, a_total)
	{
                Format = document.getElementById('formatLigne'+a_ligne);  // Format de la ligne
                Qte = document.getElementById('qteLigne'+a_ligne);        // Quantit? de la ligne
                QteToPaye = document.getElementById('qtite_topaye'+a_ligne);        // Quantit? de la ligne
		//
		_tab = utiliser_forfait(a_ligne, Format.value, Qte.value, a_total);
                QteToPaye.value = _tab[0];
//		alert(a_ligne+"#"+_tab[0]);
		return (_tab);
	}
	
	
	function utiliser_forfait_hidden(a_ideb, a_ifin, a_total)
	{	
		var _tab = false;			
		for (i=a_ideb; i < a_ifin; i++)
		{
			_format = tab_hidden_line[i][0];
			_qtite = tab_hidden_line[i][1];
			//
			_tab = utiliser_forfait(i, _format, _qtite, a_total);
			tab_hidden_line[i][2] = _tab;
//			alert(i+"#apayer:"+_tab[0]);
		}
		return (_tab);
	}
	
	
	

        function utiliser_forfait(a_ligne, a_format, a_qtite, a_total)
        {


                // on r?cup?re le tableau des forfaits utilisable pour le format en question
                tab = eval ('frmt_forf'+tabfrmtpapi[a_format]);


                var nb_paye = -1;
                var traite = 0;
                var nb_apayer = a_qtite;	      
                var decremente = 0;
                var _idforf = 0;
//		alert(nb_paye+"#"+Qte.value)
                for (j=0; j < tab.length && traite < a_qtite; j++)
                {
                        if (j==0)                 nb_paye = 0;
                        // pour chaque forfait utilisable,
                        // on paye le plus de photos:

                        // on recupere l'id de forfait utilisable
                        // on regarde la quantite associee
                        var _idforf = tab[j];

                        
                        // On utilise le seuil
                        _decrement_activation = maj_utisation_seuil(a_ligne, _idforf, nb_apayer);
                        decremente+=_decrement_activation;

//                	alert("decremente#"+decremente);

                        // S'il n'y a plus rien pour l'activation, on utilise le forfait
                        // de mani?re effective
                        if (forf_activation[_idforf]==0)
                        {
				_utilisable_sur_forfait = nb_apayer-_decrement_activation;
                        	// Si il reste des photos ? payer,on continue
	                        _paye = maj_utisation_forfait(a_ligne, _idforf, _utilisable_sur_forfait);

				// on actualise le nombre de photos d?ja payees par le forfait
	                        traite += (_paye + _decrement_activation);
	                        nb_apayer -= _paye;
//                        	alert(_decrement_activation+"#"+nb_apayer);
                        }
                        

//                        prixu = eval ('forf_prixu'+_idforf);
                }


                // tant qu'il ya des photos ? payer,
                // on parcours les forfaits utilisables
                var prixu = getUnitPrice(tabfrmtprice[a_format], nb_apayer);


		if (a_qtite == 0)                 prixu = 0;
//                alert ("initialement#"+a_qtite+"#"+nb_apayer);

		ajout_quantite_format(a_format, nb_apayer);

                tab_use = new Array();
                tab_use[0] = nb_apayer;
                tab_use[1] = prixu;
                tab_use[2] = decremente;
                tab_use[3] = _idforf;

                return (tab_use);
        }



        //
        function maj_utisation_forfait(a_ligne, a_idforf, a_nbapayer)
	{
		
                // on r?attribue les unites forfaits utilises
                if (isNaN(forf_utilise[a_ligne][a_idforf]))        forf_utilise[a_ligne][a_idforf] = 0;
                forf_utilisable[a_idforf] = parseInt(forf_utilisable[a_idforf]) + parseInt(forf_utilise[a_ligne][a_idforf]);
                forf_utilise[a_ligne][a_idforf] = 0;

                var _utilisable = forf_utilisable[a_idforf];
		if (_utilisable==0) 		return (0);

//                alert("utilisable["+a_idforf+"]#"+forf_utilisable[a_idforf])
                // le forfait paye le minimum entre
                //      - le nombre de photos dispo sur forfait
                //      - et le nbre de photos a payer
                _leforfait_paye = Math.min(_utilisable, a_nbapayer);

                // on actualise le nombre de fotos utilisable sur le forfait
                forf_utilisable[a_idforf] -= _leforfait_paye;


//		alert("apayer#"+a_nbapayer+"#utilisable["+a_idforf+"]#"+forf_utilisable[a_idforf]);
                
                
                // on MEMORISE le nombre de FOTOS PAYEES pour ce forfait et cet ami
                //
                // si aucune photo n'a ?t? utilis? avant cela sur ce forfait: on initialise ? 0
                if (isNaN(forf_utilise[a_ligne][a_idforf]))        forf_utilise[a_ligne][a_idforf] = 0;
                //on actualise le nombre de photos utilises sur ce forfait et cet ami
                forf_utilise[a_ligne][a_idforf] += _leforfait_paye;


		return (_leforfait_paye);
	}

        



	function maj_utisation_seuil(a_ligne, a_idforf, a_nbapayer)
	{
                // on r?attribue les unites forfaits utilises
                if (isNaN(seuil_utilise[a_ligne][a_idforf]))        seuil_utilise[a_ligne][a_idforf] = 0;
//		alert("avant reattrib["+a_idforf+"]="+forf_activation[a_idforf]);
                forf_activation[a_idforf] = parseInt(forf_activation[a_idforf]) + parseInt(seuil_utilise[a_ligne][a_idforf]);
                seuil_utilise[a_ligne][a_idforf] = 0;
//		alert("apres reattrib="+forf_activation[a_idforf]);


                var _aactiver = forf_activation[a_idforf];
		if (_aactiver==0) 		return (0);

                
                // le forfait paye le minimum entre
                //      - le nombre de photos dispo sur forfait
                //      - et le nbre de photos a payer
                _decrement_activation = Math.min( _aactiver, a_nbapayer);
//		alert("decremente de="+_decrement_activation);

                // on actualise le nombre de fotos utilisable sur le forfait
                forf_activation[a_idforf] -= _decrement_activation;
//               alert("apres decrement="+forf_activation[a_idforf]);


                
                
                // on MEMORISE le nombre de FOTOS PAYEES pour ce forfait et cet ami
                //
                // si aucune photo n'a ?t? utilis? avant cela sur ce forfait: on initialise ? 0
                if (isNaN(seuil_utilise[a_ligne][a_idforf]))        seuil_utilise[a_ligne][a_idforf] = 0;
                //on actualise le nombre de photos utilises sur ce forfait et cet ami
                seuil_utilise[a_ligne][a_idforf] += _decrement_activation;

	
		return (_decrement_activation);
	}

        
	

	
	function calcul_total_forfait(a_idforf)
	{
 		 _total_prix = document.getElementById("total_prix");		
 		 _total_point = document.getElementById("total_point");		

 		 _ligne_prix = document.getElementById("prix_"+a_idforf);		
 		 _ligne_point = document.getElementById("point_"+a_idforf);		
 		 _chk = document.getElementById("for"+a_idforf);		
		 
		 if (_chk.checked)
		 {
	  		_total_prix.innerHTML = parseFloat(_total_prix.innerHTML) + parseFloat(_ligne_prix.innerHTML);				 
	  		_total_point.innerHTML = parseFloat(_total_point.innerHTML) + parseFloat(_ligne_point.innerHTML);				 
		 }
		 else
		 {
	  		_total_prix.innerHTML = parseFloat(_total_prix.innerHTML) - parseFloat(_ligne_prix.innerHTML);				 
	  		_total_point.innerHTML = parseFloat(_total_point.innerHTML) - parseFloat(_ligne_point.innerHTML);				 
		 }
	}



	  
	
	
	
	function verif_forfaitselect(forme, prefix)
	{	 
		var ret = false;
		
		formeval = eval ("document." + forme);
		for (var j=0; j < formeval.length && !ret; j++)
		{
			// L'objet existe: extraire sa valeur pour voir si elle fait partie de la liste
			if (formeval[j].name.indexOf (prefix) >= 0 && formeval[j].checked)    ret = true;
		}
		

		if (!ret) 						 alert('Veuillez sélectionner les forfaits à acheter ...');
		return (ret);		
	}
		
				
		
