var geocoder;
var map;
var closestStore = new Array();
var closestLng = new Array();
var storePop = closestStore.pop();

function load() {
  if (GBrowserIsCompatible()) {
	geocoder = new GClientGeocoder();
	map = new GMap2(document.getElementById('map'));
	map.removeMapType(G_HYBRID_MAP);
	map.addControl(new GSmallZoomControl3D());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(41, -73), 6);
  }
}

function searchLocations() {
	$("#sidebar").empty();
	$('.msg').remove();
var address = document.getElementById('addressInput').value;
	geocoder.getLatLng(address, function(latlng) {
		if (!latlng) {
			$('.errmsg').empty().show().append('Address: "' + address + '" not found');
		} else {
			$('.errmsg:visible').hide();
			$('#map_canvas').prepend('<p class="msg">click on a location to view it on the map</p>')
			 searchLocationsNear(latlng);
		}
	});
}

function searchLocationsNear(center) {
	var addressLng = center.x;
	var addressLat = center.y;
	var radius = 25;
	var searchUrl ="/xml/general_store_locator.xml";
	GDownloadUrl(searchUrl, function(data) {
		/*Call xml file*/
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('marker');
		map.clearOverlays();

		/*Check to see if xml is read in correctly*/
		if (markers.length == 0) {
			$("#sidebar").empty().append('No results found.');
			map.setCenter(new GLatLng(40, -100), 4);
			return;
		}
		
		/*calculate*/
		calculateLatLng(markers,addressLng, addressLat);
		var bounds = new GLatLngBounds();

		/*broswer check for IE6*/
		if ( $.browser.msie && $.browser.version > 6.0  ) {
			bounds.extend(point);
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		}
		if ( !$.browser.msie ) {
			bounds.extend(point);
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		}
		
	});
}

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

function createSidebarEntry(marker, name, address, phone, distance) {
	var div = document.createElement('div');
	var html = '<div class="sidebarEntryAddress"><p><span>'+ name + '</span><br/>' + address + '<br />' + phone + '<br />( '+distance+' )</p></div>';
	div.innerHTML = html;
	
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		div.style.backgroundColor = '#eee';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		div.style.backgroundColor = '#fff';
	});
	return div;
}

function calculateLatLng(markers, addressLng, addressLat){
	var pi = Math.PI;
	$(markers).each(function(i,ele){
	var R = 3959; // miles
	var dLat = ((eval( addressLat - markers[i].getAttribute('lat') ))*(pi/180));
	var dLon = ((eval( addressLng - markers[i].getAttribute('lng') ))*(pi/180));
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(  ((eval(addressLat))*(pi/180)) ) * Math.cos( ((eval(markers[i].getAttribute('lat')))*(pi/180)) ) * Math.sin(dLon/2) * Math.sin(dLon/2); 
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var d = R * c;
	var distance = d.toFixed(2)

	if ( distance < 25 ){
		var name = markers[i].getAttribute('name');
		var address = markers[i].getAttribute('address');
		var phone = markers[i].getAttribute('phone');
		var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')) );
		var marker = createMarker(point, name, address);
		
		map.addOverlay(marker);
		var sidebarEntry = createSidebarEntry(marker, name, address, phone, distance);
		createSidebarEntry(marker,sidebarEntry);
		$("#sidebar").append(sidebarEntry);
	}
	});//markers - find lng

	return true;
}

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