//gmaps key: ABQIAAAAynoIQZ5YX-BdZ9UvBsREmBRpspDZe1yh_mQ_o-7IsG-MvknALBRgm_2mbKjwu9pOIdfAeEo3lccLkA

//load namespace
google.load("maps", "2");
//set load function 
google.setOnLoadCallback(initialize);

//global variables
var map;
var dCenter;
var dZoom;
var cZoom;
var mapControl;
var mapArea;
var maxLat;
var minLat;
var maxLng;
var minLng;

//icon variables
var redDot10;

//classes
function Wreck(id, name, lat, lng, type) {
	this.id = id;
	this.name = name;
	this.lat = lat;
	this.lng = lng;
	this.type = type;
}


//functions
function initialize() {
	dCenter = new google.maps.LatLng(42.827638636242284, -68.543701171875);
	dZoom = 7;
	cZoom = dZoom;
	mapArea = document.getElementById('mapArea');
	
	redDot10 = new google.maps.Icon();
	redDot10.image = 'media/images/dot_10x10_red.png';
	redDot10.shadow = '';
	redDot10.iconSize = new google.maps.Size(10, 10);
	redDot10.shadowSize = new google.maps.Size(0, 0);
	redDot10.iconAnchor = new google.maps.Point(5, 5);
	
	map = new google.maps.Map2(mapArea);
	map.setCenter(dCenter, dZoom);
	map.setMapType(G_HYBRID_MAP);
	map.addControl(new GMapTypeControl());
	map.addControl(new google.maps.LargeMapControl());
	displayMapStatus();
	 
	maxLat = map.getBounds().getNorthEast().lat();
	minLng = map.getBounds().getNorthEast().lng();
	minLat = map.getBounds().getSouthWest().lat();
	maxLng = map.getBounds().getSouthWest().lng();
	
	google.maps.Event.addListener(map, "moveend", function() {
			displayMapStatus();
		}
	);
	
	addMarkersAllWrecks();
}

function decToDeg(point) {
	var latD;
	var lngD;
	if(point.lat() >= 0) {
		latD = 'North';
	}
	else {
		latD = 'South';
	}
	if(point.lng() >= 0) {
		lngD = 'East';
	}
	else {
		lngD = 'West';
	}
	
	var lat = Math.abs(Math.round(point.lat() * 1000000));
	var lng = Math.abs(Math.round(point.lng() * 1000000));
	
	var output = (Math.floor(lat / 1000000) + '&deg; ' + Math.floor(((lat / 1000000) - Math.floor(lat / 1000000)) * 60)  + '\' ' +  (Math.floor(((((lat / 1000000) - Math.floor(lat / 1000000)) * 60) - Math.floor(((lat / 1000000) - Math.floor(lat / 1000000)) * 60)) * 100000) * 60/100000 ) + '&quot; ' + latD);
	output += ', ';
	output += (Math.floor(lng / 1000000) + '&deg; ' + Math.floor(  ((lng / 1000000) - Math.floor(lng / 1000000)) * 60)  + '\' ' +  (Math.floor(((((lng / 1000000) - Math.floor(lng /1000000)) * 60) - Math.floor(((lng / 1000000) - Math.floor(lng / 1000000)) * 60)) * 100000) *60/100000 ) + '&quot; ' + lngD);
	output += ' ' + point.toString();
	return output;
}

function displayMapStatus() {
	var status;
	status = 'Map center: ' + decToDeg(map.getCenter()) + '<br />';
	status += 'Northeast corner: ' + decToDeg(map.getBounds().getNorthEast()) + '<br />';
	status += 'Southwest corner: ' + decToDeg(map.getBounds().getSouthWest()) + '<br />';
																		   
	document.getElementById("mapStatus").innerHTML = status;
}

function resetMap() {
	zoomMap(dZoom);
	panMap(dCenter);
}

function zoomMap(level) {
	if(level < 7) {
		level = 7;
	}
	map.setZoom(level);
}

function panMap(point) {
	map.panTo(point);
}

function addMarkersAllWrecks() {
	google.maps.DownloadUrl("get_wrecks_all.php", function(data, responseCode) {
			var xml = google.maps.Xml.parse(data);
			var wrecks = xml.documentElement.getElementsByTagName("wreck");
			for(var i = 0; i < wrecks.length; i++) {
				var wreck = new Wreck(wrecks[i].getAttribute("id"), wrecks[i].getAttribute("name"), wrecks[i].getAttribute("lat"), wrecks[i].getAttribute("lng"), wrecks[i].getAttribute("type"));
				addWreckToMap(wreck);
			}
   		}
	);
}

function addWreckToMap(wreck) {
	var point = new google.maps.LatLng(parseFloat(wreck.lat), parseFloat(wreck.lng));
	var opts = new Object();
	opts.title = wreck.name;
	opts.icon = redDot10;
	var marker = new google.maps.Marker(point, opts);
	map.addOverlay(marker);
	google.maps.Event.addListener(marker, "click", function() {
			getWreckInfo(wreck.id);
		}
	);
}

function getWreckInfo(id) {
	var wreckArea = document.getElementById("wreckInfo");
	wreckArea.innerHTML = "<p><em>Loading wreck info ...</em></p>";
	var url = "get_wreck_info_by_id.php?id=" + id;
	google.maps.DownloadUrl(url, function(data, responseCode) {
		  wreckArea.innerHTML = data;
		}
	);
}