//<![CDATA[
var r1;
var maps_baseURL = "http://www.northcountryscene.com/";
var desc = [];
var cm_map;
var cm_mapMarkers = [];
var cm_mapHTMLS = [];

// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var cm_baseIcon = new GIcon();

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

// Change these parameters to customize map
var param_useSidebar =  false;
var param_wsId = "od6";
var param_ssKey = "o01368943641984075016.9071440626479109129";
var param_titleColumn = "place";
var param_countyColumn = "county";
var param_townColumn = "town";
var param_descriptionColumn = "description";
var param_linkColumn= "link";
var param_locationColumn= "location";
var param_imageColumn="image";
var param_latColumn = "latitude";
var param_lngColumn = "longitude";
var param_rankColumn = "rank";
var param_styleColumn = "style";
var param_styleOverColumn = "styleover";
var param_iconType = "Blue";
var param_iconOverType = "Red";
/** Icon Colors are Red, Orange, Yellow, Green, Blue, Purple, Grey **/
/**
 * Loads map and calls function to load in worksheet data.
 */
function cm_load() {  
  if (GBrowserIsCompatible()) {
    // create the map
    cm_map = new GMap2(document.getElementById("cm_map"));
    cm_map.addControl(new GLargeMapControl());
    cm_map.addControl(new GMapTypeControl());
    cm_map.addControl(new GScaleControl());
    cm_map.addControl(new GOverviewMapControl());
    cm_map.setCenter(new GLatLng( 43.907787,-79.359741), 2);
    cm_getJSON();
  } else {
    alert("Sorry, the Google Maps API is not compatible with this browser");
  } 
}

/**
 * Function called when marker on the map is clicked.
 * Opens an info window (bubble) above the marker.
 * @param {Number} markerNum Number of marker in global array
 */
function cm_markerClicked(markerNum) {
  cm_mapMarkers[markerNum].openInfoWindowHtml(cm_mapHTMLS[markerNum]);
}

/**
 * Function that sorts 2 worksheet rows from JSON feed
 * based on their rank column. Only called if column is defined.
 * @param {rowA} Object Represents row in JSON feed
 * @param {rowB} Object Represents row in JSON feed
 * @return {Number} Difference between row values
 */
function cm_sortRows(rowA, rowB) {
  var rowAValue = parseFloat(rowA["gsx$" + param_rankColumn].$t);
  var rowBValue = parseFloat(rowB["gsx$" + param_rankColumn].$t);

  return rowAValue - rowBValue;
}

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

  if(param_useSidebar == true) {
    var sidebarTD = document.createElement("td");
    sidebarTD.setAttribute("width","150");
    sidebarTD.setAttribute("valign","top");
    var sidebarDIV = document.createElement("div");
    sidebarDIV.id = "cm_sidebarDIV";
    sidebarDIV.style.overflow = "auto";
    sidebarDIV.style.height = "450px";
    sidebarDIV.style.fontSize = "11px";
    sidebarDIV.style.color = "#000000";
    sidebarTD.appendChild(sidebarDIV);
    document.getElementById("cm_mapTR").appendChild(sidebarTD);
  }

  var bounds = new GLatLngBounds();	  

  if(json.feed.entry[0]["gsx$" + param_rankColumn]) {
    usingRank = true;
    // json.feed.entry.sort(cm_sortRows);
  }
  var htm="";
	var pos = 0;
	var post;
	var county = "";

