
function AmabisAddressBlock(form_id,amabis_base_id,addressblock_base_id)
{

    this.form_id = form_id;

    document.getElementById(form_id)[amabis_base_id+'_amabisaddressblock']=this;

    this.amabis_base_id = amabis_base_id;
    this.addressblock_base_id = addressblock_base_id;

    this.ajax_url = '/formulaires/amabis_ajax.php';

    // Liste des elements

    // amabis_base_id
    //
    // _div
    // _address_input_div
    // _address_select_div
    // _postcode
    // _postcode_error
    // _search_button
    // _cancel_link_div
    // _select_link
    //
    // * _select_button
    // * _cancel_button


    // addressblock_base_id
    //
    // adresse
    // complement_adresse
    // code_postal
    // ville
    // complement_adresse_tr
    // code_postal_ville_tr
}

AmabisAddressBlock.prototype.showBlock = function(id)
{
    try {
    document.getElementById(id).style.display='block';
    } catch (e)
	{
	    //alert(id);
	}
}

AmabisAddressBlock.prototype.hideBlock = function(id)
{
    document.getElementById(id).style.display='none';
}

AmabisAddressBlock.prototype.showForm = function()
{
	this.showBlock(this.amabis_base_id+'_div');
	this.hideBlock(this.amabis_base_id+'_address_select_div');
	this.showBlock(this.amabis_base_id+'_address_input_div');
	document.getElementById(this.amabis_base_id+'_search_button').disabled=false;
}
AmabisAddressBlock.prototype.hideForm = function()
{
	this.hideBlock(this.amabis_base_id+'_div');
	this.showBlock(this.amabis_base_id+'_address_select_div');
	this.hideBlock(this.amabis_base_id+'_address_input_div');
	document.getElementById(this.amabis_base_id+'_search_button').disabled=true;
}

AmabisAddressBlock.prototype.showNext = function()
{
	this.hideBlock(this.amabis_base_id+'_div_liste_' + this.current_liste);
	this.current_liste ++;
	this.showBlock(this.amabis_base_id+'_div_liste_' + this.current_liste);
}

AmabisAddressBlock.prototype.showPrev = function()
{
	this.hideBlock(this.amabis_base_id+'_div_liste_' + this.current_liste);
	this.current_liste --;
	this.showBlock(this.amabis_base_id+'_div_liste_' + this.current_liste);
}

AmabisAddressBlock.prototype.searchAddress = function()
{
    this.showBlock(this.amabis_base_id+'_div');
    //    this.showBlock(this.amabis_base_id+'_address_select_div');
    this.hideBlock(this.amabis_base_id+'_address_select_div');
    if (document.getElementById(this.form_id)[this.amabis_base_id+'_postcode'].value!='')
	{
	    this.hideBlock(this.amabis_base_id+'_postcode_error');

	    
		var xmlo=this.getHttpRequestObject();
    
	    xmlo.open("POST",this.ajax_url,true);
	    xmlo.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	    
	    var adrform=document.getElementById(this.form_id);
	    
	    var data='adresse='+encodeURIComponent(adrform[this.amabis_base_id+'_adresse'].value)+'&code_postal='+encodeURIComponent(adrform[this.amabis_base_id+'_postcode'].value);
	    
	    var AmabisAddressBlock=this;
		//window.open(this.ajax_url + '?' + data + '&test=1', '_blank');
	    
		xmlo.onreadystatechange=function()
		{
			AmabisAddressBlock.ajaxCallback(xmlo,AmabisAddressBlock.showList);
		}
	    xmlo.send(data);
	    
	    document.getElementById(this.amabis_base_id+'_search_button').disabled=true;
	    
	}
    else
	{
	    this.showBlock(this.amabis_base_id+'_postcode_error');
	}
    
    return true;
    
}

AmabisAddressBlock.prototype.selectAddress = function()
{

    this.showBlock(this.amabis_base_id+'_div');
    this.showBlock(this.amabis_base_id+'_address_select_div');
    this.hideBlock(this.amabis_base_id+'_address_input_div');

    var moniker=null;

    //TODO : vérifier qu'il y a un element sélectionné

    var radiolist=document.getElementById(this.form_id)[this.amabis_base_id+'_moniker'];

    if (radiolist.length)
	{
	    for (var i=0; i< radiolist.length; i++)
		{
		    if (radiolist[i].checked)
			{
			    moniker=radiolist[i].value;
			}
		}
	}
    else
	{
	    // element seul
	    moniker=radiolist.value;
	}
    var xmlo=this.getHttpRequestObject();

    xmlo.open("POST",this.ajax_url,true);
    xmlo.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

    var data='moniker='+encodeURIComponent(moniker);
	
	//window.open(this.ajax_url + '?' + data + '&test=1');
    var AmabisAddressBlock=this;

    xmlo.onreadystatechange=function()
    {
	AmabisAddressBlock.ajaxCallback(xmlo,AmabisAddressBlock.showList);
    }

    if (moniker!==null)
	{
	    xmlo.send(data);
	    document.getElementById(this.amabis_base_id+'_select_button').disabled=true;
	    document.getElementById(this.amabis_base_id+'_cancel_button').disabled=true;
	}
}

