//load google map api loader
document.write('<script type="text/javascript" src="gmap.js"></script>');

var map2 = null;
var atpage = 0;

function map_init() {
  if (GBrowserIsCompatible()) {
    $("#maploader").css("visibility", "visible");
  
    map2 = new GMap2(document.getElementById('map'));
    map2.setCenter(new GLatLng(30.748674, 2.8125), 2);
    map2.setMapType(G_NORMAL_MAP);
    map2.addControl(new GLargeMapControl());
    map2.addControl(new GScaleControl());
    map2.addControl(new GMapTypeControl());
    
    //event handlers
    GEvent.addListener(map2, "click", handleClick);
    
    //get country overlays
    atpage = 0;
    GDownloadUrl("map.php?op=countries", parseOverlays);
  }
}

function parseOverlays(data, responseCode) {
  var xml = GXml.parse(data), placemarks = xml.documentElement.getElementsByTagName("Placemark"), i, j, boundaries, obj, poly, polys, c;
  for(i=0; i<placemarks.length; i++) {
    polys = placemarks[i].getElementsByTagName("polygon");
    boundaries = new Array(0);
    //get all the borders and create one polygon object
    for(j=0; j<polys.length; j++) {
      obj = {color: "#000000", weight: 1, opacity: 1, points: polys[j].getAttribute("points"), levels: polys[j].getAttribute("levels"), numLevels: 18, zoomFactor: 2};
      boundaries.push(obj);
    }
    poly = GPolygon.fromEncoded({polylines: boundaries, color: "#222167", opacity: 0.4, fill: true, outline: true});
    //add additional country info to poly object
    c = poly.getBounds().getCenter();
    poly.extra = {name: placemarks[i].getAttribute("name"), id: parseInt(placemarks[i].getAttribute("id")), center: c, pxcenter: map2.fromLatLngToContainerPixel(c)};
    
    //catch poly hover events
    GEvent.addListener(poly, "mouseover", function() {
      $("#mapbox").append($("<div></div>").addClass('maptooltip').css({left: this.extra.pxcenter.x, top: this.extra.pxcenter.y}).text(this.extra.name));
    });
    GEvent.addListener(poly, "mouseout", function() {
      $(".maptooltip").remove();
    });
    
    map2.addOverlay(poly);
    boundaries = obj = polys = poly = null;
  }
  
  if (placemarks.length > 0) {
    atpage++;
    var args = "\"map.php?op=countries&pg="+atpage+"\"";
    setTimeout('GDownloadUrl('+args+', parseOverlays);', 1);
  } else $("#maploader").css("visibility", "hidden");
  xml = placemarks = null;
}

function handleClick(overlay, latlng) {
  if(overlay) {
    //clicked on an overlay
    if(overlay instanceof GPolygon) {  //clicked a polygon
      location.href = 'country.php?id=' + overlay.extra.id;
    }
  }
  else if(!overlay && latlng) {
    //clicked on map
  }
}
