// <! [CDATA[

var latitude = 0;
var longitude = 0;
var zoom = 0;

var map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.enableScrollWheelZoom();
    geocoder = new GClientGeocoder();


// nlm added
GEvent.addListener(map, "moveend", function() {
//   var center = map.getCenterLatLng();
   var center = map.getCenter();
//   var latLngStr = '(' + center.y + ', ' + center.x + ')';
//   var bounds = map.getBoundsLatLng();
//   document.getElementById("message").innerHTML = latLngStr + "<br>" + bounds;
}
);


function recenter(latitude, longitude, zoom) {
	    map.setCenter(new GLatLng(latitude, longitude), zoom);
//   map.centerAndZoom(new GPoint(latitude, longitude), zoom);
}

    function showAddress(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
              map.setCenter(point, 7);
//              var marker = new GMarker(point);
//              map.addOverlay(marker);
//              marker.openInfoWindowHtml(address);
            }
          }
        );
      }
    }



function resetMapPosition() {
   switch(uriq) {
	case "region=af":
	    map.setCenter(new GLatLng(0.537868,15.962891), 3);
//		map.centerAndZoom(new GPoint(15.962891,0.537868),14);
        pagelink = '<a href="'+document.URL+'">Triathlon Clubs in Africa</a>';
		document.title = "TRImapper.com - Africa Triathlon Club Finder, Triathlon Clubs in Africa";
		break;
	case "cntry=sf":
	    map.setCenter(new GLatLng(-28.343064,25.268554), 5);
//		map.centerAndZoom(new GPoint(25.268554,-28.343064),12);
        pagelink = '<a href="'+document.URL+'">Triathlon Clubs in South Africa</a>';
		document.title = "TRImapper.com - South Africa Triathlon Club Finder, Triathlon Clubs in South Africa";
		break;
	default:
	    map.setCenter(new GLatLng(0.537868,15.962891), 3);
//		map.centerAndZoom(new GPoint(15.962891,0.537868), 14);
         pagelink = '<a href="'+document.URL+'">Triathlon Clubs in Africa</a>';
         break;
   }
}
resetMapPosition();

var baseIcon = new GIcon();
//    baseIcon.image = "icons/marker.png";
//    baseIcon.shadow = "icons/shadow50.png";
//    baseIcon.iconSize = new GSize(20, 34);
baseIcon.iconSize = new GSize(12, 20);
//    baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(6, 20);
baseIcon.infoWindowAnchor = new GPoint(6, 6);

var info = document.getElementById("sc4");

// TODO - maybe make this one array of objects ?
var markerArray = new Array();
var markerTitles = new Array();
var markerPointsArray = new Array();
var markerCallbacks = new Array();
var markerTagStrings = new Array();
var markerAddresses = new Array();
var markerCity = new Array();
var markerState = new Array();
var markerCountry = new Array();
var markerType = new Array();
var markersShown = new Array();
var markerLength = 0;
var tagToCountTable = {
}
;

function addTagToList(newTag) {
   if (tagToCountTable[newTag]) {
      tagToCountTable[newTag] ++ ;
   }
   else {
      tagToCountTable[newTag] = 1;
   }
}

function sortByCount(a, b) {
   return tagToCountTable[b] - tagToCountTable[a];
}

function myEncodeURI(source) {
   // Do the javascript thing, but encode a space as a +
   var nextSpace = source.indexOf(' ');
   while (nextSpace != - 1) {
      source = source.substring(0, nextSpace) + "+" + source.substring(nextSpace + 1);
      nextSpace = source.indexOf(' ');
   }
   return encodeURI(source);
}

function zoomIN(cord1, cord2){
   // 	alert("cord1:" + cord1 + " cord2:" + cord2);
   map.centerAndZoom(new GPoint(cord2, cord1), 16);
}

function createMarker(point, caption, index, markerColor) {

   // new code to change the marker color
   var icon = new GIcon(baseIcon);
   icon.image = "http://www.trimapper.com/images/cmarker_" + markerColor + ".png";
   var marker = new GMarker(point, icon);

   // Show this marker's index in the info window when it is clicked
   GEvent.addListener(marker, "click", function() {
      marker.openInfoWindowHtml(caption);
   }
   );


   markerCallbacks[index] = function() {
      markerArray[index].openInfoWindowHtml(caption);
   }

   return marker;
}

function filterTags(tag) {
   if (tag == '') {
      // special case - show all
      for (var i = 0; i < markerLength; i ++ ) {
         if (markersShown[i] == false) {
            // Display it.
            markersShown[i] = true;
            map.addOverlay(markerArray[i]);
            var divInfo = document.getElementById("entry" + i);
            divInfo.style.display = "";
         }
      }
      return;
   }
// var tagRE = new RegExp("\\|" + tag + "\\|");
   var tagRE = tag;
   for (var i = 0; i < markerLength; i ++ ) {
      if (markerTagStrings[i].match(tagRE)) {
         // Display the text and marker
         if (markersShown[i] == false) {
            // We need to display it.
            markersShown[i] = true;
            map.addOverlay(markerArray[i]);
            var divInfo = document.getElementById("entry" + i);
            divInfo.style.display = "";
         }
      }
      else {
         // Hide text and marker
         if (markersShown[i] == true) {
            // Hide it.
            markersShown[i] = false;
            map.removeOverlay(markerArray[i]);
            var divInfo = document.getElementById("entry" + i);
            divInfo.style.display = "none";
         }
      }
   }
}