AmabisAddressBlock.prototype.showList = function(xmldoc)
{

    this.showBlock(this.amabis_base_id+'_div');
    this.hideBlock(this.amabis_base_id+'_address_input_div');

	//on a clique sur valider, alors on affiche systematiquement le bouton pour pouvoir annuler...
	this.showBlock(this.amabis_base_id+'_cancel_link_div');
	
    document.getElementById(this.amabis_base_id+'_search_button').disabled=false;

    var rform=document.getElementById(this.amabis_base_id+'_address_select_div');

    var rootnode=xmldoc.getElementsByTagName('results')[0];
    
    var validation=rootnode.getAttribute("validation");
	var comment = rootnode.getAttribute("comment");
	if (validation==null)
	{
		validation = 0;
	}
    switch (parseInt(validation)) {
	
    case 1:
	case 2:

	var inhtml='';
	
	var node=rootnode.firstChild;

	//si une seule possibilite, alors... on lance direct...
	if (node.nodeName=='address')
	{
		//alert('ici');
		//alert('document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.finalizeAddress(' + xmldoc + ')');
		if (validation==1)
		{
			this.finalizeAddress(xmldoc);
		}
		else
		{
			node = node.firstChild;
			var adresse = (node.firstChild ? node.firstChild.nodeValue : "");
			node=node.nextSibling;
			var complement = (node.firstChild ? node.firstChild.nodeValue : "");
			node=node.nextSibling;
			var code_postal = (node.firstChild ? node.firstChild.nodeValue : "");
			node=node.nextSibling;
			var ville = (node.firstChild ? node.firstChild.nodeValue : "");
			
			var adresse_complete = adresse+ ' ' + complement + ' ' + code_postal + ' ' + ville;
			inhtml = comment + '<br /><br />';
			inhtml+= '<b>' + adresse_complete + '</b><br />';
			inhtml+='<input type="button" id="'+this.amabis_base_id+'_cancel_button" value="Annuler" onclick="document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.showForm();" /><input type="button" value="Accepter" id="'+this.amabis_base_id+'_select_button" onclick="document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.finalizeAddress(null,\'' + adresse + '\',\'' + complement + '\',\'' + code_postal + '\',\'' + ville + '\');" />';
		
			rform.innerHTML=inhtml;
		
			this.showBlock(this.amabis_base_id+'_address_select_div');
		}
	}
	else
	{
		var node=node.firstChild;
	
		var i=0;
		var nb_max = 10;
	

		//faire 2 cas, si une seule reponse, si plusieurs...
		while(node) 
		{
		
		    if (i==0)
			{
				this.current_liste = 0;
				inhtml+='<div id="'+this.amabis_base_id+'_div_liste_' + i + '">';
			}
			if ( (i>0) && (i%nb_max==0))
			{
				inhtml+='<br /><div style="width:120px;float:left">';
				if (i>10)
				{
					inhtml+='<a href="javascript:document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.showPrev();">< Choix précédents </a> ';
				}
				inhtml+='&nbsp;</div>';
				inhtml+='<a href="javascript:document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.showNext();">Choix suivants ></a><br /><br /></div><div style="display:none" id="'+this.amabis_base_id+'_div_liste_' + i/nb_max + '">';
			}
			inhtml+='<input type="radio" name="'+this.amabis_base_id+'_moniker" value="'+node.getAttribute('moniker')+'"';
		    if (i==0)
			{
			    inhtml+=' checked="checked"';
			}
		    inhtml+='>'+node.firstChild.nodeValue+'</input><br />';
		    node=node.nextSibling;
		    i++;
		}
			if ( (i>10) && (i%nb_max!=0) )
			{
				inhtml+='<br /><a href="javascript:document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.showPrev();">< Choix précédents </a><br /><br />';
			}
			inhtml+='</div>';
			inhtml+='<input type="button" id="'+this.amabis_base_id+'_cancel_button" value="Annuler" onclick="document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.showForm();" /><input type="button" value="Sélectionner" id="'+this.amabis_base_id+'_select_button" onclick="document.getElementById(\''+this.form_id+'\').'+this.amabis_base_id+'_amabisaddressblock.selectAddress();" />';
		
			rform.innerHTML=inhtml;
			this.showBlock(this.amabis_base_id+'_address_select_div');
	}

	
	break;
	
    /*case 2:
	// trop de résultats
	this.showBlock(this.amabis_base_id+'_div');
	this.hideBlock(this.amabis_base_id+'_address_select_div');
	this.showBlock(this.amabis_base_id+'_address_input_div');
	this.showBlock(this.amabis_base_id+'_cancel_link_div');

	alert('Votre saisie donne un trop grand nombre de résultats, merci de préciser davantage votre adresse');
	break;*/
	
    case 3:
	// mauvais choix / pb de saisie
	this.showBlock(this.amabis_base_id+'_div');
	this.hideBlock(this.amabis_base_id+'_address_select_div');
	this.showBlock(this.amabis_base_id+'_address_input_div');
	this.showBlock(this.amabis_base_id+'_cancel_link_div');

	alert('Votre saisie n\'a pas retourné de résultat valide ou a retourné aucun résultat, merci de corriger votre adresse.');

	break;

	case 0:
    case 4:
	// pb de connexion au serveur etc, il faut déverrouiller le formulaire "normal"
	alert('Un problème technique nous empêche actuellement de pouvoir vérifier votre adresse, merci de remplir les champs du formulaire le plus précisément possible.');
	
	this.cancel();
	break;
	
    default:
	// on ne doit jamais arriver ici ...
    }
    
}

