
function sponge(tableau,colonnes,nTit)	
{	

var nbrTit=nTit ? nTit : 0; // lignes Titre						
var ligfin=tableau.rows.length; // nbr lignes
var TabCol=colonnes.split(";"); // format : n°,type:taille;n°;...n°
var buffer=Array(ligfin-nbrTit); // buffer[nbr lignes]

for ( var l=nbrTit; l<ligfin; l++ )
	{	var colfin=tableau.rows[l].cells.length; // nbr colonnes

		buffer[l-nbrTit]=new Array(colfin+1);

		buffer[l-nbrTit][0]="";  // buffer[ligne][0]=critères de tri

		for ( var t=0; t<TabCol.length; t++ )
		{ 		var Prm=TabCol[t].split(",");  // Prm[0]=n° colonne

            if (!Prm[1]) Prm[1]="c";       					// Prm[1]=type
            var Zone=tableau.rows[l].cells[Prm[0]].innerHTML;
            Prm=Prm[1].split(":");         					// Prm[0]=type, Prm[1]=taille  
            switch (Prm[0].toLowerCase())  
				{	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               case "e":  //~~~~ Entiers ~~~~
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  while ( Zone.length<Number(Prm[1]) ) 	// adapter la
                  { Zone="0"+Zone; }             			// longueur
                  break;
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               case "jjmmaaaa":  //~~~~ format date ~~~~
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  Zone=	Zone.substr(4,4) +
								Zone.substr(2,2) +
                        Zone.substr(0,2);  					// mise en forme aaaammjj
                  break;
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               case "jj/mm/aaaa":  //~~~~ format date ~~~~
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  Zone=	Zone.substr(6,4) +
                        Zone.substr(3,2) +
                        Zone.substr(0,2);  					// mise en forme aaaammjj
                  break;
               /*===========================================\
               ! je n'ai mis ici que quelques possibilités. !
               ! on peut ajouter :                          !
               !                                            !
               !  case "type de zone":                      !
               !       ... traitements adaptés ...          !
               !       break;                               !
               !                                            !
               \===========================================*/
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               default:   //~~~~ par défaut ~~~~
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               case "c":  //~~~~ caractères ~~~~
               //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  break;  
		}
      buffer[l-nbrTit][0]+=Zone;
	}
	for ( var c=0;c<colfin;c++ )									// mémoriser contenu [lignes][colonnes]
	{ 	buffer[l-nbrTit][c+1]=tableau.rows[l].cells[c].innerHTML; 	}  
}
   buffer.sort();	// trier

	sens = "A";

   if (sens.charAt(0).toLowerCase()!="a")						// inversion si non= A[scendant]
	{ buffer.reverse(); }
   for ( l=nbrTit;l<ligfin;l++ )									// "recharger" le tableau htm
//==============================================
   {	for ( c=1;c<=colfin;c++ )
	   {	tableau.rows[l].cells[c-1].innerHTML=buffer[l-nbrTit][c];	}  
	}  
}

