		var gmap = null;
		var geocoder;
		var markers = [];
		var infoWindow;

		function parseXml(str) {
			if (window.ActiveXObject) {
				var doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.loadXML(str);
				return doc;
			} else if (window.DOMParser) {
				return (new DOMParser).parseFromString(str, 'text/xml');
			}
		}

		function doNothing() {}

		function downloadUrl(url,callback) {
			var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;
		
			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					request.onreadystatechange = doNothing;
					callback(request.responseText, request.status);
				}
		 	};
		
			request.open('GET', url, true);
			request.send(null);
		}

		function sl_load() {
			infoWindow = new google.maps.InfoWindow();
			var latlng = new google.maps.LatLng(45.521383, -73.577371);
			var myOptions = {
				zoom: 13,
				center: new google.maps.LatLng(45.521383, -73.577371),
				mapTypeId: google.maps.MapTypeId.ROADMAP
			}
			gmap = new google.maps.Map(document.getElementById('map'), myOptions);
		}

		function searchStore(product_id, page) {
			if (gmap == null) {
				sl_load();
				$("#store_locator").show();
			}
			var address = document.getElementById('zip').value;
			geocoder = new google.maps.Geocoder();			
			geocoder.geocode({'address': address}, function(results, status){
				if (status == google.maps.GeocoderStatus.OK) {
					if($('form input[type=radio]:checked').val() == 'modele')
						searchLocationsNear(results[0].geometry.location, product_id, results[0].formatted_address, page);
					else{
						searchLocationsNear(results[0].geometry.location, null, results[0].formatted_address, page);
					}
				} else {
					alert('Désolé cette adresse n\'a pas été trouvé.');
				}
			});
		}

		function createMarker(latlng, name, address, google_map_url) {
			var html = '<div class="sl_info_buble"><div class="sl_info_buble_title">' + name + '</div><div class="sl_info_buble_address">' + address + '</div>' +
				'<a style="font-size:11px" href="' + google_map_url + '" target="_blank">Coordonnées</a></div>';
			var marker = new google.maps.Marker({
				map: gmap,
				position: latlng
			});
			google.maps.event.addListener(marker, 'click', function() {
				infoWindow.setContent(html);
				infoWindow.open(gmap, marker);
			});
			markers.push(marker);
			return marker;
		}

		  function createSidebarEntry(marker, name, address, distance, google_map_url, url) {
			var locations = document.getElementById('locations');
			var div = document.createElement('div');
			var html = '<div style="width:200px;float:left;">'+name+'<br />'+distance+'km</div><div style="width:100px;float:right;text-align:right"><a target="_blank" href="'+google_map_url+'">Coordonnées</a></div><div style="clear:both"></div>'; 
			div.innerHTML = html;
			div.className='results_entry';
			//resultsDisplayed++;
			google.maps.event.addDomListener(div, 'click', function() {
        		google.maps.event.trigger(marker, 'click');
			});
			locations.appendChild(div);
			return div;
		}

		function clearSidebar() {
			var locations = document.getElementById('locations');
			if (locations) {
				locations.innerHTML = '';
			}
		}

		function clearPages() {
			var pages = document.getElementById('locations-pages');
			if (pages) {
				pages.innerHTML = '';
			}
		}

		function clearLocations() {
			infoWindow.close();
			for (var i = 0; i < markers.length; i++) {
				markers[i].setMap(null);
			}
			markers.length = 0;			
		}

		function searchLocationsNear(center, product_id, homeAddress, page) {
			clearLocations();
			clearSidebar();

			var locations = document.getElementById('locations');
			var div = document.createElement('div');
			var html = '<div id="locations_title">Magasins situés proche de:<br />'+homeAddress+'</div>'; 
			div.innerHTML = html;
			locations.appendChild(div);

			if (page == null) page = 1;

			if (product_id != null) {
				var searchUrl = '/wp-content/themes/quartz/stores.php?lang=fr&product_id='+product_id+'&lat=' + center.lat() + '&lng=' + center.lng() + '&page=' + page;
			} else {
				var searchUrl = '/wp-content/themes/quartz/stores.php?lang=fr&lat=' + center.lat() + '&lng=' + center.lng() + '&page=' + page;
			}
			//generate-xml.php?lat=' + center.lat() + '&lng=' + center.lng();
			downloadUrl(searchUrl, function(data) {
				clearPages();
				var xml = parseXml(data);
				var markerNodes = xml.documentElement.getElementsByTagName('marker');
				var bounds = new google.maps.LatLngBounds();
				for (var i = 0; i < markerNodes.length; i++) {
					var name = markerNodes[i].getAttribute("name");
					var address = markerNodes[i].getAttribute("address");
					var distance = parseFloat(markerNodes[i].getAttribute("distance"));

					var latlng = new google.maps.LatLng(
						parseFloat(markerNodes[i].getAttribute("lat")),
						parseFloat(markerNodes[i].getAttribute("lng"))
					);

					var google_map_url = markerNodes[i].getAttribute('google_map_url');
					//createOption(name, distance, i);
					var marker = createMarker(latlng, name, address, google_map_url);
					createSidebarEntry(marker, name, address, distance, google_map_url, '')
					bounds.extend(latlng);
				}
				gmap.fitBounds(bounds);
				
				var nbPageNodes = xml.documentElement.getElementsByTagName('nbpage');
				var nbPages = 1;
				if (nbPageNodes && nbPageNodes[0]) nbPages = nbPageNodes[0].childNodes[0].nodeValue;

				var pageNodes = xml.documentElement.getElementsByTagName('page');
				if (pageNodes && pageNodes[0]) page = pageNodes[0].childNodes[0].nodeValue;

				var pages = document.getElementById('locations-pages');
				for(var i = 1; i <= nbPages; i++) {
					var div = document.createElement('div');
					if (i == page) {
						var html = '<div class="page_selected"><a href="#" onclick="searchStore(' + product_id + ', ' + i + '); return false;">' + i + '</a></div>';
					} else {
						var html = '<div class="page"><a href="#" onclick="searchStore(' + product_id + ', ' + i + '); return false;">' + i + '</a></div>';
					}
					div.innerHTML = html;
					pages.appendChild(div);
				}
			});
		}

