var map;
var geocoder;
var initialLat = 36.1333310;
var initialLng = -95.975638;

function load() {
	if (GBrowserIsCompatible()) {
		geocoder = new GClientGeocoder();
		map = new GMap2($('map'));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(initialLat, initialLng), 6);
	}
}

function searchLocations(getAddress) {
	if (getAddress) {
		var address = getAddress;
	} else {
		var address = $('addressInput').getValue();
	}
	geocoder.getLatLng(address, function(latlng) {
		if (!latlng) {
			alert(address + ' not found');
		} else {
			searchLocationsNear(latlng);
		}
	});
}

function searchLocationsNear(center) {
	var radius = $('radiusSelect').getValue();
	new Ajax.Request('ajax/ajax-account-lookup.php', {
		method: 'post',
		parameters: { lat: center.lat(), lng: center.lng(), radius: radius },
		onComplete: function(transport) {
			map.clearOverlays();
			
			var results = $('map-results');
			results.update('');
			if (transport.responseText == '') {
				results.update('<p><strong><big>Sorry, no results found.</big></strong></p><p>Please select a greater distance <br/>and try your search again.</p>');
				map.setCenter(new GLatLng(initialLat, initialLng), 4);
				return;
			} else {
				var data = transport.responseText.evalJSON();
				var bounds = new GLatLngBounds();
				for (var i=0; i < data.locations.length; i++) {
					var current = data.locations[i].location;
					var company = current.company;
					var name = current.name;
					var street = current.street;
					var citystate = current.citystate;
					var phone = current.phone;
					var email = current.email;
					var website = current.website;
					var distance = parseFloat(current.distance);
					var point = new GLatLng(parseFloat(current.lat), parseFloat(current.lng));
					var marker = createMarker(point, company, name, street + ', ' + citystate);
					map.addOverlay(marker);
					var sidebarEntry = createSidebarEntry(marker, company, name, street, citystate, phone, email, website, distance, i);
					results.insert( { bottom: sidebarEntry } );
					bounds.extend(point);
				}
				map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
			}
		}
	});
}

function createMarker(point, company, name, address) {
	var marker = new GMarker(point);
	var big_name = '';
	if (company != '') { big_name = company } else { big_name = name };
	var html = '<b>' + big_name + '</b> <br/>' + address;
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

function createSidebarEntry(marker, company, name, street, citystate, phone, email, website, distance, id) {
	var div = document.createElement('div');
	var divName = 'map-result-' + id;
	$(div).setAttribute('id', divName);
	$(div).addClassName('map-result');
	var html = '';
	var big_name = '';
	if (company != '') { big_name = company } else { big_name = name };
	html += '<p><strong><big>' + big_name + '</big></strong><br/>(' + distance.toFixed(1) + ' miles)<br/>';
	//if (company != '') { html += name + '<br/>' };
	html += street + '<br/>' + citystate + '<br/>' + phone + '<br/>';
	//if (email != '') { html += '<a href="mailto:' + email + '">' + email + '</a><br/>'; };
	if (website != '') { html += '<a href="' +  website + '" title="' + big_name +' Official Website" target="_blank">' + website + '</a><br/>' };
	$(div).update(html);
	var link = document.createElement('div');
	$(link).update('<small>SHOW ON MAP</small>');
	$(div).insert({ bottom: link });
	$(div).insert({ bottom: '</p>'});
	$(link).setStyle( { color: '#aa0000', cursor: 'pointer', fontSize: '12px' } );
	Event.observe(link, 'mouseover', function() { link.setStyle( { textDecoration: 'underline' } ); });
	Event.observe(link, 'mouseout', function() { link.setStyle( { textDecoration: 'none' } ); });
	GEvent.addDomListener(link, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	return div;
}
