var legendWindow;
var resultWindow;
var currentSelectedRow;
var currentURL;
var isApplet;
var redirectRefreshApplet;
var redirectRefreshSection;

function shutdownServers() {
	if(document.MetasimApplet != undefined)
		document.MetasimApplet.shutdownServers();
}

function changeImage(level, index) {
	var button = document.getElementById('headerButton_' + level + '_' + index);
	if(button != undefined) {
		if(button.className.indexOf('Hover') == -1)
			button.className = 'headerButton' + level + ' headerButton' + level + 'Hover';
		else
			button.className = 'headerButton' + level;
	}
}

function goToPanel(tabId, panelId, save, refreshSection, hasApplet, loadingMessage) {
	var form = document.forms[0];
	var refreshApplet = (isApplet && hasApplet) ? true : false;
	redirectRefreshApplet = refreshApplet;
	if(isApplet)
		saveCurrentExtent();
	
	if(refreshApplet) {
		if(loadingMessage != undefined)
			document.MetasimApplet.setLoadingMessage(loadingMessage);
		else
			document.MetasimApplet.setLoadingMessage('Loading...');
	}

	redirectRefreshSection = refreshSection;
	form.tabId.value = tabId;
	form.panelId.value = panelId;
	form.save.value = save;
	form.redirect.value = true;
	if(currentURL != undefined) {
		form.action = currentURL;
	}
	ajaxAnywhere.formName = form.className;
	ajaxAnywhere.getZonesToReload = function() {
		var zones = "";
		if(refreshApplet)
			zones = "headerZone,leftZone,appletProperties";
		else if(refreshSection)
			zones = "headerZone,leftZone,rightZone";
		else
			zones = "headerZone,leftZone";
		if(refreshApplet || refreshSection)
			zones += ",mapControlsZone";
		return zones;
	}
	ajaxAnywhere.submitAJAX();
}

ajaxAnywhere.redirect = function(newURL) {
	currentURL = newURL;
	var zones = "";
	if(redirectRefreshApplet)
		zones = "headerZone,leftZone,appletProperties";
	else if(redirectRefreshSection)
		zones = "headerZone,leftZone,rightZone";
	else
		zones = "headerZone,leftZone";
	if(redirectRefreshApplet || redirectRefreshSection)
		zones += ",mapControlsZone";
	
	ajaxAnywhere.getAJAX(newURL, zones);
}

function setSave() {
	var form = document.forms[0];
	form.save.value = true;
}

function saveCurrentExtent() {
	var form = document.forms[0];
	var currentExtent = document.MetasimApplet.getCurrentExtentString();
	if(currentExtent != undefined) {
		var envelope = currentExtent.split("#");
		form.current_minx.value = envelope[0];
		form.current_miny.value = envelope[1];
		form.current_maxx.value = envelope[2];
		form.current_maxy.value = envelope[3];	
	}
}

function toggleLayerVisibility(id) {
	var selectedLayer = document.getElementById('layer_' + id);
	var status = false;
	if(selectedLayer.checked) status = true;
	document.MetasimApplet.setLayerVisible(id,status);
}

function setLayerThematic(id, results_table) {
	var selectedThematic = document.getElementById('thematic_' + id);
	var thematicLegend = document.getElementById('thematic_legend_' + id);
	legendWindow = window.open('legend_files/' + thematicLegend.value + '.png','Legend','toolbar=no,status=no,height=200,width=150');
	legendWindow.focus();
	document.MetasimApplet.setLayerThematic('' + results_table, '' + selectedThematic.value);
}

function openThematicLegend(id) {
	var thematicLegend = document.getElementById('thematic_legend_' + id);
	legendWindow = window.open('legend_files/' + thematicLegend.value + '.png','Legend','toolbar=no,status=no,height=200,width=150');
	legendWindow.focus();
}

function openTransportationLegend() {
	var legendWindowTr = window.open('legend_files/transportation_route_legend.png','LegendTr','toolbar=no,status=no,height=330,width=200');
	legendWindowTr.focus();
}

function clearThematics() {
	if(legendWindow != undefined) legendWindow.close();
	document.MetasimApplet.clearThematics();
}

function switchMapControls(id) {
	var layersPanel = document.getElementById('layersPanel');
	var layersTab = document.getElementById('layersTab');
	var thematicsPanel = document.getElementById('thematicsPanel');
	var thematicsTab = document.getElementById('thematicsTab');
	// Layers
	if(id == 1) {
		layersPanel.style.display = 'block';
		thematicsPanel.style.display = 'none';
		layersTab.className = 'tabHover float-left inline';
		thematicsTab.className = 'tab float-left inline';
	}
	// Thematics
	else if(id == 2) {
		layersPanel.style.display = 'none';
		thematicsPanel.style.display = 'block';
		thematicsTab.className = 'tabHover float-left inline';
		layersTab.className = 'tab float-left inline';
	}
}

function startCrisis() {
	var epicenter = document.MetasimApplet.getEpicenter();
	if(epicenter == null) setTimeout(startCrisis, 1000);
	else {
		var coords = epicenter.split("#");
		var longitude = coords[0];
		var latitude = coords[1];
		var form = document.forms[0];
		form.latitude.value = latitude;
		form.longitude.value = longitude;
		goToPanel(3,1,true,false,true,'Computing Crisis Simulator Results...');
	}
}

