var kanga_markers = null;
var map;
var kmarker = null;

function KangaMarker(latlng) {

    this.base_icon = new GIcon();
    this.base_icon.iconSize = new GSize(40, 40);
    this.base_icon.iconAnchor = new GPoint(9, 34);
    this.base_icon.infoWindowAnchor = new GPoint(9, 2);
    this.lettered_icon = new GIcon(this.base_icon);
    //this.lettered_icon.image = '/images/avatar_default_small.png';
    
    
    this.gmarker = new GMarker(latlng, { icon:this.lettered_icon } );
    
}


function save_new_marker_data() {
    save_marker_data(kmarker);
}

function update_marker_data(i) {
    save_marker_data(kanga_markers[i]);
}



function update_marker(kanga_markers,i) {
    var html = null;

    if(kanga_markers[i].edit_mode == 'read_only') {
	html = 
	    "<table width=260><tr>" +
	    "<td align=top><a href=/profiles/"+ kanga_markers[i].profile_id +"><img style=\"float:left;padding-right:6px\" src=\""+kanga_markers[i].lettered_icon.image+"\">"+
	    kanga_markers[i].profile_name + "</a>" + 
	    "<br><b>"+ tr_description + ":</b> " + kanga_markers[i].comment 
	    "</td>"+
	    "</tr></table>";

    } else {
	html = "<div style=\"padding:8px\"><table cellpadding=5 width=260>" +
	"<tr><td style=\"vertical-align:top;padding-right:8px\">"+ tr_description +":</td><td colspan=2><textarea name='map_comment' id='map_comment'>"+kanga_markers[i].comment+"</textarea></td></tr>" +
	"<tr><td></td><td><input style=\"background-color:#ffffff\" type='button' value='"+tr_save_changes+"' onclick='update_marker_data("+i+")'/></td>" +
	"<td><input style=\"background-color:#ffffff\" type='button' value='"+tr_remove_location+"' onclick='remove_marker("+i+")'></td></tr>" +
	"</table></div>";

    }
    GEvent.addListener(kanga_markers[i].gmarker, "mouseover", function() {
	    this.openInfoWindowHtml(html);
	});
}


function save_marker_data(kmarker) {
    var comment = document.getElementById("map_comment").value;
    var latlng = kmarker.gmarker.getLatLng();
    var lat = latlng.lat();
    var lng = latlng.lng();
    
    var url = "/locations/add?comment=" + comment + "&lat=" + lat + "&lng=" + lng;
    GDownloadUrl(url, function(data, responseCode) {
	    if (responseCode == 200 && data.match("Location added.")) {
		
		document.getElementById("map_message").innerHTML = tr_location_was_added;
		
	    } else if(responseCode == 200 && data.match("Location updated.")) {
		
		document.getElementById("map_message").innerHTML = tr_location_was_updated;
		
	    } else {
		
		document.getElementById("map_message").innerHTML = tr_error_location_was_not_added;
		
	    }
	    
	    kmarker.gmarker.closeInfoWindow();
	    db_resync();
	});
}

function redraw_markers(map,kanga_markers) {
    map.clearOverlays();
    
    for(var i = 0; i< kanga_markers.length; i++) {
	
	update_marker(kanga_markers,i);
	
	map.addOverlay(kanga_markers[i].gmarker);
	
    }
}  


function remove_marker(i) {
    var latlng = kanga_markers[i].gmarker.getLatLng();
    var lat = latlng.lat();
    var lng = latlng.lng();
    
    var url = "/locations/remove?lat=" + lat + "&lng=" + lng;
    GDownloadUrl(url, function(data, responseCode) {
	    if (responseCode == 200 && data.match("Location removed.")) {
		
		document.getElementById("map_message").innerHTML = tr_location_was_removed;
		
	    } else {
		
		document.getElementById("map_message").innerHTML = tr_error_location_was_not_removed;
		
	    }
	    
	    kanga_markers[i].gmarker.closeInfoWindow();
	    db_resync();
	});
    
}


function db_resync() {
    GDownloadUrl('/locations/list/'+profile_id, function(data, responseCode) {
	    
	    kanga_markers = new Array();
	    
	    var array = data.split(/\n/);
	    var j = 0;
	    for(var i = 0; i < array.length; i++ ) {
		var str = array[i].match(/BEGIN.*/);
		if(str) {
		    var str2 = (''+str).match(/-{0,1}\d+.\d+SePaRaToRiXuS-{0,1}\d+.\d+SePaRaToRiXuS.*/);
		    var a = (''+str2).split("SePaRaToRiXuS");
		    var lat = a[0];
		    var lng = a[1];

		    kanga_markers[j] = new KangaMarker(new GLatLng(lat,lng,false));
		    kanga_markers[j].comment = a[2];
		    kanga_markers[j].lettered_icon.image = a[3];
		    kanga_markers[j].profile_id = a[4];
		    kanga_markers[j].profile_name = a[5];
		    kanga_markers[j].edit_mode = a[6];
		    j++;
		}
	    }
	    redraw_markers(map,kanga_markers);
	});
}


function initialize() {
      
    
    
    if (GBrowserIsCompatible()) {
	
	map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(starting_location_lat, starting_location_lng), 6);
        var mapTypeControl = new GMapTypeControl();
        var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
        var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,10));
        map.addControl(mapTypeControl, topRight);
        GEvent.addListener(map, "dblclick", function() {
		map.removeControl(mapTypeControl);
		map.addControl(new GMapTypeControl(), bottomRight);
	    });
        map.addControl(new GSmallMapControl());
	
        GEvent.addListener(map, "click", function(overlay, latlng) {
		if (latlng) {
		    
		    
		    if(kmarker) {
			map.removeOverlay(kmarker.gmarker);
		    }
		    
		    kmarker = new KangaMarker(latlng);
		    

		    if (adding_points_enabled) {
			var html = "<div style=\"padding:8px\"><table>" +
			    "<tr><td style=\"padding:5px\">"+tr_description+":</td><td colspan=2 style=\"vertical-align:top\"><textarea name='comment' id='map_comment'/></textarea></tr>" +
			    "<tr><td></td><td style=\"text-align:right\"><input style=\"background-color:#ffffff\" type='button' value='"+tr_add_location+"' onclick='save_new_marker_data()'/></td></tr>" +
			    "</table></div>";
		    } else {
			var html = "<div style=\"padding:10px\">" +tr_you_have_to_be_logged_to_add_points + "</div>"; 
			
		    }
		    
		    map.addOverlay(kmarker.gmarker);
		    kmarker.gmarker.openInfoWindow(html);
		    
		}
	    });
	
	
	
    }
    
    db_resync();
}


function focus_on(lat,lng,zoom) {
    map.setCenter(new GLatLng(lat,lng),zoom);
}