﻿// Traduction
/*
var unite	= 'C'; // Celsius par défaut
var langue = 'FR';
var METEO_LIB_HUMIDITE = "Humidité relative";
var METEO_LIB_DIR_VENT = "Direction du vent";
var METEO_LIB_FORCE_VENT = "Force du vent";
var METEO_LIB_AUCUNE_OBS = "Pas d'observations disponibles";
var METEO_LIB_VOIR_PREV = "Voir les prévisions sur 5 jours";
var METEO_LIB_VOIR_OBS = "Voir les observations";
var METEO_LIB_AUCUNE_PREV = "Aucune prévision disponible pour cette ville.";
var METEO_LIB_PRECIPITATIONS = "Précipitations";
var METEO_LIB_ENSOLEILLEMENT = "Ensoleillement";
var METEO_LIB_LEVER_SOLEIL = "Lever du soleil";
var METEO_LIB_COUCHER_SOLEIL = "Coucher du soleil";
var METEO_LIB_MATIN = "matin";
var METEO_LIB_APREM = "après-midi";
var METEO_LIB_DATE_OBS = "Le temps relevé le {w} {D}/{M}/{Y} à {H}h{N} (heure locale)";
var METEO_LIB_DATE_PREV = "Prévisions du {w} {D}/{M}/{Y}";
var METEO_LIB_FORMAT_HEURE = "{H}h{N}";
*/

//Variables
var ICONS = [];
var map = null;
var lstMarkers = [];
var do_refresh = true;
var do_display_detail = false; // Indique si les détails doivent etre affiches après le chargement des marqueurs (utilise pour la localisation)
var pendingRequest = null;
var place_to_display = "L07157000"; // Paris par défaut
var infowindow_marker = ''; // id du marqueur dont la popup est ouverte
var is_map_moving = false;

// Constantes
var MAX_MARKERS = 300;
var ICONE_AVEC_TEMP = false; // Si true la température est affichée sous l'icone
var MAX_JOURS_PREV = 5; // Nombre maximal de jours de prevision
var POPUP_DETAIL = true; // Si true une popup de détail est affichée dans Google Map, sinon dans le html
var DEFAULT_ZOOM = 4; // Europe
var DEFAULT_LATITUDE = 49.02; // Paris par défaut
var DEFAULT_LONGITUDE = 2.53; // Paris par défaut
var LOAD_MARKERS_DELAY = 300; // Attente avant le rechargement des markers
var MAP_ICON_SIZE = 25; // Taille de l'icone sans la temperature
var MAP_ICON_TEMP_SIZE = 35; // Taille de l'icone avec temperature
var ZOOM_MIN = 4; // Au dessous de ce niveau de zoom, on ne charge pas les données
var ZOOM_MAX = 8; // Au dessus de ce niveau de zoom, on ne charge pas les données
var CORRECTION_LATITUDE = 1.00; // Valeur à ajouter à la latitude quand on centre sur une ville (si on centre exactement sur la ville, la popup peut décaler)
var CORRECTION_LONGITUDE = 0; // Valeur à ajouter à la longitude quand on centre sur une ville
var CODE_NON_RENSEIGNE = "-99";

/****************** SETTIMEOUT avec parametres *****************/
var _st = window.setTimeout;

window.setTimeout = function(fRef, mDelay) 
{ 
	if(typeof fRef == "function")
	{  
		var argu = Array.prototype.slice.call(arguments,2); 
		var f = (function(){ fRef.apply(null, argu); }); 
		return _st(f, mDelay); 
	} 
	return _st(fRef,mDelay);
}
/****************** ACCESSEURS ********************************/

function getPlaceToDisplay()
{
	return place_to_display;
}

function setPlaceToDisplay(value)
{
	  place_to_display = value;
}
	
function getUniteTemp()
{
	  return unite;
}

function changeUnite(nv_unite)
{
	  unite = nv_unite;
	  hideDetail();
	  if(ICONE_AVEC_TEMP) {
	      // Si on veut des icones avec la temperature, il faut recharger les marqueurs
	      loadMarkers(true, true);
	  } else {

			// On change les labels des marqueurs
			for (var i = 0; i < lstMarkers.length; i++) {
				var m = lstMarkers[i];
				m.changeLabel(getMarkerText(m.value.meteoid,m.value.temp,getUniteTemp()));
			}

	    // Sinon on se contente d'afficher les détails
	    displayDefaultDetail();
	  }
}

