/*
 ©2008 raumbezug GbR
 Datum: 18.08.2008
 Autor: Torsten Teubert
*/


var iconPath = "grafiken/"; // Pfad zum Verzeichnis der Grafiken
var xmlPath = "xml/";       // Pfad zum Verzeichnis der XML-Dateien

/* Verbindung zum mapserver */
var mapfile = 'http://www.interaktive-karten.de/cgi-bin/mapserv?map=/var/vhosts_teubert/interaktive-karten.de/subdomains/mapserver/mapsanddata/maps/wvs/wvs.map&';


var gebiet_min_zoom = 9;    // Kleinste Zoomstufe für das Verbandsgebiet
var gebiet_max_zoom = 13;   // Größte Zoomstufe für das Verbandsgebiet
var gebiet_status = 0;      // First-Load Status 0=Overlay noch nicht der Karte hinzugefügt; 1=Overlay wurde der Karte hinzugefügt

var bau_min_zoom = 8;       // Kleinste Zoomstufe für die Baustellen
var bau_max_zoom = 19;      // Größte Zoomstufe für die Baustellen
var bau_status = 0;         // First-Load-Status für Baustellen

var standorte_min_zoom = 8; // Kleinste Zoomstufe für die Standorte
var standorte_max_zoom = 19;// Größte Zoomstufe für die Standorte
var standorte_status = 0;   // First-Load-Status für die Standorte


var gebiet_array = [];     // Liste mit Overlays des Verbandsgebiets
var bau_array = [];        // Liste mit Overlays der Baustellen
var standorte_array = [];  // Liste mit Overlays der Standorte

var map;

var maptype = 0;
var maptheme = 0;



/* Karte erstellen */
function showBaseMap(maptheme) {
 map = new GMap2(document.getElementById("map"));
 map.addControl(new GLargeMapControl());
 map.enableContinuousZoom();
 map.enableScrollWheelZoom();
 map.setCenter(new GLatLng(54.030, 9.150), 10);
 new GKeyboardHandler(map);

 //var kml = new GGeoXml(kmlPath+"gebiet_p.kmz?"+(new Date().getDate()));
 //var kml = new GGeoXml(kmlPath+"gebiet_p.kmz");
 var wms = makeWMSLayer("Versorgungsgebiet",mapfile,0.6);
 gebiet_array[0] = wms;


 if(maptheme==1){
  map.addOverlay(wms);
  gebiet_status = 1;
  var cb = document.getElementById("gebiet");
  cb.checked = true;
  aktivieren(cb);
  document.getElementById("cb_standorte").checked = false;
  document.getElementById("bau").checked = false;
 }

 if(maptheme==2){
  showPois(map);
  bau_status = 1;
  var cb = document.getElementById("bau");
  cb.checked = true;
  aktivieren(cb);
  document.getElementById("gebiet").checked = false;
  document.getElementById("cb_standorte").checked = false;
 }


 if(maptheme==3){
  showStandorte(map);
  standorte_status = 1;
  var cb = document.getElementById("cb_standorte");
  cb.checked = true;
  aktivieren(cb);
  document.getElementById("gebiet").checked = false;
  document.getElementById("bau").checked = false;
 }


 GEvent.addListener(map,"zoomend",function(oldLevel,newLevel){
  overlayVisibility("bau",bau_array,bau_min_zoom,bau_max_zoom,bau_status);
  overlayVisibility("gebiet",gebiet_array,gebiet_min_zoom,gebiet_max_zoom,gebiet_status);
  overlayVisibility("cb_standorte",standorte_array,standorte_min_zoom,standorte_max_zoom,standorte_status);
 });

 /* EventListener für das Abfragen der WMS-Layer  */
 GEvent.addListener(map, 'click', function(layer,latlng) {
   wmsLayerNames = checkVisibility();
     if(typeof(latlng)!='undefined'){
       if(layer!="nolayer"){
        getKoordinate(latlng,wmsLayerNames[0]);
       }
      }
 });

}


/* Overlay aus einem Mapfile erzeugen */
function makeWMSLayer(layer,mapfile,opacity){
 //WMS Layer
 var tile;
 tile = new GTileLayer(new GCopyrightCollection("WV Süderdithmarschen"),1,17);

 //Layer des Mapfiles
 tile.myLayers = layer;
 tile.myMercZoomLevel=5;
 tile.myFormat='image/png';

 //this is the address of your mapserver map
 //tile_roadless.myBaseURL= 'http://thewildwoodstudios.com/cgi-bin/mapserv?map=../roadlessland/maps/ira.map&';
 tile.myBaseURL=mapfile;

 //Funktion aus dem Skript wms236.js
 tile.getTileUrl=CustomGetTileUrl;

 //this specifies the opacity of your layer
 tile.getOpacity = function() {return opacity;}

 //WMS hinzufügen
 var MapserverLayer = new GTileLayerOverlay(tile);

 return MapserverLayer;
}


