
function init(){

  town = new GLatLng(51, 11);

  gmap = new GMap2(document.getElementById("map"));

  gmap.addControl(new GSmallMapControl());
  //map.addControl(new GMapTypeControl());
  //gmap.addControl(new GOverviewMapControl());

  gmap.setCenter(town, 7, G_HYBRID_MAP);

  var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0, '(<a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>)');
  var copyrightCollection = new GCopyrightCollection('<a href="http://www.openstreetmap.org/">OSM</a>');
  //var copyrightCollection = new GCopyrightCollection();
  copyrightCollection.addCopyright(copyright);

  var tilelayers_mapnik = new Array();
  tilelayers_mapnik[0] = new GTileLayer(copyrightCollection, 0, 18);
  tilelayers_mapnik[0].getTileUrl = GetTileUrl_Mapnik;
  tilelayers_mapnik[0].isPng = function () { 
    return true;
  };
  tilelayers_mapnik[0].getOpacity = function () { 
    return 1.0;
  };
  var mapnik_map = new GMapType(tilelayers_mapnik, new GMercatorProjection(19), "Mapnik", {
    urlArg: 'mapnik',
    linkColor: '#000000'
  });
  gmap.addMapType(mapnik_map);
  gmap.setMapType(mapnik_map);

  GEvent.addListener(gmap,"zoomend",function(oldzoom,newzoom) {
    if (newzoom == 18) {
      gmap.setZoom(17);
    }
  });
}

function activateObject(idObject) {

  // Link des Objekt ermitteln
  var link = agent.call('Modules/Rundblick/jsinc.php','getLink','',idObject);

  if (link != "") {
    location.href = "http://"+link;
  } else {
    alert("Dieses Portal befindet sich noch im Aufbau.");
  }
}

//function reloadPage(idCategory) {
//  // falls ein Objekt markiert ist, dann dieses demarkieren
//  var first = $("#objects div[id='object']:first-child");
//  first.children().removeClass("active");
//
//  // Den alten Link demarkieren
//  $("li[class='aobjlink']").attr("class", "objlink");
//
//  // Details beim ehemals Aktiven einklappen
//  hideDetails($("div[id='objcontent_down'][idobject='"+first.attr("idobject")+"']"),first.attr("idobject"));
//
//  // Alle Objekte nach Ranking sortieren
//  $("div[id='object']").sortElements(function(a, b){
//    return $(a).attr("ranking") < $(b).attr("ranking") ? 1 : -1;
//  });
//
//  // Alle Marker neu laden
//  loadGMarker(idCategory, 0);
//}

function toggleObjects(idUCategory) {
  // Objekte ein- oder ausblenden
  $("div[id='object'][iducat='"+idUCategory+"']").toggle();
  // Marker ein- oder ausblenden
  toggleMarkerGroup(idUCategory);

  // Kategorie der Unterkategorie ermitteln
  //  var idCategory = agent.call('Modules/Rundblick/jsinc.php','getCategoryOfUCategory','',idUCategory);
  // Alle Marker neu laden
  //  loadGMarker(idCategory, 0);
  //
  // Zoomstufe einstellen dass alle Standorte sichtbar sind
  zoomMap();
}

//function activateMarker(idObject) {
//  // alle Marker mit grauen Icon ausser von idObject
//
//  for (var i = 0; i < marker.length; i++) {
//    var gmdata = marker[i];
//
//    if (gmdata[3] == idObject || idObject == 0) {
//      gmdata[5].setImage("WebPictures/pin_green.png");
//    } else {
//      gmdata[5].setImage("WebPictures/pin_grey.png");
//    }
//
//    if (gmdata[3] == idObject) {
//      gmap.setCenter(gmdata[5].getLatLng(),gmap.getBoundsZoomLevel(gmap.getBounds()));
//      gmap.panTo(gmdata[5].getLatLng());
//      gmap.setZoom(17);
//    }
//
//  }
//}

function toggleMarkerGroup(type) {
  if (markerGroups[type] != undefined) {
    for (var i = 0; i < markerGroups[type].length; i++) {
      var marker = markerGroups[type][i];
      if (marker.isHidden()) {
        marker.show();
      } else {
        marker.hide();
      }
    }
  }
}

function zoomMap() {
  var bound = new GLatLngBounds();

  if (marker.length > 0) {

    for (var i = 0; i < marker.length; i++) {
      var gmdata = marker[i];

      if (!gmdata[5].isHidden()) {
        var latlng = new GLatLng(gmdata[1], gmdata[0]);
        bound.extend(latlng);
      }
    }

    gmap.setCenter(bound.getCenter());
    gmap.setZoom(gmap.getBoundsZoomLevel(bound));
  }
}

//function toggleDetails(id) {
//
//  var details = $("div[id='objcontent_down'][idobject='"+id+"']");
//
//  if (details.attr("toggled") == "false") {
//    showDetails(details, id);
//  } else {
//    hideDetails(details, id);
//  }
//
//  dheight();
//}
//
//function showDetails(details, id) {
//
//  var height = details.outerHeight();
//
//  $("div[id='objcontent'][idobject='"+id+"']").css("height", 100+height);
//
//  details.attr("toggled","true");
//  details.slideDown();
//}
//
//function hideDetails(details, id) {
//
//  $("div[id='objcontent'][idobject='"+id+"']").css("height", 100);
//
//  details.attr("toggled","false");
//  details.hide();
//}

