// Change these parameters to customize map
var param_wsId = "od6";
var param_ssKey = "0Agkke7dcJPyEdDRsMGhKaWdyNWtsNlVYM1hWLW0wM2c";

var param_prefix = "gsx$";

var param_region = param_prefix+"region";
var param_resourceColumn = param_prefix+"resourcetype";

var param_ncat 							= param_prefix+"rtype";
var param_titleColumn 			= param_prefix+"docname";
var param_titleLinkColumn 	= param_prefix+"doclink";
var param_institutionColumn	= param_prefix+"institution";
var param_projtitleColumn 	= param_prefix+"projtitle";
var param_ntownColumn 			= param_prefix+"ntown";

var param_link 							= param_prefix+"relatedlink";
var param_linktext 					= param_prefix+"relatedlinktitle";

var param_latColumn = param_prefix+"latitude";
var param_lngColumn = param_prefix+"longitude";

/*
var param_address = param_prefix+"address";
var param_descriptionColumn = param_prefix+"description";
var param_latColumn = param_prefix+"latitude";
var param_lngColumn = param_prefix+"longitude";
var param_link = param_prefix+"link";
var param_linktext = param_prefix+"linktext";
*/


// Objects for the map
var cm_map;
var cm_mapMarkers = [];
var cm_mapHTMLS = [];
var geocoder;
var bounds;

// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var cm_baseIcon = new GIcon();
cm_baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";

cm_baseIcon.iconSize = new GSize(33, 41);
cm_baseIcon.shadowSize = new GSize(40, 28);
cm_baseIcon.iconAnchor = new GPoint(9, 34);
cm_baseIcon.infoWindowAnchor = new GPoint(9, 2);
cm_baseIcon.infoShadowAnchor = new GPoint(18, 25);



/**
 * Loads map and calls function to load in worksheet data.
 */
function cm_load() {  
  if (GBrowserIsCompatible()) {
    // create the map
    cm_map = new GMap2(document.getElementById("map_canvas"));
    cm_map.addControl(new GLargeMapControl());
    cm_map.addControl(new GMapTypeControl());
//  cm_map.setCenter(new GLatLng(-38.8882, 145.987), 2);
//  cm_map.setCenter(new GLatLng(-37.766372,143.706665), 2); //-37.766372,143.706665&spn=2.735625,8.453979&z=8
    cm_map.setCenter(new GLatLng(-32.2,148.6), 5); //-37.766372,143.706665&spn=2.735625,8.453979&z=8
    cm_map.enableScrollWheelZoom();
    bounds = new GLatLngBounds();	  
    geocoder = new GClientGeocoder();
    cm_getJSON();
  } else {
    alert("Sorry, the Google Maps API is not compatible with this browser");
  } 
}

/** 
 * Called when JSON is loaded. Creates sidebar if param_sideBar is true.
 * Iterates through worksheet rows, creating marker and sidebar entries for each row.
 * @param {JSON} json Worksheet feed
 */       
