// 
//  mapping.js - Contains functions for mapping organizations
//  buylocal
//  
//  Created by Jay Roberts <jay@designhammer.com>
// 


// Clears all overlays from the map and prepares it to display a new result set
function reset_map() {
   map.clearOverlays();
   bounds = new GLatLngBounds();
}

// Sets the map's pan and zoom to a neutral setting
function center_map() {
   map.setCenter(new GLatLng(35.9296810, -79.0341650), 14); // Chapel Hill
}


function get_info_window_markup(org) {
   var markup = '<div id="dh-info-window" class="dh-detail-box-content">';
   var feature_image_tag = '';
   
   if (org.feature_level > 1) {
      feature_image_tag = '<img class="feature-icon" src="/assets/images/map/star-level' + org.feature_level + '-white.png" />';
   }
   
   markup += '<h3>'+ feature_image_tag + org.name + '</h3>';
   if (org.url) {
      markup += '<span class="featured-link"><a href="http://' + org.url + '" target="_blank">' + org.url + '</a></span>';
   }
   markup += '<hr class="clear"/>';
   
   markup += '<div class="dh-thumbnail">';
   markup += '<img alt="Organization Image" src="/assets/images/thumbs/' + org.id + '.png"/>';
   markup += '</div>';
   
   if (typeof(org.locations) != 'undefined') {
      var loc = org.locations[0];
      markup += '<div class="dh-address">';
      
      if (org.phone) {
         markup += '<p>';
         if (org.phone) {
            markup += org.phone + '<br />';
         }
         markup += '</p>';
      }

      markup += '<p>';
      markup += loc.address1;
      if (loc.addresss2) {
         markup += '<br />' + loc.address2;
      }
      markup += '<br />' + loc.city + ', ' + loc.state + ' ' + loc.zip + '<br />';
      markup += '<a href="' + get_directions_url(loc) + '" title="Get Directions" target="_blank">Get Directions &raquo;</a>'
      markup += '</p>';

      markup += '</div>';
   }

   markup += '<div class="dh-description">';
   markup += '<p>' + org.description + '</p>';
   markup += '</div>';
   
   markup += '<br class="clear"/>';
   markup += '</div>';
   
   return markup;
   
}

function get_directions_url(loc) {
   var url = 'http://maps.google.com/maps?q=';
   var address_string = get_address_from_location(loc);
   url += encodeURIComponent(address_string);
   return url;
}


function get_address_from_location(loc) {
	var address = loc.address1;

	address += ", " + loc.city + ", " + loc.state + " " + loc.zip;

	return address;
}


function create_marker(point, feature_level) {
   var feature_icon = new GIcon(G_DEFAULT_ICON);
   feature_icon.image = "/assets/images/map/marker-level" + feature_level + ".png";
   
   var marker_options = { icon:feature_icon };
   
   return new GMarker(point, marker_options)
}
	
function add_org_marker(org) {
	if (typeof(org.locations) != 'undefined') {
		var address = get_address_from_location(org.locations[0]);
      var markup = get_info_window_markup(org);

		geocoder.getLatLng(address, function(point){
			if (!point) {
            // alert(address + " not found.");
			} else {
			   var marker = create_marker(point, org.feature_level);
				map.addOverlay(marker);
				
				GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowHtml(markup, info_window_options);
            });

            markers[org.id] = marker;
            
            bind_organization_link_click(org.id, markup, marker, info_window_options);
            
				bounds.extend(point);
		   }
	   });
   }
}


function add_org_marker_and_pan(org) {
	if (typeof(org.locations) != 'undefined') {
		var address = get_address_from_location(org.locations[0]);
      var markup = get_info_window_markup(org);

		geocoder.getLatLng(address, function(point){
			if (!point) {
            // alert(address + " not found.");
			} else {
			   var marker = create_marker(point, org.feature_level);
				map.addOverlay(marker);
				marker.openInfoWindowHtml(markup, info_window_options);

				GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowHtml(markup + '<p>' + point + '</p>', info_window_options);
            });

            markers[org.id] = marker;

            bind_organization_link_click(org.id, markup, marker);

				bounds.extend(point);

				map.setZoom(13);

				map.panTo(point);
		   }
	   });
   }
}


function add_org_marker_and_show_all(org) {
	if (typeof(org.locations) != 'undefined') {
		var address = get_address_from_location(org.locations[0]);
      var markup = get_info_window_markup(org);

		geocoder.getLatLng(address, function(point){
			if (!point) {
            // alert(address + " not found.");
			} else {
			   var marker = create_marker(point, org.feature_level);
				map.addOverlay(marker);

				GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowHtml(markup, info_window_options);
            });

            markers[org.id] = marker;

            bind_organization_link_click(org.id, markup, marker);

				bounds.extend(point);

				map.setZoom(map.getBoundsZoomLevel(bounds));
				map.setCenter(bounds.getCenter());
		   }
	   });
   }
}