var mapCenter, startZoom = 7;

if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}


function markerOver(m) {
    this.showPopup();
}

function markerOut(m){
    this.hidePopup();
}

function markerClickTerm(m) {
    var m = this.myParent;
    map.setZoom(15);
    map.panTo(new GLatLng(m.lat, m.lng));
    this.hidePopup();
    this.openInfoWindowHtml(
            m.name + 
            (m.img ? "<br/><img height=\"86\" width=\"180\" src=\"" + context + m.img + "\">" : "") +
            "<br/>" + m.city + ", " + m.address +
            (m.desc ? "<br/>Pakiautomaat asub " + m.desc : "") +
    		(m.opened ? "<br/>Avatud: " +  m.opened : "") + 
    		"<br/>Kood: " + m.id);
}

function markerClickCity(m) {
    var m = this.myParent;
    /*
    map.setZoom(11);
    map.panTo(new GLatLng(m.lat, m.lng));
    */
    
    map.setZoom(m.zoom);
    map.panTo(m.center);
}

function initMap(data) {
    
    if (!GBrowserIsCompatible()) return false;
    // handleResize();
    mapCenter = new GLatLng(58.7, 25.3);
    
    map = new GMap2(document.getElementById("mapcanvas"));
    map.setCenter(mapCenter, startZoom);
    map.enableContinuousZoom();
    map.enableScrollWheelZoom();

    var ico = new GIcon(G_DEFAULT_ICON, context + "/img/map-marker.gif");
    ico.iconSize = new GSize(33,30);
    ico.imageMap = [0,0, 33,0, 33,30, 0,30];
    ico.shadow = null;
    ico.iconAnchor = new GPoint(18, 30);
    ico.infoWindowAnchor = new GPoint(18, 30);

    var list = document.getElementById('places'), li;
    //map.addControl(new GScaleControl());
    map.addControl(new GSmallMapControl());
    
    data.forEach(function (m) {
        // city
        var li = null;
        var ul = null;
        //if(m.kiosks.length > 1) {
          m.marker = new GMarkerEx(new GLatLng(m.lat, m.lng), {icon: ico});
          m.marker.myParent = m;
          
          li = document.createElement('LI');
          list.appendChild(li);
          
          var s = document.createElement('SPAN');
          s.appendChild(document.createTextNode(m.name));
          s.myParent = m;
          s.onclick = function() { markerClickCity.call(this.myParent.marker); }
          li.appendChild(s);
          
          GEvent.addListener(m.marker, "click", markerClickCity);

          ul = document.createElement('UL');
          li.appendChild(ul);
        /*  
        } else {
          ul = list;
        }
        */
        var bounds = new GLatLngBounds();
        
        m.kiosks.forEach(function(t) {
          var gl = new GLatLng(t.lat, t.lng);
          bounds.extend(gl);
          
          t.marker = new GMarkerEx(gl, {icon: ico, title: t.name})
          t.marker.myParent = t;
          
          li = document.createElement('LI');
          ul.appendChild(li);
          
          var s = document.createElement('SPAN');
          s.appendChild(document.createTextNode(t.name));
          s.myParent = t;
          s.onclick = function() { markerClickTerm.call(this.myParent.marker); }
          li.appendChild(s);
          
          map.addOverlay(t.marker);
          GEvent.addListener(t.marker, "click", markerClickTerm);
          GEvent.addListener(t.marker, "mouseover", markerOver);
          GEvent.addListener(t.marker, "mouseout", markerOut);
        });
        
        m.zoom = m.kiosks.length > 1 ? map.getBoundsZoomLevel(bounds) : 13;
        if(m.zoom > 11) m.zoom = 13;
        m.center = bounds.getCenter();
    });
    
    /*
    markers.forEach(function (m) {
        m.liNode = document.createElement('LI');
        m.liNode.appendChild(document.createTextNode(m.name));
        map.addOverlay(m.marker = new GMarker(new GLatLng(m.lat, m.lng), {icon: ico}));
        m.marker.myParent = m;
        GEvent.addListener(m.marker, "click", markerClick);
        list.appendChild(m.liNode);
        m.liNode.myParent = m;
        m.liNode.onclick = function() { markerClick.call(this.myParent.marker); }
    });
    */
  // map.addControl(new GMapTypeControl());
  // manager = new MarkerManager(map);
}

function terve_eesti()
{
    map.closeInfoWindow();
    map.setZoom(startZoom);
    map.panTo(mapCenter);
}

window.onresize = function()
{
    var m = document.getElementById('mapcanvas');
    m.style.left = '1';
    setTimeout(function() { m.style.left = '1px'; }, 1);
}
// window.onresize = function() { map.checkResize(); }

