// Map Related Code

var geocoder = new google.maps.Geocoder();

function geocodePosition(pos) 
{
  geocoder.geocode({
	latLng: pos
  }, function(responses) {
	if (responses && responses.length > 0) {
	  updateMarkerAddress(responses[0].formatted_address);
	  updateHiddenAddressComponents(responses);
	} else {
	  updateMarkerAddress('Cannot determine address at this location.');
	}
  });
}


function updateMarkerStatus(str) 
{
  document.getElementById('markerStatus').innerHTML = str;
}


function updateMarkerPosition(latLng) 
{
  document.getElementById('info').value = [
	latLng.lat(),
	latLng.lng()
  ].join(', ');
}

function updateMarkerAddress(str) 
{
  document.getElementById('address').innerHTML = str;
}



function updateHiddenAddressComponents(responses)
{	
	var res = responses[0].address_components;
	
	var state = "";
	var city = "";
	var zip = "";
	var streetNum = "";
	var route = "";
	
	for(var i=0; i < res.length; i++)
	{
		if(res[i].types[0] == "administrative_area_level_1")
		{
			state = res[i].short_name;
		}
		
		else if(res[i].types[0] == "administrative_area_level_3")
		{
			city = res[i].short_name;
		}
		
		else if(res[i].types[0] == "postal_code")
		{
			zip = res[i].short_name;
		}

		else if(res[i].types[0] == "street_number")
		{
			streetNum = res[i].short_name;
		}

		else if(res[i].types[0] == "route")
		{
			route = res[i].short_name;
		}
		
	}
						
	document.getElementById('street').value = streetNum+" "+route;
	document.getElementById('city').value = city;
	document.getElementById('state').value = state;
	document.getElementById('zip').value = zip;					
}



function updateMarkerForManualAddress()
{
	var addressStr = document.getElementById("manualAddress").value;
	
	if (geocoder) 
	{
		geocoder.geocode( { 'address': addressStr}, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) 
		{
			var map2 = new google.maps.Map(document.getElementById('mapCanvas'), {
				zoom: 12,																// zoom of 6 gives most of SouthEast
				center: results[0].geometry.location,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			});
		
		  map2.setCenter(results[0].geometry.location);
		  
		  updateMarkerPosition(results[0].geometry.location);
		  updateHiddenAddressComponents(results);
		  
		  var marker2 = new google.maps.Marker({
			  map: map2, 
			  position: results[0].geometry.location,
			  draggable: true
		  });
			  
		  updateMarkerAddress(addressStr);

			// reapplying the draggable events to the marker
			  google.maps.event.addListener(marker2, 'dragstart', function() {
				updateMarkerAddress('Dragging...');
			  });
			  
			  google.maps.event.addListener(marker2, 'drag', function() {
			//	updateMarkerStatus('Dragging...');
				updateMarkerPosition(marker2.get_position());
			  });
			  
			  google.maps.event.addListener(marker2, 'dragend', function() {
			//	updateMarkerStatus('Drag ended');
				geocodePosition(marker2.get_position());
			  });
			//	END :: reapplying the draggable events to the marker
		} 
		else 
		{
			  alert("Geocode was not successful for the following reason: " + status);
		}
	  });
	}

}	// END :: function updateMarketForManualAddress



function initialize() 
{
	geocoder = new google.maps.Geocoder();
	var latLng = new google.maps.LatLng(34.0005556, -81.035);					// default lat/long set to Columbia, SC
	var map = new google.maps.Map(document.getElementById('mapCanvas'), {
		zoom: 6,																// zoom of 6 gives most of SouthEast
		center: latLng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	});
  
  var marker = new google.maps.Marker({
	position: latLng,
	title: 'Drag marker to find an address',
	map: map,
	draggable: true
  });
  
  // Update current position info.
  updateMarkerPosition(latLng);
  geocodePosition(latLng);
  
  
  // Add dragging event listeners.
  google.maps.event.addListener(marker, 'dragstart', function() {
	updateMarkerAddress('Dragging...');
  });
  
  google.maps.event.addListener(marker, 'drag', function() {
//			updateMarkerStatus('Dragging...');
	updateMarkerPosition(marker.get_position());
  });
  
  google.maps.event.addListener(marker, 'dragend', function() {
//			updateMarkerStatus('Drag ended');
	geocodePosition(marker.get_position());
  });
}				



function initializeAdminModalMap(street, city, state, zip)
{
		var addressFinal = "";
		
		if(street != "")
		{
			addressFinal = street+" ";
		}				
		
		addressFinal += city+", "+state+" "+zip;		
	// END :: assembling address

		geocoder.geocode( { 'address': addressFinal}, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) 
		{
			var latLng = new google.maps.LatLng(results[0].geometry.location.Tf, results[0].geometry.location.Wf);												

			var map2 = new google.maps.Map(document.getElementById('mapCanvasModal'), {
				zoom: 14,																// zoom of 6 gives most of SouthEast
				center: results[0].geometry.location,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			});
		
		  map2.setCenter(results[0].geometry.location);
		  
		  var marker2 = new google.maps.Marker({
			  map: map2, 
			  position: results[0].geometry.location,
			  draggable: false
		  });
	  
		} 
		else 
		{
			  alert("Geocode was not successful for the following reason: " + status);
		}

  });	

}	// END :: initializeAdminModalMap




function addMarkerListener(marker, link) {
  google.maps.event.addListener(marker, 'click', function(){
   window.location = link;
  }); 
}


function addMarkerListenerShowModal(marker, id) {
  google.maps.event.addListener(marker, 'click', function(){
   showModal(id);
  }); 
}