(  
        function(traitement)
        {
            // alert("immo:"+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 immo");
                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 bindClickImmo($div)
            {
                jQuery_wg("p:last a", $div).click(function ()
                        {
                    var url = jQuery_wg(this).attr("href");
                    getListeAnnoncesImmo(url, $div);
                    return false;
                        });
            }

            function getListeAnnoncesImmo (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, bindClickImmo); <- n'est pas cross domain
                // jQuery_wg.getJSON(url + '&jsoncallback=?', function (data)
                jQuery_wg.ajax({url: url, cache: true, dataType: 'jsonp',  jsonp: 'jsoncallback', jsonpCallback: 'fonctiondecallbackgetListeAnnoncesImmo', success: function(data)
                    {
                    //alert("immo");
                    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, link, text, 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="widgetPhotoImmo" 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 class="widgetPagination" href="' + url.replace(/&page=[0-9]+/, '') + '&page=';
                    $div.append('');
                    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>';
                    bindClickImmo($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 +
                            '/immobilier-particulier-passer-annonce-immobiliere/?' + xtor_params +
                    '" target="_blank">+ D&eacute;poser une annonce</a><br /><div style="margin-top: 8px;"><a href="http://' + urlSite +
                            '/immobilier-neuf/recherche.php?' + xtor_params +
                    '" target="_blank"><img src="http://www.ouestfrance-immo.com/images/widget/new.png" border="0" align="left" /></a><a href="http://' + urlSite +
                            '/immobilier-neuf/recherche.php?' + xtor_params +
                    '" target="_blank">Immo neuf</a></div>');

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

            function initSearchImmo(pUrlSite, searchBox)
            {
                var $div = jQuery_wg("div.widgetboxIMMO", searchBox);

                if ($div.text() === '') // searchBox déjà prise en compte
                {
                    return;
                }
                else
                {
                    $div.data('linkcolor', jQuery_wg("span.widgetlinkcolor", $div).text()).empty();
                }
                // console.log('initSearchImmo : ', searchBox);
                
                jQuery_wg.ajax({url: 'http://' + pUrlSite + '/scripts/consult/widget/WGT_select.asp', cache: true, dataType: 'jsonp',  jsonp: 'callback', jsonpCallback: 'fonctiondecallbackinitSearchImmo', success: function(data)                
                        {
                    var $select = jQuery_wg('select', searchBox).empty();
                    jQuery_wg.each(data, function ()
                            {
                        $select.append('<option value="' + this.optionValue + '">' + this.optionDisplay + '</option>');
                            });
                        }});

                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(),
                    type = jQuery_wg("select", searchBox).val(),
                    params;
                    params = "mode=html&s=r&type=" + type + "&idloc=" + idloc + "&libloc=" + libloc + "&nb=" + nb;

                    // Récupère la liste des annonces
                    getListeAnnoncesImmo("http://" + pUrlSite + "/widget/listebox.htm?" + params, $div);

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

                jQuery_wg(searchBox).widgetIMMOautocomplete(pUrlSite);
            }

            /**
             * Autocomplétion
             * 
             * @param searchBox
             *            {object} div mère du formulaire de recherche
             * @param pUrlSite
             *            {string} url du site à interroger
             */
            jQuery_wg.widgetIMMOautocomplete = 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 moveSelectIMMO(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 selectItemIMMO(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 selectCurrentIMMO()
                {
                    var li = jQuery_wg("li", $results).eq(active);
                    if (li.is("li"))
                    {
                        selectItemIMMO(li);
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

                function dataToDomIMMO(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();
                                selectItemIMMO(item);
                            }
                                })
                                .show() // affiche la liste des villes
                                .find("li").eq(active).addClass("ac_over"); // sélectionne
                        // la
                        // première
                        // ville
                    }
                    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 getListeVillesIMMO($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: 'fonctiondecallbackImmogetListeVillesIMMO', success: function(data)                        
                        {
                            addToCache(q, data);
                            dataToDomIMMO(q, data);
                        }});
                    }
                    else
                    {
                        dataToDomIMMO(q, cache.data[q]);
                    }
                }

                function onChangeIMMO()
                {
                    // 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;

                    $message.text(msgSaisie);

                    if (v.length >= 3)
                    {
                        $input.addClass("ac_loading");
                        getListeVillesIMMO($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;
                            switch (lastKeyPressCode)
                            {
                            case 38: // up
                                event.preventDefault();
                                moveSelectIMMO(-1);
                                break;
                            case 40: // down
                                event.preventDefault();
                                moveSelectIMMO(1);
                                break;
                            case 9:  // tab
                            case 13: // return
                                if ($results.is(":visible"))
                                {
                                    selectCurrentIMMO();
                                    event.preventDefault();
                                }
                                else
                                {
                                    $input.blur().submit();
                                }
                                break;
                            default:
                                active = -1;
                            if (timeout)
                            {
                                clearTimeout(timeout);
                            }
                            timeout = setTimeout(onChangeIMMO, 400);
                            break;
                            }
                                });
            };

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


            jQuery_wg('div.widgetboxIMMO').each(function() {getListeAnnoncesImmo('', jQuery_wg(this))});      

        }
);