function getLangue()
{
	  return langue;
}

function changeLangue(codeLangue)
{
	  langue = codeLangue;
	  hideDetail();
	  loadMarkers(true, false);
}

/* Determine le niveau de zoom auquel s'affichera un marqueur
    en fonction de l'importance du lieu */
function getZoomFromImportance(imp)
{
    /*if (imp == '1') {
        return 0;
    } else if (imp == '2') {
        return 3;
    } else {
        return 6;
    }*/
    return 5;
}
/* Determine l'importance maximale des lieux à charger
    en fonction du niveau de zoom */
function getImportanceFromZoom(zoom)
{
    if(zoom < 4) {
        return '1';
    } else if (zoom < 5) {
        return '2';
    } else {
        return '3';
    }
    //return '3';
}
    	
/****************** CARTE ********************************/
/*
G_SATELLITE_MAP.getMinimumResolution = function () { return ZOOM_MIN };
G_SATELLITE_MAP.getMaximumResolution = function () { return ZOOM_MAX };
*/

function changeMapType() {
	if(!ICONE_AVEC_TEMP) {
		// On change la classe des labels des marqueurs
		for (var i = 0; i < lstMarkers.length; i++) {
			var m = lstMarkers[i];
			m.changeLabelClass(getMarkerClass());
		}
	}
}
                
function setupMap() {
  if (GBrowserIsCompatible()) {
       
    map = new GMap2(document.getElementById("meteo-carte"));
    map.addMapType(G_PHYSICAL_MAP);
    map.removeMapType(G_HYBRID_MAP);
    map.removeMapType(G_NORMAL_MAP);
    map.addControl(new GLargeMapControl());
    //map.addControl(new GScaleControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GOverviewMapControl());
    
    map.setMapType(G_SATELLITE_MAP);
    map.enableDoubleClickZoom();

    map.setCenter(new GLatLng(DEFAULT_LATITUDE+CORRECTION_LATITUDE, DEFAULT_LONGITUDE+CORRECTION_LONGITUDE), DEFAULT_ZOOM);
    
    GEvent.addListener(map,'zoomend',function(oldLevel, newLevel) {
        map.clearOverlays();
        is_map_moving = false;
        do_refresh = true;
        loadMarkers(false, true);
    });
		/*GEvent.addListener(map,'dragstart',function() {
				is_map_moving = true;
    });
    GEvent.addListener(map,'dragend',function() {
				is_map_moving = false;
    });*/
		GEvent.addListener(map,'movestart',function() {
				is_map_moving = true;
    });
    GEvent.addListener(map,'moveend',function() {
				is_map_moving = false;
        loadMarkers(false, true);
    });
    GEvent.addListener(map,'maptypechanged', changeMapType);
    
    //mgr = new MarkerManager(map);
    //loadMarkers(true);
    window.setTimeout(loadMarkers, 1000, true, false);
  }
}
    
/****************** DETAILS ********************************/

function hideDetail()
{
    if(POPUP_DETAIL) {
        map.closeInfoWindow();
    }
    document.getElementById("meteo-detail").style.display = 'none';
}
        
function displayDetail(idLieu)
{
    var marker = findMarker(idLieu);
    //hideDetail();
    if (marker != null) 
    {
      //map.panTo(marker.getPoint());
      GEvent.trigger(marker,'click');
      GEvent.trigger(marker,'mouseover');
      return true;
    } else {
			document.getElementById('meteo-detail-loading').style.display = 'none';    
    }
    return false; 
}

function displayDefaultDetail()
{
    return displayDetail(getPlaceToDisplay());
}

/****************** HTML DETAILS ********************************/

