	
	var map;
	var geocoder;
	var url_base = "http://www.insport.ca/";
	var radius;
	var nostores=false;
	var noOnlineStores=false;
	var markers;
	var center;
	
	//******************************
	//Initialise l'objet Google Map
	//et l'objet GeoCoder
	//Fait de Montréal le centre de
	//la carte (45.5,-73.6)
	//******************************
	
	function load(){
		if (GBrowserIsCompatible()) {
			geocoder = new GClientGeocoder();
			map = new GMap2(document.getElementById('map'));
			map.addControl(new GLargeMapControl());
			map.setCenter(new GLatLng(45.5, -73.6), 4);
		}
	}
	
	//******************************************************
	//lance la recherche avec la requête de l'usager
	//Si l'adresse est trouvée, grâce à l'objet GeoCoder,
	//lance la fonction searchLocationsNear() pour trouver
	//les magasins les plus proches
	//******************************************************
	
	function searchLocations() 
	{
		var address = document.getElementById('zip').value;
		if(getBrand())
		{
			geocoder.getLatLng(address, function(latlng) {
			if (!latlng) 
				alert("The entered address couldn't be found. Please verify that address or complete it as in the above example.");
			else 
			{
				map.setCenter(latlng);
				searchLocationsNear(latlng);
			}
			});
		}
		else
			alert("You must select a brand");
	}

	//**********************************************
	//Recherche dans le XML généré par googlemap.php
	//les magasins les plus proches et ensuite
	//les ajoute sur la carte avec la fonction
	//createMarker()
	//**********************************************
	
	function searchLocationsNear(center) 
	{
		//clear previous results
		resetMap();
		center=center;
		//ajoute une icône sur le centre de la carte
		//tel que demandé par le client
		var roger = new GMarker(map.getCenter());
		roger.minZoom = 1;
		roger.maxZoom = 22;
		map.addOverlay(roger);
		
		var searchUrl = url_base + 'php/googlemap.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius + '&brand=' + brand;
		//Download les results du XML
		processResults(searchUrl, false);
	}
	
	//********************************
	//  reinitialise la carte et 
	//  les variables globales
	//  clear markers
	//********************************
	
	function resetMap()
	{
		//init global variables
		nostores=false;
		noOnlineStores=false;
		map.clearOverlays();
		radius = parseFloat(parseInt(document.getElementById('radiusSelect').value) / 1.6);
		brand= getBrand();
		document.getElementById('detaillants').innerHTML="";
		document.getElementById('onlinedealers').innerHTML="";
	}

	//*************************************
	//crée les markers avec la bonne icône
	//*************************************
	
	function createMarker(point, name, address, phone, zip)
	{
		var img= url_base + "ui/img/logos/" + getBrandLogo(brand);
		
		var icon = new GIcon(); 
		icon.image = img; 
		
		icon.iconSize = new GSize(22,22); 
		icon.iconAnchor = new GPoint(22, 22); 
		icon.infoWindowAnchor = new GPoint(22, 0);
		
		address = address.replace("'","&lsquo;");
		address = address.replace("\"","&quot;");
		
		var marker = new GMarker(point,icon);
		var html = '<b>' + name + '</b> <br/>' + address + '<br/>' + phone;
		html += "<br/><a href=\"javascript:getDirections('" + document.getElementById('zip').value + "','" + address + " " + zip + "');\">Driving Directions</a>";
		
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html);
		});
		
		return marker;
	}

	
	//********************************
	// Traite l'info présente dans le 
	// XML généré par l'appel Ajax
	//********************************
	
	function processResults(searchUrl, online)
	{
		GDownloadUrl(searchUrl, function(data) {
			var xml = GXml.parse(data);
			markers = xml.documentElement.getElementsByTagName('marker');
			
			//Message d'erreur si rien n'est trouvé
			if (markers.length == 0) 
			{
				if(!online)
				{
					nostores=true;
					map.setCenter(new GLatLng(45.5, -73.6), 4);
					getOnlineStores();
				}
				else
				{
					noOnlineStores=true;
					//generateMsg(0,getBrandName(brand));
					if(nostores)
						generateMsg(parseInt(document.getElementById('radiusSelect').value) ,getBrandName(brand));
				}
					
				return;
			}
			
			if(nostores && !noOnlineStores)
				generateMsg(0 ,getBrandName(brand));
				
			if(!nostores &&  !noOnlineStores && online)
				document.getElementById('onlinedealers').innerHTML="<hr/><h2>Online Dealers</h2>";
			
			var bounds = new GLatLngBounds();
			
			//parse la liste de tous les magasins trouvés
			for (var i = 0; i < markers.length; i++) 
			{
				var name = markers[i].getAttribute('name');
				var address = markers[i].getAttribute('address');
				var city = markers[i].getAttribute('city');  
				var distance = parseFloat(markers[i].getAttribute('distance') * 1.6);
				var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
							parseFloat(markers[i].getAttribute('lng')));
				var zip = markers[i].getAttribute('zip');
				var marques = markers[i].getAttribute('marques');
				var website =  markers[i].getAttribute('website');
				var phone = markers[i].getAttribute('phone');
				var cm = parseInt(markers[i].getAttribute('cm'));
				
				if(cm)
					name += " - " + "CM certified";
					
 				//********************************************
 				//Ajuste le design pour qu'il n'y ait pas de 
 				//d'espace vide dans la liste
 				//********************************************
 				
 				if(i%2==0)
 				{
 					var div = document.createElement('div');
 					div.style.clear = "both";
 					document.getElementById("detaillants").appendChild(div);
 				}
								
				//*************************************
				//Ajoute les magasins à la liste
				//et ajoute les icone sur la carte
				//seulement si le magasin est physique
				//*************************************
				
				var marker = createMarker(point, name, address, phone, zip);
				address += "<br/>" + city;
				var sidebarEntry = createSidebarEntry(marker, name, address, distance, marques, website, phone, online);
				
				if(!online)
				{	
					//ajoute l'icône sur la carte si le magasin est physique
					map.addOverlay(marker);
					document.getElementById("detaillants").appendChild(sidebarEntry);
				}
				else
				{
					if(!nostores)
						document.getElementById("onlinedealers").appendChild(sidebarEntry);
					else
						document.getElementById("detaillants").appendChild(sidebarEntry);
				}
								
				bounds.extend(point);
			}
					
			if(!online)
			{
				map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
				getOnlineStores();
			}
		});
	}
	
	//***********************************
	//crée l'information dans le div des
	//détaillants. Ajoute les événements
	//pour afficher l'information lors
	//du click de la souris
	//***********************************
	
	function createSidebarEntry(marker, name, address, distance, marques, website, phone, online)
	{
		var div = document.createElement('div');
		var logos = marques.split(",");
		var imgs = "";
		var www = "";
		
		if(website != "")
			www = "<a href='http://" + website + "' target='_blank'><img src='" + url_base + "ui/img/www.jpg' border='0' style='margin-bottom:0;'></a>";
			
		for(x=0;x<logos.length;x++)
			imgs += "<img alt='" + getBrandName(logos[x]) + "' src='" + url_base + "ui/img/logos/" + getBrandLogo(logos[x]) + "' border='0'>";
		
		if(online)
			var html = '<b>' + name + '</b><br>'  + phone + '&nbsp;' + www + '<br/>' + imgs;
		else
			var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ' Km)<br/>' + address + '<br/>' + phone + '&nbsp;' + www + '<br/>' + imgs;
		
		div.innerHTML = html;
		
		if(navigator.appName.indexOf("Explorer") != -1)
			div.style.styleFloat='left';
		else
			div.style.cssFloat='left';
		
		//div.style.cursor = 'pointer';
		div.style.marginBottom = '5px';
		div.style.width = '205px';
		div.style.overflow='hidden';
		div.style.marginTop = '10px';
		div.style.marginLeft = '15px';
		
		if(!online)
		{
			GEvent.addDomListener(div, 'click', function() {
				GEvent.trigger(marker, 'click');
			});
			GEvent.addDomListener(div, 'mouseover', function() {
				div.style.backgroundColor = '#eee';
			});
			GEvent.addDomListener(div, 'mouseout', function() {
				div.style.backgroundColor = '#fff';
			});
		}
		
		return div;
	}
    
    	
    	//*************************
    	//retourne la marque (int)
    	//sélectionnée par l'usager
    	//*************************
    
    	function getBrand()
	{
		var f = document.forms['brandform'];

		for(x=0;x<f.brandz.length;x++)
     		{
     			if(f.brandz[x].checked)
     				return f.brandz[x].value;
     		}
     		
     		return false;
	}
	
	
	//**************************
    	//retourne la marque (String)
    	//sélectionnée par l'usager
    	//**************************
    
    	function getBrandName(brand)
	{
		var n="";
		
		switch(parseInt(brand))
		{
			case 1 : n = "Jetboil";break;
			case 2 : n = "Osprey";break;
			case 4 : n = "Nathan";break;
			case 5 : n = "Sorbothane";break;
			case 6 : n = "Penguin Brands";break;
			case 8 : n = "Bogs";break;
			case 10 : n = "Postcard";break;
			case 11 : n = "Mountain Force";break;
			case 12 : n = "Fozzils";break;
			case 13 : n = "Mountain Khakis";break;
			default : n = "";break;
		}
		
		return n;
	}
	
	//*********************************
	//retourne le (string) logo associé
	//à la marque (int)
	//*********************************
	
	function getBrandLogo(brand)
	{
		var img="";
		
		switch(parseInt(brand))
		{
			case 1 : img = "jetboil.gif";break;
			case 2 : img = "osprey.gif";break;
			case 4 : img = "nathan.gif";break;
			case 5 : img = "sorbothane.gif";break;
			case 6 : img = "penguin.gif";break;
			case 8 : img = "bogs.gif";break;
			case 10 : img = "postcard.gif";break;
			case 11 : img = "mountain.gif";break;
			case 12 : img = "fozzils.gif";break;
			case 13 : img = "khakis.gif";break;
			default : img = "icon.gif";break;
		}
		
		return img;
	}
	
	//****************************
	//generateMsg()
	//Genere le bon message selon
	//le radius de recherche
	//retourn le message (string)
	//****************************
	
	function generateMsg(radius,dealer)
	{
		var msg="";
		switch(radius)
 		{
 			case 5:
 			case 10:
 			case 15:
 			case 20:
 			case 50:
 			case 100:
 			
 			case 150: msg = "Sorry, there is no " + dealer + " dealer in the requested area. Please expand your research or contact us at 1-800-465-9637 or info@insport.ca"; break;
 			
 			case 200: msg = "Sorry, there is no " + dealer + " dealer in the requested area. Please contact us at 1-800-465-9637 or info@insport.ca.";break;
 			
 			default: msg= "Sorry, there is no " + dealer + " dealer available in the requested area. Please expand your research or visit one of the following online dealers.";break;
 		}
 		
		document.getElementById('detaillants').innerHTML = "<br/><font color='#AA0000'>" + msg + "</font>";
	}
	
	function getOnlineStores()
	{
		searchUrl = url_base + 'php/googlemap.php?action=onlineStores&brand=' + brand;
		processResults(searchUrl, true);
	}
	
	
	function getDirections(pointA,pointB)
	{
		window.open("http://maps.google.ca/?q=from:" + pointA + "%20to:" + pointB,"Title","width=1024,height=768,scrollbars=yes,navbar=yer" )
	}
