
var nanoMap = {

	map: null,
	markers: null,
	geocoder: null,
	localhost: false,
	itemFocus: 0,
	dataUrl: '',
	centerLat: 38.896809,
	centerLng: -50.00,
	zoomLevel: 3,

	gotoAddress: function(address) {
		nanoMap.geocoder.getLatLng(address, function(point) {
			if(!point) alert("Unable to locate address"); 
				else nanoMap.map.setCenter(point, 10); 
		});
	},

	addItem: function(item) {


		if(item.cat.icon.length > 0 && !nanoMap.localhost) {
			var icon = new GIcon();
			icon.image = "http://www.nanotechproject.org" + item.cat.icon; 
			icon.iconSize = new GSize(32, 34);
			icon.iconAnchor = new GPoint(16, 17); 
			icon.infoWindowAnchor = new GPoint(16,17); 
			icon.shadow = "http://www.synbioproject.org/process/templates/styles/images/map_icon_shadow.png";
			icon.shadowSize = new GSize(50, 34); 
			var marker = new GMarker(new GLatLng(item.lat, item.lng), icon); 
		} else {
			var marker = new GMarker(new GLatLng(item.lat, item.lng)); 
		}

		var site_type = item.site_type; 
		if(item.site_type_details != undefined && item.site_type_details.length > 0) site_type += " - " + item.site_type_details;  

		var itemUrl = nanoMap.dataUrl + item.id + '/';

		var html = "<div style='margin-left: 2px;'><strong><a href='" + itemUrl + "'>" + item.name + "</a></strong></div>";

		html += "<div class='map_data_table'>" + 
			"<table>";

		var skipKeys = ['name', 'lat', 'lng', 'site_type_detail', 'site_type_id', 'id', 'cat']; 

		for(key in item) {
			var val = item[key]; 
			if(val.length < 1) continue; 
			if(jQuery.inArray(key, skipKeys) > -1) continue; 
			if(val.length > 80) val = val.substring(0, 80) + "&hellip; <a href='" + itemUrl + "'>more</a>"; 
			
			if(key == 'site_type') {
				val = "<a href='site_types/" + item.site_type_id + "/'>" + val + "</a>"; 
				if(item.site_type_detail.length > 0) val += " - " + item.site_type_detail; 
			} 
			var label = key.replace(/_/g, ' '); 			
			label = label.replace(/containment/gi, 'contaminant'); 
			html += "<tr><td class='t'>" + label + "</td><td>" + val + "</td></tr>";
		}
		
		html += "</table></div>"; 	

		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html); 
		}); 

		nanoMap.map.addOverlay(marker); 
		nanoMap.markers[item.cat.id][item.id] = marker;
	},


	loadMap: function() {

		nanoMap.geocoder = new GClientGeocoder();
		nanoMap.geocoder.setCache = null;

		nanoMap.map = new GMap2(document.getElementById("map"));
		nanoMap.map.addControl(new GLargeMapControl());
		nanoMap.map.addControl(new GMapTypeControl());
		if(nanoMap.itemFocus > 0) nanoMap.map.setMapType(G_HYBRID_MAP); 

		nanoMap.markers = new Array(); 
			
		nanoMap.map.setCenter(new GLatLng(nanoMap.centerLat, nanoMap.centerLng), nanoMap.zoomLevel);

		var dataUrl = nanoMap.dataUrl + '?r=c';
		if(nanoMap.itemFocus > 0) dataUrl += '&summary=1';

		$.getJSON(dataUrl, {'c': 'r'}, function(data, textStatus) {
			$.each(data.categories, function(c, cat) {
				nanoMap.markers[cat.id] = new Array(); 
			}); 
			$.each(data.items, function(i, item) {
				$.each(data.categories, function(c, cat) {
					if(cat.id == item.site_type_id) item.cat = cat;	
				}); 
				nanoMap.addItem(item); 
			}); 
		}); 
	}, 

	init: function() {

		var loc = window.location.toString();
		nanoMap.localhost = loc.indexOf('localhost') > -1; 

		if($("#center_lat").size() > 0) {
			nanoMap.centerLat = parseFloat($("#center_lat").text(), 10); 
			nanoMap.centerLng = parseFloat($("#center_lng").text(), 10); 
			nanoMap.itemFocus = true; 
		}
		if($("#zoom_level").size() > 0) nanoMap.zoomLevel = parseInt($("#zoom_level").text());

		nanoMap.dataUrl = 'http://www.nanotechproject.org/inventories/remediation_map/data/';

		nanoMap.loadMap();
		
		$("#submit_address").click(function() {
			var address = $("#address").val();
			if(address.length) nanoMap.gotoAddress(address);
			return false; 
		}); 

		$("#category_checkboxes input").click(function() {
			for(cat_id in nanoMap.markers) {
				if(cat_id == $(this).val()) {
					for(m in nanoMap.markers[cat_id]) {
						marker = nanoMap.markers[cat_id][m];
						if($(this).is(":checked")) marker.show();
							else marker.hide();
					}
				}
			}
		}); 
		
	}
}

$(document).ready(function() {

	var $map = $("#map"); 
	
	$("#breadcrumb").before($map); 

	nanoMap.init();
}); 


