var map;
var geocoder;
var mapped = new Object();
var marker_hash = new Object(); 

function load(showMapControl){
      initMap(showMapControl);
      var len = events.data.length;
      for(var i = 0; i < len; i++){
        addToMap(events.data[i], false, (i>0?false:true)); 
      }
}

function loadWithEvents(showMapControl, events){
	initMap(showMapControl);
      	for(var i = 0; i < events.data.length; i++){
	   addToMap(events.data[i], true, true); 
	}
	//center the map on the requested zip code
	var zoomlevel = 0; 
	switch(events.dist){
	   case '5':
	   	zoomlevel = 13;
		break;
	   case '10':
	   case '15':
	   	zoomlevel = 12; 
		break;
	   case '25':
	   	zoomlevel = 11;
		break;
	   case '50':
	   	zoomlevel = 10; 
		break;
	   default:
	   	//shoudln't get here really
	}
	map.setCenter(new GLatLng(events.data[0].latitude, events.data[0].longitude), zoomlevel); 
}

function initMap(showMapControl){
	      map = new GMap2(document.getElementById("map"));
	      map.clearOverlays();
	      map.enableContinuousZoom();
	      map.enableDoubleClickZoom();
	      map.enableInfoWindow();
      	      map.addControl(new GSmallMapControl());
      	      map.addControl(new GMapTypeControl());
	      if(showMapControl){
	         map.addControl(new GOverviewMapControl());
	      }
}

//showlink : whether to show link to the event
//do_center : whether to center the map
function addToMap(event, showlink, do_center){
		var latitude = event.latitude;
		var longitude = event.longitude; 
		var point = new GLatLng(latitude, longitude); 
		//must set center before adding overlays!!!
		if(do_center){
    	        	map.setCenter(point, 13); //zoom level 13
		}
		var marker = createMarker(showlink, event.eventid, point, event.license, event.desc, event.img); 
		map.addOverlay(marker); 
}

function closure(geocoder, full_addr, cur_license, cur_desc, cur_img){
     	      	geocoder.getLatLng(full_addr,
		function (point){
			if(!point){
				return;
			}
    		    	map.setCenter(point, 13); //zoom level 13
 	   	    	map.addOverlay(createMarker(point, cur_license, cur_desc, cur_img));
		});
}


function createMarker(showlink, eventid, point, cur_license, desc, img){
	var desc_fixed = desc.replace(/<br\/?>/ig, " ");
	var marker = new GMarker(point, {title:desc_fixed}); 
	GEvent.addListener(marker, "click", function(){
		var str = "<div class=\"map-content\">";
		if(img != null && img != ""){
		   str += "<a href=http://www.baddrivr.com/showevent.php?eventid=" + eventid + "><img width=75 height=75 border=1 src=" + img + "></img></a>";
		}
		if(cur_license != null && cur_license != ""){
		   str += "<b>Plate#:</b>&nbsp;" + cur_license + "<br>"; 
		}
		str += "<b>Report:</b>&nbsp;" + desc_fixed;
		if(showlink){
		   str += "<a href=http://www.baddrivr.com/showevent.php?eventid=" + eventid + ">see details</a><br/><br/>"; 
		}

		str += "</div>";
		marker.openInfoWindowHtml(str);
	});
	return marker;
}

function makeIcon(){
  var icon = new GIcon();
  icon.image = "http://baddrivr.com/imgs/stop.small.png";
  icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
  icon.iconSize = new GSize(16, 16); //actual size
  icon.shadowSize = new GSize(20, 16);
  icon.iconAnchor = new GPoint(8, 16);
  icon.infoWindowAnchor = new GPoint(8, 15);
  return icon;
}
