var Map ={};

Map.view = {
		
	map_view : null,
	test: 'hello',
	
	init : function()
	{
		
		//data.items = Json.evaluate(data.items);
		
		var tabs = new ps.ui.TabPanel($('sidepanel_tabs'));
		
		var connector = new ps.mapping.connector.StaticConnector(data.items);
		var mm = new ps.mapping.MarkerManager();

		var mapping = new ps.mapping.MapView($('map'), mm, connector);	
		mapping.setIconFactory(new mapsack.mapping.DefaultIconFactory);
		
		
		if (data.map.account_id == 6) 
			mapping.setInfoWindow(new mapsack.mapping.infowindow.DCInfoWindow(mapping));
		else
			mapping.setInfoWindow(new mapsack.mapping.infowindow.InfoWindow(mapping));
		
		this.map_view = mapping;
		var gmap = mapping.getGMap();
		
		
	
		
		
		mapping.addEvent('zoomEnd', this.zoomEnd.bind(this));
		
		// Fullscreen
		if (data.map_options.is_fullscreen)
		{
			var height = window.getHeight();
			$('sidepanel').style.height = (height-2)+'px';
			$('map').style.height = (height-2)+'px';
		}
		
		if (data.map_options.map_type) gmap.setMapType(window[data.map_options.map_type]);
		
		//Set tab panel heights
		var tab_height = $('sidepanel_tabs').getSize().size.y;
		var cont_height = $('sidepanel').getSize().size.y;
		
		$('sidepanel_items').style.height = (cont_height-tab_height-2)+'px';
		$('sidepanel_cats').style.height = (cont_height-tab_height-2)+'px';
			
		this.item_list = new mapsack.mapping.MarkerList($('item_list'), mapping);
		this.category_list = new mapsack.mapping.CategoryList($('category_list'), mapping);

		// Show it all
		$('main-frame').style.visibility = '';
		$('loader').style.display = 'none';
		
		//Compute location and zoom
		var zoom = 2;
		var latlng = new GLatLng(20,0);
				
		if (data.map_options.map_type)
		{
			mapping.getGMap().setMapType(window[data.map_options.map_type]);
		}		
				
		if (data.map_options.fit_to_map)
		{
			var bounds = mm.computeBounds();
			latlng = bounds.getCenter();
			zoom = mapping.getGMap().getBoundsZoomLevel(bounds);
			//console.log(zoom);
		}
		if (data.map_options.zoom) zoom = data.map_options.zoom/1;		
		if (data.map_options.lat && data.map_options.lat) 
		{
			var lat = data.map_options.lat/1;
			var lng = data.map_options.lng/1;
			latlng = new GLatLng(lat,lng);
		}
		
		
		
		var mm =this.map_view.getMarkerManager();
		mm.filter = function(item, marker, bounds)
		{
			var category = Map.view.category_list.findCatById(item.category_id);
			
			if (category == null) return true;
			
			var zoom = Map.view.map_view.getGMap().getZoom();
			
			if (category.zoom_from && (zoom < category.zoom_from)) return false;
			if (category.zoom_to && (zoom > category.zoom_to)) return false;
			
			return true;
		}
		
		// Bug fixes... Stops wrong markers and allows clusters on load
		mapping.updateMarkers();
		this.zoomEnd(20,zoom);
		
		
		gmap.setCenter(latlng, zoom);
		if (data.map_options.show_map_control) gmap.addControl(new GSmallMapControl());
		if (data.map_options.show_map_type_control) gmap.addControl(new GMapTypeControl());
	
		if (data.map_options.popup)
		{
			mm.openInfoWindowById(data.map_options.popup);
			var item = mm.getItemById(data.map_options.popup);
			
			latlng = new GLatLng(item['lat'], item['lng']);
			gmap.setCenter(latlng, zoom);
		}
		
		if (data.map_options.category_id)
		{
			this.category_list.setCategory(data.map_options.category_id);
		}
					
	},
	
	zoomEnd : function(old_zoom, new_zoom)
	{
		var bound = -5;//12;
		
		//console.log(old_zoom+' '+new_zoom+' '+bound);
		
		if ((bound > new_zoom) && (bound <= old_zoom)) 
		{
			this.hideSidepanel();
			/*
			var items = [
				{id: '2343', lat: 50.828, lng:-0.139, title:'Brighton',category_id: -1, body_html:'', img_url_sml:''}
			];
			
			var items = [
				{id: '2323', lat: 18.251, lng:-62.9882, title:'Cluster 1',category_id: -1, body_html:'A town 1', img_url_sml:'http://new.mapsack.com/images/uploads/items/877_1_phptu8woj_sml.jpg'},
				{id: '2343', lat: 18.1778, lng:-63.1422, title:'Cluster 2',category_id: -1, body_html:'A town 2', img_url_sml:'http://new.mapsack.com/images/uploads/items/877_1_phptu8woj_sml.jpg'}				
			];
			*/
			var mm =this.map_view.getMarkerManager();
			mm.filter = function(item, marker, bounds)
			{
				return (item.category_id == 0);
			}
			mm.filterAllItems();
			
			
			this.map_view.closePopup();
			//this.map_view.getMarkerManager().setItems(items);
		}
	
		if ((bound <= new_zoom) && (bound > old_zoom)) 
		{
			var mm =this.map_view.getMarkerManager();
			mm.filter = function(item, marker, bounds)
			{
				return (item.category_id != 0);
			}
			mm.filterAllItems();
			
			this.map_view.closePopup();
			this.showSidepanel();
			//this.map_view.getMarkerManager().setItems(data.items);
		}
		/*
		var mm =this.map_view.getMarkerManager();
		mm.filter = function(item, marker, bounds)
		{
			var category = Map.view.category_list.findCatById(item.category_id);
			
			if (category == null) return true;
			
			var show = true;
			if (category.zoom_from) show = show && (category.zoom_from <= new_zoom);
			if (category.zoom_to) show = show && (category.zoom_from >= new_zoom);
			
			return show;
		}
		mm.filterAllItems();
		*/
		var mm =this.map_view.getMarkerManager();
		mm.filterAllItems();
		
	},
	
	hideSidepanel : function()
	{
		var gmap = this.map_view.getGMap();
		var latlng = gmap.getCenter();
		$('sidepanel').style.display = 'none';
		$('map').style.width = '';
		gmap.checkResize();
		gmap.setCenter(latlng);
	},
	
	showSidepanel : function()
	{
		var gmap = this.map_view.getGMap();
		var latlng = gmap.getCenter();
		$('sidepanel').style.display = '';
		$('map').style.width = '75%';
		gmap.checkResize();
		gmap.setCenter(latlng);
	}

};
