// Eventmap für brn.dresden.de

//Hier werden die verschiedenen Icons definiert
    var iconBlue = new GIcon(); 
    iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png';
    iconBlue.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconBlue.iconSize = new GSize(12, 20);
    iconBlue.shadowSize = new GSize(22, 20);
    iconBlue.iconAnchor = new GPoint(6, 20);
    iconBlue.infoWindowAnchor = new GPoint(5, 1);

    var iconRed = new GIcon(); 
    iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png';
    iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconRed.iconSize = new GSize(12, 20);
    iconRed.shadowSize = new GSize(22, 20);
    iconRed.iconAnchor = new GPoint(6, 20);
    iconRed.infoWindowAnchor = new GPoint(5, 1);

    var iconGreen = new GIcon(); 
    iconGreen.image = 'http://labs.google.com/ridefinder/images/mm_20_green.png';
    iconGreen.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconGreen.iconSize = new GSize(12, 20);
    iconGreen.shadowSize = new GSize(22, 20);
    iconGreen.iconAnchor = new GPoint(6, 20);
    iconGreen.infoWindowAnchor = new GPoint(5, 1);

    var customIcons = [];
    customIcons["Event"] = iconBlue;
    customIcons["Stand"] = iconRed;
    customIcons["Konzert"] = iconGreen;

    var newMarker;
    var map;
    var dateSelection;
    var inputForm;
    var valData;
    
    GDownloadUrl("new_event_form.php", function(data) {
		inputForm=data;   
    });	

    GDownloadUrl("new_event_val.xml", function(data) {
		valData=GXml.parse(data);   
    });

    function load() {
      if (GBrowserIsCompatible()) {
	// Die Map wird mit den Controls geladen
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(51.067738, 13.754707), 16);
        
        // Hier werden alle Events über den XMLGenerator aus der Datenbank gelesen
        dateSelection='%';
        loadEvents();
	
	// Anschließend folgt die Möglichkeit, neue Events hinzuzufügen
	GEvent.addListener(map, "click", function(overlay, latlng) {
	  if (overlay){
	    if (newMarker!=overlay && map.getInfoWindow()!=overlay){
		//falls auf ein vorhandenes Event geklickt wird, wird der neue Marker gelöscht
		map.removeOverlay(newMarker);
		}
	  }
	  if (latlng) {
	    if (newMarker) {
		//den alten löschen
		map.removeOverlay(newMarker);
	    }
            newMarker = new GMarker(latlng);
	    map.addOverlay(newMarker);
            var html = inputForm;
	    newMarker.openInfoWindow(html);
          }
        });
	
	// Falls ein Info-Window geschlossen wird, eventuell neues Event von der Karte nehmen
	GEvent.addListener(map.getInfoWindow(), "closeclick", function() {
		 if (newMarker) {
			map.removeOverlay(newMarker);
	    	}
	    }); 

      }
    }

    function createMarker(point, name, address, type, date, time, description, link) {     
      var marker = new GMarker(point, customIcons[type]);
      GEvent.addListener(marker, 'click', function() {
         var html = "<table style='width:350px;'>"+
			"<tr><td style='width:100px;'><b>Name</b></td><td>"+name+"</tr>"+
			"<tr><td><b>Typ</b></td><td>"+type+"</tr>"+
			"<tr><td><b>Adresse</b></td><td>"+address+"</tr>"+
			"<tr><td><b>Datum</b></td><td>"+date+"</tr>"+
			"<tr><td><b>Uhrzeit</b></td><td>"+time+"</tr>"+
			"<tr><td><b>Link</b></td><td><a href='"+link+"'>"+link+"</a></td></tr>"+
			"<tr><td style='vertical-align:top'><b>Beschreibung</b></td><td>"+description+"</tr>"+
			"<tr><td style='vertical-align:top'><b>Adminfunktion</b></td><td><a href='eventacp.php?jump=delete' target='_blank'>del</a> | <a href='eventacp.php?jump=edit' target='_blank'>Edit</a></tr>"+
		 "</table>"; 
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }

    function loadEvents() {
	map.clearOverlays();
        jx.load("event_genxml.php?date="+dateSelection,function(data){
         
          var markers = data.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute("name");
            var address = markers[i].getAttribute("address");
            var type = markers[i].getAttribute("type");
            var date = markers[i].getAttribute("date");
	    var time = markers[i].getAttribute("time");
	    var link = markers[i].getAttribute("link");
	    var description = str_replace( '&lt;br /&gt;'  , '<br />' , markers[i].getAttribute("description"));
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
            var marker = createMarker(point, name, address, type, date, time,    description, link);
            map.addOverlay(marker);
          }
        },'xml','get');
    }
    
    function setDateSelector(date){
	dateSelection=date;
	loadEvents();    
   }

   function checkAllFields() {
      var err="";
      var validations = valData.documentElement.getElementsByTagName("validation");
          for (var i = 0; i < validations.length; i++) {
            var required= validations[i].getAttribute("required");
            var elID = validations[i].getAttribute("elID");
            var descr= validations[i].getAttribute("descr");
            var inRow= validations[i].getAttribute("inRow");
	    var regex= validations[i].getAttribute("regex");
	    var example= validations[i].getAttribute("example");
	    err=err + checkField(required, elID, descr, inRow, regex, example);
          }
      if(err) {
              alert("Die folgenden Fehler bestehen: "+err);
              return false;
      } else {
              return true;
      }
   }

   function checkField(required, elID, descr, inRow, regex, example){
      var err;
      var regexp=new RegExp(regex);
      var value=document.getElementById(elID).value;
      if (value=="") {
	    if (required) {
                err="\n Bitte "+descr+" angeben!";
            }
      } else if (regex && !regexp.test(value)) {
               err="\n " + descr + " ist nicht im richtigen Format! Bsp. "+ example;  
      }
      if (err) {
          document.getElementById(inRow).className="wrongInput";
          return err;
      } else {
         document.getElementById(inRow).className="inputRow";
         return "";
     }
   }
   
    function checkAndSaveData() {
      if (checkAllFields()) {
        var name = document.getElementById("name").value;
        var address = document.getElementById("address").value;
        var type = document.getElementById("type").value;
        var latlng = newMarker.getLatLng();
        var lat = latlng.lat();
        var lng = latlng.lng();
        var date = document.getElementById("date").value;
        var time = document.getElementById("time").value;     
        var description = document.getElementById("description").value;
        var link = document.getElementById("link").value;
      	var url = "event_addrow.php";
      	var params = "?name=" + name + "&address=" + address +
                   "&type=" + type + "&lat=" + lat + "&lng=" + lng +
		   "&date=" + date + "&time=" + time + 
		   "&description=" + description + "&link=" + link;
      	jx.load(url+params,function(data){
		loadEvents();
      	},'text','post');
      }
    }