
function Results(evaluationElementId) {
	this.evaluationElementId = evaluationElementId;
}

function getSelectedText(selectName) {
	var select = document.getElementById(selectName);
	return select.options[select.selectedIndex].text;
}

function getSelectedValue(selectName) {
	var select = document.getElementById(selectName);
	if (select.selectedIndex < 0)
		return -1;
	return select.options[select.selectedIndex].value;
}

function prepareSelectLists(evaluationElementId, evals, dataSetElementId) {
	prepareEvaluationSelect(evaluationElementId, evals);
	prepareDataSetSelect(evaluationElementId, dataSetElementId);
}

function prepareEvaluationSelect(evaluationElementId, evals) {
	var evSelect = document.getElementById(evaluationElementId);
	evSelect.length = 0;
	for (var i in evals) {
		try {
			evSelect.add(new Option(evals[i], i), null);
		} catch(e) { //in IE, try the below version instead of add()
			evSelect.add(new Option(evals[i], i)); //add new option to end of "sample"
		}
	}
	var link = document.getElementById("gotoEval");
	link.href = "repo/" + getSelectedText(evaluationElementId);
}

function printTables() {
	var width = '100%';
	if (/MSIE (\d+)\.\d+;/.test(navigator.userAgent)){ //test for MSIE x.x;
		var ieversion=new Number(RegExp.$1); 
		if (ieversion>7)
			width = '';
		else 
			width = '900px';
		}
    var cssClassNames = {
    	    'headerRow': 'gTableHeader',
    	    'tableRow': 'gTableRow',
    	    'oddTableRow': 'gTableOddRow',
    	    'hoverTableRow': 'gHoverTableRow',
    	    'headerCell': 'gTableHeaderCell',
    	    'tableCell': 'gTableCell'};
    for (var i in data) {
    	var table = new google.visualization.Table(document.getElementById('table_div_'+i));
    	var view = new google.visualization.DataView(data[i]);
		view.hideColumns([evaluationColumn, dataSetColumn, algorithmPackageColumn, algorithmColumn]);
    	table.draw(view, {
        	'height': Math.min(tableDivHeight, view.getNumberOfRows()*20 + 70),
        	'width': width,
        	'sortColumn': 0,
        	'allowHtml': true,
        	'cssClassNames': cssClassNames
        	});
    }
}

function prepareDataSetSelect(evaluationElementId, dataSetElementId) {
	var dsSelect = document.getElementById(dataSetElementId);
	dsSelect.length = 0;
	var evaluationSelectedIndex = getSelectedValue(evaluationElementId);
	if (evaluationSelectedIndex < 0)
		return;
	var dataSets = data[evaluationSelectedIndex].getDistinctValues(dataSetColumn);
	for (var i in dataSets) {
		try {
			dsSelect.add(new Option(dataSets[i], i), null);
		} catch(e) { //in IE, try the below version instead of add()
			dsSelect.add(new Option(dataSets[i], i)); //add new option to end of "sample"
		}
	}
	var link = document.getElementById("gotoData");
	link.href = "repo/" + getSelectedText(dataSetElementId);
}

function onSelectedEvaluation(evaluationElementId, dataSetElementId) {
	var link = document.getElementById("gotoEval");
	link.href = "repo/" + getSelectedText(dataSetElementId);
	prepareDataSetSelect(evaluationElementId, dataSetElementId);
	drawChart(evaluationElementId, dataSetElementId);
}

function onSelectedDataSet(evaluationElementId, dataSetElementId) {
	var link = document.getElementById("gotoData");
	link.href = "repo/" + getSelectedText(dataSetElementId);
	drawChart(evaluationElementId, dataSetElementId);
}

