// JavaScript Document

var myMarkers = [];

function getSpotFromUser(id){
	map.clearOverlays();
	var url = '/api/user_spot_folder/';
	new Ajax.Request(url, {method: 'get', parameters: 'user=' + id, onComplete: setResponseToUserMap});
}

function setResponseToUserMap(req){
	var obj = eval('(' + req.responseText + ')');
	
	var map_bounds;
	
	for(var i = 0;i<obj.results.length;i++){
		var currentResult = obj.results[i];
		
		var myHtml = '<div id="baroon" style="font-size:75%; width:250px;">';
		myHtml += '<h4><a href="/spot_folder/show/' + currentResult.id + '">' + currentResult.title + '</a></h4>';
		myHtml += '<p>' + currentResult.desc + '</p>';
		
		var myPoint = new GLatLng(currentResult.lat, currentResult.lng);
		var myMarker = createMarker(myPoint, myHtml);
		map.addOverlay(myMarker);
		if(i == 0){
			map_bounds = new GLatLngBounds(myPoint);
		}else{
			map_bounds.extend(myPoint);
		}
	}
	var zoomlevel = map.getBoundsZoomLevel(map_bounds);
	if(zoomlevel > 10){
		map.setCenter(map_bounds.getCenter(), 10);
	}else{
		map.setCenter(map_bounds.getCenter(), zoomlevel);
	}
}

function getSpotFromSpotFolder(id){
	map.clearOverlays();
	var url = '/api/spot_folder_spots/';
	
	new Ajax.Request(url, {method: 'get', parameters: 'id=' + id, onComplete: setResponseToSpotFolderMap});
}

function setResponseToSpotFolderMap(req){
	var obj = eval('(' + req.responseText + ')');
	
	var map_bounds;
	for(var i = 0;i<obj.results.length;i++){
		var currentResult = obj.results[i];
		
		var myHtml = '<div id="baroon" style="font-size:125%; width:250px;">';
		myHtml += '<h4><a href="/spot/show/' + currentResult.id + '">' + currentResult.name + '</a></h4>';
		myHtml += '<p>' + currentResult.desc + '</p>';
		
		var myPoint = new GLatLng(currentResult.lat, currentResult.lng);
		var myMarker = createMarker(myPoint, myHtml);
		map.addOverlay(myMarker);
		if(i == 0){
			map_bounds = new GLatLngBounds(myPoint);
		}else{
			map_bounds.extend(myPoint);
		}
	}
	var zoomlevel = map.getBoundsZoomLevel(map_bounds);
	if(zoomlevel > 10){
		map.setCenter(map_bounds.getCenter(), 10);
	}else{
		map.setCenter(map_bounds.getCenter(), zoomlevel);
	}

}


function getSpotFromBounds(bounds){
	var bl = bounds.getSouthWest();
	var tr = bounds.getNorthEast();
	
	var blLat = bl.lat();
	var blLng = bl.lng();
	var trLat = tr.lat();
	var trLng = tr.lng();
	
	var url = '/api/spot/';
	
	new Ajax.Request(url, {method: 'get', parameters: 'bllat=' + blLat + '&bllng=' + blLng + '&trlat=' + trLat + '&trlng=' + trLng, onComplete: setResponseToSpotMap});
}

function setResponseToSpotMap(req){
	var obj = eval('(' + req.responseText + ')');
	
	var myBounds = map.getBounds();

	for(var i = 0;i<obj.results.length;i++){
		var currentResult = obj.results[i];


		for (var j = 0; j < myMarkers.length; j++){
			var myMarker = myMarkers[j];
			if(myMarker){
				var myMarkerPoint = myMarker.getPoint();
				if(!myBounds.contains(myMarkerPoint)){
					map.removeOverlay(myMarker);
					myMarkers[j] = null;
				}
			}
		}

		if(!(myMarkers[currentResult.id])){
			var myHtml = '<div id="baroon" style="font-size:125%; width:250px;">';
			myHtml += '<h4><a href="/spot/show/' + currentResult.id + '">' + currentResult.name + '</a></h4>';
			myHtml += '<p>' + currentResult.desc + '</p>';
			
			var myPoint = new GLatLng(currentResult.lat, currentResult.lng);
			myMarkers[currentResult.id] = createMarker(myPoint, myHtml);
			map.addOverlay(myMarkers[currentResult.id]);
		}
		
	}
}

function createMarker(point, html) {
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function removeMarker(id){
	if(myMarkers[id]){
		map.removeOverlay(myMarkers[id]);
		myMarkers[id] = null;
	}
}
