/* 
 * ATTRACTIONS LISTINGS
 */
(function(app, $, undefined) {
	
	var self = app.attractions = {};
	
	self.mapData = {};
	
	self.setMapData = function(data)
	{
		self.mapData = data;
	}
	
	self.loadMap = function()
	{
		var lat = 50.75;
		var lng = -3.86;
		var latlng = new google.maps.LatLng(lat,lng);
		var myOptions = {
			zoom: 8,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		self.map = new google.maps.Map(document.getElementById("attractions_map"), myOptions);
		self.markers = [];
		self.infoWindows = [];
		
		for (var i = 0; i < self.mapData.length; i++) {
			
			latlng = self.mapData[i].latlng.split(',');
			lat = Number(latlng[0]);
			lng = Number(latlng[1]);
			
			var listing = self.mapData[i];
			var marker_latlng = new google.maps.LatLng(lat,lng);
			var marker = new google.maps.Marker({
				position: marker_latlng,
				title: listing.name
			});		
			marker.our_id = listing.id;
			marker.index = i;
			
			var infoWindow = new google.maps.InfoWindow({
				content: '<div class="gmap-popup-small">' + listing.name + '</div>'
			});
			
			google.maps.event.addListener(marker, 'click', function() {
				self.infoWindows[this.index].open(self.map, this);
			});	
			
			// To add the marker to the map, call setMap();
			marker.setMap(self.map);
			self.markers.push(marker);
			self.infoWindows.push(infoWindow);
		}
	}
	
	self.loadFilters = function() 
	{
		var currentFilters = {};
		$(function() {
			self.updateCounts();
			
			$("#facility_filter input").change(function() {
				
				// loop through all our checkboxes to check their current state
				$("#facility_filter input[type='checkbox']").each(function() {
					currentFilters[this.id] = this.checked ? true : false ;
				});
				
				// turn all off first
				$(".attraction_snippet").addClass('hidden');
				
				// now loop through filters and concatenate any that are true
				var currentFilter = '';
				for (var filter in currentFilters) {
					if (currentFilters[filter]===true) currentFilter += '.'+filter;
				}
				
				// now show all snippets that match this filter
				$(".attraction_snippet"+currentFilter).removeClass('hidden');
				
				// now hide/show map markers based on which snippets are showing
				for (var i in dataApp.attractions.markers) {
					var id = dataApp.attractions.markers[i].our_id;
					var isHidden = !$("#attraction_snippet_"+id).hasClass('hidden');
					dataApp.attractions.markers[i].setVisible(isHidden);
				}
				
				self.updateCounts();
				self.updatePagination();
		
			});
		});
	}

	self.updateCounts = function()
	{
		$("#facility_filter label").each(function() {
			var id = $(this).attr('for');
			var showingCount = $(".attraction_snippet."+id+":not(.hidden)").size();
			$("#"+id)[0].disabled = (showingCount === 0) ? true : false ;
			$(this).find('.count').html(showingCount);
		});
	}
	
	self.updatePagination = function()
	{
		if ($(".paginator").size()) {
			console.log('depaginating');
			$("#snippet_list").depagination();
		}
		$("#snippet_list").pagination();
	}

}(window.dataApp = window.dataApp || {}, jQuery));
