    function plotPoint(lat, lng, map, desc, icon_name, side_text_pre , side_text_post ) {
    	var side_text_pre = (side_text_pre == null) ? "" : side_text_pre;
    	var side_text_post = (side_text_post == null) ? "" : side_text_post;

  		var point = new GLatLng(jitter(lat),jitter(lng));  
  		
  		if(side_text_pre == "")
	  		markr = createMarker(point, icon_name, desc);
	  	else
	  		markr = createMarkerSidebar(point, icon_name, desc, side_text_pre, side_text_post, "show");
	    map.addOverlay(markr);

    }
    
    function plotArrayPoint(lat, lng, map, desc, icon_name, type, side_text_pre , side_text_post) {

  		var point = new GLatLng(jitter(lat),jitter(lng));  
  		
  		if(side_text_pre=="")
	  		markr = createMarker(point, icon_name, desc);
	  	else
	  		markr = createMarkerSidebar(point, icon_name, desc, side_text_pre, side_text_post, "show");
	  		
	    map.addOverlay(markr);
	    
	    markerGroups[type].push(markr);

    }    
    
    function createArrayPoint(lat, lng, map, desc, icon_name, type, side_text_pre, side_text_post) {

  		var point = new GLatLng(jitter(lat),jitter(lng)); 
  		
  		if(side_text_pre=="") 
	  		markr = createMarker(point, icon_name, desc);
	  	else
	  		markr = createMarkerSidebar(point, icon_name, desc, side_text_pre, side_text_post, "hide");
	  	
	    map.addOverlay(markr);
	    
	    markr.hide();
	    
	    markerGroups[type].push(markr);

    }     
    
    function plotSinglePoint(lat, lng, map, desc, icon_name) {

  		var point = new GLatLng(jitter(lat),jitter(lng));  
	  	markr = createMarker(point, icon_name, desc);
	    map.addOverlay(markr);
	    
		markr.openInfoWindowHtml(desc);
		    

    }    
    
    function createMarker(point, icon_name, html) {
    	
		var icon = new GIcon(baseIcon);
  		icon.image = "http://www.rochestercrime.org/images/marker" + icon_name + ".png";
    	
		var marker = new GMarker(point, icon);
		GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});
		
		return marker;
	}
	
	function createMarkerSidebar(point, icon_name, html, side_text_pre, side_text_post, vis) {
    	
		var icon = new GIcon(baseIcon);
  		icon.image = "http://www.rochestercrime.org/images/marker" + icon_name + ".png";
    	
		var marker = new GMarker(point, icon);
		GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});
		
		gmarkers[indx] = marker;
		htmls[indx] = html;
		
		side_bar_html += side_text_pre +  indx + side_text_post;
		
		/*if(vis=="show")
			side_bar_html += side_text_pre + "<div id=\"\" class=\"incidentlist\" onclick=\"myclick(" + indx + side_text_post;
		else
			side_bar_html += side_text_pre + "<div id=\"\" class=\"hideDiv\" onclick=\"myclick(" + indx + side_text_post;
		*/
			
		indx++;
		
		
		return marker;
	}
	
    
	function jitter(nbr){
		nbr = nbr + 0.0005 * ((Math.random()*2)-1);
		return nbr;
	}
	
	 function myclick(i) {
	 	gmarkers[i].openInfoWindowHtml(htmls[i]);
	 }	
	
	/*How's it done? There are a couple ways you could keep track of marker groups, but I chose to use an associative array that keys each marker type with an array of markers. The array declaration looks like:*/

//var markerGroups = { "restaurant": [], "bar": []};

/*Then when parsing the XML, I use an attribute value of each marker node that's either "restaurant" or "bar" to push the marker into the appropriate array, like so:*/

//var type = markers[i].getAttribute("type");
//...
//markerGroups[type].push(marker);

/*The onclick event for the checkboxes trigger either toggleGroup('restaurant') or toggleGroup('bar'). In toggleGroup, I just iterate through the markers in that group's array, using the same code shown at the beginning of the post, like so:*/

	function toggleGroup(type) {
	  for (var i = 0; i < markerGroups[type].length; i++) {
	    var marker = markerGroups[type][i];
	    if (marker.isHidden()) {
	      marker.show();
	    } else {
	      marker.hide();
	    }
	  } 
	}
	
	function setGroup(type, status) {
	  for (var i = 0; i < markerGroups[type].length; i++) {
	    var marker = markerGroups[type][i];
	    if(status == "on"){
		    if (marker.isHidden()) {
		      marker.show();
		    } 
	    }
	    else if(status == "off"){
		    if (!marker.isHidden()) {
		      marker.hide();
		    } 	    	
	    }
	  } 
	}

    function checkboxToggle(status){
    	if(status == "on"){
			for (i=0;i<document.forms['custommap'].elements.length;i++) {
				if (document.forms['custommap'].elements[i].type == "checkbox") {
					document.forms['custommap'].elements[i].checked = "checked";
				}
			}
			for (var i = 0; i <= 81; i++){
				setGroup("c"+i, "on")				
			}
    	}
    	else if(status == "off"){
			for (i=0;i<document.forms['custommap'].elements.length;i++) {
				if (document.forms['custommap'].elements[i].type == "checkbox") {
					document.forms['custommap'].elements[i].checked = false;
				}
			}    
			for (var i = 0; i <= 81; i++){
				setGroup("c"+i, "off")				
			}					
    	}
    }	

/*Now go forth and toggle! Remember that you'll need to specify v=2.x in your script tag to use the new functions for the next few weeks, since they're new features.

API v2 Latest (v=2.x): 2.77
API v2 Default (v=2): 2.76
*/
	