
function drawAutoArrow (data, i) {
	// Get angle
	var theta = Math.atan2 ( data[i+1][1]-data[i-1][1] ,
				data[i+1][0] - data[i-1][0]);
				
	// Convert to 8 points of compas (0, 45, 90, 135 etc)
	if (theta < 0) {
			theta += 2 * Math.PI;
	}
	var angle =   ( ( (theta * 8) / (2 * Math.PI) ) | 0) * 45;
	
	var point = new YGeoPoint (data[i][0],data[i][1]);
	drawArrow(point,angle);
}

function createArrowMarker (point, angle) {
	var markerImage = new YImage("http://localhost:8080/GalwayNet/gr/marker/arrow-black-" + angle + ".png", new YSize(16,16));
	var marker = new YMarker(point, markerImage);
	return marker;
}

/**
 * Highlight the route of tour tourId. Remove any previous high lights.
 */
function highlightTour (tourId) {
	var i;
	
	// Selectively display greyed out tour routes
	if (tourId == "gc") {
		// Remove greyed routes when displaying Galway City tour
		for (i = 0; i < overlayN.length;i++) {
			map.removeOverlay(overlayN[i]);
			overlayN[i].x_visible=false;
		}
	} else {
		// Restore greyed out routes for other tours
		for (i = 0; i < overlayN.length;i++) {
			if (overlayN[i].x_visible==false) {
				map.addOverlay(overlayN[i]);
				overlayN[i].x_visible=true;
			}
		}
	}
		
	// Remove any highlighted segment
	for (i = 0; i < overlayH.length; i++) {
		map.removeOverlay(overlayH[i]);
		overlayH[i].x_visible=false;
	}
	
	// Highlight segments in tour tourId
	var tseg = tourSegments[tourId];
	for (i = 0; i < tseg.length; i++) {
		map.addOverlay(overlayH[tseg[i]]);
		overlayH[i].x_visible=true;
	}
	
	// Remove any arrow markers
	for (i = 0; i < overlayArrow.length; i++) {
		map.removeOverlay(overlayArrow[i]);
	}
	
	// Add arrow markers
	var arrowIds = tourArrows[tourId];
	for (i = 0; i < arrowIds.length; i++) {
		map.addOverlay(overlayArrow[arrowIds[i]]);
	}
	
	// Remove any POI markers
	for (var i = 0; i < overlayPOI.length; i++) {
		map.removeOverlay(overlayPOI[i]);
	}
	
	// Add POI markers (and relabel for sequential numbering) and POI TOC
	var pois = tourPOIs[tourId]; // List of POI ids
	var tocHtml = "<h2>Highlights</h2><ul>";
	var markerId, marker;
	var markerPoints = [];
	for (var i = 0; i < pois.length; i++) {
		markerId = pois[i];
		tocHtml += "<li>" +  (i+1) 
		+ ". <a href=\"javascript:poiClick(" + markerId + ");\">" 
		+ POI[pois[i]].name + "</a></li>";
		marker = overlayPOI[markerId];
		marker.reLabel(i+1);
		map.addOverlay(marker);
		
		markerPoints.push(marker.YGeoPoint);
	}
	tocHtml += "</ul>";
	document.getElementById("toc").innerHTML=tocHtml;

	// Pan map to center to tour route
	var bzc = map.getBestZoomAndCenter(markerPoints);
	map.setZoomLevel(bzc.zoomLevel);
	map.panToLatLon(bzc.YGeoPoint);
	
}


/**
 * Convert array of data (array of 2 element arrays) to array of YGeoPoint
 */
function toPointArray (data) {
	var pointArray = [];
	for (var i = 0; i < data.length; i++) {
		pointArray.push ( new YGeoPoint (data[i][0],data[i][1]));
	}
	return pointArray;
}


/** 
 * Create Point Of Interest Marker
 */
function createPoiMarker (poi,markerId) {
	var marker = new YMarker ( new YGeoPoint(poi.lat, poi.lon) , "m" + markerId );
	marker.addLabel(markerId);
	marker.addAutoExpand(poi.name);
	var html = "<div class=\"poi\">";
	html += "<h3>" + poi.name + "</h3>";
	
	// Image
	if (poi.img) {
		html += "<img src=\"assets/map_" + poi.img + ".tn.jpg\"";
		html += " alt=\"" + poi.name + "\"";
		if (poi.imgCredit) {
			html += " title=\"" + poi.imgCredit + "\" ";
		}
		html += "/>";
	}
	
	// Description	
	if (poi.desc) {
		html += poi.desc;
	}
	
	html += "</div>";
	YEvent.Capture(marker, EventsList.MouseClick, 
		function() {
			marker.openSmartWindow(html);
		}
	);
	marker.poiHtml = html;
	return marker;
}

function poiClick (markerId) {
	var marker = map.getMarkerObject ("m" + markerId);
	marker.openSmartWindow(marker.poiHtml);
}