//----------------------------------------------------------------------------------
for (var m = 0; m < json.feed.entry.length; m++ ){
	var entry = json.feed.entry[m];
if(parseFloat(entry["gsx$" + param_latColumn].$t)){
	if(!county){
		county=entry["gsx$" + param_countyColumn].$t;
		post= '<h2>'+ county +'</h2><ul class="marker_list"><li><div id="markerBoxL"><div id="marker" ><div id="markerId">'+ entry["gsx$"+param_rankColumn].$t  + '</div></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
		pos=1;
	} else {
		if (entry["gsx$" + param_countyColumn].$t == county){
			if (pos ==0){
				post = '<li><div id="markerBoxL"><div id="marker" ><div id="markerId">' + entry["gsx$"+param_rankColumn].$t  + '</div></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
				pos=1;
			} else {
				post = '<div id="markerBoxR"><div id="marker" ><div id="markerId">'+ entry["gsx$"+param_rankColumn].$t  + '</div></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div></li>';
				pos=0;
			}
		} else {
			county=entry["gsx$" + param_countyColumn].$t;
			if (pos ==0){
				post = '</ul><h2>'+ county +'</h2><ul class="marker_list"><li><div id="markerBoxL"><div id="marker" ><div id="markerId">'+ entry["gsx$"+param_rankColumn].$t  + '</div></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
				pos=1;
			} else {
				post = '</li></ul><h2>'+ county +'</h2><ul class="marker_list"><li><div id="markerBoxL"><div id="marker" ><div id="markerId">' + entry["gsx$"+param_rankColumn].$t  + '</div></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
				pos=1;
			}
		}
	}
	htm+= post;
} else {
	if(!county){
		county=entry["gsx$" + param_countyColumn].$t;
		post= '<h2>'+ county +'</h2><ul class="marker_list"><li><div id="markerBoxL"><div id="marker"><a href="#"  onClick="MyWindow=window.open(\'http://www.northcountryscene.com/maps/update_marker.cgi?marker=' + entry["gsx$"+param_rankColumn].$t + '\', \'mywindow\', \'location=1,status=1,scrollbars=1,width=650\');"><div id="markerId" style="cursor:pointer;">'+ entry["gsx$"+param_rankColumn].$t  + '</div></a></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
		pos=1;
	} else {
		if (entry["gsx$" + param_countyColumn].$t == county){
			if (pos ==0){
				post = '<li><div id="markerBoxL"><div id="marker"><a href="#"  onClick="MyWindow=window.open(\'http://www.northcountryscene.com/maps/update_marker.cgi?marker=' + entry["gsx$"+param_rankColumn].$t + '\', \'mywindow\', \'location=1,status=1,scrollbars=1,width=650\');"><div id="markerId" style="cursor:pointer;">' + entry["gsx$"+param_rankColumn].$t  + '</div></a></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
				pos=1;
			} else {
				post = '<div id="markerBoxR"><div id="marker"><a href="#"  onClick="MyWindow=window.open(\'http://www.northcountryscene.com/maps/update_marker.cgi?marker=' + entry["gsx$"+param_rankColumn].$t + '\', \'mywindow\', \'location=1,status=1,scrollbars=1,width=650\');"><div id="markerId" style="cursor:pointer;">'+ entry["gsx$"+param_rankColumn].$t  + '</div></a></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div></li>';
				pos=0;
			}
		} else {
			county=entry["gsx$" + param_countyColumn].$t;
			if (pos ==0){
				post = '</ul><h2>'+ county +'</h2><ul class="marker_list"><li><div id="markerBoxL"><div id="marker"><a href="#"  onClick="MyWindow=window.open(\'http://www.northcountryscene.com/maps/update_marker.cgi?marker=' + entry["gsx$"+param_rankColumn].$t + '\', \'mywindow\', \'location=1,status=1,scrollbars=1,width=650\');"><div id="markerId" style="cursor:pointer;">'+ entry["gsx$"+param_rankColumn].$t + '</div></a></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
				pos=1;
			} else {
				post = '</li></ul><h2>'+ county +'</h2><ul class="marker_list"><li><div id="markerBoxL"><div id="marker"><a href="#"  onClick="MyWindow=window.open(\'http://www.northcountryscene.com/maps/update_marker.cgi?marker=' + entry["gsx$"+param_rankColumn].$t + '\', \'mywindow\', \'location=1,status=1,scrollbars=1,width=650\');"><div id="markerId" style="cursor:pointer;">' + entry["gsx$"+param_rankColumn].$t + '</div></a></div><div id="markerInfo"><strong>'+ entry["gsx$"+param_titleColumn].$t +'</strong><br />' + entry["gsx$"+param_descriptionColumn].$t + '<br/><em>Location</em>:' + entry["gsx$"+param_locationColumn].$t + '<br /></div></div>';
				pos=1;
			} 
		}
	}
	htm+= post;
}
}
htm+="</ul>";
//-------------------------------------------------------------

