window.onload = addMap;
window.onunload = GUnload;
var map;
var AreaIcon;
var SelectIcon;
var selectedMarker = null;
var AreaMarkers = new Array();
var popThis = null;

function addMap() {
  if (GBrowserIsCompatible()) {
    //Create MAP object
    map = new GMap2(document.getElementById('map'));

		//Create base icon
		AreaIcon = new GIcon();
		AreaIcon.image = "images/mm_lightblue.png";
		AreaIcon.iconSize = new GSize(20, 32);
		AreaIcon.iconAnchor = new GPoint(9, 32);
		AreaIcon.infoWindowAnchor = new GPoint(9, 32);

		//Create select icon
		SelectIcon = new GIcon();
		SelectIcon.image = "images/mm_red.png";
		SelectIcon.iconSize = new GSize(20, 32);
		SelectIcon.iconAnchor = new GPoint(9, 32);
		SelectIcon.infoWindowAnchor = new GPoint(9, 32);

    //Generate points of interest
    var mapCenter = new GLatLng(38.36931910093003, -120.78901290893555);

    //Finalize MAP and center on Martell Plaza
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.setMapType(G_NORMAL_MAP);
    map.setCenter(mapCenter,13);

    // Add area markers and controls
    controlBox = document.getElementById('mapControl');
    for(i=0;i<=AreaMarkers.length-1;i++) {
      if(AreaMarkers[i].point) {
  			AreaMarkers[i].marker = new GMarker(AreaMarkers[i].point,AreaIcon);
  			map.addOverlay(AreaMarkers[i].marker);
  			AreaMarkers[i].listener = GEvent.addListener(AreaMarkers[i].marker,"click",markerInfo);
  			controlItem = document.createElement('a');
  			controlItem.setAttribute("href","javascript:setSelected("+i+")");
  			controlItem.innerHTML = AreaMarkers[i].name;
  			controlBox.appendChild(controlItem);
  		}
    }
    //document.getElementById('map').style.height = document.getElementById('mapControl').offsetHeight-2+"px";
    map.panTo(mapCenter);
  }
}

// Popup to show info about marker
function markerInfo(point){
	for(i=0;i<=AreaMarkers.length-1;i++) {
		if(AreaMarkers[i].point == point) {
	    setSelected(i);
		}
	}
}

function getDirections(node) {
	var myAddress = document.getElementById('myAddress').value;
	if(myAddress.length > 0) {
	  panelNode = document.createElement("div");
	  panelNode.setAttribute("id","gDirText");
	  document.getElementById('gCustomDirs').appendChild(panelNode);

		facility = AreaMarkers[node].address+", "+AreaMarkers[node].city+", "+AreaMarkers[node].state+" "+AreaMarkers[node].zip;

	  var map = new GMap2(document.getElementById("map"));
	  directionsPanel = document.getElementById("gDirText");
	  directions = new GDirections(map, directionsPanel);
	  directions.load("from: "+myAddress+" to: "+facility);
	} else {
		document.getElementById('myAddress').style.background = "#F99";
		document.getElementById('myAddress').style.color = "#FFF";
		document.getElementById('myAddress').style.fontWeight = "bold";
		alert("Please enter your address at the bottom of the page and try again.");
	}
}

function setSelected(point) {
  if(selectedMarker != null) {
    // Remove old selected point and it's listener
    map.removeOverlay(AreaMarkers[selectedMarker].marker);
    GEvent.removeListener(AreaMarkers[selectedMarker].listener);
    
    // Add old selected point back as unselected point
    AreaMarkers[selectedMarker].marker = new GMarker(AreaMarkers[selectedMarker].point,AreaIcon);
    map.addOverlay(AreaMarkers[selectedMarker].marker);
    GEvent.addListener(AreaMarkers[selectedMarker].marker,"click",markerInfo);
  }
  // Remove new selected point and listener with base icon
  map.removeOverlay(AreaMarkers[point].marker);
  GEvent.removeListener(AreaMarkers[point].listener);
  
  // Add new selected point back with 'selected' icon
  AreaMarkers[point].marker = new GMarker(AreaMarkers[point].point,SelectIcon);
  map.addOverlay(AreaMarkers[point].marker);
  GEvent.addListener(AreaMarkers[point].marker,"click",markerInfo);
  selectedMarker = point;
  //alert(AreaMarkers[point].point.lng());
  var newLat = AreaMarkers[point].point.lat()+.012;
  var newLng = AreaMarkers[point].point.lng();
  map.panTo(new GLatLng(newLat,newLng));
  popThis = point;
  setTimeout("infoPop()",500);
}

function AreaMarker(name,address,city,state,zip,phone,email,admin,lat,lng) {
	this.name = name;
	this.address = address;
	this.city = city;
	this.state = state;
	this.zip = zip;
	this.phone = phone;
	this.email = email;
	this.admin = admin;
	if(lat&&lng) {
	  this.point = new GLatLng(lat,lng);
	} else {
	  geocoder = new GClientGeocoder();
	  geocoder.getLatLng(address,function(point) {this.point=point});
	}
	this.marker = null;
	this.listener = null;
}

function infoPop() {
	AreaMarkers[popThis].marker.openInfoWindow("<div>"+AreaMarkers[popThis].name+"<br>"+AreaMarkers[popThis].address+"<br>"+AreaMarkers[popThis].city+" "+AreaMarkers[popThis].state+" "+AreaMarkers[popThis].zip+"<br>"+AreaMarkers[popThis].phone+"<br>"+"</div>");
}