AmabisAddressBlock.prototype.finalizeAddress = function(xmldoc, adresse, complement, code_postal, ville)
{
    

	

	this.hideBlock(this.amabis_base_id+'_div');
    this.hideBlock(this.amabis_base_id+'_address_select_div');
    this.hideBlock(this.amabis_base_id+'_address_input_div');
    try
	{
		document.getElementById(this.amabis_base_id+'_select_button').disabled=false;
	}
	catch(e)
	{
	}
	if (xmldoc!=null)
	{
	    var rootnode=xmldoc.getElementsByTagName('results')[0];
	    var validation=rootnode.getAttribute("validation");
		var node=rootnode.firstChild;
		// adresse
		node=node.firstChild;
		adresse = (node.firstChild ? node.firstChild.nodeValue : "");
		node=node.nextSibling;
		complement = (node.firstChild ? node.firstChild.nodeValue : "");
		node=node.nextSibling;
		code_postal = (node.firstChild ? node.firstChild.nodeValue : "");
		node=node.nextSibling;
		ville = (node.firstChild ? node.firstChild.nodeValue : "");
	}
	else
	{
		validation=1;
	}
    switch (parseInt(validation)) {
	
    case 1:
	
	// ligne 1
	
	var tform=document.getElementById(this.form_id);
	
	tform[this.addressblock_base_id+'adresse'].value=adresse;
	tform[this.addressblock_base_id+'adresse'].value=adresse;
	//on met egalement a jour le champ de saisie
	tform[this.amabis_base_id+'_adresse'].value = adresse;
	if (adresse!="")
	{
		tform[this.addressblock_base_id+'adresse'].readOnly=true;
	}
	if (tform[this.addressblock_base_id+'adresse'].onkeyup)
	    {
		tform[this.addressblock_base_id+'adresse'].onkeyup();
	    }
	
	
	tform[this.addressblock_base_id+'complement_adresse'].value=complement;
	tform[this.addressblock_base_id+'complement_adresse'].readOnly=false;
	if (tform[this.addressblock_base_id+'complement_adresse'].onkeyup)
	    {
		tform[this.addressblock_base_id+'complement_adresse'].onkeyup();
	    }
	
	tform[this.addressblock_base_id+'code_postal'].value=code_postal;
	tform[this.addressblock_base_id+'code_postal'].readOnly=true;
	if (tform[this.addressblock_base_id+'code_postal'].onkeyup)
	    {
		tform[this.addressblock_base_id+'code_postal'].onkeyup();
	    }
	
	tform[this.addressblock_base_id+'ville'].value=ville;
	tform[this.addressblock_base_id+'ville'].readOnly=true;
	if (tform[this.addressblock_base_id+'ville'].onkeyup)
	    {
		tform[this.addressblock_base_id+'ville'].onkeyup();
	    }	

	tform[this.amabis_base_id+'_postcode'].value = code_postal + ' ' + ville;
	
	document.getElementById(this.addressblock_base_id+'complement_adresse_tr').className="";
	document.getElementById(this.addressblock_base_id+'code_postal_ville_tr').className="";
	
	tform[this.amabis_base_id+'_canceled'].value=0;
	
	break;
	
    case 4:
	alert('Un problème technique nous empêche actuellement de pouvoir vérifier votre adresse, merci de remplir les champs du formulaire le plus précisément possible.');
	
	this.cancel();
	break;
	
    default:
	// pas de valeur validation ou valeur incorrecte
    }
}

