var gWinW;
var gWinH;

if (window.location.href.indexOf("8888") > 0) {
	var gKmlUrl = "/dev/cache/kml/mwbd_utf8_v4.kml";
} else {
	var gKmlUrl = "content/mwbd_utf8_v4.kml";
}
var gDataset = null;	// info from datasets
var gSpecies = null;	// species observed from species_itis
var gLegendLoaded = false;
var gRelatedLayerStatus = true;
var gDontUpdateChart = false;
var gChartType = 'obs';

var gCurrentSpeciesIndex = -1;
var gCurrentRefIndex = -1;
var gShowSelectedRefOnly = false;


// Notes gSID, gMapserver, gActiveLayer, gLayerName are defined in dist_map_common.js

/**** initialize page *****/
function init() {
	/***** 
		Notes: Loading Google Maps load() happens after get_dataset_info is finished (show_dataset_info).
	*****/
	gQuery.dataset = gDatasetID;
	gQuery.datasets = gDatasetID;	// Needed for chart (gQuery.toQueryString())
	gQuery.taxaColumn = "record_count";
	//update_layout();
	
	gExpanderLocked = true;
	
	// Register Navigation Tools.
	$$('img.NavTool').each(function (item) {NavigationTools.add(item);});
	
	// Get dataset's basic information. Google Maps is loaded after get_dataset_info is finished. 
	get_dataset_info(gDatasetID);
	
	// Get contact info
	get_dataset_contacts(gDatasetID);

	$$('img.button').each(function (item) {
		item.observe('mouseover', function (event) {
			if (!$(item).hasClassName('button_selected')) {
				item.src = item.src.replace('.png', '_hover.png');
			}
		});
		item.observe('mouseout', function (event) {
			if (!$(item).hasClassName('button_selected')) {
				item.src = item.src.replace('_hover.png', '.png');
			}
		});});
	$$('img.tab_button').each(function (item) {
		item.observe('click', function (event) {
			button_onoff(item, 'img.tab_button');
		});
	});
	
	load_mwbd();
	
}

function load_mwbd() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("map"), {draggableCursor:"default"});
		map.addControl(new GLargeMapControl());
		//map.addControl(new GHierarchicalMapTypeControl());
		map.addControl(new GMapTypeControl());

		map.setCenter(new GLatLng(10, 0), 1, G_SATELLITE_MAP);
		$('map').setStyle({"background-color": '#1D1C56'});	// Set GM's background color to the dark ocean color.
		
		var container = KmlParser.load(map, gKmlUrl, "", kml_loaded);
	}
}

function kml_loaded() {
	var s = "<table class='listing'>";
	var prevSpecies = "";
	for (var i = 0; i < KmlParser.KmlTree.length; i++) {
		// Add species folders to sidebar
		var obj_folder = KmlParser.KmlTree[i];
		var species = obj_folder.name;
		var class_species = "row_" + species.replace(/\s/g, "_");
		
		var folder_div = new Element("div", {'class': 'species_item'});
		var content = "<img src='" + gIconBase + "zd_459_" + species.replace(/\s/g, "_") + ".png'> " + species;
		folder_div.update(content);
		folder_div.observe('click', select_species.bind(folder_div, i, species));
		$("species_folder").appendChild(folder_div);
		
		var placemarks = obj_folder.placemarks;
		if (prevSpecies != species) {
			s += "<tr><th align='left' colspan='2'>" + species + "</th></tr>";
		}
		for (var j = 0; j < placemarks.length; j++) {
			var placemark = placemarks[j];
			s += "<tr class='ref_row " + class_species + "' onclick='select_ref(" + i + ", " + j + "); show_ref_detail(this);'>";
			s += "<td>";
			//s += "<a href='javascript:void(0);' onclick='select_ref(" + i + ", " + j + "); show_ref_detail(this);'>" + placemark.name + "</a>";
			s += placemark.name;
			s += "<div class='ref_detail' style='display:none;'>" + placemark.desc + "</div>";
			s += "</td>";
			s += "<td valign='top' align='center'>" + placemark.geometry_type + "</td>";
			s += "</tr>";
		}
	}
	s += "</table>";
	$('tab_references').update(s);
	
	$$('tr.ref_row').each(function (item) {
		item.observe('mouseover', function (event) {
			$(item).addClassName('hover');
		});
		item.observe('mouseout', function (event) {
			$(item).removeClassName('hover');
		});});	
	$$('div.species_item').each(function (item) {
		$(item).observe('mouseover', function (event) {
			$(item).addClassName('hover');
		});
		$(item).observe('mouseout', function (event) {
			$(item).removeClassName('hover');
		});
	});
		
}

