    var dtHtml2 = "";
    
    function showCityLimits(pid)
    {
        
        
        map.closeInfoWindow()
        currentPID = pid;
        params = "pid=" + pid ;
        http( "GET" , "AJAX/Public/queryUSBoundary.cfm?" + params , resp_CityLimits );
        
        //dtHtml2 = ""
        //buildDataTable();
        //map.setCenter(map.getCenter(),11);
        
    }

    function showDriveTime(pid, dist)
    {
        
        map.closeInfoWindow()
        params = "pid=" + pid + "&dist=" + dist;
				currentPID = pid;
        http( "GET" , "AJAX/Public/queryUSBoundaryDriveTime.cfm?" + params , resp_DriveTime2 );

        dtHtml2 = ""
        buildDataTable();
        map.clearOverlays();

        getDTHouseHolds2(pid, dist);
        
        
    }
    
    function resp_DriveTime2(obj)
    {
        var numPoints = obj.pid.length;
        var firstPoint;
        var firstPolyPoint;
        var previousPolygon = "0";
        var DriveTimeType = "";
        var CurrentPoint = 0;
				var Allpoints = [];
        
        map.clearOverlays();
   		  
        for (var i = 0; i < numPoints; i++)
        {

           	Allpoints[i] = new GLatLng(obj.latitude[i],obj.longitude[i]);
						
            if (obj.region_polygon[i] == previousPolygon )
            {
            	points[CurrentPoint] = new GLatLng(obj.latitude[i],obj.longitude[i]);
            }            
            else
          	{
	            if (previousPolygon != "0" )
	            {
	            	//alert("Got to a new polygon");
	            	
	        			points[CurrentPoint] = firstPolyPoint;
				        var polygon = new GPolygon(points, "#000000", 2, 1, "#0000ff", 0.25 );
				        map.addOverlay(polygon);
				        
	        			CurrentPoint = 0;
								var points = [];
	            	points[CurrentPoint] = new GLatLng(obj.latitude[i],obj.longitude[i]);
            	
              }
              else
            	{
	            	//alert("Got to the first polygon");

								var points = [];
	            	points[CurrentPoint] = new GLatLng(obj.latitude[i],obj.longitude[i]);
            	}

              firstPolyPoint = new GLatLng(obj.latitude[i],obj.longitude[i]);
              DriveTimeType  = obj.type[i];
              
          	}
						
						CurrentPoint    = CurrentPoint+1;
						previousPolygon = obj.region_polygon[i];
          	
          	
        }
         
        if (numPoints > 0 )
        {

  			points[CurrentPoint] = firstPolyPoint;
        var polygon = new GPolygon(points, "#000000", 2, 1, "#0000ff", 0.25 );
        map.addOverlay(polygon);
        var dtBounds = getMBR (Allpoints);
        //getDTHouseHolds2(dtBounds);

        }
        else
      	{
      		alert("No Drive Time was included");
      	}

        
        //document.body.style.cursor = "default";
    }
    

    function resp_CityLimits(obj)
    {
        var numPoints = obj.pid.length;
        var showCity = obj.show_city_limits_counts;
        var firstPoint;
        var firstPolyPoint;
        var previousPolygon = "0";
        var CurrentPoint = 0;
	    var Allpoints = [];

        map.clearOverlays();
        
        for (var i = 0; i < numPoints; i++)
        {

           	Allpoints[i] = new GLatLng(obj.latitude[i],obj.longitude[i]);
						
            if (obj.region_polygon[i] == previousPolygon )
            {
            	points[CurrentPoint] = new GLatLng(obj.latitude[i],obj.longitude[i]);
            }            
            else
          	{
	            if (previousPolygon != "0" )
	            {
	            	//alert("Got to a new polygon");
	            	
	        			points[CurrentPoint] = firstPolyPoint;
				        var polygon = new GPolygon(points, "#000000", 0, 1, "#0000ff", 0.30 );
				        map.addOverlay(polygon);
				        
	        			CurrentPoint = 0;
								var points = [];
	            	points[CurrentPoint] = new GLatLng(obj.latitude[i],obj.longitude[i]);
            	
              }
              else
            	{
	            	//alert("Got to the first polygon");

								var points = [];
	            	points[CurrentPoint] = new GLatLng(obj.latitude[i],obj.longitude[i]);
            	}

              firstPolyPoint = new GLatLng(obj.latitude[i],obj.longitude[i]);
              
          	}
						
						CurrentPoint    = CurrentPoint+1;
						previousPolygon = obj.region_polygon[i];
          	
          	
        }
         
  		if (showCity[0] == "1")
  		{
  			//alert("Showing City Data");
	        var dtBounds = getMBR (Allpoints);
	        getCLHouseHolds(dtBounds);
  		}
  		else
  		{
        	clearDataTable();
  		}
  		
		points[CurrentPoint] = firstPolyPoint;
        var polygon = new GPolygon(points, "#000000", 0, 1, "#0000ff", 0.30 );
        map.addOverlay(polygon);

        //map.setCenter(center.getPoint(),12);
        
        
        //document.body.style.cursor = "default";
    }
    

    function getCLHouseHolds(bounds)
    {
        var nec = bounds.getNorthEast();
        var swc = bounds.getSouthWest();
        
        var minLat = nec.lat();
        var maxLng = nec.lng();
        var maxLat = swc.lat();
        var minLng = swc.lng();
        params = "minLat=" + minLat + "&minLng=" + minLng + "&maxLat=" + maxLat + "&maxLng=" + maxLng + "&pid=" + currentPID ;
        http( "GET" , "AJAX/Public/queryBoundaryBlocks.cfm?" + params , resp_CLBlocks );
        
    }
    
    function resp_CLBlocks(obj)
    {

        dtHtml = "<tr><td nowrap='nowrap'>Households in <br>"+dtPolyType+"</td><td align='right'>" + addCommas(obj.hh_00) + "</td><td align='right'>" + addCommas(obj.hh_cy) + "</td><td align='right'>" + addCommas(obj.hh_ch) + "</td></tr>"
        dtHtml += "<tr><td nowrap='nowrap'>Population in <br>"+dtPolyType+"</td><td align='right'>" + addCommas(obj.pop_00) + "</td><td align='right'>" + addCommas(obj.pop_cy) + "</td><td align='right'>" + addCommas(obj.pop_ch) + "</td></tr>"
        
        buildDataTable();
    }

    function getDTHouseHolds2(pid, type)
    {
    		var myPID = pid;
    		var myType = type;
        params = "pid=" + myPID + "&type=" + myType;
        http( "GET" , "AJAX/Public/queryBoundaryDTBlocks2.cfm?" + params , resp_DTBlocks2 );
    }
        
    function resp_DTBlocks2(obj)
    {

        dtHtml = "<tr><td nowrap='nowrap'>Households in <br>" + obj.type + "</td><td align='right'>" + addCommas(obj.hh_00) + "</td><td align='right'>" + addCommas(obj.hh_cy) + "</td><td align='right'>" + addCommas(obj.hh_ch) + "</td></tr>"
        dtHtml += "<tr><td nowrap='nowrap'>Population in <br>" + obj.type + "</td><td align='right'>" + addCommas(obj.pop_00) + "</td><td align='right'>" + addCommas(obj.pop_cy) + "</td><td align='right'>" + addCommas(obj.pop_ch) + "</td></tr>"
        
        buildDataTable();
    		//alert("got here 3");
    }
    
    function buildDataTable()
    {
        var mydataTable = document.getElementById("dataTable");
        
        mydataTable.innerHTML = tableHeadHtml + dtHtml + dtHtml2 + "</table>";
        
    }

    function clearDataTable()
    {
        var mydataTable = document.getElementById("dataTable");
        
        mydataTable.innerHTML = "";
        
    }

    function getMBR (points)
    {
     var minx = 0;
     var miny = 0;
     var maxx = 0;
     var maxy = 0;
    
     if ( points.length < 4 )
     {
      return ( GLatLngBounds(new GLatlng(minx,miny), new GLatlng(maxx,maxy)) ) ;
     }
    
     minx = points[0].lat() ;
     miny = points[0].lng() ;
     maxx = points[0].lat() ;
     maxy = points[0].lng() ;
    
     for(var i = 1; i < points.length ; i++ )
     {
      if ( points[i].lat() > maxx )
      {
       maxx = points[i].lat() ;
      }
      if ( points[i].lat() < minx )
      {
       minx = points[i].lat() ;
      }
      if ( points[i].lng() > maxy )
      {
       maxy = points[i].lng() ;
      }
      if ( points[i].lng() < miny )
      {
       miny = points[i].lng() ;
      }
     }
     
     if (miny < polyMinLng || maxy > polyMaxLng || minx < polyMinLat || maxx > polyMaxLat)
     {
        polyMinLng = miny - 0.01;
        polyMaxLng = maxy + 0.01;
        polyMinLat = minx - 0.01;
        polyMaxLat = maxx + 0.01;
        reQueryData = true;
     }
     
     return ( new GLatLngBounds(new GLatLng(maxx,miny), new GLatLng(minx,maxy)) ) ;
    }

    function addCommas(nStr)
    {
    	nStr += '';
    	x = nStr.split('.');
    	x1 = x[0];
    	x2 = x.length > 1 ? '.' + x[1] : '';
    	var rgx = /(\d+)(\d{3})/;
    	while (rgx.test(x1)) {
    		x1 = x1.replace(rgx, '$1' + ',' + '$2');
    	}
    	return x1 + x2;
    }
    



			


