// Ce module permet de rendre des tables scrollables (l'entete ne bouge pas)
// soit on met une class "XTableScroll" à la table et c'est tout.
// soit on appelle XTS_Set(maTable) ou XTS_Set(maTable, taille)
// ex :     <table class="XTableScroll" XTS_Taille="100px">....
//      ou  <script>XTS_Set(maTable, "100px");</script>
// NB : les TD et/ou TH doivent avoir un 'width' de precise. (ou mieux.. utilisez un colgroup !!
// XTS_Taille : hauteur de la table. si XTS_Taille="auto" la div s'adaptera à la taille du tableau
// Exemple :
//		<table class="XTableScroll" XTS_Taille="600px" cols="3">
//		<colgroup>
//			<col XTS_Type="chaine"  width="100px">
//			<col XTS_Type="date"    width="200px">
//			<col XTS_Type="monnaie" width="300px">
//		</colgroup>
//		<thead><tr><th>col1</th><th>col2</th><th>col3</th></tr></thead>
//    <tfoot XTS_NbLMin="10"><tr><td>pied1</td><td>pied2</td><td>pied3</td></tr></<tfoot>
//		<tbody>
//			<tr><td>data1</td><td>data2</td><td>data3</td></tr>
//			<tr><td>data1</td><td>data2</td><td>data3</td></tr>
//			<tr><td>data1</td><td>data2</td><td>data3</td></tr>
//			<tr><td>data1</td><td>data2</td><td>data3</td></tr>
//		</tbody>
//		</table>
// le thead est optionnel (mais c'est mieux d'en mettre), si il n'y en a pas, la premiere ligne du tableau est consideree comme le header
// le tfoot est optionnel, la propriete XTS_NbLMin indique le nombre de ligne minimum que le tableau doit avoir pour avoir un tfoot en dehors de la partie scrollable)
// NB :
//  par defaut, quand on clic sur le header, un menu aparait, si on ne veut pas de cette fonctionnalite ou si on veut mettre sa propre fonctionnalite
//  a la place il suffit de faire un event.cancelBubble=true sur le onclick.
//  Les colspan sont interdits dans le <TFOOT>

// Vous avez la possibilite de typer les colonnes afin de rendre le tri plus rapide et plus sur
// sachant que ci celle ci ne sont pas trier, le type sera deduis de la valeur de la premiere ligne
// Il suffit pour cela de 
var XTS_TypeChaine  = 0; // c'est le type par defaut, on peut ne pas le mettre
var XTS_TypeDate    = 1;
var XTS_TypeMonnaie = 2;
var XTS_TypeNombre  = 3;
var XTS_TypeImage   = 4;


var XTS_COLOR_SELECT = "#ffcc66";
var XTS_COL_TRI = 0;
var tableauWork = null;

if (!window.XTL_Included)
{
	window.XTL_Included = 1;
	try
	{
		XLOG_included();
		Xinclude("/commun/js/menuGenerique.js");
		Xinclude("/commun/js/XDOM_Tools.js");
		Xinclude("/commun/js/XTableListe.js");
		Xinclude("/commun/js/xmove.js");
		Xinclude("/commun/js/xcss.js");
		X_addEvent(window, "load", XTS_Init);
		//alert("entrée");
	}
	catch (e)
	{
	}
}

