document.google_golf_map_markers = new Array();
document.google_golf_map = null;

var map, manager;
var centerLatitude = 44.232957, centerLongitude = -121.215013, startZoom = 9;
/* zoom level determ of markers, line 82 manager.addMarkers batch value  */

/* data pulled from line 87 JTG */
function createMarkerClickHandler(marker, name, address, photo, vidStatement, stat, link) {
	return function() {
		marker.openInfoWindowHtml(
			'<div class="googleMapBalloon">' + 
			  '<h3>' + name + '</h3>' +
			  '<div>' + photo +
			  ''+ address + '</div>' +
			  '<div style="clear: both"></div>' +
			  '<div class="vidStatement">'+ vidStatement + '</div>' +
			  '<h4>'+ stat + '</h4>' +
			  '<h5><a href="' + link + '">View Golf Course Details</a></h5>' + 
			'</div><div style="clear: both"></div>'
		);
		return false;
	};
}

var course_regions = [
	[44.064646702066305, -121.32476806640625, 12], /* Bend */
	[44.269788156801084,-121.20323181152344, 11], /* Redmond */ 
	[44.30622263719931,-121.58809661865234, 11], /* Sisters */ 
	[43.82951158879041, -121.4457893371582, 11], /* Sunriver - La Pine */ 
	[44.657413,-121.142073, 10], /* Jefferson County */ 
	[44.30444137538425, -120.81768035888672,12], /* Crook County - Prineville3 */
	[44.232957, -121.215013, 9] /* All */
];


function courseRegionList(region_area) {
	courseListByRegion(region_area);

	var target_region = course_regions[region_area];
	document.google_golf_map.setZoom(target_region[2]);	
	document.google_golf_map.panTo(new GLatLng(target_region[0], target_region[1]));	
}

function courseListByRegion(region_type) {
	var markers = document.google_golf_map_markers;
	if(markers == null) { return; }

	for(var markers_i = 0; markers_i < markers.length; markers_i++) {
		var marker = markers[markers_i];
		if(marker.region_type == region_type || region_type == 6) {
			marker.color_key.style.display = "block";
			marker.show();
		} else {
			marker.color_key.style.display = "none";
			marker.hide();
		}
	}
}

function courseSwapList(icon_types) {
	var markers = document.google_golf_map_markers;
	if(markers == null) { return; }

	var target_icon_types = new Object();
	for(var icon_types_i = 0; icon_types_i < icon_types.length; icon_types_i++) {
		var icon_type = icon_types[icon_types_i];
		icon_type = icon_type.replace(/^clr/, '');
		target_icon_types[icon_type] = true;
	}

	for(var markers_i = 0; markers_i < markers.length; markers_i++) {
		var marker = markers[markers_i];
		if(target_icon_types[marker.icon_type]) {
			marker.color_key.style.display = "block";
			marker.show();
		} else {
			marker.color_key.style.display = "none";
			marker.hide();
		}
	}
}

