/***********************************************************************************
****************************** Variables et Constantes *****************************
***********************************************************************************/
var ns4=document.layers;		// Netscape 4
var ie4=document.all;			// A partir d'IE 4
var ns6=document.getElementBy;	// Netscape 6

/**** S'assurer qu'un appel de document.getElementById est toujours concluant ****/
if( !document.getElementById ) {
  	if( document.all ) {
    	document.getElementById = function( id ) {
      		return document.all[ id ]; }} 
	else {
    	document.getElementById = function() {
      		return null; }}
}

/***********************************************************************************
********************************** TDBGrid *****************************************
************************************************************************************/
function TDBGrid(parDBGridId) {
this.Columns 	= new TDBGridColumns(parDBGridId);
this.DBGridId	= parDBGridId;
this.AppendRow 	= DBGridAppendRow;
this.EditRow	= DBGridEditRow;
this.DataSet	= null;
this.OnClickRow = DBGridOnClickRow;
this.ClassName	= "";
this.OnSelectRow= null;
this.EmptyGrid  = DBGridEmptyGrid;
}

/***********************************************************************************
****************************** DBGridAddListener ***********************************
****  Ajout d'un évènement en écoute sur l'élément (e).
****  Le type (t) ne doit pas inclure le prefix "on" par exemple transmettre "click" pas "onclick".
****  L'évènement (l) doit	faire référence à une fonction qui a un seul argument
****  Au déclenchement, cet argument sera l'objet associé à l'évènement déclencheur.
***********************************************************************************/
function DBGridAddListener( e, t, l ) {
if( e ) {
	if( e.addEventListener )
    	e.addEventListener( t, l, false );
	else if( e.attachEvent )
        e.attachEvent( 'on' + t, l );
	else
        e[ 'on' + t ] = l; }
}

/***********************************************************************************
****************************** DBGridOnClickRow ************************************
*********************** Evènement sur le clic d'une ligne **************************
***********************************************************************************/
function DBGridOnClickRow( e ) {
var Element = null, row = null, section = null;
if( e.target ) {
	Element = e.target; } 
else if( e.srcElement ) {
  Element = e.srcElement; }
if( Element && Element.parentNode ) {
	row = Element.parentNode; }
DBGridRazbgColor(row.parentNode);
row.bgColor = "#6699CC";
/* Lourdingue pour l'instant mais je m'attends à avoir une variable qui s'appelle DBGrid en global
  je n'ai pas trouvé la méthode pour les parcourir !!! si jamais...	 */
var Racine = Element.parentNode.parentNode.parentNode;
if ('undefined' == typeof DBGrid) {
	alert("DBGridOnClickRow: la variable DBGrid est introuvable");
	return; }
if (DBGrid.DBGridId != Racine.id) {
	alert("DBGridOnClickRow: la variable DBGrid.DBGridId "+DBGrid.DBGridId+" différente de Racine.id "+Racine.id);
	return; }
/* Positionnement dans le DataSet */
DBGrid.DataSet.GotoRecord(row.sectionRowIndex);
/* Chargement des data du DataSet dans la ligne */
if (DBGrid.OnSelectRow != null)
	DBGrid.OnSelectRow();
}

/***********************************************************************************
****************************** DBGridAppendText ************************************
/************* Ajoute un node Text avec la valeur (t) à l'élément (e) **************
***********************************************************************************/
function DBGridAppendText( e, t ) {
	if( e && e.appendChild && document.createTextNode ) {
    	var node = document.createTextNode( t );
	    if( node )
			e.appendChild( node );  
	}
}

/***********************************************************************************
****************************** DBGridAppendAtt ************************************
****** Ajoute un Attribut avec le nom (t) et la valeur (v) à l'élément (e) ********
***********************************************************************************/
function DBGridAppendAtt( e, t, v ) {
	if( e && e.setAttribute )
		e.setAttribute(t, v); 
}

/***********************************************************************************
****************************** DBGridRazbgColor *************************************
***********************************************************************************/
function DBGridRazbgColor(Grille) {
for( var i = 1; i < Grille.rows.length; ++i )
	Grille.rows[ i ].bgColor = "#FFFFCC";
}

/***********************************************************************************
****************************** DBGridAppendRow *************************************
***********************************************************************************/
function DBGridAppendRow() {
var Grille = document.getElementById( this.DBGridId );
DBGridRazbgColor(Grille);
if( Grille && Grille.insertRow ) {
	var cells = [];
    var row = Grille.insertRow( Grille.rows.length );
    if( row ) {
		row.bgColor = "#6699CC";
      	DBGridAddListener( row, 'click', this.OnClickRow );
       	for( var i = 0; i < this.Columns.Count; ++i )
       		cells[ i ] = row.insertCell( row.cells.length );
		/* Colonne 0 (bouton de suppression) */
	    if( cells[ 0 ] && cells[ 0 ].appendChild && document.createElement ) {
	    	var button = document.createElement('button');
          	if( button ) {
    			DBGridAppendText( button, 'Supp.' );
				button.className = this.ClassName;
            	DBGridAddListener( button, 'click', DBGridDeleteRow );
            	cells[ 0 ].appendChild( button ); }	} }
		/* Colonne 1 (numéro de ligne) */
      	if( cells[ 1 ] && row.sectionRowIndex )
       		DBGridAppendText( cells[ 1 ], row.sectionRowIndex );
		/* Chargement des Data du Dataset */
		if (this.DataSet && this.DataSet!=null)
	       	for( var i = 2; i < this.Columns.Count; ++i )
				DBGridAppendText( cells[ i ], this.DataSet.FieldByName(this.Columns.Items[i-2].FieldName,null) );
    }
}

