    var map = null;
    var geocoder = null;
	
	var point1 = null;
	var point2 = null;
	var long1 = null;
	var long2 = null;
	var lat1 = null;
	var lat2 = null;
	var dist = null;
		
	function numOrdA(a, b){ return (a-b); }
		
    function initialize() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(37.4419, -122.1419), 10);
        geocoder = new GClientGeocoder();
      }
    }

    function showAddress(address) {
	//document.adddata.errortxt.value += address;
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
			alert("couldn't find");
			  document.adddata.notify.style.display = "inline";
 			  document.adddata.notify.value = "We're sorry, we could not locate that address.  Please try again.";
			  document.adddata.nowlat.value = "";
			  document.adddata.nowlong.value = "";
			  visibility();
			  
			} else {	
			
			  document.adddata.notify.style.display = "none";
			  document.adddata.notify.value = "";
			  document.adddata.nowlat.value = point.y;
			  document.adddata.nowlong.value = point.x;
			  
			  var greenIcon = new GIcon(G_DEFAULT_ICON);
        	  greenIcon.image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/green/blank.png";
			
		      // Set up our GMarkerOptions object
			  markerOptions = { icon:greenIcon };
			  
              map.setCenter(point, 10);
              var marker = new GMarker(point, markerOptions);
			  GEvent.addListener(marker, "click", function() {    
    			marker.openInfoWindowHtml("You are here."); 
    			});
			  map.addOverlay(marker);
			  //GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml("You Are Here");});
              //marker.openInfoWindowHtml("You are Here");
			  
			  <!--THIS REFERENCES ALL THE TABLE ROWS TO THE CURRENT ADDRESS-->
			  var hiddenTableElem = document.getElementById('hiddentb');
		
		      i=1;
			  while(hiddenTableElem.rows[i])
			  {
	  
	  		  	//Output the data to the table
	  		  	var hiddenRowElem = hiddenTableElem.rows[i];
	  			reference(i, hiddenRowElem.cells[5].innerHTML, hiddenRowElem.cells[6].innerHTML, document.adddata.nowlat.value, document.adddata.nowlong.value);
	  				
	  			i++;
			  }
			  
//			  document.adddata.errortxt.value += "ready to sort";
			  sortTable(2, "infotb", "hiddentb");	
			}
          }
        );
      }
	 
    }


//r=6378.7 (kilometers) 
//r=3963.0 (statute miles) 
function reference(i, lat1, long1, lat2, long2) {
//	document.adddata.errortxt.value += "referencing: " + i + ", " + lat1 + ", " + long1 + ", " + lat2 + ", " + long2;
	long2 = document.adddata.nowlong.value
	lat2 = document.adddata.nowlat.value
		  
	//calculations to determine distance
	dist = 3963.0 * Math.acos((Math.sin(lat1/57.2957795 )*Math.sin(lat2/57.2957795 )) + (Math.cos(lat1/57.2957795 )*Math.cos(lat2/57.2957795 )*Math.cos((long1/57.2957795) -(long2/57.2957795) )));
	
	dist = Math.round(dist * 100)/100;
	
	
	document.getElementById("infotb").rows[i].cells[2].innerHTML = dist;
//	document.adddata.errortxt.value += "!" + dist + "!";
}

function execute(add1, city, state, zip, kinfo)
{
	
    initialize();
	
	var totaddr = add1 + ", " + city + ", " + state + "  " + zip;
	showAddress(totaddr); <!--this will fill in the new lat and long, as well as put it on the map-->
//	document.adddata.errortxt.value += "here";

}

//creates a marker with a fancy letter on it
function createCloseMarker(index) {  
		// Create a base icon for all of our markers that specifies the
        // shadow, icon dimensions, etc.
		
   var baseIcon = new GIcon();
   baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
   baseIcon.iconSize = new GSize(20, 34);
   baseIcon.shadowSize = new GSize(37, 34);
   baseIcon.iconAnchor = new GPoint(9, 34);
   baseIcon.infoWindowAnchor = new GPoint(9, 2);
   baseIcon.infoShadowAnchor = new GPoint(18, 25);

// Create a lettered icon for this point using our icon class  
  var letter = String.fromCharCode("A".charCodeAt(0) + index - 1);  
  var letteredIcon = new GIcon(baseIcon);  
  letteredIcon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";  
// Set up our GMarkerOptions object  
  markerOptions = { icon:letteredIcon };  
  
  point = new GLatLng(document.getElementById('hiddentb').rows[index].cells[5].innerHTML, document.getElementById('hiddentb').rows[index].cells[6].innerHTML);
  var marker = new GMarker(point, markerOptions);  
  GEvent.addListener(marker, "click", function() {    
    marker.openInfoWindowHtml(document.getElementById('infotb').rows[index].cells[1].innerHTML); 
    }
  );  
  return marker;
}

//creates a marker without a fancy letter
function createDistantMarker(index) {
  var kpoint = new GLatLng(document.getElementById('hiddentb').rows[index].cells[5].innerHTML, document.getElementById('hiddentb').rows[index].cells[6].innerHTML);
  var marker = new GMarker(kpoint);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(document.getElementById('infotb').rows[index].cells[1].innerHTML);
	}
  );
 return marker;
}
  
