window.onunload = GUnload;

if (GBrowserIsCompatible()) {
      // this variable will collect the html which will eventually be placed in the side_bar
      var side_bar_html = "";
    
      // arrays to hold copies of the markers used by the side_bar
      var gmarkers = [];


      // This function picks up the click and opens the corresponding info window
      function myclick(i) {
        GEvent.trigger(gmarkers[i], "click");
      }
      
      
	    function showAddress(address) {
	      if (geocoder) {
	        geocoder.getLatLng(
	          address,
	          function(point) {
	            if (!point) {
	              alert(address + " not found");
	            } else {
	              map.setCenter(point, 13);
	              /*var marker = new GMarker(point);
	              map.addOverlay(marker);
	              marker.openInfoWindowHtml(address);*/
	            }
	          }
	        );
	      }
	    }


      // create the map
      var map = new GMap2(document.getElementById("map"));
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
      map.setCenter(new GLatLng( 50.700,10.300), 4);

			var geocoder = new GClientGeocoder();
			
			var icon_rot = new GIcon(G_DEFAULT_ICON, "http://www.dancing24.com/fileadmin/images/marker_rot.png");
			var icon_orange = new GIcon(G_DEFAULT_ICON, "http://www.dancing24.com/fileadmin/images/marker_orange.png");

			function onMapMove() {
          var bounds = map.getBounds();
					side_bar_html = "";

          for (var mrk = 0; mrk < markers.length; mrk++) {
          	if(markers[mrk]) {
	            // obtain the attribues of each marker
	            var lat = parseFloat(markers[mrk].getAttribute("lat"));
	            var lng = parseFloat(markers[mrk].getAttribute("lng"));
	            var point = new GLatLng(lat,lng);
	            var label = markers[mrk].getAttribute("datum") + ", " + markers[mrk].getAttribute("ort") + ": " + markers[mrk].getAttribute("titel");
	            // create the html output for the list
	            if( bounds.containsLatLng(point) ) {
	            	// create the sidebar content
	            	side_bar_html += '<a href="javascript:myclick(' + mrk + ')">' + label + '</a><br>';
	            }
						}
          }



          // put the assembled side_bar_html contents into the side_bar div
          document.getElementById("side_bar").innerHTML = side_bar_html;
      }
         
      GEvent.addListener(map, "moveend", onMapMove );      
      

			function onSingleRightClick(point, source, overlay) {
				var mylatlng = map.fromContainerPixelToLatLng(point);
				var mylat = mylatlng.lat();
				var mylng = mylatlng.lng(); 
				var marker = new GMarker(mylatlng);
				map.addOverlay(marker);
				marker.openInfoWindowHtml(lngtext["js_crTurnier"]+" <a href='javascript:;' onclick=\"window.open('"+createTurnierURL+"&lat="+(mylat)+"&lng="+(mylng)+"','feedit','width=500,height=700,status=0,menubar=0')\">"+lngtext["js_crTurnierLink"]+"</a>");
				GEvent.addListener(marker, "infowindowclose", function() { map.removeOverlay(this); });

			}
		
			GEvent.addListener(map, "singlerightclick", onSingleRightClick );


			/*GEvent.addListener(map, "click", function() {
					var center = map.getCenter();
          alert(center.toString());
      });*/

			



      // Read the data from example.xml
      var request = GXmlHttp.create();
      var markers = null;
      var events = null;
      
      function getXMLdata() {
				map.clearOverlays();    	
				
      	
	      request.open("GET", dbURL, true);
	      request.onreadystatechange = function() {
	        if (request.readyState == 4) { 
	          var xmlDoc = GXml.parse(request.responseText);
	          // obtain the array of markers and loop through it
	          markers = xmlDoc.documentElement.getElementsByTagName("marker");
	         
	          
	          for (var i = 0; i < markers.length; i++) {
	            // obtain the attribues of each marker
	            
	            // skip if filtered
	            if(parseInt(document.filter.monat.value) > 0 && parseInt(document.filter.monat.value) != parseInt(markers[i].getAttribute("monat")) ) 
	            	{ markers[i].setAttribute("lat",999); continue; }
	            if(parseInt(document.filter.jahr.value) > 0 && parseInt(document.filter.jahr.value) != parseInt(markers[i].getAttribute("jahr")) ) 
	            	{ markers[i].setAttribute("lat",999); continue; }
	            
	            var lat = parseFloat(markers[i].getAttribute("lat"));
	            var lng = parseFloat(markers[i].getAttribute("lng"));
	            var point = new GLatLng(lat,lng);
	            
	            var marker_events = markers[i].getElementsByTagName("event");
	            
	            // create the html content of info box, and save the marker id
	            var marker_html = "<b>" + markers[i].getAttribute("titel") + "</b><br/>" + markers[i].getAttribute("datum") + ", " + markers[i].getAttribute("ort") + 
	            									'<br/><table width="400" cellspacing="0" cellpadding="2">';
	            									
	            var num_of_events = 0;
	            for (var j = 0; j < marker_events.length; j++) {
	            	//skip
		            if(parseInt(document.filter.tanzart.value) > 0 && parseInt(document.filter.tanzart.value) != parseInt(marker_events[j].getAttribute("t")) ) continue;
		            if(parseInt(document.filter.gruppe.value) > 0 && parseInt(document.filter.gruppe.value) != parseInt(marker_events[j].getAttribute("g")) ) continue;
		            if(parseInt(document.filter.klasse.value) > 0 && parseInt(document.filter.klasse.value) != parseInt(marker_events[j].getAttribute("k")) ) continue;
	            	
	            	
	            	num_of_events++;
	            	marker_events[j].setAttribute("marker", i);
	            	marker_html += "<tr><td>" + marker_events[j].getAttribute("tanzart") + "</td><td>" + marker_events[j].getAttribute("gruppe") +"</td><td>" + marker_events[j].getAttribute("klasse") + 
	            									"</td><td align='right'><a href='javascript:;' onclick=\"window.open('"+showErgebnisURL+"&ergebnis="+(marker_events[j].getAttribute("uid"))+
	            									"','feedit','width=500,height=700,status=0,menubar=0,scrollbars=1')\"><img src='http://www.dancing24.com/fileadmin/images/eye_0.gif' alt='' title='"+lngtext["js_anzeigen"]+"' /></a></td></tr>"+
	            									"<tr class=\"linetwo\"><td colspan=\"4\">" + marker_events[j].getAttribute("pos1") +"</td></tr>";
	            }
	            if(markers[i].getAttribute("zukunft")==0)
	            	marker_html += "<tr><td colspan=\"4\"><a href='javascript:;' onclick=\"window.open('"+createErgebnisURL+"&turnier="+(markers[i].getAttribute("uid"))+
	            									"','feedit','width=500,height=700,status=0,menubar=0,scrollbars=1')\">"+lngtext["js_crErgebnis"]+"</a></td></tr></table>"
	            
	            
	            // this are all events
	            events = xmlDoc.documentElement.getElementsByTagName("event");
	            /*TODO: sort events by date */
	
	
							if(num_of_events || parseInt(document.filter.tanzart.value)+parseInt(document.filter.gruppe.value)+parseInt(document.filter.klasse.value)==0 ) // events vorhanden oder kein filter
							{
		            // create the marker
		            if(markers[i].getAttribute("zukunft")==1) var marker = new GMarker(point, icon_orange );
		            else var marker = new GMarker(point, icon_rot );
		            map.addOverlay(marker);
		
								// bind html text to marker
		            marker.bindInfoWindowHtml(marker_html);
		            
				        // save the info we need to use later for the side_bar
				        gmarkers[i] = marker;
				      }
				      else
				      {
				      	markers[i].setAttribute("lat",999);
				      }
	          }
	
	          onMapMove();	// call it to create side bar content
	        }
	      }
	      request.send(null);
    	}
    	
    	getXMLdata();
}

else {
  alert("Sorry, the Google Maps API is not compatible with this browser");
}

