
    // Alabama Broadband Interactive Mapping, Version 3.1

    var gmap;
    var dynamicMapService;
	var dynamap;
	var dynamap2;
	var dynamicMapService2;
	var agsTypeDyn;
	var BroadbandLayers = [];
    var strdefaultInput;
    var initialBBLyr;
    var currentBBMap;
    var gOverlays = null;
    var mapOptions = null;
    var currentLat = null;
    var currentLon = null;
	var geocoder;
	var geocodeResults = [];
	var infoWindow;
	var numCurrentQuestion = 0;
	var gmarkers;

    dojo.require("dojo.parser");
    dojo.require("dijit.form.Form");
    dojo.require("dijit.form.Button");
    dojo.require("dijit.Menu");
    dojo.require("dijit.Dialog");
    dojo.require("dijit.form.CheckBox");
	dojo.require("dijit.form.Select");
    dojo.require("dijit.form.ValidationTextBox");
    dojo.require("dijit.form.SimpleTextarea");

    dojo.addOnLoad(function(){

       strDefaultInput = dojo.byId("address").value
      
       dojo.fadeOut({
                      node:"preloader",
                      onEnd: function(){
                      dojo.style("preloader", "display", "none"); }
                    }).play();

       initialize()  

    });
    

    function initialize() {
      
      var uri = window.location;
      var queryParams = dojo.queryToObject(window.location.search.slice(1));

      if (window.location.search) {
         initialCenter = new google.maps.LatLng(queryParams["lat"],queryParams["lng"]);
         initialZoom = parseInt(queryParams["zm"])
         initialBBLyr = queryParams["ly"] }
       else {
         initialCenter = fullMapCenter;
         initialZoom = fullMapZoom
         initialBBLyr = "BroadbandProviderCnt"
      }
	  
      currentBBMap = initialBBLyr
	  var myOptions = { mapTypeControl: false,zoom: initialZoom,center: initialCenter, overviewMapControl: true,
		mapTypeId: google.maps.MapTypeId.ROADMAP,  
		zoomControlOptions: { style: google.maps.ZoomControlStyle.DEFAULT, position: google.maps.ControlPosition.RIGHT_CENTER },
		overviewMapControlOptions: { opened: true },		
		panControlOptions: { position: google.maps.ControlPosition.RIGHT_CENTER  }};
		
	  gmap = new google.maps.Map(document.getElementById("gmap"), myOptions);  
	  
	  loadMaps()
	  
	    dynamap = new gmaps.ags.MapOverlay(mapService); 
	    google.maps.event.addListenerOnce(dynamap.getMapService(), 'load', function(){      
		dynamicMapService = dynamap.getMapService();           
		dynamap.setMap(gmap);    
		});
		
		dynamap2 = new gmaps.ags.MapOverlay(mapService); 
	    google.maps.event.addListenerOnce(dynamap2.getMapService(), 'load', function(){      
			dynamicMapService2 = dynamap2.getMapService(); 
			agsTypeDyn = new gmaps.ags.MapType(dynamicMapService2, {name: "dynBB"}); 
		});
	  
	google.maps.event.addListener(gmap, 'click', function(event) {queryLocation(event.latLng);});
	google.maps.event.addListener(gmap, 'zoom_changed', function(event) {onZoomEnd()});

	gmarkers = new MarkerManager(gmap);
	geocoder = new google.maps.Geocoder();
	infoWindow = new google.maps.InfoWindow(); 

	loadBroadbandMapList()
	loadCountiesList()
	loadTechnologyList()
	populateStateName()

	setBroadbandLegend(initialBBLyr);

	dojo.connect(dijit.byId("LocationFeedbackForm"), "onSubmit","postLocationFeedback")
	 	  
	streetOverlay()  
		
	
    }
	
	
	function  populateStateName() {
	
		for (var i=1; i<5; i++) {
		dojo.byId("SurveyState" + i).innerHTML = stateName.toUpperCase()
	}
	
	}

	
