  var imputation = "javascript"
  var formulaire
    
  //var url="/RUSFGSOAP/";
  //var urlbis="/RUSFGSOAP2/";
  var url="/webservices/gsoap/";
  var urlbis="/webservices/gsoap2/";
    
  var xmlHttpLocalite
  var xmlHttpCivilite
  var xmlHttpAdresse
  var xmlHttpRechTel
    
  var xmlLocalite
  var xmlCivilite
  var xmlAdresse
  var xmlRechTel
    
  var domLocalite
  var domCivilite
  var domAdresse
  var domRechTel
    
 
    /*
     Soumission d'un formulaire
    */
    function rnvp(form1) {

    formulaire = form1;
    
    /*
     Construction de(s) (la) requete(s)
    */
    
     /*if (formulaire.name=="localite") {
      xmlLocalite = getLocaliteReq(imputation);
      xmlHttpLocalite = createXmlHttpRequest()
    sendRequest(url, xmlHttpLocalite, xmlLocalite, waitLocaliteResponse, "traiterechloc");
     }
     else if (formulaire.name=="adresse") {
      //controle de la civilité
      xmlCivilite = getCiviliteReq(imputation);
      xmlHttpCivilite = createXmlHttpRequest()
    sendRequest(url, xmlHttpCivilite, xmlCivilite, waitCiviliteResponse, "traiteanalnom");*/
     
      //control de l'adresse
    xmlAdresse = getAdresseReq(imputation, 'A', '38', 'true');
      xmlHttpAdresse = createXmlHttpRequest()
    sendRequest(url, xmlHttpAdresse, xmlAdresse, waitAdresseResponse, "traiteadresse");
   /*}
   else if (formulaire.name=="rechtel") {
    xmlRechTel = getRechTelReq(imputation);
    xmlHttpRechTel = createXmlHttpRequest()
    sendRequest(url, xmlHttpRechTel, xmlRechTel, waitRechTelResponse, "traiterechtel");
     }*/
    
    }
    
    
    /*
     Creation d'un objet xmlHttpRequest
    */
    function createXmlHttpRequest() {
    var alerted
    var xmlhttp
    
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    // JScript gives us Conditional compilation, we can cope with old IE versions.
      try {
      xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
     } catch (e) {
      try {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
      } catch (e) {
       alert("You must have Microsofts XML parsers available")
      }
     }
    @else
     alert("You must have JScript version 5 or above.")
     xmlhttp=false
     alerted=true
    @end @*/
    if (!xmlhttp && !alerted) {
     // Non ECMAScript Ed. 3 will error here (IE<5 ok), nothing I can 
     // realistically do about it, blame the w3c or ECMA for not
     // having a working versioning capability in  <SCRIPT> or
     // ECMAScript.
     try {
      xmlhttp = new XMLHttpRequest();
     } catch (e) {
      alert("You need a browser which supports an XMLHttpRequest")
     }
    }
    
     return xmlhttp
    }
    
    
    
    /*
     Envoi de la requete en xml en mode asynchrone (pas d'attente)
    */
  function sendRequest(url, http, xml, waiter, action) {
     try {
      http.open("POST", url, true);
    http.setRequestHeader("Content-Type", "application/soap+xml");
    http.setRequestHeader("SOAPAction", '"'+action+'"');
	http.setRequestHeader("Authorization", "Basic Y2xlZjo1ZjQ1ZTA0NmI3NGFiOWJhNWFiZTI2NDVkZTI5MTFlMTk5OTcwYjA0" );
    http.onreadystatechange=waiter; 
      
    //alert(xml);
      http.send(xml);
     } catch (e) {
      alert("Error while sending xml request")
     }
    }
    
    /*
   Boucle d'attente de la réponse pour la Localité
    */
    function waitLocaliteResponse(){
      var xmlhttp = xmlHttpLocalite
    
      //Fin de l'attente
      if (xmlhttp.readyState==4) {
       
       //OK
       if (xmlhttp.status == 200) {
        try {
          var xmlResp = xmlhttp.responseText;
          var statusLocalite = getLocaliteResp(xmlResp);
    
          /* 
            Analyse du statut et code perso ...
          */
          //monLocaliteJS(statusLocalite)		
    
        } catch (e) {
         alert("You need a browser which supports a DOM Interface")
        }
       }
    
       //Serveur de secours
       else if (xmlhttp.status == 502) {
      sendRequest(urlbis, xmlhttp, xmlLocalite, waitLocaliteResponse);
       }
    
       else
      //alert("Problème de connexion :\n" + xmlhttp.statusText + ' ' + xmlhttp.responseText)
      return;
	  }
    }
    
    
    /*
   Boucle d'attente de la réponse pour la Civilité
    */
    function waitCiviliteResponse(){
      var xmlhttp = xmlHttpCivilite
    
      //Fin de l'attente
      if (xmlhttp.readyState==4) {
       
       //OK
       if (xmlhttp.status == 200) {
        try {
          var xmlResp = xmlhttp.responseText;
          var statusCivilite = getCiviliteResp(xmlResp);
    
          /* 
            Analyse du statut et code perso ...
          */
          //monJSCivilite(statusCivilite)		
    
        } catch (e) {
         alert("You need a browser which supports a DOM Interface")
        }
       }
    
       //Serveur de secours
       else if (xmlhttp.status == 502) {
        sendRequest(urlbis, xmlhttp, xmlCivilite, waitCiviliteResponse);
       }
    
       else
     // alert("Problème de connexion :\n" + xmlhttp.statusText + ' ' + xmlhttp.responseText)
      return;
	  }
    }
    
    
    /*
   Boucle d'attente de la réponse pour l'adresse
    */
    function waitAdresseResponse(){
      var xmlhttp = xmlHttpAdresse
    
      //Fin de l'attente
      if (xmlhttp.readyState==4) {
       
       //OK
       if (xmlhttp.status == 200) {
        try {
          var xmlResp = xmlhttp.responseText;
          var statusAdresse = getAdresseResp(xmlResp);
         
          /* 
            Analyse du statut et code perso ...
          */
          //monJSAdresse(statusAdresse)	
  	   	var nodes = domAdresse.getElementsByTagName("optionlist");
       	var choixNode = nodes[0].firstChild;
    		var statusadr = statusAdresse.substring(0,2);
    		var statusadr4 = statusAdresse.substring(3,4);
    		var statusadr43 = statusAdresse.substring(43,44);
  		var messerr ;
  		if (statusadr == "OK") {     //test du code statut adr et validation du reste du formulaire si besoin
  			document.getElementById('retour_RNVP').innerHTML = "&nbsp;";
        		valide_form() }// sinon message d'erreur en cas de non proposition de liste de choix
  		else if ((statusadr == "AV" || statusadr == "RE") && (choixNode == null)) {
  			messerr = "Adresse invalide ! Merci de la corriger";
  			if (statusadr4 == "G")
  				messerr +=  " - Ville non reconnue";	
  			else if (statusadr4 == "N")
  				messerr +=  " - Pas de voie";
  			else if (statusadr4 == "V")
   				messerr +=  " - Voie non reconnue";
  			else if (statusadr4 == "W")
  				messerr +=  " - Pb n&deg; voie";
  		  	if (statusadr43 == "N")
  				messerr +=  " - Anomalie/voie : num&eacute;ro n&eacute;cessaire et manquant";
  			else if (statusadr43 == "E")
  				messerr +=  " - Anomalie/voie : num&eacute;ro incorrect (erreur de borne)";
  		//AfficheMessage(messerr);
		alert(messerr);
  		}
  
    
        } catch (e) {
         alert("You need a browser which supports a DOM Interface *1")
        }
       }
    
       //Serveur de secours
       else if (xmlhttp.status == 502) {
        sendRequest(urlbis, xmlhttp, xmlAdresse, waitAdresseResponse);
       }
    
       else
      //alert("Problème de connexion :\n" + xmlhttp.statusText + ' ' + xmlhttp.responseText)
    	return;
	}
  }
  
  
  /*
   Boucle d'attente de la réponse pour la Recherche Téléphonique
  */
  function waitRechTelResponse(){
    var xmlhttp = xmlHttpRechTel
  
    //Fin de l'attente
    if (xmlhttp.readyState==4) {
     //OK
     if (xmlhttp.status == 200) {
      try {
        var xmlResp = xmlhttp.responseText;
        var statusRechTel = getRechTelResp(xmlResp);
  
      } catch (e) {
       //alert("You need a browser which supports a DOM Interface")
      return;
	  }
     }
  
     //Serveur de secours
     else if (xmlhttp.status == 502) {
      //sendRequest(urlbis, xmlhttp, xmlRechTel, waitRechTelResponse);
     }
  
     else
      //alert("Problème de connexion :\n" + xmlhttp.statusText + ' ' + xmlhttp.responseText)
      return;
	  }
    }
    
    
    /*
     web service Localite 
    */
    function getLocaliteReq(imputation) {
     var xml='<?xml version="1.0" encoding="utf-8"?>'+   
    	'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+
    	'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'+
    	'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+  
          	'<soap:Header>'+  
             	'<imputation xmlns="http://www.amabis.com/ns.xsd">'+imputation+'</imputation>'+  
          	'</soap:Header>'+  
          	'<soap:Body>'+    
             	'<traiterechloc xmlns="http://www.amabis.com/ns.xsd">'+      
                	'<libloc>'+formulaire.libelle.value+'</libloc>'+      
                	'<pref></pref>'+      
                	'<scoremini></scoremini>'+      
                	'<distinction></distinction>'+    
             	'</traiterechloc>'+  
          	'</soap:Body>'+
       	'</soap:Envelope>';
    
     return xml;
    }
    
  //Récupération du status et mise à jour du formulaire
    function getLocaliteResp(xml) {
         domLocalite = getDOM(xml);
    
         var libelleNodes = domLocalite.getElementsByTagName("libelle");
         var libelleNode = libelleNodes[0].firstChild;
         formulaire.libelle.value=libelleNode.nodeValue;
         var populations = domLocalite.getElementsByTagName("popu");
         formulaire.population.value=populations[0].firstChild.nodeValue;
    
         return "OK"
    }
    
    
    /*
   web service Civilité 
    */
    function getCiviliteReq(imputation) {
     var xml='<?xml version="1.0" encoding="utf-8"?>'+   
    	'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+
    	'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'+
    	'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+  
          	'<soap:Header>'+  
             	'<imputation xmlns="http://www.amabis.com/ns.xsd">'+imputation+'</imputation>'+  
          	'</soap:Header>'+  
          	'<soap:Body>'+    
             	'<traiteanalnom xmlns="http://www.amabis.com/ns.xsd">'+      
                	'<lib>'+formulaire.nom.value+'</lib>'+      
             	'</traiteanalnom>'+  
          	'</soap:Body>'+
       	'</soap:Envelope>';
    
     return xml;
    }
    
  //Récupération du status et mise à jour du formulaire
    function getCiviliteResp(xml) {
         domCivilite = getDOM(xml);
    
         var statusNodes = domCivilite.getElementsByTagName("statut");
         var statusNode = statusNodes[0].firstChild;
         var status = statusNode.nodeValue;
    
         var nomNodes = domCivilite.getElementsByTagName("fullnom");
         var nomNode = nomNodes[0].firstChild;
         if (nomNode!=null)
          formulaire.nom.value=nomNode.nodeValue;
    
         return status
    }
    
    
    /*
     web service Adresse 
    */
    function getAdresseReq(imputation, type, nbcols, uppercase) {
     var xml='<?xml version="1.0" encoding="utf-8"?>'+   
    	'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+
    	'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'+
    	'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+  
          	'<soap:Header>'+  
             	'<imputation xmlns="http://www.amabis.com/ns.xsd">'+imputation+'</imputation>'+  
          	'</soap:Header>'+  
          	'<soap:Body>'+    
             	'<traiteadresse xmlns="http://www.amabis.com/ns.xsd">'+      
    	'<volets>'+
    		'<nbVolets>'+'7'+'</nbVolets>'+
    		'<numVoletNom>'+''+'</numVoletNom>'+
    		'<numVoletLocalite>'+''+'</numVoletLocalite>'+
    		'<volet1>'+formulaire._volet1.value+'</volet1>'+/*nom / rs*/
    		'<volet2>'+formulaire._volet2.value+'</volet2>'+/* complement / nom*/
    		'<volet3>'+formulaire._volet3.value+'</volet3>'+/*complement localisation*/
    		'<volet4>'+formulaire.NOM_VOIE.value+'</volet4>'+/* voie */
    		'<volet5>'+formulaire.BP.value+'</volet5>'+/* BP localité*/
    		'<volet6>'+formulaire.CP.value+' '+formulaire.VILLE.value+'</volet6>'+/* CP ville */
    		'<volet7>'+formulaire.PAYS.value+'</volet7>'+/* pays */
    	'</volets>'+
  	'<niveau>'+'3'+'</niveau>'+
    	'<type>'+type+'</type>'+
    	'<typescorenom>'+''+'</typescorenom>'+
     	'<scoremini>'+'50'+'</scoremini>'+
    	'<distinction>'+'30'+'</distinction>'+
    	'<nbcols>'+nbcols+'</nbcols>'+      
    	'<uppercase>'+uppercase+'</uppercase>'+
             	'</traiteadresse>'+  
          	'</soap:Body>'+
       	'</soap:Envelope>';
     return xml;
    }
    
  //Récupération du status et mise à jour du formulaire
    function getAdresseResp(xml) {
         domAdresse = getDOM(xml);
    
         var statusNodes = domAdresse.getElementsByTagName("statut");
         var statusNode = statusNodes[0].firstChild;
         var status = statusNode.nodeValue;
    
         var nodes = domAdresse.getElementsByTagName("optionlist");
         var choixNode = nodes[0].firstChild;
    
         if (choixNode!=null) {
    	var options = new Array();
    	var choix = choixNode.nodeValue;
                 var results1 = choix.split("|")
    
                 for(var i =0; i < results1.length; i++)
                 {
    	  var results2 = results1[i].split(":")
    
    	  for(var j =0; j < results2.length; j++)
                   {
    	      if (j%2==1) {
    	       var results3 = results2[j].split("(")
    	       if (results3.length ==2 ) {
                         var results4 = results3[1].split(")")
    	        options[i]=results3[0]+" "+results4[0]
    	       }
    	       else
    	        options[i]=results3[0]
    	      }
    	   }
                 }
    
    	chooseAdresseOption(options);
         }
         
         setAdresseFormFromDom()
    
         return status
    	
    }
    
    
  /*
   web service Adresse 
  */
  function getRechTelReq(imputation) {
   var xml='<?xml version="1.0" encoding="utf-8"?>'+   
  	'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+
  	'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'+
  	'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'+  
        	'<soap:Header>'+  
           	'<imputation xmlns="http://www.amabis.com/ns.xsd">'+imputation+'</imputation>'+  
        	'</soap:Header>'+  
        	'<soap:Body>'+    
           	'<traiterechtel xmlns="http://www.amabis.com/ns.xsd">'+
  	'<telep>'+formulaire.tel.value+'</telep>'+      
  	'<rs>'+formulaire.rs.value+'</rs>'+
  	'<nom>'+formulaire.nom.value+'</nom>'+
  	'<prenom>'+formulaire.prenom.value+'</prenom>'+
  	'<cpville>'+formulaire.cpville.value+'</cpville>'+
  	'<limit>'+'10'+'</limit>'+
           	'</traiterechtel>'+  
        	'</soap:Body>'+
     	'</soap:Envelope>';
  
   return xml;
  }
  
  //Récupération du status et mise à jour du formulaire
  function getRechTelResp(xml) {
       domRechTel = getDOM(xml);
  
       var itemNodes = domRechTel.getElementsByTagName("item");
       
       //Construction de la table des réponses
       var table="<TABLE border='5'>"
       for(var i =0; i < itemNodes.length; i++)
       {
  	var itemNode = itemNodes[i];
  	var attNodes = itemNode.childNodes;
  
  	if (i==0) {
  		table+="<TR>"
  		for(var j =0; j < attNodes.length; j++) {
  			table+="<TH>"
  			var node = attNodes[j];
  			table+=node.nodeName
  			table+="</TH>"
  		}
  		table+="</TR>"
  	}
  	
  	table+="<TR>"
  	for(var j =0; j < attNodes.length; j++) {
  		table+="<TD>"
  		var node = attNodes[j];
  		table+=node.text
  		table+="</TD>"
  	}
  	table+="</TR>"
       }
       table+="</TABLE>"
  
      //Affichage de la table dans une popup
      popup = window.open("", "", 'toolbar,resizable,width=800,height=600') 
      popup.document.write(table) 
       
       return "OK"
  	
  }
  
  //Construction et Affichage du HTML contenant les différentes adresses possibles
    function chooseAdresseOption(options) {
    var form = '<div >'+
                     '<span ><SELECT name="liste" onChange="javascript:getAdresseOptionEvent(this);" style="font-size:10px; border:2px solid red;">'+'<OPTION value="">ATTENTION plusieurs possibilit&eacute;s...</OPTION>';
      for(var i=0; i < options.length; i++) { 
        var cplmt=options[i];
		form+='<OPTION value="">'+cplmt+'</OPTION>';
      }
      form+='</SELECT></span></div>';
    
    //On modifie le HTML correspondant à l'élément id=special_payeur
	document.getElementById('retour_RNVP').innerHTML = form;
  }
  
  //Affichage du HTML contenant un message d'alerte
  function AfficheMessage(message) {
    var form = '<div style="border-color:#FFFFFF; border-width:2px; border-style:solid">'+
                   message+
                   '</div>';
  
    //On modifie le HTML correspondant Ã  l'élément id=options
      document.getElementById('retour_RNVP').innerHTML = form;
    }
    
    
    //Gestion du choix de l'adresse
    function getAdresseOptionEvent(select) {
	  var index=select.selectedIndex-1;
    
      document.getElementById('retour_RNVP').innerHTML="";
    
      getAdresseSelection(index);
      
    }
    
    
  //Récupération de l'adresse selectionnée et modification du DOM
    function getAdresseSelection(index) {
    
         var adresseNodes = domAdresse.getElementsByTagName("adrlist");
         var adresseNode = adresseNodes[0].firstChild;
         
         if (adresseNode!=null) {
    	 	var adresse = adresseNode.nodeValue;
		
         	var results1 = adresse.split("|")
    
    	 	var results2 = results1[index].split("/")
    
    	 for(var j=0; j<7; j++) {
    	  if (results2[j] == undefined)
    	   results2[j]=""
    	
    	  var volets
    	  if (j==0)
         	   volets = domAdresse.getElementsByTagName("volet1");
    	  else if (j==1)
         	   volets = domAdresse.getElementsByTagName("volet2");
    	  else if (j==2)
         	   volets = domAdresse.getElementsByTagName("volet3");
    	  else if (j==3)
         	   volets = domAdresse.getElementsByTagName("volet4");
    	  else if (j==4)
         	   volets = domAdresse.getElementsByTagName("volet5");
    	  else if (j==5)
         	   volets = domAdresse.getElementsByTagName("volet6");
    	  else if (j==6)
         	   volets = domAdresse.getElementsByTagName("volet7");
    
                   var stringNode = volets[0].firstChild
    	  if (stringNode!=null)	
    	  	stringNode.nodeValue=results2[j];
    	  else {
                    var texte = domAdresse.createTextNode(results2[j]);
                    volets[0].appendChild(texte);
                   }
                  }
         }
       
         setAdresseFormFromDom()
    
         /*
          On revalide l'adresse !
         */
       xmlAdresse = getAdresseReq(imputation, 'A', '38', 'false');
         sendRequest(url, xmlHttpAdresse, xmlAdresse, waitAdresseResponse);
    }
    
  //Modification du formulaire HTML à partir du DOM
    function setAdresseFormFromDom() {
    
         var volets = domAdresse.getElementsByTagName("volet1");
         var stringNode = volets[0].firstChild;
    
         if (stringNode!=null)
         	formulaire._volet1.value=stringNode.nodeValue;
         else
    	formulaire._volet1.value="";
    
         volets = domAdresse.getElementsByTagName("volet2");
         stringNode =volets[0].firstChild;
         if (stringNode!=null)
         	formulaire._volet2.value=stringNode.nodeValue;
         else
    	formulaire._volet2.value="";
    
         volets = domAdresse.getElementsByTagName("volet3");
         stringNode =volets[0].firstChild;
         if (stringNode!=null)
         	formulaire._volet3.value=stringNode.nodeValue;
         else
    	formulaire._volet3.value="";
    
         volets = domAdresse.getElementsByTagName("volet4");
         stringNode =volets[0].firstChild;
         if (stringNode!=null)
         	formulaire.NOM_VOIE.value=stringNode.nodeValue;
         else
    	formulaire.NOM_VOIE.value="";
    
         volets = domAdresse.getElementsByTagName("volet5");
         stringNode = volets[0].firstChild;
         if (stringNode!=null)
         	formulaire.BP.value=stringNode.nodeValue;
         else
    	formulaire.BP.value="";
    
         volets = domAdresse.getElementsByTagName("volet6");
         stringNode = volets[0].firstChild;
         if (stringNode!=null) {
         	formulaire.CP.value=stringNode.nodeValue.substr(0,5);
			var splitloc=stringNode.nodeValue.length-6;			
         	formulaire.VILLE.value=stringNode.nodeValue.substr(6,splitloc);}
         else {
    	formulaire.CP.value="";
    	formulaire.VILLE.value="";}
    
         volets = domAdresse.getElementsByTagName("volet7");
         stringNode = volets[0].firstChild;
         if (stringNode!=null)
         	formulaire.PAYS.value=stringNode.nodeValue;
         else
    	formulaire.PAYS.value="";
    }
    
    
    
    /*
   représentation DOM du xml 
    */
    function getDOM(xml)
    {
    //alert (xml)
    //var text = '<TEXTAREA rows=40 cols=120>'+xml+'<TEXTAREA>'
    //popup = window.open("", "", 'toolbar,resizable,width=800,height=600') 
    //popup.document.write(text) 
    
    	var myDocument;
    	 if (document.implementation.createDocument){ 
       		// Mozilla, create a new DOMParser 
       		var parser = new DOMParser(); 
       		myDocument = parser.parseFromString(xml, "text/xml"); 
     	} else if (window.ActiveXObject){ 
       		// Internet Explorer, create a new XML document using ActiveX 
       		// and use loadXML as a DOM parser. 
       		myDocument = new ActiveXObject("Microsoft.XMLDOM") 
      	 	myDocument.async="false"; 
       		myDocument.loadXML(xml);   
     	} 
    
    	return myDocument;
    }
