var map;

function load()
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		GEvent.addListener(map, "moveend", loadMarkers);
		GEvent.addListener(map, "zoomend", loadMarkers);
		map.setCenter(new GLatLng(55.169438, 23.881275), 8); // Lithuania
	}
}

function loadMarkers()
{
	var bounds = map.getBounds();

	queryDBPedia(bounds.getSouthWest().lat(), bounds.getNorthEast().lat(), bounds.getSouthWest().lng(), bounds.getNorthEast().lng(), 100);
}

function queryDBPedia(southLat, northLat, westLng, eastLng, limit)
{
	var sparqler = new SPARQL.Service("http://www.guideservice.lt/sparql");
	//var sparqler = new SPARQL.Service("http://dbpedia.org/sparql");
	sparqler.setPrefix("geo", "http://www.w3.org/2003/01/geo/wgs84_pos#");
	sparqler.setPrefix("foaf", "http://xmlns.com/foaf/0.1/");

	var queryString = "SELECT ?place ?label ?description ?page ?lat ?lng ?picture WHERE {	?place geo:lat ?lat . ?place geo:long ?lng . ?place rdfs:label ?label . ?place foaf:page ?page . OPTIONAL { ?place rdfs:comment ?description FILTER(lang(?description) = '" + currentLang +"') } . OPTIONAL { ?place foaf:depiction ?picture } FILTER(xsd:float(?lat) >= " + southLat + " && xsd:float(?lat) <= " + northLat + " && xsd:float(?lng) >= " + westLng + " && xsd:float(?lng) <= " + eastLng + ") FILTER(lang(?label) = 'en')} ORDER BY ?label LIMIT " + limit;
//alert(queryString);
	var query = sparqler.createQuery();
	query.query(queryString, {failure: onFailure, success: addMarkers } );
}

function addMarkers(json)
{
	map.clearOverlays();

	for (var i = 0; i < json.results.bindings.length; i++)
	{
		var binding = json.results.bindings[i];
		//alert(binding.lat.value + " " + binding.lng.value);
		var latLng = new GLatLng(binding.lat.value, binding.lng.value);
		var marker = new GMarker(latLng);
		var infoHTML = "<h1>" + binding.label.value + "</h1><p>";
		if (binding.picture) infoHTML += "<img height=\"100\" width=\"100\" class=\"wrapped\" alt=\"" + binding.label.value + "\" src=\"" + binding.picture.value + "\"/>";
		if (binding.description) infoHTML += binding.description.value;
		infoHTML += "</p><p><a href=\"" + binding.page.value + "\">On Wikipedia</a>";
		marker.bindInfoWindowHtml(infoHTML);
		map.addOverlay(marker);
	}
}

function onFailure(resp, arg)
{
	//alert("HTTP error: " + resp.status);
	//if (resp.status == 400) {
}
