/*
Autor:   Thomas Konrad
Version: 2.0b
Datum:   09.01.2011
*/

var gm_marker, gm_map, gm_geocoder, gm_elevation, gm_finished, gm_timeout, gm_poly;
var gm_polygon = [
  new google.maps.LatLng(48.766667, 7.866667),
  new google.maps.LatLng(48.033333, 7.483333),
  new google.maps.LatLng(47.516667, 7.516667),
  new google.maps.LatLng(47.566667, 8.333333),
  new google.maps.LatLng(47.866667, 8.566667),
  new google.maps.LatLng(48.266667, 8.400000),
  new google.maps.LatLng(48.766667, 8.366667),

  new google.maps.LatLng(48.766667, 7.866667) //First one again
];

function gm_initialize()
{
  var options =
  {
    draggableCursor: 'pointer',
    draggingCursor: 'pointer',
    mapTypeControl: true,
    scaleControl: true,
    streetViewControl: false,
    center: new google.maps.LatLng(48.147767, 7.956850),
    zoom: 8,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  gm_map = new google.maps.Map($('map'), options);
  
  gm_geocoder = new google.maps.Geocoder();
  gm_elevation = new google.maps.ElevationService();

  gm_drawPolygon();

  google.maps.event.addListener(gm_map, 'click', function(event)
  {
    fb_alert('Fehler', 'Der von Ihnen ausgew&auml;hlte Ort befindet sich au&szlig;erhalb des Fachschaftsgebiet.<br /><br />Sollte der Kartenaussschnitt nicht den gew&uuml;nschten Ort anzeigen, so suchen Sie bitte nach einer nahegelegenen gr&ouml;&szlig;eren Stadt und ziehen Sie die Karte manuell zum Beobachtungsort.', 'Verstanden', 'fb_hide(1);');
  });

  google.maps.event.addListener(gm_poly, 'click', function(event)
  {
    meldung.setLoading(0);
    if (gm_marker)
      gm_marker.setMap(null);
    gm_newMarker(event.latLng);
    $('lat').value = gm_todecmin(event.latLng.lat(), ['N', 'S']);
    $('longi').value = gm_todecmin(event.latLng.lng(), ['E', 'W']);
    meldung.updateData('lat');
    meldung.updateData('longi');
    meldung.updateKoord(event.latLng);

    var positionalRequest =
    {
      'locations': new Array(event.latLng)
    };
    gm_elevation.getElevationForLocations(positionalRequest, function(results, status)
    {
      if (status == google.maps.ElevationStatus.OK)
      {
        window.clearTimeout(gm_timeout);
        gm_finished = true;
        $('alt').value = parseInt(results[0].elevation) + "m";
        meldung.updateData('alt');
      }
      else
        alert("Elevation service failed due to: " + status);
    });

    gm_finished = false;
    gm_timeout = window.setTimeout(function ()
    {
      fb_alert('Netzwerkfehler', 'Die Verbindung zum H&ouml;henserver konnte leider nicht hergestellt werden. Bitte &uuml;berpr&uuml;fen Sie Ihre Internetverbindung, sollte dort kein Fehler zu finden sein, versuchen Sie es bitte sp&auml;ter erneut. Sie werden nun zur Startseite weitergeleitet, alle bereits gespeicherten V&ouml;gel k&ouml;nnen beim n&auml;chsten Aufruf des Meldezentrums wieder geladen werden.<br />Sollte der Fehler h&auml;ufiger auftreten, benachrichtigen Sie bitte den Administrator (info@meldezentrum.fosor.de).', 'Verstanden', 'window.location.href = \'index.php\';');
    }, 30000);
    watch_pe = new PeriodicalExecuter(function () { watchLoader(new Array(gm_finished), function () { meldung.setLoading(1); }); }, 0.1);
  });
}

function gm_drawPolygon()
{
  var options =
  {
    paths: gm_polygon,
    map: gm_map,
    strokeColor: '#ffffff',
    strokeWeight: 0,
    strokeOpacity: 0,
    fillColor: '#ffffff',
    fillOpacity: 0
  };
  gm_poly = new google.maps.Polygon(options);
}

function gm_newMarker(point)
{
  var shape = 
  {
    coord: [0, 0, 20, 34],
    type: 'rectangle'
  };
  var options =
  {
    map: gm_map,
    position: point,
    flat: true,
    shape: shape
  };
  gm_marker = new google.maps.Marker(options);
}

function gm_todecmin(k, l)
{
  var vz = (k >= 0) ? l[0] : l[1];
  k = Math.abs(k);
  var deg = Math.floor(k);
  var min = (k - deg) * 60;
  min = Math.round(min * 1000) / 1000;
  return vz + ': ' + deg + String.fromCharCode(176) + ' ' + min + '\'';
}