function getHtmlPopup(objObsLieu, objPrevLieu) {
  var html = "";
  var avecObs = (objObsLieu.meteoid != CODE_NON_RENSEIGNE);
  
  html = html + "<div id=\"meteo-popup\" class=\""+(avecObs ? '' : 'meteo_popup_sans_obs')+"\">";
  
  if(avecObs) {
		html = html + " <div id=\"meteo-popup-releve\">"+customFormatDate(getDate(objObsLieu.date), METEO_LIB_DATE_OBS)+"</div>";
		
		html = html + "<div id=\"meteo-popup-titre\">";   
		html = html + " <div id=\"meteo-popup-titre-gauche\">";
		html = html + "  <p id=\"meteo-popup-ville\">"+objObsLieu.nom+"</p>";
		html = html + "  <p id=\"meteo-popup-texte\">"+objObsLieu.meteotexte+"</p>";
		html = html + ' </div>';  
		html = html + " <div id=\"meteo-popup-obs-logo\"><img src=\"/meteo/commun/img/pictos/"+objObsLieu.meteoid+"_42.png\" /></div>";
		html = html + " <div id=\"meteo-popup-temp\">"+formateTemperature(objObsLieu.temp,getUniteTemp(), true)+"</div>";
		html = html + ' <br class="clear" />';
		html = html + '</div>';  
		
				
		html = html + ' <div id=\"meteo-popup-infos\">';
		html = html + " <ul>";
		if(objObsLieu.hum != CODE_NON_RENSEIGNE)
			html = html + " <li><label>"+METEO_LIB_HUMIDITE+"</label> "+objObsLieu.hum+"%</li>";
		if(objObsLieu.dir != CODE_NON_RENSEIGNE)
			html = html + " <li><label>"+METEO_LIB_DIR_VENT+"</label><img src=\"/meteo/commun/img/pictos/dir_vent_"+objObsLieu.dir+".gif\" class=\"meteo_dir_vent\" /></li>";
		if(objObsLieu.force != CODE_NON_RENSEIGNE)
			html = html + "<li><label>"+METEO_LIB_FORCE_VENT+"</label> "+objObsLieu.force+"km/h</li>";
		html = html + " </ul>";
		html = html + ' </div>';
		
	} else {
		html = html + "<p id=\"meteo-popup-ville\">"+objObsLieu.nom+"</p>";
		//html = html + '<br class="clear" />';
		html = html + "<div id=\"meteo-popup-pas-obs\">"+METEO_LIB_AUCUNE_OBS+"</div>";
	}
	//html = html + '<br class="clear" />';
	html = html + "<div id=\"meteo-popup-voir-prev\"><a href=\"#meteodetailhaut\" onclick=\"displayDetail('"+objObsLieu.id+"');\">"+METEO_LIB_VOIR_PREV+"</a></div>";
	
	html = html + ' </div>';
	
  return html;
}

function getHtmlDetail(objObsLieu, objPrevLieu) {

  var html = "";
  
  // Nom de la ville + pays + continent
  html = html + '<div id="meteo-detail-titre">';
  html = html + ' <span id="meteo-detail-ville">'+objObsLieu.nom+'</span>';
  html = html + ' <span id="meteo-detail-sep-ville">&lt;&lt;</span>';
  html = html + ' <span id="meteo-detail-pays">'+objObsLieu.payslib+'</span>';
  //html = html + ' <span id="meteo-detail-sep-pays">&lt;&lt;</span>';
  //html = html + ' <span id="meteo-detail-continent">'+objObsLieu.continentlib+'</span>';
  html = html + '</div>';
      
  if (objPrevLieu != null) {
      var prevList = objPrevLieu.lieu.jour;
      var lstJours = "";
      //var intDateObs = objObsLieu.date.substr(0,4)+ objObsLieu.date.substr(5,2)+ objObsLieu.date.substr(8,2);
            
      // Récupération de la liste des id des divs de chaque jour
      $(prevList).each(function(i){
          if(i < MAX_JOURS_PREV) {
              if (i > 0) {
                  lstJours = lstJours + ",";
              }
              lstJours = lstJours + '"prev' + this.id + '"';
          }
      });
      
      // Liste des onglets
      html = html + '<ul class="tabs_meteo" id="meteo-detail-onglets">';
      $(prevList).each(function(i){
          if(i < MAX_JOURS_PREV) {
              var d =  this.id;
              var dayLib = '';
              var className = '';
              
							//if (d == intDateObs) {
							if(i == 0) {
								dayLib = formatDate(getDate(d), getLangue());
								className = 'active';
							} else
								dayLib = getWeekDay(getDate(d), getLangue());
								
              html = html + "<li id=\"meteo-onglet-"+i+"\" onclick=\"setTabs('meteo-detail-onglets', 'meteo-detail-contenu-onglets', this.id, 'prev"+d+"');\" class=\""+className+"\"><a href='#tba"+d+"'>"+dayLib+"</a></li>";
          }
      });
      html = html + "</ul>";
      
      // Div de chaque jour
      html = html + "<div id=\"meteo-detail-contenu-onglets\">";
      $(prevList).each(function(i){
          if(i < MAX_JOURS_PREV) {
              var d =  this.id;
              
              html = html + "<div class=\"tabc_meteo\" id=\"prev" + d + "\"";
              if (i>0) {
                    html = html + " style='display: none;'";
              }
              html = html + "><noscript><a class=\"clr\" name=\"tba"+this.id+"\"></a></noscript><div class=\"tabc_bg_meteo\"><div class=\"tabc_bottom_meteo\"><div class=\"tabc_top_meteo\">";
              
              /*if(d == intDateObs) {
                  // Aujourd'hui
                  html = html + getHtmlDetailObservation(objObsLieu);
              } else {
                  html = html + getHtmlDetailPrevision(this);
              }*/
              html = html + getHtmlDetailPrevision(this);
              html = html + "</div></div></div></div>";
          }
      });
      html = html + "</div>";
      html = html + "<p><a href=\"#meteocarte\">"+METEO_LIB_VOIR_OBS+"</a></p>";      
  } else {
      // Pas de prévisions
      html = html + "<div id=\"meteo-detail-contenu-onglets\">";
      //html = html + getHtmlDetailObservation(objObsLieu);
      html = html + METEO_LIB_AUCUNE_PREV;
      html = html + "</div>";
  }
  
  return html;
}