function XTS_Set(maTable, taille)
{
	var monParent;
	var monsuivant;
	var monEntete;
	var monFooter;
	var monColgroup;
	var monCaption;
	var nbLMin = 0;          // nb de ligne min pour externaliser le footer
	var cadreTable;
	var cadreTd;
	var elem;

	var enteteTable;
	var div;
	var footerTable = null;
	var i;
  
  
	if (!maTable || maTable.tagName != "TABLE")
		return;

	if (maTable.getAttribute("XTS_Taille") != null)
		taille = maTable.getAttribute("XTS_Taille");

	if (!taille)
		taille = "150px";
  
	monParent   = maTable.parentNode;
  	monCaption  = maTable.getElementsByTagName("CAPTION")[0];
	monSuivant  = maTable.nextSibling;
	
	// l'entete est soit un thead soit la premiere ligne
	if (maTable.getElementsByTagName("THEAD").length > 0)
		monEntete = maTable.getElementsByTagName("THEAD").item(0);
	else
		monEntete = maTable.rows[0];

	if (maTable.getElementsByTagName("TFOOT").length > 0)
  	{
    	monFooter = maTable.getElementsByTagName("TFOOT").item(0);
	  	if (monFooter.getAttribute("XTS_NbLMin") != null)
		  nbLMin = monFooter.getAttribute("XTS_NbLMin");
	}

  // creation du tableau a une cellule qui encadre le tout
	cadreTable       = document.createElement("TABLE");
  	cadreTd          = document.createElement("TD");
	var cadreTbody   = document.createElement("TBODY");
	var cadreTr      = document.createElement("TR");	
	cadreTr.appendChild(cadreTd);
	cadreTbody.appendChild(cadreTr);
	cadreTable.appendChild(cadreTbody);

  // creation de la div scrollable
	var div = document.createElement("DIV");
	div.style.overflow = "auto";
	div.style.position = "static";
	div.style.height   = taille;
	div.style.margin   = "0px";
	div.style.padding  = "0px";
  	div.appendChild(maTable);
  // creation de l'entete
	enteteTable = document.createElement("TABLE");
	if (monCaption != null)
		enteteTable.appendChild(monCaption);
	
	if (monEntete.tagName=="THEAD")
		enteteTable.appendChild(monEntete);
	else
	{
		var enteteTbody = document.createElement("TBODY");
	    enteteTbody.appendChild(monEntete);
		enteteTable.appendChild(enteteTbody);
	}
	enteteTable.style.bgcolor		= maTable.style.bgcolor;
	//alert("maTable.style.border = "+maTable.style.border);
	enteteTable.style.border		= maTable.style.border;
	enteteTable.border				= maTable.border;
	enteteTable.style.cursor		= "pointer";
	//enteteTable.style.tableLlayout	= "fixed";
	//maTable.style.tableLlayout		= "fixed";

  // creation eventuelle du footer
  var nbRow = XDOM_GetNbRows(maTable);
  // dans ce cas, ce sera 1
  if (maTable.getElementsByTagName("TFOOT").length > 0)
		nbRow -= maTable.getElementsByTagName("TFOOT")[0].getElementsByTagName("TR").length;
	
  if (monFooter != null && nbRow > nbLMin)
  {
    var footerTbody = document.createElement("TBODY");
    footerTable = document.createElement("TABLE");
    //for (i = 0 ; i < monFooter.getElementsByTagName("TR").length ; i++)
    //  footerTbody.appendChild(monFooter.getElementsByTagName("TR")[i]);
    while (monFooter.getElementsByTagName("TR").length > 0)
      footerTbody.appendChild(monFooter.getElementsByTagName("TR")[0]);
    footerTable.appendChild(footerTbody);
    footerTable.style.bgcolor  = maTable.style.bgcolor;
    footerTable.style.border   = maTable.style.border;
    monFooter.parentNode.removeChild(monFooter);
  }

  // ajout des colgroups sur les tables entete et footer
  	monColgroup = maTable.getElementsByTagName("COLGROUP");
   	for (i = 0 ; i < monColgroup.length ; i++)
   	{	
   		enteteTable.appendChild(monColgroup[i].cloneNode(true));
    	if (footerTable != null)
      		footerTable.appendChild(monColgroup[i].cloneNode(true));
  	}

  // on place le tout dans la TD
  cadreTd.appendChild(enteteTable);
  cadreTd.appendChild(div);
  if (footerTable != null)
    cadreTd.appendChild(footerTable);
  monParent.insertBefore(cadreTable, monSuivant); 
  
  XTS_SetInfoEntete(maTable);					  	            // mise a jour des infos de l'entete
  X_addEvent(enteteTable, "click", _XTS_MenuContextuel);
  
}

function XTS_SetBack(monTableau)
{
	var monEntete   = XTS_GetHeader(monTableau);
	var monFooter   = XTS_GetFooter(monTableau);
	var monCaption  = monEntete.getElementsByTagName("CAPTION");
	
	if (monCaption != null && monCaption.length > 0)
		monCaption = monCaption[0];
	else
		monCaption = null;
	
	if (monEntete.getElementsByTagName("THEAD").length > 0)
		monTableau.insertBefore(monEntete.getElementsByTagName("THEAD").item(0), monTableau.getElementsByTagName("TBODY").item(0));
	else
		monTableau.rows[0].parentNode.insertBefore(monEntete.rows[0], monTableau.rows[0]);
	
	if (monFooter)
		monTableau.appendChild(monFooter.getElementsByTagName("TFOOT")[0]);

	if (monCaption)
		monTableau.appendChild(monCaption[0]);
	//            monTableau<   div    <    td    <     tr   <   tbody  <  table 
	var maTable = monTableau.parentNode.parentNode.parentNode.parentNode.parentNode;
	maTable.parentNode.insertBefore(monTableau, maTable);
	maTable.parentNode.removeChild(maTable);
}


