var MAX_ZOOM	= 15;
var MIN_ZOOM	= 4;
var VIEW_AGENT	= 0; 
// 0-> Visibilité sur tous les concessionnaires 
// 1-> Visibilité sur un concessionnaires et ses agents 

var gdealers		= [];
var Htmls			= [];
var Agent			= [];
var SupervisorCode	= [];
var Distance		= [];
var dealersRRDI		= [];
//var HtmlsDealer		= [];

var ZoomLabel = 12;

var numDealer = 0;
var map;
var direction;
var critere = new Array();
var poiLatitude;
var poiLongitude;


function switchHomeToMapPanel()
{
	var phMap = document.getElementById("ventreVisuelMap");
	var phIframe = document.getElementById("ventreVisuelHome");
	phIframe.style.display = "none";
	phMap.style.display = "block";
	
	if(!($("#ventreCentre").hasClass("mapOn")))
	{
		$("#ventreCentre").addClass("mapOn");
	}
}

function switchMapToHomePanel()
{
	var phMap = document.getElementById("ventreVisuelMap");
	var phIframe = document.getElementById("ventreVisuelHome");
	phIframe.style.display = "block";
	phMap.style.display = "none";
}

function showLoadingPanel()
{
	var mapLoading = document.getElementById('mapLoading');
	if (mapLoading)
	{
		mapLoading.style.display = "block";
	}
}

function hideLoadingPanel()
{
	var mapLoading = document.getElementById('mapLoading');
	if (mapLoading)
	{
		mapLoading.style.display = "none";
	}
}

//================ Geolocalisation =================
var geocoder = new GClientGeocoder();
var allowedBounds = new GLatLngBounds(new GLatLng(41.195190,-5.427246), new GLatLng(51.088645,9.777832));



//======================== ETAPE 1: CHARGEMENT DE LA CARTE ET DU FORMULAIRE =================
function createMap()
{
	map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		//map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl()); 
		  
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();
		
		GEvent.addListener(map, "zoomend", function(oldLevel,newLevel)
		{
			var i =0;
			for(i=0;i<numDealer;i++)
			{
				if(newLevel>=ZoomLabel)
				{
					//Zoom suffisant pour afficher les labels
					if(VIEW_AGENT)
					{
						gdealers[i].setLabelVisibility(false);
					}
					else
					{
						gdealers[i].setLabelVisibility(true);
					}
					gdealers[i].closeInfoWindow();
				}
				else
				{
					//Zoom insuffisant pour afficher les labels
					gdealers[i].setLabelVisibility(false);
					gdealers[i].closeInfoWindow();
				}
			}
		});
		GEvent.addListener(map, "load", function()
		{
			for(i=0;i<numDealer;i++)
			{
				if(VIEW_AGENT)
				{
					gdealers[i].setLabelVisibility(false);
				}
				else
				{
					gdealers[i].setLabelVisibility(true);
				}
			}
		});
	
		// ======================== Restricting the range of Zoom Levels =========================
		// Get the list of map types      
		var mt = map.getMapTypes();
		// Overwrite the getMinimumResolution() and getMaximumResolution() methods
		for (var i=0; i<mt.length; i++)
		{
			mt[i].getMinimumResolution = function() {return MIN_ZOOM;}
			mt[i].getMaximumResolution = function() {return MAX_ZOOM;}
		}
		//==================== Add a move listener to restrict the bounds range =================
		GEvent.addListener(map, "move", function() {checkBounds();});
		
}
function LoadMap(init)
{
	VIEW_AGENT	= 0;
	if (GBrowserIsCompatible()) 
	{		
		
		//====================	Ajout lien pour affichage ou pas des agents =================//
			
		/*function AgentDisplayControl() 
		{
		}
		AgentDisplayControl.prototype = new GControl();


		AgentDisplayControl.prototype.initialize = function(map) 
		{
			var container = document.createElement("div");
			var agentDivA = document.createElement("div");
			agentDivA.setAttribute("id", "btShowAgent");
			var agentDivM = document.createElement("div");
			agentDivM.setAttribute("id", "btHideAgent");
			container.appendChild(agentDivA);
			container.appendChild(agentDivM);
			agentDivA.appendChild(document.createTextNode("Afficher le r\351seau d'agents"));
			agentDivM.appendChild(document.createTextNode("Masquer le r\351seau d'agents"));
			GEvent.addDomListener(agentDivA, "click", function() 
			{     DisplayAgent(true);
			});
			GEvent.addDomListener(agentDivM, "click", function() 
			{     DisplayAgent(false);
			});     

			map.getContainer().appendChild(container);
			return container;
		}

		//positionnement du lien 
		AgentDisplayControl.prototype.getDefaultPosition = function() 
		{
			return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
		}
		
		map.addControl(new AgentDisplayControl());*/
		//====================	Ajout lien pour afficha ou pas des agent =================//

		// Recherche des coordonnées du point d'interêt choisi par l'internaute		
		//GetDealerForPOI(init);
		GetLocationsForAddress(
			document.getElementById('txtAddress').value,
			document.getElementById('AddressNotFound').value,
			'FR'
		);
	}
	else
	{
		alert("Sorry, the Google Maps API is not compatible with this browser");
	}
}

