jQuery(document).ready(function($) {

	var LatLng = google.maps.LatLng;
	var bounds = new google.maps.LatLngBounds(new LatLng(viewport.lat_lo, viewport.lng_lo), new LatLng(viewport.lat_hi, viewport.lng_hi));

	var markers = {};
	var map = new google.maps.Map(document.getElementById("googlemap"), {
		center: google.maps.LatLng(53, -1),
		zoom: 6,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		streetViewControl: true,
		scrollwheel: false
	});

	var open_infowindow = false;
	
	var draw = function() {
		var bounds = map.getBounds();
		$.post(String("/depots"), "bounds="+bounds.toUrlValue()+"&name="+escape($("#name").val()), function(data) {
			/*
			for (i in markers)
				markers[i].setMap(null);
			markers = [];
			*/
			var newmarkers = {};
			var results = $("#search-results").empty();

			if (data.length) {
				$(data).each(function() {
					var r = $("<div/>")
						.addClass("member")
						.append(
							$("<h2/>").text(this.company)
						)
						.append(
							$("<address/>").html(this.address.join("<br/>"))
						);
					if (this.telephone)
						r.append($("<p/>").text(this.telephone));
					if (this.website)
						$("h2", r).wrapInner('<a href="http://'+this.website+'" onclick="window.open(this.href, \'\')"/>');
					if (admin) {
						r.find("h2:first").before('<div class="onpage-controls">\
							 <a href="javascript:edit_member('+this.id+')" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span> Edit</a>\
							 <a href="javascript:delete_member('+this.id+')" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span> Delete</a>\
							</div>');
					}
					results.append(r);

					if (this.id in markers) {
						newmarkers[this.id] = markers[this.id];
						delete markers[this.id];
						return;
					}
					var ll = new google.maps.LatLng(this.latitude, this.longitude);
					var address = "";
					var marker = new google.maps.Marker({
						icon: "/images/map_icon.png",
						position: ll,
						map: map
					});
					newmarkers[this.id] = marker;

					c = r.clone()
					c.find("div.onpage-controls").remove()

					var infowindow = new google.maps.InfoWindow({
						//content: "<strong>"+this.company+"</strong><br/>"+this.address.join("<br/>")+"<br/>"+(this.telephone ? "<strong>"+this.telephone+"</strong>" : "")
						content: c.get(0)
					});
					google.maps.event.addListener(marker, 'click', function() {
						if (open_infowindow) open_infowindow.close();
						infowindow.open(map, marker);
						open_infowindow = infowindow;
					});

				});
				$.each(markers, function(id, marker) {
					marker.setMap(null);
				});
				markers = newmarkers;
			} else {
				$.each(markers, function(id, marker) {
					marker.setMap(null);
				});
				markers = {};
				results.html("<p>Sorry, there are no distributors in this area");
			}
		}, "json");
	};
	google.maps.event.addListener(map, "idle", draw);
	google.maps.event.addListener(map, "click", function() {
		if (open_infowindow) open_infowindow.close();
	});

	var zoomer = google.maps.event.addListener(map, "bounds_changed", function() {
		map.setZoom(map.getZoom()+1);
		google.maps.event.removeListener(zoomer);
	});
	map.fitBounds(bounds);

	$("#depots-search").submit(function() {
		$.post("/depots", "action=geocode&"+$(this).serialize(), function(viewport) {
			var zoomer = google.maps.event.addListener(map, "bounds_changed", function() {
				map.setZoom(map.getZoom()+1);
				google.maps.event.removeListener(zoomer);
			});
			map.fitBounds(new google.maps.LatLngBounds(new LatLng(viewport.lat_lo, viewport.lng_lo), new LatLng(viewport.lat_hi, viewport.lng_hi)));
			draw();
		}, "json");
		return false;
	});
});