function XTS_SetInfoEntete(monTableau)
{
	var monEntete = XTS_GetHeader(monTableau);
	monEntete.title = "En-tête du tableau";
}

function XTS_Init()
{
	var all = document.getElementsByTagName("TABLE");
	
	for(var i = all.length-1 ; i >= 0 ; i--)
	{
		if(all[i].className.search(/XTableScroll/) != -1)
			if (all[i].getElementsByTagName("TR").length >= 2)
				XTS_Set(all[i]);
	}
	
}

function XTS_AddColViergeBefore(monTableau, noCol, noColOri)
{
	XTS_SetBack(monTableau);
	XDOM_AddColViergeBefore(monTableau, noCol, noColOri);
	XTS_Set(monTableau);
}

function XTS_AddColViergeAfter(monTableau, noCol, noColOri)
{
	XTS_SetBack(monTableau);
	XDOM_AddColViergeAfter(monTableau, noCol, noColOri);
	XTS_Set(monTableau);
}

function XTS_AddColBefore(monTableau, noCol, noColOri)
{
	XTS_SetBack(monTableau);
	XDOM_AddColBefore(monTableau);
	XTS_Set(monTableau);
}

function XTBSCROLL_AddColAfter(monTableau, noCol, noColOri)
{
	XTS_AddColAfter(monTableau, noCol, noColOri);
}

function XTS_AddColAfter(monTableau, noCol, noColOri)
{
	XTS_SetBack(monTableau);
	XDOM_AddColAfter(monTableau);
	XTS_Set(monTableau);
}

function XTBSCROLL_GetHeader(monTableau)
{
	return XTS_GetHeader(monTableau)
}

function XTS_GetHeader(monTableau)
{
	if (!monTableau || (monTableau.className && monTableau.className.search(/XTableScroll/) == -1))
		return null;
	//     monTableau<   div    <   table (entete)
	return monTableau.parentNode.previousSibling;
}

function XTS_GetFooter(monTableau)
{
	if (!monTableau || (monTableau.className && monTableau.className.search(/XTableScroll/) == -1))
		return null;

	if (monTableau.getElementsByTagName("TFOOT").length > 0)
		return monTableau.getElementsByTagName("TFOOT")[0];
	else
		//     monTableau<   div    <   table (footer ou null)
		return monTableau.parentNode.nextSibling;
}