function DisplayDealerList(latitude, longitude)
{
	//alert('lat: ' + latitude + ' lng: ' + longitude);

	var txtBody = document.getElementById("txtBody");
	//====================  RECUPERATION DES CRITERES DE RECHERCHE ==================
	var params = new Array();

	params["poiLatitude"]	= poiLatitude = latitude;
	params["poiLongitude"]	= poiLongitude = longitude;
	
	//params["modelCode"] = gup("ModelCode");						
	critere["Model"]	= gup("ModelCode");
	
	critere["ModelL"]	= unescape(gup("ModelL"));

	//params["bodyCode"] = gup("GrBodyStyle");
	
	critere["GrBodyStyleL"] = unescape(gup("GrBodyStyleL"));
	
	

	//params["energyCode"] = gup("Energy");

	critere["EnergyL"] = unescape(gup("EnergyL"));

	//params["bonus"]		= gup("EcoBM");
	critere["EcoBM"]	= gup("EcoBM");
	
	if(gup('goodOffers').toUpperCase()=='TRUE' || gup('goodOffers')=='1')
	{
		//params["goodOffers"] = "1"
	}
	else
	{
		//params["goodOffers"] = "0"
	}					
	if(gup('extraOffers').toUpperCase()=='TRUE' || gup('extraOffers')=='1')
	{
		//params["extraOffers"] = "1"
	}
	else
	{
		//params["extraOffers"] = "0"
	}		
	if(gup("trace").toUpperCase()=='TRUE')
	{
		//params["trace"] = "true";
	}
	else
	{
		//params["trace"] = "false";
	}
	
	
	if(txtBody)
	{
		txtBody.value = "";
	}
	
	critere["ModelCode"]			=  gup("ModelCode");
	critere["GrBodyStyle"]			=  gup("GrBodyStyle");
	critere["Energy"]				=  gup("Energy");
	critere["GrEngine"]				=  gup("GrEngine");
	critere["GrGrade"]				=  gup("GrGrade");
	critere["GrTransmissionType"]	=  gup("GrTransmissionType");
	critere["Color"]				=  gup("Color");
	critere["ecoBonus"]				=  gup("ecoBonus");
	critere["MinPrice"]				=  gup("MinPrice");
	critere["MaxPrice"]				=  gup("MaxPrice");
	critere["SortGrBodyStyle"]		=  gup("SortGrBodyStyle");
	Ajax_Execute(location.pathname, "GetDealers", params, displayDealersCallBack);
}

function GetDealerForPOI(init) 
{   	
	var address = document.getElementById('txtAddress').value;
	var AddressNotFound = document.getElementById('AddressNotFound').value;
	if(address != "")
	{	
		address = address + ", france";
		
		geocoder.getLatLng(address,function(point)
		{
				if (!point)
				{
					alert(AddressNotFound);
				}
				else 
				{
					DisplayDealerList(point.lat(), point.lng());
				}// end if adresse est valide
			}// end function
			);
	}
}

function GetLocationsForAddress(address, addressNotFound, country)
{
	if (address != '') {
		address = address + ", " + country + ", Europe";
		
		//alert('addr: ' + address);
		
		geocoder.getLocations(
            address,
            function(response)
            {            
                if (response.Status.code == 200) {
					var $multipleAddress = $('#multipleAddressPanel').empty();
					var $txtAddress = $('#txtAddress');
					var firstCity = null;
					var nCountryCities = 0;
					
					function attachEntryClickEvent($entry, latitude, longitude)
					{
						if ($.browser.msie && $.browser.version == '6.0') {
							$entry.mouseover(function() {
								$entry.addClass('hover');
							});
							$entry.mouseout(function() {
								$entry.removeClass('hover');
							});
						}
						$entry.click(function() {
							//$multipleAddress.fadeOut('fast');
							$multipleAddress.css('display', 'none');
							$txtAddress.val($entry.text());
							switchHomeToMapPanel();
							showLoadingPanel();
							if( $("#zoneAddress").hasClass("plus") )
							{
								$("#zoneAddress").removeClass("plus");
							}
							if(!map)
							{
								createMap();
							}
							DisplayDealerList(latitude, longitude);
						});
					}
					
                    for (var i = 0; i < response.Placemark.length; i++) {
						var place = response.Placemark[i];
						if (place.AddressDetails.Country.CountryNameCode == country) {
							// On ne garde que les villes appartenant au pays en cours.
							if (firstCity == null) {
								firstCity = place.address + ';' + place.Point.coordinates[1] + ';' + place.Point.coordinates[0];
							}
							$multipleAddress.append('<li class="addressEntry">' + place.address + '</li>');
							attachEntryClickEvent($multipleAddress.children('li:last'), place.Point.coordinates[1], place.Point.coordinates[0]);
							nCountryCities++;
                        }
                    }
                
                    if (nCountryCities == 0) {
						// Pas de ville (globalement ou pour le pays en cours).
						alert(addressNotFound);
                    } else if (nCountryCities == 1) {
						var firstCityArgs = firstCity.split(';');
						if( $("#zoneAddress").hasClass("plus") )
						{
							$("#zoneAddress").removeClass("plus");
						}
						$txtAddress.val(firstCityArgs[0]);
						switchHomeToMapPanel();
						showLoadingPanel();
						if(!map)
						{
							createMap();
						}
						DisplayDealerList(firstCityArgs[1], firstCityArgs[2]);
                    } else {
						// Affichage de la liste des villes disponibles.
						if(!($("#zoneAddress").hasClass("plus")))
						{
							$("#zoneAddress").addClass("plus");
						}
						
						$multipleAddress
							.parent().css('overflow', 'hidden').end()
							.fadeIn('slow')
							.get(0).scrollTop = 0;
					}
                } else {
					if($("#zoneAddress").hasClass("plus"))
					{
						$("#zoneAddress").removeClass("plus");
					}
					alert(addressNotFound);
                }
            }
		);
	}
}