function select_ref(folder_index, marker_index) {
	gCurrentSpeciesIndex = folder_index;
	gCurrentRefIndex = marker_index;
	
	if (gShowSelectedRefOnly) {
		for (var i = 0; i < KmlParser.KmlTree.length; i++) {
			var placemarks =  KmlParser.KmlTree[i].placemarks;
			
			$A(placemarks).each(function (item) {
				item.placemark.hide();
			});
		}
		KmlParser.KmlTree[folder_index].placemarks[marker_index].placemark.show();
	} else {
		for (var i = 0; i < KmlParser.KmlTree.length; i++) {
			var placemarks =  KmlParser.KmlTree[i].placemarks;
			
			$A(placemarks).each(function (item) {
				if (i == folder_index || folder_index == -1) {
					item.placemark.show(); 
				} else {
					item.placemark.hide();
				}
			});
		}		
	}
	
	var marker =  KmlParser.KmlTree[folder_index].placemarks[marker_index].placemark;
	GEvent.trigger(marker, "click");
}

function show_ref_detail(element) {
	$$('div.ref_detail').each(function(item){
		$(item).hide();
	});
	$$('tr.ref_row').each(function(item){
		$(item).removeClassName('selected');
	});
	$(element).addClassName('selected');
	$(element).select("div")[0].show();
}

function select_species(folder_index, species) {
	gCurrentSpeciesIndex = folder_index;
	if (folder_index == -1) {
		var element = $('sp_all');
	} else {
		var element = this;
	}
	div_select(element, 'species_item');
	
	for (var i = 0; i < KmlParser.KmlTree.length; i++) {
		var placemarks =  KmlParser.KmlTree[i].placemarks;
		
		$A(placemarks).each(function (item) {
			if (i == folder_index || folder_index == -1) {
				item.placemark.show(); 
			} else {
				item.placemark.hide();
			}
		});
	}
	
	// Clear currently selected reference in [References] tab
	// and hide other species references in  [References] tab.
	gCurrentRefIndex = -1;
	$$('tr.ref_row').each(function(item){
		$(item).removeClassName('selected');
		if (species != "all") {
			$(item).hide();
		} 
	});
	// Then, show refs for the sepected species.
	if (species != "all") {
		var class_species = "row_" + species.replace(/\s/g, "_");
	} else {
		var class_species = "ref_row";
	}
	$$('tr.' + class_species).each(function(item){
		$(item).setStyle({display: gTableRow});
	});
	
	// Close marker popup if any.
	map.closeInfoWindow();
}

function update_layout () {
	window_resize();
}

function window_resize () {
	gWinW = GetWindowSize('width');
	gWinH = GetWindowSize('height');

	if (is_ie) {
		additional_buffer = 60;
		info_frame_buffer = 0;
		species_list_buffer = 20;
	} else {
		additional_buffer = 50;
		info_frame_buffer = 0;
		species_list_buffer = 0;
	}
	
	if (gWinH - 470 < 200) {
		var height = 200;
	} else {
		var height = gWinH - 510;
	}
	
	if ($('species_list_large')) {
		$('species_list_large').style.height = (height - species_list_buffer) + "px";
	}
}

function toggle_row(element) {
	if (is_ie) {
		var display_row = "block";
	} else {
		var display_row = "table-row";
	}

	if ($(element).visible()) {
		$(element).hide();
	} else {
		$(element).style.display = display_row;
	}

	window_resize();
}


function get_dataset_info(dataset_id) {
	// aves_count,mammalia_count,reptilia_count are added by defualt. no need to include in columns below.
	var parameters = "id=" + dataset_id;
	var url = gPlone + "getDatasetInfo?" + parameters;
	new Ajax.Request(url,
		{
			method: 'GET',
			onSuccess: show_dataset_info
		});
}

