// globalne pole s mapami, z ktorych sa neskor vyberu hodnoty na inicializaciu
var maps = new Array();
// globalne pole s markermi, ktore sa vlozia do prislusnej mapy
var markers = new Array();
// globalne pole s trasami, ktore sa maju vykreslovat do mapy
var routes = new Array();

// kontrolna premenna, ci uz bolo vlozene volanie inicializacia
var initialized = false;

// zakladna funkcia, v ktorej sa vsetko vygeneruje a nasledne z nej aj pomocou
// google maps api vykresli
function googlemapsInitialize(adm) {
  // prejde vsetky mapy
  for ( var i in maps )  {
    if (typeof maps[i] == 'function') {continue;}
    //var type = "ROADMAP";
    maps[i]['options'] = {
      zoom: Number(maps[i]['zoom']),
      center: maps[i]['center'],
      mapTypeId: (maps[i]['type'] == "ROADMAP" ? google.maps.MapTypeId.ROADMAP : 
                        ( maps[i]['type'] == "TERRAIN" ? google.maps.MapTypeId.TERRAIN : 
                        ( maps[i]['type'] == "SATELLITE" ? google.maps.MapTypeId.SATELLITE : 
                        google.maps.MapTypeId.HYBRID )))
    }
    maps[i]['map'] = new google.maps.Map(document.getElementById(maps[i]['id']), maps[i]['options']);  
  }
  
  // prejde vsetky markery
  for ( var i in markers ) {
    // samotny marker a vlozenie do mapy
    markers[i]['marker'] = new google.maps.Marker({
        position:  markers[i]['position'], 
        map: maps[markers[i]['map']]['map'],
        title: markers[i]['title'],
        id: i
    }); 
    if (markers[i]['icon']) {
      markers[i]['marker'].icon = markers[i]['icon'];
    }
  
    // popis k markeru pri kliknuti
    markers[i]['infoWindow'] = new google.maps.InfoWindow({
        content: markers[i]['info']
    });

    markers[i]['zoomIt'] = function() {
      var k = this.id;
      maps[markers[k]['map']]['map'].setCenter(markers[k]['position']);
      maps[markers[k]['map']]['map'].setZoom(Number(markers[k]['zoom']));
      // este zatvorime ostatne windowInfo
      for ( var j in markers ) {
          markers[j]['infoWindow'].close();
      }
      markers[k]['infoWindow'].open(maps[markers[k]['map']]['map'], markers[k]['marker']);
    }
    
    google.maps.event.addListener(markers[i]['marker'], 'click', markers[i]['zoomIt']);
  }

  // zaregistrovanie handlerov pre admin sekciu
  if ( adm.length != 0 ) {
    handlers(adm);
  }
  
}



// pre tag ktory zabezpeci externe zobrazenie markeru
// parameter je id markeru
function zoomTrigger(marker) {
  markers[marker]['zoomIt']();
}


////////////////////////////////////////////////////////////////////////////////////////
// funkcia inicializuje handlery a zabezpecuje spravne fungovanie pri pridavani/editacii
function handlers(adm){

  for ( var i in maps ) {
   
    ///////////////// handler pre zmenu mapy
    maps[i]['mapTypeChanded'] = function() {
      var newMapType = maps[i]['map'].getMapTypeId();
      var elementId = "_" + adm + "__type_" + (newMapType == google.maps.MapTypeId.ROADMAP ? "ROADMAP" : 
                          ( newMapType == google.maps.MapTypeId.TERRAIN ? "TERRAIN" : 
                          ( newMapType == google.maps.MapTypeId.SATELLITE ? "SATELLITE" : 
                          "HYBRID" )));
      if ( document.getElementById(elementId) != null ) { 
        document.getElementById(elementId).selected = true;
      } 
    }
    google.maps.event.addListener(maps[i]['map'], 'maptypeid_changed',maps[i]['mapTypeChanded']);  
  
    ////////////////// handler pre zmenu zoomu
    maps[i]['mapZoomChanged'] = function() {
      var newZoom = maps[i]['map'].getZoom();
      var elementId = "_" + adm + "__zoom_" + newZoom;
      if ( document.getElementById(elementId) != null ) {
        document.getElementById(elementId).selected = true;
      }
    }
    google.maps.event.addListener(maps[i]['map'], 'zoom_changed',maps[i]['mapZoomChanged']);  
    
    
    ////////////////// handler pre zmenu center
    maps[i]['mapCenterChanged'] = function() {
      var newCenter = maps[i]['map'].getCenter();
      var elementId = "_" + adm + "__center";
      var center = newCenter.toString();
      if ( document.getElementById(elementId) != null ) {
        document.getElementById(elementId).value = center.substring(1, center.length-1);
      }
    }
    google.maps.event.addListener(maps[i]['map'], 'center_changed',maps[i]['mapCenterChanged']);  
    
    
    ////////////// handler pre zmenu pozicie markeru
    var elementId = "_" + adm + "__location";
    if ( document.getElementById(elementId) != null ) {
      google.maps.event.addListener(maps[i]['map'], 'click', function(event) {
        placeMarker("addMarker",event.latLng);
      });
    }

  
  }
}

function placeMarker(marker, location) {
  var clickedLocation = new google.maps.LatLng(location);
  markers[marker]['marker'].setPosition(location);
  
  var elementId = "_" + "gmapmarker_add_1" + "__location";
  var loc = location.toString(); 
  document.getElementById(elementId).value = loc.substring(1, loc.length-1);

}

///////////////////////////////////////////////////////////////////////////////////////////////////////



// sluzi na pridanie dalsej mapy do globalneho pola
// parametre:
// id - identifikator mapy (nazov) - musi byt jedinecne
// center - v stringu predane suradnice miesta, ktore bude centrovane v generovanom div-e
// zoom - ciselna hodnota vyjadrujuca uroven priblizenia od 0 po priblizne 20
// type - typ zobrazovanej mapy; mozne hodnoty: 0/ROADMAP, 1/SATELLITE, 2/TERRAIN, 3/HYBRID, 
function addMap(id, center, zoom, type){
  // potrebujeme viacrozmerne pole
  maps[id] = new Array();
  maps[id]['id'] = id; // ulozenie identifikatora
  
  // len ulozenie hodnot, aby boli k dispozicii
  var centerXY = center.split(',');
  maps[id]['center'] = new google.maps.LatLng(centerXY[0],centerXY[1]);
  maps[id]['zoom'] = zoom;
  maps[id]['type'] = type;
  
}

// sluzi na pridanie markeru
// parametre:
// id - id markeru - jedinecny nazov
// position - suradnice zadane ako string
// title - string, zobrazovany nazov
// info - string s moznym html - zobrazi popis/info k markeru
// map - id mapy, do ktorej sa ma vykreslit
function addMarker(id, position, zoom, title, info, map, icon){
  markers[id] = new Array();
  markers[id]['id'] = id; // identifikator markeru
  var positionXY = position.split(',');
  markers[id]['position'] = new google.maps.LatLng(positionXY[0],positionXY[1]); // pozicia/lokalizacia/poloha/suradnice markeru
  markers[id]['zoom'] = zoom;
  markers[id]['title'] = title; // titulok k markeru pri hover
  markers[id]['info'] = info; // informacie/description k bodu, ktory sa objavi po kliknuti; mozne html
  markers[id]['map'] = map; // identifikator mapy, kde sa vlozi
  if (icon) {
    markers[id]['icon'] = icon;
  }
}



function addRoute(id, map, waypoints){



}






