
  var mapstraction;
  var geocoder;
  var address;

  function initialize() {
    mapstraction = new Mapstraction('map_canvas','google');
    mapstraction.setCenterAndZoom(new LatLonPoint(58.30,-93.78), 3);
    setup();
    geocoder = new MapstractionGeocoder(geocode_return, 'google');
    mapstraction.addEventListener('click', jump_to);

    $('address').focus();
    $('address').select();
  }

  function setup() {
    mapstraction.addControls({
      pan: true,
      zoom: 'small',
      map_type: true
    });
    mapstraction.addTileLayer('http://howdtheyvote.ca/tiles/{Z}/{X}/{Y}.png', 0.5, 'Elections Canada', 0, 16);
  }

  function geocode_return(geocoded_location) {
    jump_to(geocoded_location.point, true);
  }

  function jump_to(point, zoom) {
  
      // display the map centered on a latitude and longitude (Google zoom levels)
      if (zoom) {
        mapstraction.setCenterAndZoom(point, 13);
      }
  
      // create a marker positioned at a lat/lon
      geocode_marker = new Marker(point);
  
      // display marker
      mapstraction.removeAllMarkers();
      mapstraction.addMarker(geocode_marker);
 
      //try to resolve edid of this position
      new Ajax.Request('lookup.php?lat='
        + point.lat + '&long=' + point.lon,
      {
        method: 'GET',
        onSuccess: function(transport){
          var html = table['header1'];
          var response = transport.responseText || "0,,";
          var edids = response.split("\n");
          for (var i=0; i<=edids.length; i++) {
            if (edids[i] !== undefined) {
              if (i == 1) {
                html += table['footer'];
                html += table['header2'];
              }
              var part = edids[i].split(",");
              if (table[part[0]] !== undefined) {
                html += '<tr>' + table[part[0]] + '</tr>';
              } else {
                html += table['none'];
              }
            }
          }
          if (edids.length == 0) {
            html += table['none'];
          }
          html += table['footer'];
          $('matches').update(html);
        },
        onFailure: function(){ alert('Something went wrong...') }
      });    
      setup();
  }

  function checkSubmit(event) {
      var code;
      if (event && event.which) {
        code = event.which;
      } else if (event && event.keyCode) {
        code = event.keyCode;
      }
      if (code && code == 13) {
        submitAddress();
        return false;
      }
      return true;
  }
  
  function submitAddress() {
      var address = new Object();
      address.address = document.getElementById('address').value;
      geocoder.geocode(address);
  }