function loadMaps() {
	
	var url;
	
	dojo.forEach(jsonBroadbandMaps, function (item) {
		if (item.lyrid !== "99") {
			url = tileService + "/" + item.lyrkey + "/MapServer";
			var svc = new gmaps.ags.MapService(url); 		
			google.maps.event.addListenerOnce(svc, 'load', function() { 		
				var tileLayer = new gmaps.ags.TileLayer(svc); 
				var agsType = new gmaps.ags.MapType([tileLayer], {name: item.lyrkey});              
				BroadbandLayers.push(agsType);
				if (item.lyrkey == currentBBMap) {
					gmap.overlayMapTypes.setAt(0, agsType); 
				}    
			});
		}
	});	
}
	
	
	function streetOverlay() {
	
	var tileHybridLabels = new google.maps.ImageMapType({ 
     getTileUrl: function(ll, z) { 
          var X = ll.x % (1 << z);  // wrap 
          return "http://mt0.google.com/vt/v=apt.116&hl=en-US&x=" 
          + X + "&y=" + ll.y + "&z=" + z + "&s=G&lyrs=h"; 
     }, 
     tileSize: new google.maps.Size(256, 256), 
     isPng: true, 
     maxZoom: 20, 
     name: "hybridLabels"
});

gmap.overlayMapTypes.setAt(1, tileHybridLabels); 
	
	}
	
	
	function toggleDynLayer(layer,option) {
	
		dynamicMapService.getLayer(layer).visible = option; 
		dynamap.refresh() 
	
	}
	


   function fullExtent() {

     gmap.setCenter(fullMapCenter)
	 gmap.setZoom(fullMapZoom);
	 dojo.byId("lstMapTools").blur();

   }




   function returnMapURL(option) {

     var cen = gmap.getCenter()
     var zoom = gmap.getZoom()

     strURL = siteRootURL + "map" + option + ".htm"
     strURL += "?lat=" + cen.lat() + "&lng=" + cen.lng() + "&zm=" + zoom + "&ly=" + currentBBMap

     return strURL

   }



   function clearDefaultInput() {

     var objInput = dojo.byId("address")

     if (objInput.value == strDefaultInput) {
       objInput.value = ""
       dojo.addClass(objInput, "active")
     }

   }



	function setMapType(opt) {

		eval("gmap.setMapTypeId(google.maps.MapTypeId." + opt + ")");  
		dojo.byId("lstMapTypes").blur();

	}


  function onZoomEnd(oldzoom,newzoom) {
	
	var newzoom = gmap.getZoom()
    if (newzoom < 15) {
      setTiledMap() }
   if (newzoom >= 15) { 
       setDynamicMap() }

}

	function setDynamicMap() {

	 clearDynamicBroadbandMaps() 
			
		dynamicMapService2.getLayer(currentBBMap).visible = true; 
        gmap.overlayMapTypes.setAt(0, agsTypeDyn); 

	}
	
	
	function setTiledMap() {
	
	 clearDynamicBroadbandMaps() 
		dojo.forEach(BroadbandLayers, function(item) {
	     if (item.name == currentBBMap) {   
		    gmap.overlayMapTypes.setAt(0, item); 
		 }
	   });
	
	}
	

   function setBroadbandMap(option) {

    var zoomLevel = gmap.getZoom()
    currentBBMap = option
    clearTiledMaps() 
	
	if (option == 'BroadbandCoverage') {
		addFeedback() }
	else {
		gmarkers.clearMarkers()
        gmarkers.refresh() }

    if (zoomLevel <= 15) {
        if (option != "none") {
			setTiledMap()  
		}
    }
  else {
        setDynamicMap()
	}

     setBroadbandLegend(option)
     dojo.byId("lstBroadbandMaps").blur()
    
   }

function clearTiledMaps() {
 
  gmap.overlayMapTypes.setAt(0, null); 

}



function clearDynamicBroadbandMaps() {

	dojo.forEach(jsonBroadbandMaps, function(item) {
		if (item.lyrid != "99") {
		 if (dynamicMapService2.getLayer(item.lyrkey)) {
			dynamicMapService2.getLayer(item.lyrkey).visible = false; } }
        });

}
  