function createMarker(pointData) {
	var latlng = new GLatLng(pointData.latitude, pointData.longitude);
	
    var publicIcon = new GIcon();
	publicIcon.image = "/graphics/golfGuide/circGreenSmall.gif";
	publicIcon.shadow = "/graphics/golfGuide/circShadow.png";
	publicIcon.iconSize = new GSize(25, 25);
	publicIcon.shadowSize = new GSize(42, 32);
	publicIcon.iconAnchor = new GPoint(16, 16);
	publicIcon.infoWindowAnchor = new GPoint(25, 7);

	var semiIcon = new GIcon();
	semiIcon.image = "/graphics/golfGuide/circRedSmall.gif";
	semiIcon.shadow = "/graphics/golfGuide/circShadow.png";
	semiIcon.iconSize = new GSize(25, 25);
	semiIcon.shadowSize = new GSize(42, 32);
	semiIcon.iconAnchor = new GPoint(16, 16);
	semiIcon.infoWindowAnchor = new GPoint(25, 7);

	var privateIcon = new GIcon();
	privateIcon.image = "/graphics/golfGuide/circBlueSmall.gif";
	privateIcon.shadow = "/graphics/golfGuide/circShadow.png";
	privateIcon.iconSize = new GSize(25, 25);
	privateIcon.shadowSize = new GSize(42, 32);
	privateIcon.iconAnchor = new GPoint(16, 16);
	privateIcon.infoWindowAnchor = new GPoint(25, 7);
	
	var tricolorIcon = new GIcon();
	tricolorIcon.image = "/graphics/golfGuide/circTriColor.gif";
	tricolorIcon.shadow = "/graphics/golfGuide/circTriColorShadow.png";
	tricolorIcon.iconSize = new GSize(48, 48);
	tricolorIcon.shadowSize = new GSize(50, 50);
	tricolorIcon.iconAnchor = new GPoint(25, 25);
	tricolorIcon.infoWindowAnchor = new GPoint(25, 7);
	
	var icons = new Array();
	icons.push(publicIcon);
	icons.push(semiIcon);
	icons.push(privateIcon);
	icons.push(tricolorIcon);
	
	opts = {
		"icon": icons[pointData.icon],
		"clickable": true,
		"labelText": pointData.abbr,
		"labelOffset": new GSize(-16, -16)
	};
	var marker = new LabeledMarker(latlng, opts);
	var handler = createMarkerClickHandler(marker, pointData.name, pointData.address, pointData.photo, pointData.vidStatement, pointData.stat, pointData.wp, pointData.vidIcon);
	
	GEvent.addListener(marker, "click", handler); /* initiates balloon popup when clicking marker on map  */

	var listItem = document.createElement('li');
	    listItem.className = 'color'+pointData.icon+'';
		// alert('color'+pointData.icon+'');

	listItem.onmouseover = function() {
		listItem.className = 'color'+pointData.icon+'hov';
		// alert('"color'+pointData.icon+'hov"');
	 };
	
	listItem.onmouseout = function() {
		listItem.className = 'color'+pointData.icon+'';
		// alert('"color'+pointData.icon+'"');
	};
	
	listItem.setAttribute("name", "clr" + pointData.icon);
	listItem.innerHTML = '<a href="' + pointData.wp + '"><div class="courseName">'+ pointData.name +'</div><div class="courseNumber">'+ pointData.abbr + pointData.vidIcon +'</div><div style="clear: both"></div></a>';
	// listItem.getElementsByTagName('a')[0].onclick = handler; /* handler disabled so course list on right clicks through to wp variable instead of initiating balloon popup */
	document.getElementById('sidebar-list').appendChild(listItem);
	marker.color_key = listItem;
	
	return marker;
}

function windowHeight() {
	// Standard browsers (Mozilla, Safari, etc.)
	if (self.innerHeight)
		return self.innerHeight;
	// IE 6
	if (document.documentElement && document.documentElement.clientHeight)
		return document.documentElement.clientHeight;
	// IE 5
	if (document.body)
		return document.body.clientHeight;
	// Just in case. 
	return 0;
}

function ShowMeTheMap() {
	
	var map = new GMap(document.getElementById("map"));
	// map.addControl(new GSmallMapControl()); /* used GLargeMapControl for larger zoom control and map re-centering */
	map.addControl(new GLargeMapControl());
	map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
	map.addControl(new GMapTypeControl());

	var manager = new GMarkerManager(map);

	if(document.google_golf_map_markers == null) {
		return;
	}

	// sorting
	markers.sort(function(a, b) {
		var a_icon = a.icon;
		var b_icon = b.icon;
	
		var a_abbr = a.abbr;
		var b_abbr = b.abbr;
		
		var a_name = a.name;
		var b_name = b.name;
		
		if(a_abbr < 10) {
			a_abbr = "0" + a_abbr;
		}
		if(b_abbr < 10) {
			b_abbr = "0" + b_abbr;
		}
		
		a_abbr = "" + a_icon + a_abbr;
		b_abbr = "" + b_icon + b_abbr;

		// return (a_abbr > b_abbr) ? +1 : -1; /* sort course list by course number */
		return (a_name > b_name) ? +1 : -1; /* sort course list alphabetically */
		 
	});

	
	var batch = [];
	for(var id = 0; id < markers.length; id++ ) 
	{
		var marker = markers[id];
		if ( marker != undefined )
		{
			var labeled_marker = createMarker(marker);
			labeled_marker.icon_type = marker.icon;
			labeled_marker.region_type = marker.region;

			batch.push(labeled_marker);
			document.google_golf_map_markers.push(labeled_marker);
		}
	}
	manager.addMarkers(batch, 8); /* sets zoom level at which marker appear. 1 is fully zoomed out */
	manager.refresh();
	
	document.google_golf_map = map;
}


window.onload = ShowMeTheMap;
window.onunload = GUnload;