function saveCrisisEvacuationZone() {
	var xmlAreaOfInterest = document.MetasimApplet.getSelectedArea(document.MetasimApplet.CRISIS_CONFIGURATION);
	var form = document.forms[0];
	form.xmlAreaOfInterest.value = xmlAreaOfInterest;
	goToPanel(3,3,true,false,false);
}

function saveResponseEvacuationZone() {
	var xmlAreaOfInterest = document.MetasimApplet.getSelectedArea(document.MetasimApplet.RESPONSE_CONFIGURATION);
	var form = document.forms[0];
	form.xmlAreaOfInterest.value = xmlAreaOfInterest;
	saveCurrentExtent(document.MetasimApplet.getExtent());
	goToPanel(4,1,true,false,false);
}

function saveBuildingsOfInterest() {
	var xmlBuildingsList = document.MetasimApplet.getBuildingsIds();
	var form = document.forms[0];
	form.xmlBuildingsList.value = xmlBuildingsList;
	goToPanel(4,2,true,false,false);
}

function togglePopulation() {
	var element = document.getElementById('numberOfPeople');
	var enabled = document.getElementById('typeLast').checked;
	element.disabled = !enabled;
}

function chooseRole(id) {
	var form = document.forms[0];
	form.activeRoleId.value = id;
	goToPanel(4,4,true,false,false);
}

function changeDistributionType() {
	var distributionTypeMenu = document.getElementById('distributionTypeMenu');
	var distType = distributionTypeMenu.selectedIndex + 1;
	var valueALabel = document.getElementById('valueALabel');
	var valueBLabel = document.getElementById('valueBLabel');
	var valueB = document.getElementById('valueB');
	if(distType == 1) {
		valueALabel.innerHTML = 'Value: ';
		valueBLabel.innerHTML = '';
		valueB.disabled = true;
	}
	else if(distType == 2) {
		valueALabel.innerHTML = 'Mean: ';
		valueBLabel.innerHTML = 'Var: ';
		valueB.disabled = false;
	}
}

function submitRoleConfig(action) {
	var form = document.forms[0];
	form.role_action.value = action == 1 ? 'add' : 'delete';
	goToPanel(4,4,true,false,false);
}

function highlightRow(id, highlight) {
	var config1 = document.getElementById('config1_' + id);
	var config2 = document.getElementById('config2_' + id);
	var config3 = document.getElementById('config3_' + id);
	// The element is selected!
	if(config1 == undefined) return;
	if(highlight) {
		config1.className = 'row2 rowSelHover float-left inline';
		config2.className = 'row3 rowHover float-left inline';
		config3.className = 'row4 rowHover float-left inline';
	}
	else {
		config1.className = 'row2 float-left inline';
		config2.className = 'row3 float-left inline';
		config3.className = 'row4 float-left inline';
	}
}

function selectAndCopyValues(id) {
	var config_selected1 = document.getElementById('config1_selected');
	var config_selected2 = document.getElementById('config2_selected');
	var config_selected3 = document.getElementById('config3_selected');
	if(config_selected1 != undefined) {
		config_selected1.id = 'config1_' + currentSelectedRow;
		config_selected2.id = 'config2_' + currentSelectedRow;
		config_selected3.id = 'config3_' + currentSelectedRow;
		highlightRow(currentSelectedRow,false);
	}
	currentSelectedRow = id;
	var config1 = document.getElementById('config1_' + id);
	var config2 = document.getElementById('config2_' + id);
	var config3 = document.getElementById('config3_' + id);
	config1.id = 'config1_selected';
	config2.id = 'config2_selected';
	config3.id = 'config3_selected';
	config1.className = 'row2 rowSelHover float-left inline';
	config2.className = 'row3 rowHover float-left inline';
	config3.className = 'row4 rowHover float-left inline';
	var form = document.forms[0];
	form.id.value = id;
}

function changeTechnologySection() {
	var form = document.forms[0];
	var	panelIndex = form.technologySectionMenu.value;
	if(panelIndex == 3) form.medium_type.value = 1;
	if(panelIndex == 4) form.medium_type.value = 2;
	goToPanel(5,panelIndex,true,true,false);
}

function saveBuildingsAdvancedOptions() {
	var xmlAdvBuildings = document.MetasimApplet.getAdvBuildings();
	var form = document.forms[0];
	form.xmlAdvBuildingsList.value = xmlAdvBuildings;
	goToPanel(6,1,true,false,false);
}

function saveTransportationAdvancedOptions() {
	var xmlAdvNetworkLinks = document.MetasimApplet.getAdvNetworkLinks();
	var form = document.forms[0];
	form.xmlAdvNetworkLinks.value = xmlAdvNetworkLinks;
	goToPanel(6,2,true,false,false);
}

function changeResults(tab) {
	var resultsMenu = document.getElementById('resultsSectionMenu');
	goToPanel(tab,resultsMenu.value,false,false,true);
}

function openResultsTable(index) {
	var resultsSourceContent = document.getElementById('results');
	var scrollbarsDef = '';
	if(resultsSourceContent.style.overflow == 'auto') 
		scrollbarsDef = ',scrollbars=yes';
	var windowStyle = 'toolbar=no,status=no,height=' + resultsSourceContent.style.height + ',width=' + resultsSourceContent.style.width + scrollbarsDef;
	if(resultWindow != undefined) resultWindow.close();
	resultWindow = window.open('', 'Results' + index, windowStyle);
	resultWindow.document.title = 'Results';
	resultWindow.document.body.innerHTML = resultsSourceContent.innerHTML;
	resultWindow.focus();
}

function startSimulation() {
	document.MetasimApplet.startSimulation();
}