(  
        function(traitement) 
        {
            // alert("auto:"+traitement);
           
            /* fonction appelée quand jQuery est disponible */
            var loader = function(jQueryAlreadyLoaded) 
            {
                /* évite d'appeler cette fonction plusieurs fois */
                if (arguments.callee._executed) return;
                arguments.callee._executed = true;

                if (jQueryAlreadyLoaded === true)
                    jQuery_wg(traitement); // on attend que le document soit
                // ready
                else {
                    jQuery_wg=jQuery.noConflict(true);
                    traitement(); // on a chargé jQuery dynamiquement, donc le
                    // document est déjà ready
                }
            }

            /* chargement de jQuery */
            if(typeof jQuery_wg !=='undefined')
            {
                /* cette page utilise déjà jQuery */
                loader(true);
            }
            else
            {
                //alert("load auto");
                var s=document.createElement('script');
                s.setAttribute('type','text/javascript');
                
                var urlJquery='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
                if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
                  var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number              
                  if (ieversion<8)
                    urlJquery='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js';
                }
                s.setAttribute('src',urlJquery);
                
                if (s.addEventListener) /* standard */
                {
                    s.addEventListener("load", loader, false);
                }
                else if ("onreadystatechange" in s) /* IE */
                {
                    s.onreadystatechange = function() 
                    {
                        if (this.readyState == 'complete' || this.readyState == 'loaded') { loader(); }
                    };
                }
                else
                {
                    window.setTimeout(loader(),2500);
                }
                document.getElementsByTagName('head')[0].appendChild(s);
            }
        }
)
(
        function()
        {

            /*----------*-------------------------*--------------------------------------------------
      ' Date     | Auteur                  | Observation
      '----------*-------------------------*--------------------------------------------------
      ' 27/05/09 | Gérald COLLEAUX         | - correction : this.image !== "_px_140_.jpg"
      '---------*-------------------------*--------------------------------------------------*/
            /* global jQuery_wg */

            function bindClickAuto($div)
            {
                jQuery_wg("p:last a", $div).click(function () {
                    var url = jQuery_wg(this).attr("href");
                    getListeAnnoncesAuto(url, $div);
                    return false;
                });
            }

            function getListeAnnoncesAuto (url, $div)
            {         
                /* initialisation du widget : rÃ©cupÃ©ration de l'url */
                if (url === "")
                {
                    url = jQuery_wg("span.widgetinfo", $div).text();
                    /*
                     * cas oÃ¹ la fonction est appelÃ©e sur un div dÃ©jÃ 
                     * initialisÃ©, ou non widget
                     */
                    if (url === "")
                    {
                        return;
                    }
                    /* sauvegarde la couleur des liens */
                    $div.data('linkcolor', jQuery_wg("span.widgetlinkcolor", $div).text());
                }

                /* Masque les rÃ©sultats prÃ©cÃ©dents */
                $div.text("Chargement en cours...");
                
                var linkcolor = $div.data('linkcolor');

                /* RÃ©cupÃ¨re la liste des annonces */
                // .load(url,bindClickAuto); <- n'est pas cross domain
                jQuery_wg.ajax({url: url, cache: true, dataType: 'jsonp',  jsonp: 'jsoncallback', jsonpCallback: 'fonctiondecallbackAutogetListeAnnoncesAuto', success: function(data)
                    {
                    //alert("auto");
                    var urlSite = data[0],
                    nbAnnonces = data[1],
                    page = url.match('page=[0-9]+') ? parseInt(url.match('page=([0-9]+)')[1], 10) : 1,
                            nb = parseInt(url.match('nb=([0-9]+)')[1], 10),
                            nbPages = Math.floor(nbAnnonces / nb),
                            i, m, text, link, photo = '', xtor_params;

                    if (nbPages < nbAnnonces / nb)
                    {
                        nbPages += 1;
                    }

                    // Titre
                    $div.empty().append('<div class="widgetLogo" style="text-align:center"><a href="http://' + urlSite + '" target="_blank">' +
                            '<img src="http://' + urlSite + '/images/widget/logoBox.gif" style="border:0" /></a>' +
                            '<div style="font-family:arial,sans-serif;padding:0 0 8px;font-weight:bold" >' +
                    'Les derni&egrave;res annonces pr&egrave;s de chez vous</div></div>');

                    // Liste des annonces
                    jQuery_wg.each(data.slice(2), function () {
                        if (this.image !== '_px_140_.jpg')
                        {
                            photo = '<img name="widgetPhotoAuto" src="' + this.image + '" width="60" style="margin: 0px 5px 5px 0; border:0; float:left" />';
                        }
                        else
                        {
                            photo = '';
                        }
                        $div.append('<p style="clear:both">' + photo + '<a href="http://' + urlSite + this.url +
                                '" target="_blank">' + this.titre + '</a><br/>' + this.texte + '</p>');

                    });
                    if (nbPages === 0)
                    {
                        $div.append("<p>D&eacute;sol&eacute;, il n'y a aucune annonce correspondant &agrave; cette recherche.</p>");
                    }

                    // Pagination
                    link = ' <a href="' + url.replace(/&page=[0-9]+/, '') + '&page=';
                    text = '<p class="widgetPagination" style="clear:both">page :' + ((page > 1) ? link + (page - 1) + '">&lt;&lt;</a>' : '');
                    // for (i = Math.max(1, page - 5), m = Math.min(Math.max(10,
                    // page + 4), nbPages); i <= m; i += 1)
                    for (i = page, m = Math.min(nbPages, page + 1); i <= m; i += 1)
                    {
                        text += (page === i) ? ' ' + i : link + i + '">' + i + '</a>';
                    }
                    text += (page < nbPages) ? link + (page + 1) + '">&gt;&gt;</a></p>' : '</p>';
                    bindClickAuto($div.append(text));

                    // Liens supplÃ©mentaires
                    xtor_params = (url.match('s=(l|r)') && url.match('s=(l|r)')[1] === 'r') ?
                            'xtor=AL-147&utm_source=recherche&utm_medium=widgetr&utm_campaign=widget' : // widget
                                // de
                                // type
                                // recherche
                                'xtor=AL-146&utm_source=liste&utm_medium=widgetl&utm_campaign=widget'; // widget
                    // de
                    // type
                    // liste
                    $div.append('<a href="http://' + urlSite + '?' + xtor_params + '" target="_blank">' +
                            '+ Consulter toutes les annonces</a><br /><a href="http://' + urlSite +
                            '/scripts/consult/passer/PAS_accueil.asp?' + xtor_params +
                    '" target="_blank">+ D&eacute;poser une annonce</a>');

                    // Style des liens
                    $div.find("a").css({"color": linkcolor, "font-weight": "bold"});
                    }});
            };

            // Lie 2 Ã©lÃ©ments 'select' pour que les options du fils dÃ©pendent
            // de l'option sÃ©lectionnÃ©e du pÃ¨re
            function dependentSelectAuto(pUrlSite, $parent, $child)
            {
                var cache = {};
                

                $parent.change(function ()
                        {
                    var rubrique = jQuery_wg(this).val(),
                    url = "http://" + pUrlSite + "/scripts/consult/widget/wgt_select.asp?rubrique=" + rubrique,
                    selectedValues = Array.prototype.slice.call(arguments), // Converti
                    // les
                    // param
                    // en
                    // tableau
                    fillSelect;
                    
                    selectedValues.shift(); // supprime l'objet event du tableau

                    fillSelect = function (data)
                    {                        
                        $child.empty().append('<option value="-1">Tous</option>');

                        jQuery_wg.each(data, function ()
                                {
                            $child.append('<option value="' + this.optionValue + '">' + this.optionDisplay + '</option>');
                                });
                        if (data.length > 0)
                        {
                            $child.parent().show(); // affiche la div contenant
                            // le <select>
                        }
                        else
                        {
                            $child.parent().hide();
                        }

                        if (selectedValues.length > 0)
                        {  // Trigger change appelÃ© avec des paramÃ¨tres
                            $child.attr("value", selectedValues[0]) // sÃ©lection
                            // de
                            // l'option
                            // du select
                            // fils
                            .trigger("change", selectedValues.slice(1));
                        }
                        else
                        {
                            $child.attr("value", "-1").change();
                        }
                    };

                    if (this.value !== "-1") // Si une valeur autre que
                        // "Tous" a Ã©tÃ© sÃ©lectionnÃ©e
                    {  // chargement des valeurs
                        if (typeof cache[rubrique] === "undefined")
                        {                          
                            jQuery_wg.ajax({url: url, cache: true, dataType: 'jsonp',  jsonp: 'callback', jsonpCallback: 'fonctiondecallbackAutodependentSelect', success: function(data)                            
                                    {                                      
                                cache[rubrique] = data;
                                fillSelect(data);
                                    }});
                        }
                        else
                        {
                            fillSelect(cache[rubrique]);
                        }
                    }
                    else
                    {
                        $child.attr("value", "-1").parent().hide().end().change();
                    }
                        });
            }

            // Positionne les select avec les valeurs choisies
            // ParamÃ¨tres : id du select le plus haut, tableau des valeurs
            function selectedValuesAuto(select_id, arrayValues)
            {
                jQuery_wg("#" + select_id).attr("value", arrayValues[0]).trigger("change", arrayValues.slice(1));
            }

            function initFormAuto(pUrlSite, searchBox, callback)
            {
                var $categorie = jQuery_wg("select[name=categorie]", searchBox);
                dependentSelectAuto(pUrlSite, $categorie, jQuery_wg("select[name=marque]", searchBox));
                dependentSelectAuto(pUrlSite, jQuery_wg("select[name=marque]", searchBox), jQuery_wg("select[name=modele]", searchBox));

                jQuery_wg.ajax({url: "http://" + pUrlSite + "/scripts/consult/widget/wgt_select.asp?rubrique=null", cache: true, dataType: 'jsonp',  jsonp: 'callback', jsonpCallback: 'fonctiondecallbackAutoinitFormAuto', success: function(data)                            
                        {
                    $categorie.empty();
                    jQuery_wg.each(data, function ()
                            {
                        $categorie.append('<option value="' + this.optionValue + '">' + this.optionDisplay + '</option>');
                            });

                    if (typeof callback === 'function')
                    {                      
                        callback(); // selectedValues(...)
                    }
                    else
                    {                      
                        $categorie.change();
                    }
                        }}
                );
            }

            function initSearchAuto(pUrlSite, searchBox)
            {
                var $div = jQuery_wg("div.widgetboxAUTO", searchBox);

                if ($div.text() === '') // searchBox dÃ©jÃ  prise en compte
                {
                    return;
                }
                else
                {
                    $div.data('linkcolor', jQuery_wg("span.widgetlinkcolor", $div).text()).empty();
                }

                // console.log('initSearchAuto : ', searchBox);

                jQuery_wg("form", searchBox).submit(function ()
                        {
                    // RÃ©cupÃ¨re les paramÃ¨tres
                    var idloc = jQuery_wg("input[name=IN_LOC_id]", searchBox).val(),
                    libloc = window.escape(jQuery_wg("input[name=IN_LOC_libelle]", searchBox).val()),
                    nb = jQuery_wg("input[name=nbOffres]", searchBox).val(),
                    categorie = jQuery_wg("select[name=categorie]", searchBox).val(),
                    marque = jQuery_wg("select[name=marque]", searchBox).val(),
                    modele = jQuery_wg("select[name=modele]", searchBox).val(),
                    rub_id = categorie,
                    params;

                    if (marque !== "-1")
                    {
                        rub_id = marque;
                        if (modele !== "-1")
                        {
                            rub_id = modele;
                        }
                    }
                    params = "mode=html&s=r&rub_id=" + rub_id + "&idloc=" + idloc + "&libloc=" + libloc + "&nb=" + nb;

                    // RÃ©cupÃ¨re la liste des annonces
                    getListeAnnoncesAuto("http://" + pUrlSite + "/widget/listebox.htm?" + params, $div);

                    // Interdit la soumission du formulaire
                    return false;
                        }
                );

                jQuery_wg(searchBox).widgetAUTOautocomplete(pUrlSite);

            }

            // fonctions requises par rechercheVilleAjaxPasser_071025.js
            var affEcranControle = function () {}, affEcranControlePapier = function () {};

            /* AutocomplÃ©tion */
            jQuery_wg.widgetAUTOautocomplete = function (searchBox, pUrlSite)
            {
                // zone de saisie
                var $input = jQuery_wg("div.zoneRechercheVille input:text", searchBox).attr("autocomplete", "off"),
                // zone d'affichage des rÃ©sultats
                $results = jQuery_wg("div.zoneSuggestionVille", searchBox),
                // message "Saisissez..."
                $message = $input.siblings().eq(0),

                msgSaisie = "Saisissez tout ou partie du nom d'une ville ou le code postal :",
                timeout = null,
                active = -1, // numÃ©ro de la ville sÃ©lectionnÃ©e
                lastKeyPressCode = null,
                prev = null,
                cache = {};

                cache.data = {};
                cache.length = 0;

                if (jQuery_wg("input[name=IN_LOC_libelle]", searchBox).val() !== '')
                {
                    $input.val(jQuery_wg("input[name=IN_LOC_libelle]", searchBox).val());
                }

                function moveSelectAUTO(step)
                {
                    var $lis = jQuery_wg("li", $results);
                    active += step;

                    if (active < 0)
                    {
                        active = 0;
                    }
                    else if (active >= $lis.size())
                    {
                        active = $lis.size() - 1;
                    }

                    $lis.removeClass("ac_over")
                    .eq(active).addClass("ac_over");
                }

                function selectItemAUTO(item)
                {
                    // console.log(item.text(),item.data('id'));
                    prev = item.text().replace(/\s\([0-9]{5}\)$/, "");
                    $input.val(prev);
                    jQuery_wg("input[name=IN_LOC_libelle]", searchBox).val(prev);
                    jQuery_wg("input[name=IN_LOC_id]", searchBox).val(item.data('id'));
                    $results.hide();
                    $message.hide();
                }

                function selectCurrentAUTO()
                {
                    var li = jQuery_wg("li", $results).eq(active);
                    if (li.is("li"))
                    {
                        selectItemAUTO(li);
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

                function dataToDomAUTO(q, data)
                {
                    var $ul = $results.empty().append("<ul/>").find("ul"),
                    reg = new RegExp('(' + q + ')', 'i');

                    jQuery_wg.each(data, function ()
                            {
                        jQuery_wg("<li>" + this.ville.replace(reg, '<strong>$1</strong>') + "</li>")
                        .data('id', this.id)
                        .appendTo($ul)
                        .hover(
                                function ()
                                {
                                    active = jQuery_wg("li", $ul).removeClass("ac_over").index(this);
                                    jQuery_wg(this).addClass("ac_over");
                                },
                                function ()
                                {
                                    jQuery_wg(this).removeClass("ac_over");
                                }
                        );
                            });
                    if (data.length > 0)
                    {
                        active = 0;
                        $results
                        .unbind('click')
                        .click(function (event)
                                {
                            var item = jQuery_wg(event.target);
                            if (item.is("li"))
                            {
                                event.stopPropagation();
                                selectItemAUTO(item);
                            }
                                })
                                .show() // affiche la liste des villes
                                .find("li").eq(active).addClass("ac_over");
                    }
                    else
                    {
                        $results.hide();
                        // efface les paramÃ¨tres de ville
                        jQuery_wg("input[name*=IN_LOC_]", searchBox).val('');
                        active = -1;
                        $message.html("Aucune ville ne correspond &agrave; cette recherche.");
                    }
                    $input.removeClass("ac_loading");
                }

                function getListeVillesAUTO($input)
                {
                    var url, q = $input.val().replace(/\s+$/, ''); // supprime
                    // les
                    // espaces
                    // en fin de
                    // chaÃ®ne
                    // ne rien faire si moins de 3 caractÃ¨res tapÃ©s, ou si
                    // nombre mais pas code postal
                    if (q.length < 3 || (!isNaN(q) && q.length !== 5))
                    {
                        return;
                    }
                    url = "http://" + pUrlSite + "/scripts/consult/widget/listeVilles.asp?q=" + q;

                    function addToCache(q, data)
                    {
                        if (cache.length > 10)
                        {
                            cache = {};
                            cache.data = {};
                            cache.length = 0;
                        }
                        cache.data[q] = data;
                        cache.length += 1;
                    }

                    // RÃ©cupÃ©ration des donnÃ©es
                    if (typeof cache.data[q] === "undefined")
                    {
                        // console.log(url);
                        
                        jQuery_wg.ajax({url: url, cache: true, dataType: 'jsonp',  jsonp: 'callback', jsonpCallback: 'fonctiondecallbackAutogetListeVillesAUTO', success: function(data)                            
                        {
                            addToCache(q, data);
                            dataToDomAUTO(q, data);
                        }});
                    }
                    else
                    {
                        dataToDomAUTO(q, cache.data[q]);
                    }
                }

                function onChangeAUTO()
                {
                    // ignore if the following keys are pressed: [del] [shift]
                    // [capslock]
                    if (lastKeyPressCode === 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32))
                    {
                        $results.hide();
                        return;
                    }
                    var v = $input.val();
                    if (v === prev)
                    {
                        return; }
                    prev = v;
                    if (v.length >= 3)
                    {
                        $input.addClass("ac_loading");
                        getListeVillesAUTO($input);
                    }
                    else
                    {
                        $input.removeClass("ac_loading");
                        $results.hide();
                    }
                }

                $input
                .click(function (event)
                        {
                    // efface les paramÃ¨tres de ville
                    jQuery_wg("input[name*=IN_LOC_]", searchBox).add(this).val('');
                    $message.text(msgSaisie).show();
                    active = -1;
                        })
                        .keydown(function (event)
                                {
                            lastKeyPressCode = event.keyCode;
                            $message.text(msgSaisie);
                            switch (lastKeyPressCode)
                            {
                            case 38: // up
                                event.preventDefault();
                                moveSelectAUTO(-1);
                                break;
                            case 40: // down
                                event.preventDefault();
                                moveSelectAUTO(1);
                                break;
                            case 9:  // tab
                            case 13: // return
                                if ($results.is(":visible"))
                                {
                                    selectCurrentAUTO();
                                    event.preventDefault();
                                }
                                else
                                {
                                    $input.blur().submit();
                                }
                                break;
                            default:
                                active = -1;
                            if (timeout)
                            {
                                clearTimeout(timeout);
                            }
                            timeout = setTimeout(onChangeAUTO, 400);
                            break;
                            }
                                });
            };

            jQuery_wg.fn.widgetAUTOautocomplete = function (url)
            {
                jQuery_wg.widgetAUTOautocomplete(this, url);
                return this;
            };


            jQuery_wg('div.widgetboxAUTO').each(function() {getListeAnnoncesAuto('', jQuery_wg(this))});      

        }
);