var request = GXmlHttp.create();
request.open("GET", xmlFileName, true);
request.onreadystatechange = function() {
   if (request.readyState == 4) {
      var xmlDoc = request.responseXML;
      var markers = xmlDoc.documentElement.getElementsByTagName("marker");
      markerLength = markers.length;
      for (var i = 0; i < markers.length; i ++ ) {
         markerPointsArray[i] = new GPoint(parseFloat(markers[i].getAttribute("lng")), parseFloat(markers[i].getAttribute("lat")));
         var colorMarker = new String(markers[i].getAttribute("color"));
         markerTitles[i] = new String(markers[i].getAttribute("title"));
         var latText = new String(markers[i].getAttribute("lat"));
         var lngText = new String(markers[i].getAttribute("lng"));
         markerCity[i] = new String(markers[i].getAttribute("city"));
         markerState[i] = new String(markers[i].getAttribute("state"));
         markerCountry[i] = new String(markers[i].getAttribute("country"));
         // 			markerType[i] = new String(markers[i].getAttribute("tag"));
         var url = new String(markers[i].getAttribute("url"));
         /*            var raceid = new String(markers[i].getAttribute("raceid")); */

         var clubloc = '<p class="tiny">Location: ' + markerCity[i] + ', ' + markerState[i] + '</p><br>';
         var website = '<a href="' + url + '" target="_blank" class="tiny">Website</a>';
         var zoomin = '&nbsp;|&nbsp;<a href="javascript:zoomIN'+markerPointsArray[i]+';" class="tiny">Zoom In</a>';

         /* var report = '&nbsp;|&nbsp;<a href="mailto:admin@trimapper.com?subject=Update/Bad%20TRI&body=Update/Bad%20TRI:  Race ID: '+raceid+'  Tri: '+markerTitles[i]+'" class="tiny">Update/Bad TRI</a>';
         */


         if (document.getElementById('loadingMessage')){
            document.getElementById('loadingMessage').innerHTML = "Loading " + i + "of " + markerLength;
         }

         markerArray[i] = createMarker(markerPointsArray[i], "<br><b><u>" + markerTitles[i] + "</u></b><br>" + clubloc + website + zoomin, i, colorMarker);
         map.addOverlay(markerArray[i]);
         markerTagStrings[i] = new String(markers[i].getAttribute("tag"));
         var entry = document.createElement("div");
         entry.setAttribute("id", "entry" + i);
         entry.setAttribute("style", "");
         var boldPart = document.createElement("b");
         var linkPart = document.createElement("a");
         linkPart.setAttribute("href", "javascript:callback" + i + "();");
         var boldText = document.createTextNode(markerTitles[i]);
         boldPart.appendChild(boldText);
         linkPart.appendChild(boldPart);

//         var captionPart = document.createTextNode(" - " + markerCity[i] + ", " + markerState[i]);
			var captionLoc = document.createTextNode(markerCity[i] + ", " + markerState[i]);
			var br = document.createElement("br");


         // Find the tags.
         var tagPart = document.createTextNode(" Tags: ");
         var tagsPart = document.createElement("span");
         var tempString = markerTagStrings[i];

         var nextTag = tempString;
         addTagToList(nextTag);
         // Add links to tags
         var tempLinkPart = document.createElement("a");
         tempLinkPart.setAttribute("href", "javascript:filterTags('" + nextTag + "');");
         var tempLinkText = document.createTextNode(nextTag);
         var space = document.createTextNode(" ");
         tempLinkPart.appendChild(tempLinkText);
         tagsPart.appendChild(tempLinkPart);
         tagsPart.appendChild(space);
         //                    }
         //                }

         entry.appendChild(linkPart);
//         entry.appendChild(captionPart);
         //                entry.appendChild(tagPart);
         //                entry.appendChild(tagsPart);
                info.appendChild(entry);
				entry.appendChild(br);
				info.appendChild(entry);
				entry.appendChild(captionLoc);
				info.appendChild(entry);
      }
      // Sort the tags.
      allTags = new Array();
      var j = 0;
      for (tag in tagToCountTable) {
         allTags[j] = tag;
         j ++ ;
      }
      // Use this to sort by count
      // allTags.sort(sortByCount);
      allTags.sort();

      // Add the list of all tags
      var tags = document.getElementById("sc1");
      var tagAllEntry = document.createElement("a");
      tagAllEntry.setAttribute("href", "javascript:filterTags('');");
      var tagAllText = document.createTextNode('(All)(' + markerLength + ')');
      tagAllEntry.appendChild(tagAllText);
      tags.appendChild(tagAllEntry);
      var space = document.createTextNode(' ');
      tags.appendChild(space);

      // And insert them.
      var space = document.createTextNode(' ');
      for (var j = 0; j < allTags.length; j ++ ) {
         var tempLinkEntry = document.createElement("a");
         tempLinkEntry.setAttribute("href", "javascript:filterTags('" + allTags[j] + "');");
         var tempLinkText = document.createTextNode(allTags[j] + "(" + tagToCountTable[allTags[j]] + ")");
         tempLinkEntry.appendChild(tempLinkText);
         tags.appendChild(tempLinkEntry);
         var space = document.createTextNode(' ');
         tags.appendChild(space);
      }
      for (var j = 0; j < markerLength; j ++ ) {
         markersShown[j] = true;
         eval('callback' + j + ' = function() {markerCallbacks[' + j + ']();}');
      }

   }
}
request.send(null);
// ]] >
