/*
* Find lodge near address / zipcode
* @see : http://code.google.com/support/bin/answer.py?hl=en&answer=87134
*/

//TODO : clean up and cut down duplicated code


   function searchLocations()
   {
		//grab form vars
		var address = document.getElementById('addressInput').value;
		var radius = document.getElementById('radiusSelect').value;
		//grab selected categories
		//NOTE : until a category bitmask is built, just | delim the categories and pass as single url val
		var categories = getCheckedCategories();

     //convert address to lat long before search
     geocoder.getLatLng(address, function(latlng) {
       if (!latlng) {
         alert( "'" + address + "' not found'");
       } else {

		var searchUrl = 'includes/php/find_near.php?lat=' + latlng.lat() + '&lng=' + latlng.lng() + '&radius=' + radius + '&categories=' + categories;

		doAjaxCall( searchUrl );
       }
     });
   }

   function getAllLodges() 
   {
		var categories = getCheckedCategories();
		doAjaxCall( 'includes/php/all_lodges.php?categories=' + categories );
   }

	function getEndorsedLodges()
	{
		var categories = getCheckedCategories();
		
		//reset map first
		clearMap();

		doAjaxCall( 'includes/php/endorsed_lodges.php?categories=' + categories );
	}

function doAjaxCall( searchUrl )
{
     GDownloadUrl(searchUrl, function(data) {
       var xml = GXml.parse(data);
       var markers = xml.documentElement.getElementsByTagName('marker');
       map.clearOverlays();

       sidebar = document.getElementById('sidebar');
       sidebar.innerHTML = '';
       if (markers.length == 0) {
         sidebar.innerHTML = 'No results found.';
//TODO : make set default lat lng for all setCenter() reset calls
		map.setCenter( new GLatLng( 32.9, -85 ), 6 );
         return;
       }

       var bounds = new GLatLngBounds();
       for (var i = 0; i < markers.length; i++) {
		 var id = markers[i].getAttribute('id');
		 var name = markers[i].getAttribute('name');
         var address = markers[i].getAttribute('address');
         var distance = parseFloat(markers[i].getAttribute('distance'));
         var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')),
                                 parseFloat(markers[i].getAttribute('lng')));
		 var phone = markers[i].getAttribute('phone');


         var marker = createMarker(point, id, name, address);
         map.addOverlay(marker);
         var sidebarEntry = createSidebarEntry(marker, id, name, address, distance, phone);
         sidebar.appendChild(sidebarEntry);
         bounds.extend(point);
       }
       map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
     });
}