function getHtmlDetailPrevision(objJourPrev) {
	var html = "";

	html = html + "<div class=\"meteo_releve_date\">"+customFormatDate(getDate(objJourPrev.id), METEO_LIB_DATE_PREV)+"</div>";

	html = html + '<div class="meteo_detail_titre">';
	html = html + " <div class=\"meteo_detail_logo\"><img src=\"/meteo/commun/img/pictos/"+objJourPrev.meteoid+"_70.png\"/></div>";
	html = html + ' <div class="meteo_detail_texte">'+objJourPrev.meteotexte+'</div>';
	html = html + ' <div class="meteo_detail_temp"><ul>';
	html = html + '  <li><label>'+METEO_LIB_MATIN+'</label>'+formateTemperature(objJourPrev.tempmat,getUniteTemp(), true)+'</li>';
	html = html + '  <li><label>'+METEO_LIB_APREM+'</label>'+formateTemperature(objJourPrev.tempapr,getUniteTemp(), true)+'</li>';
	html = html + ' </ul></div>';
	html = html + '</div>';

	html = html + '<div class="meteo_detail_infos">';
	html = html + "<ul>";
	if(objJourPrev.dir != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_DIR_VENT+"</label><img src=\"/meteo/commun/img/pictos/dir_vent_"+objJourPrev.dir+".gif\" class=\"meteo_dir_vent\" /></li>";
	if(objJourPrev.force != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_FORCE_VENT+"</label> "+objJourPrev.force+"km/h</li>";
	if(objJourPrev.precip != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_PRECIPITATIONS+"</label> "+objJourPrev.precip+"mm</li>";
	if(objJourPrev.puissol != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_ENSOLEILLEMENT+"</label> "+objJourPrev.puissol+"%</li>";
	if(objJourPrev.leversol != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_LEVER_SOLEIL+"</label> "+customFormatDate(getHour(objJourPrev.leversol),METEO_LIB_FORMAT_HEURE)+"</li>";
	if(objJourPrev.couchsol != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_COUCHER_SOLEIL+"</label> "+customFormatDate(getHour(objJourPrev.couchsol),METEO_LIB_FORMAT_HEURE)+"</li>";
	html = html + "</ul>";
	html = html + '</div>';

	return html;
}
    
function getHtmlDetailObservation(objObsLieu) {
	var html = "";

	html = html + "<div class=\"meteo_releve_date\">Relevés le <span>"+formatDateHour(getDate(objObsLieu.date), getLangue()).toLowerCase()+"</span></div>";
	html = html + '<div id="meteo-detail-obs" class="meteo_detail_titre">';
	html = html + " <div id=\"meteo-detail-obs-logo\" class=\"meteo_detail_logo\"><img src=\"/meteo/commun/img/pictos/"+objObsLieu.meteoid+"_70.png\"/></div>";
	html = html + ' <div id=\"meteo-detail-obs-texte\" class="meteo_detail_texte">'+objObsLieu.meteotexte+'</div>';
	html = html + ' <div id=\"meteo-detail-obs-temp\" class="meteo_detail_temp">'+formateTemperature(objObsLieu.temp,getUniteTemp(), true)+'</div>';
	html = html + '</div>';

	html = html + '<div id=\"meteo-detail-obs-infos\" class="meteo_detail_infos">';
	html = html + "<ul>";
	if(objObsLieu.hum != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_HUMIDITE+"</label> "+objObsLieu.hum+"%</li>";
	if(objObsLieu.dir != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_DIR_VENT+"</label><img src=\"/meteo/commun/img/pictos/dir_vent_"+objObsLieu.dir+".gif\" class=\"meteo_dir_vent\" /></li>";
	if(objObsLieu.force != CODE_NON_RENSEIGNE)
		html = html + "<li><label>"+METEO_LIB_FORCE_VENT+"</label> "+objObsLieu.force+"km/h</li>";
	html = html + "</ul>";
	html = html + '</div>';

	return html;
}

/****************** MARQUEURS ********************************/

function findMarker(markerValue)
{
	//setLog("Marqueur cherché="+markerValue);
	for (var i = 0; i < lstMarkers.length; i++) {
			//setLog("Marqueur="+lstMarkers[i].value.id);
			if (lstMarkers[i].value.id == markerValue) {
					return lstMarkers[i];
			}
	}
	return null;
}
  
function clearMarkers()
{
	//mgr.clearMarkers();
	map.clearOverlays();
	lstMarkers.length = 0;
}

/* Charge et crée les marqueurs en appelant un service de données */
function loadMarkers(displayDetails, withDelay)
{
  if(!do_refresh) return;
  
  if ( (map.getZoom() < ZOOM_MIN) || (map.getZoom() > ZOOM_MAX) ) return;
        
  // Pour eviter de charger les donnees inutilement (par exemple si l'utilisateur clique
  // plusieurs fois de suite sur le zoom), on effectue une tempo avant le chargement.
  var currRequestTag = (new Date()).valueOf();
  pendingRequest = {tag: currRequestTag, bounds: map.getBounds(), zoom: map.getZoom()};

  if(withDelay) {
    //setLog("Avec délai :" +currRequestTag);
    window.setTimeout(reallyLoadMarkers, LOAD_MARKERS_DELAY, displayDetails, currRequestTag);
  } else {
    //setLog("Sans délai :" +currRequestTag);
    reallyLoadMarkers(displayDetails, currRequestTag);
  }
}

/* Charge reellement les marqueurs sans temporisation - Uniquement appeler par loadMarkers */
function reallyLoadMarkers(displayDetails, expectedTag) {

  // Si on est sur une requete precedente, on ne la fait pas
  if(pendingRequest.tag != expectedTag) {
    //setLog("Chargement des marqueurs abandonnés : " + expectedTag);
    return;
  }
    
  document.getElementById('meteo-carte-loading').style.display = 'block';
  
	var request = GXmlHttp.create();
	  
	var bounds = pendingRequest.bounds;
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var impMax = getImportanceFromZoom(pendingRequest.zoom);
	  
  //setLog("SouthWest:(lat="+southWest.lat()+",lng="+southWest.lng()+")");
  //setLog("NorthEast:(lat="+northEast.lat()+",lng="+northEast.lng()+")");
	  
	request.open("GET", getUrlWS("observationsMeteo.ashx?langue="+getLangue()+"&swlat="+southWest.lat()+"&swlon="+southWest.lng()+"&nelat="+northEast.lat()+"&nelon="+northEast.lng()+"&impMax="+impMax+"&date="+expectedTag), true);

	request.onreadystatechange = function() {
			if (request.readyState == 4) {
				if (request.status != 200) {
					setLog("Impossible de charger les marqueurs d'observation météo. Statut: " + (request.status || "?"));
				} else {
					var objJson = xml2json.parser(request.responseText);
					
					clearMarkers();
					
					if(objJson.observations.lieu) {
						$(objJson.observations.lieu).each(function(i){
								if (i <MAX_MARKERS) {
									var marker = createMarker(this);
									lstMarkers.push(marker);

									//mgr.addMarker(marker,getZoomFromImportance(imp),17);
									map.addOverlay(marker);
									
									/*var blueIcon = new GIcon(G_DEFAULT_ICON);
									blueIcon.image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/blank.png";
									map.addOverlay(new GMarker(new GLatLng(parseFloat(this.lat), parseFloat(this.lon)), { icon:blueIcon }));
									*/
								}
						});
					}
					if(displayDetails || do_display_detail) {
							displayDefaultDetail();
							do_display_detail = false;
					}
					document.getElementById('meteo-carte-loading').style.display = 'none';
				} // fin status == 200
			} // fin readyState == 4
	}
	
	request.send(null);
}
    
function createMarker(objLieuObs) {
    
  //var point = new GPoint(parseFloat(objLieuObs.lon), parseFloat(objLieuObs.lat));
  //var marker = new GMarker(point, getIconeMeteo(objLieuObs.meteoid,objLieuObs.temp,getUniteTemp()));
  var latlng = new GLatLng(parseFloat(objLieuObs.lat), parseFloat(objLieuObs.lon));
  var icon = getIconeMeteo(objLieuObs.meteoid,objLieuObs.temp,getUniteTemp());
	var opts = { 
		"icon": icon,
		"title": "",
		"clickable": true,
		"labelClass": getMarkerClass(),
		"labelText": getMarkerText(objLieuObs.meteoid,objLieuObs.temp,getUniteTemp()),
		"labelOffset": new GSize(-1, -7)
	};
	var marker = new LabeledMarker(latlng, opts);

  var codeLieu = objLieuObs.id;

  //setLog("createMarker - nom="+objLieuObs.nom+",value="+ codeLieu+",meteo="+objLieuObs.meteoid+",coord=("+point.x+","+point.y+")")
  marker.value = objLieuObs;
  
  /************************ Souris sur une ville de la carte ************************/
	if(POPUP_DETAIL) {
		GEvent.addListener(marker, "mouseover", function() {
				// Pour éviter le clignotement si on repasse sur le meme marqueur
				if(infowindow_marker != marker.value.id) {
					// L'affichage de la popup peut provoquer le rechargement des données
					// Pour éviter cela, on utilise un flag
					do_refresh = false;
					marker.openInfoWindowHtml(getHtmlPopup(objLieuObs, null));					

					window.setTimeout(function() {
											do_refresh = true;
									}, 2000);
				}
		});
		/*GEvent.addListener(marker, "mouseout", function() {
			marker.closeInfoWindow();
		});*/
		GEvent.addListener(marker, "infowindowopen", function() {
			infowindow_marker = marker.value.id;
		});
		GEvent.addListener(marker, "infowindowclose", function() {
			infowindow_marker = '';
		});
  }
  
  /************************ Click sur une ville de la carte ************************/
  GEvent.addListener(marker, "click", function() {
		setPlaceToDisplay(codeLieu);
			
    //setLog("Click sur le marqueur "+marker.value);
    document.getElementById('meteo-detail-loading').style.display = 'block';
    
    var request = GXmlHttp.create();
		request.open("GET", getUrlWS("previsionMeteo.ashx?lieu=" + codeLieu +"&langue="+getLangue()+"&nbjour="+MAX_JOURS_PREV+"&date="+(new Date()).valueOf()), true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {

					var objLieuPrev = null;
					
					if (request.status == 200) {
							// On a reussi a charger les previsions
							objLieuPrev = xml2json.parser(request.responseText);
					}
            
					document.getElementById("meteo-detail").innerHTML = "<div id=\"meteo-detail-contenu\">"+getHtmlDetail(objLieuObs, objLieuPrev)+"</div>";
					document.getElementById("meteo-detail").style.display = 'block';
			}
			document.getElementById('meteo-detail-loading').style.display = 'none';
		} // Fin onreadystatechange
		
		request.send(null);
		
  }); // Fin OnClick
  
  return marker;
}

function getMarkerText(meteo, temperature, unite) {
	if(meteo == CODE_NON_RENSEIGNE)
		return "";
	else
		return "<img src=\"/meteo/commun/img/puce_ville_carte.gif\" width=\"5\" height=\"6\"/>"+(ICONE_AVEC_TEMP ? "" :formateTemperature(temperature,getUniteTemp(), false));
}

function getMarkerClass() {
	return (map.getCurrentMapType() == G_SATELLITE_MAP ? "meteo_map_label" : "meteo_map_label sombre");
}

function getIconeMeteo(meteo, temperature, unite) {
    var codeIcone;
    
    //setLog(meteo+"/"+temperature+"/"+unite);
    
    if(ICONE_AVEC_TEMP) {
        codeIcone = meteo+"_"+temperature+"_"+unite;
    } else {
        codeIcone = meteo;
    }
    
    if (!ICONS[codeIcone]) {
			var hauteurIcone;
			var largeurIcone;
      var icon = new GIcon();
      
      if(meteo == CODE_NON_RENSEIGNE) {
				hauteurIcone = 6;
				largeurIcone = 5;
				icon.image = "/meteo/commun/img/puce_ville_carte.gif";
				icon.iconAnchor = new GPoint(2,5);
      } else if(ICONE_AVEC_TEMP) {
        hauteurIcone = MAP_ICON_TEMP_SIZE;
				largeurIcone = MAP_ICON_TEMP_SIZE;
        //icon.image = "imageMeteo.ashx?meteo="+meteo+"&temp="+temperature+"&unite="+unite+"&largeur="+largeurIcone;
        // Si l'extension est en ashx, IE6 ne gere pas la transparence => appel direct à l'image
        icon.image = "/meteo/commun/img/pictos/cache/"+meteo+"_T"+temperature+unite+"_L"+largeurIcone+".png";
        icon.iconAnchor = new GPoint(largeurIcone/2, hauteurIcone/2);
      } else {
				icon.iconAnchor = new GPoint(0, 24);
				hauteurIcone = MAP_ICON_SIZE;
				largeurIcone = MAP_ICON_SIZE;
        icon.image = "/meteo/commun/img/pictos/"+meteo+"_42.png";
        //icon.shadow = "/meteo/commun/img/puce_ville_carte.png";
        //icon.shadowSize = new GSize(50, 50);
      }
      
      icon.infoWindowAnchor = new GPoint(largeurIcone, hauteurIcone/2);
      icon.iconSize = new GSize(largeurIcone, hauteurIcone);

      ICONS[codeIcone] = icon;
    }
    
    return ICONS[codeIcone];
}
/************************ Localisation d'un lieu *****************************/
function locatePlace(lieu)
{
	//setLog("Localisation de '"+lieu);
	
	clearMessage();

	var request = GXmlHttp.create();
	request.open("GET", getUrlWS("getLieuMeteo.ashx?lieu=" + lieu +"&langue="+getLangue()));

	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			if (request.status == 200) {
				var xmlDoc = request.responseXML;
				var nodesLieu = xmlDoc.documentElement.getElementsByTagName("lieu");
				if (nodesLieu.length > 0) {
				
					locatePlaceWithLatLng(nodesLieu[0].getAttribute("nom"), 
											nodesLieu[0].getAttribute("id"), 
											parseFloat(nodesLieu[0].getAttribute("lat")),
											parseFloat(nodesLieu[0].getAttribute("lon")));
				} else {
						setMessage("Aucune ville nommée '"+lieu+"' n'a été trouvée.");
				}
			} else {
				setLog("Echec de récupération du lieu "+lieu+".Statut="+request.status);
			}
		}
	}
	request.send(null);
}

// Localise un lieu à partir de ses coordonnees
function locatePlaceWithLatLng(lieu, idLieu, lat, lon)
{
	var corrLat = lat + CORRECTION_LATITUDE;
	var corrLon = lon + CORRECTION_LONGITUDE
	var latlng = new GLatLng(corrLat, corrLon);

	//setLog("Localisation de '"+idLieu+"("+corrLat+","+corrLon+")");

	hideDetail();
	setPlaceToDisplay(idLieu);
	do_display_detail = true;
	map.setCenter(latlng, getZoomFromImportance(3));
	window.setTimeout(function() {
			do_display_detail = false;
	}, 5000);
}

/************************ Temperature *****************************/

function formateTemperature(valeur, unite, avecLien) {
    if(valeur == CODE_NON_RENSEIGNE) return '';
    
    var result = formatTemperature(valeur, unite);
    var autreUnite = unite == 'C' ? 'F' : 'C';
      
	  if(avecLien)
			result = "<a href=\"#temp\" onClick=\"changeUnite('"+autreUnite+"');return false;\">"+result+"</a>";
    
    return result;
}
