    var map;
    var count=0;
    var count2=0;
    var geoXmlC = new Array();;
    var StaMarker = new Array();
    var StaLine = new Array();
    var DigOver;
    var geocoder = null;
    var marker;
    var nielsen;
    var dma_toggle = 0;
    var firstover = 0;
    var firsttower = 0;
    var firstdetail = 0;
    var Detail;
    var DetailPane;
    var xmlHttp;
    var savedaddress;

function showAddress(address,zoom) {
      if (address.length == 5){
		savedaddress = address;
		xmlHttp=GetXmlHttpObject();
		var url="/cgi-bin/maps/coverage.pl?startpoint="+address;
	 	xmlHttp.onreadystatechange=stateChangedZip;
	    	xmlHttp.open("GET",url,true);
    		xmlHttp.send(null);
           
	} else {
		if (geocoder) {
	        	geocoder.getLatLng(address, function(point) {
      	      			if (!point) {
            	  			alert(address + " not found.  Please try ZIP Code and drag marker to more precise location.");
		            	} else {
					plotAddress(point, zoom);
				}
      		    	});
	      	}
	}
}

function plotAddress(point,zoom){
	if(zoom == 0){
		map.setCenter(point);
	} else {
		map.setCenter(point,zoom-2);
	}
	getcoverage(point.toUrlValue()); 
        marker = new GMarker(point, {draggable:true});
	map.clearOverlays();
	GEvent.addListener(marker, "dragend", function() {
		var pt = marker.getLatLng(); 
		document.getElementById("startpoint").value = pt.toUrlValue(); 
		getcoverage(pt.toUrlValue()); 
      	});
	map.addOverlay(marker);
}

function stateChangedZip() { 
  if (xmlHttp.readyState==4) { 
    if(xmlHttp.responseText.length > 5){
      var ll = new GLatLng.fromUrlValue(xmlHttp.responseText);
      plotAddress(ll,12);
    } else {
      showAddress(savedaddress + " ", 12);
    }
  }
}


    function initialize() {
      if (GBrowserIsCompatible()) {

	// define the crosshair tile layer and its required functions
        var crossLayer = new GTileLayer(new GCopyrightCollection(""), 0, 15);
        crossLayer.getTileUrl =  function(tile, zoom) {
          return "./include/tile_crosshairs.png";
        }
        crossLayer.isPng = function() {return true;}

        // Create a new map type incorporating the tile layer
        map = new GMap2(document.getElementById("map_canvas")); 
        map.setCenter(new GLatLng(40,-95), 4); 
        map.addControl(new GLargeMapControl());

	var mapControl = new GHierarchicalMapTypeControl();
        // Set up map type menu relationships
        mapControl.clearRelationships();
        mapControl.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, "Labels", false);
	map.addMapType(G_PHYSICAL_MAP);
  
        map.addControl(mapControl);

	map.setMapType(G_PHYSICAL_MAP);
	geocoder = new GClientGeocoder();

	//GEvent.addListener(map, "dblclick", function(overlay, latlng) {
          //var zoomlev = map.getZoom();
          //if (zoomlev < 13) {zoomlev = zoomlev + 3;}
	  //showAddress(latlng,zoomlev);
          //getcoverage(latlng.toUrlValue()); 
        //});
 //
	//map.disableDoubleClickZoom();
	map.enableContinuousZoom();
        map.enableScrollWheelZoom();

        var boundaries2 = new GLatLngBounds(new GLatLng(23.15,-127.76), new GLatLng(53.1,-64.75));

        nielsen = new GGroundOverlay("/mb/engineering/maps/images/nielsen3.gif", boundaries2);

      }
    } 

    function createMarker(point, number, text) {
      var stationIcon = new GIcon(G_DEFAULT_ICON);
      stationIcon.image = "/mb/engineering/maps/images/station-yellow.gif";
      markerOptions = { icon:stationIcon };

      marker2 = new GMarker(point, markerOptions);
      marker2.value = number;
      GEvent.addListener(marker2, "click", function() {
          var myHtml = "<div style=\\\"width: 20em\\\">" + text + "</div>";
          map.openInfoWindowHtml(point, myHtml);
      });
      return marker2;
    }

    function onsta(which, lat, lon, caption, cdata) {
      var latlng = new GLatLng(lat, lon);
      StaMarker[which] = createMarker(latlng, which, caption);
      StaLine[which] = new GPolyline([
                new GLatLng(lat,lon),
                marker.getLatLng()
      ], "#000000", 5);
      map.addOverlay(StaMarker[which]);
	map.addOverlay(StaLine[which]);
      //StaMarker.openInfoWindowHtml(cdata);
    }

    function offsta(which) {
      map.removeOverlay(StaMarker[which]);
	map.removeOverlay(StaLine[which]);
    }