//======================================================================
//======================== ETAPE 2: CHARGEMENT DES PDV =================
//======================================================================
function displayDealersCallBack(response)
{
	
							
	// ETAPE 2-1: Lire la liste fournie côté serveur
	var dealers = response["dealers"]
	gdealers	= [];
	numDealer = 0;
	map.clearOverlays();
	// Read the data from response
	var xmlDoc = GXml.parse(dealers);
	// obtain the array of markers and loop through it
	var markers = xmlDoc.documentElement.getElementsByTagName("Dealer");   
	var nbDealers;
	
	if (markers != null && markers.length > 0)
	{
		nbDealers = markers.length;
		for (var i = 0; i < markers.length; i++) 
		{
			// obtain the attribues of each marker
			var dealer = {};
			
			dealer.id					= markers[i].getAttribute("Id");
			dealer.rrdiid				= markers[i].getAttribute("RRDIId");
			dealer.addr					= markers[i].getAttribute("Addr");
			dealer.city					= markers[i].getAttribute("City");
			dealer.zipCode				= markers[i].getAttribute("ZipCode");
			dealer.country				= markers[i].getAttribute("Country");
			dealer.name					= markers[i].getAttribute("name");
			dealer.nameUrl				= markers[i].getAttribute("nameUrl");
			var lat						= parseFloat(markers[i].getAttribute("latitude"));
			var lng						= parseFloat(markers[i].getAttribute("longitude"));
			dealer.goodOffers			= parseInt(markers[i].getAttribute("goodOffers"));
			dealer.isAnAgent			= parseInt(markers[i].getAttribute("isAnAgent"));
			dealer.ecgCode				= markers[i].getAttribute("EcgCode");			
			dealer.dealerList			= markers[i].getAttribute("dealerListEdealer");			
			dealer.urlRedirectEdealer	= markers[i].getAttribute("urlRedirectEdealer");			
			dealer.point				= new GLatLng(lat,lng);
			dealer.distance				= markers[i].getAttribute("distance");
			dealer.supervisor			= markers[i].getAttribute("supervisor");
			dealer.hasAgent				= markers[i].getAttribute("hasAgent");
			dealer.phone				= markers[i].getAttribute("phone");
			dealer.ecgcode				= markers[i].getAttribute("ecgcode");
			dealer.preFixe				= markers[i].getAttribute("preFixe");
			
			
					
			// Création du point de vente 
			CreateDealer(dealer);
		}
		

		/*
		Algorithme utilisé:
			Etape 1:
				On parcourt le tableau Distance afin de calculer les écarts de distances entre deux PDV successifs
				Dès qu'un écart dépasse le seuil fixé, on arrête la recherche et on stocke l'index-1 = indexMax
				On connait alors l'indexMax et la distance max (Distance(indexMax)) 
				Exemple: 
				Distance= [5, 10, 15, 21, 45, 49] et seuil = 10km
					-> indexMax = 3 et DistanceMax= 21
			
			Etape 2: 
				Réduction du périmètre si besoin (dans le cas d'une densite forte de PDV dans un périmètre restreint)
				Exemple: Paris.
				Donc si l'indexMax est supérieur à 2 (c'est que l'on peut présenter au moins 3 PDV), on se cale sur l'index 2
				c'est à dire que indexMax= 2 d'où DistanceMax=Distance[2]
				
			Etape 3:
				Calcul du niveau de zoom en fonction de la DistanceMax.
				On opère par seuil 
		*/
		
		// Seuil: distance max autorisée entre deux pdv
		var distanceMaxAllowedBetweenTwoDealers = 10;
		
		// IndexMax
		var indexFurtherDealerDistanceMaxAllowed = 0;
		// DistanceMax
		var distanceFurtherDealerDistanceMaxAllowed = 0;
		Distance[indexFurtherDealerDistanceMaxAllowed];
		
		
		// +++++++++++++++++++++++++++++++++++ ETAPE 1  ++++++++++++++++++++++++++++++
		for (indexFurtherDealerDistanceMaxAllowed = 1; indexFurtherDealerDistanceMaxAllowed < markers.length;  indexFurtherDealerDistanceMaxAllowed ++)
		{
			var di = Distance[indexFurtherDealerDistanceMaxAllowed];
			var di_1 = Distance[indexFurtherDealerDistanceMaxAllowed-1];
		
			if ( (parseFloat(di) - parseFloat(di_1)) > parseFloat(distanceMaxAllowedBetweenTwoDealers))
			{
				indexFurtherDealerDistanceMaxAllowed --;
				break;
			}
		}
		
		// +++++++++++++++++++++++++++++++++++ ETAPE 2  ++++++++++++++++++++++++++++++
		if (indexFurtherDealerDistanceMaxAllowed > 2)
		{
			distanceFurtherDealerDistanceMaxAllowed = Distance[2];
		}
		else
		{
			if(indexFurtherDealerDistanceMaxAllowed > 0)
			{
				distanceFurtherDealerDistanceMaxAllowed = Distance[--indexFurtherDealerDistanceMaxAllowed];
			}
			else
			{
				distanceFurtherDealerDistanceMaxAllowed = Distance[0];
			}
		}
		
		
		// +++++++++++++++++++++++++++++++++++ ETAPE 3  ++++++++++++++++++++++++++++++
		var d = parseInt(distanceFurtherDealerDistanceMaxAllowed);
		zoom = GetZoom(d);	
		ZoomLabel = zoom;
		
		point  = new GLatLng(poiLatitude,poiLongitude);
		
		map.setCenter(point,zoom);
		
		for( var index=0 ; index < nbDealers ; index++)
		{
			map.addOverlay(gdealers[index]);
		}
		
		// Mise en avant du point de vente le plus proche
		// --> ouverture du layer
		/*
		if(numDealer>0)
		{
			gdealers[0].openInfoWindowHtml(Htmls[0]);
			var i = 0;
			gdealers[0].setLabelVisibility(false);
			//display('list','none');
			//display('map','block');
			//map.setCenter(point);
			//map.addOverlay(this);
		}*/
		//myclick(0);
		$(document).ready(function()
		{
			for(i=0;i<numDealer;i++)
			{
				gdealers[i].setLabelVisibility(true);
				if(Agent[i])
				{
					 gdealers[i].hide();
				}
			}
		});		
	}// end if liste des pdv non vide
	else
	{
		map.setCenter(new GLatLng(46.928703,2.041740), 5);
		alert ('D\351sole, il n\'y a aucun point de vente correspondant \340 vos crit\350res');		
	}
	$(".labelCity").hide();
	hideLoadingPanel();
}


