// <![CDATA[

  function PostDownloadUrl(url, data, func) {
     var httpObj;
     var browser = navigator.appName;
     if(browser.indexOf("Microsoft") > -1)
        httpObj = new ActiveXObject("Microsoft.XMLHTTP");
     else
        httpObj = new XMLHttpRequest();
     httpObj.open('POST', url, true);
     httpObj.onreadystatechange = function() {
        if(httpObj.readyState == 4){
           if (httpObj.status == 200) {
              var contenttype = httpObj.getResponseHeader('Content-Type');
              if (contenttype.indexOf('xml')>-1) {
                 func(httpObj.responseXML);
              } else {
                 func(httpObj.responseText);
              }
           } else {
              func('Error: '+httpObj.status);
           }
        }
     };
     httpObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
     httpObj.send(data); 
  }
  
  function createIcon(color)
  {
			var icon = new GIcon();
			icon.image = "/img/mapmarkers/mm_20_" + color + ".png";
			icon.shadow = "/img/mapmarkers/mm_20_shadow.png";
			icon.iconSize = new GSize(12, 20);
			icon.shadowSize = new GSize(22, 20);
			icon.iconAnchor = new GPoint(6, 20);
			icon.infoWindowAnchor = new GPoint(5, 1);
			
			return icon;
	}

  function geocode(address, city, country)
  {
    geocoder.getLatLng( address+', '+city+', '+country,
      function(point) {
        if (!point) {
          alert("adresse non trouvée");
        }
        else
        {
          map.setCenter(point, 15);
        }
      });
      
      return false;
  }
  
  function acceptClick(lat, lng)
  {
	   GEvent.addListener(map, "click", function(mk, pt) {
			  if (choice != null) map.removeOverlay(choice);
			  choice = new GMarker(pt);
			  map.addOverlay(choice);
			  document.getElementById(lat).value = pt.lat();
			  document.getElementById(lng).value = pt.lng();
			  map.panTo(pt);
		   });
	}
  
  function shrink(latmin, latmax, lngmin, lngmax)
  {
    if (replay) { replay = false; return false; }
    var latc = (parseFloat(latmin) + parseFloat(latmax)) / 2;
    var lngc = (parseFloat(lngmin) + parseFloat(lngmax)) / 2;
    var zoom = map.getBoundsZoomLevel(
      new GLatLngBounds(
        new GLatLng(parseFloat(latmin),parseFloat(lngmin)),
        new GLatLng(parseFloat(latmax),parseFloat(lngmax))
      )
    );

    if (zoom > 12) zoom=12;
  
    if ((zoom > map.getZoom()) || forcedShrink)
    {
      map.setCenter(new GLatLng(latc, lngc), zoom);
    }

    justMoved = true;
    forcedShrink = false;
    setTimeout('justMoved = false;', 600);
  }
  
    function createOverlay(lat, lng, color, id)
    {
          var marker = new GMarker(new GLatLng(lat,lng),
            createIcon(color));
          GEvent.addListener(marker, "click", function(){
       	    justMoved = true;
	    clearTimeout(iwTimer);
            marker.openInfoWindowHtml('<img src="/img/lytebox/loading.gif"/>');
            url = '/getoverlay,'+id+','+map.getZoom();
            GDownloadUrl(url, function(data, responseCode) {
              if (responseCode == '200')
              {
                marker.openInfoWindowHtml(data);
	        setTimeout('justMoved = false;', 2000);
              }
            });
          });

          return marker;
    }

    function ajaxSearch (surl, furl, curl, query)
    {
      var go = true;
      
      var advsearch = (document.getElementById('advsearchon').value=='yes')?true:false;
      if ((advsearch) &&
          (document.getElementById('distancelimit').checked))
      {
        var city = document.getElementById('distanceCity').value;
        if (city.length < 2)
        {
          document.getElementById('distancelimit').checked = false;
          distanceLimit(false);
        }
        else
        {
          if (document.getElementById('distanceCityLat').value != '')
          {
            go  = true;
          }
          else
          {
            go = false;
            GDownloadUrl(curl, function(data, responseCode) {
              if (responseCode == '200')
              {
                var results = eval(data);
                if (results.cities.length == 0)
                {
                  var city = document.getElementById('distanceCity').value;
                  alert('La commune '+city+' est inconnue');
                }
                else
                {
                  if (results.cities.length == 1)
                  {
                    selectCity(
                      results.cities[0]['n'],
                      results.cities[0]['t'],
                      results.cities[0]['g']);
                  }
                  else
                  {
                    go = false;
                    t = '<ul>';
                    for (i in results.cities)
                    {
                      var city = results.cities[i];
                      citystrip = city['n'].replace(/'/g, '\\\'');
                      t += '<li>';
                      t += '<a href="#" onclick="';
                      t += 'return selectCity(\'';
                      t += citystrip;
                      t += '\',' + city['t'] + ',';
                      t += city['g'] + ')">'
                      t += city['n'];
                      t += '</a></li>';
                    }
                    t += '</ul>';
                    cityPrompt(t);
                  }
                }
              }
            });
          }
        }
      }

      if (!go) return false;
            
      if ((query.length < 3) && !advsearch) return false;
      
      if (sponso == null)
      {
        sponso = document.getElementById('mosaic').innerHTML;
      }
      document.getElementById('btnsubmit').disabled = true;
      var txtbefore = document.getElementById('btnsubmit').value;
      document.getElementById('btnsubmit').value = "Recherche en cours...";
      
      var postdata = 'query=' + encodeURIComponent(query) + '&';
      var addbox = true;
      if (advsearch)
      {
        postdata += 'advsearch=on&';
        var i=0;
        var types='';
        while (document.getElementById('type'+i))
        {
          if (document.getElementById('type'+i).checked)
          {
            if (types != '') types += '-';
            types += document.getElementById('type'+i).value;
          }
          i++;
        }
        if (types != '') postdata += 'types=' + types + '&';
        if (document.getElementById('scopelimit').checked)
        {
          var scope = document.getElementById('scope').value; 
          postdata += 'scopetype='+scope+'&scope=' +
            encodeURIComponent(
            document.getElementById('scope'+scope).options[
              document.getElementById('scope'+scope).selectedIndex].value)+'&';
          addbox = false;
        }
        if (document.getElementById('distancelimit').checked)
        {
          postdata += 'distance=' + document.getElementById('distanceKm').options[
            document.getElementById('distanceKm').selectedIndex].value+'&';
          postdata += 'dislat=' + document.getElementById('distanceCityLat').value + '&';
          postdata += 'dislng=' + document.getElementById('distanceCityLng').value + '&';
          addbox = false;
        }
        if (document.getElementById('photosonly').checked)
        {
          postdata += 'photos=1&';
        }
      }

      if (addbox)
      {
        postdata += 'latmin=' + map.getBounds().getSouthWest().lat() + '&';
        postdata += 'lngmin=' + map.getBounds().getSouthWest().lng() + '&';
        postdata += 'latmax=' + map.getBounds().getNorthEast().lat() + '&';
        postdata += 'lngmax=' + map.getBounds().getNorthEast().lng() + '&';
      }
     

      PostDownloadUrl(surl, postdata, function(data) {
        map.clearOverlays();
        var results = eval(data);
        
        if (results.items.length == 0)
        {
          t = 'Il n\'y a aucun résultat...';
          map.openInfoWindowHtml(
            map.getCenter(), t);
          document.getElementById('mosaic').innerHTML = sponso;
        }
        else
        {
          var minlat=180;
          var maxlat=-180;
          var minlng=90;
          var maxlng=-90;
          for (i in results.items)
          {
            var item = results.items[i];
            map.addOverlay(
              createOverlay(item["t"],item["g"],item["c"],item["i"])
            );
            
            if (parseFloat(item["t"]) > maxlat) maxlat = parseFloat(item["t"]);
            if (parseFloat(item["t"]) < minlat) minlat = parseFloat(item["t"]);
            if (parseFloat(item["g"]) > maxlng) maxlng = parseFloat(item["g"]);
            if (parseFloat(item["g"]) < minlng) minlng = parseFloat(item["g"]);
          }
          
          shrink(minlat, maxlat, minlng, maxlng);
          if (results.more == 'true')
          {
            t = "<div style=\"font-size:10px;width:200px\">Votre recherche comporte de nombreux autres r&eacute;sultats. Nous vous sugg&eacute;ons d'affiner vos crit&egrave;res de recherche ou la zone g&eacute;ographique...</div>";
	    minlat = parseFloat(minlat);
	    maxlat = parseFloat(maxlat);
	    minlng = parseFloat(minlng);
	    maxlng = parseFloat(maxlng);
            map.openInfoWindowHtml(new GLatLng(minlat + (maxlat-minlat)/3, map.getCenter().lng()), t);
	    iwTimer = setTimeout('map.closeInfoWindow();', 5000);
          }
          
          if (results.photos.length == 0)
          {
            document.getElementById('mosaic').innerHTML = sponso;
            t = '<br/><br/><div class="allresults"><a class="bottom" href="';
            t += furl;
            t += '">Voir la liste de tous les résultats</a></div>';
            document.getElementById('crushcontainer').innerHTML = t;
          }
          else
          {
            var t = '<h2>... et en images</h2>';
            for (i in results.photos)
            {
              t += '<div class="photothumb">';
              var photo = results.photos[i];
              t += '<a target="_blank" href="'+photo["u"]+'"/>';
              t += '<img class="thumb" src="'+photo["i"]+'" ';
              t += 'alt="'+photo["t"]+'" ';
              t += 'title="'+photo["t"]+'"/>';
              t += '</a></div>';
            }
            t += '<div class="allresults"><a class="bottom" href="';
            t += furl;
            t += '">Voir la liste de tous les résultats</a></div>';

            document.getElementById('mosaic').innerHTML = t;            }
        }
        
        document.getElementById('btnsubmit').disabled = false;
        document.getElementById('btnsubmit').value = txtbefore;
      });
    }
  
 var map = null;
 var geocoder = null;
 var choice = null;
 var sponso = null;
 var justMoved = false;
 var iwTimer = null;
 var bsTimer = null;
 var replay = false;
 var forcedShrink = false;
 
 function load() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        geocoder = new GClientGeocoder();
        afterLoad();
      }
    }

 function replaySearch()
 {
   GEvent.addListener(map, "moveend",function ()
    {
       if (justMoved)
       {
	  return false;
       }
       replay = true;
       btnsubmit = document.getElementById('btnsubmit');
       btnsubmit.click();
       return false;
    }
   );
 }
    
// ]]>

