function getClosest(latitude, longitude) {
	// If we're zoomed in at all, look for cities.
	if (map.getZoom() > 3) {
        var citycoordinate = getClosestCity(latitude, longitude);
        if (citycoordinate) {
        	return citycoordinate;
        }
	}
	return getClosestWorldCoordinate(latitude, longitude);
}

function getClosestCity(latitude, longitude) {
    var currentmindistance = 70; // must be a min of 70 km away
    var mincoordinate = false;
    for (var i = 0; i < citycoordinates.length; i++) {
        var coordinate = citycoordinates[i];
        var dist = distance(coordinate[1], coordinate[2], latitude, longitude);
        if (dist < currentmindistance) {
            currentmindistance = dist;
        	mincoordinate = coordinate;
        }
    }
    return mincoordinate;
}

function getClosestWorldCoordinate(latitude, longitude) {
    var mincoordinate;
    var currentmindistance = 4000; // must be a min of x km away
    for (var i = 0; i < worldcoordinates.length; i++) {
        var coordinate = worldcoordinates[i];
        // first, check whether it is in bounds... then, calculate minimum distance.
        if (withinBounds(latitude, longitude, coordinate)) {
			var dist = distance(coordinate[1], coordinate[2], latitude, longitude);
			if (dist < currentmindistance) {
				currentmindistance = dist;
				mincoordinate = coordinate;
			}
		}
    }
    return mincoordinate;
}

// Checks to see whether this is in bounds.
function withinBounds(latitude, longitude, coordinate) {
	var minlatitude = coordinate[3];
	var minlongitude = coordinate[4];
	var maxlatitude = coordinate[5];
	var maxlongitude = coordinate[6];
	if (latitude > minlatitude && latitude < maxlatitude && longitude > minlongitude && longitude < maxlongitude) {
		return true;
	}
	else {
		return false;
	}
}

// from http://www.zipcodeworld.com/samples/distance.js.html
function distance(lat1, lon1, lat2, lon2) {
    var radlat1 = Math.PI * lat1/180
    var radlat2 = Math.PI * lat2/180
    var radlon1 = Math.PI * lon1/180
    var radlon2 = Math.PI * lon2/180
    var theta = lon1-lon2
    var radtheta = Math.PI * theta/180
    var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
    dist = Math.acos(dist)
    dist = dist * 180/Math.PI
    dist = dist * 60 * 1.1515
    dist = dist * 1.609344; // conversion to kilometers
    return dist
}