//================ Création du Dealer ==============
function CreateDealer(dealer)
{
	///=== Création de l'icone
	var baseIcon = new GIcon();
	baseIcon.iconSize=new GSize(24,24);
	baseIcon.iconAnchor=new GPoint(8,16);
	baseIcon.infoWindowAnchor=new GPoint(8,0);
	

	var ApplicationPath			= document.getElementById("ApplicationPath");
	var HomeUrlLabel			= document.getElementById("HomeUrlLabel");
	
	
	//========= traitement des url simplifié ===============
	var reg		= new RegExp("[/]+", "g");
	var tableau = location.pathname.split(reg);	
	var indexModel		= 2;
	var indexBodyStyle	= 3;
	if(navigator.appName == "Microsoft Internet Explorer")
	{
		var indexModel		= 1;
		var indexBodyStyle	= 2;
	}
	var labelBrand = document.getElementById("labelBrand").value;
	critere["ModelL"] = "";
	if(tableau[indexModel] != "" && tableau[indexModel] != null && tableau[indexModel].toUpperCase().indexOf(HomeUrlLabel.value.toUpperCase(),0) == -1)
	{
		critere["ModelL"] = tableau[indexModel].toUpperCase().replace(labelBrand.toUpperCase(),'');
		critere["ModelL"] = critere["ModelL"].toLowerCase();
		critere["GrBodyStyleL"] = "";
		if(tableau[indexBodyStyle] != "" && tableau[indexBodyStyle] != null)
		{
			critere["GrBodyStyleL"] = tableau[indexBodyStyle];
		}
	}
	

	var logo = new GIcon(baseIcon, ApplicationPath.value + "Images/img/peugeotlogo.gif", null, null);
	var logoAgent = new GIcon(baseIcon, ApplicationPath.value + "Images/img/logoAgent.png", null, null);
	
		
	var VehAvailableLabel		= "";
	
	var GoodOffersLabel			= document.getElementById("GoodOffersLabel");	
	
	var VehCritAvailablePart1	= document.getElementById("VehCritAvailablePart1");
	var VehCritAvailablePart2	= document.getElementById("VehCritAvailablePart2");
	var EcoBonusLabel			= document.getElementById("EcoBonusLabel");
	var SearchByCriteriaLabel	= document.getElementById("SearchByCriteriaLabel");
	
		
	var paramCriteres = "";
	var paramExtraOffers = "";
	var eDealer = false;
	var nbLinkDealer = 0;
	
	var labelBrand = document.getElementById("labelBrand").value;
	
	//====Création des parametres du au critere de recher
	if (critere["ModelL"]!="" || critere["GrBodyStyleL"]!="" || critere["Energy"]!="")
	{
		//paramCriteres += "&filter=True";
		
		//alert(critere["ModelL"]);
		if (critere["ModelL"] != "")
		{
			//paramCriteres += "&ModelCode="+critere["Model"]+"&ModelL="+Url.encode(critere["ModelL"]);
			paramCriteres += "/" + labelBrand + critere["ModelL"];
			paramExtraOffers +="&ModelCode="+critere["Model"]+"&ModelL="+Url.encode(critere["ModelL"]);
		}
		if (critere["GrBodyStyleL"] != "")
		{
			//paramCriteres += "&GrBodyStyle="+critere["GrBodyStyle"]+"&GrBodyStyleL="+Url.encode(critere["GrBodyStyleL"]);
			paramCriteres +=  "/" +  critere["GrBodyStyleL"];
			paramExtraOffers += "&GrBodyStyle="+critere["GrBodyStyle"]+"&GrBodyStyleL="+Url.encode(critere["GrBodyStyleL"]);
		}
		if (critere["Energy"]!="")
		{
			paramCriteres += "?Energy="+critere["Energy"]+"&EnergyL="+Url.encode(critere["EnergyL"]);
		}
		if(critere["SortGrBodyStyle"] != "")
		{
			paramExtraOffers += "&SortGrBodyStyle="+critere["SortGrBodyStyle"];
		}
		
		VehAvailableLabel = VehCritAvailablePart1.value+" "+critere["ModelL"]+" "+critere["GrBodyStyleL"]+" "+critere["EnergyL"]+" "+VehCritAvailablePart2.value;
		
	}
	else
	{
		var VehAvailableLabel		= document.getElementById("VehAvailableLabel").value;
	}
	if(critere["EcoBM"]=="1")
	{
		paramCriteres += "&EcoBM=200&EcoBML=200"
		VehAvailableLabel += " "+EcoBonusLabel.value
		
	}
	
	
	var html		= "";
		
	html	+= "<table class='googleMapInfos' border='0' cellpadding='0' cellspacing='0'>";
	html	+= "	<tr>";
	html	+= "		<td>";
	html	+= "			<img src='"+ ApplicationPath.value +"Images/img/alinea_garage.jpg' height='20px' />";	
	html	+= "		</td>";
	html	+= "		<td class='gmapDealerName'>";
	html	+= "			" + dealer.name;
	html	+= "		</td>";
	html	+= "	</tr>";
	html	+= "	<tr>";
	html	+= "		<td>&nbsp;</td>";
	html	+= "		<td class='gmapDealerAddress'>";
	html	+= "			" + dealer.addr + "&nbsp;<br/>" + dealer.zipCode + "&nbsp;" + dealer.city;
	html	+= "		</td>";
	html	+= "	</tr>";
	
	 
	
	
		
	var reg = new RegExp("[,]", "g");
	var tableauDealers = dealer.dealerList.split(reg);
	for (var i=0; i<tableauDealers.length; i++) 
	{
		
		if(dealer.rrdiid == tableauDealers[i] && !eDealer)
		{
			
			eDealer = true;			
		}
		
	}	
	if(dealer.isAnAgent!="1")
	{
		if(dealer.phone != "")
		{
			html	+= "	<tr>";
			html	+= "		<td>&nbsp;</td>";
			html	+= "		<td class='gmapDealerPhone'>";
			html	+= "			T&eacute;l&eacute;phone: "+dealer.phone;
			html	+= "		</td>";
			html	+= "	</tr>";	
		}
		if(!eDealer)
		{
			
			
				var paramSearchCriteria = dealer.rrdiid;	
				paramSearchCriteria	+=  '","' + dealer.nameUrl;		
				paramSearchCriteria	+= '","' + critere["ModelCode"];
				paramSearchCriteria	+= '","' + critere["GrBodyStyle"];
				paramSearchCriteria	+= '","' + critere["Energy"];
				paramSearchCriteria += '","' + critere["GrEngine"];
				paramSearchCriteria += '","' + critere["GrGrade"]
				paramSearchCriteria += '","' + critere["GrTransmissionType"];
				paramSearchCriteria += '","' + critere["Color"];
				paramSearchCriteria += '","' + critere["ecoBonus"];
				paramSearchCriteria += '","' + critere["MinPrice"];
				paramSearchCriteria += '","' + critere["MaxPrice"];
				paramSearchCriteria	+= '","' + dealer.ecgCode;
				
				
				
				//lien bonnes affaires
				var labelUrlGoodOffers = document.getElementById("labelUrlGoodOffers").value;
				if(dealer.goodOffers > 0)
				{
					html	+= "	<tr>";
					html	+= "		<td colspan='2' class='gmapDealerLink'>";
					//html	+= '			<a href="' + ApplicationPath.value + '/default.aspx?Dealer=' + dealer.rrdiid + '&DealerL=' + dealer.nameUrl + '&goodoffers=true">&nbsp;>&nbsp;' + GoodOffersLabel.value +'</a>';
					html	+= '			<a href="' + ApplicationPath.value +  dealer.preFixe + '/' + labelUrlGoodOffers + '">&nbsp;>&nbsp;' + GoodOffersLabel.value +'</a>';
					html	+= "		</td>";
					html	+= "	</tr>";
					nbLinkDealer++;
				
				}
				
				//lien tout les véhicules
				html	+= "	<tr>";
				html	+= "		<td colspan='2' class='gmapDealerLink'>";
				//html	+= '			<a href="' + ApplicationPath.value + '/default.aspx?Dealer=' + dealer.rrdiid + '&DealerL=' + dealer.nameUrl + paramCriteres + '">&nbsp;>&nbsp;' + VehAvailableLabel.value + '</a>';
				html	+= '			<a href="' + ApplicationPath.value + dealer.preFixe + paramCriteres +  '">&nbsp;>&nbsp;' + VehAvailableLabel
				 +'</a>';
				html	+= "		</td>";
				html	+= "	</tr>";
				nbLinkDealer++;
					
				//lien recherche
				if(nbLinkDealer < 3)
				{
					html	+= "	<tr>";
					html	+= "		<td colspan='2' class='gmapDealerLink searchCriteria'>";		
					html	+= '			<a   href=\'#\'  class=\'head\' >&nbsp;>&nbsp;' + SearchByCriteriaLabel.value + '</a>';
					html	+= "		</td>";
					html	+= "	</tr>";	
					
				}
				
				
				if(dealer.hasAgent == 1)
				{
					html	+= "	<tr>";
					html	+= "		<td>&nbsp;</td>";
					html	+= "		<td id="+ dealer.rrdiid +"  class='lien-td-agent'>";
					html	+= '			<img class="loupe" src="'+ ApplicationPath.value +'Images/img/picto_loupe.gif"/>&nbsp;<a  href="javascript:" onclick="DisplayAgentByDealer(\''+ dealer.ecgcode +'\',\''+ dealer.rrdiid +'\','+numDealer+')">'+$("#labelUrlAgent").val()+'</a>';
					html	+= "		</td>";
					html	+= "	</tr>";
				}	
		}
		else
		{			
				html	+= "	<tr>";
				html	+= "		<td colspan='2' class='gmapDealerLink'>";
				html	+= '			<a href="' + dealer.urlRedirectEdealer + '?goodoffers=true">&nbsp;>&nbsp;' + GoodOffersLabel.value +'</a>';
				html	+= "		</td>";
				html	+= "	</tr>";			
				html	+= "	<tr>";
				html	+= "		<td colspan='2' class='gmapDealerLink'>";
				html	+= '			<a href="' + dealer.urlRedirectEdealer +'">&nbsp;>&nbsp;' + VehAvailableLabel.value +'</a>';
				html	+= "		</td>";
				html	+= "	</tr>";
		}
	}
	else
	{
		if(dealer.phone!="")
		{
			html	+= "	<tr>";
			html	+= "		<td>&nbsp;</td>";
			html	+= "		<td class='gmapAgentPhone'>";
			html	+= "			"+$("#labelPhoneAgent").val()+" <strong>"+dealer.phone+"</strong>";
			html	+= "		</td>";
			html	+= "	</tr>";	
		}
	}
	html	+= "</table>";
	
	
	
	
	var YMarker;
	
	/**Conversion de la taille d'une chaine en Pixel**/
	divcache=document.getElementById("CACHE");
	divcache.innerHTML = dealer.name;
	YMarker = -27;
	if(dealer.isAnAgent == "1")
	{
		divcache.innerHTML += "<span class='labelCity'><br/> &agrave; "+dealer.city+"</span>";
		YMarker = -23;
	}
	var nameLengthPixel;
	var NETSCAPE = (navigator.appName == "Netscape")? 1:0;
	
	if(NETSCAPE)
	{
		nameLengthPixel= divcache.offsetHeight;
	}
	else
	{
		nameLengthPixel= divcache.scrollHeight;
	}
	YMarker += -parseInt(nameLengthPixel);
	
	var opts
	if(dealer.isAnAgent!="1")
	{
	
		opts = {
            "icon": logo,
            "clickable": true,
            "labelText": "<div class='labeledMarker'><div class='labelborderTop'></div><div class='labelName'><a href=#>" + dealer.name+ "</a></div></div>",
            "labelOffset": new GSize(-70,YMarker)
        };
       
    }
    else
    {
		opts = {
            "icon": logoAgent,
            "clickable": true,
            "labelText": "<div class='labeledMarker'><div class='labelborderTop'></div><div class='labelName'><a href=#>" + dealer.name+ "</a><br/><span id='labelCity'> &agrave; "+dealer.city+"</span></div></div>",
            "labelOffset": new GSize(-70,YMarker)
        };
		/*opts = {
            "icon": logoAgent,
            "clickable": true,
            "labelText": "",
            "labelOffset": new GSize(-70,YMarker)
        };*/
    }
      
      
	///=== Marquage du dealer
	//var marker = new GMarker(point,logo);
	var marker = new LabeledMarker(dealer.point, opts);	
	
	
	if(dealer.isAnAgent!="1")
	{
		Agent[numDealer] = false;
		if(VIEW_AGENT)
		{
			marker.setLabelVisibility(false);
		}
		else
		{
			marker.setLabelVisibility(true);
		}
		GEvent.addListener(marker, "click", function()
		{
			if(!VIEW_AGENT)
			{
				for(var i=0; i<numDealer;i++)
				{
					gdealers[i].closeInfoWindow();
				}
				marker.setLabelVisibility(false);
				marker.openInfoWindowHtml(html);
			}
			else
			{
				marker.setLabelVisibility(false);
				marker.openInfoWindowHtml(html);
			}
		});
		
		GEvent.addListener(marker, "mouseover", function()
		{
			if(VIEW_AGENT)
			{
				marker.setLabelVisibility(true);
			}
		});
		
		GEvent.addListener(marker, "mouseout", function()
		{
			if(VIEW_AGENT)
			{
				marker.setLabelVisibility(false);
			}
		});
		
		GEvent.addListener(marker, "infowindowopen", function()
		{
			markDealersAgents(0);
			$(".head").click(function(){
				$(".over").fadeIn("fast");
				if (! $(this).hasClass("select")) {
					$(".body").fadeOut("fast", function () { $(".head").removeClass("select")} );
					$(".body").fadeIn("fast", function () { $(".head").addClass("select")} );
					
				} 				
				loadDealerProperties(dealer.name,dealer.city,dealer.ecgCode,dealer.rrdiid,dealer.preFixe);
				return false;
			});
			$(".close").click(function(){
				$(".over").fadeOut("fast");$(".body").fadeOut("fast");$(".head").removeClass("select");
			});
			if(VIEW_AGENT)
			{
				//$(".lien-td-agent").hide();
			}
		});
		
		GEvent.addListener(marker, "infowindowclose", function()
		{
			if(!VIEW_AGENT)
			{
				if(map.getZoom()>=ZoomLabel)
				{
					marker.setLabelVisibility(true);
				}
				else
				{
					marker.setLabelVisibility(false);
				}
			}
		});
	}
	else
	{
		marker.setLabelVisibility(false);
		
		GEvent.addListener(marker, "mouseover", function()
		{
			marker.setLabelVisibility(true);
		});
		GEvent.addListener(marker, "mouseout", function()
		{
			marker.setLabelVisibility(false);
		});
		GEvent.addListener(marker, "click", function()
		{
			marker.setLabelVisibility(false);
			marker.openInfoWindowHtml(html);
			markDealersAgents(1);
		});
		Agent[numDealer] = true;
		
	}
	
	
	
	Htmls[numDealer]			= html;	
	gdealers[numDealer]			= marker;
	Distance[numDealer]			= dealer.distance;	
	SupervisorCode[numDealer]	= dealer.supervisor;
	dealersRRDI[numDealer]		= dealer.rrdiid;
	numDealer++;
	
	
}