function show_dataset_info(oj) {
	var datasets = eval(oj.responseText);
	dataset = datasets[0];
	gDataset = dataset;
	
	if (dataset.provider_logo != "") {
		var provider_logo = "<img src='' id='provider_logo' border=0> ";
	} else {
		var provider_logo = "";
	}
	if (dataset.provider_url != "") {
		md_provider = "<a href='" + dataset.provider_url + "' target='provider'>" + provider_logo + dataset.md_provider + "</a>";
	} else {
		var md_provider = provider_logo + dataset.md_provider;
	}

	if (dataset.table2 != "" && dataset.auto == 'TRUE') {
		var effort = "YES (ID: " + dataset.table2.replace("zd_", "") + ")";
		if (dataset.ds_type == 'ptobs') {
			$$('td.effort').invoke('show');
		}
	} else {
		var effort = "N/A";
	}
	
	if (dataset.md_references != "") {
		var references = "<ul><li>";
		references += dataset.md_references.replace(/\n/g, "<li>");
		references += "</ul>";
	} else {
		var references = "";
	}
	
	switch (dataset.ds_type) {
		case "ptobs":
			var line_title = "Effort";
			break;
		case "pttag":
			var line_title = "Tracklines";
			$$('td.pttag').invoke("setStyle", {display: gTableCell});
			break;
		default:
			var line_title = "Effort";
	}
	
	var s = "<table cellpadding='3' style='color:#CFCFCF'>";
	s += "<tr><td nowrap>SEAMAP ID</td><td>" + dataset.id + "</td></tr>";
	s += "<tr><td>Year, Begin</td><td nowrap>" + dataset.date_begin.substr(0, 4) + "</td></tr>";
	s += "<tr><td>Year, End</td><td nowrap>" + dataset.date_end.substr(0, 4) + "</td></tr>";
	//s += "<tr class='even'><td>Latitude, Min</td><td>" + dataset.latitude_min + "</td></tr>";
	//s += "<tr><td>Latitude, Max</td><td>" + dataset.latitude_max + "</td></tr>";
	//s += "<tr class='even' nowrap><td>Longitude, Min</td><td>" + dataset.longitude_min + "</td></tr>";
	//s += "<tr><td nowrap>Longitude, Max</td><td>" + dataset.longitude_max + "</td></tr>";
	s += "<tr><td>Platform</td><td>" + dataset.platform + "</td></tr>";
	//s += "<tr><td>Data type</td><td>" + dataset.ds_type + "</td></tr>";
	s += "<tr><td>Data type</td><td>References</td></tr>";
	s += "<tr><td>" + line_title + "</td><td nowrap>" + effort + "</td></tr>";
	s += "<tr><td>Last updated</td><td>" + dataset.updated + "</td></tr>";
	s += "</table>";
	$('dataset_info').update(s);
	
	if (dataset.md_datacred != "") {
		var datacred = dataset.md_datacred;
	} else {
		var datacred = md_provider;
	}
	
	$('name_short').update(dataset.name_short);
	$('md_provider').update(md_provider);
	$('md_datacred').update(datacred);
	$('md_abstract').update(dataset.md_abstract);
	$('md_purpose').update(dataset.md_purpose);
	$('md_supplementalinfo').update(dataset.md_supplementalinfo);
	$('md_references').update(references);
	$('aves_count').update(int_format(dataset.aves_count));
	$('mammalia_count').update(int_format(dataset.mammalia_count));
	$('reptilia_count').update(int_format(dataset.reptilia_count));
	$('grand_total').update(int_format(dataset.num_records));
	
	// Resize the provider logo.
	load_sized_image(dataset.provider_logo, "provider_logo");

	// Initialize Google Maps here (Not called directly by window.onload)
	load();
}

function get_dataset_contacts(dataset_id) {
	// aves_count,mammalia_count,reptilia_count are added by defualt. no need to include in columns below.
	var parameters = "dataset_id=" + dataset_id;
	var url = gPlone + "getDatasetContacts?" + parameters;
	new Ajax.Request(url,
		{
			method: 'GET',
			onSuccess: show_dataset_contacts
		});
}