function cm_loadMapJSON(json) {
  var lastMarkerGeocoded = false;

  for (var i = 0; i < json.feed.entry.length; i++) {
    var entry = json.feed.entry[i];
		
    if(entry[param_latColumn]) {
			
			var region = entry[param_region].$t;
			
			if (region == 'nsw') {
				
				var lat = parseFloat(entry[param_latColumn].$t);
				var lng = parseFloat(entry[param_lngColumn].$t);
				var html = "<div style='font-size:14px; width:300px;font-family:Arial, Helvetica, sans-serif'>";
				
				
				var legendtxt;
				
				if(entry[param_ncat].$t == "cs") {
					legendtxt = "Case Study";
				}
				else if(entry[param_ncat].$t == "fs") {
					legendtxt = "Farmer Story";
				}
				else if(entry[param_ncat].$t == "fc") {
					legendtxt = "Film Clips";
				}
				else if(entry[param_ncat].$t == "rr") {
					legendtxt = "Research Report";
				}
				else if(entry[param_ncat].$t == "pp") {
					legendtxt = "Published Products";
				}



				//html += '<a href="' + entry[param_titleLinkColumn+j].$t+'" target="_blank">' + entry[param_titleColumn].$t + "</a>";

				
				var label = entry[param_titleColumn].$t;

				html += "<br><p style='font-size:16px; font-family:Arial, Helvetica, sans-serif'><strong>" + legendtxt + "</strong></p><br>";

				html += "<img src='/maps/images/map_icons/google-popup-genie.gif' width='60' height='105' align='right' hspace='15'><strong>Document Name</strong><br>";
				html += "<a href='" + entry[param_titleLinkColumn].$t + "'><strong>" + entry[param_titleColumn].$t + "</strong></a><br><br>";

				html += "<strong>Farmers, Researcher or Institution</strong><br>";
				html += entry[param_institutionColumn].$t + "<br><br>";

				html += "<strong>Topic or Project Title</strong><br>";
				html += entry[param_projtitleColumn].$t + "<br><br>";

				html += "<strong>Nearest Town</strong><br>";
				html += entry[param_ntownColumn].$t + "<br><br>";

				html += "<strong>Related Links</strong><br>";

				for (var j = 1; j < 2; j++) {
					if(entry[param_link+j].$t || entry[param_linktext+j].$t) {
						var linkText = entry[param_link+j].$t;
						if (entry[param_linktext+j].$t) {
							linkText = entry[param_linktext+j].$t;
						}
						html += '<a href="'+entry[param_link+j].$t+'" target="_blank">' + linkText + "</a>";
					}
				}



				/*
				html += "<table width='295' border='0' cellspacing='0' cellpadding='1' style='font-size:12px; margin:0 0 0 5px;'>";

				// Resource Type
				html += "<tr><td width='77' valign='top'>Resource Type:</td><td width='5' valign='top'>&nbsp;</td><td valign='top'>";

				if(entry[param_resourceColumn].$t) {
					html += entry[param_resourceColumn].$t;
				}
				html += "</td></tr>";


				// Address
				html += "<tr><td width='77' valign='top'>Location Name:</td><td width='5' valign='top'>&nbsp;</td><td valign='top'>";
				
				var address = entry[param_address].$t;
				html += address;

				html += "</td></tr>";

				html += "<tr><td width='77' valign='top'>Description:</td><td width='5' valign='top'>&nbsp;</td><td valign='top'>";

				//Description
				if(entry[param_descriptionColumn].$t) {
					html += entry[param_descriptionColumn].$t;
				}
				
				html += "</td></tr>";


				// Link
				html += "<tr><td width='77' valign='top'>Link:</td><td width='5' valign='top'>&nbsp;</td><td valign='top'>";
				
				for (var j = 1; j < 2; j++) {
					if(entry[param_link+j].$t || entry[param_linktext+j].$t) {
						var linkText = entry[param_link+j].$t;
						if (entry[param_linktext+j].$t) {
							linkText = entry[param_linktext+j].$t;
						}
						html += '<a href="'+entry[param_link+j].$t+'" target="_blank">' + linkText + "</a>";
					}
				}
				
				html += "</td></tr></table>";
				
				*/
				
				html += "</div>";
	
				// create the marker
				var rank = "al";
				if(entry[param_ncat].$t) {
					rank = entry[param_ncat].$t;
				}
	
				if (!isEmpty(lat) && !isEmpty(lng)) {
					var point = new GLatLng(lat,lng);
					var marker = cm_createMarker(point,label,html,rank);
					cm_map.addOverlay(marker);
					cm_mapMarkers.push(marker);
					cm_mapHTMLS.push(html);
					bounds.extend(point);	  
				} else {
					lastMarkerGeocoded = i==json.feed.entry.length-1;
					showAddress(address, label, html, rank, lastMarkerGeocoded);
				}
			} //if (region == 'vic')
		} //if(entry[param_latColumn]) 
		
  }

  if (!lastMarkerGeocoded) {
    cm_map.setZoom(cm_map.getBoundsZoomLevel(bounds)-1);
    //cm_map.setCenter(bounds.getCenter());
  }
}

/** Search for, and show marker for the address */
function showAddress(address, label, html, rank, isLast) {
  if (geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
          //alert(address + " not found.");
        } else {
          //alert(address + " found!");
          var marker = cm_createMarker(point, label, html, rank);
          cm_map.addOverlay(marker);
          cm_mapMarkers.push(marker);
          cm_mapHTMLS.push(html);
          bounds.extend(point);	  
        }
        // if last marker was geocoded, then zooming, and centering must be here
        if (isLast) {
          cm_map.setZoom(cm_map.getBoundsZoomLevel(bounds));
          //cm_map.setCenter(bounds.getCenter());
        }
      }
    );
  }
}

/** Is a string variable empty */
function isEmpty(text) {
  return !text || text==='' || text===' ';
}

/**
 * Creates marker with Icon
 */
function cm_createMarker(point, title, html, rank) {
  var markerOpts = {};
  var nIcon = new GIcon(cm_baseIcon);
  nIcon.image = "/maps/images/map_icons/" + rank + "_icon.png"; 
//  nIcon.image = rank+"_icon.png"; 

markerOpts.icon = nIcon;
  markerOpts.title = title; 
  var marker = new GMarker(point, markerOpts);

  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });
  return marker;
}

/**
 * Creates a script tag in the page that loads in the 
 * JSON feed for the specified key/ID. 
 * Once loaded, it calls cm_loadMapJSON.
 */
function cm_getJSON() {

  // Retrieve the JSON feed.
  var scriptDiv = document.createElement('div');
  var script = document.createElement('script');

  script.setAttribute('src', 'http://spreadsheets.google.com/feeds/list'
                         + '/' + param_ssKey + '/' + param_wsId + '/public/values' +
                        '?alt=json-in-script&callback=cm_loadMapJSON');
  script.setAttribute('id', 'jsonScript');
  script.setAttribute('type', 'text/javascript');
  
  // for not standard compilant pages
  var mapDiv = document.getElementById("map_canvas");
  scriptDiv.appendChild(script);
  mapDiv.parentNode.appendChild(scriptDiv);
  
  // for good websites
  //document.documentElement.firstChild.appendChild(script);
}

GEvent.addDomListener(window, "load", cm_load);
GEvent.addDomListener(window, "unload", GUnload);
