
// web-page elements
var mapdiv;
var maplon=[];
var maplat=[];
var productMenu;
var datasetMenu;
var selectedProductDescription;
var dateRangeInput=[];
var timeRangeInput=[];

function initialisePageElements () {
	mapdiv = document.getElementById("map");

	maplon[0]=document.getElementById("lon0");
	maplon[1]=document.getElementById("lon1");

	maplat[0]=document.getElementById("lat0");
	maplat[1]=document.getElementById("lat1");

	dateRangeInput[0]=document.getElementById("date1");
	dateRangeInput[1]=document.getElementById("date2");

	timeRangeInput[0]=document.getElementById("time1");
	timeRangeInput[1]=document.getElementById("time2");

	productMenu=document.getElementById("productMenu");
	datasetMenu=document.getElementById("datasetMenu");

	selectedProductDescription=document.getElementById("selectedProductDescription");
}

// global variables that will be set to Writable objects on load.
var info;
var report;

// other global variables
var cgiApplication='aggregator.cgi.sh';

// Events
function onWindowLoad() {

	initialisePageElements();

	info=new Writable("regionInfo");
	report=new Writable("status");
	report.clear();

	// Look for status of Hyrax servers
	// HyraxWarning();
	// also look for a manually generated message.
	getMessage();

	initialiseProductArrays();
	
	buildMap();
	region=new Region();
	region.clear();

	dateRange=new DateRange();
	dateRange.clear();
	timeRange=new TimeRange();
	timeRange.clear();

	// now build the menus.
	buildDatasetsMenu(); 
	buildProductsMenu();
	productSelectMessage();

	setDataFormat("hdf"); // set the data format radio button

	setStatusButton( serverStatus );
}
window.onload=onWindowLoad;

// Utilities ============================================
// include('filename.js') allows us to import JavaScript from another file..
// (NOT USED!)
function include(filename)
{
	var head = document.getElementsByTagName('head')[0];
	
	var script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	
	head.appendChild(script)
}
// list all the variables and methods for an object (WILL GET A LARGE LIST IN MOST CASES!)
function reportObject(object) {
	var msg="";
        for (var key in object) {       
                msg+="<BR>"+key+": "+object[key];
        }
        return msg;
}

// change an image on mouse events:
function makeMyImg( id, imgprefix, i) {
	var el=document.getElementById(id);
	el.src=imgprefix+i+".png";
	if ( id=="getstatus" && i==1 ) {
		el.src=statusButton1;	
	}
}


function getHelp() {
	window.open( "aggregator-help.html"  );
	// window.location.assign("aggregator-help.html");
}
function getFAQ() {
	window.open( "FAQ.html"  );
}
function getFeedback() {
	window.open( "aggregator-feedback.html"  );
}
// create data =================================================
// call the aggregator cgi, using the http GET method
function callCGI() {
	if ( validateParams() ) {
		var parms=buildJobParams();
		var cgiCall=cgiURL+'?'+runtimeEnvironment+','+cgiApplication;
		window.location.assign(cgiCall+','+parms);
	}
}

// build the job parameters to send to the cgi.
// does this from the user-entered data.
function buildJobParams() {
	selectedindex=prod.selectedIndex ;
	var productID=prod.ids[selectedindex];
	var dates=[dateRangeInput[0].value,dateRangeInput[1].value];
	var times=[timeRangeInput[0].value,timeRangeInput[1].value];
	if (!times[0] && !times[1]) {
		times=["0000","2400"];
	}
	var filetype=getCheckedValue(document.forms['f'].elements['FILETYPE']);
	var region_parms;
	var onePoint=region.isOnePoint();
	if ( onePoint ) {
		region_parms = onePoint[0]+","+onePoint[0]+","+onePoint[1]+","+onePoint[1];
	} else {
		region_parms = region.lat[0]+","+region.lat[1]+","+region.lon[0]+","+region.lon[1];
	}
	var parms=filetype+","+dates[0]+","+dates[1]+","+times[0]+","+times[1]+
							","+region_parms+","+productID;
	return parms;
}

// validate user-entered data one last time:
function validateParams() {
	var okay=true;
	report.clear();
	if ( prod.selectedIndex=="none" ) {
		report.say( sadface()+" You must select a product. ", "red" );
		okay=false;
	}
	if (!region.polygon) {
		var onePoint=region.isOnePoint();
		// report.say( "validateParams:  onePoint = "+onePoint, "red");
		if ( onePoint ) {
			// report.say( " Region has a single point (OK). ", "red");
		} else {	
			report.say( sadface()+" Region has not been fully specified. ", "red");
			okay=false;
		}
	} 
	var dates=[dateRangeInput[0].value,dateRangeInput[1].value];
	if (!dates[0]) {
		report.say( sadface()+" Please specify a start date. ", "red");
		okay=false;
	}
	if (!dates[1]) {
		report.say( sadface()+" Please specify an end date. ", "red");
		okay=false;
	}

	var times=[timeRangeInput[0].value,timeRangeInput[1].value];
	if ( (times[0] && !times[1]) || (!times[0] && times[1]) ) {
		report.say( sadface()+" Please specify both time values, or neither. ", "red");
		okay=false;
	}

	// report.say( "filetype="+getCheckedValue(document.forms['f'].elements['FILETYPE']) , "blue") ;

	return okay;
}

// output html to display an emoticon
function sadface() {
	return "<img src='images/frown.gif'>";
}


// set the radio button for a particular data format
// adapted from http://www.somacon.com/p143.php
function setDataFormat( value ) {
	var buttons=document.forms['f'].elements['FILETYPE'];
	var radioLength = buttons.length;
	if(radioLength == undefined) {
		buttons.checked = (buttons.value == value.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		buttons[i].checked = false;
		if(buttons[i].value == value.toString()) {
			buttons[i].checked = true;
		}
	}
}