function prepareChartDataViews(evaluationElementId, dataSetElementId) {
	chartDataView = null;
	chartDataViewTooltip = null;
	
	var evaluationSelectedIndex = getSelectedValue(evaluationElementId);
	if (evaluationSelectedIndex < 0)
		return;
	var evaluationSelectedText = getSelectedText(evaluationElementId);
	var dataSetSelectedText = getSelectedText(dataSetElementId);
	var filter = [{column: evaluationColumn, value: evaluationSelectedText},
         		  {column: dataSetColumn, value: dataSetSelectedText}];
	chartDataView = new google.visualization.DataView(data[evaluationSelectedIndex]);
	chartDataView.setRows(chartDataView.getFilteredRows(filter));
	chartDataView.setColumns([algorithmPackageColumn, meanColumn]);
	chartDataViewTooltip = new google.visualization.DataView(data[evaluationSelectedIndex]);
	chartDataViewTooltip.setRows(chartDataViewTooltip.getFilteredRows(filter));
	chartDataViewTooltip.hideColumns([dataSetColumnLink, algorithmPackageColumn, algorithmColumnLink]);
}

function prepareAndShowTooltip(e) {
	prepareTooltip(e);
	showTooltip();
}

function prepareTooltip(e) {
	var row = e['row'];
	var info = '<table>';
	var noOfColumns = chartDataViewTooltip.getNumberOfColumns();
	for (var i=0; i<noOfColumns; i++) {
		info += '<tr>';
    	info += '<td>';
        info += chartDataViewTooltip.getColumnLabel(i) + ': ';
        info += '</td>';
    	info += '<td style="padding-left: 20px;">';
    	info += chartDataViewTooltip.getFormattedValue(row, i);
        info += '</td>';
		info += '</tr>';
	}
	info += '</table>';
	var element = document.getElementById('tooltip');
	element.innerHTML = info;
}

function showTooltip() {
	document.getElementById('tooltip').style.display = 'block';
}

function hideTooltip() {
	document.getElementById('tooltip').style.display = 'none';
}

function drawChart(evaluationElementId, dataSetElementId) {
	prepareChartDataViews(evaluationElementId, dataSetElementId);
	if (chartDataView == null)
		return;
	var chartDivHeight = chartDataView.getNumberOfRows() * 20 + 40;
	if (!chart)
    	chart = new google.visualization.BarChart(document.getElementById('chart_div'));
    chart.draw(chartDataView, {
    		width: chartDivWidth,
        	height: chartDivHeight,
            is3D: false,
            title: 'Mean Results of Algorithms',
    		titleFontSize: 14,
            axisFontSize: 12,
            titleColor: '#333333',
            legend: 'none',
            colors: [ '#4FB3D2' ],   // FFA300 00A7C6
            //backgroundColor: {stroke:'null', fill:'beige', strokeSize: 0},
            focusBorderColor: {stroke:'#333333', strokeSize: 1},
            enableTooltip: false});
    google.visualization.events.addListener(chart, 'onmouseover', prepareAndShowTooltip);
}

function addColumnsWithLinks(data, siteUrl) {
	for (var i in data) {
		data[i].insertColumn(dataSetColumnLink, 'string', data[i].getColumnLabel(dataSetColumn));
		data[i].insertColumn(algorithmColumnLink, 'string', data[i].getColumnLabel(algorithmColumn));
    	var noOfRows = data[i].getNumberOfRows();
    	for (var j=0; j<noOfRows; j++) {
			data[i].setCell(j, dataSetColumnLink, data[i].getValue(j, dataSetColumn));
			data[i].setCell(j, algorithmColumnLink, data[i].getValue(j, algorithmColumn));
		}
    	var formatter = new google.visualization.PatternFormat('<a href="' + siteUrl + 'repo/{0}">{0}</a>');
    	formatter.format(data[i], [dataSetColumn], dataSetColumnLink);
    	formatter.format(data[i], [algorithmColumn], algorithmColumnLink);
	}
}

function fillFilters(eval, data, alg)
{
	document.getElementsByName('e')[0].value = eval;
	document.getElementsByName('d')[0].value = data;
	document.getElementsByName('a')[0].value = alg;
	document.getElementById('exact').checked = "checked";
	return false;
}