function setBroadbandLegend(option) {
  
	var mapDesc 
	dojo.forEach(jsonBroadbandMaps, function(item){
	  if (item.lyrkey == option) {
	    mapDesc  = item
	  }
	});
	
    var mapLegend = jsonLegends[mapDesc.lgnd]
	
    var objContainer = dojo.byId("LegendArea")
    var strHTML = ""

   dojo.style(objContainer, {visibility:'visible'});
   dijit.byId("lstBroadbandMaps").attr("label", mapDesc.name)
   dojo.byId("lblMapDesc").innerHTML = mapDesc.desc  
     
   dojo.forEach(mapLegend, function(item) {
       strHTML += "<div class='CB'><div class=LegendPoly style='background-color:" + item.clr + "'></div><div class=LegendLabel>" + item.label + "</div></div>"
     });
	 
	if (option == 'BroadbandCoverage'){
		strHTML += "<div class='CB'><div class='spCovStatus1 LegendLabel'>A User reports service is available at this location</div></div>"
		strHTML += "<div class='CB'><div class='spCovStatus0 LegendLabel'>A User reports NO service is available at this location</div></div>"
	}

	if (option != 'none') {
       objContainer.innerHTML = strHTML }
    else {
       dojo.style(objContainer, {visibility:'hidden'}); }
  
   }


   function loadCountiesList() {

     var objCounties = dojo.byId("lstCounties")
     objCounties.options.add(new Option("Select a County", "none", false, false))
     dojo.forEach(jsonCounties,function(item) {objCounties.options.add(new Option(item.name + " County", item.name, false, false));});

   }

   
   function loadTechnologyList() {

     var objTechnologies = dijit.byId("lstTechnology")
	 objTechnologies.addOption( { label: "I don't know my Technology", value: "0"} );
     dojo.forEach(jsonTechnologies,function(item) {objTechnologies.addOption({label:item.name, value:item.code});});

   }

      function loadBroadbandMapList() {

     var menu = dijit.byId("mnuBroadbandMaps")

	 dojo.forEach(jsonBroadbandMaps, function(item) {
	   var mItem = new dijit.MenuItem({label:item.name, title:item.desc});
	   dojo.connect(mItem, "onClick",  function(){setBroadbandMap(item.lyrkey)});
	   menu.addChild(mItem);
	   });
	 
   }


   function openDialog(strName, strTitle, strContent) {

     var objDialog = dijit.byId(strName)
  
     objDialog.title = strTitle
     objDialog.attr('title', strTitle);
     
     if (strContent != null) {
        objDialog.attr('content', strContent); }

     objDialog.show()
  
     dojo.byId(strName).blur()
	 
   }


 function processAddress() {
  
        var address = document.getElementById("address").value
        address += " " + stateName
		geocodeResults = []
        
		geocoder.geocode( { 'address': address}, function(results, status) { 
				if (status == google.maps.GeocoderStatus.OK) { 
			
					if (results.length > 1) { 
						geocodeResults = results
						var strContent = "<p>Your search returned more than one result.  Choose from the list to map the result until you have found the best match or you can try your search again. Click Close to close the box.</p>"
						strContent += "<ul class=none>"
									
						for (var i=0; i<results.length; i++) {
							strContent += "<li>"+(i+1)+": <a href=\"javascript:placeAddress(" + i + ")\">" + results[i].formatted_address + "<\/a></li>";
						}
						strContent += "</ul><p class=footer><button dojoType='dijit.form.Button'  onclick=\"dijit.byId('dialogDefault').hide()\">Close</button></p>"
						openDialog("dialogDefault", "Search Results", strContent)
					}
					else {
						geocodeResults = results
						placeAddress(0)
					}				
				} else {         
						openDialog("dialogDefault","Find Address or Location Error", status) }     
		}); 
		
	}	
		
   function placeAddress(index) {

        var str = "<div class='InfoHeader'>Address Search Results</div><div class=infoWin>"
		var point = geocodeResults[index].geometry.location;
		var strAddress = geocodeResults[index].formatted_address
		var bounds = geocodeResults[index].geometry.viewport;
		
        str += "<h1>Search Result: " + strAddress + "</h1>"
        str += "<p>This general location is the result of your search criteria.</p>"
        str += "<p>If this is not the correct location, please narrow your search by including additional information (i.e. an associated city name, zip code, or county name).  </p>"
        str += "<p>Click on the map for a list of available broadband providers.</p>"
        str += "</div>"
		
		gmap.setCenter(point);
		gmap.fitBounds(bounds)
		
		infoWindow.setContent(str)
		infoWindow.setPosition(point)
		infoWindow.open(gmap);           
   }


   function queryLocation(point) {
  
    currentLat = point.lat()
	currentLon = point.lng()
	
    var xmin = point.lng() - 0.0008197
    var ymin = point.lat()- 0.0006821
	var xmax = point.lng() + 0.0008197
	var ymax = point.lat()+ 0.0006821

	var layer = new gmaps.ags.Layer(mapService + '/0'); 
	var envelope = xmin.toString() + "," + ymin.toString() + "," + xmax.toString() + "," + ymax.toString(); 

	var params = new Object(); 
    params.geometry = envelope; 
    params.geometryType = "esriGeometryEnvelope"; 
    params.spatialRel = "esriSpatialRelIntersects"; 
    params.returnGeometry = false; 
	params.outFields = ["DBAName", "HyperLink"];
	params.inSR = 4326
				
	layer.query(params, function(results) {addResults(results,point,"none");});   
 	}

   


