/**
 * Plugin for jQuery 1.1 to manage Google Maps
 * @author Robert ERNENS 
 * @version 2.0
 *
 */
jQuery.fn.gmaps = function(settings){
	return this.each(function(){
		new jQuery.gmaps(this, settings);
	});
}

jQuery.gmaps = function(obj, settings){   
	
	var map = false;
	var gitems = new Array(); 
	var geo = new GClientGeocoder();
	var reasons = []; 
	var newMarker= false;
	var htmls_from = [];
	var htmls_to = [];
	
    reasons[G_GEO_SUCCESS]            = "OK";
    reasons[G_GEO_MISSING_ADDRESS]    = "Adresse manquante: addresse inconnue ou vide.";
    reasons[G_GEO_UNKNOWN_ADDRESS]    = "Adresse inconnue:  aucune localisation g&eacute;ographique pour l'adresse sp&eacute;cifi&eacute;e.";
    reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Adresse indisponible:  la localisation ne peut &ecirc;tre fournie pour des raisons l&eacute;gales ou contractuelles.";
    reasons[G_GEO_BAD_KEY]            = "Cl&eacute; incorrecte: la cl&eacute; Google Maps n'est pas valide.";
    reasons[G_GEO_TOO_MANY_QUERIES]   = "Quota d&eacute;pass&eacute;: le quota quotidien de requ&eacirc;tes de g&eacute,ocodage autoris&eacute; est d&eacute,pass&eacute;.";
    reasons[G_GEO_SERVER_ERROR]       = "Erreur: la requ&eacirc;te de g&eacute;ocodage a &eacute;chou&eacute;! Veuillez renouveller votre requ&eacirc;te ult&eacuterieurment.";
    reasons[G_GEO_BAD_REQUEST]        = "La demande d'itin&eacute;raire n'est pas correctement formul&eacute;e.";
    reasons[G_GEO_MISSING_QUERY]      = "Aucune demande d'itin&eacute;raire n'a &eacute;t&eacute; formul&eacute;e.";
    reasons[G_GEO_UNKNOWN_DIRECTIONS] = "L'itin&eacute;raire n'a pu &ecirc;tre d&eacute;termin&eacute;.";
	
	var settings = jQuery.extend({
		data: {groups: [], locations: []},
		WACID : 0,
		CID : 0,
		Language : "FR",
		IW: false,
		maptype: G_NORMAL_MAP,
		center: [0 , 0],
		zoom: 0, 
		newOnClick: false,
		moveAllowed: false,
		smallMapControl: false,
		largeMapControl: false,
		zoomMapControl: false,
		scaleMapControl: false,  
		typeMapControl: false,
		overviewMapControl: false,
		withDirections : false,
		IN: "",
		INSi : [0 , 0],
		INS : "http://www.google.com/mapfiles/shadow50.png",
		INSSi: [37 , 34],  
		IS: "",
		ISSi: [0 , 0],
		ISS: "",
		ISSSi: [0 , 0], 
		IT: "http://www.google.com/intl/en_ALL/mapfiles/markerTransparent.png",
		relativepath: "http://www.web-a-la-carte.com/",
		mediaPath: ""
	},settings); 
	
	// Create the marker  
	
    function createMarker(point, number) {
		
		// create custom icons 	 
		
		var iconNormal = "" 
		normalIcon = false
		
		if ( (settings.data.locations[number].IN != "") | (settings.IN != "") ) {  
			
			iconNormal = new GIcon(); 
			
			if  (settings.data.locations[number].IN != "") {  
				normalIcon = true 
				iconNormal.image = (settings.data.locations[number].IN.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.data.locations[number].IN + ".png": settings.data.locations[number].IN ;
			    iconNormal.iconSize = new GSize((settings.data.locations[number].INW > 0) ? settings.data.locations[number].INW : 18, (settings.data.locations[number].INH > 0) ? settings.data.locations[number].INH : 18);
			} else {
				iconNormal.image = (settings.IN.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.IN : settings.IN;
			    iconNormal.iconSize = new GSize((settings.INSi[0] > 0) ? settings.INSi[0] : 18, (settings.INSi[1] > 0) ? settings.INSi[1] : 18);
			}
			if  (settings.data.locations[number].INS != "") {
				iconNormal.shadow = (settings.data.locations[number].INS.indexOf("http:") < 0) ? settings.mediaPath + settings.relativepath + settings.data.locations[number].INS + ".png" : settings.data.locations[number].INS ;
			    iconNormal.shadowSize = new GSize((settings.data.locations[number].INSW > 0) ? settings.data.locations[number].INSW : 18, (settings.data.locations[number].INSH > 0) ? settings.data.locations[number].INSH : 18);
			} else {
				if (settings.iconShadow != "")  {
					iconNormal.shadow = (settings.INS.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.INS : settings.INS;
			    	iconNormal.shadowSize = new GSize((settings.INSSi[0] > 0) ? settings.INSSi[0] : 18, (settings.INSsi[1] > 0) ? settings.INSSi[1] : 18);
			  	}
			}				
			iconNormal.iconAnchor = new GPoint( iconNormal.iconSize.width/2, iconNormal.iconSize.width );
			iconNormal.infoWindowAnchor = new GPoint( iconNormal.iconSize.width/2, 1 ); 
		}
        
		selectedIcon = false ;

		if ( (settings.data.locations[number].IS != "") | (settings.IS != "") ) { 
			selectedIcon = true
			var iconSelected = new GIcon();
			if  (settings.data.locations[number].IS != "") {
				iconSelected.image = (settings.data.locations[number].IS.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.data.locations[number].IS + ".png" : settings.data.locations[number].IS ;
			    iconSelected.iconSize = new GSize((settings.data.locations[number].ISW > 0) ? settings.data.locations[number].ISW : 18, (settings.data.locations[number].ISH > 0) ? settings.data.locations[number].ISH : 18);
			} else {
				iconSelected.image = (settings.IS.indexOf("http:") < 0) ? settings.relativepath + settings.IS:settings.IS;
			    iconSelected.iconSize = new GSize((settings.ISSi[0] > 0) ? settings.ISSi[0] : 18, (settings.ISSi[1] > 0) ? settings.ISSi[1] : 18);
			}
			if  (settings.data.locations[number].ISSH != "") {
				iconSelected.shadow = (settings.data.locations[number].ISS.indexOf("http:") < 0) ? settings.mediaPath + settings.relativepath + settings.data.locations[number].ISS + ".png" : settings.data.locations[number].ISS ;
			    iconSelected.shadowSize = new GSize((settings.data.locations[number].ISSW > 0) ? settings.data.locations[number].ISSW : 18, (settings.data.locations[number].ISSH > 0) ? settings.data.locations[number].ISSH : 18);
			} else {
				if (settings.iconShadow != "")  {
					iconSelected.shadow = (settings.ISS.indexOf("http:") < 0) ? settings.relativepath + settings.ISS : settings.ISS;
			    	iconSelected.shadowSize = new GSize((settings.ISSSi[0] > 0) ? settings.ISSSi[0] : 18, (settings.ISSSi[1] > 0) ? settings.ISSSi[1] : 18);
			  	}
			}				
			iconSelected.iconAnchor = new GPoint( iconSelected.iconSize.width/2, iconSelected.iconSize.height/2 );
			iconSelected.infoWindowAnchor = new GPoint( iconSelected.iconSize.width/2, 1 ); 
		}
	
		if  ( ( settings.data.locations[number].G != "") & ( normalIcon == false ) ) {
				iconNormal = gIcons[ settings.data.locations[number].G ] ;
		}
		
		var marker = new GMarker(point, { title: settings.data.locations[number].L , icon: iconNormal } );  

		htmls_from[number] = settings.withDirections ? '<p><b>Itin&eacute;raire: </b><b>Jusqu ici</b> - <a href="#" id="GMaps'+settings.CID+'-dAddr">Depuis ici</a>' +
		           			'<br><b>Origine:</><form action="javascript:$(\'#G'+settings.CID+'\').get(0).gmap.jq_maps.getDirections()">' +
		           			'<input type="text" SIZE=40 MAXLENGTH=40 name="sAddr" id="WAC'+settings.CID+'-sAddr" value="" /><br>' +
		           			'<INPUT value="Afficher" TYPE="SUBMIT">' +
		           			'<input type="hidden" id="WAC'+settings.CID+'-dAddr" value="'+settings.data.locations[number].L+"@"+ point.lat() + ',' + point.lng() +
		           			'"/></p>' : "" ;
		htmls_to[number] =  settings.withDirections ? '<p><b>Itin&eacute;raire: </b><b>Depuis ici</b> - <a href="#" id="GMaps'+settings.CID+'-sAddr">Jusqu\'ici</a>' +
				           '<br><b>Destination:</b><form action="javascript:$(\'#G'+settings.CID+'\').get(0).gmap.jq_maps.getDirections()">' +
				           '<input type="text" SIZE=40 MAXLENGTH=40 name="dAddr" id="WAC'+settings.CID+'-dAddr" value="" /><br>' +
				           '<INPUT value="Afficher" TYPE="SUBMIT">' +
				           '<input type="hidden" id="WAC'+settings.CID+'-sAddr" value="'+settings.data.locations[number].L+"@"+ point.lat() + ',' + point.lng() +
				           '"/></p>' : "" ; 

		markersNormal[number] = marker  ;
		if (selectedIcon)  {
			markersSelected[number] = new GMarker(point, { title: settings.data.locations[number].L , icon: iconSelected } );
		} else {
			markersSelected[number] = marker  ;
		}
		
		bounds.extend(point);  
	  	
		GEvent.addListener(marker, ( settings.data.locations[number].IWE == "" ? "click" : settings.data.locations[number].IWE ), function() { 
			map.jq_maps.infoWindow(number,0,settings.data.locations[number].IWL,settings.data.locations[number].IWS,settings.data.locations[number].IWX); 			
		});
		
		gitems.push(marker);
		return marker;
	}
		
	if (GBrowserIsCompatible()) { 
		
		var mapControl, zoomControl;
		
		map = new GMap2(obj); 
		map.setCenter(new GLatLng(settings.center[0],settings.center[1]), settings.zoom, settings.maptype);
				
		if (settings.smallMapControl) { map.addControl(new GSmallMapControl()) };
		if (settings.largeMapControl) { map.addControl(new GLargeMapControl()) };
		if (settings.zoomMapControl) { map.addControl(new GSmallZoomControl()); };
		if (settings.scaleMapControl) { map.addControl(new GScaleControl()) };
		if (settings.typeMapControl) { map.addControl(new GMapTypeControl()) };
		
		if (settings.overviewMapControl) { map.addControl(new GOverviewMapControl()) };		
		
		if ( settings.IW != Boolean ){
			GEvent.addListener(map, "moveend", function() {
				var center = map.getCenter();
				var zoom = map.getZoom(); 
				latitude = center.lat().toString()  ;
				longitude = center.lng().toString()  ;
				$(settings.IW).html("Latitude: " + latitude + " - Longitude: " + longitude + " - Zoom: " + zoom);
			});
		} 
		
		if (settings.newOnClick) {
			GEvent.addListener(map, "click", function(marker, point) { 
				if(marker == null)  { map.jq_maps.setMarker(point.lat() , point.lng() , null ); }
			});
		}
		
		var gdir = settings.withDirections ? new GDirections(map, $("#G"+settings.CID+"-Directions").get(0)) : null ;
		
		var bounds = new GLatLngBounds();
		var markersNormal = [];
		var markersSelected = []; 
		
		// create the group icons associative array 
		var gIcons = [];
		
		for (i=0;i<settings.data.groups.length;i++){ 
			gIcons[settings.data.groups[i].L] = new GIcon();
			if ( (settings.data.groups[i].IN != "") | (settings.IN != "") ) {
				if  (settings.data.groups[i].IN != "") {
					gIcons[settings.data.groups[i].L].image = (settings.data.groups[i].IN.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.data.groups[i].IN + ".png": settings.data.groups[i].IN ;
				    gIcons[settings.data.groups[i].L].iconSize = new GSize((settings.data.groups[i].INW > 0) ? settings.data.groups[i].INW : 18, (settings.data.groups[i].INH > 0) ? settings.data.groups[i].INH : 18);
				} else {
					gIcons[settings.data.groups[i].L].image = (settings.IN.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.IN : settings.IN;
				    gIcons[settings.data.groups[i].L].iconSize = new GSize((settings.INSi[0] > 0) ? settings.INSi[0] : 18, (settings.INSi[1] > 0) ? settings.INSi[1] : 18);
				}
				if  (settings.data.groups[i].INS != "") {
					gIcons[settings.data.groups[i].L].shadow = (settings.data.groups[i].INS.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.data.groups[i].INS + ".png": settings.data.groups[i].INS ;
				    gIcons[settings.data.groups[i].L].shadowSize = new GSize((settings.data.groups[i].INSW > 0) ? settings.data.groups[i].INSW : 18, (settings.data.groups[i].INSH > 0) ? settings.data.groups[i].INSH : 18);
				} else {
					if (settings.iconShadow != "")  {
						gIcons[settings.data.groups[i].L].shadow = (settings.INS.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.INS : settings.INS;
				    	gIcons[settings.data.groups[i].L].shadowSize = new GSize((settings.INSSi[0] > 0) ? settings.INSSi[0] : 18, (settings.INSSi[1] > 0) ? settings.INSSi[1] : 18);
				  	}
				}  			 
	   		} else {
			        gIcons[settings.data.groups[i].L].image = settings.relativepath + "images/google/" + (i+1) + ".png" ;
					gIcons[settings.data.groups[i].L].iconSize = new GSize( 38, 34 )  ;
					if (settings.INS != "")  {
						gIcons[settings.data.groups[i].L].shadow = (settings.INS.indexOf("http:") < 0) ? settings.relativepath + settings.mediaPath + settings.INS : settings.INS;
				    	gIcons[settings.data.groups[i].L].shadowSize = new GSize((settings.INSSi[0] > 0) ? settings.INSSi[0] : 18, (settings.INSSi[1] > 0) ? settings.INSSi[1] : 18);
				  	}
			}
			gIcons[settings.data.groups[i].L].iconAnchor = new GPoint( gIcons[settings.data.groups[i].L].iconSize.width/2, gIcons[settings.data.groups[i].L].iconSize.height );
			gIcons[settings.data.groups[i].L].infoWindowAnchor = new GPoint( gIcons[settings.data.groups[i].L].iconSize.width/2, 1 );   		
		    if ( i == 0 ) {
				htmlTabs = "<ul>"
			}
			htmlTabs += "\n <li class='GMaps-Groups-Element '><img src='" + gIcons[settings.data.groups[i].L].image + "' alt='' width='10' height='17'/><a jframe='no' href='#' class='GMaps-Groups-Element-Anchor " + obj.id + "-Groups' tabIndex='" + i + "'>" + settings.data.groups[i].L + "</a></li>"  ;
		    if ( i == (settings.data.groups.length - 1) ) {
				htmlTabs += "\n <li class='GMaps-Groups-Element '><img src='" + settings.relativepath + "images/blank.gif' alt='' width='10' height='17'><a jframe='no' href='#' class='GMaps-Groups-Element-Anchor " + obj.id + "-Groups' tabIndex='" + (i+1) + "'>Tous</a></li>" ;
				htmlTabs += "</ul>" ;
			}
		}   
		
		//Fill the Tabs area and the links
		
		$("#G"+settings.CID+"-Groups").html(htmlTabs); 
		
		$("." + obj.id + "-Groups").each(function(){
			this.associated_map = obj.id;
			$(this).bind("click", function(){
				$("#"+this.associated_map).get(0).gmap.jq_maps.placeMarkers( $("#"+this.associated_map).get(0), this.tabIndex );
				return false;
			});
		});
  
		//Inserts markers
		var htmlTabs = "<ul>" 
		
		for (i=0;i<settings.data.locations.length;i++){
			var point = new GLatLng(settings.data.locations[i].La,settings.data.locations[i].Lo);
			map.addOverlay(createMarker(point, i));  
			//htmlTabs += "\n <li class='GMaps_Locations-Point '>"+ settings.data.locations[i].R +" - <a href='#' class='GMaps_Locations-Point-Anchor' tabIndex='" + i + "'>" + settings.data.locations[i].L + "</a></li>" ;
			htmlTabs += "\n <li class='GMaps_Locations-Point '><a href='#' jframe='no' class='GMaps_Locations-Point-Anchor "+ obj.id +"-Points' tabIndex='" + i + "'>" + settings.data.locations[i].L + "</a></li>" ;
		} 
		
		if  (settings.zoom == 0) {
			var boundsZoom = map.getBoundsZoomLevel(bounds); 
			map.setZoom( boundsZoom - 1);
		}  
		
		if ( (settings.center[0] == 0) & (settings.center[1] == 0) ) {
			var boundsCenter = bounds.getCenter() ;
			map.setCenter( boundsCenter ); 
		}
		
		htmlTabs += "\n</ul>"   
		
		//Fill the Locations area
		
		$("#G"+settings.CID+"-Locations").html(htmlTabs);
		
		$("form[name=G"+settings.CID+"-Search]").submit( function(){
		   	if ( $("input[name=Address]", this).val().length > 0)  { 
				var search = $("input[name=Address]", this).val();
			   	geo.getLocations(search, function (result)
		          { message = "";
		 			
		            if (result.Status.code == G_GEO_SUCCESS) { 
		              if (result.Placemark.length > 1) {  
						message += "<ul>"
		                for (var i=0; i<result.Placemark.length; i++) {  
		                  var p = result.Placemark[i].Point.coordinates;
		                 // message += "\n <li class='GMaps_Addresses-Choices'>"+(i+1)+": <a class='GMaps_Addresses-Choices-Anchor' href='javascript:$(\"#G\").get(0).gmap.jq_maps.setMarker(" + p[1] + "," + p[0] + ", \"" + result.Placemark[i].address+"\")'>" + result.Placemark[i].address + " </a></li>";
		                  message += "\n <li class='GMaps_Addresses-Choices'><a class='GMaps_Addresses-Choices-Anchor ' jframe='no' href='javascript:$(\"#G"+settings.CID+"\").get(0).gmap.jq_maps.setMarker(" + p[1] + "," + p[0] + ", \"" + result.Placemark[i].address+"\")'>" + result.Placemark[i].address + " </a></li>";
		                } 
					    message += "\n</ul>"
		              }
		              else {
		                message = "" ;
		                var p = result.Placemark[0].Point.coordinates;
		                map.jq_maps.setMarker(p[1] , p[0] , result.Placemark[0].address );
		              }
		            }
		            else {
		              var reason="Code "+result.Status.code;
		              if (reasons[result.Status.code]) {
		                reason = reasons[result.Status.code]
		              } 
		              message = reason ;
		            } 
					$("#G"+settings.CID+"-Addresses").html("<span style='font-size: 11px; color: red;'>" + message + "</span>" );
		          }
		        ); 
			} 
			return false;
		});
		
		//Loads the events of the link of the hotspots 
		
		$("." + obj.id + "-Points").each(function(){
			this.associated_map = obj.id;
			$(this).bind("click", function(){
				$("#"+this.associated_map).get(0).gmap.jq_maps.goTo($("#"+this.associated_map).get(0), this.tabIndex, 0 );
				return false;
			});
		});
		
		//save the properties in gmap property, and set the new options
		map.jq_maps = {
			settings: settings,
			gitems: gitems,
			getDirections: function() {
			        var saddr = $("#G"+settings.CID+"-sAddr").val();
			        var daddr = $("#G"+settings.CID+"-dAddr").val();
			        gdir.load("from: "+saddr+" to: "+daddr);
			      },
			resetCenter: function(div_gmap) {
						if ( !((settings.center[0] == 0) & (settings.center[1] == 0)) ) {
							div_gmap.gmap.setCenter(new GLatLng(settings.center[0],settings.center[1]), settings.zoom, settings.maptype);
						}
					}, 
			goTo: function(div_gmap, indice, zoom){ 
				if ( zoom == 0 )  { 
					if ( div_gmap.gmap.jq_maps.settings.data.locations[indice].Zo != 0) {
						zoom = div_gmap.gmap.jq_maps.settings.data.locations[indice].Zo ;
					} else {
						zoom = div_gmap.gmap.getZoom();
					}
				} 
				div_gmap.gmap.setZoom( zoom );
				div_gmap.gmap.panTo(new GLatLng(div_gmap.gmap.jq_maps.settings.data.locations[indice].La, div_gmap.gmap.jq_maps.settings.data.locations[indice].Lo));   
				map.jq_maps.infoWindow(indice,0,settings.data.locations[indice].IWL,settings.data.locations[indice].IWS,settings.data.locations[indice].IWX) ;
			},
			infoWindow: function(indice,mode,IWL,IWS,IWX) { 
				$("#G"+settings.CID+"-Dummy").html("<div id='G"+settings.CID+"-InfoWindow' class='GMaps_InfoWindow'></div>") ;
				directionsContent = "" ;
				if (map.jq_maps.settings.withDirections) {
					if (mode==0) {
						directionsContent = '<p><b>Itin&eacute;raires:</b> ' +
											'<a href="#" id="GMaps'+settings.CID+'-sAddr">Jusqu\'ici</a> - ' +
											'<a href="#" id="GMaps'+settings.CID+'-dAddr">Depuis ici</a></p>' ;
					}
					if (mode==1) {
						directionsContent = htmls_from[indice];
					}
					if (mode==2) {
						directionsContent = htmls_to[indice];
					}
				} 
				simpleContent = $("#G"+settings.CID+"-InfoWindow").get(0);
				if ( IWX != "" ) {
				    maxContent = "/pages/infoWindow.a4d?wacid=" + map.jq_maps.settings.WACID + "&page=" + IWX + "&language=" + map.jq_maps.settings.Language;
				    if ( settings.data.locations[indice].Q != "" ) {
						maxContent += "&" + settings.data.locations[indice].Q ;
					}
				} else {
					maxContent = null ;
				}; 
				IWurl = null ;  
  				if ( IWS != ""){
				   IWurl = "/pages/infoWindow.a4d?wacid=" + map.jq_maps.settings.WACID + "&page=" + IWS + "&language=" + map.jq_maps.settings.Language ;
				   	if ( settings.data.locations[indice].Q != "" ) {
						IWurl += "&" + settings.data.locations[indice].Q
					}
				} else { 
					if ( IWL != ""){ 
						IWurl = "/pages/text.a4d?wacid=" + map.jq_maps.settings.WACID + "&key=" + IWL + "&language=" + map.jq_maps.settings.Language + "&F_GMaps=Y" ;
					}  else {
						$("#G"+settings.CID+"-InfoWindow").html("<h4>" + settings.data.locations[indice].N + "</h4><p>" + settings.data.locations[indice].A + "</p><p><span>" + settings.data.locations[indice].Z + "</span>&nbsp;<span>" + settings.data.locations[indice].C + "</span></p>" + directionsContent) ;
					    map.jq_maps.formClick(indice,IWL,IWS,IWX);
					} 
				} ;
				if ( IWurl != null ) {  
					if ( maxContent != null) { 
						$("#G"+settings.CID+"-InfoWindow").load( IWurl, function() { 
							if (directionsContent != "") { 
								$(this).append(directionsContent); 
								map.jq_maps.formClick(indice,IWL,IWS,IWX);
							};
							gitems[indice].openInfoWindow(simpleContent, {maxUrl: maxContent}) ;
							} ) ;
					} else {
						$("#G"+settings.CID+"-InfoWindow").load( IWurl, function() {
							if (directionsContent != "") { 
								$(this).append(directionsContent);  
								map.jq_maps.formClick(indice,IWL,IWS,IWX);
							};
							gitems[indice].openInfoWindow(simpleContent) ;
							} ); 
					} ;
				} else {
					if ( maxContent != null) { 
						gitems[indice].openInfoWindow(simpleContent, {maxUrl: maxContent}) ;
					} else {
						gitems[indice].openInfoWindow(simpleContent);	
					} ;
				};
 
			},
			formClick: function(indice,IWL,IWS,IWX) {
				$("#G"+settings.CID+"-sAddr").each(function(){
					this.associated_map = obj.id;
					$(this).bind("click", function(){
						$("#"+this.associated_map).get(0).gmap.jq_maps.infoWindow(indice,1,IWL,IWS,IWX);
						return false;
					});
				});
				$("#G"+settings.CID+"-dAddr").each(function(){
					this.associated_map = obj.id;
					$(this).bind("click", function(){
						$("#"+this.associated_map).get(0).gmap.jq_maps.infoWindow(indice,2,IWL,IWS,IWX);
						return false;
					});
				});
			} ,
			mouseOver: function(div_gmap, indice) { 
				zoom = map.getZoom();
				map.jq_maps.goTo(div_gmap,indice, zoom);
				map.removeOverlay(markersNormal[indice]);
	        	map.addOverlay(markersSelected[indice]);
			},
			mouseOut: function(div_gmap, indice) {
				map.removeOverlay(markersSelected[indice]);
	        	map.addOverlay(markersNormal[indice]);
			}, 
			placeMarkers : function(div_gmap, group ) {
			   	map.clearOverlays();
				for ( i=0 ; i<settings.data.locations.length ; i++ ) { 
					if (group == settings.data.groups.length ) {
						map.addOverlay(map.jq_maps.gitems[i]);
					} else {
					 	if ( settings.data.locations[i].G == settings.data.groups[group].L ) {
							map.addOverlay(map.jq_maps.gitems[i]);
						} 
					}
				}
			},
			setMarker: function(latitude, longitude, address) {
				if( newMarker != false) { map.removeOverlay( newMarker ) } ;
				var newPoint = new GLatLng(latitude,longitude);
		        map.setCenter(newPoint,14);
				newMarker = new GMarker( newPoint, { draggable: settings.moveAllowed } ) ;

				GEvent.addListener(newMarker, "dragstart", function() {
				  map.closeInfoWindow();
				  });

				GEvent.addListener(newMarker, "dragend", function() { 
					latitude = newMarker.getPoint().lat();
					longitude = newMarker.getPoint().lng();   
					var addressDetail = "<div class='GMaps"+settings.CID+"-InfoWindow'>" ; 
					if (address != null ) {            
						var reg = new RegExp("[,]+", "g") ;
						var addressParts = address.split(reg) ;
						addressDetail += "<span><strong>Adresse : </strong></span><br/><br/>" ;
						addressDetail += "<span>" + addressParts[0] ;
						if( addressParts.length <= 3) {
							addressDetail +=  "</span><br><span>";
						}
						addressDetail +=  addressParts[1] + "</span><br/>" ;
						if( addressParts.length >= 3) {
							addressDetail += "<span>" + addressParts[2] 
						}
						if( addressParts.length >= 4) {
							addressDetail += "&nbsp;" + addressParts[3] 
						}
				   		if( addressParts.length >= 5) {
							addressDetail += "</span><br/><span>" + addressParts[4]
						} 
						addressDetail += "</span><br/>" ;
					}
					addressDetail += "<br/><span><strong>Latitude : </strong>" + latitude + "</span><br/><span><strong>Longitude : </strong>" + longitude + "</span><br/></div>"
					newMarker.openInfoWindowHtml( addressDetail );
				  });
				 
				map.addOverlay( newMarker );  
				var addressDetail = "<div class='GMaps"+settings.CID+"-InfoWindow'>" ; 
				if (address != null ) {            
					var reg = new RegExp("[,]+", "g") ;
					var addressParts = address.split(reg) ;
					addressDetail += "<span><strong>Adresse : </strong></span><br/><br/>" ;
					addressDetail += "<span>" + addressParts[0] ;
					if( addressParts.length <= 3) {
						addressDetail +=  "</span><br><span>";
					}
					addressDetail +=  addressParts[1] + "</span><br/>" ;
					if( addressParts.length >= 3) {
						addressDetail += "<span>" + addressParts[2] 
					}
					if( addressParts.length >= 4) {
						addressDetail += "&nbsp;" + addressParts[3] 
					}
			   		if( addressParts.length >= 5) {
						addressDetail += "</span><br/><span>" + addressParts[4]
					} 
					addressDetail += "</span><br/>" ;
				}
				addressDetail += "<br/><span><strong>Latitude : </strong>" + latitude + "</span><br/><span><strong>Longitude : </strong>" + longitude + "</span><br/></div>"
   				newMarker.openInfoWindowHtml( addressDetail );   
			}  		
		}
	}
	
	obj.gmap = map;
}