function _XTS_MenuContextuel(evt)
{
	var obj = X_GetTarget(evt);
	var traitementFin = "";
	var laDiv = document.getElementById("XTS_menuContextuel");
	var libCol = XDOM_GetInnerText(obj);
	var tab = XDOM_GetColRow(evt);

	if (obj == null || obj.tagName == null || (obj.tagName != "TD" && obj.tagName != "TH"))
		return;

    //            td <   tr     <   thead  <    table <    div    < table
	tableauWork = obj.parentNode.parentNode.parentNode.nextSibling.firstChild;
	if (laDiv == null)
	{
		laDiv = document.createElement("DIV");
		laDiv.id="XTS_menuContextuel";
		laDiv.className="menuBureau";
		laDiv.style.position="absolute";
		laDiv.style.visibility="visible";
		laDiv.style.bgColor = "yellow";
		document.body.appendChild(laDiv);
	}
	var ligneSelect = document.getElementsByName("XTS_match")
	var nbl = XTS_GetNbSelectRows(tableauWork);
	var nbc = nbl != 0 ? XDOM_GetNbCols(tableauWork) : 0;
	codeHTML = "<h1>Infos '"+libCol+"'</h1>";
	codeHTML += "<ul>";
	codeHTML += 	"<li>"+XDOM_GetNbRows(tableauWork)+" x "+XDOM_GetNbCols(tableauWork)+" ("+nbl+" x "+nbc+")</li>";
	codeHTML +=     "<li><a href = 'javascript:XTS_Stat("+tab[0]+")'>Stats</a></li>";
	codeHTML += "</ul>";
	codeHTML += "<h1>Actions</h1>";
	codeHTML += "<ul>";
	codeHTML += 	"<li><a href = 'javascript:XTS_Print()'>Imprimer le tableau</a></li>";
	codeHTML += 	"<li><a href = 'javascript:XTS_Copy()'>Copier le tableau</a></li>";
	codeHTML +=     "<li><hr></li>";
	codeHTML += 	"<li><a href = 'javascript:XTS_Selection(true)'>Tout selectionner</a></li>";
	codeHTML += 	"<li><a href = 'javascript:XTS_Selection(false)'>Annuler la selection</a></li>";
	codeHTML += 	"<li><a href = 'javascript:XTS_Sup(true)'>Supprimer la sélection</a></li>";
	codeHTML += 	"<li><a href = 'javascript:XTS_InvSel()'>Inverser la selection</a></li>";
	codeHTML +=     "<li><hr></li>";
	codeHTML += 	"<li><a href = 'javascript:XTS_Trier("+tab[0]+", 0)'>Tri croissant</a></li>";
	codeHTML += 	"<li><a href = 'javascript:XTS_Trier("+tab[0]+", 1)'>Tri décroissant</a></li>";
	codeHTML += "</ul>";
	codeHTML += "<h1>Recherche '"+libCol+"'</h1>";
	codeHTML += "<ul>";
	codeHTML += 	"<li><form action='javascript:MG_Close();XTS_LancerRecherche("+tab[0]+")'><input type='text' name='XCTRL_recherche' onclick='event.cancelBubble=true' /><input type='submit' value='Ok' /></form></li>";
	codeHTML += "</ul>";
	laDiv.innerHTML = codeHTML;
	//var tmp = new XMove(laDiv, laDiv.getElementsByTagName("H1")[0]);
	MG_Display('XTS_menuContextuel',evt, 10, 30);
    return false;
}

function _XTS_GetFctTri(col)
{
	var monType = null;
	if (tableauWork.getElementsByTagName("COLGROUP").length != 0)
	{
		var monColGroup = tableauWork.getElementsByTagName("COLGROUP")[0];
		monType = monColGroup.childNodes[col-1].XTS_Type;
	}
		
	if (monType != null)
	{
		if (monType == "date")
			return _XTS_TriDate;
		else if (monType == "monnaie")
			return _XTS_TriMonnaie;
		else if (monType == "nombre")
			return _XTS_TriNombre;
		else if (monType == "image")
			return _XTS_TriImage;
		else
			return _XTS_TriChaine;
	}
	
	var chaine = XDOM_GetInnerText(tableauWork.rows[0].cells[col-1]);
	
	if (chaine.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/))
	  return _XTS_TriDate;
    if (chaine.match(/$[£$?]/))
    	return _XTS_TriMonnaie;
    if (chaine.match(/^[\d\.\ \,\-]+$/))
    	return _XTS_TriNombre;
    if (tableauWork.rows[0].cells[col-1].firstChild.tagName == "IMG")
    	return _XTS_TriImage;
    return _XTS_TriChaine;
}

function XTS_Trier(col, sens)
{
	var fctTri;	
	var tab = new Array();
		
	fctTri		= _XTS_GetFctTri(col);
	XTS_COL_TRI = col-1;

	for (var i = 0 ; i < tableauWork.rows.length ; i++)
		tab[i] = tableauWork.rows[i];
	tab.sort(fctTri);
	if (sens == 1)
		tab.reverse();
		
	var monTBody = tableauWork.getElementsByTagName("TBODY")[0];
	for (var i = 0 ; i < tableauWork.rows.length ; i++)
		monTBody.appendChild(tab[i]);

	if (tableauWork.className.search(/XTableListe/) != -1 )
		XTBLISTE_Set(tableauWork);
}

function _XTS_TriChaine(a, b)
{
    var aa = XDOM_GetInnerText(a.cells[XTS_COL_TRI]);
    var bb = XDOM_GetInnerText(b.cells[XTS_COL_TRI]);
    
    if (aa==bb) return 0;
    if (aa<bb) return -1;
    return 1;    
}

function _XTS_TriDate(a, b)
{
    var aa  = XDOM_GetInnerText(a.cells[XTS_COL_TRI]);
    var bb  = XDOM_GetInnerText(b.cells[XTS_COL_TRI]);
    var dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
    var dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
    
    return (dt1-dt2);
}