function show_dataset_contacts(oj) {
	var contacts = eval(oj.responseText);
	
	var s = "<table class='listing'>";
	s += "<thead><tr><th>Role</th><th>Name</th><th>Organization</th><th>&nbsp;</th></tr></thead>";
	s += "<tbody>";
	for (var i = 0; i < contacts.length; i++) {
		var contact = contacts[i];
		
		switch (contact.role.toLowerCase()) {
			case "data-manager":
				var role = "Primary contact";
				break;
			case "secondary-contact":
				var role = "Secondary contact";
				break;
			case "data-entry":
				var role = "Data entry";
				break;
		}
		
		if (contact.firstname != "") {
			var name = contact.firstname + " ";
		} else {
			var name = "";
		}
		
		if (contact.lastname != "") {
			name += contact.lastname;
		} 
		
		if (contact.email != "") {
			var email_link = "<a href='mailto:" + contact.email + "' title='bring up a new message with your default mail client'><img src='" + gIconBase + "icon_email.gif' border='0'></a>";
		} else {
			var email_link = "N/A";
		}
		
		s += "<tr>";
		s += "<td>" + role + "</td>";
		s += "<td>" + name + "</td>";
		s += "<td>" + contact.org_name + "</td>";
		s += "<td align='center'>" + email_link + "</td>";
		s += "</tr>";
	}
	
	s += "</tbody></table>";
	
	$('md_contacts').update(s);
}

function get_species_list(dataset_id) {
	var parameters = "id=" + dataset_id;
	var url = gPlone + "getSpeciesList?" + parameters;
	new Ajax.Request(url,
		{
			method: 'GET',
			onSuccess: show_species_list
		});
}


function div_select(item, class_name) {
	$$('div.' + class_name).each(function (item) {
		$(item).removeClassName('selected');
	});
	$$('tr.' + class_name).each(function (item) {
		$(item).removeClassName('selected');
	});
	
	$$('div.sp_' + item).each(function (item) {
		$(item).addClassName('selected');
	});
	
	$(item).addClassName('selected');
}


function map_loaded() {
	whole_extent();
	
	//map.addMapType(G_SATELLITE_3D_MAP);
	//map.getEarthInstance(getEarthInstanceCB);
}

/*
var ge;
function getEarthInstanceCB(object) {
	ge = object;
	// You can now manipulate ge using the full Google Earth API.
}
 */
  
function whole_extent() {
	var extent = new GLatLngBounds(new GLatLng(gDataset.latitude_min, gDataset.longitude_min), new GLatLng(gDataset.latitude_max, gDataset.longitude_max));
	var center = extent.getCenter();
	map.panTo(center);
	map.setCenter(center);
	
	var zoom = map.getBoundsZoomLevel(extent) - 1;
	if (zoom == 0) {
		zoom = 1;
	}
	map.setZoom(zoom);
}

function load_sized_image(url, image_id) {
	var logo = new Image;
	logo.onload = function (evt) {
		if (logo.height > 60) {
			$(image_id).setStyle({"height":"60px"});
		} else if (logo.width > 100) {
			$(image_id).setStyle({"width":"100px"});
		}
		$(image_id).src = url;
	}
	logo.src = url;
}

function switch_tab(tab_name) {
	switch (tab_name) {
		case "tab_attributes":
			if ($('attributes_content').innerHTML == "") {
				get_attributes(gDatasetID);
			}
			break;
		case "tab_animals":
			if ($('tab_animals').innerHTML == "") {
				get_animals(gDatasetID); 
			}
			break;
	}
	$$('div.info_box').invoke('hide');
	$(tab_name).show();
}


function open_google_earth() {
	window.open(gKmlUrl);
}


function get_contributing_datasets() {
	// Called from year_dropped() in seamap2_common.js
	// Nothing to do if the map shows distribution. Map update is taken care of update_map.
	// For point observations, need to change DATA in mapfile here.
	if (gActiveLayer == 'point') {
		gDontUpdateChart = true;
		update_point_query();
	}	
}


function get_attributes(id) {
	//var url = "/prod/cache/seamap2/get_attributes.php?id=" + id;
	var url = "/seamap2/main/seamap2.php?mode=attributes&id=" + id;
	new Ajax.Request(url,
		{
			method: 'GET',
			onSuccess: show_attributes
		});	
}

function show_attributes(oj) {
	var content = oj.responseText;
	$('attributes_content').update(content);	
}


function toggle_selected_ref_only(element) {
	gShowSelectedRefOnly = $(element).checked;
	
	if (gCurrentRefIndex != -1) {
		select_ref(gCurrentSpeciesIndex, gCurrentRefIndex);
	} 
}