if(typeof(bsn)=="undefined")_b=bsn={};
if(typeof(_b.Autosuggest)=="undefined")
    _b.Autosuggest={};
else 
    alert("Autosuggest is already set!");
   
_b.AutoSuggest=function(b,c){
    if(!document.getElementById)
        return 0;
    this.fld=_b.DOM.gE(b);
    if(!this.fld)
        return 0;
    this.sInp="";
    this.nInpC=0;
    this.aSug=[];
    this.iHigh=0;
    this.oP=c?c:{};
    var k,def={minchars:1,
                meth:"get",
                varname:"input",
                className:"autosuggest",
                timeout:2500,
                delay:500,
                offsety:-5,
                shownoresults:true,
                noresults:"Pas de résultat!",
                maxheight:250,
                cache:true,
                maxentries:25
               };
    for(k in def){
        if(typeof(this.oP[k])!=typeof(def[k]))
            this.oP[k]=def[k]
    }
    var p=this;
    this.fld.onkeypress=function(a){return p.onKeyPress(a)};
    this.fld.onkeyup=function(a){return p.onKeyUp(a)};
    this.fld.setAttribute("autocomplete","off")
};

_b.AutoSuggest.prototype.onKeyPress=function(a){
    var b=(window.event)?window.event.keyCode:a.keyCode;
    var c=13;
    var d=9;
    var e=27;
    var f=1;
    switch(b){
        case c:
            this.setHighlightedValue();
            f=0;
            break;
        case e:
            this.clearSuggestions();
            break
    }
    return f
};

_b.AutoSuggest.prototype.onKeyUp=function(a){ 
    var b=(window.event)?window.event.keyCode:a.keyCode;
    var c=38;
    var d=40;
    var e=1;
    switch(b){
        case c:
            this.changeHighlight(b);
            e=0;
            break;
        case d:
            this.changeHighlight(b);
            e=0;
            break;
        default:
            this.getSuggestions(this.fld.value)
    }
    return e
};

_b.AutoSuggest.prototype.getSuggestions=function(a){
    if(a==this.sInp)
        return 0;
    _b.DOM.remE(this.idAs);
    this.sInp=a;
    if(a.length<this.oP.minchars){
        this.aSug=[];
        this.nInpC=a.length;
        return 0;
    }
    var b=this.nInpC;
    this.nInpC=a.length?a.length:0;
    var l=this.aSug.length;
    //Adrien : "l" contient la taille des réponses possibles. On veut que ca recherche meme si on a déjà des réponses
    /*if(this.nInpC>b&&l&&l<this.oP.maxentries&&this.oP.cache){
        var c=[];
        for(var i=0;i<l;i++){
            if(this.aSug[i].value.substr(0,a.length).toLowerCase()==a.toLowerCase())
                c.push(this.aSug[i])
        }
        this.aSug=c;
        this.createList(this.aSug);
        return false
    }
    else
    {*/
        var d=this;
        var e=this.sInp;
        clearTimeout(this.ajID);
        this.ajID=setTimeout(function(){d.doAjaxRequest(e)},this.oP.delay)
    //}
    return false
};