/* Koordinaten für getFeature-Abfrage ermitteln. GetFeature-Abfrage ausführen und
   das Ergebnis in einem InfoFenster darstellen */
function getKoordinate(latlng,layers) {

 var zm = map.getZoom();
 if(zm < 8) {
  zm=8;
 }
 var url = 'lat='+latlng.lat()+'&lng='+latlng.lng()+'&z='+zm+'&layers='+layers;
 var urlstr = 'php/coord2tile.php?q=1&' + url;
 GDownloadUrl(urlstr,function(doc) {
  var result2 = doc;
  info = "<p style='font-size:10pt;'>Gemeinde</p><p style='font-size:12pt;'><b>"+result2+"</b></p>";

  if(result2.length>1){
   map.openInfoWindow(latlng, info);
  }
 });
}


/* Prüfen, ob ein WMS-Layer sichtbar ist */
function checkVisibility(){
 var wmsLayerNames = new Array();
 var wmsOverlays = new Array();
 var c = 0;

 var cb_gebiet = document.getElementById("gebiet");

 if(cb_gebiet.checked == true){
  wmsLayerNames[c] = "Versorgungsgebiet";
  wmsOverlays[c] = gebiet_array[0];
  c=c+1;
 }

 return new Array(wmsLayerNames,wmsOverlays);

}


/* Marker mit InfoFenster erzeugen */
function createMarker(p,i,html,info,z){

 var marker = new GMarker(p,{icon:i,title:info,zIndexProcess:order});
 function order(marker,b){
  return GOverlay.getZIndex(marker.getPoint().lat())+z*10000;
 }

  GEvent.addListener(marker, "click", function() {
      marker.openInfoWindowHtml(html);
     });
 return marker;
}

/* Marker mit InfoFenster und Reitern erzeugen */
function createTabMarker(p,i,text,text2,info,z){
 var infoTabs = new Array(
 new GInfoWindowTab("Außenstelle",text),
 new GInfoWindowTab("Klärwerk", text2)
 );

 var marker = new GMarker(p,{icon:i,title:info,zIndexProcess:order});
  function order(marker,b){
  return GOverlay.getZIndex(marker.getPoint().lat())+z*10000;
 }

 GEvent.addListener(marker, "click", function() {
 marker.openInfoWindowTabsHtml(infoTabs);
 });
 return marker;
}

/* Sichtbarkeit der Layer */
function overlayVisibility(id,list,min,max,status){
 var cb = document.getElementById(id);

 if(status==0 && id=="gebiet" && cb.checked == true){
   for(i=0;i < list.length; i++){
    //map.addOverlay(list[i]);
   }
   gebiet_status = 1;
  }

 if(status==0 && id=="bau" && cb.checked == true){
   showPois(map);
   bau_status = 1;
 }

 if(status==0 && id=="cb_standorte" && cb.checked == true){
   showStandorte(map);
   standorte_status = 1;
 }

 if(cb.checked == false){
  for(i=0;i < list.length; i++){
    if(id=="gebiet"){
     map.removeOverlay(list[i]);
    }else{
     list[i].hide();
    }
  }
 }else{
   if(map.getZoom() <= max && map.getZoom() >= min){
    for(i=0;i < list.length; i++){
     if(id=="gebiet"){
      map.removeOverlay(list[i]);
      map.addOverlay(list[i]);
     }else{
      list[i].show();
     }
     aktivieren(cb);
    }
   }else{
    //alert("Die Zoomstufe reicht nicht aus um diesen Layer anzuzeigen");
    //cb.checked = false;
    for(i=0;i < list.length; i++){
     if(id=="gebiet"){
      map.removeOverlay(list[i]);
     }else{
      list[i].hide();
     }
     deaktivieren(cb);
    }
   }
 }
}

/*Checkbox aktivieren bzw. deaktivieren in Abhängigkeit von der Zoomstufe*/
function aktivieren(cb){
 cb.removeAttribute("disabled",true);
}

function deaktivieren(cb){
 cb.setAttribute("disabled",true);
}


/* Icons Laden */
function iconPoi(n){
 var icon = new GIcon();
 icon.image = iconPath+"icon_"+n+".png";
 if(n=="aussenstelle"){
   icon.iconSize = new GSize(50, 35);
 }else{
   icon.iconSize = new GSize(35, 35);
 }

 icon.iconAnchor = new GPoint(17, 17);
 icon.infoWindowAnchor = new GPoint(17, 17);
 return icon;
}

/* Zwischen den Kartenansichten wechseln */
function switchMaptype(map_type){
 if(map_type==1){
  map.setMapType(G_HYBRID_MAP);
 }
 if(map_type==0){
  map.setMapType(G_NORMAL_MAP);
 }
}


