var map;
var geocoder;

function load() {
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		map = new GMap2(document.getElementById('map'));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(40.756054, -73.986951), 10);
	}
}

function searchLocations() {
	var address = document.getElementById('addressInput').value;
	geocoder.getLatLng(address, function(latlong) {
		if (!latlong) {
			alert(address + ' not found');
   		} else {
			searchLocationsNear(latlong);
   		}
	});
}

function searchLocationsNear(center) {
  	var radius = document.getElementById('radiusSelect').value;
	var searchUrl = '/storelocator/markers/?latitude=' + center.lat() + '&longitude=' + center.lng() + '&radius=' + radius;

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

	    var sidebar = document.getElementById('stores');
	    sidebar.innerHTML = '';
	    if (markers.length == 0) {
	      sidebar.innerHTML = 'No results found.';
	      map.setCenter(new GLatLng(40, -100), 4);
	      return;
   		}

		var bounds = new GLatLngBounds();
   		for (var i = 0; i < markers.length; i++) {
   			var name = markers[i].getAttribute('name');
   	 		var address = markers[i].getAttribute('address');
   	 		var city = markers[i].getAttribute('city');
   	 		var state = markers[i].getAttribute('state');
  	  		var zip = markers[i].getAttribute('zip');
   	 		var phone = markers[i].getAttribute('phone');
			var distance = parseFloat(markers[i].getAttribute('distance'));
			var point = new GLatLng(parseFloat(markers[i].getAttribute('latitude')),
			parseFloat(markers[i].getAttribute('longitude')));

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

function createMarker(point, name, address, city, state, zip, phone, distance) {
	// set the marker image
	//var image = "/media/images/shield.png";
	//markerOptions = { icon : image };

	//var doublecross = new GIcon(G_DEFAULT_ICON);
	//doublecross.image = "http://alterseekers.com/doublecross/images/dcv_marker_dark.png";
	//doublecross.image = "/media/images/cross-marker.png";
	//doublecross.iconSize = new GSize(14, 43);
   	//doublecross.iconSize = new GSize(20, 34);
    
   	// Set up our GMarkerOptions object
   	//var markerOptions = { icon:doublecross };
	var markerOptions = {}

	var marker = new GMarker(point, markerOptions);
	var html = '<span style="font-size: 11px"><b>' + name + '</b> (' + distance.toFixed(1) + ')' + '<br/>' + address + '<br/>' + city + ', ' + state + ' ' + zip +'<br> Phone: ' + phone + '</span>';
	//var html = '<b>' + name + '</b> <br/>' + address  + '<br/>' + city + ', ' + state + ' ' + zip +'<br/><br> Phone: ' + phone;
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function createSidebarEntry(marker, name, address, city, state, zip, phone, distance) {
	var div = document.createElement('div');
	var html = '<b>' + name + '</b> (' + distance.toFixed(1) + ')' + '<br/>' + address + '<br/>' + city + ', ' + state + ' ' + zip +'<br/><br> Phone: ' + phone;
	div.innerHTML = html;
	div.style.cursor = 'pointer';
	div.style.marginBottom = '15px';
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		//div.style.backgroundColor = '#ddd';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		//div.style.backgroundColor = '#ebebeb';
	});
	return div;
}

$(document).ready(function() {
	//initialize();
	load();
});
