
var oMap = Base.extend({

	constructor: function()
	{
    	iMap = this;
    	iMap.class_name = 'oMap';
    	iMap.gmap = null;
		manager 		 = new Array();
		markerZoom		 = new Array();
		markerUnZoom 	 = new Array();
		polylineManager  = new Array();
		polylineInfo 	 = new Array();
		polylineContener = new Array();
    },

	CreateMap: function (MapCenterX, MapCenterY, Zoom, id, custom)
	{

    	if (GBrowserIsCompatible())
    	{
	    	var GoogleMapObj = document.getElementById(id);
			GoogleMap = new GMap2(GoogleMapObj);

			if(typeof(MapCenterX) == "number" && typeof(MapCenterY) == "number" && typeof(Zoom) == "number")
			{
				this.MapCenter(MapCenterX, MapCenterY, Zoom);
			}

			this.gmap = GoogleMap;
	    	if(custom=="disabled")//Map par defaut
	    	{
				GoogleMap.addControl(new GLargeMapControl());
				GoogleMap.addControl(new GMapTypeControl());
				function wheelZoom(a) {
					if ((a.detail || -a.wheelDelta) < 0)
						GoogleMap.zoomIn();
					else
						GoogleMap.zoomOut();
				}

				MapName = "NavitiaMap";
	    	}
	    	else//Map custom
	    	{
				var LSoptions = {
					//showOnLoad : true,
					//style  : 'new',
					//linkTarget : '#',
       				//listingTypes : G_GOOGLEBAR_TYPE_LOCALONLY_RESULTS,
       				//suppressInitialResultSelection : false,
       				//suppressZoomToBounds : false,
					//resultList : G_GOOGLEBAR_RESULT_LIST_SUPPRESS,
					searchFormHint : 'Commune',
       				//onSearchCompleteCallback : {},
       				onGenerateMarkerHtmlCallback  : this.CustomMarkerHtml
       				//onMarkersSetCallback  : {},
       				//onIdleCallback : {},
      			};

	    		//GoogleMap.addControl(new google.maps.LocalSearch(LSoptions), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,30)));
	    		GoogleMap.addControl(new CustomGLargeMapControl(this.gmap), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(5,5)));
	    		GoogleMap.addControl(new CustomMapControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5,5)));

	    		//GoogleMap.addControl(new GLargeMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(100,5)));
	    		//GoogleMap.addMapType(G_PHYSICAL_MAP);

	    	}
	    	this.overviewMap = new GOverviewMapControl();
        	GoogleMap.addControl(this.overviewMap);
	    	Geocoder = new GClientGeocoder();
	    	GoogleMap.enableDoubleClickZoom();
			GoogleMap.enableContinuousZoom();

		  	mgr = new GMarkerManager(GoogleMap);

    	}
	},

	ResizeMap: function()
	{
		this.gmap.removeControl(this.overviewMap);
    	this.gmap.checkResize();
		this.gmap.addControl(this.overviewMap);
	},

	//?
	CreateAdminMap: function (MapCenterX, MapCenterY, Zoom, id)
	{
		//alert(id);
		var GoogleMapObj = document.getElementById(id);
		GoogleMap = new GMap2(GoogleMapObj);
		GoogleMap.enableDoubleClickZoom();
		GoogleMap.enableContinuousZoom();
		this.MapCenter(MapCenterX, MapCenterY, Zoom);
	},

	//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(pf_LamberX, pf_LamberY);
    GoogleMap.setCenter(new GLatLng(parseFloat(la_Result[1]), parseFloat(la_Result[0])), parseInt(pi_scale));
	},

	/* Construit une etiquette en fonction du nom d'arret, de ville et d'un tableau de ligne*/
	InfoContentBuilder: function(Name,CName,LineArray)
	{
		var etiquette = "";
		etiquette +="<h2>"+Name;
		if(CName != "")
			etiquette += " ("+CName+")";
		etiquette +="</h2>";

		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)+'\">&Agrave; partir de cet arr&ecirc;t &gt;&gt;</a></div>';
		etiquette += '<div><a href=\"'+urlSite+'/route/vuesearch/?rappelDestination='+encodeURIComponent(CName)+'%20-'+encodeURIComponent(Name)+'\">Vers cet arr&ecirc;t &gt;&gt;</a></div>';

		delete(LineArray);
		return etiquette;
	},

	/* Bind une infobulle sur un marqueur de depart ou d'arrivee */
	InfoBindContent: function(content,id,adresse,cityName)
	{
		var etiquette = ""
			etiquette += "<h2>"+adresse+" ("+cityName+")</h2>";
		if(content == 'Departure')
		{
			etiquette += "<p>Ce point correspond \340 votre point de d\351part.</p>";
		}
		else if(content == 'Destination')
		{
			etiquette += "<p>Ce point correspond \340 votre point d\'arriv\351e.</p>";
		}

		etiquette += '<p><a href="#" onclick="map.DeleteMarker(\''+content+'\',\''+id+'\');return false;" title="Supprimer ce point">Supprimer ce point</a></p>';

		//manager[id].bindInfoWindow(etiquette);
		iMap.BindInfoWindowCustom(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 = "";

		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 Champagne-Ardenne, seuls les points d'arr&ecirc;ts signal&eacute;s sur la carte sont cliquables.</p>";
		}
		else
		{
			etiquette += "<h2>"+adresse+" ("+cityName+")</h2>";
			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' class='rouge' id='markerDepart' onclick='map.MarkerSelected(\"Departure\",\""+id+"\",\""+adresse+"\",\""+cityName+"\",\""+codePoint+"\"); return false;' href='#'>A partir de cette adresse >></a></div>";
				if(Link[i]=="Destination")
					etiquette +="<div><a title='Choisissez ce point comme destination' class='rouge' id='markerDestination' onclick='map.MarkerSelected(\"Destination\",\""+id+"\",\""+adresse+"\",\""+cityName+"\",\""+codePoint+"\"); return false;' href='#'>Vers cette adresse >></a></div>";
			}
		}

		return etiquette;
	},

	/* Fonction permettant l'affichage d'une adresse */
	ShowAddress: function(address) {
		Geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert("Vitici ne trouve pas de commune dont le nom correspond \340 votre demande");
				} else {
					GoogleMap.setCenter(point, 13);
					var marker = new GMarker(point);
					GoogleMap.addOverlay(marker);
					marker.openInfoWindowHtml(address);
				}
			}
		)
	},


	/* Fonction gerant les deux clic de depart et d'arrivee */
	InitMarkerListener: function()
	{
		msw = new MswStreetNetwork();
		manager['X1']=iMap.CreateMarkerSelection(0,0,''); manager['X1'].hide();
		manager['X2']=iMap.CreateMarkerSelection(0,0,''); manager['X2'].hide();
		manager['error']=iMap.CreateMarkerSelection(0,0,''); manager['error'].hide();

		GEvent.addListener(GoogleMap,'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 = typePoint+"|"+idx+"|"+adresse+"|"+cityName+"|"+result[0]+"|"+result[1];
							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')
							{
								manager['error'].setLatLng(point);
								manager['error'].show();
								//manager['error'].openInfoWindow(iMap.InfoContentBuilderDepartureArrival([],'error','','',codePoint));
								manager['error'].openExtInfoWindow(GoogleMap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival([],'error','','',codePoint));
							}
							else
							{
								var cityName = iTp.htmlentities(objet_retourne.place.city);
								var adresse = iTp.htmlentities(objet_retourne.adress);
								var idx = iTp.htmlentities(objet_retourne.place.idx);
								var typePoint = iTp.htmlentities(objet_retourne.place.type);

								manager['error'].hide();

								if($('#DepartureCityName').attr('rel') == 0 && $('#DestinationCityName').attr('rel') == 0 )
								{
									tab = new Array('Departure','Destination');

									manager['X1'].setLatLng(point);
									manager['X1'].show();
									//manager['X1'].openInfoWindow(iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
									manager['X1'].openExtInfoWindow(GoogleMap,"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(manager['X1'].isHidden())
									{
										manager['X1'].setLatLng(point);
										manager['X1'].show();
										//manager['X1'].openInfoWindow(iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
										manager['X1'].openExtInfoWindow(GoogleMap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
									}
									else
									{
										manager['X2'].setLatLng(point);
										manager['X2'].show();
										//manager['X2'].openInfoWindow(iMap.InfoContentBuilderDepartureArrival(tab,'X2',adresse,cityName,codePoint));
										manager['X2'].openExtInfoWindow(GoogleMap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X2',adresse,cityName,codePoint));
									}
								}
							}
						},'json'
					);
				}
			}
		});
	},


	/* ------------ InitClusterMarkerListener via StopAreaExternalCode ----------- */
	InitClusterMarkerListener: function(marker,ExternalCode)
	{
		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},
					function(data)
					{
						if(data == '')
						{
							manager['error'].setLatLng(point);
							manager['error'].show();
							manager['error'].openExtInfoWindow(GoogleMap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival([],'error','','',codePoint));
						}
						else
						{

							//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 = "";

							var k=0;
				 			//==> Parseur JSON
				 			$.each(data,function(i,item){
					 			if(i!='LineArray')
					 			{
					 				/* 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++;
				 			});

				 			var iTp = new oTp();
				 			var cityName = iTp.htmlentities(CName);
							var adresse = iTp.htmlentities(Name);

							manager['error'].hide();


							if($('#DepartureCityName').attr('rel') == 0 && $('#DestinationCityName').attr('rel') == 0 )
							{
								tab = new Array('Departure','Destination');

								manager['X1'].setLatLng(point);
								manager['X1'].show();
								manager['X1'].openExtInfoWindow(GoogleMap,"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(manager['X1'].isHidden())
								{
									manager['X1'].setLatLng(point);
									manager['X1'].show();
									manager['X1'].openExtInfoWindow(GoogleMap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X1',adresse,cityName,codePoint));
								}
								else
								{
									manager['X2'].setLatLng(point);
									manager['X2'].show();
									manager['X2'].openExtInfoWindow(GoogleMap,"custom_info_window",iMap.InfoContentBuilderDepartureArrival(tab,'X2',adresse,cityName,codePoint));
								}
							}
						}
					},'json'
				);
			}
		}
	},


	MarkerSelected: function(rappelMarker,id,adresse,cityName,codePoint)
	{
		$('#'+rappelMarker+'Rappel').empty().append(adresse);
		$('#'+rappelMarker+'Libelle').attr('rel',$('#'+rappelMarker+'Libelle').val());
		$('#'+rappelMarker+'Libelle').val(adresse); //On remplit les champs du formulaire
		$('#'+rappelMarker+'CityName').attr('rel',$('#'+rappelMarker+'CityName').val());
		$('#'+rappelMarker+'CityName').val(cityName);
		$('#'+rappelMarker+'Selected').empty().append('<a href="#" id="'+rappelMarker+'LinkSelected" class="grisSmall" onclick="map.DeleteMarker(\''+rappelMarker+'\',\''+id+'\');return false;" title="Supprimer la s&eacute;lection">Supprimer la s&eacute;lection >></a>');

		//Et on modifie l'info bulle
		map.InfoBindContent(rappelMarker,id,adresse,cityName);

		if(rappelMarker == "Departure")
			manager[id].setImage(urlImage+'icon-start-flag.gif');
		else if(rappelMarker == "Destination")
			manager[id].setImage(urlImage+'icon-stop-flag.gif');

		manager[id].closeExtInfoWindow(GoogleMap);
		$('#'+rappelMarker).val(codePoint);

		if(manager['X1'].isHidden() == false && manager['X2'].isHidden() == false)
		{
			$('#fancy_outer').hide();
		}
	},

	/* Efface un Marker depart arrivee */
	DeleteMarker: function(rappelMarker,id)
	{
		manager[id].closeExtInfoWindow(GoogleMap);
		//manager[id].closeInfoWindow();
		manager[id].hide();
		$('#'+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});
		GoogleMap.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},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;
	 				//console.log(Idx+" "+Id+" "+ExternalCode+" "+Name+" "+CoordX+" "+CoordY);
	 			}
	 			k++;
 			});// ==> Fin parseur JSON
 			marker.openExtInfoWindow(GoogleMap,"custom_info_window",iMap.InfoContentBuilder(Name,CName,LineArray));
 			//marker.openInfoWindowHtml(iMap.InfoContentBuilder(Name,CName,LineArray));
 		});

	},


	BindInfoWindowCustom: function(marker,content)
	{
		GEvent.addListener(marker, 'click', function(){
            marker.openExtInfoWindow(
              GoogleMap,
              "custom_info_window",
              content);
          });
	},

	/** FEUILLE DE ROUTE DETAILS ITINERAIRE **/
	/* Organise les markers custom avec markermanagers */
	DrawMarkerStopArea: function(detailMarker,tabToAdd)
	{
		var urlImage = "/extension/vitici/design/vitici/images/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();
		switch(type.toLowerCase())
		{
			case 'departure':
				icon.image = urlImage+"marker-depart.png";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'arrival':
				icon.image = urlImage+"marker-arrivee.png";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'correspondance':
				icon.image = urlImage+"marker-correspondance.png";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'car':
				icon.image = urlImage+"picto-car-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'car ter':
				icon.image = urlImage+"picto-car-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'bus':
				icon.image = urlImage+"picto-bus-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'taxibus':
				icon.image = urlImage+"picto-bus-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'noctilien':
				icon.image = urlImage+"picto-bus-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'm&#233;tro':
				icon.image = urlImage+"picto-metro-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'rer':
				icon.image = urlImage+"picto-rer-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'pieton':
				icon.image = urlImage+"picto-marche-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'velo':
				icon.image = urlImage+"picto-velo-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'v&#233;lo':
				icon.image = urlImage+"picto-velo-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			case 'voiture':
				icon.image = urlImage+"picto-voiture-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;

			default:
				icon.image = urlImage+"picto-train-small.gif";
				icon.iconSize = new GSize(20,20);
				icon.iconAnchor = new GPoint(10,20);
				icon.infoWindowAnchor = new GPoint(10,0);
			break;
		}

		var marker = new GMarker(point,{icon:icon});
		//var marker = new GMarker(point);

		if(tabToAdd == "zoom" && type != "correspondance")
		{
			markerZoom.push(marker);
		}
		else if(tabToAdd == "unzoom")
		{
			markerUnZoom.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 isInItinerary = tab[4];
		var cx = parseFloat(tab[3]);
		var cy = parseFloat(tab[2]);
		
		if(isInItinerary == "iti") {
			type = "pieton-avion";
		}
		
		if(polylineManager[num] == null || polylineManager[num] == undefined || polylineManager[num] == false) {
			polylineManager[num] = new Array();
		}
		
		polylineManager[num].push(new GLatLng(cx,cy));
		polylineInfo[num] = type;
	},

	/* affiche les markers et les polylines */
	DrawResult: function()
	{
		var couleur;
		var opacity;

		mgr.addMarkers(markerZoom,14,17);
		mgr.addMarkers(markerUnZoom,1,13);
		mgr.refresh();

		var polylineEncoder = new PolylineEncoder();

		for(var i=0;i<polylineManager.length;i++)
		{
			opacity = 1;
		
			if(polylineManager[i].length>1)
			{
				var polyReturn = polylineEncoder.dpEncode(polylineManager[i]);

				switch(polylineInfo[i].toLowerCase())
				{
					case 'bus':
						couleur="#3D9FBF";
					break;

					case 'car':
						couleur="#BF2020";
					break;

					case 'car ter':
						couleur="#BF2020";
					break;

					case 'navette':
						couleur="#3D9FBF";
					break;

					case 'noctilien':
						couleur="#3D9FBF";
					break;

					case 'taxibus':
						couleur="#3D9FBF";
					break;

					case 'm&#233;tro':
						couleur="#20407C";
					break;

					case 'rer':
						couleur="#20407C";
					break;

					case 'pieton-avion':
						couleur="#60488E";
						opacity = 0;
					break;
					
					case 'pieton':
					case 'pieton-voirie':
						couleur="#60488E";
					break;

					case 'voiture':
						couleur="#548740";
					break;

					case 'velo':
						couleur="#0054A5";
					break;

					case 'v&#233;lo':
						couleur="#0054A5";
					break;

					default:
						couleur="#FF9900";
					break;
				}

				polylineContener[i] = new GPolyline.fromEncoded({
					color: couleur,
					weight: 3,
					opacity: opacity,
					points: polyReturn.encodedPoints,
					levels: polyReturn.encodedLevels,
					zoomFactor: 2,
					numLevels: 18
				});
				
				GoogleMap.addOverlay(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')
		{
			//markerUnZoom[indice].bindInfoWindow(text);
			iMap.BindInfoWindowCustom(markerUnZoom[indice],text);
		}
		else if(opt == 'zoom')
		{
			//markerZoom[indice].bindInfoWindow(text);
			iMap.BindInfoWindowCustom(markerZoom[indice],text);
		}
	}

});