function mapCoordinate() {

  numLatitude = dojo.byId("txtLatitude").value
  numLongitude = dojo.byId("txtLongitude").value

  if (numLatitude < 29 || numLatitude > 51 || numLongitude < -131 || numLongitude > -70) {
        alert ("The coordinates you have entered appear to be incorrect.  ") }
    else {
		var str = "<div class='InfoHeader'>Location Search Results</div><div class=infoWin>"
		var point = new google.maps.LatLng(numLatitude, numLongitude );
		
		str += "<h1>Latitude: " + numLatitude  + ", Longitude: " + numLongitude + "</h1>"
        str += "<p>This is the location of these coordinates.</p>"
        str += "<p>Click on the map for a list of available broadband providers in this area.</p>"
		
		gmap.setCenter(point);
		gmap.setZoom(13);
		
		infoWindow.setContent(str)
		infoWindow.setPosition(point)
		infoWindow.open(gmap);  
		
        dijit.byId('dialogCoord').hide()
  }

}

function initializeProviderList() {

	var objProviders = dijit.byId("lstProviders")
	objProviders.removeOption(objProviders.getOptions());
	objProviders.addOption( { label: "My Provider is not listed", value: "other"} );
	objProviders.addOption( { label: "I don't know my Provider`s name", value: "unknown"} );

}