/* Baustellen Informationen aus XML-Datei auslesen und darstellen */
function showPois(map){
  var rqPoi = GXmlHttp.create();
  rqPoi.open("GET", xmlPath+"poi.xml?date="+new Date(), true);

  rqPoi.onreadystatechange = function() {

   if (rqPoi.readyState == 4) {
    var xmlPoi  = rqPoi.responseXML;
    var poi   = xmlPoi.getElementsByTagName("poi");


    for(var i=0; i< poi.length; i++)
        {
         var id    = poi[i].getElementsByTagName("id")[0].firstChild.nodeValue;
         var lat   = poi[i].getElementsByTagName("lat")[0].firstChild.nodeValue;
         var lon   = poi[i].getElementsByTagName("lon")[0].firstChild.nodeValue;
         var name  = poi[i].getElementsByTagName("name")[0].firstChild.nodeValue;
         var strasse  = poi[i].getElementsByTagName("strasse")[0].firstChild.nodeValue;
         var date  = poi[i].getElementsByTagName("date")[0].firstChild.nodeValue;
         var grund = poi[i].getElementsByTagName("grund")[0].firstChild.nodeValue;

         var point = new GLatLng(lat, lon);

          var icon = iconPoi("baustelle");
          var html =  "<div style=\"width:300px;top:5px;\">";
          html += "<h1>"+name+"</h1>";
          html += "<p style='font-size:10pt;'>"+strasse+"</p>";
          html += "<p style='margin-top:5px;'><b>Grund der Bauarbeiten:</b></p>";
          html += "<p>"+grund+"</p>";
          html += "<p style='margin-top:3px;'><b>Zeitraum:</b></p>";
          html += "<p>"+date+"</p>";
          html += "</div>";

          info = name+" - "+strasse;
          var marker = createMarker(point,icon,html,info,200);

          bau_array[i] = marker;
          map.addOverlay(marker);
          //marker.hide();


        }
   }


 }
 rqPoi.send(null);

}

/* Standorte des Verbandes aus XML-Datei lesen und darstellen */
function showStandorte(map){
  var rqStandorte = GXmlHttp.create();
  rqStandorte.open("GET", xmlPath+"standorte.xml", true);

  rqStandorte.onreadystatechange = function() {

   if (rqStandorte.readyState == 4) {
    var xmlStandorte  = rqStandorte.responseXML;
    var Standorte   = xmlStandorte.getElementsByTagName("poi");

    for(var i=0; i< Standorte.length; i++)
        {
         var id    = Standorte[i].getElementsByTagName("id")[0].firstChild.nodeValue;
         var lat   = Standorte[i].getElementsByTagName("y")[0].firstChild.nodeValue;
         var lon   = Standorte[i].getElementsByTagName("x")[0].firstChild.nodeValue;
         var typ  = Standorte[i].getElementsByTagName("typ")[0].firstChild.nodeValue;
         var name  = Standorte[i].getElementsByTagName("name")[0].firstChild.nodeValue;
         var name2  = Standorte[i].getElementsByTagName("name2")[0].firstChild.nodeValue;
         var order  = Standorte[i].getElementsByTagName("order")[0].firstChild.nodeValue;
         var text  = Standorte[i].getElementsByTagName("text")[0].firstChild.nodeValue;
         var text2  = Standorte[i].getElementsByTagName("text2")[0].firstChild.nodeValue;

         var point = new GLatLng(lat, lon);

         switch (typ) {
          case "Wasserwerk":
           var iconname = "wasserwerk";
           break;
          case "Hauptstelle":
           var iconname = "hauptstelle";
           break;
          case "Aussenstelle":
           var iconname = "aussenstelle";
           break;
          case "Klaerwerk":
           var iconname = "klaerwerk";
           break;
          case "Hochbehaelter":
           var iconname = "hochbehaelter";
           break;
         default:
           var iconname = "";
           break;
         }

         var icon = iconPoi(iconname);

         if(id != 3){
           var html =  "<div style=\"width:300px;top:15px;\">";
           html += "<h1>"+name+"</h1>";
           html += text;
           html += "</div>";
           var marker = createMarker(point,icon,html,name,order);
         }else{
           var textA =  "<div style=\"width:300px;top:15px;\">";
           textA += "<h1>"+name+"</h1>";
           textA += text;
           textA += "</div>";
           var textB = "<div style=\"width:300px;top:15px;\">";
           textB += "<h1>"+name2+"</h1>";
           textB += text2;
           textB += "</div>";
           var title = name+" / "+name2;
           var marker = createTabMarker(point,icon,textA,textB,title,order);
         }

          standorte_array[i] = marker;
          map.addOverlay(marker);


        }
   }


 }
 rqStandorte.send(null);

}