function removeGMarker() {
  mgr.clearMarkers();
}

function loadGMarker(idCategory, idObject) {

  marker = new Array();
  markerGroups = {};

  mgr = new MarkerManager(gmap);
  
  var str = agent.call('Modules/Rundblick/jsinc.php','getMapLabels','',idCategory);

  var gmarker = str.split("|");
  
  for (i = 0; i < gmarker.length; i++) {

    var gmdata = gmarker[i].split(";");

    var marker_icon = new GIcon();
    
    if (gmdata[3] == idObject || idObject == 0) {
      marker_icon.image = "WebPictures/pin_green.png";
    } else {
      marker_icon.image = "WebPictures/pin_grey.png";
    }

    marker_icon.iconSize = new GSize(20, 20);
    marker_icon.iconAnchor = new GPoint(10, 10);

    var beck = new GMarker(new GPoint(gmdata[0], gmdata[1]),
    {
      id: gmdata[3],
      icon: marker_icon,
      title:gmdata[2],
      zIndexProcess: function() {
        return 200;
      }
    });

    gmdata[5] = beck;

    // jeden Marker in einer Liste speichern
    marker.push(gmdata);

    // Falls Unterkategorie noch nicht als Array existiert
    if (markerGroups[gmdata[4]] == undefined) {
      markerGroups[gmdata[4]] = new Array();
    }

    // jeden Marker in einer Liste nach Kategorien speichern
    markerGroups[gmdata[4]].push(beck);

    GEvent.addListener(beck, "click", function() {
      activateObject(this.id);
    });

    gmap.addOverlay(beck);
  //mgr.addMarker(beck, 3);
  //mgr.refresh();

  }

  // Zoomstufe einstellen dass alle Standorte sichtbar sind
  zoomMap(idCategory);

}

function loadObjectGMarker(lat, lng) {

  var marker_icon = new GIcon();
  marker_icon.image = "WebPictures/pin_green.png";
  marker_icon.iconSize = new GSize(20, 20);
  marker_icon.iconAnchor = new GPoint(10, 10);

  var marker = new GMarker(new GPoint(lng, lat),
  {
    draggable: true,
    icon: marker_icon,
    zIndexProcess: function() {
      return 200;
    }
  });

  GEvent.addListener(gmap, "click", function(overlay, latlng) {
    
    marker.setLatLng(latlng); 
    
    $("input[name='lat']").val(marker.getLatLng().lat());
    $("input[name='lng']").val(marker.getLatLng().lng());
  });

  google.maps.Event.addListener(marker, "dragstart", function() {
    slat = marker.getLatLng().lat();
    slng = marker.getLatLng().lng();
  });

  google.maps.Event.addListener(marker, "drag", function() {
    $("input[name='lat']").val(marker.getLatLng().lat());
    $("input[name='lng']").val(marker.getLatLng().lng());
  });

  gmap.addOverlay(marker);
}

//function geolocateObject() {
//
//  var street = $("input[name='street']").val();
//  var pc = $("input[name='postalcode']").val();
//  var town = $("input[name='town']").val();
//
//  var str = agent.call('Modules/Rundblick/jsinc.php','geolocateObject','',street, pc, town);
//  var gmdata = str.split(";");
//
//  $("input[name='lat']").val(gmdata[0]);
//  $("input[name='lng']").val(gmdata[1]);
//
//  gmap.clearOverlays();
//  loadObjectGMarker(gmdata[0], gmdata[1]);
//}

function GetTileUrl_Mapnik(a, z) {
  return "http://tile.openstreetmap.org/" + z + "/" + a.x + "/" + a.y + ".png";
}

function jumpTo(lon, lat, zoom) {
  var x = Lon2Merc(lon);
  var y = Lat2Merc(lat);
  gmap.setCenter(new OpenLayers.LonLat(x, y), zoom);
  return false;
}

function Lon2Merc(lon) {
  return 20037508.34 * lon / 180;
}

function Lat2Merc(lat) {
  var PI = 3.14159265358979323846;
  lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / (PI / 180);
  return 20037508.34 * lat / 180;
}

//function getCirclePoints(center,radius){
//  var circlePoints = Array();
//
//  with (Math) {
//    //var rLat = (radius/3963.189) * (180/PI) * 1.609344; // miles
//    var rLat = (radius/10000) * (180/PI) * 1.609344; // kilometers
//    var rLng = rLat/cos(center.lat() * (PI/180));
//
//    for (var a = 0 ; a < 361 ; a++ ) {
//      var aRad = a*(PI/180);
//      var x = center.lng() + (rLng * cos(aRad));
//      var y = center.lat() + (rLat * sin(aRad));
//      var point = new GLatLng(parseFloat(y),parseFloat(x),true);
//      circlePoints.push(point);
//    }
//    }
//
//  return circlePoints;
//}