function addResults(response, point, strAddress){

  var providers = [];
  var str = "<div class='InfoHeader'>Broadband Provider Information</div><div class=infoWin>"
  
  initializeProviderList()
             
          if (response && response.features.length > 0) {
		  
			 var objProviders = dijit.byId("lstProviders")
             var attr = response.features[0].attributes;

             if (strAddress !== 'none') {
             str += "<div class='InfoHeader'>" + strAddress + "</div>"  }

             arrSeeds = returnRandomList(response.features.length)

             str +="<p>Below is a list of providers in this general area.  The number of providers may differ from that indicated by the shading on the map because we include additional providers who may be willing to extend service to this area.  We encourage users to contact these providers directly for specific coverage information.  Note: The information shown applies to this general area and not to a specific address or location.</p>"
             str += "<ul class=info>"

             for(i=0; i<response.features.length; i++) {
                 var attrProviders = response.features[arrSeeds[i]].attributes;
                 var strProvider =  attrProviders.DBAName;
                 
                 if (! checkArray(strProvider,providers)) {
                   providers.push(strProvider)
				   objProviders.addOption( { label: strProvider, value: strProvider} );
                   var strURL = attrProviders.Hyperlink;
                   str += "<li class='providerInfo'>" + strProvider

                   if (strURL != null && strURL != '') {
                      str += " (<a target=_blank href='http://" + strURL + "'>Web Site</a>)" }
                   str += "</li>" 
                 }
             }

             str += "</ul>"
            
           } 
          else {
         
             str += "<p>There is currently no broadband coverage reported at this location. However, broadband service providers have different construction policies and may extend coverage beyond the highlighted areas on this map. " 
             str += "Providers may also have upgraded capacity or expanded service into new areas since our last survey.<p>"
             str += "<p>We recommend contacting the provider(s) shown for the nearest highlighted area/road  for the most current coverage information.</p>"

        } 
          
         str +="<p><span class='txBold'>Satellite service may also be available here.  <a href=\"javascript:openDialog('dialogSatellite','Satellite Coverage')\">Click here for more information</a></p>"
		  
         if (currentBBMap.indexOf("Speed") != -1) {
                 str += "<p class=note>Note:  The speed shown for this area is the Maximum Advertised Speed reported by at least one of the providers listed and not all of the providers will be able to offer service at this speed. For specific information regarding speed and/or coverage at a particular location, please contact the provider(s) directly.</p>" } 
         //if (attr.InExchange == -9) {
               //str += "<p class=note>Note:  Provider data for this location contains anomalies and is currently under investigation. Coverage info will be updated if/when verified.</p>"  } 
		 str += "</div>"
         str += "<p class=section><a href=\"javascript:restartSurvey();openDialog('dialogLocationFeedback','Coverage Feedback')\">Provide Coverage and Speed Feedback</a> | "
         str += "<a href=\"javascript:infoWindow.close(gmap);\">Close Window</a></p>"
          

		  infoWindow.setContent(str)
		  infoWindow.setPosition(point)
		  infoWindow.open(gmap);

}


function findCounty() {

     objCountyName = dojo.byId("lstCounties")
     strCountyName = objCountyName.options[objCountyName.selectedIndex].value

     if (strCountyName != 'none') {
	  var layer = dynamicMapService.getLayer("Counties")
	  var params = {      
		returnGeometry: true,      
		where: "NAME10 = '" + strCountyName + "'",      
		outFields: ["NAME10"]    
	  };    
	  layer.query(params, processResultSet); 
	 } 
}

function processResultSet(rs) {

	var fs = rs.features; 
	var cnty = fs[0].geometry[0]
	var latlngbounds = new google.maps.LatLngBounds( );
	
	var paths = cnty.getPaths();
	   for (var j = 0, jc = paths.getLength(); j < jc; j++) {
                path = paths.getAt(j);
                for (var k = 0, kc = path.getLength(); k < kc; k++) {
					latlngbounds.extend( path.getAt(k));
                }
              }

	gmap.fitBounds(latlngbounds)
	
  }


   function formatSpeed(speed) {

     speed = parseInt(speed)
 
     if (speed < 1000) {
       return speed + " kbps" }
     else {
       return (speed / 1000) + " mpbs" }
     
   }     




function postLocationFeedback(e) {

  e.preventDefault();

  if (dijit.byId("LocationFeedbackForm").isValid()) {
      var formdata = harvestFeedback()
      var xhrArgs = {
         content: formdata,
         url: siteRootURL + "Comments.asmx/AddCoverageFeedback",
         handleAs: "text",
         load: function(data){feedbackComplete() },
         error: function(error) { alert("Error :" + error.description); }
         } 
        var deferred = dojo.xhrPost(xhrArgs); 
   } 
  else {
     alert("Some fields are incorrect.  The Zip Code must be 5 digits and the email address must look something like this: xxx@xxx.xxx") }
     
}


function harvestFeedback() {

  var frm = dijit.byId("LocationFeedbackForm")
  var feedbackContent = frm.attr('value')

  feedbackContent["CommentState"] = stateAbbvr
  feedbackContent["Latitude"] = currentLat
  feedbackContent["Longitude"] = currentLon

 return feedbackContent

}




