
function setRelPos(elm,pelm,x,y){while(pelm){x+=pelm.offsetLeft;y+=pelm.offsetTop;pelm=pelm.offsetParent;}
elm.style.left=x+'px';elm.style.top=y+'px';}
function show_busy(parent)
{if(parent.busy==null){parent.busy=document.createElement('img');parent.busy.src='/pics/busy.gif';parent.busy.style.position='absolute';}
document.body.appendChild(parent.busy);setRelPos(parent.busy,parent,parent.offsetWidth-parent.busy.offsetWidth,0);}
function rem_busy(parent)
{if(parent.busy!=null){document.body.removeChild(parent.busy);parent.busy=null;}}
function force_rem_busy(parent)
{if(parent.busy!=null){document.body.removeChild(parent.busy);parent.busy=null;}}
function add_iframe(parent)
{if(document.all){parent.iframe=document.createElement('iframe');parent.iframe.className='selectiframe';parent.iframe.setAttribute("src","");parent.appendChild(parent.iframe);}}
function pos_iframe(parent)
{if(document.all){parent.appendChild(parent.iframe);parent.iframe.style.width=(parent.offsetWidth+4)+'px';parent.iframe.style.height=(parent.offsetHeight+4)+'px';}}
function creerDivDeroulante()
{window.deroulante=document.createEl("div",{id:"deroulante"},['...']);addClass(deroulante,"deroulante");for(var nomf in searchSuggest.fcts_deroulante)
{deroulante[nomf]=searchSuggest.fcts_deroulante[nomf];}
deroulante.style.position='absolute';add_iframe(deroulante);}
var searchSuggest={remListeDeroulante:function()
{if(deroulante.parentNode)
{deroulante.parentNode.removeChild(deroulante);}
deroulante.visible=false;},creerChamp:function(nom,url,params)
{var inph=document.createEl('input',{type:'hidden'});if(nom&&nom!="cp")
{inph.setAttribute('name',nom);}
var inpt=document.createEl('input',{type:'text'});if(nom=="cp")
{inpt.setAttribute('name',nom);inpt.setAttribute('id',"cp");inpt.setAttribute('autocomplete','off');inpt.setAttribute('size','40');}
var ssug=document.createEl('span',{'class':'search_suggest'},[inpt,inph]);ssug.inpt=inpt;ssug.inph=inph;inpt.ssug=ssug;ssug.url=url;for(var nomf in this.fcts_inpt)
{inpt[nomf]=this.fcts_inpt[nomf];}
for(var nomf in this.fcts_sSug)
{ssug[nomf]=this.fcts_sSug[nomf];}
params=params||{};inpt.className=params.className||'';if(params.valt_size!=null){inpt.size=params.valt_size;}
ssug.valh_def=params.valh_def||'';ssug.valh_err=params.valh_err||ssug.valh_def;ssug.max=params.max||50;ssug.delai_rech=params.delai_rech||0;inpt.value=params.valt_init||'';ssug.creerEltResultat=params.creerEltResultat||this.creerEltResultat;ssug.onSurbr=params.onSurbr||this.empty;ssug.onChoix=params.onChoix||this.empty;ssug.currentValue='';ssug.currentLabel='';if(params.valh_init)
{ssug.inph.value=params.valh_init;setClass(ssug.inpt,'incorrect',params.valh_init==params.valh_err);if(0)
ssug.onSurbr(params.valh_init);}
else
{ssug.majRequeteAjax(true);}
return ssug;},empty:function(){},creerEltResultat:function(xml_node)
{var val_hid=xml_node.getAttribute('value');var val_txt=xml_node.firstChild.nodeValue;var elt=doc.createEl("div",null,[val_txt]);elt.valeur_texte=val_txt;elt.valeur_hidden=val_hid;return elt;},onLoadAjax:function(req)
{req.ssug.onLoadAjax(req);},fcts_deroulante:{timeout_blur:null,timeout_requete:null,onmouseover:function(e)
{e=xbevent(e);if(this.ssug&&e.cible.valeur_hidden)
{this.ssug.choisirItem(e.cible,false);}},onmousedown:function(e)
{e=xbevent(e);if(this.ssug&&e.cible.valeur_hidden)
{var tmp=this.ssug;this.ssug.choisirItem(e.cible,true);tmp.inpt.focus();searchSuggest.remListeDeroulante();this.ssug.onChoix(this.ssug.inpt.value,this.ssug.currentValue);document.getElementById("test_cp").value=='0';return false;}},onmouseout:function(e)
{e=xbevent(e);if(this.ssug)
{this.ssug.choisirItem(null,false);}}},fcts_inpt:{onfocus:function(e)
{e=xbevent(e);if(this.ssug!=deroulante.ssug)
{searchSuggest.remListeDeroulante();}
clearTimeout(deroulante.timeout_blur);this.ssug.remplirListeDeroulante();},onblur:function()
{if(document.getElementById("test_cp").value=='1'&&deroulante.visible)
{var ssug=this.ssug;if(ssug.resultats.length>0)
{ssug.choisirItem(ssug.resultats[0],true);ssug.onChoix(ssug.inpt.value,ssug.currentValue);}
else
{document.getElementById("cp").value="";document.getElementById("ma_ville").innerHTML="";}}
deroulante.timeout_blur=setTimeout(function()
{searchSuggest.remListeDeroulante();},100);},onkeydown:function(e)
{e=xbevent(e);var ret=true;var ssug=this.ssug;var item=ssug.item_choisi;switch(e.keyCode)
{case keyCodes.DOWN:if(deroulante.visible)
{ssug.choisirItem(ssug.getItemSuiv(),true);}
ssug.affListeDeroulante();break;case keyCodes.UP:if(deroulante.visible)
{ssug.choisirItem(ssug.getItemPrec(),true);}
ssug.affListeDeroulante();break;case keyCodes.ENTER:if(deroulante.visible)
{ssug.choisirItem(ssug.item_choisi,true);searchSuggest.remListeDeroulante();ssug.onChoix(ssug.inpt.value,ssug.currentValue);document.getElementById("test_cp").value=='0';ret=false;}
break;case keyCodes.ESC:searchSuggest.remListeDeroulante();this.value=ssug.val_entree;ret=false;break;}
return ret;},onkeypress:function(e)
{e=e||window.event;switch(e.keyCode)
{case keyCodes.ESC:case keyCodes.ENTER:return false;break;}
return true;},onkeyup:function(e)
{var ret=true;var ssug=this.ssug;e=e||window.event;if(this.name!="cp"||(this.name=="cp"&&document.getElementById("pays").value=="France"))
{switch(e.keyCode)
{case keyCodes.ESC:case keyCodes.DOWN:case keyCodes.UP:case keyCodes.ENTER:ret=false;case keyCodes.TAB:break;default:ssug.majRequeteAjax(false);break;}
return ret;}},onchange:function(e)
{this.ssug.majRequeteAjax(true);return true;}},fcts_sSug:{focus:function()
{this.inpt.focus();},resultats:[],abortReq:function()
{if(this.xhr)
{this.xhr.onSuccess=searchSuggest.empty;this.xhr=null;}},lastSend:0,sendReq:function()
{this.abortReq();var ssug=this;var sendTime=new Date().getTime()
var url=this.url+escape(this.inpt.value);var xhr=this.xhr=new Ajax.Request(url,{method:'get',onSuccess:function(req){ssug.onLoadAjax(req,sendTime);}});},majRequeteAjax:function(instantane)
{this.instantane=instantane;if(this.inpt.value!=this.val_entree)
{this.val_entree=this.inpt.value;clearTimeout(this.timeout_requete);if(this.val_entree)
{show_busy(this.inpt.parentNode);if(instantane)
{this.sendReq();}
else
{var ssug=this;this.timeout_requete=setTimeout
(function()
{ssug.sendReq();},this.delai_rech)}}
else
{this.abortReq();rem_busy(this.inpt.parentNode);this.xml_res=null;this.resultats=[];deroulante.ssug=null;this.chercherChoisirItem();this.inpt.onblur();}}
else
{this.affListeDeroulante();}},onLoadAjax:function(req,sendTime)
{rem_busy(this.inpt.parentNode);if(req.responseXML&&sendTime>this.lastSend)
{this.lastSend=sendTime;var xml_res=req.responseXML;this.res=xml_res.documentElement.getElementsByTagName('options');if(!this.res.length)
{this.res=xml_res.getElementsByTagName('options');}
if(this.res&&this.res.length==1)
{this.res=this.res[0];this.xml_res=xml_res.documentElement.getElementsByTagName('option');this.resultats=[];for(var i=0;i!=Math.min(this.max,this.xml_res.length);i++)
{this.resultats.push(this.creerEltResultat(this.xml_res[i]));}
if(this.xml_res.length>this.max)
{this.resultats.push(document.createEl('div',null,['...']));}}
deroulante.ssug=null;this.remplirListeDeroulante();this.affListeDeroulante();this.chercherChoisirItem();}},remplirListeDeroulante:function()
{deroulante.style.width='';while(deroulante.firstChild)
{deroulante.removeChild(deroulante.firstChild);}
for(var i=0;i!=this.resultats.length;i++)
{deroulante.appendChild(this.resultats[i]);}
deroulante.ssug=this;setRelPos(deroulante,this.inpt,0,this.inpt.offsetHeight);pos_iframe(deroulante);},affListeDeroulante:function()
{var visible=(!this.instantane)&&(this.resultats.length>0);if(visible)
{deroulante.visible=visible;document.body.appendChild(deroulante);if(deroulante.offsetWidth<this.inpt.offsetWidth){deroulante.style.width=this.inpt.offsetWidth+"px";}
this.instantane=false;pos_iframe(deroulante);}},choisirItem:function(item,maj_valeurs)
{for(var i=0;i!=this.resultats.length;i++)
{delClass(this.resultats[i],'surbr');}
while(item&&item.parentNode!=deroulante)
{item=item.parentNode;}
if(item)
{addClass(item,'surbr');}
if(maj_valeurs)
{if(item)
{this.inph.value=item.valeur_hidden;if(this.inpt.value!=item.valeur_texte)
{this.inpt.value=item.valeur_texte;}}
else
{this.inph.value=this.inpt.value?this.valh_err:this.valh_def;}
setClass(this.inpt,"incorrect",this.inpt.value&&!item);}
this.item_choisi=item;if(this.inph.value!=this.currentValue){this.currentValue=this.inph.value;this.onSurbr((item&&item.valeur_texte)||"",this.currentValue);if(item){this.currentLabel=item.valeur_texte;}}},getItemSuiv:function()
{var item=this.item_choisi;if(item)
{item=item.nextSibling;}
if(!item||!item.valeur_hidden)
{item=this.resultats[0];}
return item;},getItemPrec:function()
{var item=this.item_choisi;if(item)
{item=item.previousSibling;}
if(!item&&this.resultats.length>0)
{item=this.resultats[this.resultats.length-1];}
if(item&&!item.valeur_hidden)
{item=item.previousSibling;}
return item;},chercherChoisirItem:function()
{if(this.resultats)
{var val=this.inpt.value.toLowerCase();for(var i=0;i!=this.resultats.length;i++)
{var curval=this.resultats[i].valeur_texte;if(curval&&curval.toLowerCase()==val)
{break;}}
this.choisirItem(this.resultats[i],true);if(i==this.resultats.length&&this.resultats.length==1)
{this.choisirItem(this.resultats[0],false);}}},getValue:function()
{return this.currentValue;},getLabel:function()
{return this.currentLabel;},getResultNode:function(){return this.res;}}}
creerDivDeroulante();