function _XTS_TriMonnaie(a, b)
{
    var aa = XDOM_GetInnerText(a.cells[XTS_COL_TRI]);
    var bb = XDOM_GetInnerText(b.cells[XTS_COL_TRI]);

	aa= aa.replace(/$[£$? ,.]/, "");
	bb= bb.replace(/$[£$? ,.]/, "");

	aa = parseFloat(aa);
	bb = parseFloat(bb);

    if (isNaN(aa))
    	aa = 0;
    if (isNaN(bb))
    	bb = 0;
    return aa-bb;
}

function _XTS_TriNombre(a, b)
{
    var aa = XDOM_GetInnerText(a.cells[XTS_COL_TRI]);
    var bb = XDOM_GetInnerText(b.cells[XTS_COL_TRI]);

   	aa = aa.replace(/\s/,"");
    bb = bb.replace(/\s/,"");

	aa = parseFloat(aa);
	bb = parseFloat(bb);
    if (isNaN(aa))
    	aa = 0;
    if (isNaN(bb))
    	bb = 0;
    return aa-bb;
}

function _XTS_TriImage(a, b)
{
    var aa = a.cells[XTS_COL_TRI].getElementsByTagName("IMG");
    var bb = b.cells[XTS_COL_TRI].getElementsByTagName("IMG");

	if (aa != null)
		sa = aa[0].src;
	if (bb != null)
		sb = bb[0].src;
		
    if (sa==sb) return 0;
    if (sa<sb) return -1;
    return 1;    
	
}

function XTS_Stat(col)
{
	var i, j;
	var td;
	var allTR 	= tableauWork.getElementsByTagName("TR");
	var tabStat = new Array();
	
	for (i = 0 ; i < allTR.length ; i++)
	{
		td = allTR[i].cells[col-1];
		text = XDOM_GetInnerText(td).toUpperCase();
		for (j = 0 ; j < tabStat.length ; j++)
		{
			if (tabStat[j].lib.indexOf(text) != -1)
			{
				tabStat[j].cpt++;
				break;
			}
		}
		if (j == tabStat.length)
		{
			var elem = new Object();
			elem.lib = text;
			elem.cpt = 1;
			tabStat.push(elem);
		}
	}
	var header = XTS_GetHeader(tableauWork);
	var divStat = document.getElementById("XTS_stat");
	var code = "";
	if (divStat == null)
	{
		divStat = document.createElement("DIV");
		divStat.id="XTS_statDiv";
		divStat.style.position="absolute";
		divStat.style.backgroundColor = "white";
		divStat.style.border="2px black solid";
		document.body.appendChild(divStat);
		XMOVE_Move(divStat);
	}
	divStat.style.display="";
	divStat.style.top = document.getElementById("XTS_menuContextuel").style.top;
	divStat.style.left = document.getElementById("XTS_menuContextuel").style.left;
	code = "<table id='XTS_statTable' border='1' class='XTableScroll' XTS_Taille='100px'>";
	code += "<caption style='text-align:center'>Statistique pour la colonne "+ XDOM_GetInnerText(XDOM_GetTD(header.rows[0], col))+"</caption>";
	code += "<thead><tr><th>"+XDOM_GetInnerText(XDOM_GetTD(header.rows[0], col))+"</th><th>occurence</th></tr></thead>";
	code+="<tbody>";
	for (i = 0 ; i < tabStat.length ; i++)
		code+="<tr style='cursor:pointer' title='Selectionne les lignes correspondantes' onClick='javascript:XTS_LancerRecherche("+col+", \""+escape(tabStat[i].lib)+"\",false)'><td>"+tabStat[i].lib+"</td><td>"+tabStat[i].cpt+"</td></tr>";
	code+= "</tbody></table>";
	code+= "<b>Nb de lignes : "+tabStat.length+"</b>";
	code+="<br /><input type='button' value = 'Ok' onClick='this.parentNode.style.display=\"none\"' />";	
	divStat.innerHTML = code;

}

// Inverse la selection
function XTS_InvSel()
{
	for (var i = 0 ; i < tableauWork.rows.length ; i++)
		XTS_Marquer(tableauWork.rows[i], !XTS_IsSelectionnee(tableauWork.rows[i]));
}

