$(document).ready(function() {
	var PolygonArray = new Array();
	var PointArray = new Array();
	var MarkerArray = new Array();
	var AutoPopulating = false;
	var MapListener = null;
	var CancelListener = null;
	var PlacingPolygon = false;
	var PlacingPoint = false;

	if ($('#CourseId').val() != '') {
		$('#canvas').jmap('init', {
				'mapType': 'sat',
				'mapZoom': 16,
				'mapCenter': [$('#CourseLatitude').val(), $('#CourseLongitude').val()]
			}, function (map, element, options) {}
		);
	} else {
		$('#canvas').jmap('init', {
				'mapType': 'sat',
				'mapZoom': 4,
				'mapCenter': [38, -97]
			}, function (map, element, options) {}
		);
	}

	HoleSelect();

	$('.PolygonApprove').click(function() {
		var PolygonId = $(this).parent().parent().attr('PolygonId');

		if ($(this).is(':checked')) {
			Mapifies.MapObjects.Get('#canvas').addOverlay(PolygonArray[PolygonId]);
			$(this).parent().parent().find('.PolygonLock').attr('checked', true);
			$(this).parent().parent().find('.PolygonStatus').val(2);
		} else {
			$('#canvas').jmap('RemovePolygon', PolygonArray[PolygonId]);
			$(this).parent().parent().find('.PolygonLock').attr('checked', false);
			$(this).parent().parent().find('.PolygonStatus').val(0);
		}
	});

	$('.PolygonLock').click(function() {
		var PolygonId = $(this).parent().parent().attr('PolygonId');

		if ($(this).is(':checked')) {
			Mapifies.MapObjects.Get('#canvas').addOverlay(PolygonArray[PolygonId]);
			$(this).parent().parent().find('.PolygonApprove').attr('checked', true);
			$(this).parent().parent().find('.PolygonStatus').val(2);
		} else {
			$(this).parent().parent().find('.PolygonStatus').val(1);
		}
	});

	$('.TeeboxApprove').click(function() {
		var TeeboxColor = $(this).parent().parent().attr('TeeboxColor');

		if ($(this).is(':checked')) {
			$('#canvas').jmap('AddMarker', MarkerArray[TeeboxColor], function(object, options) {
				PointArray[TeeboxColor] = object;
			});

			$(this).parent().parent().find('.TeeboxLock').attr('checked', true);
			$(this).parent().parent().find('.TeeboxStatus').val(2);
		} else {
			$('#canvas').jmap('RemoveMarker', PointArray[TeeboxColor]);
			$(this).parent().parent().find('.TeeboxLock').attr('checked', false);
			$(this).parent().parent().find('.TeeboxStatus').val(0);
		}
	});

	$('.TeeboxLock').click(function() {
		var TeeboxColor = $(this).parent().parent().attr('TeeboxColor');

		if ($(this).is(':checked')) {
			$('#canvas').jmap('AddMarker', MarkerArray[TeeboxColor], function(object, options) {
				PointArray[TeeboxColor] = object;
			});

			$(this).parent().parent().find('.TeeboxApprove').attr('checked', true);
			$(this).parent().parent().find('.TeeboxStatus').val(2);
		} else {
			$(this).parent().parent().find('.TeeboxStatus').val(1);
		}
	});

	function HoleSelect() {
		var CourseId = $('#CourseId').val();
		var HoleNumber = $('#HoleNumber').val();

		AutoPopulating = true;

		$.ajax({
			dataType: 'xml',
			url: '/courses/hole/' + CourseId + '/' + HoleNumber,

			'success': function(xml) {
				var flagpoint = null;
				var teepoint = null;

				$('#HoleId').val($(xml).find('id:first').text());

				if ($(xml).find('flag:first').find('point').length > 0) {
					var geonode = $(xml).find('flag:first').find('point');

					flagpoint = new GLatLng(geonode.attr('lat'), geonode.attr('lng'));
					PlacePoint('Flag', flagpoint);
				}

				$(xml).find('teeboxes:first').find('teebox').each(function() {
					var TeeboxColor = $(this).find('color').text();
					var TeeboxGeo = $(this).find('point');

					if ((TeeboxGeo.attr('lat')) && (TeeboxGeo.attr('lng'))) {
						PlacePoint(TeeboxColor, teepoint = new GLatLng(TeeboxGeo.attr('lat'), TeeboxGeo.attr('lng')));
					}
				});

				if (flagpoint && teepoint) {
					var midpoint = FindMidpoint(flagpoint, teepoint);
					$('#canvas').jmap('MoveTo', {'mapType': 'sat', 'mapZoom': 17, 'mapCenter': [midpoint.lat(), midpoint.lng()]});
				} else if (flagpoint) {
					$('#canvas').jmap('MoveTo', {'mapType': 'sat', 'mapZoom': 17, 'mapCenter': [flagpoint.lat(), flagpoint.lng()]});
				} else if (teepoint) {
					$('#canvas').jmap('MoveTo', {'mapType': 'sat', 'mapZoom': 17, 'mapCenter': [teepoint.lat(), teepoint.lng()]});
				}

				AutoPopulating = true;

				$(xml).find('polygons:first').find('overlay').each(function() {
					var PolygonId = $(this).find('id').text();
					var PolygonType = $(this).find('type:first').text();
					var PolygonColor = GetPolygonColor(PolygonType);
					var PolygonPoints = new Array();

					PolygonArray[PolygonId] = true;

					$(this).find('polygon').each(function() {
						$('#Polygon' + PolygonId + 'Type').val($(this).attr('type'));

						$(this).find('point').each(function() {
							PolygonPoints.push(new GLatLng($(this).attr('lat'), $(this).attr('lng')));
						});
						
						PolygonArray[PolygonId] = new GPolygon(PolygonPoints, PolygonColor, 2, 0.8, PolygonColor, 0.5);
						Mapifies.MapObjects.Get('#canvas').addOverlay(PolygonArray[PolygonId]);
					});
				});

				AutoPopulating = false;

				$('#Command').html('Approve Selected Polygons');
			}
		});

		AutoPopulating = false;
	}

	function FindMidpoint(PointX, PointY) {    
		return new GLatLng(
			(parseFloat(PointX.lat()) + parseFloat(PointY.lat())) / 2,
			(parseFloat(PointX.lng()) + parseFloat(PointY.lng())) / 2
		);
	}

	function PlaceFlag(MyPolygon) {
		var latsum = 0;
		var lngsum = 0;

		for (var i = 0; i < MyPolygon.getVertexCount(); i++) {
			var MyPoint = MyPolygon.getVertex(i);
			
			latsum = latsum + MyPoint.lat();
			lngsum = lngsum + MyPoint.lng();
		}

		PlacePoint('Flag', new GLatLng(latsum / MyPolygon.getVertexCount(), lngsum / MyPolygon.getVertexCount()));
	}

	function PlacePoint(TeeboxColor, MyPoint) {
		if (PointArray[TeeboxColor]) {
			PointArray[TeeboxColor].setLatLng(MyPoint);
		} else {
			var MarkerIcon = new GIcon(G_DEFAULT_ICON);

			if (TeeboxColor == 'Flag') {
				MarkerIcon.image = '/img/ct_icons_flag.png';
				MarkerIcon.iconSize = new GSize(24, 24);
				MarkerIcon.shadow = '/img/ct_flag_shadow.png';
				MarkerIcon.shadowSize = new GSize(36, 24);
				MarkerIcon.iconAnchor = new GPoint(7, 24);

				var marker = {
					'pointLatLng':  [MyPoint.lat(), MyPoint.lng()],
					'pointIsDraggable': false,
					'pointIcon': MarkerIcon
				};

				$('#canvas').jmap('AddMarker', marker, function(object, options) {
						MarkerArray[TeeboxColor] = marker;
						PointArray[TeeboxColor] = object;
					}
				);
			} else {
				MarkerIcon.image = '/img/ct_teebox_' + TeeboxColor.toLowerCase() + '.png';
				MarkerIcon.iconSize = new GSize(24, 24);
				MarkerIcon.shadow = '/img/ct_tee_shadow.png';
				MarkerIcon.shadowSize = new GSize(36, 24);
				MarkerIcon.iconAnchor = new GPoint(11, 19);

				var marker = {
					'pointLatLng':  [MyPoint.lat(), MyPoint.lng()],
					'pointIsDraggable': false,
					'pointIcon': MarkerIcon
				};

				$('#canvas').jmap('AddMarker', marker, function(object, options) {
						MarkerArray[TeeboxColor] = marker;
						PointArray[TeeboxColor] = object;
					}
				);
			}
		}
	}

	function GetPolygonColor(PolygonType) {
		switch(PolygonType) {
			case 'Green': return '#a0ff55';
			case 'Fairway': return '#59c737';
			case 'Water': return '#1e63ff';
			case 'Sand': return '#fffdbb';
			case 'Woods': return '#006600';
			case 'Stone': return '#666666';
		}
	}
});