var map, manager; 
var centerLatitude = 47.63000, centerLongitude = -122.336511, startZoom = 12;


function createMarkerClickHandler(marker, text, link, category, description) {
  return function() {
    marker.openInfoWindowHtml(
	    '<div class ="m-win-cat">' + category + '</div>' +
      '<h3 class="m-win-h">' + text + '</h3>' +
      '<div class="m-win-p">' + description + '</div>' +
      '<div class="m-win-p-l"><a href="' + link + '" target="_blank">Link &raquo;</a></div>'
    );
    return false;
  };
}


function createMarker(pointData) {
  var latlng = new GLatLng(pointData.latitude, pointData.longitude);

//  var icon = new GIcon();
//  icon.image = 'red_marker.png';
//  icon.iconSize = new GSize(32, 32);
//  icon.iconAnchor = new GPoint(16, 16);
//  icon.infoWindowAnchor = new GPoint(25, 7);

  opts = {
//    "icon": icon,
    "clickable": true,
    "title": pointData.name
//    "labelOffset": new GSize(-16, -16)
  };
 
  var marker = new LabeledMarker(latlng, opts);
  var handler = createMarkerClickHandler(marker, pointData.name, pointData.url, pointData.category, pointData.description);
	
  GEvent.addListener(marker, "click", handler);

  var listItem = document.createElement('li');
  
  if (pointData.heading == 'true') {
	// ie hack per http://www.digitalmediaminute.com/article/1394/the-browser-dom-and-the-class-attribute
	listItem.setAttribute((document.all ? 'className' : 'class'), "marker_header");
  	listItem.innerHTML =  pointData.name;
	document.getElementById('sidebar-list').appendChild(listItem);
	return null;
  }

  listItem.innerHTML = '<a href="' + pointData.url + '">' + pointData.name + '</a>';
  listItem.getElementsByTagName('a')[0].onclick = handler;

  document.getElementById('sidebar-list').appendChild(listItem);

  return marker;
}

function windowHeight() {
  // short circuit all this... 
  return 700;	
  // Standard browsers (Mozilla, Safari, etc.)
  if (self.innerHeight) {
    return self.innerHeight;
  }
  // IE 6
  if (document.documentElement && document.documentElement.clientHeight) {
   return document.documentElement.clientHeight;
  }
  // IE 5
  if (document.body) {
    return document.body.clientHeight;
  }
  // Just in case. 
  return 0;
}

// work on this
function handleResize() {
  var height = windowHeight() - document.getElementById('toolbar').offsetHeight - 30;
  document.getElementById('map').style.height = height + 'px';
  document.getElementById('sidebar').style.height = height + 'px';
}

function init() {
  handleResize();
	
  map = new GMap(document.getElementById("map"));
  map.addControl(new GSmallMapControl());
  map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
  map.addControl(new GMapTypeControl());

  // use the markermanager by passing the map to it
  manager = new MarkerManager(map);
	
  // This is a sorting trick, don't worry too much about it.
  // let's sort on something else
//  markers.sort(function(a, b) { return (a.name > b.name) ? +1 : -1; }); 
	
	var visconti_icon = new GIcon();
  visconti_icon.image = "images/visconti_locator_icon.png";
  visconti_icon.iconAnchor = new GPoint(0, 50);
  visconti_icon.infoWindowAnchor = new GPoint(16, 0);
  visconti_icon.iconSize = new GSize(109, 55);
  visconti_icon.clickable = false; 
  visconti_icon.shadow = "images/visconti_locator_shadow_dark.png";
	// visconti_icon.shadow =	"http://www.google.com/mapfiles/shadow50.png";
  visconti_icon.shadowSize = new GSize(164, 64);

	// Set up our GMarkerOptions object
	markerOptions = { clickable: false, icon:visconti_icon };
  var latlng = new GLatLng(47.61735, -122.3381);
  map.addOverlay(new GMarker(latlng, markerOptions));	
	
	
	
  batch = [];
  // adding markers is a two step process: createMarker then addMarker

  // add to the batch array by iterating through the map_feed passing each object to createMarkers which sets the markers up and
  for(id in markers) {
	  if (markers[id].heading == 'true') {
		createMarker(markers[id]);
	  } else {
		batch.push(createMarker(markers[id]));	
	}
	
    
  }
  // what's the 11?
  manager.addMarkers(batch, 11);
  manager.refresh();
}

// window.onresize = handleResize;
window.onload = init;
window.onunload = GUnload;