function feedbackComplete() {

  dijit.byId("dialogLocationFeedback").hide() 
  dojo.byId("txtLocationFeedback").value = ''
  
	if (currentBBMap == "BroadbandCoverage" && dojo.byId('rbCoverageStatus2').checked) {
		addFeedback() }

  strContent = "<p class='survey'>Thank you for your feedback on the " + stateName + " Broadband map.</p>"
  strContent += "<p>Your feedback is appreciated and helps us to improve the quality of the data and your online experience.</p>"

  if (dojo.byId('rbLocationStatus2').checked) {
		strContent +="<p>We understand you are not at the location upon which you just reported.  <span class='txtAlert'>Would you be willing to take a speed test and/or submit feedback for your "
		strContent +="current location as well?</span> If so, please return to the map, select your current location, and then select YES when asked if you are currently submitting feedback from the map location you selected.</p>"
	}
  
  strContent += "<button dojoType='dijit.form.Button'  id='FCclose'  onclick=\"dijit.byId('dialogDefault').hide()\">Continue using the Site</button>"
 
  openDialog("dialogDefault", "Feedback Submitted", strContent)

}


function returnRandomList(numLength) {

var arrList = [];

for(i=0; i<numLength; i++) { 
   arrList.push(i) 
}

   var top = arrList.length;

   if(top) while(--top) { 
        current = Math.floor(Math.random() * (top + 1)); 
        tmp = arrList[current]; 
        arrList[current] = arrList[top]; 
        arrList[top] = tmp; 
    }

return arrList

}

    function checkArray(val,arr) {

        for (var i=0, il=arr.length; i<il; i++) {
            if (arr[i] == val) {return true;}
        }

        return false;
    }
	
	
function changePanel(source) {

var panelID
var frm = dijit.byId("LocationFeedbackForm")
var panelID = source.id.substring(8,9)

switch (panelID)
{
case  "1":
	panelID = (frm.attr('value').CoverageStatus == '1')?'7':'2';
	break
case  "2":
	panelID = (frm.attr('value').LocationStatus == 'Y')?'3':'4';
	break
case  "3":
	panelID = (frm.attr('value').SubscribeBB == 'Y')?'5':'4';
	break
case  "4":
	panelID = "8"
	break
case  "5":
	panelID = (frm.attr('value').TakeSpeedTest == 'Y')?'6':'7';
	break
case  "8":
	var strValidationMessage = ""
	if (!dijit.byId("txtEmail").isValid()) {
		strValidationMessage += "<li class='providerInfo'>The Email box must contain a valid email address.</li>" }
	if (!dijit.byId("txtFirstName").isValid()) {
		strValidationMessage += "<li class='providerInfo'>A First Name is required.</li>" }
	if (!dijit.byId("txtLastName").isValid()) {
		strValidationMessage += "<li class='providerInfo'>A Last Name is required.</li>" }
		
	if (strValidationMessage == "") {
		panelID = (frm.attr('value').CoverageStatus == '1')?'10':'9'; }
		else {
		strValidationMessage = "<ul>" + strValidationMessage + "</ul>"
		strValidationMessage += "<button dojoType='dijit.form.Button'  id='FCclose'  onclick=\"dijit.byId('dialogDefault').hide()\">Return to the Survey</button>"
		openDialog("dialogDefault", "Incorrect values", strValidationMessage)
		return false;
		}
	break
default:
	panelID = parseInt(panelID) + 1
	break
}

showPanel(panelID)

}


function showPanel (panelID) {

	  for (var i=1, il=10; i<il; i++) {
            dojo.byId("SurveyPanel" + i).className = "hide"
        }

	numCurrentQuestion += 1	 
	dojo.byId("SurveyPanel" + panelID).className = "show"
	dojo.byId("numPanel" + panelID).innerHTML = numCurrentQuestion + ". "

}