function sortTable(col, table1Name, table2Name)
  {
	 
	var table1ToSort = document.getElementById(table1Name);
	var table2ToSort = document.getElementById(table2Name);
	var table1ColNum = table1ToSort.getElementsByTagName('tr')[0].getElementsByTagName('td').length
	var totalRows = table1ToSort.rows.length;
    var bSort = 0;
    var colArray = new Array();
    var oldIndex = new Array();
    var indexArray = new Array();
    var bArray = new Array();
    //var newRow;
    var newCell;
    var i;
    var c;
    var j;
	
    // ** POPULATE THE ARRAY colArray WITH CONTENTS OF THE COLUMN SELECTED
    for (i=1; i < table1ToSort.rows.length; i++)
      {
		colArray[i-1] = table1ToSort.rows[i].cells[col].innerHTML; 
      }
	  
    // ** COPY ARRAY FOR COMPARISON AFTER SORT
    for (i=0; i < colArray.length; i++)
      {
        bArray[i] = colArray[i];
      }
    // ** SORT THE COLUMN ITEMS
    colArray.sort(numOrdA);
	
    for (i=0; i < colArray.length; i++)
      { // LOOP THROUGH THE NEW SORTED ARRAY
        indexArray[i] = (i+1);
        for(j=0; j < bArray.length; j++)
          { // LOOP THROUGH THE OLD ARRAY
            if (colArray[i] == bArray[j])
              {  // WHEN THE ITEM IN THE OLD AND NEW MATCH, PLACE THE
                // CURRENT ROW NUMBER IN THE PROPER POSITION IN THE
                // NEW ORDER ARRAY SO ROWS CAN BE MOVED ....
                // MAKE SURE CURRENT ROW NUMBER IS NOT ALREADY IN THE
                // NEW ORDER ARRAY
                for (c=0; c<i; c++)
                  {
                    if ( oldIndex[c] == (j+1) )
                    {
                      bSort = 1;
                    }
                      }
                      if (bSort == 0)
                        {
                          oldIndex[i] = (j+1);
                        }
                          bSort = 0;
                        }
          }
    }
  // ** SORTING COMPLETE, ADD NEW ROWS TO BASE OF TABLE ....
  for (i=0; i<oldIndex.length; i++)
    {
	
      newRow = table1ToSort.insertRow(-1);
     
  
	  for (c=0; c<table1ColNum; c++)
        {
			
          newCell = newRow.insertCell(c);
		  
          newCell.innerHTML = table1ToSort.rows[oldIndex[i]].cells[c].innerHTML;
			
        }
		
  	  newRow = table2ToSort.insertRow(-1);
      for (c=0; c<table2ToSort.getElementsByTagName('tr')[0].getElementsByTagName('td').length; c++)
        {
          newCell = newRow.insertCell(c);
          newCell.innerHTML = table2ToSort.rows[oldIndex[i]].cells[c].innerHTML;
        }
		
      }
	  
  //MOVE NEW ROWS TO TOP OF TABLE ....
  for (i=1; i<totalRows; i++)
    {
	
	moveRowFF(table1ToSort,(table1ToSort.rows.length - 1), 1 );
      
	
	moveRowFF(table2ToSort,(table2ToSort.rows.length - 1), 1 );
    
	}

  //DELETE THE OLD ROWS FROM THE BOTTOM OF THE TABLE ....
  for (i=1; i<totalRows; i++)
    {
		
      table1ToSort.deleteRow(-1);
	  
	  table2ToSort.deleteRow(-1);
   
	}
	
	
	visibility()
  }

function moveRowFF(table, from, to)
{
  var tbody = table.tBodies[0]; // Use tbody
  var trFrom = tbody.rows[from]; // Make sure row stays referenced
  tbody.removeChild(trFrom); // Remove the row before inserting it (dupliate id's etc.)
  var trTo = tbody.rows[to];
  tbody.insertBefore(trFrom, trTo);
}

function visibility()
  //excludes based on distance criteria and places a marker
  {
	  
  var i = 1;
  var k = 0;
  
  var infoTableElem = document.getElementById('infotb');
  var hiddenTableElem = document.getElementById('hiddentb');
    
  	 
  //sort through the individual entries and make the row visible	 
  while(infoTableElem.rows[i])
	{
	  var rowElem = infoTableElem.rows[i];
	  dist = rowElem.cells[2].innerHTML;		

      if (dist > 0 && dist < 24) {
		rowElem.style.display="";
	   	k=1;
		map.addOverlay(createCloseMarker(i));
		rowElem.cells[0].innerHTML = "<b><center>" + String.fromCharCode("A".charCodeAt(0) + i - 1) + "</center></b>";
			
      } else {
		rowElem.style.display="none";
	    map.addOverlay(createDistantMarker(i));
	  }
    i++;
    }
	
	
  //make the table and map visible
  if(document.adddata.notify.value == "")
  	{
	document.getElementById("map_canvas").style.display="inline-block";	
	
	if(k == 0)
  	  {
	  var workstr;
		  
	  document.adddata.notify.style.display = "inline";
	  workstr = "There are no Lavishea Retailers within 25 miles of this address.  The nearest retailer is: \n"; 
	  workstr += infoTableElem.rows[1].cells[1].innerHTML
	  workstr = workstr.replace(/<B>/g, "");
	  workstr = workstr.replace("</B>", "");
	  workstr = workstr.replace(/<BR>/g, "\n");
	  workstr = workstr.replace(/&amp;/g, "&");
	  
	  document.adddata.notify.value = workstr;
	  infoTableElem.style.display="none";
	  
	  } else { 
	  document.adddata.notify.style.display = "none";	
      infoTableElem.style.display="inline";
	  }	
	
	} else {
	infoTableElem.style.display="none";
	map = new GMap2(document.getElementById("map_canvas"));
	}

  }
  	