function findLocations () {

	var zip = document.getElementById("ZIP").value;
	
	if (!validateZIP(zip)) {
	
		alert ("Please enter a valid 5 digit US ZIP code");
		return false;
		
	}
	
	
	searchLocations(zip);
	
	return;
	
}


function validateZIP (zip) {

	var numericExpression = /^[0-9]+$/;

	if (zip.length == 5 && zip.match(numericExpression))
		return true;
	else
		return false;

}


function searchLocations(zip) {
	
	geocoder.getLatLng(zip, function(latlng) {
	
		if (!latlng) {
		
			alert(zip + ' not found');
			
		} else {
		
			searchLocationsNear(latlng);
			
		}
		
	});
	
}


function searchLocationsNear(center) {

	var searchUrl = 'apwit/getLocations.php?lat=' + center.lat() + '&long=' + center.lng();
	
	GDownloadUrl(searchUrl, function(data) {
	
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('location');
		map.clearOverlays();

		// Check for results
		var sidebar = document.getElementById('locations');
		sidebar.innerHTML = '';
		if (markers.length == 0) {
			sidebar.innerHTML = '<li>No results found.<li>';
			map.setCenter(new GLatLng(40, -100), 4);
			return;
		}
		
		// Update info span in side div
		var infoSpan = document.getElementById('info');
		infoSpan.innerHTML = 'Listed below are the names and addresses of the dealers in your area. Click each one to see it on the map	.';

		// Display results
		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 distance = parseFloat(markers[i].getAttribute('distance'));
			var email = markers[i].getAttribute('email');
			var phone = markers[i].getAttribute('phone');
			var website = markers[i].getAttribute('website');
			var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
			
			var marker = createMarker(point, name, address, phone, email, website);
			map.addOverlay(marker);
			var sidebarEntry = createSidebarEntry(i + 1, marker, name, address, distance, phone, email, website);
			sidebar.appendChild(sidebarEntry);
			bounds.extend(point);
			
		}
		
		// Adjust map's view to fit new points
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	});
}


function createMarker(point, name, address, phone, email, website) {

	// Format address to single line
	address = address.replace("<br />", ", ");
	address = address.replace("<br/>", ", ");
	address = address.replace("<br>", ", ");
	
	// Format links
	if (email) email = "<br />Email:&nbsp;<a href='mailto:" + email + "'>" + email + "</a>";
	website = "<a target='_blank' href='" + website + "'>Dealer website</a>";
	directions = "<a target='_blank' href='http://maps.google.com/maps?daddr=" + address + "'>Get directions</a>";
	
	var marker = new GMarker(point, markerOptions);
	var html = "<b>" + name + "</b><br />" + address
			 + "<br />Phone:&nbsp;" + phone
			 + email 
			 + "<br />" + website + "&nbsp;|&nbsp;" + directions;
	
	GEvent.addListener(marker, 'click', function() {
	
		marker.openInfoWindowHtml(html);
		
	});
	
	return marker;
}


function createSidebarEntry(num, marker, name, address, distance, phone, email, website) {
	
	// Format address to single line
	address = address.replace("<br />", ", ");
	address = address.replace("<br/>", ", ");
	address = address.replace("<br>", ", ");
	

	
	// Format links
	if (email) email = "<br>Email:&nbsp;<a href='mailto:" + email + "'>" + email + "</a>";
	website = "<a target='_blank' href='" + website + "'>Dealer website</a>";
	directions = "<a target='_blank' href='http://maps.google.com/maps?daddr=" + address + "'>Get directions</a>";
	
	var li = document.createElement('li');
	var html = "<span>" + name + "</span> (" + distance.toFixed(1) + " miles)<br />" + address
			 + "<br />Phone:&nbsp;" + phone + email + "<br />" + website + "&nbsp;|&nbsp;" + directions;
	li.style.cursor = 'pointer';
	li.innerHTML = html;
	
	GEvent.addDomListener(li, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	
	GEvent.addDomListener(li, 'mouseover', function() {
		li.style.backgroundColor = '#eee';
	});
	
	GEvent.addDomListener(li, 'mouseout', function() {
		li.style.backgroundColor = '#fff';
	});
	
	return li;
}