<!--
 //###################################################################################
 function trier(tableau,colonnes,sens,nTit) //######## trier un tableau htm ########
 //###################################################################################
 //
 // <script type="text/javascript" src="trier.js"></script>
 //
 // appel : trier(tableau à trier,"colonnes","sens",Nbr Lignes de Titres à ne pas trier 0 par défaut);
 // colonnes : n° [,type[:taille]][;n°[,type[:taille]]...]
 // Type actuellement possibles ( C par défaut )
 // c Caractères
 // jj/mm/aaaa Date jj/mm/aaaa
 // jjmmaaaa Date jjmmaaaa
 // e:taille Entier:nbr caractères maxi
 //
 { 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
 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]; }
 }
 }
 //############################################################################## 
-->