// For Notable Blocks

    function PositionOrZoomChange()
    {
        var bounds = map.getBounds();
        var nec = bounds.getNorthEast();
        var swc = bounds.getSouthWest();
        var zoomLevel = map.getZoom();
        
        winZoom = zoomLevel;
        winMaxLat = nec.lat();
        winMaxLng = nec.lng();
        winMinLat = swc.lat()
        winMinLng = swc.lng()
            
    }

    function showMarker()
    {
        with (this) IsVisible=true;
        with (this) marker.show();        
    }
    
    function hideMarker()
    {
        with (this) IsVisible=false;
        with (this) marker.hide();        
    }
    
    function change()
    {
        var mychange;
        with (this) mychange = hh_CY - hh_00;
    }
    
    

    function ShowNotableBlocks(mypid)
    {
        if (winZoom < 11)
        {
            alert ("Only notable blocks within close proximity to the town are shown.");
        }

            document.body.style.cursor = "wait";
            
            for(var n = 0 ; n < gmarkers.length ; n++)
             {
              map.removeOverlay( gmarkers[n] ) ;
              
             }
            
            document.getElementById("legend").style.display = "block";
            //map.closeInfoWindow()
            gmarkers = [] ;
            markerPins = [];

            // start: added on 2008-01-04
            i=0;
            // end: added on 2008-01-04
              
            params = "minLat=" + winMinLat + "&minLng=" + winMinLng + "&maxLat=" + winMaxLat + "&maxLng=" + winMaxLng + "&pid=" + mypid ;
            http( "GET" , "AJAX/Public/queryTopBlocks.cfm?" + params , resp_TopBlocks );

    }
    
    function resp_TopBlocks(obj)
    {
        var numMarkers = obj.block.length;
        var blocks = obj.block;
        var blockLats  = obj.lat;
        var blockLngs  = obj.lng;
        var blockHH_00 = obj.hh_00;
        var blockHH_CY = obj.hh_cy;
        var blockPOP_00 = obj.pop_00;
        var blockPOP_CY = obj.pop_cy;
        var rank       = obj.abschangerank;
        var Icon;
        
        for ( var i = 0 ; i < numMarkers ; i++ )
        {
            var changeHH = blockHH_CY[i] - blockHH_00[i];
            var changePOP = blockPOP_CY[i] - blockPOP_00[i];
            
            if  ((changeHH > 50) || (blockHH_00[i] == 0 && changeHH >= 10))
                Icon = 3;
            else if  (changeHH > 5)
                Icon = 1;
            else if  (changeHH <= 5 && changeHH >= -50)
                Icon = 4;
            else
                Icon = 2;
              
            var point = new GLatLng( blockLats[i], blockLngs[i]);
            var myHTML = "";
            myHTML += "Block: " + blocks[i] + "<br>";
            myHTML += "Rank: " + rank[i] + "<br><br>";
            myHTML += "<table width=180 border=1 cellpadding=1 cellspacing=1>"
            myHTML += "<tr><td align=left bgcolor=#c0c0c0>Vintage </td><td align=right bgcolor=#c0c0c0>HH</td><td align=right bgcolor=#c0c0c0>POP</td></tr>";
            myHTML += "<tr><td align=left>2000 </td><td align=right>" + addCommas(blockHH_00[i]) + "</td><td align=right>"+ addCommas(blockPOP_00[i]) +"</td></tr>";
            myHTML += "<tr><td align=left>Current </td><td align=right>" + addCommas(blockHH_CY[i]) + "</td><td align=right>"+ addCommas(blockPOP_CY[i]) +"</td></tr>";
            myHTML += "<tr><td align=left>Change </td><td align=right>" + addCommas(changeHH) + "</td><td align=right>"+ addCommas(changePOP) +"</td></tr>";
            myHTML += "</table>";
            
            var marker = createMarker(point,blocks[i],myHTML, Icon, rank[i],blockHH_00[i],blockHH_CY[i]);
            map.addOverlay(marker);      
              
        }
        
        
        
        document.body.style.cursor = "default";
        
    }
    
    // A function to create the marker and set up the event window
    function createMarker(point,name,html,inputicon,Rank,hh_00,hh_CY) {
        var Growth = "1";
        var Decline = "2";
        var Exceptional = "3";
        var NoChange = "4";
    
        picon.iconSize = new GSize(15, 25);
        
        var t = 1;
        var t2 = "marker";
        if (Rank > 99) {
          t  = "";
          t2 = "blank";
        }
        else {
          t  = Rank;
          t2 = "marker";
        }
    
    
        if (inputicon == Decline) {
          picon.image = 'http://www.gadberry.info/maps/MapIcons/largeTDBlueIcons/'+t2+t+'.png';
        }
        else if (inputicon == Growth) {
          picon.image = 'http://www.gadberry.info/maps/MapIcons/largeTDYellowIcons/'+t2+t+'.png';
        }
        else if (inputicon == Exceptional) {
          picon.image = 'http://www.gadberry.info/maps/MapIcons/largeTDRedIcons/'+t2+t+'.png';
        }
        else if (inputicon == NoChange) {
          picon.image = 'http://www.gadberry.info/maps/MapIcons/largeTDGreenIcons/'+t2+t+'.png';
        }
        else {
          picon.image = 'http://www.gadberry.info/maps/MapIcons/largeTDWhiteIcons/'+t2+t+'.png';
        }
        
        var marker = new GMarker(point, picon);
        GEvent.addListener(marker, "click", function() {
          marker.openInfoWindowHtml(html);
        });
        // save the info we need to use later for the sidebar
        gmarkers[i] = marker;
        //htmls[i] = html;
        markerPins[i] = new MarkerPin(marker,name,html,picon,Rank,hh_00,hh_CY);
          
        i++;
        return marker;
      }

    function MarkerPin(marker,name,html,icon,Rank,hh_00,hh_CY)
    {
        this.marker=marker;
        this.point=marker.getPoint();
        this.name=name;
        this.html=html;
        this.icon=icon;
        this.Rank=Rank;
        this.hh_00=hh_00;
        this.hh_CY=hh_CY;
        this.change=change;
        this.IsVisible=true;
        this.showMarker=showMarker;
        this.hideMarker=hideMarker;
    }
      
