
		var map;
		var directionsPanel;
		var directions;
		var gdir;
		var directionsType = 1;
		var globalMarkerIcon = 0;
		
		
		
	// global variables
	// this code is used to create the custom numbered markers
      var gmarkers;
       gmarkers = null;
		// Create our base marker icon 
		var icons = new Array();
		icons[""] = new GIcon(); 
		icons[""].image = "/images/marker.png"; 
		icons[""].shadow="/images/shadow50.png"; 
		icons[""].iconSize=new GSize(20, 34); 
		icons[""].shadowSize=new GSize(37, 34); 
		icons[""].iconAnchor=new GPoint(9,34); 
		icons[""].infoWindowAnchor=new GPoint(9,2); 
		icons[""].infoShadowAnchor=new GPoint(18,25); 
		icons[""].printImage="/images/markerie.gif"; 
		icons[""].mozPrintImage="/images/markerff.gif"; 
		icons[""].printShadow="/images/dithshadow.gif"; 
		icons[""].transparent="/images/markerTransparent.png";
		icons[""].imageMap=[9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0]; 
		
		
		
	var openDirectionDiv = 0
	var activeSelection = 0			//used to determine which provider is currently the active one in the list pane
	
	
	//arrays containing lat/lon of each provider found
	var arrProviderLat = new Array()
	var arrProviderLong = new Array()
	
	
	function getMap(){
		document.getElementById("retrievalMessage").innerHTML = "Consiguiendo Mapa"
		document.getElementById("retrievingMap").style.visibility = "visible"
		document.getElementById("retrievingMap").style.display = ""
		timer = setTimeout(showMap,100)
	}
	/*==============================================================
	/	SHOW THE MAP CENTERED AT USERS SEARCH ADDRESS
	/	PLOT EACH PROVIDER WITHIN THE RADIUS
	/===============================================================*/
	function showMap(){
		
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		map.setCenter(new GLatLng(startingLatitude, startingLongitude), mapZoomLevel);
		map.clearOverlays();
		
		//now plot points
		for (i=0;i<arrProviderLat.length;i++){
			var lat = arrProviderLat[i]
			var lng = arrProviderLong[i]
			var point = new GPoint(lng,lat);
			markerIcon = i+1
			var html = document.getElementById("infoWindow" + markerIcon).innerHTML
			var label = ""
			var icon = markerIcon
			// create the marker
			var marker =  createMarker(point,label,html,icon);
			
			map.addOverlay(marker);
			
			
		}	
		directionsPanel = document.getElementById("divDirections"); 
			
		 // === create a GDirections Object ===			
		gdir=new GDirections(map, directionsPanel);
		GEvent.addListener(gdir, "error", handleDirectionsErrors);
		
		document.getElementById("retrievingMap").style.visibility = "hidden"
		document.getElementById("retrievingMap").style.display = "none"
		 
		
		
	}
	
	
	
	
	/*==============================================================
	/	GETS LATITUDE AND LONGITUDE OF START LOCATION TO PASS 
	/	FROM FORM TO RESULTS PAGE
	/===============================================================*/
	function getLatLong(strAddress, theForm){
		
		if (GBrowserIsCompatible()) { 
			
			var geo = new GClientGeocoder();
			geo.getLocations(strAddress, function (result)
			{ 
				
				if (result.Status.code == G_GEO_SUCCESS) {
					var p = result.Placemark[0].Point.coordinates;
					//alert(p[1] + "," + p[0])
					theForm.latitude.value = p[1]
					theForm.longitude.value = p[0]
					theForm.submit()
					
				} else {
					alert("Could not find that address")
					location.replace("/search.asp")
					
				}
			}
			);
		
		}	else {
			alert("Could access application")
			
		}	
		
		return false
	}
	
	/*==============================================================
	/	GETS LATITUDE AND LONGITUDE PROVIDER BASED ON ADDRESS PUT IN 
	/	PROVIDER SUBMISSION FORM
	/===============================================================*/
	function getProviderLatLong(strAddress, theForm){
		
		if (GBrowserIsCompatible()) { 
			
			var geo = new GClientGeocoder();
			geo.getLocations(strAddress, function (result)
			{ 
				
				if (result.Status.code == G_GEO_SUCCESS) {
					var p = result.Placemark[0].Point.coordinates;
					//alert(p[1] + "," + p[0])
					theForm.latitude.value = p[1]
					theForm.longitude.value = p[0]
					
					checkInput(theForm)
					
				} else {
					alert("Could not find that Provider address")
					checkInput(theForm)
					return false
					
				}
			}
			);
			
		
		}	else {
			alert("Could not find that Provider address")
			return false
			
		}	
		return false
	}
	
	
	
	/*==============================================================
	/	CREATES CUSTOM NUMBERED MARKERS FOR MAP
	/	
	/===============================================================*/
	function createMarker(point,name,html,iconStr) {
	
		var marker = new GMarker(point);
		if (iconStr) {
				marker = new GMarker(point, numberedIcon(iconStr));
			}
		
		var i;
		if (gmarkers && gmarkers.length) {
		i = gmarkers.length;
		} else {
		gmarkers = new Array();
		i = 0;
		}
		
		gmarkers.push(marker);
		/*
		GEvent.addListener(marker, 'click', function() {
						marker.openInfoWindowHtml(html);
				});
				*/
		GEvent.addListener(marker, 'click', function() {
						providerDetails(iconStr);	
				});	
		return marker;
	}

	function numberedIcon(iconNumber) {

		var number;
		if (isNaN(parseInt(iconNumber))) {

			number = "";
		} else if (!isNaN(parseInt(iconNumber)) && ((iconNumber < 0) || (iconNumber > 99))) {
			number = "";
		} else if ((typeof(iconNumber)=="undefined") || (iconNumber==null)) { 
			number = "" 
		} else { 
			number = iconNumber; 
		}

		if (!icons[iconNumber]) {
			var icon = new GIcon(icons[""]);
			icon.image = "/mapIcons/marker"+ number +".png";
			icons[iconNumber]=icon;
		} 
		return icons[iconNumber];
	}
	
	
	
	/*==============================================================
	/	SHOW PROVIDER DETAILS IN GOOGLE INFO WINDOW 
	/	
	/===============================================================*/
	function providerDetails(whichProvider){
		if (activeSelection != 0) {		//there is an active selection. close it
			document.getElementById("cell" + activeSelection).style.backgroundColor = "#FFFFFF"
		}
		activeSelection = whichProvider
		//grey out active selection
		document.getElementById("cell" + whichProvider).style.backgroundColor = "#CCCCCC"	
		
		//launch html info window
		document.getElementById("strFromAddress" + whichProvider).value = GlobalStrFromAddress
		gmarkers[whichProvider-1].openInfoWindowHtml(document.getElementById("infoWindow" + whichProvider).innerHTML);
	}
	
	/*==============================================================
	/	HIDES DIRECTIONS AND SHOWS LIST OF PROVIDERS
	/	
	/===============================================================*/
	function hideDirections(){
		
		document.getElementById("retrievalMessage").innerHTML = "Obteniendo los Resultados"
		document.getElementById("retrievingMap").style.visibility = "visible"
		document.getElementById("retrievingMap").style.display = ""
		timer = setTimeout(replotMap,100)
	}
	
	
	/*==============================================================
	/	REPLOTS THE MAP WITHOUT RESENDING FORM TO SERVER
	/	
	/===============================================================*/
	function replotMap(){
		document.getElementById("divDirections").style.display = "none"; 
		document.getElementById("divDirectionsHeader").style.display = "none"; 
		document.getElementById("divDirectionsUtility").style.display = "none"; 
		
		
		document.getElementById("storeList").style.display = ""; 
		
		document.getElementById("paneHeader").innerHTML = "Lugares Más Cercanos"
		
		
		//redraw map with points
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		
		map.setCenter(new GLatLng(startingLatitude, startingLongitude), mapZoomLevel);
		map.clearOverlays();
		//now plot points
		for (i=0;i<arrProviderLat.length;i++){
			var lat = arrProviderLat[i]
			var lng = arrProviderLong[i]
			var point = new GPoint(lng,lat);
			markerIcon = i+1
			var html = document.getElementById("infoWindow" + markerIcon).innerHTML
			var label = ""
			var icon = markerIcon
			// create the marker
			var marker =  createMarker(point,label,html,icon);
			
			map.addOverlay(marker);
			
		}	
		hideRetrievalDiv()
		//timer = setTimeout(hideRetrievalDiv,2000)
	}
	
	/*==============================================================
	/	PRINTER FRIENDLY VERSION OF DIRECTIONS
	/	
	/===============================================================*/
	function printDirections(){
		document.printForm.txtDirections.value = document.getElementById("divDirections").innerHTML
		//alert(document.getElementById("divDirections").innerHTML)
		document.printForm.providerName.value = document.getElementById("divDirectionsHeader").innerHTML
		document.printForm.submit()
	}
	
	/*==============================================================
	/	WRITES REVIEW FORM INTO GOOGLE INFO WINDOW
	/	
	/===============================================================*/
	globalProviderIcon = 0
	function writeReview(whichProvider, providerId){
		globalProviderIcon = whichProvider
		//write provider name and address at top of form
		strOverlayHeader = document.getElementById("overlayHeader" + whichProvider).innerHTML
		document.getElementById("reviewFormProvider").innerHTML = strOverlayHeader
	
		//put providerId in hidden field
		document.reviewForm.providerId.value = providerId
	
		//html of form
		html = document.getElementById("reviewFormDiv").innerHTML 
		gmarkers[whichProvider-1].openInfoWindowHtml(html);
	}
	
	
	/*==============================================================
	/	SUBMIT REVIEW FORM VIA AJAX
	/	
	/===============================================================*/
	function submitReview(theForm){

		if (isEmailValid(theForm.email.value)) {
			
			//form fields
			name = escape(theForm.name.value);
			email = escape(theForm.email.value);
			comments = escape(theForm.comments.value);
			providerId = escape(theForm.providerId.value);
		
			//sumbit form
			var url = "/ajax/sendReview.asp";
			request.open("POST", url, true);
			request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
			request.onreadystatechange = showThankYou;
			request.send("email=" + email + "&comments=" + comments + "&providerId=" + providerId + "&name=" + name);
		} else {
			alert("Please enter a valid email address")
		}
		return false;
	}
	
	
	/*==============================================================
	/	SHOW THANK YOU IN GOOGLE INFO WINDOW AFTER SUBMITTING REVIEW FORM
	/	
	/===============================================================*/
	function showThankYou(){
		if (request.readyState == 4) {
			if (request.status == 200) {
				strOverlayHeader = document.getElementById("overlayHeader" + globalProviderIcon).innerHTML
				document.getElementById("reviewFormThanksProvider").innerHTML = strOverlayHeader
				html = document.getElementById("reviewFormThankYouDiv").innerHTML 
				gmarkers[activeSelection-1].openInfoWindowHtml(html);
			} else {
				alert(request.responseText)		
			}
		} 	
	}
	
	var request = false;
	var requestPrivate = false
	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
		request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
		try {
			request = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (failed) {
			request = false;
		}  
		}
	}
	
	
	
						
	/*==============================================================
	/	SHOWS DRIVING DIRECTIONS IN RESULTS PANE
	/	
	/===============================================================*/		
	function showDirections(strFromAddress, markerIcon){
			document.getElementById("retrievalMessage").innerHTML = "Obteniendo las Direcciones"
			document.getElementById("retrievingMap").style.visibility = "visible"
			document.getElementById("retrievingMap").style.display = ""
			
			document.getElementById("paneHeader").innerHTML = "Direcciones de Conducción"
			strToAddress = document.getElementById("providerAddress" + markerIcon).innerHTML
			
			
			strProviderName = document.getElementById("providerName" + markerIcon).innerHTML
			strProviderPhone = document.getElementById("providerPhone" + markerIcon).innerHTML
			strDirectionsHeader = document.getElementById("directionsHeader" + markerIcon).innerHTML
			if (GBrowserIsCompatible()) {
				if (strFromAddress != "" && strToAddress != ""){
					GlobalStrFromAddress = strFromAddress
					globalMarkerIcon = markerIcon			//used for error trapping
					
					directionsPanel = document.getElementById("divDirections"); 
					directionsPanel.innerHTML = "" 
					document.getElementById("divDirections").style.display = ""; 
					document.getElementById("divDirectionsUtility").style.display = ""; 
					document.getElementById("divDirectionsHeader").style.display = ""; 
					document.getElementById("divDirectionsHeader").innerHTML = strDirectionsHeader
					
					document.getElementById("storeList").style.display = "none"; 
					
					//=======================================================================//
					// there are three different attempts at the directions defined by the
					// directionsType variable
					// directionsType = 1 : standard street address
					// directionsType = 2 : scrubbed street address
					// directionsType = 3 : latitude/longitude
					//=======================================================================//
					directionsType = 1
					
					//load directions in map
					
					//first try the street address
					gdir.load(strFromAddress + " to " + strToAddress);
					
				}	
			}	
			
			gmarkers[markerIcon-1].closeInfoWindow();
			timer = setTimeout(hideRetrievalDiv,2000)
			return false;
	}
	
	function showAlternateDirections(strFromAddress, markerIcon){
			document.getElementById("retrievalMessage").innerHTML = "Obteniendo las Direcciones"
			document.getElementById("retrievingMap").style.visibility = "visible"
			document.getElementById("retrievingMap").style.display = ""
			
			document.getElementById("paneHeader").innerHTML = "Direcciones de Conducción"
			strToAddress = document.getElementById("providerAddress" + markerIcon).innerHTML
			
			
			strProviderName = document.getElementById("providerName" + markerIcon).innerHTML
			strProviderPhone = document.getElementById("providerPhone" + markerIcon).innerHTML
			strDirectionsHeader = document.getElementById("directionsHeader" + markerIcon).innerHTML
			if (GBrowserIsCompatible()) {
				if (strFromAddress != "" && strToAddress != ""){
					GlobalStrFromAddress = strFromAddress
					globalMarkerIcon = markerIcon			//used for error trapping
					
					directionsPanel = document.getElementById("divDirections"); 
					directionsPanel.innerHTML = "" 
					document.getElementById("divDirections").style.display = ""; 
					document.getElementById("divDirectionsUtility").style.display = ""; 
					document.getElementById("divDirectionsHeader").style.display = ""; 
					document.getElementById("divDirectionsHeader").innerHTML = strDirectionsHeader
					
					document.getElementById("storeList").style.display = "none"; 
					
					//=======================================================================//
					// there are three different attempts at the directions defined by the
					// directionsType variable
					// directionsType = 1 : standard street address
					// directionsType = 2 : scrubbed street address
					// directionsType = 3 : latitude/longitude
					//=======================================================================//
					
					
					//if no directions found, try removing some things and try street address again
					if(directionsType == 2){
						
						thisRegExp = new RegExp
						
						thisRegExp = /blvd\./gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /blvd/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /boulevard/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /st/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /st\./gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /street/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /ave/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /ave\./gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /avenue/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /rd/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /rd\./gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						thisRegExp = /road/gi
						strToAddress = strToAddress.replace(thisRegExp,"")
						
						
						//alert("alternate address")
						
						gdir.load(strFromAddress + " to " + strToAddress);
						
					}
					
					//if still no directions found. use lat long at destination
					if(directionsType == 2){
						//alert("lat/long")
						strToAddress = document.getElementById("providerLatLong" + markerIcon).innerHTML
						gdir.load(strFromAddress + " to " + strToAddress);
					}	
				}	
			}	
			
			gmarkers[markerIcon-1].closeInfoWindow();
			timer = setTimeout(hideRetrievalDiv,2000)
			return false;
	}
	function handleDirectionsErrors(){
		if(gdir.getStatus().code != 200){
			alert(gdir.getStatus().code)
			directionsType += 1
			showAlternateDirections(GlobalStrFromAddress,globalMarkerIcon)
		}
	}
		
	/*==============================================================
	/	HIDES RETRIEVAL STATUS BAR
	/	
	/===============================================================*/	
	function hideRetrievalDiv(){
		document.getElementById("retrievingMap").style.visibility = "hidden"
			document.getElementById("retrievingMap").style.display = "none"
	}		

