// obiekt mapy
var map = null;
// pojedynczy marker, używany w backendzie
var global_marker = null;
// GeoCoder
var geocoder = null;



/**
 * Inicjacja mapy Google dla frontendu
 * @param div string Nazwa div-a do ktorego ladujemy mape
 * @param lat float Szerokość
 * @param lng float Długość
 * @param zoom int Zoom level
 */
function google_maps_load(div, lat, lng, zoom) {
  div = div || "divGoogleMap";
  lat = lat || 51.66431;
  lng = lng || 19.35473;
  zoom = zoom || 13;

  // inicjujemy GeoCoder
  geocoder = new google.maps.Geocoder();

  // inicjujemy mapkę
  var myOptions = {
    zoom: zoom,
    center: new google.maps.LatLng(lat, lng),
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    scrollwheel: false
    
  };
  map = new google.maps.Map(document.getElementById(div), myOptions);
}





/**
 * Dodaje zwykly marker do mapki
 * @param string location
 * @param string html
 */
function google_maps_add_marker(lat, lng, info) {
  var infowindow = new google.maps.InfoWindow({
    content: info
  });

  var marker = new google.maps.Marker({
    position: new google.maps.LatLng(lat, lng),
    map: map,
    title: "Kliknij, aby sprawdzić szczegóły"
  });

  google.maps.event.addListener(marker, 'click', function() {
    infowindow.open(map, marker);
  });
}



function google_maps_show_marker(lat, lng) {
  map.setCenter(new google.maps.LatLng(lat, lng));
  map.setZoom(16);
}


function google_maps_set_pabianice() {
  map.setCenter(new google.maps.LatLng(51.66431, 19.35473));
  map.setZoom(13);
}














/**
 ********************** ADMIN **************************
 **/



/**
 * Inicjacja mapy Google dla backendu
 * @param div string Nazwa div-a do ktorego ladujemy mape
 * @param x float Wspolrzedna X
 * @param y float Wspolrzedna Y
 * @param z int Zoom level
 */
function google_maps_admin_load(div, x, y, z) {
  google_maps_load(div, x, y, z);
  var lok = document.getElementById('informator_company_location_map_coordinates').value;
  if (lok != '') google_maps_add_global_marker(lok);
}


/**
 * Znajduje na mapie adres i wstawia tam przesuwanego globalMarkera
 * @param string address
 * @param string city
 * @param string zip
 * @param string coordinates
 */
function google_maps_show_address(address, city, zip, coordinates) {
  a = document.getElementById(address).value;
  c = document.getElementById(city).value;
  z = document.getElementById(zip).value;
  var adres = "Poland, " + c + ", " + a;

  geocoder.getLatLng(
    adres,
    function(point) {
      if (!point) {
        alert(address + " nie znaleziony");
      } else {
        // centrujemy mape
        map.setCenter(point, 16);

        // tworzymy marker
        if(global_marker !== null) global_marker.hide();
        global_marker = new GMarker(point, {
          draggable:true
        } );

        // Obsługa zakończenia przesuwania, tj. uaktualniamy współrzędne w inpucie
        GEvent.addListener(global_marker, "dragend", function() {
          point = "_" + this.getLatLng();
          var trimmed = point.replace('(', '') ;
          trimmed = trimmed.replace(')', '');
          trimmed = trimmed.replace('_', '') ;
          document.getElementById(coordinates).value = trimmed;
        });

        // wyswietlamy
        map.addOverlay(global_marker);
        global_marker.openInfoWindowHtml(adres);

        // usatwiamy input wspolrzednych znalezionym punktem
        point = "_" + point;
        var trimmed = point.replace('(', '') ;
        trimmed = trimmed.replace(')', '');
        trimmed = trimmed.replace('_', '') ;
        document.getElementById(coordinates).value = trimmed;
      }
    }
    );
}


/**
 * Wstawia na mapie przesuwnego global markera
 * @param string location
 */
function google_maps_add_global_marker(location) {
  var tab = location.split(', ');
  var loc = new GLatLng(tab[0], tab[1]);

  map.setCenter(loc, 16);
  global_marker = new GMarker(loc, {
    draggable:true
  } );

  // Obsługa zakończenia przesuwania, tj. uaktualniamy współrzędne w inpucie
  GEvent.addListener(global_marker, "dragend", function() {
    point = "_" + this.getLatLng();
    var trimmed = point.replace('(', '') ;
    trimmed = trimmed.replace(')', '');
    trimmed = trimmed.replace('_', '') ;
    document.getElementById(coordinates).value = trimmed;
  });
  map.addOverlay(global_marker);
}




