
var oMap = Base.extend({

	constructor: function()
	{
    	this.class_name = 'oMap';

    	this.gmap = null;
    	this.bounds = null;

    	this.manager 			= new Array();
    	this.markerZoom		 	= new Array();
    	this.markerUnZoom 	 	= new Array();
    	this.markerAllZoom	 	= new Array();

    	this.polylineManager  	= new Array();
    	this.polylineInfo 	 	= new Array();
    	this.polylineDetails    = new Array();
    	this.polylineContener 	= new Array();

    	this.staticMapOptions = {
    		'sensor':'false',
    		'size':'550x400',
    		'weight':'3',
    		'shadow':'true',
    		'zoom':'15'
    	};

      this.showSearchLinks = 1;

    	this.polylineStaticManager 	= new Array();
    	this.polylineStaticInfo 	= new Array();

    	this.mgr = null;
    	this.divId = null;

    	this.clusterManager		= new Array();
    	this.egeoxmlManager		= new Array();
    	this.egeoxmlPolyline	= new Array();
    	this.marker				= new Array();

    	this.kmlManager = new Array();

    	iMap = this;

    	/* --- Element de configuration --- */
    	this.modePlanOnClick = false;
    	/* -- Cluster et Marker de StopArea -- */
    	this.cMarkerWidth = 25;
    	this.cMarkerHeight = 30;
    	this.pMarkerWidth = 25;
    	this.pMarkerHeight = 30;
    	/* -- Cluster et Marker de Site -- */
    	this.cMarkerSiteWidth = 44;
    	this.cMarkerSiteHeight = 39;
    	this.cMarkerSiteImg = "picto_info_evenementiel.png";
    	this.pMarkerSiteWidth = 25;
    	this.pMarkerSiteHeight = 34;
    	/* -- Cluster et Marker de City -- */
    	this.cMarkerCityWidth = 25;
    	this.cMarkerCityHeight = 30;
    	this.cMarkerCityImg = "pictos/marker-commune.png";
    	this.pMarkerCityWidth = 25;
    	this.pMarkerCityHeight = 30;
    	/* -- Cluster et Marker favori -- */
    	this.cMarkerFavWidth = 24;
    	this.cMarkerFavHeight = 25;
    	this.cMarkerFavImg = "pictos/fav_created.png";
    	this.pMarkerFavWidth = 24;
    	this.pMarkerFavHeight = 25;
    },

	CreateMap: function (MapCenterX, MapCenterY, Zoom, id, custom, option)
	{
    	if (GBrowserIsCompatible())
    	{
	    	iMap.divId = id;
    		var GoogleMapObj = document.getElementById(id);
	    	iMap.gmap = new GMap2(GoogleMapObj);

			if(typeof(MapCenterX) == "number" && typeof(MapCenterY) == "number" && typeof(Zoom) == "number")
			{
				this.MapCenter(MapCenterX, MapCenterY, Zoom);
			}else return false;

			this.bounds = new GLatLngBounds();

	    	if(custom=="disabled")//Map par defaut
	    	{
	    		iMap.gmap.addControl(new GLargeMapControl());
	    		iMap.gmap.addControl(new GMapTypeControl());
				function wheelZoom(a) {
					if ((a.detail || -a.wheelDelta) < 0)
						iMap.gmap.zoomIn();
					else
						iMap.gmap.zoomOut();
				}

				MapName = "NavitiaMap";
	    	}
	    	else//Map custom
	    	{
	    		iMap.gmap.addControl(new CustomGLargeMapControl(iMap.gmap), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5,5)));
	    		iMap.gmap.addControl(new CustomMapControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5,5)));
	    	}
	    	this.overviewMap = new GOverviewMapControl();
	    	iMap.gmap.addControl(this.overviewMap);
	    	Geocoder = new GClientGeocoder();
	    	iMap.gmap.enableDoubleClickZoom();
	    	iMap.gmap.enableContinuousZoom();

		  	iMap.mgr = new GMarkerManager(iMap.gmap);

		  	/* Initialisation des elements de configurations */
		  	if(option != null){
		  		if(option['modePlanOnClick'] != null)
		  			iMap.modePlanOnClick = option['modePlanOnClick'];
		  		if(option['cMarkerHeight'] != null && option['cMarkerHeight'] != '')
		  			iMap.cMarkerHeight = option['cMarkerHeight'];
		  		if(option['cMarkerWidth'] != null && option['cMarkerWidth'] != '')
		  			iMap.cMarkerWidth = option['cMarkerWidth'];
		  		if(option['pMarkerHeight'] != null && option['pMarkerHeight'] != '')
		  			iMap.pMarkerHeight = option['pMarkerHeight'];
	  			if(option['pMarkerWidth'] != null && option['pMarkerWidth'] != '')
	  				iMap.pMarkerWidth = option['pMarkerWidth'];
	  			if(option['cMarkerSiteWidth'] != null && option['cMarkerSiteWidth'] != '')
	  				iMap.cMarkerSiteWidth = option['cMarkerSiteWidth'];
	  			if(option['cMarkerSiteHeight'] != null && option['cMarkerSiteHeight'] != '')
	  				iMap.cMarkerSiteHeight = option['cMarkerSiteHeight'];
	  			if(option['cMarkerSiteImg'] != null && option['cMarkerSiteImg'] != '')
	  				iMap.cMarkerSiteImg = option['cMarkerSiteImg'];
	  			if(option['pMarkerSiteWidth'] != null && option['pMarkerSiteWidth'] != '')
	  				iMap.pMarkerSiteWidth = option['pMarkerSiteWidth'];
	  			if(option['pMarkerSiteHeight'] != null && option['pMarkerSiteHeight'] != '')
	  				iMap.pMarkerSiteHeight = option['pMarkerSiteHeight'];
	  			if(option['cMarkerCityWidth'] != null && option['cMarkerCityWidth'] != '')
	  				iMap.cMarkerCityWidth = option['cMarkerCityWidth'];
	  			if(option['cMarkerCityHeight'] != null && option['cMarkerCityHeight'] != '')
	  				iMap.cMarkerCityHeight = option['cMarkerCityHeight'];
	  			if(option['cMarkerCityImg'] != null && option['cMarkerCityImg'] != '')
	  				iMap.cMarkerCityImg = option['cMarkerCityImg'];
	  			if(option['pMarkerCityWidth'] != null && option['pMarkerCityWidth'] != '')
	  				iMap.pMarkerCityWidth = option['pMarkerCityWidth'];
	  			if(option['pMarkerCityHeight'] != null && option['pMarkerCityHeight'] != '')
	  				iMap.pMarkerCityHeight = option['pMarkerCityHeight'];
	  			if(option['cMarkerFavWidth'] != null && option['cMarkerFavWidth'] != '')
	  				iMap.cMarkerFavWidth = option['cMarkerFavWidth'];
	  			if(option['cMarkerFavHeight'] != null && option['cMarkerFavHeight'] != '')
	  				iMap.cMarkerFavHeight = option['cMarkerFavHeight'];
	  			if(option['cMarkerFavImg'] != null && option['cMarkerFavImg'] != '')
	  				iMap.cMarkerFavImg = option['cMarkerFavImg'];
	  			if(option['pMarkerFavWidth'] != null && option['pMarkerFavWidth'] != '')
	  				iMap.pMarkerFavWidth = option['pMarkerFavWidth'];
	  			if(option['pMarkerFavHeight'] != null && option['pMarkerFavHeight'] != '')
	  				iMap.pMarkerFavHeight = option['pMarkerFavHeight'];
          if(typeof(option['showSearchLinks']) != 'undefined') {
            iMap.showSearchLinks = option['showSearchLinks'];
          }
		  	}
    	}
	},

	ResizeMap: function()
	{
		this.gmap.removeControl(this.overviewMap);
    	this.gmap.checkResize();
    	this.gmap.addControl(this.overviewMap);
	},

	/* Marker HTML LocalSearch */
	CustomMarkerHtml : function(marker, html, resultat)
	{
		html.innerHTML = "<br />";
		html.innerHTML += "<div class='strong'>" + resultat.titleNoFormatting + "</div>";
		html.innerHTML += "<div>" + resultat.addressLines[0] + "</div>";
		html.innerHTML += "<div>" + resultat.addressLines[1] + "</div>";
		return html;
	},

	MapCenter: function (pf_LamberX, pf_LamberY, pi_scale)
	{
      la_Result = Lamb_WGS84(parseFloat(pf_LamberX), parseFloat(pf_LamberY));
      this.gmap.setCenter(new GLatLng(parseFloat(la_Result[1]), parseFloat(la_Result[0])), parseInt(pi_scale));
	},

	/**
	 * Centre la carte en fonction des bords d�finis dans l'attribut "bounds"
	 */
	MapCenterByBounds: function () {
		this.gmap.setCenter(this.bounds.getCenter());
	},

	/**
	 * Change le zoom de la map
	 * @param {integer} Le niveau de zoom entre 0 et 19
	 */
	MapZoom: function (zoomLevel) {
		this.gmap.setZoom(zoomLevel);
	},

	/**
	 * Zoom automatiquement en fonction des bords définis dans l'attribut "bounds"
	 */
	MapZoomByBounds: function() {
		this.gmap.setZoom(this.gmap.getBoundsZoomLevel(this.bounds));
	},

	/**
	 * Etend les bords de la map en fonction d'un objet de type GLatLng
	 * @param {GLatLng} L'objet point à passer
	 */
	ExtendBounds: function(pointObject) {
		this.bounds.extend(pointObject);
	},

	/* Construit une etiquette en fonction du nom d'arret, de ville et d'un tableau de ligne*/
	InfoContentBuilder: function(Name,CName,LineArray)
	{
		var etiquette = "<div class='info_bulle'>";
		etiquette +="<h1>"+Name;
		if(CName != "")
			etiquette += " ("+CName+")";
		etiquette +="</h1>";

		var more = false;
		if(LineArray.length > 4)
		{
			LineArray.length = 4;
			more = true;
		}

		etiquette += "<ul>";
		for(var i=0;i<LineArray.length;i++)
		{
			etiquette += "<li><span>Ligne "+LineArray[i]['LCode']+" : </span>"+LineArray[i]['LName']+"</li>";
		}
		if(more == true)
		{
			etiquette += "<li>...</li>";
		}
		etiquette += "</ul>";

		etiquette += '<p>Rechercher un itin&eacute;raire</p>';
		etiquette += '<div><a href=\"'+urlSite+'/route/vuesearch/?rappelDeparture='+encodeURIComponent(CName)+'%20-'+encodeURIComponent(Name)+'\">Depuis ce point &raquo;</a></div>';
		etiquette += '<div><a href=\"'+urlSite+'/route/vuesearch/?rappelDestination='+encodeURIComponent(CName)+'%20-'+encodeURIComponent(Name)+'\">Vers ce point &raquo;</a></div>';
		etiquette += '<div><a href=\"'+urlSite+'/route/vueHoraire/?stopAreaLibelle='+encodeURIComponent(Name)+'&cityLibelle='+encodeURIComponent(CName)+'">Voir les horaires &agrave; cet arr&ecirc;t &raquo;</a></div>';

		etiquette += '</div>';
		delete(LineArray);
		return etiquette;
	},

	/* Bind une infobulle sur un marqueur de depart ou d'arrivee */
	InfoBindContent: function(content,id,adresse,cityName)
	{
		var etiquette = "<div class='info_bulle'>";
		if(content == 'Departure')
		{
			etiquette += "<div class='info-details info-start-flag'><h1>"+adresse+" ("+cityName+")</h1>";
			etiquette += "<p>Ce point correspond \340 votre point de d\351part.</p>";
			etiquette += "</div>";
		}
		else if(content == 'Destination')
		{
			etiquette += "<div class='info-details info-stop-flag'><h1>"+adresse+" ("+cityName+")</h1>";
			etiquette += "<p>Ce point correspond \340 votre point d\'arriv\351e.</p>";
			etiquette += "</div>";
		}
		else if(content == 'wayPoint')
		{
			etiquette += "<div class='info-details info-via-flag'><h1>"+adresse+" ("+cityName+")</h1>";
			etiquette += "<p>Ce point correspond \340 votre \351tape interm\351diaire.</p>";
			etiquette += "</div>";
		}

		etiquette += '<p><a href="#" onclick="map.DeleteMarker(\''+content+'\',\''+id+'\');return false;" title="Supprimer ce point">Supprimer ce point</a></p>';

		etiquette += "</div>";
		iMap.BindInfoWindowCustom(iMap.manager[id],etiquette);
	},

	/* Cree une etiquette pour le depart arrivee laissant a l'utilisateur le choix de son point */
	InfoContentBuilderDepartureArrival: function(Link,id,adresse,cityName,codePoint)
	{
		var etiquette = "<div class='info_bulle'>";
		if((typeof(cfg)!='undefined') && (cfg.getValue('Site') != null) && (cfg.getValue('Site').getValue('area') != null)) {
      		var siteArea = cfg.getValue('Site').getValue('area');
      	}
      	else
      	{
      		var siteArea = 'limousin';
      	}
      	//siteArea = ucfirst(siteName);
		if(id=="error")
		{
			etiquette += "<p>Il est impossible de faire une recherche d'itin&eacute;raire &agrave; partir ou vers ce point. En dehors de la r&eacute;gion " + siteArea + ", seuls les points d'arr&ecirc;ts signal&eacute;s sur la carte sont cliquables.</p>";
		}
		else
		{
			etiquette += "<div class='info-details info-stop'><h1>"+adresse+" ("+cityName+")</h1>";
			etiquette += "<div>Rechercher un itin\351raire</div>";
			for(var i=0;i<Link.length;i++)
			{
				if(Link[i]=="Departure")
					etiquette +="<div><a title='Choisissez ce point comme d\351part' id='markerDepart' onclick='map.MarkerSelected(\"Departure\",\""+id+"\",\""+adresse+"\",\""+cityName+"\",\""+codePoint+"\"); return false;' href='#'>Depuis ce point &raquo;</a></div>";

				if(Link[i]=="wayPoint")
					etiquette +="<div><a title='Choisissez ce point comme \351tape interm\351diaire' id='markerWayPoint' onclick='map.MarkerSelected(\"wayPoint\",\""+id+"\",\""+adresse+"\",\""+cityName+"\",\""+codePoint+"\"); return false;' href='#'>En passant par ce point &raquo;</a></div>";

				if(Link[i]=="Destination")
					etiquette +="<div><a title='Choisissez ce point comme destination' id='markerDestination' onclick='map.MarkerSelected(\"Destination\",\""+id+"\",\""+adresse+"\",\""+cityName+"\",\""+codePoint+"\"); return false;' href='#'>Vers ce point &raquo;</a></div>";
			}
			etiquette += "</div>";
		}
		etiquette += "</div>";
		return etiquette;
	},

	/* Fonction permettant l'affichage d'une adresse */
	ShowAddress: function(address) {
		Geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					$('#msg_error_container').removeClass('hide')
					iMap.gmap.clearOverlays() ;
				} else {
					Geocoder.getLocations(
						address,
						function(response){
							if(response || response.Status.code==200)
							{
								var detailsRes = response.Placemark[0].AddressDetails;
								address = "";
								if(detailsRes.Accuracy>=4)
								{
									address += detailsRes.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
									address += ", ";
									address += detailsRes.Country.CountryName;
									$('#msg_error_container').addClass('hide')
									iMap.gmap.setCenter(point, 13);
									var marker = new GMarker(point);
									iMap.gmap.addOverlay(marker);
									marker.openInfoWindowHtml(address);
								}
								else
								{
									$('#msg_error_container').removeClass('hide')
									iMap.gmap.clearOverlays() ;
								}
							}
						}
					)

				}
			}
		)
	},


	/* Fonction gerant les clics de depart, d'arrivee et de l'etape intermediaire */
	InitMarkerListener: function()
	{
		msw = new MswStreetNetwork();
		iMap.manager['X1']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['X1'].hide();
		iMap.manager['X2']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['X2'].hide();
		iMap.manager['Xi']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['Xi'].hide();
		iMap.manager['error']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['error'].hide();

		GEvent.addListener(iMap.gmap,'click',function(overlay,latlng){

			if($('#IsClick').val() == "1")
			{
				if(latlng != null)
				{
					var lat = latlng.lat();
					var lon = latlng.lng();
					var point = new GLatLng(lat,lon);

					var iTp = new oTp();

					var result = WGS_ED50(lon,lat);

					msw.getAdressByXY(parseFloat(result[0]),parseFloat(result[1]),

						function(objet_retourne,param)
						{
							var codePoint = result[0]+"-"+result[1];

							var lat = latlng.lat();
							var lon = latlng.lng();
							var point = new GLatLng(lat,lon);

							if(objet_retourne.status == 'error')
							{
								iMap.manager['error'].setLatLng(point);
								iMap.manager['error'].show();
								iMap.manager['error'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival([],'error','','',codePoint));
							}
							else
							{
								var cityName = iTp.htmlentities(objet_retourne.place.city.trim());
								var adresse = iTp.htmlentities(objet_retourne.adress.trim());
								var idx = iTp.htmlentities(objet_retourne.place.idx);
								var typePoint = iTp.htmlentities(objet_retourne.place.type);

								iMap.manager['error'].hide();

								if($('#DepartureCityName').attr('rel') == 0 && $('#DestinationCityName').attr('rel') == 0 )
								{
									tab = new Array('Departure','wayPoint','Destination');

									iMap.manager['X1'].setLatLng(point);
									iMap.manager['X1'].show();
									iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
								}
								else if($('#DepartureCityName').attr('rel') != 0 ^ $('#DestinationCityName').attr('rel') != 0 )
								{
									if($('#DepatureCityName').attr('rel') != 0)
										tab = new Array('Destination');
									if($('#DestinationCityName').attr('rel') != 0)
										tab = new Array('Departure');

									if(iMap.manager['X1'].isHidden())
									{
										iMap.manager['X1'].setLatLng(point);
										iMap.manager['X1'].show();
										iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
									}
									else
									{
										iMap.manager['X2'].setLatLng(point);
										iMap.manager['X2'].show();
										iMap.manager['X2'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X2',adresse,cityName,codePoint));
									}
								}
								else if($('#wayPointCityName').attr('rel') == 0)
								{
									tab = new Array('wayPoint');

									iMap.manager['Xi'].setLatLng(point);
									iMap.manager['Xi'].show();
									iMap.manager['Xi'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'Xi',adresse,cityName,codePoint));
								}
							}
						},'json'
					);
				}
			}
		});
	},


	/* InitClusterMarkerListener via StopAreaExternalCode */
	InitClusterMarkerListener: function(marker,ExternalCode)
	{
		iMap.manager['X1']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['X1'].hide();
		iMap.manager['X2']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['X2'].hide();
		iMap.manager['Xi']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['Xi'].hide();
		iMap.manager['error']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['error'].hide();

		if($('#IsClick').val() == "1")
		{
			if(marker != null && ExternalCode != null)
			{
				var latlng = marker.getPoint();
				var lat = latlng.lat();
				var lon = latlng.lng();
				var point = new GLatLng(lat,lon);
				var result = WGS_ED50(lon,lat);
				var codePoint = result[0]+"-"+result[1];

				$.getJSON(urlSite+"/InfoWindow/maker",{StopAreaExternalCode:ExternalCode, showSearchLinks: iMap.showSearchLinks},
					function(data)
					{
						if(data == '')
						{
							iMap.manager['error'].setLatLng(point);
							iMap.manager['error'].show();
							iMap.manager['error'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival([],'error','','',codePoint));
						}
						else
						{
							/* InfoStoparea */
							var Name = "";
							/* InfoCity */
							var CName= "" ;

							var k=0;
				 			//==> Parseur JSON
				 			$.each(data,function(i,item){
					 			if(i!='LineArray')
					 			{
					 				/* InfoStopAea */
					 				Name = item[k].Name;
					 				/* InfoCity */
					 				CName= item[k].City.Name;
					 			}
					 			k++;
				 			});

				 			var iTp = new oTp();
				 			var cityName = iTp.htmlentities(CName);
							var adresse = iTp.htmlentities(Name);

							iMap.manager['error'].hide();


							if($('#DepartureCityName').attr('rel') == 0 && $('#DestinationCityName').attr('rel') == 0 )
							{
								if($('#wayPointCityName').length == 0) {
									tab = new Array('Departure','Destination');
								} else {
									tab = new Array('Departure','wayPoint','Destination');
								}


								iMap.manager['X1'].setLatLng(point);
								iMap.manager['X1'].show();
								iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
							}
							else if($('#DepartureCityName').attr('rel') != 0 ^ $('#DestinationCityName').attr('rel') != 0 )
							{
								if($('#wayPointCityName').length == 0) {
									if($('#DepatureCityName').attr('rel') != 0)
										tab = new Array('Destination');
									if($('#DestinationCityName').attr('rel') != 0)
										tab = new Array('Departure');
								} else {
									if($('#DepatureCityName').attr('rel') != 0)
										tab = new Array('wayPoint','Destination');
									if($('#DestinationCityName').attr('rel') != 0)
										tab = new Array('Departure','wayPoint');
								}

								if(iMap.manager['X1'].isHidden())
								{
									iMap.manager['X1'].setLatLng(point);
									iMap.manager['X1'].show();
									iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
								}
								else
								{
									iMap.manager['X2'].setLatLng(point);
									iMap.manager['X2'].show();
									iMap.manager['X2'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X2',adresse,cityName,codePoint));
								}
							}
							else if($('#wayPointCityName').length > 0 && $('#wayPointCityName').attr('rel') == 0)
							{
								tab = new Array('wayPoint');

								iMap.manager['Xi'].setLatLng(point);
								iMap.manager['Xi'].show();
								iMap.manager['Xi'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'Xi',adresse,cityName,codePoint));
							}
						}
					},'json'
				);
			}
		}
	},

	/* InitClusterCityMarkerListener via Libelle */
	InitClusterCityMarkerListener: function(marker,cityName)
	{
		if(marker != null && cityName != null)
		{
			iMap.manager['X1']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['X1'].hide();
			iMap.manager['X2']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['X2'].hide();
			iMap.manager['Xi']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['Xi'].hide();
			iMap.manager['error']=iMap.CreateMarkerSelection(0,0,''); iMap.manager['error'].hide();

			var latlng = marker.getPoint();
			var lat = latlng.lat();
			var lon = latlng.lng();
			var point = new GLatLng(lat,lon);
			var result = WGS_ED50(lon,lat);
			var codePoint = result[0]+"-"+result[1];

			adresse = '';

			iMap.manager['error'].hide();

			if($('#DepartureCityName').attr('rel') == 0 && $('#DestinationCityName').attr('rel') == 0 )
			{
				tab = new Array('Departure','wayPoint','Destination');

				iMap.manager['X1'].setLatLng(point);
				iMap.manager['X1'].show();
				iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
			}
			else if($('#DepartureCityName').attr('rel') != 0 ^ $('#DestinationCityName').attr('rel') != 0 )
			{
				if($('#DepatureCityName').attr('rel') != 0)
					tab = new Array('wayPoint','Destination');
				if($('#DestinationCityName').attr('rel') != 0)
					tab = new Array('Departure','wayPoint');

				if(iMap.manager['X1'].isHidden())
				{
					iMap.manager['X1'].setLatLng(point);
					iMap.manager['X1'].show();
					iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
				}
				else
				{
					iMap.manager['X2'].setLatLng(point);
					iMap.manager['X2'].show();
					iMap.manager['X2'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X2',adresse,cityName,codePoint));
				}
			}
			else if($('#wayPointCityName').attr('rel') == 0)
			{
				tab = new Array('wayPoint');

				iMap.manager['Xi'].setLatLng(point);
				iMap.manager['Xi'].show();
				iMap.manager['Xi'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'Xi',adresse,cityName,codePoint));
			}
		}
	},

	MarkerSelected: function(rappelMarker,id,adresse,cityName,codePoint)
	{
		var rappelEntrypoint = '';

		if (adresse != '')
			rappelEntrypoint += adresse + " " ;
		if (cityName != '')
			rappelEntrypoint += "(" + cityName + ")";

		if(rappelMarker == "wayPoint")
		{
			if(iMap.manager['Xi'].isHidden())
			{
				id = 'Xi';
				iMap.manager['Xi'] = iMap.manager['X1'];
				iMap.manager['X1'].hide();
			}
			ShowWayPoint();
			$('#wayPointRappelArea').removeClass('hide');
			$('#wayPoint').attr('rel',$('#wayPoint').val());
			$('#wayPoint').val(adresse);
		}
		else
		{
			$('#'+rappelMarker+'Libelle').attr('rel',$('#'+rappelMarker+'Libelle').val());
			$('#'+rappelMarker+'Libelle').val(adresse);
			$('#'+rappelMarker).val(codePoint);
		}

		$('#'+rappelMarker+'Rappel').empty().append(rappelEntrypoint);
		$('#'+rappelMarker+'CityName').attr('rel',$('#'+rappelMarker+'CityName').val());
		$('#'+rappelMarker+'CityName').val(cityName);
		$('#'+rappelMarker+'Selected').empty().append('<a href="#" id="'+rappelMarker+'LinkSelected" onclick="map.DeleteMarker(\''+rappelMarker+'\',\''+id+'\');return false;" title="Supprimer la s&eacute;lection">Supprimer la s&eacute;lection &raquo;</a>');

		//Et on modifie l'info bulle
		iMap.InfoBindContent(rappelMarker,id,adresse,cityName);

		if(rappelMarker == "Departure")
			iMap.manager[id].setImage(urlImage+'icon-start-flag.gif');
		else if(rappelMarker == "Destination")
			iMap.manager[id].setImage(urlImage+'icon-stop-flag.gif');
		else if(rappelMarker == "wayPoint")
			iMap.manager[id].setImage(urlImage+'icon-via-flag.gif');

		if( typeof(FormFunction) == 'function' )
			FormFunction(rappelMarker);

		iMap.manager[id].closeExtInfoWindow(iMap.gmap);

	},

	/* Efface un Marker depart arrivee */
	DeleteMarker: function(rappelMarker,id)
	{
		iMap.manager[id].closeExtInfoWindow(iMap.gmap);
		iMap.manager[id].hide();

		if(rappelMarker=='wayPoint')
		{
			//$('#wayPointRappelArea').addClass('hide');

			$('#'+rappelMarker+'Rappel').empty();
			$('#'+rappelMarker+'LinkSelected').remove();

			if( $('#'+rappelMarker).attr('rel') != '0')
			{
				$('#'+rappelMarker).val($('#'+rappelMarker).attr('rel'));
				$('#'+rappelMarker).attr('rel','0');
			}

			if( $('#'+rappelMarker+'CityName').attr('rel') != '0')
			{
				$('#'+rappelMarker+'CityName').val($('#'+rappelMarker+'CityName').attr('rel'));
				$('#'+rappelMarker+'CityName').attr('rel','0');
			}

			//$('#'+rappelMarker).val('');

			if( typeof(HideWayPoint) == 'function' )
				HideWayPoint();
		}
		else
		{
			$('#'+rappelMarker+'Rappel').empty();
			$('#'+rappelMarker+'Libelle').val($('#'+rappelMarker+'Libelle').attr('rel'));
			$('#'+rappelMarker+'Libelle').attr('rel','0');
			$('#'+rappelMarker+'CityName').val($('#'+rappelMarker+'CityName').attr('rel'));
			$('#'+rappelMarker+'CityName').attr('rel','0');
			//$('#'+rappelMarker).val('');
			$('#'+rappelMarker+'LinkSelected').remove();
		}
	},

	/* Initialise un marker */
	CreateMarkerSelection: function(CoordX,CoordY,etiquette)
	{
		var point = new GLatLng(CoordX,CoordY);
		var icon  = new GIcon();
			icon.image 			  = urlImage+'icon-stop.gif';
			icon.iconSize 		  = new GSize(16,16);
			icon.iconAnchor 	  = new GPoint(8,16);
			icon.infoWindowAnchor = new GPoint(8,0);
		var marker = new GMarker(point,{icon:icon});
		iMap.gmap.addOverlay(marker);
		marker.bindInfoWindow(etiquette);
		//iMap.BindInfoWindowCustom(marker,etiquette);
		return marker;
	},

	/* PLAN DU RESEAU (CARTE INTERACTIVE) */
	GetInfoWindowPlan: function(externalCode,marker)
	{

 		//InfoStoparea
		var Idx = "" ;
		var Id = "";
		var ExternalCode = "";
		var Name = "";
		var CoordX = "";
		var CoordY = "";
		//InfoCity
		var CIdx = "";
		var CId= "" ;
		var CName= "" ;
		var CCityCode = "";
		var CExternalCode = "";
		var CCode = "";
		//InfoLines
		LineArray = new Array();
		Line = new Array();
		var LExternalCode = "";
		var LName = "";
		var LIdx = "";
		var LId= "";
		var LCode = "";
		var LNetworkExternalCode = "";
		var LNetwork = "";

 		$.getJSON(urlSite+"/InfoWindow/maker",{StopAreaExternalCode:externalCode, showSearchLinks: iMap.showSearchLinks},function(data){
 			var k=0;
 			//==> Parseur JSON
 			$.each(data,function(i,item){
	 			if(i=='LineArray')
	 			{
	 				var longueur = item.length;
	 				/* InfoLines */
	 				for(var j=0;j<longueur;j++)
	 				{
	 					LineArray[j]=new Array();
	 					LineArray[j]["LExternalCode"] = item[j].ExternalCode;
	 					LineArray[j]["LName"] = item[j].Name;
	 					LineArray[j]["LIdx"] = item[j].Idx;
	 					LineArray[j]["LId"] = item[j].Id;
	 					LineArray[j]["LCode"] = item[j].Code;
	 					LineArray[j]["LNetworkExternalCode"] = item[j].NetworkExternalCode;
	 					LineArray[j]["LNetwork"] = item[j].Network;
	 				}
	 				/**/
	 			}
	 			else
	 			{
	 				/* InfoStopAea */
	 				Idx = item[k].Idx;
	 				Id = item[k].Id;
	 				ExternalCode = item[k].ExternalCode;
	 				Name = item[k].Name;
	 				CoordX = item[k].Coord.CoordX;
	 				CoordY = item[k].Coord.CoordY;
	 				/* InfoCity */
	 				CIdx = item[k].City.Idx;
	 				CId= item[k].City.Id;
	 				CName= item[k].City.Name;
	 				CCityCode = item[k].City.CityCode;
	 				CExternalCode = item[k].City.ExternalCode;
	 				CCode = item[k].City.Idx;
	 			}
	 			k++;
 			});// ==> Fin parseur JSON
 			marker.openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilder(Name,CName,LineArray));
 		});
	},

	//InfoBulle VeloPlus
	VeloInfoWindowContentBuilder: function(infos)
	{
		var content = ''
		var infosTab = new Array();
		if (infos!='')
		{
			infosTab = infos.split('|');
			if(infosTab.length==3)
			{
				content += "<div class='velo_plus'>";
				var libelle = infosTab[0].split(' - ');
				content += "<div><strong>Station "+libelle[0]+"</strong></div>";
				content += "<div>Bornes disponibles : "+infosTab[1]+"</div>";
				if(infosTab[2]=='1')
					content +="<div>Terminal de paiement : oui</div>";
				else if (infosTab[2]=='0')
					content += "<div>Terminal de paiement : non</div>";
				content += "</div>";
			}
		}
		return content;
	},

	GetInfoWindowMarker: function(marker,infos)
	{
		marker.openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.VeloInfoWindowContentBuilder(infos));
	},

	GetInfoWindowSite: function(externalCode,mapObj,marker){
		$.getJSON(urlSite+"/InfoWindow/maker",{SiteExternalCode:externalCode, showSearchLinks: iMap.showSearchLinks},function(data){
			marker.openExtInfoWindow(mapObj,"custom_info_window",data);
		});
	},

	GetInfoWindowSiteSearch: function(externalCode,mapObj,marker){

		if(marker != null && externalCode != null)
		{
			var latlng = marker.getPoint();
			var lat = latlng.lat();
			var lon = latlng.lng();
			var point = new GLatLng(lat,lon);
			var result = WGS_ED50(lon,lat);
			var codePoint = result[0]+"-"+result[1];

			$.getJSON(urlSite+"/InfoWindow/maker",{SiteExternalCode:externalCode,Output:"json", showSearchLinks: iMap.showSearchLinks},
				function(data)
				{
					if(typeof(data) != 'object' || data.status == 'false' || data == null)
					{
						iMap.manager['error'].setLatLng(point);
						iMap.manager['error'].show();
						iMap.manager['error'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival([],'error','','',codePoint));
					}
					else
					{
			 			var Name = data.Name;
				 		var CName= data.City.Name;

			 			var iTp = new oTp();
			 			var cityName = iTp.htmlentities(CName);
						var adresse = iTp.htmlentities(Name);

						iMap.manager['error'].hide();


						if($('#DepartureCityName').attr('rel') == 0 && $('#DestinationCityName').attr('rel') == 0 )
						{
							tab = new Array('Departure','wayPoint','Destination');

							iMap.manager['X1'].setLatLng(point);
							iMap.manager['X1'].show();
							iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
						}
						else if($('#DepartureCityName').attr('rel') != 0 ^ $('#DestinationCityName').attr('rel') != 0 )
						{
							if($('#DepatureCityName').attr('rel') != 0)
								tab = new Array('wayPoint','Destination');
							if($('#DestinationCityName').attr('rel') != 0)
								tab = new Array('Departure','wayPoint');

							if(iMap.manager['X1'].isHidden())
							{
								iMap.manager['X1'].setLatLng(point);
								iMap.manager['X1'].show();
								iMap.manager['X1'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
							}
							else
							{
								iMap.manager['X2'].setLatLng(point);
								iMap.manager['X2'].show();
								iMap.manager['X2'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X2',adresse,cityName,codePoint));
							}
						}
						else if($('#wayPointCityName').attr('rel') == 0)
						{
							tab = new Array('wayPoint');

							iMap.manager['Xi'].setLatLng(point);
							iMap.manager['Xi'].show();
							iMap.manager['Xi'].openExtInfoWindow(iMap.gmap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'Xi',adresse,cityName,codePoint));
						}
					}
				},'json'
			);
		}
	},

	BindInfoWindowCustom: function(marker,content)
	{
		var mapObj = iMap.gmap;
		GEvent.addListener(marker, 'click', function(){
            marker.openExtInfoWindow(
              mapObj,
              "custom_info_window",
              content);
          });
	},

	CloseAllExtInfoWindow: function(manager) {
		for(var i = 0 ; i < manager.length ; i ++) {
			manager[i].closeExtInfoWindow(this.gmap);
		}
	},

	/* MODULE : A PROXIMITE DE */
	/* Affiches les markers à proximité du point recherché */
	DrawProximityMarker: function(coordJsTab, option)
	{
		var indice = 1;
		for(var i in coordJsTab) {
			if(i == 'in_array') continue;
			if(option != null)

			if(i == 'current') {
				var marker = iMap.DrawSingleMarker(coordJsTab[i][0], coordJsTab[i][1], i, "", option);
			} else {
				var marker = iMap.DrawSingleMarker(coordJsTab[i][0], coordJsTab[i][1], i, indice, option);
			}

			iMap.markerAllZoom.push(marker);
			if(i == 'current') {
				iMap.MapCenter(parseFloat(coordJsTab[i][0]), parseFloat(coordJsTab[i][1]), 15);
			} else {
				indice++;
			}
		}
		iMap.mgr.addMarkers(iMap.markerAllZoom,1,17);
		iMap.mgr.refresh();
	},

	/* Créer et affiche un marker */
	DrawSingleMarker:function(x, y, extCode, indice, option)
	{
		var coord 	   	   = Lamb_WGS84(parseFloat(x), parseFloat(y));
		var point 	   	   = new GLatLng(parseFloat(coord[1]), parseFloat(coord[0]));

		myIcon = new GIcon();
		if(option != null) {
			option['textValue'] = indice;
			if(indice > 9 && option['delta'] != null) {
				option['textX'] = option['delta'];
			}
			myIcon.image = this.GetUrlPictoMaker(option);
			myIcon.iconSize = new GSize(parseInt(option['imgWidth'], 10), parseInt(option['imgHeight'], 10));
			myIcon.iconAnchor = new GPoint(0,0);
			myIcon.infoWindowAnchor = new GPoint(0,0);
		}

		var marker = new GMarker(point,{icon:myIcon,clickable:false});
		marker.codeext = extCode;

		return marker;
	},

	/* FEUILLE DE ROUTE DETAILS ITINERAIRE */
	/* Organise les markers custom avec markermanagers */
	DrawMarkerStopArea: function(detailMarker, tabToAdd, indice, option, PMRSearch)
	{
		var urlPictos = urlImage + 'pictos/';

		var tab = detailMarker.split('=>');
		var type = tab[0];
		var cx   = tab[2];
		var cy   = tab[1];

		var point = new GLatLng(cx,cy);
		var icon = new GIcon();
			icon.image = this.GetImageUrl(type.toLowerCase());

		/* --- Gestion du Picto dynamique --- */
		if(indice != null && type != 'departure' && type != 'arrival') {
			var opt = new Array();
			if(tabToAdd == 'zoom') {
				opt['imgUrl'] = "http://" + location.hostname + icon.image;
				if(option['textX'] != null) opt['textX'] = option['textX'];
				if(option['textY'] != null) opt['textY'] = option['textY'];
				if(option['textColor'] != null) opt['textColor'] = option['textColor'];
				if(option['textContour'] != null) opt['textContour'] = option['textContour'];
				if(option['textContourColor'] != null) opt['textContourColor'] = option['textContourColor'];
				if(option['textSize'] != null) opt['textSize'] = option['textSize'];
			}
				opt['textValue'] = indice;
			icon.image = this.GetUrlPictoMaker(opt);
		}
		icon = this.SetIcon(icon,type.toLowerCase());
		var marker = new GMarker(point,{icon:icon});

		this.bounds.extend(point);

		if(tabToAdd == "zoom" && type != "correspondance")
		{
			iMap.markerZoom.push(marker);
		}
		else if(tabToAdd == "unzoom")
		{
			iMap.markerUnZoom.push(marker);
		}
		else if(tabToAdd == "allzoom")
		{
			iMap.markerAllZoom.push(marker);
		}
	},

	/* encode les polylines */
	DrawPolylines: function(detailPolyline)
	{
		var tab = detailPolyline.split('=>');

    if(typeof(tab[4]) == "undefined") {
			tab[4] = "";
		}

		var num = parseInt(tab[0]);
		var type = tab[1];
		var cx = parseFloat(tab[3]);
		var cy = parseFloat(tab[2]);
    var isInItinerary = tab[4];

		if(iMap.polylineManager[num] == null || iMap.polylineManager[num] == undefined || iMap.polylineManager[num] == false)
		{
			iMap.polylineManager[num] = new Array();
		}

		if(isInItinerary == "iti" && type!="voiture" && type!="velo" && type!="vls") {
			type = "pieton-avion";
		}

		iMap.polylineManager[num].push(new GLatLng(cx,cy));
		iMap.polylineInfo[num] = type;

    // équivalent détaillé de polylineInfo avec possibilité d'ajouter des données
    iMap.polylineDetails[num] = {
      'type': type,
      'iti': (tab[4] == 'iti')
    };
	},

	/* affiche les markers et les polylines */
	DrawResult: function()
	{
		var couleur;

		iMap.mgr.addMarkers(iMap.markerZoom,14,17);
		iMap.mgr.addMarkers(iMap.markerUnZoom,1,13);
		iMap.mgr.addMarkers(iMap.markerAllZoom,1,17);
		iMap.mgr.refresh();

		var polylineEncoder = new PolylineEncoder();
    var j = 0;
		for(var i in iMap.polylineManager)
		{
      j = parseInt(i);
      if(typeof(j) == 'number' && j >= 0 && typeof(iMap.polylineManager[i]) != 'undefined') {
        if(iMap.polylineManager[i].length>1)
        {
          var polyReturn = polylineEncoder.dpEncode(iMap.polylineManager[i]);

          couleur = this.GetModeColor(iMap.polylineInfo[i].toLowerCase());
          opacity = 1;

          switch(iMap.polylineInfo[i].toLowerCase()) {
            case 'pieton':
            case 'pieton-avion':
              // On cache les tracés à pied, vélo ou voiture en "vol d'oiseau" (iti == true)
              // car doublon avec les street network de ces trajets.
              if(iMap.polylineDetails[i].iti == true) {
                opacity = 0;
              }
            break;
            default:
              opacity = 1;
            break;
          }

          iMap.polylineContener[i] = new GPolyline.fromEncoded({
            color:couleur,
            weight: 3,
            opacity: opacity,
            points: polyReturn.encodedPoints,
            levels: polyReturn.encodedLevels,
            zoomFactor: 2,
            numLevels: 18
          });

          iMap.gmap.addOverlay(iMap.polylineContener[i]);
        }
      }
		}
	},

	/* bind une infobulle a un marker */
	BindMarkerInfoWindow: function(detailMarker,opt)
	{
		var tab = detailMarker.split('=>');
		var indice = parseInt(tab[0]);
		var text = tab[1];

		if(opt == 'zoom') {
			iMap.BindInfoWindowCustom(iMap.markerZoom[indice],text);
		}
		else if(opt == 'allzoom') {
			iMap.BindInfoWindowCustom(iMap.markerAllZoom[indice],text);
		}
		else {
			iMap.BindInfoWindowCustom(iMap.markerUnZoom[indice],text);
		}
	},

	DrawMarkerCity: function(key, option)
	{
		var mapObj  = iMap.gmap;
		var pMarker = new GIcon();
			pMarker.iconSize = new GSize(iMap.pMarkerCityWidth,iMap.pMarkerCityHeight);
			pMarker.iconAnchor = new GPoint(iMap.pMarkerCityWidth/2,iMap.pMarkerCityHeight/2);
			pMarker.infoWindowAnchor = new GPoint(iMap.pMarkerCityWidth/2,iMap.pMarkerCityHeight/2);

		iMap.egeoxmlManager[key] = new EGeoXml(key ,mapObj,[urlSite + "/route/vueMap?&output=1&options="+ option['optionAjaxCall']],{baseicon:pMarker,nozoom:true,noshadow:true,preloadimages:true,addmarker:function(){}});
		iMap.egeoxmlManager[key].parse();

		if(typeof(iMap.egeoxmlManager[key]) != 'undefined') {
			var eventListener=GEvent.addListener(iMap.egeoxmlManager[key], "parsed", function(){
					var cMarker = new GIcon();
					cMarker.image = iMap.cMarkerCityImg;
					cMarker.iconSize = new GSize(iMap.cMarkerCityWidth, iMap.cMarkerCityHeight);
					cMarker.iconAnchor = new GPoint(iMap.cMarkerCityWidth/2, iMap.cMarkerCityHeight/2);
					iMap.clusterManager[key] = new ClusterMarker(mapObj, {markers:iMap.egeoxmlManager[key].gmarkers,gridSize:1000,clusterMarkerIcon:cMarker});
					$(iMap.clusterManager[key]._mapMarkers).each(function(i,marker){
						marker.iconcluster = cMarker;

						GEvent.addListener(marker, "click", function(){
							var cityName = marker.codeext.trim();
				    		iMap.InitClusterCityMarkerListener(marker,cityName);
							iMap.gmap.setCenter(marker.getLatLng(), 14);
						});
					});

					iMap.clusterManager[key].refresh();
				}
			);
        }
	},

	DrawMarkerSite: function(key, option)
	{
		var mapObj  = iMap.gmap;

		var pMarker = new GIcon();
		pMarker.iconSize = new GSize(iMap.pMarkerSiteWidth, iMap.pMarkerSiteHeight);
		pMarker.iconAnchor = new GPoint(iMap.pMarkerSiteWidth/2, iMap.pMarkerSiteHeight/2);
		pMarker.infoWindowAnchor = new GPoint(iMap.pMarkerSiteWidth/2, iMap.pMarkerSiteHeight/2);

		iMap.egeoxmlManager[key] = new EGeoXml('exmlSite' + key ,mapObj,[urlSite + "/route/vueMap?&output=1&options="+ option['optionAjaxCall']],{baseicon:pMarker,nozoom:true,noshadow:true,preloadimages:true,addmarker:function(){}});
		iMap.egeoxmlManager[key].parse();

		if(typeof(iMap.egeoxmlManager[key]) != 'undefined') {
			var eventListener=GEvent.addListener(iMap.egeoxmlManager[key], "parsed", function(){
				var cMarkerSite = new GIcon();
					cMarkerSite.image= option['urlClusterImage'];
					cMarkerSite.iconSize=new GSize(iMap.cMarkerSiteWidth, iMap.cMarkerSiteHeight);
					cMarkerSite.iconAnchor=new GPoint(iMap.cMarkerSiteWidth/2, iMap.cMarkerSiteHeight/2);
					iMap.clusterManager[key] = new ClusterMarker(mapObj, {markers:iMap.egeoxmlManager[key].gmarkers,gridSize:1000,clusterMarkerIcon:cMarkerSite, optCluster:option['optCluster']});
					iMap.clusterManager[key].refresh();
					$(iMap.clusterManager[key]._mapMarkers).each(function(i,marker){
						marker.iconcluster = cMarkerSite;

						GEvent.addListener(marker, "click", function(){
							var ExternalCode = marker.codeext;

							if(option.Output == "json")
				    			iMap.GetInfoWindowSiteSearch(ExternalCode,mapObj,marker);
			    			else
				    			iMap.GetInfoWindowSite(ExternalCode,mapObj,marker);
						});

						if(option['externalCode'] != null && option['externalCode'] != ''
							&& option['externalCode'] == marker.codeext) {
							iMap.gmap.setCenter(marker.getLatLng());
							iMap.GetInfoWindowSite(marker.codeext, mapObj, marker);
						}
					});

					if(option['hideCluster'] != null && option['hideCluster'] == true)
						iMap.clusterManager[key].hideAllMarkers();
				}
			);
        }
	},

	DrawKmlFavorites: function(key, option) {
		var mapObj = iMap.gmap;
		var pMarker = new GIcon();
			pMarker.iconSize = new GSize(iMap.pMarkerFavWidth, iMap.pMarkerFavHeight);
			pMarker.iconAnchor = new GPoint(iMap.pMarkerFavWidth /2, iMap.pMarkerFavHeight / 2);
			pMarker.infoWindowAnchor = new GPoint(iMap.pMarkerFavWidth / 2, iMap.pMarkerFavHeight / 2);

		iMap.egeoxmlManager[key] = new EGeoXml('exml' + key ,mapObj,[urlSite + "/cu/favorite?action=kml&ajax=true"],{baseicon:pMarker,nozoom:true,noshadow:true,preloadimages:true,addmarker:function(){}});
		iMap.egeoxmlManager[key].parse();

		if(typeof(iMap.egeoxmlManager[key]) != 'undefined')
		{
			var eventListener=GEvent.addListener(iMap.egeoxmlManager[key], "parsed", function(){
				var cMarker = new GIcon();
					cMarker.image = option['urlClusterImage'];
					cMarker.iconSize = new GSize(iMap.cMarkerFavWidth, iMap.cMarkerFavHeight);
					cMarker.iconAnchor = new GPoint(iMap.cMarkerFavWidth/2, iMap.cMarkerFavHeight/2);
					iMap.clusterManager[key] = new ClusterMarker(mapObj, {markers:iMap.egeoxmlManager[key].gmarkers,gridSize:200,clusterMarkerIcon:cMarker});

					$(iMap.clusterManager[key]._mapMarkers).each(function(i,marker){
						marker.iconcluster = cMarker;

						GEvent.addListener(marker, "click", function(){
							var data = new Array();
								data['id'] = key;
							var descTab = marker.codeext.split('|');
							if(descTab.length >= 2) {
								data['externalCode'] = descTab[1];
								var favType = descTab[0];
								if(favType == '0') {

									if(iMap.modePlanOnClick == 'choosestop') {
										iMap.InitClusterMarkerListener(marker,data['externalCode']);
									} else if(iMap.modePlanOnClick == 'chooseline') {
										iMap.GetInfoWindowPlanExtended(data, marker);
									} else if (iMap.modePlanOnClick == 'filtreline') {
										iMap.OnClickStopArea(data, marker);
									} else if (iMap.modePlanOnClick == 'classic'){
										iMap.GetInfoWindowPlanExtended(data, marker);
										iMap.DrawKmlPolylines(data);
									} else {
									 	iMap.GetInfoWindowPlan(data['externalCode'],marker);
									 	iMap.DrawKmlPolylines(data);
									}
								} else if(favType == '2') {
									var mapObj  = iMap.gmap;
									if(option.Output == "json")
						    			iMap.GetInfoWindowSiteSearch(data['externalCode'],mapObj,marker);
					    			else
						    			iMap.GetInfoWindowSite(data['externalCode'],mapObj,marker);
								}
							}
						});
					});

					iMap.clusterManager[key].refresh();

					if(option['hideCluster'] != null && option['hideCluster'] == true)
						iMap.clusterManager[key].hideAllMarkers();
					if(option['externalCode'] != null && option['externalCode'] != '')
						iMap.GetAndOpenInfoWindow(key, option);
				}
			);
		}
	},

	DrawKmlStopAreas: function(key, option) {
		var mapObj = iMap.gmap;
		var pMarker = new GIcon();
			pMarker.iconSize = new GSize(iMap.pMarkerWidth, iMap.pMarkerHeight);
			pMarker.iconAnchor = new GPoint(iMap.pMarkerWidth /2, iMap.pMarkerHeight / 2);
			pMarker.infoWindowAnchor = new GPoint(iMap.pMarkerWidth / 2, iMap.pMarkerHeight / 2);

		iMap.egeoxmlManager[key] = new EGeoXml('exml' + key ,mapObj,[urlSite + "/route/vueMap?&output=1&options=" + option['optionAjaxCall']],{baseicon:pMarker,nozoom:true,noshadow:true,preloadimages:true,addmarker:function(){}});
		iMap.egeoxmlManager[key].parse();

		if(typeof(iMap.egeoxmlManager[key]) != 'undefined')
		{
			var eventListener=GEvent.addListener(iMap.egeoxmlManager[key], "parsed", function(){
				var cMarker = new GIcon();
					cMarker.image = option['urlClusterImage'];
					cMarker.iconSize = new GSize(iMap.cMarkerWidth, iMap.cMarkerHeight);
					cMarker.iconAnchor = new GPoint(iMap.cMarkerWidth/2, iMap.cMarkerHeight/2);
					iMap.clusterManager[key] = new ClusterMarker(mapObj, {markers:iMap.egeoxmlManager[key].gmarkers,gridSize:200,clusterMarkerIcon:cMarker});
					//iMap.MapCenter(mapCenterX,mapCenterY,mapCenterZ);

					$(iMap.clusterManager[key]._mapMarkers).each(function(i,marker){
						marker.iconcluster = cMarker;

						GEvent.addListener(marker, "click", function(){
							var data = new Array();
							data['id'] = key;
							data['externalCode']= marker.codeext;
							if(iMap.modePlanOnClick == 'choosestop') {
								iMap.InitClusterMarkerListener(marker,data['externalCode']);
							} else if(iMap.modePlanOnClick == 'chooseline') {
								iMap.GetInfoWindowPlanExtended(data, marker);
							} else if (iMap.modePlanOnClick == 'filtreline') {
								iMap.OnClickStopArea(data, marker);
							} else if (iMap.modePlanOnClick == 'classic'){
								iMap.GetInfoWindowPlanExtended(data, marker);
								iMap.DrawKmlPolylines(data);
							} else {
							 	iMap.GetInfoWindowPlan(data['externalCode'],marker);
							 	iMap.DrawKmlPolylines(data);
							}
						});
					});

					iMap.clusterManager[key].refresh();

					if(option['hideCluster'] != null && option['hideCluster'] == true)
						iMap.clusterManager[key].hideAllMarkers();
					if(option['externalCode'] != null && option['externalCode'] != '') {
						if(iMap.noInfoWindow != true) {
              iMap.GetAndOpenInfoWindow(key, option);
            }
          }
				}
			);
		}
	},

	DrawKmlHybride: function(key, option) {
		var mapObj = iMap.gmap;
		var pMarker = new GIcon();
		pMarker.iconSize = new GSize(iMap.pMarkerWidth, iMap.pMarkerHeight);
		pMarker.iconAnchor = new GPoint(iMap.pMarkerWidth /2, iMap.pMarkerHeight / 2);
		pMarker.infoWindowAnchor = new GPoint(iMap.pMarkerWidth / 2, iMap.pMarkerHeight / 2);
		if(cfg.getValue('ModeColor').getValue('nobackgroundcolor') == 'true') {
			var nobackgroundvalue = true;
		} else {
			var nobackgroundvalue = false;
		}
		iMap.egeoxmlManager[key] = new EGeoXml(key , mapObj, [urlSite + "/route/vueMap?&output=1&options=" + option['optionAjaxCall']],{baseicon:pMarker,nozoom:true,noshadow:true,nobackground:nobackgroundvalue,preloadimages:true});
		iMap.egeoxmlManager[key].parse();
		if(typeof(iMap.egeoxmlManager[key]) != 'undefined')
		{
			var eventListener=GEvent.addListener(iMap.egeoxmlManager[key], "parsed", function(){
				iMap.polylineManager = iMap.egeoxmlManager[key].gpolylines;
				iMap.mgr.addMarkers(iMap.egeoxmlManager[key].gmarkers, 1, 17);
				iMap.mgr.refresh();
			});
		}
	},

	GetInfoWindowPlanExtended: function(option,marker){
		var mapObj = iMap.gmap;
		$.getJSON(urlSite+"/InfoWindow/maker",{StopAreaExternalCode:option['externalCode'], showSearchLinks: iMap.showSearchLinks},function(data){
			marker.openExtInfoWindow(mapObj,"custom_info_window",data.Html);
		});
	},

	/* Recupere un template HTML pour l'infobulle + un tableau de TObjet */
	OnClickStopArea: function(option, marker) {
		var mapObj = iMap.gmap;
		var opt = option;
		$.getJSON(urlSite+"/InfoWindow/maker",{StopAreaExternalCode:option['externalCode'], showSearchLinks: iMap.showSearchLinks},function(data){
			marker.openExtInfoWindow(mapObj,"custom_info_window",data.Html);
			if(data.TObject['LineArray'].length < 4) {
				iMap.DrawKmlPolylines(opt);
			} else {
				//iMap.RemovePolylines();
				//iMap.RemoveMarkerManager();
			}
		});
	},

	/* Récupère un KML modélisant des lignes et l'affiche sur la carte */
	DrawKmlPolylines: function(option) {
		var pMarker = new GIcon();
		pMarker.iconSize = new GSize(iMap.pMarkerWidth, iMap.pMarkerHeight);
		pMarker.iconAnchor = new GPoint(iMap.pMarkerWidth /2, iMap.pMarkerHeight / 2);
		pMarker.infoWindowAnchor = new GPoint(iMap.pMarkerWidth / 2, iMap.pMarkerHeight / 2);

		var key = option['id'];
		var url = urlSite+'/route/vueMap?output=1&stopAreaExternalCode=' + option['externalCode'];
		var contenu = iMap.ClientAjaxGetXML(url);
		iMap.RemovePolylines();
		iMap.RemoveMarkerManager();
		iMap.egeoxmlPolyline[key] = new EGeoXml('exmlPolylines' + key , iMap.gmap, null , {baseicon:pMarker,nozoom:true});
		iMap.egeoxmlPolyline[key].parseString([contenu]);
		iMap.polylineManager = iMap.egeoxmlPolyline[key].gpolylines;
		iMap.mgr 		 	 = iMap.egeoxmlPolyline[key].gmarkers;
		iMap.BindMarkerManager();
	},
	
	GetKmlForLineExternalCode: function(lineExternalCode,params){
		var key = lineExternalCode;
		var lo_params = {
			"departure":"",
			"arrival":""
		};
		if(typeof(params) != 'undefined') {
			if(typeof(params.departure) != 'undefined') 
				lo_params.departure = params.departure;
			if(typeof(params.arrival) != 'undefined') 
				lo_params.arrival = params.arrival;
		}
		var url = urlSite+'/route/vueMap?&output=1&options={"requestedtype":"linelist","lineexternalcode":"'+lineExternalCode+'","departure":"'+lo_params.departure+'","arrival":"'+lo_params.arrival+'"}';
		var contenu = iMap.ClientAjaxGetXML(url);
		iMap.RemovePolylines();
		iMap.egeoxmlPolyline[key] = new EGeoXml('exmlPolylines' + key, iMap.gmap, null, {nozoom:true, polylineoptions:{clickable:false}});
		iMap.egeoxmlPolyline[key].parseString([contenu]);
		iMap.polylineManager = iMap.egeoxmlPolyline[key].gpolylines;
	},

	GetKmlForExternalCode: function(externalCode, externalCodeType) {
		var key = externalCode;
		var url = urlSite+'/route/vueMap?&output=1&options={"requestedtype":"linelist","' + externalCodeType + '":"' + externalCode + '"}';
		var contenu = iMap.ClientAjaxGetXML(url);
		iMap.RemovePolylines();
		iMap.egeoxmlPolyline[key] = new EGeoXml('exmlPolylines' + key, iMap.gmap, null, {nozoom:true});
		iMap.egeoxmlPolyline[key].parseString([contenu]);
		iMap.polylineManager = iMap.egeoxmlPolyline[key].gpolylines;
	},

	/* Efface les polylines */
	RemovePolylines: function()
	{
		for(var i=0;i<iMap.polylineManager.length;i++)
		{
			iMap.gmap.removeOverlay(iMap.polylineManager[i]);
		}
	},

	RemoveMarkerManager: function()
	{
		for(var i = 0; i < iMap.mgr.length; i++) {
			iMap.gmap.removeOverlay(iMap.mgr[i]);
		}
	},

	BindMarker: function(marker)
	{
		GEvent.addListener(marker, "click", function(){
			var data = new Array();
			data['externalCode']= marker.codeext;
			if(iMap.modePlanOnClick == 'choosestop') {
				iMap.InitClusterMarkerListener(marker,data['externalCode']);
			} else if(iMap.modePlanOnClick == 'chooseline') {
				iMap.GetInfoWindowPlanExtended(data, marker);
			} else if (iMap.modePlanOnClick == 'filtreline') {
				iMap.OnClickStopArea(data, marker);
			} else {
			 	iMap.GetInfoWindowPlan(data['externalCode'],marker);
			 	iMap.DrawKmlPolylines(data);
			}
		});
	},

	BindMarkerManager: function()
	{
		for(var i = 0; i < iMap.mgr.length; i++) {
			iMap.BindMarker(iMap.mgr[i]);
		}
	},

	ClientAjaxGetXML: function(url)
	{
		var contenu = $.ajax({
							type: "GET",
							async: false,
							url: url,
							success : function (data){}
							}).responseText;
		var tmp;
		for(var i = 0; i < contenu.length; i++){
			tmp = tmp + contenu.charAt(i);
			if (contenu.charAt(i) == "\n"){
				tmp = tmp.replace("\n","");
			}
		}
		contenu = tmp;
		contenu = contenu.replace("undefined","");
		return contenu;
	},

	AdaptPolylinesWeightToZoom: function(zoom)
	{
		for(var i = 0; i < iMap.polylineManager.length; i++){
			if(zoom >= 14 ){
	    		iMap.polylineManager[i].show();
				if(iMap.polylineManager[i].color == '#C0C0C0'){
					iMap.polylineManager[i].weight = 15;
				}else{
					if(iMap.polylineManager[i].color == '#FFFFFF'){
						iMap.polylineManager[i].weight = 10.5;
					}
					else{
						iMap.polylineManager[i].weight = 5;
					}
				}
			}
			if(zoom > 12 && zoom < 14){
	    		iMap.polylineManager[i].show();
				if(iMap.polylineManager[i].color == '#C0C0C0'){
					iMap.polylineManager[i].weight = 10;
				}else{
					if(iMap.polylineManager[i].color == '#FFFFFF'){
						iMap.polylineManager[i].weight = 8.5;
					}
					else{
						iMap.polylineManager[i].weight = 3;
					}
				}
			}
			if(zoom <= 12 && zoom >= 10){
				iMap.polylineManager[i].show();
				if(iMap.polylineManager[i].color == '#C0C0C0'){
					iMap.polylineManager[i].weight = 7.5;
				}else{
					if(iMap.polylineManager[i].color == '#FFFFFF'){
						iMap.polylineManager[i].weight = 5.2;
					}else{
						iMap.polylineManager[i].weight = 2;
					}
				}
			}
			if(zoom < 10){
				iMap.polylineManager[i].hide();
			}
		}
	},

	GetModeColor: function(mode)
	{
		if(cfg == null)
		{
			return false;
		}
		else if(typeof(mode) != 'string')
		{
			return false;
		}
		else
		{
			var modeColor = cfg.getValue('ModeColor');
			mode 		  = mode.toLowerCase();
			mode 		  = mode.replace(' ', '_');
			return modeColor.getValue(mode);
		}
	},

	GetImageUrl: function(type)
	{
		var urlFolder;
		if(cfg != null) {
			var folder    = cfg.getValue('ModePicto');
			if(folder != false) {
				urlFolder = folder.getValue('folder');
			} else {
				urlFolder = "pictos/";
			}
		} else {
			urlFolder = "pictos/";
		}
		var urlPicto = urlImage + urlFolder;
		var imgName;

		if(typeof(type) != 'string')
		{
			return false;
		}
		else
		{
			var typePicto = cfg.getValue('ModePicto');
			type 		  = type.toLowerCase();
			type 		  = type.replace(' ', '_');
			imgName 	  = typePicto.getValue(type);

			if(imgName == false) return false;
			return urlPicto + imgName;
		}
	},

	GetUrlPictoMaker: function(option) {
		var url = urlSite + "/Picto/maker?";
		for(var i in option) {
			if(i == 'in_array')
				continue;

			url = url + "&" + i + "=" + option[i];
		}
		return url
	},

	SetIcon: function(icon,type)
	{
		if(typeof(icon) != 'object' || typeof(type) != 'string')
		{
			return false;
		}
		else
		{
			var typePictoSize = cfg.getValue('ModePictoSize');
			type 			  = type.toLowerCase();
			type 			  = type.replace(' ', '_');

			var iconSize 		 = typePictoSize.getValue(type + 'IconSize');
			var iconAnchor 		 = typePictoSize.getValue(type + 'IconAnchor');
			var infoWindowAnchor = typePictoSize.getValue(type + 'InfoWindowAnchor');

			if(iconSize == false || iconAnchor == false || infoWindowAnchor == false) return false;

			iconSize   		 = iconSize.split(';');
			iconAnchor 		 = iconAnchor.split(';');
			infoWindowAnchor = infoWindowAnchor.split(';');

			icon.iconSize 		  = new GSize(parseInt(iconSize[0]), parseInt(iconSize[1]));
			icon.iconAnchor 	  = new GPoint(parseInt(iconAnchor[0]), parseInt(iconAnchor[1]));
			icon.infoWindowAnchor = new GPoint(parseInt(infoWindowAnchor[0]), parseInt(infoWindowAnchor[1]));

			return icon;
		}
	},

	DrawStaticPolylines: function(detailPolyline)
	{
		var tab = detailPolyline.split('=>');
		var num  = parseInt(tab[0]);
		var type = tab[1];

		var attributes 	= new Array();
			attributes['type'] = type;
			attributes['x'] = parseFloat(tab[3]);
			attributes['y'] = parseFloat(tab[2]);
			attributes['polylinecolor']	= this.GetModeColor(type);

		if(typeof(this.polylineStaticManager[num]) == 'undefined')
		{
			this.polylineStaticManager[num] = new Array();
		}

		this.polylineStaticManager[num].push(attributes);
		this.polylineStaticInfo[num] = type;
	},

	SetStaticMapOptions : function(options)
	{
		if(typeof(options) == 'object')
			this.staticMapOptions = options;
	},

	GetStaticMapOptions : function()
	{
		return this.staticMapOptions;
	},

	GetPolylineStaticManager : function()
	{
		return this.polylineStaticManager;
	},

	GetPolylineStaticInfo : function()
	{
		return this.polylineStaticInfo;
	},

	GetStaticMap: function(sectionId,options)
	{
		var mapUrl = '';
		var mapUrlOptions = '';
		var mapUrlPath = '';
		var mapUrlDep = '';
		var mapUrlArr = '';

		var bounds = new GLatLngBounds;

		if(typeof(this.polylineStaticManager[sectionId]) != 'object')
		{
			return false;
		}
		else
		{
			if(typeof(options) != 'object' || typeof(options) == 'undefined')
				var options = this.staticMapOptions;

			mapUrl = "http://maps.google.com/maps/api/staticmap?";
			mapUrlOptions = "sensor=" + options.sensor;
			mapUrlOptions += "&size=" + options.size;

			var poly = this.polylineStaticManager[sectionId];
			var countMax = (poly.length - 1);

			for(var i=0; i<=countMax; i++)
			{

				var path = '';

				if(i == 0)
				{
					mapUrlOptions += "&center=" + poly[i]['x'] + "," + poly[i]['y'];

					//mapUrlDep += "&markers=icon:" + encodeURI( urlRoot + this.GetImageUrl(poly[i]['type'].toLowerCase()) );
					mapUrlDep += "&markers=label:D";
					mapUrlDep += "|color:" + encodeURI( this.GetModeColor(poly[i]['type'].toLowerCase()).replace('#','0x') ) + "FF";
					mapUrlDep += "|shadow:" + options.shadow;
					mapUrlDep += "|" + poly[i]['x'] + "," + poly[i]['y'];

					mapUrlPath   += "&path=weight:" + options.weight;
					mapUrlPath   += "|color:" + encodeURI( this.GetModeColor(poly[i]['type'].toLowerCase()).replace('#','0x') ) + "FF";
				}
				else if(i == countMax)
				{
					mapUrlArr += "&markers=label:A";
					mapUrlArr += "|color:" + encodeURI( this.GetModeColor(poly[i]['type'].toLowerCase()).replace('#','0x') ) + "FF";
					mapUrlArr += "|" + poly[i]['x'] + "," + poly[i]['y'];
				}

				mapUrlPath += "|" + poly[i]['x'] + "," + poly[i]['y'];

				bounds.extend(new GLatLng(poly[i]['x'],poly[i]['y']));

			}

			//mapUrlOptions += "&zoom=" + this.gmap.getBoundsZoomLevel(bounds);
			mapUrlOptions += "&zoom=" + options.zoom;

			mapUrl += mapUrlOptions + mapUrlDep + mapUrlArr + mapUrlPath;

			return mapUrl;
		}
	},

	SetKmlManager: function(kmlManager){
		if( typeof(kmlManager)=='object' )
			this.kmlManager = kmlManager;
	},

	GetKmlManager: function(){
		return this.kmlManager;
	},

	InitKmlManager: function(){
        this.kmlManager = new Array();
	},

	/*
	 * Ouvre l'info bulle d'un marker,
	 * @var key : identifiant du tableau clusterManager contenant le marquer
	 * @var opt : ensemble de variables dont 'externalCode' identifiant du marker à ouvrir et 'zoom' valeur du zoom auquel afficher l'infobulle
	 */
	GetAndOpenInfoWindow: function(key, opt) {
		for(var i = 0;i < iMap.clusterManager[key]._mapMarkers.length; i++) {
			var extCode = iMap.clusterManager[key]._mapMarkers[i].codeext;
			if(extCode == opt['externalCode']) {
				if(typeof(opt['hideAllMarkers']) != 'undefined' && opt['hideAllMarkers']==true) {
					iMap.clusterManager[key].hideAllMarkers();
					iMap.clusterManager[key]._mapMarkers[i].show();
				} else {
					iMap.clusterManager[key].showAllMarkers();
				}
				if(typeof(opt['closeInfoWindow']) == 'undefined' || opt['closeInfoWindow'] != false) {
					iMap.GetInfoWindowPlanExtended(opt, iMap.clusterManager[key]._mapMarkers[i]);
				}
                iMap.gmap.setCenter(iMap.clusterManager[key]._mapMarkers[i].getLatLng());
                iMap.gmap.setZoom(opt['zoom']);
			}
		}
	},

	DrawKmlMap: function(key, option) {
		var url = iMap.kmlManager[key].path;
		iMap.kmlManager[key].geoxml = new EGeoXml('exmlPolylines' + key, iMap.gmap, url , {nozoom:true,nobackground:true});
		iMap.kmlManager[key].geoxml.parse();
	},

	LocalitySearch: function(option){

		var adressNameInputId 	= "locality-name-input";
		var cityNameInputId 	= "locality-cityname-input";
		var resultBlocId		= "bloc-result";
		var errorBlocId			= "msg_error_container";

		var mapZoom				= 16;

		var typeNameList 		= new Array();
			typeNameList['address'] = "Adresse";
			typeNameList['city'] 	= "Ville";
			typeNameList['stoparea']= "Arr\352t";
			typeNameList['site']	= "Lieu";

		var userMsgList 		= new Array();
			userMsgList['false_status']	= "Erreur technique";
			userMsgList['no_result'] 	= "Aucune adresse trouv\351e";
			userMsgList['zoom_link_title'] 	= "Cliquer pour centrer sur ";

		var oName;
		var oCityName;
		var oResBloc;
		var oErrBloc;

		var name;
		var cityName;

		var count;
		var typeList;
		var entryPointList;
		var entryPoint;

		var oResList;
		var oH;
		var oOl;
		var oLi;
		var oA;
		var oA_id;

		var typeLibelle;
		var entryPointFullName;

		if(typeof(option)=="object")
		{
			$.each(option,function(opt,value){
				switch(opt){
					case "adressNameInputId":
						if( typeof(value) == "string" )
							adressNameInputId = value;
						break;
					case "cityNameInputId":
						if( typeof(value) == "string" )
							cityNameInputId = value;
						break;
					case "resultBlocId":
						if( typeof(value) == "string" )
							resultBlocId = value;
						break;
					case "errorBlocId":
						if( typeof(value) == "string" )
							errorBlocId = value;
						break;
					case "mapZoom":
						if( typeof(value) == "number" )
							mapZoom = value;
						break;
					case "typeNameList":
						if( typeof(value) == "object" )
							typeNameList = value;
						break;
					case "userMsgList":
						if( typeof(value) == "object" )
							userMsgList = value;
						break;
					default:
						break;
				}
			});
		}

		oResBloc	= $("#"+resultBlocId);
		oErrBloc	= $("#"+errorBlocId);

		if(oResBloc.length != 0 && oErrBloc.length != 0)
		{
			oResBloc.empty().hide();
			oErrBloc.empty().addClass("hide");

			oName		= $("#"+adressNameInputId);
			oCityName 	= $("#"+cityNameInputId);

			if(oName.length != 0)
				name = oName.val().trim();
			if(oCityName.length != 0)
				cityName = oCityName.val().trim();

			if(name != '' && name != null && name != undefined || cityName != '' && cityName != null && cityname != undefined)
			{
				msw = new MswStreetNetwork();

				var params = {'name':name,'cityname':cityName};

				msw.getXYByAdress(params,function(data,param){

					if(data.status==false || data.status=="error")
					{
						oErrBloc.empty().html(userMsgList["no_result"]).removeClass("hide");
					}
					else
					{
						count 			= data.EntryPointCount;
						typeList	 	= new Array();
						entryPointList	= new Array();
						entryPoint 		= new Array();

						oResList = $(document.createElement("ul"));

						oResList = oResList.attr("id","locality-search-result");
						oResBloc.empty().append(oResList);

						for(var i=0;i<count;i++)
						{
							entryPoint = new Array();
							//entryPoint["id"]			= data[i].attr_id;
							entryPoint["name"]			= data[i].attr_entrypointname;
							entryPoint["number"]		= data[i].attr_number;
							entryPoint["typename"]		= data[i].attr_typename;
							entryPoint["type"]			= (data[i].attr_entrypointtype).toLowerCase();
							//entryPoint["responsequality"]= data[i].attr_entrypointresponsequality;
							entryPoint["cityname"]		= data[i].attr_cityname;
							entryPoint["citycode"]		= data[i].attr_citycode;
							//entryPoint["externalcode"]	= data[i].attr_entrypointexternalcode;
							//entryPoint["entrypointidx"]	= data[i].attr_entrypointidx;
							//entryPoint["entrypointid"]	= data[i].attr_entrypointid;
							entryPoint["coordx"]		= parseFloat(data[i].attr_coordx.replace('\,','\.'));
							entryPoint["coordy"]		= parseFloat(data[i].attr_coordy.replace('\,','\.'));
							entryPoint["wgs_coordx"]	= data[i].attr_wgs_coordx;
							entryPoint["wgs_coordy"]	= data[i].attr_wgs_coordy;
							entryPointList[i]=entryPoint;

							oOl = $("#locality-search-result-"+entryPoint["type"]);

							if(typeNameList[entryPoint["type"]] == undefined)
								typeLibelle = entryPoint["type"];
							else
								typeLibelle = typeNameList[entryPoint["type"]];

							if(oOl.length == 0)
							{
								oH 	= $(document.createElement("H2")).text(typeLibelle);
								oOl = $(document.createElement("Ol")).attr('id',"locality-search-result-"+entryPoint["type"]);
								oResList.append(oH);
								oResList.append(oOl);
							}

							entryPointFullName = "";
							if(entryPoint["typename"]!="null")
							{
								if(entryPoint["number"]!="null")
									entryPointFullName += entryPoint["number"]+" ";
								entryPointFullName += entryPoint["typename"]+" ";
							}
							if(entryPoint["name"]!="null")
								entryPointFullName += entryPoint["name"];
							if(entryPoint["cityname"]!="null")
								entryPointFullName += ", "+entryPoint["cityname"];
							if(entryPoint["citycode"]!="null")
								entryPointFullName += " ("+entryPoint["citycode"]+")";

							oLi = $(document.createElement("li"));
							oA_id = "locality-search-result-point-"+i;
							oA = $(document.createElement("a")).
										attr("id",oA_id).
										html(entryPointFullName).
										attr("title",userMsgList["zoom_link_title"]+entryPointFullName).
										attr("onclick","javascript:mapFull.MapCenter("+entryPoint["coordx"]+","+entryPoint["coordy"]+","+mapZoom+");return false;");
							oLi.append(oA);
							oOl.append(oLi);

						}

						oResBloc.show("fast");
					}
				},"json");
			}
		}
	},

	GetStaticMapLine: function(stopList,option)
	{
		var bounds = new GLatLngBounds;

		var urlStaticMap = 'http://maps.google.com/maps/api/staticmap?';
			urlStaticMap += 'sensor=' + this.staticMapOptions.sensor;
			urlStaticMap += '&size=' + this.staticMapOptions.size;

		if(typeof(stopList) != "undefined")
		{
			var count = 1;
			var maxCount = stopList.length;
			var linePath = '';
			var lineColor = "0x000000";
			if(typeof(option.lineColor) != 'undefined')
				lineColor = option.lineColor.replace('#','0x');
			var staticMarker = '';

			$.each(stopList,function(i,item) {
				if( typeof(item.coordX) != 'undefined' && typeof(item.coordY) != 'undefined' ) {

					var pf_LamberX = item.coordX.replace(/,/,'.');
					var pf_LamberY = item.coordY.replace(/,/,'.');

					la_Result = Lamb_WGS84(parseFloat(pf_LamberX), parseFloat(pf_LamberY));

					//urlRoot tmp à supprimer
					urlRoot = "http://ezp.sim.canaltp.fr";

					if(count==1)
						staticMarker += '&markers=icon:' + urlRoot + option.urlDepPicto;
					else if(count==maxCount)
						staticMarker += '&markers=icon:' + urlRoot + option.urlArrPicto;
					/*else
						staticMarker += '&markers=icon:' + urlRoot + option.urlStopPicto;*/

					staticMarker += '|' + la_Result[1].toString() + ',' + la_Result[0].toString();

					linePath += '|' + la_Result[1].toString() + ',' + la_Result[0].toString();

					bounds.extend(new GLatLng(parseFloat(la_Result[1]),parseFloat(la_Result[0])));

					count++;
				}
			});
		}

		if(typeof(option.drawMarker)!='undefined' && option.drawMarker == true)	{
			urlStaticMap += staticMarker;
		}

		if(typeof(option.drawLine)!='undefined' && option.drawLine == true)	{
			urlStaticMap += '&path=weight:' + this.staticMapOptions.weight + '|color:' + lineColor +  linePath;
		}

		if(maxCount==0) {
			urlStaticMap += '&center=' + this.gmap.getCenter().lat().toString() + ',' + this.gmap.getCenter().lng().toString();
			urlStaticMap += '&zoom=7';
		} else {
			urlStaticMap += '&zoom=' + this.staticMapOptions.zoom;
		}

		//urlStaticMap += '&center=' + this.bounds.getCenter().lat().toString() + ',' + this.bounds.getCenter().lng().toString();

		return urlStaticMap;
	},

	addSimpleMarker: function(marker,option) {

		if( typeof(marker)=='undefined' || typeof(marker) != 'object' ) {
			if(typeof(option) != 'undefined' && typeof(option.coordX) != 'undefined' && typeof(option.coordY) != 'undefined' ) {
				var x = option.coordX;
				var y = option.coordY;
				var coord = Lamb_WGS84(parseFloat(x), parseFloat(y));
				var point = new GLatLng(parseFloat(coord[1]), parseFloat(coord[0]));
				var myIcon = new GIcon();
				var imgWidth = 20;
				var imgHeight = 20;
				var anchorWidth = 10;
				var anchorHeight = 20;
				if(typeof(option.imgWidth) != 'undefined' && typeof(option.imgHeight) != 'undefined') {
					imgWidth = parseInt(option.imgWidth, 10);
					imgHeight = parseInt(option.imgHeight, 10);
				}
				if(typeof(option.anchorWidth) != 'undefined' && typeof(option.anchorHeight) != 'undefined') {
					anchorWidth = parseInt(option.anchorWidth, 10);
					anchorHeight = parseInt(option.anchorHeight, 10);
				}
				if(typeof(option.img) != 'undefined')
					myIcon.image = option.img
				myIcon.iconSize = new GSize(imgWidth, imgHeight);
				myIcon.iconAnchor = new GPoint(anchorWidth,anchorHeight);
				myIcon.infoWindowAnchor = new GPoint(0,0);
			}

			var marker = new GMarker(point,{icon:myIcon,clickable:false});
		}

		iMap.gmap.addOverlay(marker);

		return true;
	}
});