// This function picks up the click and opens the corresponding info window
function myclick(i) 
{
	gdealers[i].openInfoWindowHtml(Htmls[i]);
	//display('list','none');
	display('map','block');	
	map.setCenter(gdealers[i].getPoint());
	map.addOverlay(gdealers[i]);
}


// If the map position is out of range, move it back
function checkBounds() 
{
	// Perform the check and return if OK
	if (allowedBounds.contains(map.getCenter())) 
	{
		return;
	}
	// It`s not OK, so find the nearest allowed point and move there
	var C = map.getCenter();
	var X = C.lng();
	var Y = C.lat();

	var AmaxX = allowedBounds.getNorthEast().lng();
	var AmaxY = allowedBounds.getNorthEast().lat();
	var AminX = allowedBounds.getSouthWest().lng();
	var AminY = allowedBounds.getSouthWest().lat();

	if (X < AminX) {X = AminX;}
	if (X > AmaxX) {X = AmaxX;}
	if (Y < AminY) {Y = AminY;}
	if (Y > AmaxY) {Y = AmaxY;}
	//alert ("Restricting "+Y+" "+X);
	map.setCenter(new GLatLng(Y,X));
}

function handleErrors()
{
	if (direction.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	{
		alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
	}
	else if (direction.getStatus().code == G_GEO_SERVER_ERROR)
	{
		alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
	}
	else if (direction.getStatus().code == G_GEO_MISSING_QUERY)
	{
		alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
	}
	//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
	//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
			
	else if (direction.getStatus().code == G_GEO_BAD_KEY)
	{
		alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
	}
	else if (direction.getStatus().code == G_GEO_BAD_REQUEST)
	{
		alert("A directions request could not be successfully parsed.\n Error code: " + direction.getStatus().code);
	}		
	else 
	{
		alert("An unknown error occurred.");
	}

}

function disp(dist,name,i) 
{ 
	var ResultItemPreFix = document.getElementById("ResultItemPreFix");
	var ResultItemDistance = document.getElementById("ResultItemDistance");
	return "<div class='resultItem'><div><a href=\"javascript:myclick('" + i + "')\">" + name + "</a></div>" + ResultItemPreFix.value + "&nbsp;" + dist + "&nbsp;" + ResultItemDistance.value + "</div>";
}



function SaveBody()
{
	var txtBody = document.getElementById("txtBody");
	var ddlBody = document.getElementById("ddlBody");
	
	txtBody.value = ddlBody.value;
}


function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name.toLowerCase()+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href.toLowerCase() );
  if( results == null )
    return "";
  else
  {
    return results[1];
  }
}

