
var gdir;
var coords;

/*
 * zeigt die Map an
 */
function showMap(point, address){
  
  coords = point;
  
  if (!point) {
    alert("Adresse konnte leider nicht gefunden werden!");
  } else {

    var map = new GMap2(document.getElementById("map")); 
    gdir = new GDirections(map, document.getElementById("directions"));
    GEvent.addListener(gdir, "load", onGDirectionsLoad);
    GEvent.addListener(gdir, "error", handleErrors);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.enableScrollWheelZoom();
    map.setCenter(coords, 13);

    var marker = new GMarker(coords, new GIcon(G_DEFAULT_ICON, '/res/pics/marker.gif'));
    map.addOverlay(marker);
    marker.openInfoWindowHtml(address);
    
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(address);
      });
  }
}

function createMarker(coords, address){
  var marker = new GMarker(coords, new GIcon(G_DEFAULT_ICON, '/res/pics/marker.gif'));
      
      GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(address);
      });
  return marker;
}

function showPartnerMap(coordsp, address){
  if (!coordsp) {
    alert("Adresse konnte leider nicht gefunden werden!");
  } else {

    var map = new GMap2(document.getElementById("map_partner")); 

    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.enableScrollWheelZoom();
    map.setCenter(new GLatLng(48.287948, 14.291312) , 6);

    for(var i = 0; i < coordsp.length; i++){

      map.addOverlay(createMarker(coordsp[i], address[i]));

    }
  }
}


   
/*
 * zeigt die kleine Map an
 */ 
function showSmallMap(point, address){
  if (!point) {
    alert("Adresse konnte leider nicht gefunden werden!");
  } else {
    var map = new GMap2(document.getElementById("map_small")); 
    map.enableScrollWheelZoom();
    map.setCenter(point, 13);
    var marker = new GMarker(point, new GIcon(G_DEFAULT_ICON, '/res/pics/marker.gif'));
    map.addOverlay(marker);
  }
}

/*
 * zeigt die Map an
 */
function showAdminMap(point, address){
  
  coords = point;
  
  if (!point) {
    alert("Adresse konnte leider nicht gefunden werden!");
  } else {
    var map = new GMap2(document.getElementById("map")); 
    gdir = new GDirections(map, document.getElementById("directions"));
    GEvent.addListener(gdir, "load", onGDirectionsLoad);
    GEvent.addListener(gdir, "error", handleErrors);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());
    map.enableScrollWheelZoom();
    map.setCenter(coords, 13);
    
    var marker = new GMarker(coords, new GIcon(G_DEFAULT_ICON, '/res/pics/marker.gif'));
    map.addOverlay(marker);
    GEvent.addListener(map, "click", 
            function(overlay,  point) {
            marker.setPoint(point);
            document.getElementById('coords').value = point.lat() + ", " + point.lng();
            }
    );
    map.openInfoWindowHtml(map.getCenter(), address);
  }
}

/*
 * setzt Abfahr und Ziel für Routenplaner
 */
function setDirections(fromAddress, toAddress, locale, domain) {
  
  document.getElementById("directions").style.display = "block";
  if (fromAddress == "") {
    alert("Bitte geben Sie eine Start-Adresse ein!");
    document.forms.gmap.from.focus();
    return;
  }
  address = toAddress;
  if(!coords){
    var point = new GClientGeocoder();
    coords = point.getLatLng(address, getRouteByTargetCoordinates); 
    document.getElementById("directions").innerHTML = "";
  }
  else{
    fromAddress = document.getElementById("fromAddress").value;
    points = new Array();
    points.push(fromAddress);
    points.push(coords);
    gdir.loadFromWaypoints(points);
  }
  
   var link = document.createElement('a');
   if(document.getElementById('fromAddress').value) {
     var opener = "window.open('" + domain + "/frame.print/location." + document.getElementById('fromAddress').value + "', '_blank', 'width=667, height=630, left=30, top=30, menubar=1, location=no, resizeable=no, scrollbars=yes, toolbar=1, status=no');return false" ;     
     var href2 = domain + '/frame.print/location.' + document.getElementById('fromAddress').value;    
   } else {
     var opener = "window.open('" + domain + "/frame.print/', '_blank', 'width=667, height=630, left=30, top=30, menubar=1, location=no, resizeable=no, scrollbars=yes, toolbar=1, status=no');return false" ;     
     var href2 = domain + '/frame.print/';    
   }
    
   link.setAttribute('onclick', opener);
   link.href = href2;
   link.target = "_blank";
   link.innerHTML = '<div id="footer_print">Seite drucken </div>';
   
   if(document.getElementById('print_link')) {
     document.getElementById('print_link').innerHTML = "";
     document.getElementById('print_link').appendChild(link);
   }
}

/*
 * lädt die Karten mit Zieladresse == Koordinaten!
 * hat genau den Grund, dass normal google maps und der routenplaner die adresse teilweise unterschiedlich interpretieren
 * Koordinaten werden berechnet von der Adresse bzw. werden jene herangezogen, die bei einem Projekt eingegeben wurden.
 */
function getRouteByTargetCoordinates(point){
  if(point){
    fromAddress = document.getElementById("fromAddress").value;
    points = new Array();
    points.push(fromAddress);
    points.push(point);
    gdir.loadFromWaypoints(points);
  }
  else{
    alert("point is null");
  }
}
    

function handleErrors(){
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS){
    alert("Die Start-Adresse konnte nicht zugeordnet werden. Bitte ergänzen Sie die Adresse um Informationen wie Strasse, PLZ oder Ort");
  }
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR){
    alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
  }    
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY){
    alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
  }     
  else if (gdir.getStatus().code == G_GEO_BAD_KEY){
    alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
  }
  else if (gdir.getStatus().code == G_GEO_BAD_REQUEST){
    alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
  }       
  else{
    alert("Die Route konnte leider nicht berechnet werden.");
  }
   
}

function gMapPrint(url) {
  var url = url + '&toAddress=' + document.forms.gmap.from.value;
  window.open(url, '_blank', 'width=780,height=650,left=30,top=30,menubar=1,location=no,resizable=yes,scrollbars=yes,toolbar=1,status=no');
}
  	
function onGDirectionsLoad(){ 
       
}

/*
 * erstelle die Wegbeschreibung
 */
function getDescription() {
  var route = gdir.getRoute(0);
  var descr = "";
  	  
  for (var i = 0; i < route.getNumSteps(); i++) {
    step   = route.getStep(i);
  	descr += "<li>" + step.getDescriptionHtml() + "</li>";
  }
  
  return "<ol>" + descr + "<ol>";
}
