<!--
var oldText = ''; // valeur précédente du champ texte
var currentText = ''; // valeur actuelle du champ texte
var resultsCache = new Object(); // mécanisme de cache des requêtes

// objet xmlHTTPRequest
var xmlHttp = null;

// liste d'éléments
var completeListe = null;
// div de la liste
var completeDiv = null;

var searchText = null;

var _fileXML = '';

function init( file )
{
	// champ texte
	searchText = document.getElementById( 'search_text' );
	
	_fileXML = file;

	createCompleteDiv();
	
	setTimeout( 'main()', 200 );
}

function getXMLHTTP()
{
	var xhr = null;
	
	if( window.XMLHttpRequest ) // Firefox et autres
  	xhr = new XMLHttpRequest();
	else if(window.ActiveXObject)
	{ // Internet Explorer
    try 
		{
      xhr = new ActiveXObject( 'Msxml2.XMLHTTP' );
		}
		catch( e ) 
		{
      try 
			{
        xhr = new ActiveXObject( 'Microsoft.XMLHTTP' );
      } 
			catch( e1 ) 
			{
        xhr = null;
      }
    }
  }
	
	return xhr;
}

function main()
{
	currentText = searchText.value;
	
	// si modif du champ texte
	if( oldText != currentText )
	{
		var valeur = escapeUrl( currentText );
		var suggests = resultsCache[ currentText ] ;
		
		// dans le cache?
		if( suggests )
			displaySuggests( valeur, suggests );
		else
			getSuggests( valeur );
			
		searchText.focus();
	}
	
	// ancienne valeur
	oldText = searchText.value;
	
	// toutes les 200ms
	setTimeout( 'main()', 200 );
	
	return true;
}

function escapeUrl( val )
{
	if( encodeURIComponent )
		return encodeURIComponent( val );
	else
		return escape( val );
}

function getSuggests( valeur )
{
	// si ancienne requête
	if( xmlHttp && xmlHttp.readyState )
		xmlHttp.abort();
		
	xmlHttp = getXMLHTTP();
	
	// objet OK
	if( xmlHttp )
	{
		xmlHttp.open( 'GET', 'resources/ajax/' + _fileXML + '?debut=' + valeur, true );
		
		xmlHttp.onreadystatechange=function()
		{
			if( xmlHttp.readyState == 4 && xmlHttp.responseXML )
			{
				var liste = getFromXml( xmlHttp.responseXML );
			
				// mise en cache
				resultsCache[ valeur ] = liste;

				displaySuggests( valeur, liste );
			}
		};
		

		xmlHttp.send( null );
	}
}

function getFromXml( xml )
{
	var opts = xml.getElementsByTagName( 'option' );
	
	var optsListe = new Array();
	for( var i = 0; i < opts.length; i++ )
		optsListe.push( opts[ i ].firstChild.data );
		
	return optsListe;
}

function displaySuggests( debut, liste )
{
	// tant que liste pas vide
	while( completeDiv.childNodes.length > 0 )
		// on enlève un élément
		completeDiv.removeChild( completeDiv.childNodes[ 0 ] );
	
	var i = 0;
	
	for( ; i < liste.length; i++ )
	{
		var newDiv = document.createElement( 'DIV' );
		
		if( i == 0 )
			setElementStyle( newDiv, 'styleItemListeOver' );
		else
			setElementStyle( newDiv, 'styleItemListe' );
		
		newDiv.onmousedown = divOnMouseDown;
    newDiv.onmouseover = divOnMouseOver;
    newDiv.onmouseout = divOnMouseOut;
		
		newDiv.innerHTML = liste[ i ];
		
		completeDiv.appendChild( newDiv );
	}
	
	if( i )
		completeDiv.style.visibility = 'visible';
	else
		completeDiv.style.visibility = 'hidden';
	
	completeDiv.height = 16 * i + 4;
}

function createCompleteDiv()
{
	completeDiv = document.createElement( 'DIV' );
	completeDiv.id = 'completeDiv';
	
	completeDiv.style.border = '1px solid #000000';
	completeDiv.style.padding = '0px';
	completeDiv.style.backgroundColor = '#FFFFFF';
	
	completeDiv.style.zIndex = '1';
	completeDiv.style.visibility = 'hidden';
	
	completeDiv.style.position = 'absolute';
	completeDiv.style.left = calculateOffset( searchText, 'offsetLeft' ) + 'px';
	completeDiv.style.top = ( calculateOffset( searchText, 'offsetTop' ) + searchText.offsetHeight - 1 ) + 'px';
	completeDiv.style.width = searchText.offsetWidth - 2 + "px";
	
	document.body.appendChild( completeDiv );
	setElementStyle( completeDiv, 'styleListe' );
}

function setElementStyle( c, name )
{
  c.className = name;
}

function calculateOffset(r,attr){
  var kb=0;
  while(r){
    kb+=r[attr];
    r=r.offsetParent
  }
  return kb
}

var divOnMouseDown = function()
{
	searchText.value = this.innerHTML;
};

var divOnMouseOver = function()
{
	setElementStyle( this, 'styleItemListeOver' );
};

var divOnMouseOut = function()
{
	setElementStyle( this, 'styleItemListe' );
}
-->