var Url = {
 
	// public method for url encoding
	encode : function (string) {		
		return escape(this._utf8_encode(string));
	},
 
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
			
 
		}
 
		return string;
	}
 
}
function search()
{	
	var txtAddress = document.getElementById("txtAddress");
	if (txtAddress.value != "")
	{
		LoadMap(1);
	}
	else
	{
		switchMapToHomePanel();
	}
}
function focusValid(e, obj, type) 
{
	
	// Firefox
	if(window.event)
	{
		if (window.event.type == "keypress" && window.event.keyCode == 13) 
		{
			search();
		}  
	}
	else
	{
		if (e.which)
		{
			// On determine le code ASCII
			keynum = e.which
			// Touche ENTRER
			if (  keynum == 13 )
			{
				// lancement de la recherche
				search();
			}
			
		}
		// Autre navigateur (non supporter)
		else
		{
			return true;	
		}
	}
	
	
}
//fonction de gestion d'affichage des agents par PDV
function DisplayAgentByDealer(ecgCode,rrdiCode,indexDealer)
{
	VIEW_AGENT = 1;
	
	markDealersAgents(2);
	
	var elements			= false;
	var distanceCurrent		= 0;
	var distanceOld			= 0;
	var zoomAgent			= 0;
	var distanceDealer		= Distance[indexDealer];
	
	$(".labelCity").show();
	
	for(i=0;i<numDealer;i++)
	{
		if(Agent[i] && SupervisorCode[i].substr(0,7)!= "" && SupervisorCode[i].substr(0,7) == rrdiCode.substr(0,7))
		{
			gdealers[i].show();
			gdealers[i].setLabelVisibility(false);
			elements = true;
			distanceCurrent = parseInt(Distance[i]);
			
			if(distanceCurrent > distanceOld)
			{ 			
				distanceOld = distanceCurrent;				
			}
		}
		else
		{	 
			gdealers[i].hide();					
		}
		
	} 		
	if(elements)
	{
		zoomAgent	= GetZoom(distanceOld);
		gdealers[indexDealer].closeInfoWindow();		
		gdealers[indexDealer].show();		
		map.setCenter(gdealers[indexDealer].getPoint(),zoomAgent);
		gdealers[indexDealer].setLabelVisibility(false);		
				
	}
	else
	{
		for(i=0;i<numDealer;i++)
		{
			if(!Agent[i])
			{
				 gdealers[i].show();
			}
			
		}
	}
	
}
//Ajout du marquage Xiti pour un agent
function markDealersAgents(typeEvent)
{
	var urlIframe = "";
	switch(typeEvent)
	{
		case 0 : urlIframe = "Bulle-elargie-Concessionnaires";break;
		case 1 : urlIframe = "Bulle-elargie-Agents";break;
		default : urlIframe = "GoogleMaps-agents";break;
	}
	$("#hitPopup").attr("src",urlIframe);
}
//Fonction qui determine le zoom
function GetZoom(d)
{
		var returnZoom	
		if ( d <= 5)
		{
			
				returnZoom = 12;
			
		}	
		else if ( d <= 15)
		{
			
				returnZoom = 11;
			
		}
		else if ( d <= 30)
		{
			
				returnZoom = 10;
			
		}
		else if ( d <= 50)
		{
			
				returnZoom = 9;
			
		}
		else if ( d <= 135)
		{
			
				returnZoom = 8;
			
		}
		else
		{
				returnZoom = 7;
		}
		
		return returnZoom
}


