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

// more config options
config.tag_name = "response"; // name of element in xml data
config.max_info_width = 300; // max width for information window
config.add_delay = 100; // delay for adding markers

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

var production_xml_path = "http://speakingoffaith.publicradio.org/www_publicradio/applications/formbuilder/projects/your_story/responsesXML.php?name="+config.query_name
var development_xml_path = "http://ts.publicradio.org/iw-mount/default/main/speakingoffaith/WORKAREA/"+config.workarea+"/www_publicradio/applications/formbuilder/projects/your_story/responsesXML.php?name="+config.query_name

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);
  
  if(config.testing) {
  	GDownloadUrl(development_xml_path, window.parseXmlData);
  } else {
  	GDownloadUrl(production_xml_path, 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");
  if(response_elements.length > 0) {
	  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.query_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.query_name, config.testing);
	      if (response.featured) { window.featured.push(response); }
	      else { window.responses.push(response); }
	      i++;
	    }
	  }
	  addFeaturedMarkers();
	} else {
	 	$(config.loading_div_id).hide();
		$('no_responses').show();
	}
}

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.");
}

