/*
	Crazy map JS lays ahead... Fear for your life!
*/

jQuery(document).ready(function(){
	var map = new google.maps.Map2(document.getElementById('map'));
	var geocoder = new google.maps.ClientGeocoder();
	
	map.isSearch = 0;
	
	$('#map-search').html('<form action="" method="" id="map-locate"><input type="text" name="location" id="location" /> <button type="submit">Find</button></form>');
	
	$('#map-locate').submit(function(e){
		e.preventDefault();
		
		map.isSearch = 1;
		
		var term = $('#location').val();
		
		geocoder.getLatLng(term + ', UK', function(point){
			map.setCenter(point, 12);
			
			map.clearOverlays();
			map.loadInvestments();
		});
	});
		
	map.setMapType(G_PHYSICAL_MAP);
	map.addControl(new google.maps.LargeMapControl3D(), new google.maps.ControlPosition(G_ANCHOR_TOP_RIGHT, new google.maps.Size(7, 31)));
	
	map.setCenter(new google.maps.LatLng(53.66529,-3.51577), 6);
	map.currentOverlays = 'regions';
	
	google.maps.Event.addListener(map, 'zoomend', function(){
		if(map.isSearch == 0){
			if(map.getZoom() <= 9){
				if(map.currentOverlays != 'regions'){
					map.clearOverlays();
					map.loadRegions();
				}
			
				map.currentOverlays = 'regions';
			}else{
				map.clearOverlays();			
				map.loadInvestments();
			
				map.currentOverlays = 'investments';
			}
		
			map.storedZoom = map.getZoom();
		}
		
		map.isSearch = 0;
	});
	
	google.maps.Event.addListener(map, 'dragend', function(){
		if(map.getZoom() > 9 && map.isSearch == 0){
			map.clearOverlays();
			map.loadInvestments();
		}
		
		map.isSearch = 0;
	});
	
	map.loadInvestments = function(){
		var bounds = map.getBounds();
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
				
		var minLat = southWest.lat();
		var maxLat = northEast.lat();
		var minLng = southWest.lng();
		var maxLng = northEast.lng();
		
		$.getJSON('/investments-made/map/investments-json/', { 'min_lat': minLat, 'max_lat': maxLat, 'min_lng': minLng, 'max_lng': maxLng }, function(data){
			var marker = [];
			
			$.each(data, function(i){
				var point = new google.maps.LatLng(this.lat, this.lng);
															
				marker[i] = new google.maps.Marker(point);									
				map.addOverlay(marker[i]);
			
				var meta = this;
		
				google.maps.Event.addListener(marker[i], 'click', function(){
					map.panTo(marker[i].getLatLng());
					marker[i].openInfoWindowHtml('<h3>' + meta.title + '</h3><p>' + meta.summary + '</p><p><a href="/investments-made/investments-search/?organisation=' + meta.id + '&orgsearch2=Search">Read on &raquo;</a></p>', { maxWidth: 150 });
				});
			});
		});
	}
	
	map.loadRegions = function(){
		$.getJSON('/investments-made/map/regions-json/', function(data){
			var marker = [];
		
			$.each(data, function(i){
				var point = new google.maps.LatLng(this.lat, this.lng);
				
				var icon = new google.maps.Icon();
				icon.image = '/wp-content/themes/fbtheme/images/map-marker.png';
				icon.iconSize = new google.maps.Size(25, 25);
				icon.iconAnchor = new google.maps.Point(16, 16);
				icon.infoWindowAnchor = new google.maps.Point(25, 7);
																
				marker[i] = new LabeledMarker(point, { 'icon': icon, 'clickable': true, 'labelText': this.occurrances, 'labelOffset': new google.maps.Size(-16, -16), 'labelClass': 'region-marker' });									
				map.addOverlay(marker[i]);
				
				google.maps.Event.addListener(marker[i], 'click', function(){
					map.setCenter(marker[i].getLatLng(), 14);	
				});
			});
		});
	}	
	
	map.loadRegions();
});

