var gNumCharts = 0;		// Number of charts; used to control move forward/backward for charts
var gAgreedToTermsForDownload = false;

// Common routines for dataset_detail and species_profile

function choose_layer(zoom, update_legend) {
	if (zoom >= gZoom['001']) {
		var cellsize = "001";
	} else if (zoom >= gZoom['01']) {
		var cellsize = "01";
	} else {
		var cellsize = "1";
	}
	var layer_name = "dist_sp_" + cellsize + "deg";

	if (update_legend) {
		choose_legend(layer_name, cellsize);
	}
	return layer_name;
}


function switch_tab(tab_name) {		// EXT JS version
	switch (tab_name) {
		case "tab_sp_ds":
			break;
		case "tab_attributes":		// dataset_detail only
			if ($('attributes_content').innerHTML == "") {
				get_attributes(gQuery.dataset[0]);
			}
			break;
		case "tab_environment":
			if ($('env_desc').innerHTML == '') {
				load_env_desc();
			}
			break;
		case "tab_download":		// dataset_detail only
			if (!gAgreedToTermsForDownload) {
				show_terms_of_use();
			}
			break;
		case "tab_habitats":		// dataset_detail only
			if ($('tab_habitats').innerHTML == '') {
				get_habitats();
			}
			break;
	}
	$$('div.info_box').invoke('hide');
	$(tab_name).show();
	
	if (tab_name == "tab_sp_ds") {	// Unless the tab is visible, the grid can't refresh UI (column width) by either syncSize or getView().refresh()
		if (Ext.isIE6) {
			grid.setWidth(GetWindowSize('width') * 0.95 - 50);
		}
		grid.syncSize();
	}
	if (tab_name == "tab_animals") {	// Unless the tab is visible, the grid can't refresh UI (column width) by either syncSize or getView().refresh()
		$$('#tab_animals 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');
				}
			});});
		Ext.getCmp("series_grid").syncSize();
	}
	
	window_resize();
}


function temporal_scale_dragged(element) {
	var padding_top = 20;
	var pos = parseInt($(element.element).style.top);
	var scale = 2; 	// default
	var ranges = [63, 54, 45, 36, 27, 20];
	pos -= padding_top;
	
	for (var i = 0; i < ranges.length; i++) {
		if (pos >= ranges[i + 1] && pos < ranges[i]) {
			scale = i;
			break;
		}
	}
	set_temporal_scale(scale);
}

function adjust_scale_bar(scale) {
	var padding_top = 20;
	var adjusted = [59, 50, 41, 32, 22];
	adjusted_pos = adjusted[scale];
	$('scale_bar').setStyle({top: (adjusted_pos + padding_top) + "px"});
}

function set_temporal_scale(scale) {
	// scale is always a positive integer corresponding to the scale bar.
	// Year or season is adjusted below.
		
	if (gQuery.temporalScale < 0) {		// Season
		var sign = -1;
		if (scale < 1 || scale > 2) {
			alert("Only season (sacle:1) and seasonal month (scale:2) are supported.");
			if (scale < 1) {
				scale = 1;
			} else {
				scale = 2;
			}
		}
	} else {							// Year/month/day
		var sign = 1;
		if (scale < 0 || scale > 4) {
			if (scale < 0) {
				scale = 0;
			} else {
				scale = 4;
			}
		}
	}
	gQuery.temporalScale = sign * scale;
	
	roi_updated();
	
	adjust_scale_bar(scale);
}

function chart_page(move) {
	var chart_width = 940;
	
	switch (move) {
		case -2:
			var left = 0;
			break;
		case 2:
			var left = -1 * chart_width * (gNumCharts - 1);
			break;
		default:
			var left = parseInt($('div_chart').style.left) - move * chart_width;
			left = Math.min(left, 0);
			left = Math.max(left, -1 * chart_width * (gNumCharts - 1));
	}
	$('div_chart').setStyle({left: left + "px"});
}

function layer_updated(oj, layer_type) {
	activate_layer(layer_type);
	custom_query_updated(oj);
}

function ogc(service, mode, key, value) {
	var url = "/seamap2/ogc?";
	var layer_key = {wms: "layers", wfs: "typename"};
	switch (mode) {
		case "whole":
			var where = key + "=" + value;
			if (gSpecies != null && typeof(gSpecies.extent) != "undefined") {
				var extent = gSpecies.extent.replace("BOX(", "");	// seamapsql8
				extent = extent.replace(")", "");
				extent = extent.split(",");
				var sw = extent[0].split(" ");
				var ne = extent[1].split(" ");
				var bbox = [parseFloat(sw[0]) - 0.5, parseFloat(sw[1]) - 0.5, parseFloat(ne[0]) + 0.5, parseFloat(ne[1]) + 0.5];
			} else {
				var bbox = [gDataset.longitude_min - 0.5, gDataset.latitude_min - 0.5, gDataset.longitude_max + 0.5, gDataset.latitude_max + 0.5];
			}
			var width = 600;
			var height = (width * ((bbox[3] - bbox[1]) / (bbox[2] - bbox[0]))).abs().floor();
			break;
		case "partial":
			var where = gQuery.toQueryString("z_union").replace(/datasets/g, "dataset");
			var extent = map.getBounds();
			var sw = extent.getSouthWest();
			var ne = extent.getNorthEast();
			if (sw.lng() < ne.lng()) {
				var lon_min = sw.lng();
				var lon_max = ne.lng();
			} else {
				var lon_min = sw.lng() - 360;
				var lon_max = ne.lng();
			}
			var bbox = [lon_min, sw.lat(), lon_max, ne.lat()];
			var dim = $("map").getDimensions();
			var width = dim.width;
			var height = dim.height;
			break;
	}

	var layers = {"wms": ["bath", "countries"], "wfs": []};
	var layers2 = {"dataset": "dataset", "sp_tsn": "species"};
	var layer = layers[service];
	layer.push(layers2[key]);
	var params = {"service": service, "bbox": bbox.join(","), "width": width, "height": height};
	params[layer_key[service]] = layer.join(",");
	url += $H(params).toQueryString() + "&" + where;
	window.open(url, "ogc");
}


