google.load("maps", "2.125");
google.setOnLoadCallback(initialize);

// global variables
var map = null;
var qs = new Querystring();

var selected_response_id = qs.get("response");
var selected_response = null;

var featured = new Array();
var responses = new Array();

var loading = null;

var featured_markers = null;
var response_markers = null;

// var test = new google.maps.GControl(true);

function initialize() {
  // console.log("initialize");
  
  map = new GMap2(document.getElementById(config.map_canvas_id));
  map.setMapType(G_PHYSICAL_MAP);
  map.disableContinuousZoom();
  map.disableScrollWheelZoom(); 
  map.addControl(new GSmallMapControl());
  // map.addControl(new SOFTitleOverlay(window.map, "http://speakingoffaith.org", "http://speakingoffaith.org/programs/2008/abortion/images/map-title-overlay.png"));
  // map.addControl(new SOFTitleOverlay());
  map.setCenter(new GLatLng(config.init_x, config.init_y), config.init_zoom);
  
  GDownloadUrl(config.data_url, window.parseXmlData);
}

function parseXmlData(data, responseCode) {
  // console.log("parseXmlData");
  
  redicon = new GIcon();
	redicon.image = "http://www.apmstations.org/images/mm_20_red.png";
  // redicon.shadow = "http://www.apmstations.org/images/mm_20_shadow.png";
	redicon.iconSize = new GSize(12, 20);
  // redicon.shadowSize = new GSize(22, 20);
	redicon.iconAnchor = new GPoint(6, 20);
	redicon.infoWindowAnchor = new GPoint(5, 1);
	
  var xml = GXml.parse(data);
  
  var response_elements = xml.documentElement.getElementsByTagName("response");
  var i=0;
  // if there is a selected response to show (rather than random featured)
  if(selected_response_id) {
    // console.log("load selected response: "+selected_response_id);
    while(i<response_elements.length) {
      var response = new ResponseObject(response_elements[i], redicon, config.project_name, config.testing);
      if (response.id == selected_response_id) {
        window.featured.push(response);
        window.selected_response = response;
      }
      else { window.responses.push(response); }
      i++;
    }
    
  // else no selected response, go to default behavior (show random featured)
  } else {
    // console.log("default load behavior (random featured)");
    while(i<response_elements.length) {
      var response = new ResponseObject(response_elements[i], redicon, config.project_name, config.testing);
      if (response.featured) { window.featured.push(response); }
      else { window.responses.push(response); }
      i++;
    }
  }
  
  addFeaturedMarkers();
}

function updateLoadingMessage(response) {
  // console.log("Loading "+response.full_name);
  $(config.loading_div_id).select(".loading_info")[0].update('Loading '+response.full_name);
  if(response.flickr) {
    $(config.loading_div_id).select("img")[0].writeAttribute($H({src: response.getImageUrl('thumbnail')}));
  }
}

function addFeaturedMarkers() {
  // console.log("addFeaturedMarkers");
  featured_markers = new SOFMarkerManager( window.map, window.featured, { addProgressively: false });
  
  var created_handler = window.updateLoadingMessage.bind(window);
  GEvent.addListener(featured_markers, 'markerCreated', created_handler);
  
  var completed_handler = window.addFeaturedMarkersComplete.bind(window);
  GEvent.addListener(featured_markers, 'markersAdded', completed_handler);
  
  featured_markers.createMarkers();
}

function addFeaturedMarkersComplete() {
  // console.log("addFeaturedMarkersComplete");

  $(config.loading_div_id).hide();
  
  // if there is a selected response, zoom in on the location
  if(window.selected_response) {
    // console.log("zoom in for selected response");
    var handler = window.triggerAddRegularMarkersDelay.bind(window);
    GEvent.addListener(window.map, 'zoomend', handler);
    window.map.setCenter(new GLatLng(selected_response.latitude, selected_response.longitude), config.init_zoom+2);
  } else { triggerAddRegularMarkersDelay(); }
}

function triggerAddRegularMarkersDelay() {
  // console.log("triggerAddMarkersDelay");
  GEvent.clearListeners(window.map, 'zoomend'); 	
  setTimeout(addRegularMarkersDelay, 1000);
}

function addRegularMarkersDelay() {
	// console.log("addRegularMarkersDelay");
  window.featured_markers.openRandomMarker();
  response_markers = new SOFMarkerManager( window.map, window.responses, { addProgressively: true, addDelay: config.add_delay });
  var handler = window.allMarkersAdded.bind(window);
  GEvent.addListener(response_markers, 'markersAdded', handler);
  response_markers.createMarkers();
}

function allMarkersAdded() {
  // console.log("All markers added.");
}