// Retourne le nombre de lignes selectionnées
function XTS_GetNbSelectRows(monTab)
{
	var cpt = 0;
	for (var i = 0 ; i < tableauWork.rows.length ; i++)
		if (XTS_IsSelectionnee(tableauWork.rows[i])	)
			cpt++;	
			
	return cpt;
}
// return la marque (l'element 'A') si la ligne est marquee sinon, retourne null
// Parametre : maTR, la ligne
function XTS_IsSelectionnee(maTR)
{
	var mesA;
	
	if (maTR == null)
		return false;
	if (maTR.cells[0] != undefined)
	{
		mesA = maTR.cells[0].getElementsByTagName("A");
		for (var i = 0 ; i < mesA.length ; i++)
		{
			if (mesA[i].name && mesA[i].name == "XTS_match")  // elle est marquee
				return mesA[i];
		}
	}
	return null;
}

// Selectionne une ligne
// parametre : maTR, la ligne
//			   doIt = true,  on selectionne la ligne
//             doIt = false, on deselectionne la ligne
function XTS_Marquer(maTR, doIt)
{
	var marque		= XTS_IsSelectionnee(maTR);

	if (marque && !doIt)  								// elle est selectionnee et on veut la deselectionner
	{
		marque.parentNode.removeChild(marque);          // 		on enleve la marque
		maTR.style.backgroundColor = maTR.SAVbgTS;		// 		et on restaure le background
		if (maTR.SAVbackgroundColor != null)
			maTR.SAVbackgroundColor = maTR.SAVbgTS;
		maTR.SAVbgTS = null;
	}
	else if (!marque && doIt) 							// elle n'est pas selectionnee et on veut la selectionner
	{
		var newA;
		if (maTR.SAVbackgroundColor != null) 		// Si une couleur etait deja sauvegardee (cas des xlien)
		{
			maTR.SAVbgTS = maTR.SAVbackgroundColor;  // on sauvegarde la sauvegarde !
			maTR.SAVbackgroundColor = XTS_COLOR_SELECT // et on met la notre en sauvegarde !
		}
		else
			maTR.SAVbgTS = maTR.style.backgroundColor;			// sinon on sauvegarde la couleur actuelle

		maTR.style.backgroundColor = XTS_COLOR_SELECT;   // on met notre couleur
		newA = document.createElement("A");						// et on cree l'element de marquage
		newA.name = "XTS_match";
		maTR.cells[0].appendChild(newA);						// que l'on ajour sur la premiere TD de la TR
	}
}

// Selectionne ou deselectionne toutes les lignes
// parametre : tous = true,  selectionne toutes les lignes
//             tous = false, deselectionne toutes les lignes
function XTS_Selection(tous)
{
	for (var i = 0 ; i < tableauWork.rows.length ; i++)
		XTS_Marquer(tableauWork.rows[i], tous);
}

// Supprime les lignes selectionnées ou non
// parametes : select = true,  supprime les lignes selectionnees
//             select = false, supprime les lignes non selectionnées
function XTS_Sup(select)
{
	var i;
	var allA = tableauWork.getElementsByTagName("A");
	if (allA != null)
	{
		for (i = allA.length-1 ; i >= 0 ; i--)
		{
			if (   (allA[i].name == "XTS_match" && select)
			    || (allA[i].name != "XTS_match" && ! select)
			   )
			{  // A    <   TD     <     TR   . parentTR
				allA[i].parentNode.parentNode.parentNode.removeChild(allA[i].parentNode.parentNode);
			}
		}
	}
}

// selectionne les lignes correspondant a la recherche demandee
// parametre : col, la colonne dans laquelle s'effectue la recherche
//             lib, la chaine a rechercher, si null alors on prend le contenu du champs XCTRL_recherche
//             avecInfos, affiche une alerte avec le nombre d'occurences trouvees
function XTS_LancerRecherche(col, lib, avecInfos)
{
	var allTR = tableauWork.getElementsByTagName("TR");
	var i;
	var td;
	var colorSav;
	var cpt = 0;
	var leA;
	var allA;
	
	if (lib == null)
		lib = document.getElementsByName("XCTRL_recherche")[0].value.toUpperCase();
	else
		lib = unescape(lib).toUpperCase();
		
	XTS_Selection(false); // on deselectionne tout

	for (i = 0 ; i < allTR.length ; i++)
	{
		td = allTR[i].cells[col-1];
		if (XDOM_GetInnerText(td).toUpperCase().indexOf(lib) != -1)
		{
			cpt++;
			XTS_Marquer(allTR[i], true);
		}
	}
	if (cpt == 0 && avecInfos)
		alert("Aucune occurence trouvée");
	else
	{
		if (avecInfos)
			alert(cpt+" occurence(s) trouvée(s)");
		if (X_MZ)
		{
			document.location.href="#"+document.getElementsByName("XTS_match")[0].name; 
			window.scrollTo(0,0); // que pour ff ! 
		}
	}
}
							
