// Google Maps API

/*
Fonction Google
*/

function GoogleMapsLoad(cat)
{
	// Tableau des points à afficher
	var tabGoogleMapPoint = new Array();
	var tabGoogleMapPointGrouped = new Array();
	
	if (GBrowserIsCompatible())
	{
		var zoom = 9
		var map = new GMap2(document.getElementById("map"));
		var geocoder = new GClientGeocoder();

		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GOverviewMapControl());
		if (cat == "8" || cat == "6,7,8" || cat == "6,7") zoom = 7;
		map.setCenter(new GLatLng(45.7797,3.08694),zoom);
		//map.enableScrollWheelZoom();

		function markerStyle(type)
		{
			var MonPointeur = new GIcon(G_DEFAULT_ICON);
			if (type == "1" )
			{
					MonPointeur.image = "../images/googlemap/marker01.png";
					MonPointeur.shadow = "";
			}
			else if (type == "2" )
			{
					MonPointeur.image = "../images/googlemap/marker02.png";
					MonPointeur.shadow = "";
			}
			else if (type == "3" )
			{
					MonPointeur.image = "../images/googlemap/marker03.png";
					MonPointeur.shadow = "";
			}
			else if (type == "4" )
			{
					MonPointeur.image = "../images/googlemap/marker04.png";
					MonPointeur.shadow = "";
			}
			else if (type == "5" )
			{
					MonPointeur.image = "../images/googlemap/marker05.png";
					MonPointeur.shadow = "";
			}
			else if (type == "6" )
			{
					MonPointeur.image = "../images/googlemap/marker07.png";
					MonPointeur.shadow = "";
			}			
			else if (type == "7" )
			{
					MonPointeur.image = "../images/googlemap/marker07.png";
					MonPointeur.shadow = "";
			}			
			else if (type == "8" )
			{
					MonPointeur.image = "../images/googlemap/marker06.png";
					MonPointeur.shadow = "";
			}						
			else
			{
					MonPointeur.image = "../images/marker.png";
					MonPointeur.shadow = "";
			}
			return MonPointeur;
		}

		function createMarker(marker,image,nom,type,point,adresse,codepostal,ville,pays)
		{
			var marker = new GMarker(point,markerStyle());
			GEvent.addListener (marker, "click", function() { marker.openInfoWindowHtml("<span class='name'>" + nom + "</span><br/>" + adresse + "<br/>" + codepostal + " " + ville ); });

			return marker;
		}
		
		function createMultiMarker(tabGoogleMapPointGrouped,point)
		{			
			var profil;
			
			for (var i=0 ; i < tabGoogleMapPointGrouped.length; i++){
				profil = tabGoogleMapPointGrouped[i][12]
			}
		
			var marker = new GMarker(point,markerStyle(profil));

			GEvent.addListener (marker, "click", function() 
				{ 
				
				var info = "";
				
					for (var i=0 ; i < (tabGoogleMapPointGrouped.length); i++){
					
						var html_address = ""
						var html_address_2 = ""
						var html_tel = ""
						var html_fax = ""
						var html_mobil = ""
						var html_email = ""
						var html_web = ""
						
						if (tabGoogleMapPointGrouped[i][3] != '') { html_address = tabGoogleMapPointGrouped[i][3] + "<br/>" }
						if (tabGoogleMapPointGrouped[i][4] != '' || tabGoogleMapPointGrouped[i][5] != '') { html_address_2 = tabGoogleMapPointGrouped[i][4] + " " + tabGoogleMapPointGrouped[i][5]+ "<br/>" }
						if (tabGoogleMapPointGrouped[i][7] != '') { html_tel = "<span class='tel' title='Téléphone'>" + tabGoogleMapPointGrouped[i][7] + "</span><br/>" }
						if (tabGoogleMapPointGrouped[i][8] != '') { html_fax = "<span class='fax' title='Fax'>" + tabGoogleMapPointGrouped[i][8] + "</span><br/>" }
						if (tabGoogleMapPointGrouped[i][9] != '') { html_mobil = "<span class='mobile' title='Mobile'>" + tabGoogleMapPointGrouped[i][9] + "</span><br/>" }
						if (tabGoogleMapPointGrouped[i][9] != '') { html_email = "<span class='email' title='Contacter par E-mail'><a href='mailto:" + tabGoogleMapPointGrouped[i][10] + "'>" + tabGoogleMapPointGrouped[i][10] + "</span><br/>" }
						if (tabGoogleMapPointGrouped[i][11] != '') { html_web = "<span class='web' title='Site Internet'><a href='http://" + tabGoogleMapPointGrouped[i][11] + "'>Site Internet</a></span><br/>" }
							
						if (i > 0) { info = info + "<br /><hr style='border:#CCCCCC;height:1px' /><br />"; }
						
						info = info + "<span class='name'>" + tabGoogleMapPointGrouped[i][1] + "</span><br/>" + 
													html_address + html_address_2 + html_tel + 
													html_fax + html_mobil + html_email + html_web + tabGoogleMapPointGrouped[i][2];								
						
						info = info.replace(/&lt;/g, '<');
						info = info.replace(/&gt;/g, '>');											
					}
				marker.openInfoWindowHtml(info); 
				});
			return marker;
		}
		
		// Fonction récursive de recherche des coordonnées GPS
		function rechCoords(id, address, pc, town, etape) {
		
			// sinon on les recherche
			var search = ''
			var lattitude = 0;
			var longitude = 0;
		
			switch (etape) {			
				case '1':
					search = address+" "+pc+" "+town
					break;
				case '2':
					search = pc+" "+town
					break;
				case '3':
				default :
					search = town
			}
				
			geocoder.getLatLng(search, 
				function(point) {
					if (!point) {						
						switch (etape) {
						
							case '1':
								rechCoords (id, address,pc,town,'2');
								break;
							case '2':
								rechCoords (id, address,pc,town,'3');
								break;
							case '3':
							default :
								if (address !='' || pc !='' || town !='') {									
									alert(id);
								}									
						}
					} else {		

						// Stockage des coordonnées manquantes
						if(window.XMLHttpRequest) 
						{
							oXmlHttp = new XMLHttpRequest();
							oXmlHttp.open("POST", "../_inc/CPN_GoogleLatLng.asp", false);
							oXmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
							var data = "id="+id+"&lng="+point.x+"&lat="+point.y;
							
							oXmlHttp.send(data);			
						}
						
						longitude = point.x;
						lattitude = point.y;
					}
				}				
			 );			
			 
			 return new GLatLng(lattitude, longitude);
		}		
		
		//Fonction d'ajout d'offre sur un marker existant
		function affPoints(tabGoogleMapPointGrouped, p) 
		{			
		
			var address = '';
			var pc = '';
			var town = '';
		
			if (p.x != 0 && p.y != 0) {		
				map.addOverlay(createMultiMarker(tabGoogleMapPointGrouped,p));			
			} else {

				address = tabGoogleMapPointGrouped[0][3];
				pc = tabGoogleMapPointGrouped[0][4];
				town = tabGoogleMapPointGrouped[0][5];
			
				if (address !='' || pc !='' || town !='') {
				map.addOverlay(createMultiMarker(tabGoogleMapPointGrouped,rechCoords(
					tabGoogleMapPointGrouped[0][0],address,pc,town,'1')));
					
				}
			}			
		}
				
		// On ajoute d'abord le marqueur sur le volcan de lemptégy
		GDownloadUrl("../_inc/googlemapdata.xml", function(data, responseCode)
		{
			var xml = GXml.parse(data);
			var element = xml.documentElement.getElementsByTagName("googlemaps");

			for (var i=0 ; i < element.length ; i++){
				 var identifiant = new String(element[i].getAttribute("identifiant"));
				 var image = new String(element[i].getAttribute("image"));
				 var nom = new String(element[i].getAttribute("nom"));
				 var type = new String(element[i].getAttribute("type"));
				 var adresse = new String(element[i].getAttribute("adresse"));
				 var codepostal = new String(element[i].getAttribute("codepostal"));
				 var ville = new String(element[i].getAttribute("ville"));
				 var latitude = new String(element[i].getAttribute("latitude"));
				 var longitude = new String(element[i].getAttribute("longitude"));
				 var point = new GLatLng(parseFloat(latitude), parseFloat(longitude));
 
				 if ((latitude.length > 0) && (longitude.length > 0))
				 {
					map.addOverlay(createMarker(identifiant,image,nom,type,point,adresse,codepostal,ville));
				 }
			}
		})
		
		// On ajoute ensuite les marqueurs des partenaires
		GDownloadUrl("../_inc/CPN_GoogleMapData.asp?type=" + cat, function(data, responseCode)
		{		
			var xml = GXml.parse(data);
			var tabGoogleMapPoint = xml.documentElement.getElementsByTagName("offre");

			var j=0;
			var precLongitude = '';
			var precLattitude = '';
			
			for (var i=0 ; i < tabGoogleMapPoint.length; i++){				
			
				var longitude	= new String(tabGoogleMapPoint[i].getAttribute("longitude"));
				var lattitude	= new String(tabGoogleMapPoint[i].getAttribute("lattitude"));				
				
				if (parseFloat(longitude) != parseFloat(precLongitude) 
					&& parseFloat(lattitude) != parseFloat(precLattitude) && i > 0) {			
					
					affPoints(tabGoogleMapPointGrouped, new GLatLng(precLattitude, precLongitude)); 
					tabGoogleMapPointGrouped = new Array(); j = 0;
				}
				
				tabGoogleMapPointGrouped[j] = new Array(15);
				
				tabGoogleMapPointGrouped[j][0] = tabGoogleMapPoint[i].getAttribute("id");
				tabGoogleMapPointGrouped[j][1] = tabGoogleMapPoint[i].getAttribute("name");
				tabGoogleMapPointGrouped[j][2] = tabGoogleMapPoint[i].getAttribute("desc");
				tabGoogleMapPointGrouped[j][3] = tabGoogleMapPoint[i].getAttribute("address");
				tabGoogleMapPointGrouped[j][4] = tabGoogleMapPoint[i].getAttribute("pc");
				tabGoogleMapPointGrouped[j][5] = tabGoogleMapPoint[i].getAttribute("town");
				tabGoogleMapPointGrouped[j][6] = tabGoogleMapPoint[i].getAttribute("country");
				tabGoogleMapPointGrouped[j][7] = tabGoogleMapPoint[i].getAttribute("tel");
				tabGoogleMapPointGrouped[j][8] = tabGoogleMapPoint[i].getAttribute("fax");
				tabGoogleMapPointGrouped[j][9] = tabGoogleMapPoint[i].getAttribute("mobil");
				tabGoogleMapPointGrouped[j][10] = tabGoogleMapPoint[i].getAttribute("email");
				tabGoogleMapPointGrouped[j][11] = tabGoogleMapPoint[i].getAttribute("web");
				tabGoogleMapPointGrouped[j][12] = tabGoogleMapPoint[i].getAttribute("profil");
				tabGoogleMapPointGrouped[j][13] = longitude;
				tabGoogleMapPointGrouped[j][14] = lattitude;

				j++;
				
				precLongitude = longitude;
				precLattitude = lattitude;
			}
			// Cas du dernier élément
			affPoints(tabGoogleMapPointGrouped, new GLatLng(precLattitude, precLongitude)); 			
		})				
	}
}

