//
//  Created by Sean Gates on 2008-11-21.
//  Copyright 2008 Paramore | Redd Online Marketing. All rights reserved.
// 

$('document').ready(function() {
	/********* DEFAULTS ********************************************************/
	var def_catId			= 29;					// important for the categories to work correctly
	var def_zoomLevel 		= 3;
	var def_jsonFile 		= 'locations_json';
	var def_maxDistance 	= 100; 					// the maximum distance from any of the points
	var def_LatLng			= new GLatLng(38, -97);
	/********* END DEFAULTS ****************************************************/

	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("map"));
		map.setCenter(def_LatLng, def_zoomLevel);

		geocoder = new GClientGeocoder();

		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());

		function formatBubble(input){
			var address2 = '';
			if(input.address2 != ''){
				address2 = '<br />' + input.address2;
			}
			var html = '<p style="margin: 0; padding: 0;">' + input.city + ', ' + input.state + ' ' + input.zip + '<br/>For address and directions, call 1-800-432-7669</p>';
			return html;
		}

		function add_marker(latlng, loc, icon_num){
			if(icon_num != null){
				//baseIcon.image = "/images/site/map/track_map_icon_" + icon_num + ".png";
			}
			/*var marker = new GMarker(latlng,{ icon:baseIcon });*/
			var marker = new GMarker(latlng);
			map.addOverlay(marker);
			GEvent.addListener(marker, 'click', function(){
				marker.openInfoWindowHtml(formatBubble(loc));
			});
			return marker;
		} // end function add_marker

		var timer = '';

		$('#search_locations').submit(function() {
			clearTimeout(timer);
			$('#form_error').slideUp();
			var address = $('#address_input').val();
			geocoder.getLatLng(address, function(latlng) {
				if (!latlng) {
					//alert(address + ' not found');
					$('#form_error').slideDown();
					timer = setTimeout(function(){
						$('#form_error').slideUp();
					},10000);
				} else {
					searchLocationsNear(latlng);
				}
			});
			return false;
		});

		function searchLocationsNear(center) {;
			var searchUrl = '/map/search.php?lat=' + center.lat() + '&lng=' + center.lng();
			$.getJSON(searchUrl, function(json) {
				map.clearOverlays();
				$('#search_results').remove();
				$('#search_locations_list').after('<ol id="search_results"></ol>');

				if (json.locations.length == 0) {
					$('#search_locations_list').after('<p>Error getting results.</p>');
					return;
				}

				var bounds = new GLatLngBounds();

				$.each(json.locations,function(i,loc){
					var point = new GLatLng(parseFloat(loc.geo_lat),parseFloat(loc.geo_lng));
					var marker = add_marker(point,loc,(i+1));
					createSidebarEntry(marker, loc, (i+1));
					bounds.extend(point);
				});
				map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
			});
		}

		function createSidebarEntry(marker, loc, mapNum){
			var address2 ='';
			if(loc.address2 != ''){
				address2 = loc.address2 + "<br />";
			}
			$('#search_results').append('<li id="location_' + loc.id + '" class="location_item"><p style="margin: 0; padding: 0;"><a name="map_' + loc.id + '" href="#" onclick="return false;">' + loc.city + ', ' + loc.state + ' ' + loc.zip + ' (' + Math.round(loc.distance) + ' miles)</a></p></li>');
			
			GEvent.addDomListener(document.getElementById('location_' + loc.id), 'click', function() {
				GEvent.trigger(marker, 'click');
			});

			GEvent.addDomListener(marker, 'click', function() {
				$('.location_item').css('background-color','transparent');
				$('#location_' + loc.id).css('background-color','#EEE');
			});
		
			$('.location_item').hover(
				function(){ $(this).css('background-color','#eee'); }, 
				function(){ $(this).css('background-color','transparent'); }
			);
		}

	} // end browser compatibility test
}); // end ready()