document.getElementById('marker_list').innerHTML=htm;
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
	if(parseFloat(entry["gsx$" + param_latColumn].$t)){
		var lat = parseFloat(entry["gsx$" + param_latColumn].$t);
		var lng = parseFloat(entry["gsx$" + param_lngColumn].$t);
		var point = new GLatLng(lat,lng);
		var html = '<div id="map_info">';
		html += '<span class="map_title">'+ entry["gsx$"+param_titleColumn].$t+ "</span>";
		var label = entry["gsx$"+param_titleColumn].$t;
		var rank = 0;
		rank = parseInt(entry["gsx$"+param_rankColumn].$t);
		r1=rank;
		html += '<br/>'+entry["gsx$"+param_descriptionColumn].$t+'<br/>';
		desc[r1] =  entry["gsx$"+param_titleColumn].$t+" "+entry["gsx$"+param_descriptionColumn].$t;
		if(entry["gsx$" + param_imageColumn]) {
			if (entry["gsx$"+param_imageColumn].$t){
			var img1;
			img1 = new Image();
			img1.src = entry["gsx$"+param_imageColumn].$t;
			imgWidth=img1.width+20;
			imgHeight=img1.height+20;
			if( imgHeight >imgWidth){
			var tnHeight='200px';
			var tnWidth='auto';
			} else {
			var tnWidth='200px';
			var tnHeight='auto';
			}
			html += '<br/><div id="map_image"><a href="#"  onClick="MyWindow=window.open(\''+entry["gsx$"+param_imageColumn].$t+'\',\'MyWindow\',\'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=400px, height=400px, left=100,top=100\'); return false;" target="_blank"><img src="' + entry["gsx$"+param_imageColumn].$t + '" style="width:' + tnWidth +'; height:' + tnHeight + ' ;" name="tnImage"/></a></div>';
			if(entry["gsx$" + param_linkColumn].$t) {
			html += '<br/><a href="' + entry["gsx$"+param_linkColumn].$t+'" target="_blank"><span class="map_link">Website</span></a>';
			}
			html += "</div>";
		}
		if(entry["gsx$" + param_styleColumn]) {
			if (entry["gsx$"+param_styleColumn].$t){
			param_iconType = entry["gsx$"+param_styleColumn].$t;
			param_iconOverType = entry["gsx$"+param_styleOverColumn].$t;
			} else {
			param_iconType = "blue";
			param_iconOverType = "red";
			}
	}
}
      // create the marker
      var marker = cm_createMarker(point,label,html,rank);
      cm_map.addOverlay(marker);
      cm_mapMarkers.push(marker);
      cm_mapHTMLS.push(html);
      bounds.extend(point);
	  
      if(param_useSidebar == true) {
        var markerA = document.createElement("a");
        markerA.setAttribute("href","javascript:cm_markerClicked('" + i +"')");
        markerA.style.color = "#000000";
        var sidebarText= "";
        if(usingRank) {
          sidebarText += rank + ") ";
        } 
        sidebarText += label;
        markerA.appendChild(document.createTextNode(sidebarText));
        sidebarDIV.appendChild(markerA);
        sidebarDIV.appendChild(document.createElement("br"));
        sidebarDIV.appendChild(document.createElement("br"));
      } 
    }
  }

  cm_map.setZoom(cm_map.getBoundsZoomLevel(bounds));
  cm_map.setCenter(bounds.getCenter());
}

/**
 * Creates marker with ranked Icon or blank icon,
 * depending if rank is defined. Assigns onclick function.
 * @param {GLatLng} point Point to create marker at
 * @param {String} title Tooltip title to display for marker
 * @param {String} html HTML to display in InfoWindow
 * @param {Number} rank Number rank of marker, used in creating icon
 * @return {GMarker} Marker created
 */
function cm_createMarker(point, title, html, rank) {
  var markerOpts = {};
  var nIcon = new GIcon(cm_baseIcon);

  if(rank > 0 && rank < 300) {
    nIcon.imageOut = maps_baseURL + "maps/" +
        "icons/" + param_iconType + "/marker" + rank + ".png";
    nIcon.imageOver = maps_baseURL + "maps/" +
        "icons/" + param_iconOverType + "/marker" + rank + ".png";
    nIcon.image = nIcon.imageOut; 
  } else { 
    nIcon.imageOut = maps_baseURL + "maps/" +
        "icons/" + param_iconType + "/blank.png";
    nIcon.imageOver = maps_baseURL + "maps/" +
        "icons/" + param_iconOverType + "/blank.png";
    nIcon.image = nIcon.imageOut;
  }


  markerOpts.icon = nIcon;
  markerOpts.title = title;		 
  var marker = new GMarker(point, markerOpts);
	
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);
  });
  GEvent.addListener(marker, "mouseover", function() {
    marker.setImage(marker.getIcon().imageOver);
  });
  GEvent.addListener(marker, "mouseout", function() {
    marker.setImage(marker.getIcon().imageOut);
  });
  GEvent.addListener(marker, "infowindowopen", function() {
    marker.setImage(marker.getIcon().imageOver);
  });
  GEvent.addListener(marker, "infowindowclose", function() {
    marker.setImage(marker.getIcon().imageOut);
  });
  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 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');
  document.documentElement.firstChild.appendChild(script);
}

setTimeout('cm_load()', 500); 

//]]>