/*
Pour ajouter un lien qui ouvre une popUp il faut simplement ajouter à lâ€™élément la class â€˜openPlan-villeâ€™. Une fois ajouté lâ€™élément devient cliquable et ouvre une "popUp" avec par défaut laville de Lausanne. Il est possible dâ€™ajouter les attributs suivants pour obtenir un affichage personnalisé. 

data-adresse 		ex: data-adresse= "Route de chavannes, 15"
data-zoom			ex: data-zoom = "12"
data-latlng			ex: data-latlng = "46.5415, 5.48552"

data-texteBulle		ex: data-textinfo = "Un text d'info qui apparait dans une bulle quand l'utilisateur cliue sur un marker"
data-bulleVisible	ex: data-bulleVisible = "1" (par défaut la bulle n'est pas visible)
data-alt			ex: data-alt = "Un texte qui apparait quand l'utilisateur laisse la souris sur un marker"


exemple:
<a class="openPlan-ville" data-zoom="15" data-adresse="Route de chavanne, 15">Mon lien vers la carte</a>
*/

plan_ville = {};

(function(){ // début de scope local
	plan_ville = {
			
		interestPlaces:{
			lat:[46.51799,46.532502,46.523083634,46.526081,46.565057,46.521725,46.521,46.5174,46.5239,46.519,46.5154,46.54186,46.512,46.5902,46.5067,46.5373,46.5194,46.5331,46.5379,46.534,46.5202,46.5279,46.5395,46.5726,46.5526,46.5152],
			lng:[6.63436,6.632867,6.59042358,6.6519,6.692476,6.635141,6.63,6.6292,6.64066,6.635,6.6225,6.6791,6.635,6.664,6.6268,6.6647,6.6333,6.647,6.6391,6.626,6.5685,6.6141,6.6463,6.6052,6.6934,6.602],
			info:['Beau-Séjour','Bellevaux', 'La Bourdonnette', 'Chailly', 'Chalet à Gobet', 'La Cité', 'Quartier du Flon', 'La Gare', 'Hôpitaux', 'Lausanne', 'Place de Milan', 'Montblesson', 'Montchoisi', 'Abbaye de Montheron', 'Ouchy', 'Praz-Séchaud',  'Saint-François',  'La Sallaz', 'Sauvabelin', 'Stade Olympique', 'Université, EPFL', 'Valency', 'Vennes', 'Vernand', 'Vers chez les Blanc', 'Vidy']
		},
			
		googleMapScript: false,
		map: null,
		mapOpt : null,
		latlngLausanne:0,
		
		latlngLSW: 0,
		latlngLNE: 0,
		region: 0,
		geocoder : null,  
		markersArray :[],
	
		width : 400, // la largueur de la popUp
		height : 400, // la hauteur de la popup
		posX : 0,
		posY : 0,
		animSpeed : 350, // la vitesse d'animation
		
		isPopUpOpen : false,	// est-ce que la popUp est ouverte
		isPopUpMaximum : true,	// definit si la popup à une taille maximale
		StartX : 0,				// position du clique initiale X
		StartY : 0,				// position du clique initiale X
		StopX : 0,				// position de la fermeture X
		StopY : 0,				// position de la fermeture Y
		tmp:0,
		noLinkOpen : -1,
		init:function(){
			// ajoute l'évenement sur les liens
			$('.openPlan-ville').each(function(i){
				$(this).click(function(){
					self.openMap($(this),i);	
			   });
			});
		
			$('#plan-villeDiv .cadre').mousedown(function(e){	self.drag(this,e);});	
			$(window).resize(function(){self.drawResize();});
			$('#plan-villeDiv .closeButton').click(function() {self.closeMap(); });
			$('#plan-villeDiv .resizeButton').click(function() {self.resize(); });
			
			customSelect.onChange('plan_ville_selectInteret', self.gotoToPlaceN); // capture l'evenement de changement de lieu			
			
			$('#place').change(function(){
				window.plan_ville.gotoInterestPlace($(this).val());
			}); 
			
			$('#rechercheGoogleMap').keyup(function(e){
				if (e.keyCode == 13) self.recherche($(this).attr('value'), self.userResearch_cb);
			}).click(function(){
				if ($(this).attr('value') == "Rue...") $(this).attr('value', '');
			}).focusout(function(){
				if ($(this).attr('value') == "") $(this).attr('value', 'Rue...');
			});		
		},
		// définit la taille du popUp
		setPoseSize: function(x, y, w, h){				
			$('#txt').text($('#map_canvas').width());
			$('#plan-villeDiv').css('top', y ).css('left', x ).width(w).height(h);
			$('#plan-villeDiv .cadre').width(w).height(h);
			if(w > 50) $('#plan-villeDiv .centre').width(w-50); else  $('#plan-villeDiv .centre').width(0);
			if(h > 50) $('#plan-villeDiv .centre').height(h-50); else $('#plan-villeDiv .centre').height(0);
			$('#map_canvas').width(w-50- $('#plan-villeDiv .centre .left').width());			
			self.posX = x; self.posY = y;
		},
		
		resize:function(){
			oldX = self.posX;
			oldY = self.posY;
			mapCentre = self.map.getCenter();
			rapport = self.width * self.height;
			if (self.isPopUpMaximum){ // réduit la fenêtre
				self.isPopUpMaximum = false;
				oldWidth = self.width;
				oldHeight = self.height;				
				self.width = 500;
				self.height = 450;											
				newX = Math.max(self.posX + oldWidth/2 - self.width/2, - self.width + 50); // le max pour eviter que la fenêtre parte trop sur la droite				
				newY = Math.min(self.posY + oldHeight/2 - self.height/2 , $(document).height - 50);	
				$('#plan-villeDiv .resizeButton').css('background-image', 'url(/images/btn_maximize.png)');
				rapport = -rapport / (self.width * self.height);
				$('#plan-villeDiv .centre .left').css({width:0});
			}else{ // agrandit la fenêtre
				self.isPopUpMaximum = true;
				oldWidth = self.width;
				oldHeight = self.height;
				self.width = Math.max($(window).width()* 0.9, 400);
				self.height = Math.max($(window).height()* 0.9, 300);
				newX = $(window).width() * 0.05 + $(window).scrollLeft() ;
				newY = $(window).height()* 0.05 + $(window).scrollTop();				
				rapport = (self.width * self.height) / rapport  ;
				$('#plan-villeDiv .centre .left').css({width:179});
				$('#plan-villeDiv .resizeButton').css("background-image", "url(/images/btn_minimize.png)");
			}
			$("#plan-villeDiv").animate({ mapopup: 10 }, {
				duration: self.animSpeed,
				step: function(now, fx){
					var w = oldWidth * (1-fx.pos) + self.width*fx.pos;
					var h = oldHeight * (1-fx.pos) + self.height*fx.pos;						
					var x = oldX * (1-fx.pos) + newX*fx.pos;						
					var y = oldY * (1-fx.pos) + newY*fx.pos;					
					self.setPoseSize(x,y, w, h);
				},
				complete : function(){
					self.drawResize();
					self.map.setCenter(mapCentre);					
					if (rapport < 0) self.map.setZoom(self.map.getZoom() - Math.floor(Math.sqrt(-rapport))); else self.map.setZoom(self.map.getZoom() + Math.floor(Math.sqrt(rapport))) // zoom
				}
			});
		},
		
		closeMap : function(){ // ouvre le contenu dans une popup
			
			if (!self.isPopUpOpen) return;
			$('#plan-villeDiv .centre').attr('src', "about:blank"); // charge la page si besoin
		
			self.StopX = $('#plan-villeDiv').offset().left;
			self.StopY = $('#plan-villeDiv').offset().top;
				
			if (self.isPopUpOpen){
				$("#plan-villeDiv").animate({ mapopup: 10 }, {
					duration: self.animSpeed,
					step: function(now, fx){
						var x = (1 - fx.pos) * self.StopX + fx.pos * self.StartX;
						var y = (1 - fx.pos) * self.StopY + fx.pos * self.StartY;				
						self.setPoseSize(x, y, self.width*(1 - fx.pos), self.height * (1-fx.pos));
					},
					complete : function(){
						$('#plan-villeDiv').css('visibility', 'hidden');								
						$('#plan-villeDiv .centre .left').css({width:179});
					}
				});			
			}
			self.isPopUpOpen = false;	
		},		
		openMap:function(obj, noLink){ // ouvre le contenu dans une popup. en paramètre, URL et l'objet jQuery qui est cliqué
			//ouvre la library Google maps
			if(!plan_ville.googleMapScript){
				plan_ville.googleMap_loadScript();
			}
			
			if (!self.isPopUpOpen){
				self.noLinkOpen = noLink
				$('#plan-villeDiv').width(0).height(0).css('visibility', 'visible');
				$('#plan-villeDiv .cadre').width(0).height(0).width(0).height(0);	
				
				self.width = Math.max($(window).width()* 0.9, 400);
				self.height = Math.max($(window).height()* 0.9, 300);
				
				pos = obj.findPos(); // position du lien cliqué				
				self.StartX = pos.x ;
				self.StartY = pos.y ;		
	
				$("#plan-villeDiv").animate({ mapopup: 10 }, {
					duration: self.animSpeed,
					step: function(now, fx){
						var x = (($(window).width() - self.width*fx.pos) / 2) * fx.pos + (1 - fx.pos) * self.StartX;
						var y = ($(window).scrollTop() + ($(window).height() - self.height* fx.pos) / 2) * fx.pos + (1 - fx.pos) * self.StartY;
						self.setPoseSize(x, y, self.width*fx.pos, self.height * fx.pos);
					},
					complete : function(){
						self.isPopUpOpen = true;
						self.loadMap(obj);
						self.isPopUpMaximum  = true;
						$('#plan-villeDiv .resizeButton').css("background-image", "url(/images/btn_minimize.png)");
						self.drawResize();
					}
				});
			}else{ // la popUp est déjà ouverte
				if(self.noLinkOpen != noLink) {
					self.loadMap(obj);
					pos = obj.findPos(); // position du lien cliqué				
					self.StartX = pos.x ;
					self.StartY = pos.y ;
				}
				self.noLinkOpen = noLink
			}
		},
		
		
		gotoInterestPlace:function(id_select)
		{	
			var lat=plan_ville.interestPlaces.lat[parseInt(id_select)];
			var lng=plan_ville.interestPlaces.lng[parseInt(id_select)];
			var info=plan_ville.interestPlaces.info[parseInt(id_select)];

			self.interestLat=lat;
			self.interestLng=lng;
			self.interestInfo=info;
			self.gotoInterest=true;
			
		},
		
		gotoToPlaceN:function(id){			
			n = customSelect.getSelectedIndex(id);
			var placeLng = new Array(46.518137,46.51799,46.532502,46.523083634,46.526081,46.565057,46.521725,46.521,46.5174,46.5239,46.519,46.5154,46.54186,46.512,46.5902,46.5067,46.5373,46.5194,46.5331,46.5379,46.534,46.5202,46.5279,46.5395,46.5726,46.5526,46.5152);
			var placeLat = new Array(6.635803,6.63436,6.632867,6.59042358,6.6519,6.692476,6.635141,6.63,6.6292,6.64066,6.635,6.6225,6.6791,6.635,6.664,6.6268,6.6647,6.6333,6.647,6.6391,6.626,6.5685,6.6141,6.6463,6.6052,6.6934,6.602);
			var placeInfo = new Array('Beau-Séjour', 'Bellevaux', 'La Bourdonnette', 'Chailly', 'Chalet à Gobet', 'La Cité', 'Quartier du Flon', 'La Gare', 'Hôpitaux', 'Lausanne', 'Place de Milan', 'Montblesson', 'Montchoisi', 'Abbaye de Montheron', 'Ouchy', 'Praz-Séchaud',  'Saint-François',  'La Sallaz', 'Sauvabelin', 'Stade Olympique', 'Université, EPFL', 'Valency', 'Vennes', 'Vernand', 'Vers chez les Blanc', 'Vidy');
			if (n >= placeLng.length+2 && n >= 0) return;			
			self.map.getStreetView().setVisible(false);
			
			if (n > 1) {
				self.latlngLieu = new google.maps.LatLng(placeLng[n - 2], placeLat[n - 2]);		
				self.map.panTo(self.latlngLieu);
				self.map.setZoom(16);
				self.setMarker(self.latlngLieu, true, placeInfo[n-2],placeInfo[n-2]);				
			}
			else if (n == 0){				
				
				self.setMarker(null, true); // elimine les anciens marker
				for(it = 0; it < placeLng.length; it++){					
					self.latlngLieu = new google.maps.LatLng(placeLng[it], placeLat[it]);		
					self.setMarker(self.latlngLieu, false, placeInfo[it - 1], placeInfo[it - 1], false);					
				}				
				self.latlngLausanne = new google.maps.LatLng(46.5448727, 6.6293349);
				self.map.panTo(self.latlngLausanne);
				self.map.setZoom(12);
			}
		},
		distEntrePts: function(latLng1, latLng2){ // renvois la distance en mettre entre deux points en mettre. Ceci est une aproximation sur une sphere.
			phiA = latLng1.lat() * Math.PI / 180;
			phiB = latLng2.lat() * Math.PI / 180;
			lambdaA = latLng1.lng() * Math.PI / 180;
			lambdaB = latLng2.lng() * Math.PI / 180;	
			angle = Math.acos(Math.sin(phiA)*Math.sin(phiB) + Math.cos(phiA)*Math.cos(phiB)*Math.cos(lambdaB - lambdaA) );
			return Math.abs(angle) * 6378137 ; // angle * rayon terrestre moyen pour avoir la distance en mettre
		},
		loadMap: function(obj){
			try{			
				if (!self.googleMapScript){ // impossible de charger la carte car l'API Google n'a pas été chargé correctement					
					$._object_fct=obj;
					$._counter++;	
					if($._counter<10) setTimeout("plan_ville.loadMap($._object_fct);",500);					
					return;
				}								
				customSelect.setText('plan_ville_selectInteret', "...");
			
				// définit la zone de recherche
				self.latlngLSW = new google.maps.LatLng(46.4962, 6.5834);
				self.latlngLNE = new google.maps.LatLng(46.5521, 6.6845);
				self.region = new google.maps.LatLngBounds(self.latlngLSW, self.latlngLNE);	
				self.latlngLausanne = new google.maps.LatLng(46.5248727, 6.6293349);
								
				var mapTypes = new Array;
				mapTypes.push(google.maps.MapTypeId.HYBRID);
				mapTypes.push(google.maps.MapTypeId.ROADMAP);
							  
				mapTypes.push(google.maps.MapTypeId.SATELLITE); 
				mapTypes.push(google.maps.MapTypeId.TERRAIN	); 
				 
				self.mapOpt = {	};		
				self.mapOpt.zoom = 12;
				self.mapOpt.center = self.latlngLausanne;
				self.mapOpt.mapTypeId = google.maps.MapTypeId.ROADMAP;
				self.mapOpt.mapTypeControl =true;
				self.mapOpt.mapTypeControlOptions ={mapTypeIds: mapTypes, style: google.maps.MapTypeControlStyle.DROPDOWN_MENU};
				self.mapOpt.overviewMapControl = true;
				self.mapOpt.overviewMapControlOptions = {opened:true	};
				self.mapOpt.streetViewControl = true;
				self.mapOpt.alt = '';
				self.mapOpt.texteBulle = ''; //oups
				self.mapOpt.bulleVisible = false;
	
				
				var stringTmp = new String();	
				
				stringTmp = obj.attr('data-zoom');
				if(stringTmp !== undefined && stringTmp.length > 0) self.mapOpt.zoom = parseInt(stringTmp);
				
				stringTmp = obj.attr('data-latlng');
				if(stringTmp !== undefined && stringTmp.length > 3) self.mapOpt.center = new google.maps.LatLng(stringTmp.split(',', 2)[0],stringTmp.split(',', 2)[1]); 												
				
				stringTmp = obj.attr('data-alt');
				if(stringTmp !== undefined && stringTmp.length > 0) self.mapOpt.alt = stringTmp;
				
				stringTmp = obj.attr('data-texteBulle');
				if(stringTmp !== undefined && stringTmp.length > 0) self.mapOpt.texteBulle = stringTmp;
				
				stringTmp = obj.attr('data-bulleVisible');
				if(stringTmp !== undefined && stringTmp.length > 0 &&  stringTmp == "1") self.mapOpt.bulleVisible = true;
				
				
				stringTmp = obj.attr('data-adresse'); // une recherche est demandé
				if(stringTmp !== undefined && stringTmp.length > 0) {
					self.recherche(stringTmp, self.loadMap_cb);
				}else{
					self.loadMap_cb([]);					
				}										
									
			}
			catch (err){
				$('#map_canvas').text('Une erreur c\'est produite à l\'ouverture de la carte dans la fonction : "LoadMap" ');
			}
			
		},
		loadMap_cb : function(resultat){
			if(resultat.length > 0){	
				self.map = new google.maps.Map(document.getElementById("map_canvas"), self.mapOpt);
				self.setMarker(null, true); // elimine les anciens marker			
				for(var i in resultat) {
					if(i == 0) {
						self.setMarker(resultat[i].geometry.location, false, self.mapOpt.alt, self.mapOpt.texteBulle, self.mapOpt.bulleVisible);										
					}else{
						self.setMarker(resultat[i].geometry.location, false, resultat[i].formatted_address);										
					}					
				}
				self.mapOpt.center = resultat[0].geometry.location;
				self.map.panTo(resultat[0].geometry.location);		
				self.map.setZoom(17);
				//self.mapOpt.zoom = self.map.get();					
				self.map.getStreetView().setVisible(false);					
			}else{
				self.map = new google.maps.Map(document.getElementById("map_canvas"), self.mapOpt);
				
				if(self.gotoInterest)
				{					
					self.map.getStreetView().setVisible(false);
					self.latlngLieu = new google.maps.LatLng(self.interestLat, self.interestLng);					
					self.map.panTo(new google.maps.LatLng(self.interestLat, self.interestLng));					
					self.map.setZoom(16);
					//self.mapOpt.zoom = self.map.get();
					self.setMarker(self.latlngLieu, true, self.interestInfo, self.interestInfo);
					
					$('#plan_ville_selectInteret .select li').each(function() {$(this).removeClass("selected")});
					
					$('#plan_ville_selectInteret div.titleBg div.title').text(self.interestInfo);
					
					$('#plan_ville_selectInteret .select li').each(function() {
						if($(this).text()==self.interestInfo) {
							$(this).addClass("selected")
						}
					});
				}				
				
				
			}			
			
			function HomeControl(controlDiv, map) {

			  // Set CSS styles for the DIV containing the control
			  // Setting padding to 5 px will offset the control
			  // from the edge of the map
			  controlDiv.style.padding = '5px';
			
			  // Set CSS for the control border
			  var controlUI = document.createElement('DIV');
			  controlUI.style.backgroundColor = 'white';
			  controlUI.style.backgroundImage = 'url(/images/btnPhoto.gif)';				
			  controlUI.style.height = '21px';
			  controlUI.style.width = '56px';
			  controlUI.style.cursor = 'pointer';
			  controlUI.title = 'Afficher les photos géolocalisés';
			  controlDiv.appendChild(controlUI);
						
			  // Setup the click event listeners: simply set the map to Chicago
			  google.maps.event.addDomListener(controlUI, 'click', function() {

				if (self.photo.getMap() == null){
					self.photo.setMap(self.map);						
				}else{
					self.photo.setMap(null);
				}
			  });
			}

			var homeControlDiv = document.createElement('DIV');
			var homeControl = new HomeControl(homeControlDiv, self.map);
			homeControlDiv.index = 1;	
			self.map.controls[google.maps.ControlPosition.TOP_RIGHT].push(homeControlDiv);			
			self.photo = new google.maps.panoramio.PanoramioLayer(); 
			
		},
		drawResize: function(){
			if(self.map != null) google.maps.event.trigger(self.map, 'resize');
		},
		// ajoute un marker
		setMarker: function(latlngPos, clearOld, alt, htmlBulle, bulleVisible){
		
			if (clearOld){ // élimine les ancienne marques
				if (self.markersArray) {
					for (i in self.markersArray)  self.markersArray[i].setMap(null);				
					self.markersArray.length = 0;
				}
			}
			if (latlngPos != null){
				var marker = new google.maps.Marker({
					map: self.map, 
					position: latlngPos,
					title: alt
				});			
				var infobox = new google.maps.InfoWindow({position: marker.getPosition(), content: htmlBulle });
				
				eventClick = google.maps.event.addListener(marker, 'click', function(e) {
					infobox.open(self.map, marker);
				});
				if(bulleVisible) infobox.open(self.map, marker);
				
				self.markersArray.push(marker);
				
			}				
		},
		
		// address = stringe de recherche ex: 'Route de chavannes 15'
		// infoBulleAuto = est-ce qu'il y a les infobules automatique ou pas. Si non alors il n'y a aucune info
		// stoque le resultat dans self.resultat
		recherche: function(address, callBack){
				if (self.geocoder == null) self.geocoder = new google.maps.Geocoder();
				self.geocoder.geocode({address: address, 'bounds' :self.region}, function(results, status) {
				if (status == google.maps.GeocoderStatus.OK) {				
					var plusProche = 100000000;
					var plusProchePos = 0;
					for(i = 0; i < results.length; i++)	{					
						distance = self.distEntrePts(results[i].geometry.location, self.latlngLausanne);			
						if (distance < plusProche){
							plusProche = distance;
							plusProchePos = i;
						}
					}
					// place le résultat le plus proche de lausanne en premier					
					var tmp = results[plusProchePos];
					results[plusProchePos] = results[0];
					results[0] = tmp;				
					callBack(results);
			  	} else {
					if (status == google.maps.GeocoderStatus.ZERO_RESULTS){
						callBack([]);
						alert('Aucune adresse trouvée');						
					}else{
						alert("Une erreur c'est produite pour la raison suivante: " + status);
					}	
				}
			});
			return [];
		},
		userResearch_cb : function(resultat){	
			if (resultat.length == 0) return;
			customSelect.setText('plan_ville_selectInteret', "...");
			self.setMarker(null, true); // elimine les anciens marker			
			for(var i in resultat) self.setMarker(resultat[i].geometry.location, false, resultat[i].formatted_address);										
			self.map.panTo(resultat[0].geometry.location);		
			self.map.setZoom(17);	
			self.map.getStreetView().setVisible(false);
		},
		
		// charge la libraire de manière asynchrone		
		googleMap_loadScript:function() {
		  var script = document.createElement("script");
		  script.type = "text/javascript";
		  script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=googleMap_initialize&libraries=panoramio";
		  document.body.appendChild(script);  
		},		
		drag: function(elementToDrag, event) {
			var startX = event.clientX, startY = event.clientY;    
			var origX = elementToDrag.offsetLeft, origY = elementToDrag.offsetTop;
			var deltaX = startX - origX, deltaY = startY - origY;

			var scrTop = $(window).scrollTop();
			var scrLeft = $(window).scrollLeft();			
			var pos = $(elementToDrag).offset();
			var posTop = pos.top;
			var posLeft = pos.left;
			
			var downY = startY + scrTop - posTop;
			var downX = startX + scrLeft - posLeft;

			if (document.addEventListener) {  // DOM Level 2 event model
				document.addEventListener("mousemove", moveHandler, true);
				document.addEventListener("mouseup", upHandler, true);
			}
			else if (document.attachEvent) {  // IE 5+ Event Model				
				elementToDrag.setCapture();
				elementToDrag.attachEvent("onmousemove", moveHandler);
				elementToDrag.attachEvent("onmouseup", upHandler);
				// Treat loss of mouse capture as a mouseup event
				elementToDrag.attachEvent("onlosecapture", upHandler);
			}
			else {  // IE 4 Event Model
				var oldmovehandler = document.onmousemove; // used by upHandler() 
				var olduphandler = document.onmouseup;
				document.onmousemove = moveHandler;
				document.onmouseup = upHandler;
			}
		
			if (event.stopPropagation) event.stopPropagation();  // DOM Level 2
			else event.cancelBubble = true;                      // IE
		
			if (event.preventDefault) event.preventDefault();   // DOM Level 2
			else event.returnValue = false;                     // IE
		
			function moveHandler(e) {
				if (!e) e = window.event;  // IE Event Model				
				self.setPoseSize(e.clientX - deltaX + posLeft , e.clientY - deltaY + posTop , self.width, self.height);			
				if (e.stopPropagation) e.stopPropagation();  // DOM Level 2
				else e.cancelBubble = true;                  // IE
			}		
			
			function upHandler(e) {
				if (!e) e = window.event;  // IE Event Model
		
				if (document.removeEventListener) {  // DOM event model
					document.removeEventListener("mouseup", upHandler, true);
					document.removeEventListener("mousemove", moveHandler, true);
				}
				else if (document.detachEvent) {  // IE 5+ Event Model
					elementToDrag.detachEvent("onlosecapture", upHandler);
					elementToDrag.detachEvent("onmouseup", upHandler);
					elementToDrag.detachEvent("onmousemove", moveHandler);
					elementToDrag.releaseCapture();
				}
				else {  // IE 4 Event Model
					// Restore the original handlers, if any
					document.onmouseup = olduphandler;
					document.onmousemove = oldmovehandler;
				}
		
				if (e.stopPropagation) e.stopPropagation();  // DOM Level 2
				else e.cancelBubble = true;                  // IE
			}
		}		
	}
	
	var self = plan_ville;
})(); // fin de scope local
function googleMap_initialize() {
	
	$._counter=1;	
    if(false) /*test chargement google maps lent: mettre à true pour tester*/
    {
    	setTimeout("plan_ville.googleMapScript = true;",6000);    	
    }
    else
    {
    	plan_ville.googleMapScript = true;
    }
}

jQuery.fn.extend({
   findPos : function() {
	   obj = jQuery(this).get(0);
	   var curleft = obj.offsetLeft || 0;
	   var curtop = obj.offsetTop || 0;
	   while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
	   }
	   return {x:curleft,y:curtop};
   }
});