/***** set_dataset_tooltip *****/
// This function is called within Identify popup
function get_dataset_tooltip (aTag, dataid) {
	if (aTag.title == "") {
		gMapserver.request("get_dataset_name", set_dataset_tooltip,
			{
				dataid: dataid
			}, "", {asynchronous: false});
		aTag.title = gMapserver.DatasetName;
	}
}

function set_dataset_tooltip(oj) {
	// there must be only one dataset returned.
	var dataset_list = oj.responseText.evalJSON();
	gMapserver.DatasetName = dataset_list[0];
}

function popup_dataset_list(datasets) {
	gMapserver.request("get_dataset_name", show_popup_dataset_list,
		{
			dataid: datasets
		}, "");
}

function show_popup_dataset_list(oj) {
	var dataset_list = oj.responseText.evalJSON();
	var msg = "<div style='width:350px; height:150px'><table class='listing'><thead><tr><th>Name (ID)</th></tr></thead><tbody>";
	for (var i = 0; i < dataset_list.length; i++) {
		msg += "<tr><td>" + dataset_list[i] + "</td></tr>";
	}
	msg += "</tbody></table></div>";
	map.openInfoWindowHtml(gClickedPoint, msg, {maxWidth:400, maxHeight:200});
}

function show_env_sampled(env_str, scientific, obs_date) {
	var env_data = "{" + env_str + "}";
	env_data = env_data.evalJSON();
	var msg = "<strong>" + scientific + "</strong><br/>" + obs_date + "<br/>";
	msg += "<div style='width:310px; height:100px; overflow:auto;'><table class='listing popup_window' width='285'><thead><tr><th>Layer</th><th>Value</th></thead><tbody>";
	$H(env_data).each(function(pair) {
		msg += "<tr><td>" + pair.key + "</td><td>" + pair.value + "</td></tr>";
	});
	msg += "</tbody></table></div>";
	msg += "<em>See the description in [Environment] tab for units.</em>"
	//var msg = env_str;
	//map.closeInfoWindow();
	//map.openInfoWindowHtml(gClickedPoint, msg, gMaxDim);
	var info_window = map.getInfoWindow();
	var info_div = info_window.getContentContainers();
	$(info_div[0]).update(msg);
	//$("env_sampled_data").update(msg);
	//alert(msg);
}

function get_oceano_chart(oceano_type, download) {
	var temporal_scale = gQuery.temporalScale;
	if (temporal_scale < -2) {
		alert("By hour is not supported for oceanographic statistics.");
		return true;
	}
	switch (oceano_type) {
		case "SST":
		case "CHL":
			var scale_suffixes = {"-2": "_M", "-1": "_M", "0": "_Y", "1": "_Y", "2": "_Y", "3": "_M", "4": "_D"};
			var scale_suffix = scale_suffixes[temporal_scale.toString()];
			break;
		case "SSH":
			var scale_suffix = "_M";
			break;			
		default:
			var scale_suffix = "";
	}
	oceano_type += scale_suffix;
	
	//var parameters = $H({oceano_type: oceano_type, datasets: dataset, sp_tsn:sp_tsn, spatial:1, temporal_scale: temporal_scale, mode: 1, publish: publish}).toQueryString();
	var parameters = $H({oceano_type: oceano_type, mode: 1, download: download}).toQueryString();
	parameters += "&" + gQuery.toQueryString('chart_z_union');
	var random = get_random();
	var url = gPlone + "oceano_chart_data?" + parameters + "&" + random;
	
	if (download == 1) {
		return url;
	} else {
		new Ajax.Request(url,
			{
				method: 'GET',
				onSuccess: show_chart
			});
	}
}

function show_terms_of_use() {
	win = new Ext.Window({
		title: 'OBIS-SEAMAP Terms of Use',
		contentEl     : 'termsofuse_extjs',
		autoScroll: true,
		layout      : 'fit',
		width       : 640,
		height      : 400,
		closeAction :'hide',
		plain       : true,
		modal: true,
		bodyStyle: 'text-align: left',
		bodyCfg: {
	        tag: 'center',
	        cls: 'extjs_popup'
	    },

		buttons: [{
			text     : 'Agree',
			handler: function() {
				if ($("tab_download").visible()) {			// There are two ocasions where Terms of Use is shown. upon page load for dataset and [dowload] tab.
					gAgreedToTermsForDownload = true;
				} else {
					var cp = Ext.state.Manager.getProvider();
					cp.set("__SEAMAP_agreed2terms", "true");
				}
				win.hide();
			}
		},{
			text     : 'Disagree',
			handler  : function(){
				alert("We are sorry but we can't show you the data when you disagreed with the Terms of Use.\n You are being redirected to the front page.");
			    //win.hide();
			    window.location = "/";			    
		}
		}]
	});
	
	$("termsofuse_extjs").show();
	win.show();
}

function load_javascript(url) {
	var fileref = document.createElement('script');
	fileref.setAttribute("type","text/javascript");
	fileref.setAttribute("src", url);
	if (typeof fileref!="undefined") {
		document.getElementsByTagName("head")[0].appendChild(fileref);
	}
}

function legend_column_onoff(onoff) {
	var west = border.layout.north.panel.layout.west;
	west.panel.getColumnModel().setHidden(0, !onoff);
}