// Imprime le tableau
function XTS_Print()
{
	var popPrint = window.open("");
	var tabH;
	
	if (popPrint != null)
	{
		tabH = XTS_GetHeader(tableauWork);
		tabF = XTS_GetFooter(tableauWork);
		popPrint.document.open();
		popPrint.document.write("<body><table border='1' cellspacing='0' style='border-spacing : 0;font-family:verdana;font-size:12px;'>"+tabH.innerHTML+tableauWork.innerHTML);
		if (tabF != null)
			popPrint.document.write(tabF.innerHTML);
		popPrint.document.write("</table></body>");
		popPrint.document.close();
		popPrint.print();
	}
	tableauPrint = null;
	// document.getElementById("XTS_menuContextuel").style.display='none';
}

// Copie le tableau dans le presse papier
function XTS_Copy()
{
	var tabH = XTS_GetHeader(tableauWork);
		tabF = XTS_GetFooter(tableauWork);
	var txt="";
	var i,j;
	
	if (window.clipboardData) // pour ie
	{
		for (i= 0 ; i < tabH.rows.length ; i++)
		{
			for (j = 0 ; j < tabH.rows[i].cells.length ; j++)
				txt+= XDOM_GetInnerText(tabH.rows[i].cells[j])+"\t";
			txt+="\n";
		}

		for (i= 0 ; i < tableauWork.rows.length ; i++)
		{
			for (j = 0 ; j < tableauWork.rows[i].cells.length ; j++)
				txt+= XDOM_GetInnerText(tableauWork.rows[i].cells[j])+"\t";
			txt+="\n";
		}
		if (tabF)
		{
			for (i= 0 ; i < tabF.rows.length ; i++)
			{
				for (j = 0 ; j < tabF.rows[i].cells.length ; j++)
					txt+= XDOM_GetInnerText(tabF.rows[i].cells[j])+"\t";
				txt+="\n";
			}
		}
		window.clipboardData.setData("Text", txt);
	}
	else
	{
		var popCopy = window.open("");
		if (popCopy != null)
		{
			txt="<table><thead>";
			for (i= 0 ; i < tabH.rows.length ; i++)
			{
				txt+"<tr>";
				for (j = 0 ; j < tabH.rows[i].cells.length ; j++)
					txt+= "<th>"+XDOM_GetInnerText(tabH.rows[i].cells[j])+"</th>";
				txt+="</tr>";
			}
			txt+="</thead><tbody>";

			for (i= 0 ; i < tableauWork.rows.length ; i++)
			{
				txt+"<tr>";
				for (j = 0 ; j < tableauWork.rows[i].cells.length ; j++)
					txt+= "<td>"+XDOM_GetInnerText(tableauWork.rows[i].cells[j])+"</td>";
				txt+="</tr>";
			}
			txt+"</tbody>";
			if (tabF)
			{
				txt+="<tfoot>";
				for (i= 0 ; i < tabF.rows.length ; i++)
				{
					txt+"<tr>";
					for (j = 0 ; j < tabF.rows[i].cells.length ; j++)
						txt+= "<td>"+XDOM_GetInnerText(tabF.rows[i].cells[j])+"</td>";
					txt+="</tr>";
				}
				txt+="</tfoot>";
			}
			txt+="</table>";

			popCopy.document.open();
			popCopy.document.write(txt);
			popCopy.document.close();
		}
	}					
}

// paramètre : '' ou 'none' selon si on veut rendre visible la table ou non
// on suppose que l'on passe bien '' ou 'none'
function XTS_setDisplay(maTable,flag)
{
	maTable.style.display = flag;
	if (XTS_GetHeader(maTable) != null)
		XTS_GetHeader(maTable).style.display = flag;
	// il n'y a pas forcément de footer > le tester
	if (XTS_GetFooter(maTable) != null)
		XTS_GetFooter(maTable).style.display = flag;
}