_b.AutoSuggest.prototype.doAjaxRequest=function(b){
    if(b!=this.fld.value)
        return false;
    var c=this;
    if(typeof(this.oP.script)=="function")
        var d=this.oP.script(encodeURIComponent(this.sInp));
    else 
    {
        var d=this.oP.script;
        if(document.getElementById('PDT_FAM_ID1_PDT'))
            d+='&fam_pdt='+document.getElementById('PDT_FAM_ID1_PDT').options[document.getElementById('PDT_FAM_ID1_PDT').selectedIndex].value;
        if(document.getElementById('PDT_FAM_ID2_PDT'))
            d+='&ssfam_pdt='+document.getElementById('PDT_FAM_ID2_PDT').options[document.getElementById('PDT_FAM_ID2_PDT').selectedIndex].value;
        if(document.getElementById('PDT_MAR_ID_PDT'))    
            d+='&mar_pdt='+document.getElementById('PDT_MAR_ID_PDT').options[document.getElementById('PDT_MAR_ID_PDT').selectedIndex].value;
        if(document.getElementById('PDT_FAM_ID1_CONSO'))    
            d+='&fam_conso='+document.getElementById('PDT_FAM_ID1_CONSO').options[document.getElementById('PDT_FAM_ID1_CONSO').selectedIndex].value;
        if(document.getElementById('PDT_FAM_ID2_CONSO'))    
            d+='&ssfam_conso='+document.getElementById('PDT_FAM_ID2_CONSO').options[document.getElementById('PDT_FAM_ID2_CONSO').selectedIndex].value;
        if(document.getElementById('PDT_MAR_ID_CONSO'))    
            d+='&mar_conso='+document.getElementById('PDT_MAR_ID_CONSO').options[document.getElementById('PDT_MAR_ID_CONSO').selectedIndex].value;
        if(document.getElementById('reference_conso'))    
            d+='&ref_conso='+document.getElementById('reference_conso').options[document.getElementById('reference_conso').selectedIndex].value;
        if(document.getElementById('marketing'))    
            d+='&marketing_conso='+document.getElementById('marketing').value
        d+='&'+this.oP.varname+"="+encodeURIComponent(this.sInp);
    }
    if(!d)
        return false;
    var e=this.oP.meth;
    var b=this.sInp;
    var f=function(a){c.setSuggestions(a,b)};
    var g=function(a){
        //Adrien : on évite l'affichage d'erreur en prod
        //alert("AJAX error: "+a)
    };
    var h=new _b.Ajax();
    h.makeRequest(d,e,f,g)
};

_b.AutoSuggest.prototype.setSuggestions=function(a,b){
    if(b!=this.fld.value)
        return false;
    this.aSug=[];
    if(this.oP.json){
        var c=eval('('+a.responseText+')');
        for(var i=0;i<c.results.length;i++){
            this.aSug.push({'id':c.results[i].id,'value':c.results[i].value,'info':c.results[i].info})
        }
    }
    else
    {
        var d=a.responseXML;
        var e=d.getElementsByTagName('results')[0].childNodes;
        for(var i=0;i<e.length;i++){
            if(e[i].hasChildNodes())
            this.aSug.push({'id':e[i].getAttribute('id'),
                            'value':e[i].childNodes[0].nodeValue,
                            'info':e[i].getAttribute('info')
                            })
        }
    }
    this.idAs="as_"+this.fld.id;
    this.createList(this.aSug)
};

