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

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

var selected_catholic_id = qs.get("response");
var selected_catholic = null;

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

var loading = null;

var featured_markers = null;
var catholic_markers = null;

function initialize() {
  // console.log("initialize");
  
  map = new GMap2(document.getElementById(config.map_canvas_id));
  map.disableContinuousZoom();
  map.disableScrollWheelZoom(); 
  map.addControl(new GSmallMapControl());
  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 catholic_elements = xml.documentElement.getElementsByTagName("catholic");
  
  var i=0;
  // if there is a selected catholic to show (rather than random featured)
  if(selected_catholic_id) {
    // console.log("load selected catholic: "+selected_catholic_id);
    while(i<catholic_elements.length) {
      var catholic = new Catholic(catholic_elements[i], redicon);
      if (catholic.id == selected_catholic_id) {
        window.featured.push(catholic);
        window.selected_catholic = catholic;
      }
      else { window.catholics.push(catholic); }
      i++;
    }
    
  // else no selected catholic, go to default behavior (show random featured)
  } else {
    // console.log("default load behavior (random featured)");
    while(i<catholic_elements.length) {
      var catholic = new Catholic(catholic_elements[i], redicon);
      if (catholic.featured) { window.featured.push(catholic); }
      else { window.catholics.push(catholic); }
      i++;
    }
  }
  
  addFeaturedMarkers();
}

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

function addFeaturedMarkers() {
  // console.log("addFeaturedMarkers");
  featured_markers = new CatholicMarkerManager( 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 catholic, zoom in on the location
  if(window.selected_catholic) {
    // console.log("zoom in for selected catholic");
    var handler = window.triggerAddRegularMarkersDelay.bind(window);
    GEvent.addListener(window.map, 'zoomend', handler);
    window.map.setCenter(new GLatLng(selected_catholic.latitude, selected_catholic.longitude), config.init_zoom+2);
  } else { triggerAddRegularMarkersDelay(); }
}

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

function addRegularMarkersDelay() {
  window.featured_markers.openRandomMarker();
  catholic_markers = new CatholicMarkerManager( window.map, window.catholics, { addProgressively: true, addDelay: config.add_delay });
  var handler = window.allMarkersAdded.bind(window);
  GEvent.addListener(catholic_markers, 'markersAdded', handler);
  catholic_markers.createMarkers();
}

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