
hotels = {};
markersArray = [];
lastMarker = '';

function maps_init() {
	// set up event handlers on form controls
	$(".noRegion").click(function() {
		$("#mapRegionSelect").val("all");
		$("#mapRegionSelect").attr('disabled', true);
	});
	$(".hasRegion").click(function() {
		$("#mapRegionSelect").val("all");
		$("#mapRegionSelect").removeAttr('disabled');
	});
	$('#mapFilterForm input:radio, #mapFilterForm input:text, #mapFilterForm select').change(function () {
		sendFormData();
	});
	$('#mapFilterForm input:checkbox').click(function () {
		sendFormData();
	});
	$('#mapResetButton').click(function () {
		setTimeout('sendFormData()', 200);
	});
	$('#mapFilterForm').submit(function (event) {
		event.preventDefault();
		sendFormData();
		//trace($(this).serialize());
	})
	
	var myLatlng = new google.maps.LatLng(52.416830,-1.780708);
	var myOptions = {
	  zoom: 8,
	  center: myLatlng,
	  mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	map = new google.maps.Map(document.getElementById("gMap"), myOptions);
	//google.maps.event.addListener(map, 'zoom_changed', function() {
    //  if (this.getZoom() > 15) this.setZoom(15);
    //  if (this.getZoom() < 5) this.setZoom(5);
    //});
    sendFormData();
}

function resetMap() {
	var myLatlng = new google.maps.LatLng(53.958866,-1.092965);
	var bounds = new google.maps.LatLngBounds();
	bounds.extend(myLatlng);
    map.fitBounds(bounds);	
	map.setZoom(5);
}

function sendFormData() {
	//resetTracer();
	var payload = $('#mapFilterForm').serialize();
	//trace(payload);
	jQuery.get('/maps-ajax?action=go&' + payload, displayFormData);
	if (lastMarker) lastMarker.infowindow.close();
}

function displayFormData(data) {
	removeMarkers();
	hotels = JSON.parse(data);
	if (! hotels.length) {
		resetMap();
		// TODO - display a jQuery dialog saying no places found
	} else {
		var latlngArray = [];
		var markerOptions = {  };
var image = new google.maps.MarkerImage("images/icons/google-map-pin.png", new google.maps.Size(9, 21),
      new google.maps.Point(0,0),
      new google.maps.Point(5, 21));
  var shadow = new google.maps.MarkerImage('images/icons/google-map-pin-shadow.png', new google.maps.Size(18, 21),
      new google.maps.Point(0,0),
      new google.maps.Point(5, 21));
		for (var i = 0; i < hotels.length; i++) {
			latlngArray[i] = new google.maps.LatLng(hotels[i].lat,hotels[i].lng);
			markersArray[i] = new google.maps.Marker({
				position: latlngArray[i],
				title: hotels[i].title,
				icon: image,
				shadow: shadow
			});
			markersArray[i].html = "<div class=\"mapPopupInfo\"><h3><a href=\"" + hotels[i].url + "\">" + hotels[i].title + "</a></h3>" + hotels[i].description + "<br />" + hotels[i].thumbnail;
			markersArray[i].html += "<ul><li><a href=\"" + hotels[i].url + "\" class=\"action\">Browse venue</a></li><li><a href=\"/conferences-and-meetings/plan-and-request-a-proposal\" class=\"action\">Book a conference</a></li><li><a href=\"" + hotels[i].url + "/special-offers/hotel-stays\" class=\"action\">Book a leisure break</a></li><li><a href=\"" + hotels[i].url + "/map-and-directions\" class=\"action\">Get directions</a></li></ul></div>";
			attachPopup(markersArray[i], markersArray[i].html);
			markersArray[i].setMap(map);
		}
		// make a bounding box to fit the markers displayed
		var bounds = new google.maps.LatLngBounds();
		for (var j = 0; j < latlngArray.length; j++)
		{
		  bounds.extend(latlngArray[j]);
		}
		
		// fit map but if only one place found, don't zoom in until you see ants...
		map.fitBounds(bounds);	
		if (latlngArray.length == 1) {
			map.setZoom(10);
		}
	}
}
function attachPopup(marker, content) {
	marker.infowindow = new google.maps.InfoWindow({ content: content, maxWidth: '274' });
	google.maps.event.addListener(marker, 'click', function() { 
		if (lastMarker) lastMarker.infowindow.close();
		lastMarker = marker;
		marker.infowindow.open(map,marker); 
	});
}
// Shows any overlays currently in the array
function removeMarkers() {
	if (markersArray) {
		for (i in markersArray) {
			markersArray[i].setMap(null);
		}
	}
}

function trace(msg) {
	document.tracer = document.tracer || false;
	if (!document.tracer) {
		n = document.createElement('div');
		n.setAttribute('id', "tracer");
		document.body.appendChild(n);
		document.tracer = true;
	}
	el = document.getElementById('tracer');
	el.innerHTML = '<br />' + msg + el.innerHTML;
}

function resetTracer() {
	el = document.getElementById('tracer');
	el.innerHTML = '';
}

