var map = null;
var infoWindow = null;

// keep track of highlight for devices without mouse
var highlighted = null;
var iw = null;

var hStyle = {
  fillColor: '#883333',
  fillOpacity: 0.35,
  strokeColor: '#FF0000',
  strokeWeight: 3,
  zIndex: 100,
  strokeOpacity: .5

};
var style = {
  fillColor: '#333388',
  fillOpacity: 0.35,
  strokeColor: '#FFFFFF',
  strokeWeight: 3,
  strokeOpacity: 0,
  zIndex: 0
};


$(document).ready(function() {
	if(document.getElementById("map_canvas") != null) {
		var myOptions = {
			zoom : 11,
			center : new google.maps.LatLng(39.97329336691881, -82.98781095022309),
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			streetViewControl: true 
		};

		map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
		infoWindow = new google.maps.InfoWindow();
		
		var url = 'http://arcserver.morpc.org/ArcGIS/rest/services/morpc/COGmapservice/MapServer';
		var dynamap = new gmaps.ags.MapOverlay(url, {opacity: 1});
		//dynamap.setMap(map);
		var trailHeads = new gmaps.ags.MapOverlay('http://arcserver.morpc.org/ArcGIS/rest/services/morpc/Trailheads/MapServer/0', {opacity:1});
		
		
		google.maps.event.addListenerOnce(dynamap.getMapService(), 'load', function() {
			dynamap.setMap(map);
			var service = dynamap.getMapService();
			for(var i = 0; i < service.layers.length; i++) {
				if(i == 0)
					service.layers[i].visible = true;
				else
					service.layers[i].visible = false;
			}
		});
	}
});

function createCOGMarker(badge, name, color, summary, type, length, permalink)
{
	var options = {
		icon : badge,
		map: map,
		title:name
	};
	
	var gmarker = new google.maps.Marker(options);
	gmarker.setMap(map);
	
	google.maps.event.addListenerOnce(gmarker, 'mouseover', function(e) {
		var contentString = "<div style='min-height:150px;'><h2 style='text-transform:uppercase;' >";
		contentString = contentString + "<a href='"+permalink+"' class='headline' style='color:"+color+";'>"+name+"</a></h2>";
		contentString = contentString + "<p>"+summary+"<br /><strong>Length:</strong> "+length+"<br /><strong>Type:</strong> "+type+"</p>";
		contentString = contentString + "<p><a href='"+permalink+"'>more info</a></p>";
		contentString = contentString +"</div>";
		infoWindow.close();

		infoWindow.setPosition(this.latLng);
		infoWindow.setContent(contentString);
		infoWindow.open(map, this);
	});
	
	google.maps.event.addListenerOnce(gmarker, 'click', function(e) {
		var contentString = "<div style='min-height:150px;'><h2 style='text-transform:uppercase;' >";
		contentString = contentString + "<a href='"+permalink+"' class='headline' style='color:"+color+";'>"+name+"</a></h2>";
		contentString = contentString + "<p>"+summary+"<br /><strong>Length:</strong> "+length+"<br /><strong>Type:</strong> "+type+"</p>";
		contentString = contentString + "<p><a href='"+permalink+"'>more info</a></p>";
		contentString = contentString +"</div>";
		infoWindow.close();

		infoWindow.setPosition(this.latLng);
		infoWindow.setContent(contentString);
		infoWindow.open(map, this);
	});
	
	return gmarker;
}

function createMarker(options) {
	var marker = new google.maps.Marker(options);
	marker.setMap(map);
	return marker;
}

function createTrailMarker(latLng)
{
	var options = {
		//icon : badge,
		map: map,
		position:latLng
	};
	
	var marker = new google.maps.Marker(options);
	marker.setMap(map);
	
	google.maps.event.addListenerOnce(marker, 'click', function(e) {
		var contentString = "<a href='http://maps.google.com/?q=" + latLng + "'>Directions to this trailhead</a>";
		infoWindow.close();
		infoWindow.setPosition(marker.latLng);
		infoWindow.setContent(contentString);
		infoWindow.open(map, marker);
	});
	
	return marker;
}

function getCOGTrails(route, routeColor, marker)
{
	
	var lineStyle = {
	  fillColor: routeColor,
	  fillOpacity: 0,
	  strokeColor: routeColor,
	  strokeWeight: 3,
	  strokeOpacity: 0,
	  zIndex: 100
	};
	
	var routename = route.split(' ')[0];
	
	var url = "http://arcserver.morpc.org/ArcGIS/rest/services/morpc/COGmapservice/MapServer";
	var layer = new gmaps.ags.Layer(url + '/0');
	var params = {
		returnGeometry: true,
		where: "ROUTENAME LIKE '%" + routename + "%'",
		outFields: ['ROUTENAME'],
		overlayOptions: lineStyle
	};	
	layer.query(params, function(rs) {
		var fs = rs.features;
		for(var i = 0; i < fs.length; i++) {
			setupFeature(fs[i]);
		}
		
		var midIndex = Math.floor(fs.length / 2);
		var latLng = getPolyLineCenter(fs[midIndex].geometry[0]);
		marker.setPosition(latLng);
	});

}

function getCOGTrailHeads()
{
	var lineStyle = {
	  fillColor: '#000000',
	  fillOpacity: 0.00,
	  strokeColor: '#000000',
	  strokeWeight: 3,
	  strokeOpacity: 0.00,
	  zIndex: 100
	};
	
	var url = "http://arcserver.morpc.org/ArcGIS/rest/services/morpc/Trailheads/MapServer";
	var layer = new gmaps.ags.Layer(url + '/0');
	var params = {
		returnGeometry: true,
		where: "OBJECTID LIKE '%'",
		overlayOptions: lineStyle
	};	
	layer.query(params, function(rs) {
		var fs = rs.features;
		for(var i = 0; i < fs.length; i++) {
			var g = fs[i].geometry[0].position;
			createTrailMarker(g);
		}
	});
}

function processResultSet(rs)
{
	var fs = rs.features;
	for(var i = 0; i < fs.length; i++) {
		setupFeature(fs[i]);
	}
}

function fireMarker(marker)
{
	map.setCenter(marker.latLng);
	google.maps.event.trigger(marker,'click');
	return false;
}

function setupFeature(feat)
{

	var a = feat.attributes;
	var html = "<div><b>" + a['ROUTENAME'] + "</b></div>";
	var g = feat.geometry[0];
	g.setMap(map);
}

function getPolyLineCenter(poly) {
  var paths, path, latlng;
  var lat = 0;
  var lng = 0;
  var c = 0;
  paths = poly.getPath();
  for (var j = 0, jc = paths.getLength(); j < jc; j++) {
    path = paths.getAt(j);
	lat += path.lat();
	lng += path.lng();
	c++;
  }
  if (c > 0) {
    return new google.maps.LatLng(lat / c, lng / c);
  }
  return null;
}

function highlight(g, html, latlng) {
  if (highlighted) {
    highlighted.setOptions(style);
  }
  g.setOptions(hStyle);
  highlighted = g;
  if (!iw) {
    iw = new google.maps.InfoWindow({
      content: html,
      position: latlng,
      maxWidth: 240
    });
  } else {
    iw.setContent(html);
    iw.setPosition(latlng);
  }
  iw.open(map);
}