function activatePanelBtn (panelID) {

dijit.byId("btnPanel" + panelID).setAttribute('disabled', false);

}


function restartSurvey () {

	  for (var i=1, il=11; i<il; i++) {
            dojo.byId("SurveyPanel" + i).className = "hide"
        }
	numCurrentQuestion = 0
	showPanel("1")
	
	frm = dojo.byId("LocationFeedbackForm")

	var ele = frm.elements
	dojo.forEach(ele, function(item) {
		switch (item.type)  
			{  
			case "text": 
			case "textarea":
				if (item.name.indexOf('spd') > 0) {
					item.value = "0" }
				 else {
					item.value = ""; }
				break;  
			case "checkbox": 
			case "radio": 
				dijit.byId(item.id).attr('checked',false)
			case "select-one":
				item.selectedIndex = 0
				//dijit.byId( 'my_select' ).attr( 'value', String( 5 ) );
			default:  
				break;  
			} 
	});
	
	dijit.byId("lstTechnology").attr('value',"0")
	dijit.byId("lstProviders").attr('value',"other")
		
	for (var i=1, il=7; i<il; i++) {
		dijit.byId("btnPanel" + i).attr('disabled',true)
	}
	
}


function cancelSurvey() {

dijit.byId('dialogLocationFeedback').hide()	

}


function addFeedback() {

	dojo.xhrGet({
		url : siteRootURL + "getFeedback.ashx?s=" + stateAbbvr,
		handleAs : "json",
		load : function(response, ioArgs) {
			createMarkers(response)
			return response;
		},
		error : function(response, ioArgs) {
			alert("Feedback Error: " + response)
			return response;
		}
});

}


function createMarkers (response){

gmarkers.clearMarkers()

	if (response.mkrs.length > 0) {
		var markers = [];   
		dojo.forEach(response.mkrs,function(item) {markers.push(
			marker = new google.maps.Marker({   
			position: new google.maps.LatLng(item.lt, item.ln),
			map:gmap,
			icon: 'images/CovIcon' + item.cv + '.png',
			html:returnFeedbackHTML(item.cv,item.dn,item.up,item.dt)
		}));
				
			google.maps.event.addListener(marker, 'click', function () {  
			infoWindow.setContent(this.html);  
			infoWindow.open(gmap, this);  
		});  
		});
				
		gmarkers.addMarkers(markers, 0);   
		gmarkers.refresh();  
	}

}

function returnFeedbackHTML(covType, downSpeed, upSpeed, reportDate) {

strAvailable = "A user reports that broadband service is available at this location"
strNotAvailable = "A user reports that broadband service is NOT available at this location"
strStatus = (covType == "1")?strAvailable:strNotAvailable
strDialogName = (covType == "1")?"dialogConfirm":"dialogNotConfirm"
strDownload = (downSpeed == "0")?"unavailable":parseFloat(downSpeed) / 1000 + " Mbps"
strUpload = (upSpeed == "0")?"unavailable":parseFloat(upSpeed) / 1000 + " Mbps"

strHTML = "<div class='InfoHeader'>User Feedback Report</div><div class=infoWinSm>"
strHTML += "<p class='spCovStatus" + covType + "'> " + strStatus + "</p>"
strHTML += "<ul class='none'>"
strHTML += "<li class='providerInfo'>Report Date: " + reportDate + " </li>"
strHTML += "<li class='providerInfo'>Download Speed: " + strDownload + "</li>"
strHTML += "<li class='providerInfo'>Upload Speed: " + strUpload + "</li>"
strHTML += "<li class='btnRow'><a href=\"javascript:openDialog('" + strDialogName + "','User Feedback Report')\">What this report means...</a></li>"
strHTML += "</ul></div>"

return strHTML


}


function test_completed(download_speed, upload_speed, latency, server_id) {
	
	var speed = document.getElementById('speed');
	
	dojo.byId('txtspdDownSpeed').value = download_speed
    dojo.byId('txtspdUpSpeed').value = upload_speed
	dojo.byId('txtspdLatency').value = latency

	activatePanelBtn(6) 

}





