var map = new GMap2(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());

// Create the base icon
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

function getValue(node) {
  if (node)
    return node.firstChild.nodeValue;
  else
    return null;
}

function markerInfo(marker, num) {
  info = document.getElementById('info');
  info.innerHTML = "";
  if (titles[num])
    info.innerHTML="<b>" + titles[num] + "</b><br>";
  if (addresses[num])
    info.innerHTML += addresses[num];
  if (descriptions[num])
    info.innerHTML += "<hr><p>" + descriptions[num] + "</p>";
  marker.openInfoWindowHtml(titles[num]);
}

function createMarker(point, num, color) {
  var icon = new GIcon(baseIcon);
  icon.image = "mapdata/"+color+"marker.png";
  var marker = new GMarker(point, icon);
  GEvent.addListener(marker, "click", function () {markerInfo(marker, num)});
  return marker;
}

if (!window['Node']) {
    window.Node = new Object();
    Node.ELEMENT_NODE = 1;
    Node.ATTRIBUTE_NODE = 2;
    Node.TEXT_NODE = 3;
    Node.CDATA_SECTION_NODE = 4;
    Node.ENTITY_REFERENCE_NODE = 5;
    Node.ENTITY_NODE = 6;
    Node.PROCESSING_INSTRUCTION_NODE = 7;
    Node.COMMENT_NODE = 8;
    Node.DOCUMENT_NODE = 9;
    Node.DOCUMENT_TYPE_NODE = 10;
    Node.DOCUMENT_FRAGMENT_NODE = 11;
    Node.NOTATION_NODE = 12;
}

//Node.prototype.getChildrenByTagName = function (tag) {
//Object.prototype.getChildrenByTagName = function (tag) {
function getChildrenByTagName(node, tag) {
  var result = [];
  for (var j=0; j<node.childNodes.length; j++) {
    var child = node.childNodes[j];
    if (child.nodeType == Node.ELEMENT_NODE && child.tagName == tag)
      result.push(child);
  }
  return result;
}

//Node.prototype.getChildByTagName = function (tag) {
//Object.prototype.getChildByTagName = function (tag) {
function getChildByTagName(node, tag) {
  var result = getChildrenByTagName(node, tag);
  if (result.length > 0)
    return result[0];
  else 
    return null;
}

var request = GXmlHttp.create();
function onreadystatechange() {
  if (request.readyState == 4) {
    //var xmlDoc = request.responseXML;
    var xmlDoc = GXml.parse(request.responseText);
    var records = xmlDoc.documentElement.getElementsByTagName("location");
    var markers = new Array(records.length);
    titles = new Array(records.length);
    addresses = new Array(records.length);
    notes = new Array(records.length);
    descriptions = new Array(records.length);
    map.clearOverlays();
    var xsum = 0, ysum = 0, n = 0;
    for (var i=0; i<records.length; i++) {
      var point = getChildByTagName(records[i], "point");
      var info = getChildByTagName(records[i], "info");
      titles[i] = getValue(getChildByTagName(info, "title"));
      addresses[i] = getValue(getChildByTagName(info, "address"));
      descriptions[i] = getValue(getChildByTagName(info, "description"));

      if (point != null) {
        var lng = parseFloat(point.getAttribute("lng"));
        var lat = parseFloat(point.getAttribute("lat")); 
        xsum += lng;
        ysum += lat;
	n += 1;
	if (descriptions[i])
	  markers[i] = createMarker(new GLatLng(lat, lng), i, "red");
	else
	  markers[i] = createMarker(new GLatLng(lat, lng), i, "blue");
      } else {
	markers[i] = null;
      }
    }
    map.setCenter(new GLatLng(ysum/n, xsum/n), 9);
    for (i=0; i<markers.length; i++)
      map.addOverlay(markers[i]);
    //var mgr = new MarkerManager(map);
    //mgr.addMarkers(markers, 0);
    //mgr.refresh();
  }
}

function load(file) {
  request.open("GET", file, true);
  request.onreadystatechange = onreadystatechange;
  request.send(null);
}

function loadSelected() {
  var node=document.getElementById('diocese-popup'); 
  load(node.options[node.selectedIndex].value);
}
