// *****************************************************************************************************
// * FDE 17/082006
// * Fichier javascript permettant de réaliser l'appel ajax sur le serveur pour recuperer le 
// * nom des communes.
// * Adapté de : http://dcabasson.developpez.com/articles/javascript/ajax/ajax-autocompletion-pas-a-pas/
// *****************************************************************************************************
//
// retourne un objet xmlHttpRequest.
// méthode compatible entre tous les navigateurs (IE/Firefox/Opera)
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;
      }
    }
  }
  else { // XMLHttpRequest non supporté par le navigateur
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  }
  return xhr;
}

var _xmlHttp = null; //l'objet xmlHttpRequest utilisé pour contacter le serveur
var _adresseRecherche = "infoBulle.php"; //l'adresse à interroger pour trouver les suggestions
var _completeDivRows = 0;

// *********************************************************************
// * Fonction principale permettant de recuperer le nom de la commune
// *********************************************************************
function callNom(valeur,X,Y){
  if(_xmlHttp&&_xmlHttp.readyState!=0){
    _xmlHttp.abort()
  }
  _xmlHttp=getXMLHTTP();
  if(_xmlHttp){
    //appel à l'url distante
	_xmlHttp.open("GET",_adresseRecherche+"?x="+X+"&y="+Y,true);
    _xmlHttp.onreadystatechange=function() {
      if(_xmlHttp.readyState==4&&_xmlHttp.responseXML) {
        var liste = traiteXmlSuggestions(_xmlHttp.responseXML)

        //cacheResults(valeur,liste)
        metsEnPlace(valeur,liste)
      }
    };
    // envoi de la requete
    _xmlHttp.send(null)
  }
}

// *********************************************************************
// * Traitement du résultat XML en tableau
// * chaque element recu entre 
// *********************************************************************
function traiteXmlSuggestions(xmlDoc) {
  var options = xmlDoc.getElementsByTagName('option');
  var optionsListe = new Array();
  for (var i=0; i < options.length; ++i) {
    optionsListe.push(options[i].firstChild.data);
  }
  return optionsListe;
}

// *********************************************************************
// * Insère une règle avec son nom
// *********************************************************************
function insereCSS(nom,regle){
  if (document.styleSheets) {
    var I=document.styleSheets[0];
    if(I.addRule){ // méthode IE
      I.addRule(nom,regle)
    }else if(I.insertRule){ // méthode DOM
      I.insertRule(nom+" { "+regle+" }",I.cssRules.length)
    }
  }
}

// *********************************************************************
// * Fonction permettant d'initialiser le style de la div
// *********************************************************************
function initStyle(){
  var AutoCompleteDivListeStyle="font-size: 13px; font-family: arial,sans-serif; word-wrap:break-word; ";
  var AutoCompleteDivStyle="display: block; padding-left: 3; padding-right: 3; height: 16px; overflow: hidden; background-color: white;";
  var AutoCompleteDivActStyle="background-color: #3366cc; color: white ! important; ";
  insereCSS(".AutoCompleteDivListeStyle",AutoCompleteDivListeStyle);
  insereCSS(".AutoCompleteDiv",AutoCompleteDivStyle);
  insereCSS(".AutoCompleteDivAct",AutoCompleteDivActStyle);
}

function setStylePourElement(c,name){
  c.className=name;
}

// *********************************************************************
// * Fonction permettant de créer la div
// *********************************************************************
function creeDiv() {
  initStyle();
  _completeDiv=document.createElement("DIV");
  _completeDiv.id="completeDiv";
  var borderLeftRight=1;
  var borderTopBottom=1;
  _completeDiv.style.borderRight="black "+borderLeftRight+"px solid";
  _completeDiv.style.borderLeft="black "+borderLeftRight+"px solid";
  _completeDiv.style.borderTop="black "+borderTopBottom+"px solid";
  _completeDiv.style.borderBottom="black "+borderTopBottom+"px solid";
  _completeDiv.style.zIndex="1";
  _completeDiv.style.paddingRight="0";
  _completeDiv.style.paddingLeft="0";
  _completeDiv.style.paddingTop="0";
  _completeDiv.style.paddingBottom="0";
  _completeDiv.style.visibility="hidden";
  _completeDiv.style.position="absolute";
  _completeDiv.style.backgroundColor="white";
  document.body.appendChild(_completeDiv);
  setStylePourElement(_completeDiv,"AutoCompleteDivListeStyle");
}


// **********************************************************************
// * Fonction permettant de vider la div, utilisé au changement d'outil 
// *
function viderDivIB()
{
	try {
	//Supprime les lignes existantes dans la div
	  while(_completeDiv.childNodes.length>0) {
	    _completeDiv.removeChild(_completeDiv.childNodes[0]);
	  }
	 _completeDiv.style.visibility="hidden";
	}
	catch(erreur)
	{ }
}

// *********************************************************************
// * Fonction permettant placer la div dans l'interface
// *********************************************************************
function metsEnPlace(valeur, liste){
   x=0;
   y=0;


//Supprime les lignes existantes dans la div
  while(_completeDiv.childNodes.length>0) {
    _completeDiv.removeChild(_completeDiv.childNodes[0]);
  }

  // mise en place du résultat

  for(var f=0; f<liste.length; ++f){
    var nouveauDiv=document.createElement("DIV");
    setStylePourElement(nouveauDiv,"AutoCompleteDiv");
    var nouveauSpan=document.createElement("SPAN");
    nouveauSpan.innerHTML=liste[f]; // le texte de la suggestion
    nouveauDiv.appendChild(nouveauSpan);
    _completeDiv.appendChild(nouveauDiv);

   //Taille 
   _completeDiv.style.width=12*liste[f].length+5;
  }

  var suggestionList=_completeDiv.getElementsByTagName("div");
  _completeDivRows=suggestionList.length;

 //si il y a une reponse
  if(_completeDivRows==0){
    hideCompleteDiv()
  }else{
    showCompleteDiv()
  }

  if(_completeDivRows>0) {
  _completeDiv.style.visibility="visible";

	if(document.all)// IE
	{
		x=m_x_infoB_px+7;
		y=m_y_infoB_px+81;
		y+=18; //decalage souris
	}
	else	// Mozilla
	{
		x=m_x_infoB_px+7;
		y=m_y_infoB_px+81;
		y+=18; //decalage souris
	}

	//Placement de la div
	_completeDiv.style.top=y+"px";
	_completeDiv.style.left=x+"px";

    _completeDiv.height=16*_completeDivRows+4;
  } else {
    hideCompleteDiv();
  }
//Variable permettant d'indiquer qu'un appel serveur est possible
// Il n'y a plus de requete en cours 
lock="false";
}

// Cache completement les choix de completion
function hideCompleteDiv(){
  _completeDiv.style.visibility="hidden"
}

// Rends les choix de completion visibles
function showCompleteDiv(){
  _completeDiv.style.visibility="visible";
  //setCompleteDivSize()
}