_b.AutoSuggest.prototype.createList=function(b){
    var c=this;
    _b.DOM.remE(this.idAs);
    this.killTimeout();
    if(b.length==0&&!this.oP.shownoresults)
        return false;
    var d=_b.DOM.cE("div",{id:this.idAs,className:this.oP.className});
    var e=_b.DOM.cE("div",{className:"as_corner"});
    var f=_b.DOM.cE("div",{className:"as_bar"});
    var g=_b.DOM.cE("div",{className:"as_header"});
    g.appendChild(e);
    g.appendChild(f);
    d.appendChild(g);
    var h=_b.DOM.cE("ul",{id:"as_ul"});
    for(var i=0;i<b.length;i++){
        var j=b[i].value;
        var k=j.toLowerCase().indexOf(this.sInp.toLowerCase());
        if(k >=0)
            var l=j.substring(0,k)+"<em>"+j.substring(k,k+this.sInp.length)+"</em>"+j.substring(k+this.sInp.length);
        else
            var l=j;      
        var m=_b.DOM.cE("span",{},l,true);
        if(b[i].info!=""){
            var n=_b.DOM.cE("br",{});
            m.appendChild(n);
            var kb=b[i].info.toLowerCase().indexOf(this.sInp.toLowerCase());
            if(kb >=0)
                b[i].info=b[i].info.substring(0,kb)+"<em>"+b[i].info.substring(kb,kb+this.sInp.length)+"</em>"+b[i].info.substring(kb+this.sInp.length);
            else
                b[i].info=b[i].info;      
            var o=_b.DOM.cE("small",{},b[i].info,true);
            m.appendChild(o)
        }
        var a=_b.DOM.cE("a",{href:"#"});
        var p=_b.DOM.cE("span",{className:"tl"}," ");
        var q=_b.DOM.cE("span",{className:"tr"}," ");
        a.appendChild(p);
        a.appendChild(q);
        a.appendChild(m);
        a.name=i+1;
        a.onclick=function(){
            c.setHighlightedValue();
            return false
        };
        a.onmouseover=function(){
            c.setHighlight(this.name)
        };
        var r=_b.DOM.cE("li",{},a);
        h.appendChild(r)
    }
    if(b.length==0&&this.oP.shownoresults){
        var r=_b.DOM.cE("li",{className:"as_warning"},this.oP.noresults);
        h.appendChild(r)
    }
    d.appendChild(h);
    var s=_b.DOM.cE("div",{className:"as_corner"});
    var t=_b.DOM.cE("div",{className:"as_bar"});
    var u=_b.DOM.cE("div",{className:"as_footer"});
    u.appendChild(s);
    u.appendChild(t);
    d.appendChild(u);
    var v=_b.DOM.getPos(this.fld);
    //d.style.left=v.x+"px";
    calc_left = v.x-130;
    d.style.left=calc_left+"px";
    d.style.top=(v.y+this.fld.offsetHeight+this.oP.offsety)+5+"px";
    //d.style.width=this.fld.offsetWidth+"px";
    d.style.width="300px";
    d.onmouseover=function(){c.killTimeout()};
    d.onmouseout=function(){c.resetTimeout()};
    document.getElementsByTagName("body")[0].appendChild(d);
    this.iHigh=0;
    var c=this;
    this.toID=setTimeout(function(){c.clearSuggestions()},this.oP.timeout)
};
        
_b.AutoSuggest.prototype.changeHighlight=function(a){
        var b=_b.DOM.gE("as_ul");
        if(!b)
            return false;
        var n;
        if(a==40)
            n=this.iHigh+1;
        else 
            if(a==38)
                n=this.iHigh-1;
        if(n>b.childNodes.length)
            n=b.childNodes.length;
        if(n<1)
            n=1;
        this.setHighlight(n)
};

_b.AutoSuggest.prototype.setHighlight=function(n){
    var a=_b.DOM.gE("as_ul");
    if(!a)
        return false;
    if(this.iHigh>0)
        this.clearHighlight();
    this.iHigh=Number(n);
    a.childNodes[this.iHigh-1].className="as_highlight";
    this.killTimeout()
};

_b.AutoSuggest.prototype.clearHighlight=function(){
    var a=_b.DOM.gE("as_ul");
    if(!a)
        return false;
    if(this.iHigh>0){
        a.childNodes[this.iHigh-1].className="";
        this.iHigh=0
    }
};

_b.AutoSuggest.prototype.setHighlightedValue=function(){
    if(this.iHigh){
        this.sInp=this.fld.value=this.aSug[this.iHigh-1].value;
        this.fld.focus();
        if(this.fld.selectionStart)
            this.fld.setSelectionRange(this.sInp.length,this.sInp.length);
        this.clearSuggestions();
        if(typeof(this.oP.callback)=="function")
            this.oP.callback(this.aSug[this.iHigh-1])
    }
};

_b.AutoSuggest.prototype.killTimeout=function(){
    clearTimeout(this.toID)
};

_b.AutoSuggest.prototype.resetTimeout=function(){
    clearTimeout(this.toID);
    var a=this;
    this.toID=setTimeout(function(){a.clearSuggestions()},1000)
};

_b.AutoSuggest.prototype.clearSuggestions=function(){
    this.killTimeout();
    var a=_b.DOM.gE(this.idAs);
    var b=this;
    if(a){
        var c=new _b.Fader(a,1,0,250,function(){_b.DOM.remE(b.idAs)})
    }
};