function DBGridEditRow() {
/* Chargement des Data du Dataset */
if (this.DataSet && this.DataSet!=null) {
	var Grille = document.getElementById( this.DBGridId );
	for( var i = 2; i < this.Columns.Count; ++i )
		Grille.rows[ this.DataSet.RecNo() ].cells[i].innerHTML = this.DataSet.FieldByName(this.Columns.Items[i-2].FieldName,null);
	}
}

/***********************************************************************************
****************************** DBGridDeleteRow *************************************
************************************************************************************
ATTENTION Cette fonction repose sur un document proprement construit. Soyez sûrs
que le document est valide (Voir http://validator.w3.org/) autrement
des fonctionnalités peuvent être perdues.*/
function DBGridDeleteRow( e ) {
var button = null, row = null, Grille = null;
var Index;
if( e.target )
	button = e.target;
else if( e.srcElement )
	button = e.srcElement;
/* Lourdingue pour l'instant mais je m'attends à avoir une variable qui s'appelle DBGrid en global
  je n'ai pas trouvé la méthode pour les parcourir !!! si jamais...	 */
var Racine = button.parentNode.parentNode.parentNode.parentNode;
if ('undefined' == typeof DBGrid) {
	alert("DBGridOnClickRow: la variable DBGrid est introuvable");
	return; }
if (DBGrid.DBGridId != Racine.id) {
	alert("DBGridOnClickRow: la variable DBGrid.DBGridId "+DBGrid.DBGridId+" différente de Racine.id "+Racine.id);
	return; }
if( button && button.parentNode && button.parentNode.parentNode ) {
	row = button.parentNode.parentNode;
    if( row && row.parentNode && 'undefined' != typeof row.sectionRowIndex ) {
	    Grille = row.parentNode;
        if( Grille && Grille.deleteRow ) {
			Index = row.sectionRowIndex;
			/* Positionnement dans le DataSet */
			DBGrid.DataSet.GotoRecord(Index);
			/* Suppression de l'enregistrement */
			DBGrid.DataSet.Delete();
			/* Suppression de la ligne dans la grille */			
        	Grille.deleteRow( Index );
			/* RAZ des couleurs */
			DBGridRazbgColor(Grille);
			if (Index >= Grille.rows.length)
				Index--;
			if (Index>0) {
				/* Mise en surbrillance de la ligne */
				Grille.rows[Index].bgColor = "#6699CC";
				/* Positionnement dans le DataSet */
				DBGrid.DataSet.GotoRecord(Index);
				/* Chargement des data du DataSet dans la ligne */
				if (DBGrid.OnSelectRow != null)
					DBGrid.OnSelectRow();
			} } } }
}

/***********************************************************************************
****************************** DBGridEmptyGrid *************************************
************************************************************************************/
function DBGridEmptyGrid() {
var Grille = document.getElementById( this.DBGridId );
while (Grille.rows.length>1)
   	Grille.deleteRow( Grille.rows.length-1 );
}

/***********************************************************************************
********************************** TColumn *****************************************
************************************************************************************/
function TColumn() {
this.Caption	= "";
this.FieldName 	= "";
}

/***********************************************************************************
*************************** DBGridColumnsAdd ***************************************
************************************************************************************/
function DBGridColumnsAdd(Caption,FieldName) {
this.Items[this.Count-2] 			= new TColumn();
this.Items[this.Count-2].Caption	= Caption;
this.Items[this.Count-2].FieldName	= FieldName;
this.Count++;
}

/***********************************************************************************
*************************** DBGridColumnsAddCreate *********************************
************************************************************************************/
function DBGridColumnsAddCreate() {
var Grille = document.getElementById( this.Owner );
if( Grille && Grille.insertRow ) {
	var cells = [];
	var row = Grille.insertRow( 0 );
	if( row ) {
		for( var i = 0; i < this.Count; ++i )
			cells[ i ] = row.insertCell( row.cells.length );
		/* Colonne 0 = bouton de suppression*/
  	  	if( cells[ 0 ] )
       		DBGridAppendText( cells[ 0 ], "" );
  	  	if( cells[ 1 ] )
			DBGridAppendText( cells[ 1 ], "No" );
		/* Colonne 1 = No de ligne 		    */
		for( var i = 2; i < this.Count; ++i )
    	  	if( cells[ i ] )
       			DBGridAppendText( cells[ i ], this.Items[ i-2 ].Caption );
		}
	}
}

/***********************************************************************************
****************************** TDBGridColumns **************************************
************************************************************************************/
function TDBGridColumns(parDBGridId) {
this.Items 	= new Array(64); /* Nombre maxi de colonnes = 64 */
this.Count 	= 2; 			 /* Colonne 0 = Bouton de suppression Colonne 1 = No de ligne */
this.Add	= DBGridColumnsAdd;
this.Create = DBGridColumnsAddCreate;
this.Owner	= parDBGridId;
}

//var texte = "";
//for (var i in Element.parentNode.parentNode.parentNode ) {
//	texte += i+" = " +Element.parentNode.parentNode.parentNode [i]+" "; }
//alert(this.length);
//for (var i in Racine ) {
//	texte += i+" = " + Racine [i]+" "; }
//document.write(texte);