﻿ 
  // Builds an array of geocode responses for the 5 cities.
  var city = [
    {
name: "Addis Ababa",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Addis Ababa",
Point: {
coordinates: [38.759330, 9.011570, 0]
}
}
]
},
{
name: "Adigrat",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Adigrat",
Point: {
coordinates: [39.462400, 14.275900, 0]
}
}
]
},
{
name: "Arba Minch",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Arba Minch",
Point: {
coordinates: [37.541500, 6.007800, 0]
}
}
]
},
{
name: "Asebe Teferi",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Asebe Teferi",
Point: {
coordinates: [40.866670, 9.083330, 0]
}
}
]
},
{
name: "Asebot",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Asebot",
Point: {
coordinates: [40.662890, 9.177940, 0]
}
}
]
},
{
name: "Asosa",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Asosa",
Point: {
coordinates: [34.538800, 10.062200, 0]
}
}
]
},
{
name: "Awasa",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Awasa",
Point: {
coordinates: [38.500600, 6.998900, 0]
}
}
]
},
{
name: "Axum",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Axum",
Point: {
coordinates: [38.721000, 14.125600, 0]
}
}
]
},
{
name: "Bahir Dar",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Bahir Dar",
Point: {
coordinates: [37.384000, 11.593800, 0]
}
}
]
},
{
name: "Bedele",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Bedele",
Point: {
coordinates: [36.346720, 8.456750, 0]
}
}
]
},
{
name: "Bedesa",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Bedesa",
Point: {
coordinates: [40.776200, 8.896140, 0]
}
}
]
},
{
name: "Butajira",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Butajira",
Point: {
coordinates: [38.377100, 8.110300, 0]
}
}
]
},
{
name: "Chagni",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Chagni",
Point: {
coordinates: [36.500000, 10.950000, 0]
}
}
]
},
{
name: "Debark",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Debark",
Point: {
coordinates: [37.899700, 13.147700, 0]
}
}
]
},
{
name: "Debre Birhan",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Debre Birhan",
Point: {
coordinates: [39.516100, 9.660800, 0]
}
}
]
},
{
name: "Debre Markos",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Debre Markos",
Point: {
coordinates: [37.729400, 10.334700, 0]
}
}
]
},
{
name: "Debre Sina",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Debre Sina",
Point: {
coordinates: [39.738700, 9.835300, 0]
}
}
]
},
{
name: "Debre Tabor",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Debre Tabor",
Point: {
coordinates: [38.014800, 11.855900, 0]
}
}
]
},
{
name: "Debre Zeyit",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Debre Zeyit",
Point: {
coordinates: [37.800000, 10.466670, 0]
}
}
]
},
{
name: "Dembecha",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Dembecha",
Point: {
coordinates: [37.456000, 10.569700, 0]
}
}
]
},
{
name: "Dessie",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Dessie",
Point: {
coordinates: [39.631320, 11.128130, 0]
}
}
]
},
{
name: "Dire Dawa",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Dire Dawa",
Point: {
coordinates: [41.864600, 9.586600, 0]
}
}
]
},
{
name: "Dodola",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Dodola",
Point: {
coordinates: [39.187800, 6.974400, 0]
}
}
]
},
{
name: "Dolo",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Dolo",
Point: {
coordinates: [42.057700, 4.175520, 0]
}
}
]
},
{
name: "Dubti",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Dubti",
Point: {
coordinates: [41.003440, 11.746280, 0]
}
}
]
},
{
name: "Enda Sellasie",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Enda Sellasie",
Point: {
coordinates: [39.733920, 13.869420, 0]
}
}
]
},
{
name: "Fiche",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Fiche",
Point: {
coordinates: [38.720100, 9.779800, 0]
}
}
]
},
{
name: "Finote Selam",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Finote Selam",
Point: {
coordinates: [37.263600, 10.676300, 0]
}
}
]
},
{
name: "Gambela",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Gambela",
Point: {
coordinates: [34.590800, 8.246900, 0]
}
}
]
},
{
name: "Gimbi",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Gimbi",
Point: {
coordinates: [35.837900, 9.173200, 0]
}
}
]
},
{
name: "Ginchi",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Ginchi",
Point: {
coordinates: [38.148800, 9.026400, 0]
}
}
]
},
{
name: "Giyon",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Giyon",
Point: {
coordinates: [37.971800, 8.520900, 0]
}
}
]
},
{
name: "Gondar",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Gondar",
Point: {
coordinates: [37.468200, 12.613800, 0]
}
}
]
},
{
name: "Gore",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Gore",
Point: {
coordinates: [35.545800, 8.151200, 0]
}
}
]
},
{
name: "Guder",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Guder",
Point: {
coordinates: [37.766670, 8.966670, 0]
}
}
]
},
{
name: "Hamusit",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Hamusit",
Point: {
coordinates: [37.566670, 11.783330, 0]
}
}
]
},
{
name: "Harar",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Harar",
Point: {
coordinates: [42.111600, 9.311000, 0]
}
}
]
},
{
name: "Jijiga",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Jijiga",
Point: {
coordinates: [42.799500, 9.353000, 0]
}
}
]
},
{
name: "Jimma",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Jimma",
Point: {
coordinates: [36.833330, 7.666670, 0]
}
}
]
},
{
name: "Lalibela",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Lalibela",
Point: {
coordinates: [38.878500, 12.074300, 0]
}
}
]
},
{
name: "Mekele",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Mekele",
Point: {
coordinates: [39.474500, 13.495000, 0]
}
}
]
},
{
name: "Mojo",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Mojo",
Point: {
coordinates: [39.126600, 8.585100, 0]
}
}
]
},
{
name: "Nazret",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Nazret",
Point: {
coordinates: [39.272500, 8.537600, 0]
}
}
]
},
{
name: "Nekempte",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Nekempte",
Point: {
coordinates: [36.544400, 9.086700, 0]
}
}
]
},
{
name: "Shashemenne",
Status: {
code: 200,
request: "geocode"
},
Placemark: [
{
address: "Shashemenne",
Point: {
coordinates: [38.608000, 7.205000, 0]
}
}
]
}
];
 
 
  var map;
  var geocoder;
 
  // CapitalCitiesCache is a custom cache that extends the standard GeocodeCache.
  // We call apply(this) to invoke the parent's class constructor.
  function CapitalCitiesCache() {
    GGeocodeCache.apply(this);
  }
 
  // Assigns an instance of the parent class as a prototype of the
  // child class, to make sure that all methods defined on the parent
  // class can be directly invoked on the child class.
  CapitalCitiesCache.prototype = new GGeocodeCache();
 
  // Override the reset method to populate the empty cache with
  // information from our array of geocode responses for capitals.
  CapitalCitiesCache.prototype.reset = function() {
    GGeocodeCache.prototype.reset.call(this);
    for (var i in city) {
      this.put(city[i].name, city[i]);
    }
  }
 
  function initialize() {
    map = new GMap2(document.getElementById("map_canvas"));
      var point = new GLatLng(9.011570, 38.759330);
    map.setCenter(point, 15);
  
  var marker = new GMarker(point, {draggable: true}); 
  map.addOverlay(marker);
 map.addControl(new GSmallMapControl());
  map.addControl(new GMapTypeControl());
  map.removeMapType(G_HYBRID_MAP);
  map.setMapType(G_SATELLITE_MAP);
    geocoder = new GClientGeocoder();
    geocoder.setCache(new CapitalCitiesCache());

map.addMapType(G_SATELLITE_3D_MAP);
var mapControl = new GMapTypeControl();
map.addControl(mapControl);

  }
 
  function addAddressToMap(response) {
    map.clearOverlays();


    if (response && response.Status.code != 200) {
      alert("Unable to locate " + decodeURIComponent(response.name));
    } else {
     
      var place = response.Placemark[0];
      var point = new GLatLng(place.Point.coordinates[1],
                              place.Point.coordinates[0]);
     
     var marker = new GMarker(point, {draggable: true}); 
     map.addOverlay(marker);
    
      map.setCenter(point, 15);
window.onunload=google.maps.Unload; 
     
    }
  }
 
  function findCity(which) {
    if (which != 0) {
      geocoder.getLocations(city[which - 1].name, addAddressToMap);
    }
  }
window.onload = function() {
initialize();
} 