AmabisAddressBlock.prototype.cancel = function()
{

    document.getElementById(this.addressblock_base_id+'complement_adresse_tr').className="";
    document.getElementById(this.addressblock_base_id+'code_postal_ville_tr').className="";
    
    var form=document.getElementById(this.form_id);

    form[this.amabis_base_id+'_canceled'].value=1;
    
	//on reprend les valeurs saisies
	var adrform=document.getElementById(this.form_id);
	    
    var adresse=adrform[this.amabis_base_id+'_adresse'].value;
	if (adresse!="")
	{
		form[this.addressblock_base_id+'adresse'].value=adresse;
	}
	if (form[this.addressblock_base_id+'adresse'].value=='Utilisez le bouton choisir -->')
	{
		form[this.addressblock_base_id+'adresse'].value = "";
	}
    form[this.addressblock_base_id+'adresse'].readOnly=false;
    if (form[this.addressblock_base_id+'adresse'].onkeyup)
	{
	    form[this.addressblock_base_id+'adresse'].onkeyup();
	}
    
    //form[this.addressblock_base_id+'complement_adresse'].value="";
    form[this.addressblock_base_id+'complement_adresse'].readOnly=false;
    if (form[this.addressblock_base_id+'complement_adresse'].onkeyup)
	{
	    form[this.addressblock_base_id+'complement_adresse'].onkeyup();
	}
    
    //form[this.addressblock_base_id+'code_postal'].value="";
    form[this.addressblock_base_id+'code_postal'].readOnly=false;
    if (form[this.addressblock_base_id+'code_postal'].onkeyup)
	{
	    form[this.addressblock_base_id+'code_postal'].onkeyup();
	}

    //form[this.addressblock_base_id+'ville'].value="";
    form[this.addressblock_base_id+'ville'].readOnly=false;
    if (form[this.addressblock_base_id+'ville'].onkeyup)
	{
	    form[this.addressblock_base_id+'ville'].onkeyup();
	}

    form[this.addressblock_base_id+'adresse'].focus();

    this.hideBlock(this.amabis_base_id+'_select_link');
    this.hideBlock(this.amabis_base_id+'_address_select_div');
    this.hideBlock(this.amabis_base_id+'_address_input_div');
    this.hideBlock(this.amabis_base_id+'_div');
}

AmabisAddressBlock.prototype.ajaxCallback = function(xmlobject,callfunc)
{
    //alert('ici');
	if (xmlobject.readyState == 4)
        {
	    if (xmlobject.status == 200)
		{
		    try {
			callfunc.call(this,xmlobject.responseXML);
		    } catch (e) {
			// en cas d'exception, principalement xmlhttprequest, on annule tout...
			
			alert('Un problème technique nous empêche actuellement de pouvoir vérifier votre adresse, merci de remplir les champs du formulaire le plus précisément possible.');
			this.cancel();
		    }
		}
	    else
		{
		    alert('Un problème technique nous empêche actuellement de pouvoir vérifier votre adresse, merci de remplir les champs du formulaire le plus précisément possible.');
		    
		    this.cancel();
		}
        }
    
}

AmabisAddressBlock.prototype.getHttpRequestObject = function()
{
         var obj;

	   try {
	    obj=new XMLHttpRequest();
	   }
	   catch(ex)
	   {
	    obj=null;
	   }
	   

          if (!obj) {
	  var servers =
          [
            "MSXML2.XMLHTTP.3.0",
            "MSXML2.XMLHTTP.6.0",
            "MSXML2.XMLHTTP.4.0",
            "MSXML2.XMLHTTP",    // v3.0
            "Microsoft.XMLHTTP"  // v2.x
          ];

 
          var server;

          for (var i=0, l=servers.length; i<l; i++)
          {
            server = servers[i];

            try
            {
              obj = new ActiveXObject(server);
              break;
            }
            catch(ex)
            {
              obj = null;
            }
          }
	  }
          return obj;
}