if(typeof(_b.Ajax)=="undefined")
    _b.Ajax={};

_b.Ajax=function(){
    this.req={};
    this.isIE=false
};

_b.Ajax.prototype.makeRequest=function(a,b,c,d){
    if(b!="POST")
        b="GET";
    this.onComplete=c;
    this.onError=d;
    var e=this;
    if(window.XMLHttpRequest){
        this.req=new XMLHttpRequest();
        this.req.onreadystatechange=function(){
            e.processReqChange()
        };
        this.req.open("GET",a,true);
        this.req.send(null)
    }
    else if(window.ActiveXObject)
    {
        this.req=new ActiveXObject("Microsoft.XMLHTTP");
        if(this.req){
            this.req.onreadystatechange=function(){
                e.processReqChange()
            };
            this.req.open(b,a,true);
            this.req.send()
        }
    }
};

_b.Ajax.prototype.processReqChange=function(){
    if(this.req.readyState==4){
        if(this.req.status==200){
            this.onComplete(this.req)
        }
        else
        {
            //Adrien : en prod, on évite d'afficher les erreurs
            //this.onError(this.req.status);
        }
    }
};

if(typeof(_b.DOM)=="undefined")
    _b.DOM={};

_b.DOM.cE=function(b,c,d,e){
    var f=document.createElement(b);
    if(!f)
        return 0;
    for(var a in c)
        f[a]=c[a];
    var t=typeof(d);
    if(t=="string"&&!e)
        f.appendChild(document.createTextNode(d));
    else 
        if(t=="string"&&e)
            f.innerHTML=d;
        else 
            if(t=="object")
                f.appendChild(d);
            return f
};

_b.DOM.gE=function(e){
    var t=typeof(e);
    if(t=="undefined")
        return 0;
    else if(t=="string"){
        var a=document.getElementById(e);
        if(!a)
            return 0;
        else 
            if(typeof(a.appendChild)!="undefined")
                return a;
            else 
                return 0
    }
    else if(typeof(e.appendChild)!="undefined")
            return e;
        else 
            return 0
};
    
_b.DOM.remE=function(a){
    var e=this.gE(a);
    if(!e)
        return 0;
    else if(e.parentNode.removeChild(e))
            return true;
        else 
            return 0
};

_b.DOM.getPos=function(e){
    var e=this.gE(e);
    var a=e;
    var b=0;
    if(a.offsetParent){
        while(a.offsetParent){
            b+=a.offsetLeft;
            a=a.offsetParent
        }
    }
    else 
        if(a.x)
            b+=a.x;
    var a=e;
    var c=0;
    if(a.offsetParent){
        while(a.offsetParent){
            c+=a.offsetTop;
            a=a.offsetParent
        }
    }
    else if(a.y)
            c+=a.y;
    return{x:b,y:c}
};

if(typeof(_b.Fader)=="undefined")
    _b.Fader={};
    
_b.Fader=function(a,b,c,d,e){
    if(!a)
        return 0;
    this.e=a;
    this.from=b;
    this.to=c;
    this.cb=e;
    this.nDur=d;
    this.nInt=50;
    this.nTime=0;
    var p=this;
    this.nID=setInterval(function(){p._fade()},this.nInt)
};
    
_b.Fader.prototype._fade=function(){
    this.nTime+=this.nInt;
    var a=Math.round(this._tween(this.nTime,this.from,this.to,this.nDur)*100);
    var b=a/100;
    if(this.e.filters){
        try{
            this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity=a
        }
        catch(e){
            this.e.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity='+a+')'
        }
    }
    else{
        this.e.style.opacity=b
    }
    if(this.nTime==this.nDur){
        clearInterval(this.nID);
        if(this.cb!=undefined)
            this.cb()
    }
};

_b.Fader.prototype._tween=function(t,b,c,d){return b+((c-b)*(t/d))};      
