function processMarkers(xmlcontent) {
  markerMng = new GMarkerManager(map, {maxZoom:19});
  $(xmlcontent).find('markerset > mapmarker').each(
  	function() {
  		var nam = $(this).find('name').text();
  		var lat = $(this).find('latitude').text();
  		var lng = $(this).find('longitude').text();
  		var minzoom = $(this).find('minzoomlevel').text();
  		var maxzoom = $(this).find('maxzoomlevel').text();
  		var htmlcontent = jxml2html($(this).find('contenuto')); // trasforma xml in html
  		var icon = $(this).find('icon').text();
  		var id = $(this).attr('source');
  		var categoria = $(this).attr('categoria');
    	getMarker(nam, id, categoria, lat, lng, minzoom, maxzoom, htmlcontent, icon);
  	}
  );
};

/*
 * Estrae html da un oggetto jquery contenente xml
 * e restituisce un node html standard
*/
function jxml2html(jxmldata) {
	var xmlstring = '';
	if (window.ActiveXObject) {
		xmlstring = jxmldata[0].xml;
	} else {
		xmlstring = (new XMLSerializer()).serializeToString(jxmldata[0]);
	}
	xmlstring = xmlstring.replace('<'+jxmldata[0].tagName+'>','<div>').replace('<\/'+jxmldata[0].tagName+'>','</div>');
	return $(xmlstring)[0];
};

function getMarker(nam, id, categoria, lat, lng, minzoomlevel, maxzoomlevel, htmlcontent, icon) {
	var marker = null;
	var minzoom = parseInt(minzoomlevel);
	var maxzoom = parseInt(maxzoomlevel);
	var iconNode = new GIcon();
	iconNode.image = icon;
	iconNode.shadow = "/marker_shadow.png";
	iconNode.iconSize = new GSize(12, 20);
	iconNode.shadowSize = new GSize(12, 20);
	iconNode.iconAnchor = new GPoint(12, 20);
	iconNode.infoWindowAnchor = new GPoint(12, 2);
	marker = new GMarker(new GLatLng(lat, lng), iconNode);
  GEvent.addListener(marker, 'click', function() {
		if (onClickHandle==null) marker.openInfoWindowHtml(htmlcontent, infoOpts);
  });
  marker.source = id;
  marker.category = categoria;
  markerMng.addMarker(marker, minzoom, maxzoom);
  return marker;
};

function enableAddNewMarker() {
	if (onClickHandle==null) {
		newMarker = null;
		onClickHandle = GEvent.addListener(map, "click",
			function(marker, point) {
				GEvent.removeListener(onClickHandle);
				onClickHandle = null;
				$('input#latitude').val(point.lat());
				$('input#longitude').val(point.lng());
				$('select#minzoomlevel').val(map.getZoom());
				$('select#maxzoomlevel').val(map.getZoom()+4);
				$('#categoria').val(mapcategory);
				$('#contenuto').val('');
				$('select#icon').val('/marker_red.png');
				$('div#newmarker').slideDown();
				$('input#name').val('').focus();
				newMarker = getMarker('', '', mapcategory, point.lat(), point.lng(), map.getZoom(), (map.getZoom()+4), '', '/marker_red.png');
			}
		);
	}
}

function enableRemoveMarker() {
	if (onClickHandle==null) {
		onClickHandle = GEvent.addListener(map, "click",
			function(marker, point) {
				if (marker) {
					if (window.confirm('Confermare l\'operazione?')) {
						$.get('action-remove-marker?source='+marker.source, function(xml) {
							if ($("program-error", xml).text()=='') {
								GEvent.removeListener(onClickHandle);
								onClickHandle = null;
								map.removeOverlay(marker);
							} else {
								alert($("program-error", xml).text());
							}
						});
					}
				} else {
					GEvent.removeListener(onClickHandle);
					onClickHandle = null;					
				}
			}
		);
	}
}

$(document).ready(function() {
			
	infoOpts = new Object();
	infoOpts.maxWidth = maxWidth;
	infoOpts.maxHeight = maxHeight;

	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		var ovcontrol = new GOverviewMapControl(new GSize(150,150)); 
    map.addControl(ovcontrol);
		map.enableScrollWheelZoom();
		map.setCenter(new GLatLng(parseFloat(defaultLatitude), parseFloat(defaultLongitude)), parseInt(defaultZoom));
		GEvent.addListener(map, 'dblclick', function(a, point) {
			map.setCenter(point, (map.getZoom()+3));
		});
		$.get('action-invoke?xq=mapmarkers&source=' + markerSource, processMarkers);
		
		// figure geoxml
		for (var i=0; i<geoxml.length; i++) {
			map.addOverlay(new GGeoXml('http://'+location.host+':'+location.port+'/download/'+geoxml[i]));
		}
	}
	$('#newmarkerform').ajaxForm(function(xml) { 
		alert($("message, program-error", xml).text());
		$('#newmarker').slideUp();
	}); 
});
