// function to load the results' grid
function generateGridQuery(gridDataCollection, gridHeaderCollection, gridRowCollection) {
	// disabilito le query precedenti
	// serve principalmente alla ricerca numero civici quando c'è un solo risultato
	var listaFigli = tree.getAllSubItems('themesquery').split(",");

	for (var i=0; i<listaFigli.length - 1; i++) {
		if (listaFigli[i].split(delimiter)[1] != actualQuery) {
			tree.setCheck(listaFigli[i], 0);
		}
	}

	// get data
	var results = gridDataCollection[0].attributes.getNamedItem("results").value;
	var totalPages = gridDataCollection[0].attributes.getNamedItem("totalpages").value;
	var numOfPage = gridDataCollection[0].attributes.getNamedItem("numofpage").value;
	document.getElementById("results").innerHTML = results;
	document.getElementById("reccount").value = numOfPage+"/"+totalPages;
	actualTotalPages = totalPages;

	var header = gridHeaderCollection[0].attributes.getNamedItem("header").value;
	var initWidth = gridHeaderCollection[0].attributes.getNamedItem("initwidth").value;
	var colAlign = gridHeaderCollection[0].attributes.getNamedItem("colalign").value;
	var colTypes = gridHeaderCollection[0].attributes.getNamedItem("coltypes").value;
	var colSorting = gridHeaderCollection[0].attributes.getNamedItem("colsorting").value;
	var colNumber = gridHeaderCollection[0].attributes.getNamedItem("colnumber").value;

	// clear the grid
	mygrid.clearAll(true);

	// set general data
	mygrid.setHeader(header);
	mygrid.setColumnIds(header)
	mygrid.setInitWidths(initWidth);
	mygrid.setColAlign(colAlign);
	mygrid.setColTypes(colTypes);
	mygrid.setColSorting(colSorting);

	// init grid
	mygrid.init();

	// insert rows
	for (var i=0; i<gridRowCollection.length; i++) {
		var rowId = gridRowCollection[i].attributes.getNamedItem("id").value;
		var values = gridRowCollection[i].attributes.getNamedItem("values").value;

		mygrid.addRow(rowId, values);
	}

	// adjust column size
	for (var i=0; i < colNumber; i++) {
		mygrid.adjustColumnSize(i);
	}

	// sorts grid by specified field (actualOrderBy) and direction (actualDirection)
	mygrid.sortFieldAfter(mygrid.getColIndexById(actualOrderBy), false, actualDirection);

	// open query builder div to show the grid
	ApriQueryBuilder('resultdiv');
}

// go to the next page of results
function nextPage() {
	var numNextPage = parseInt((document.getElementById("reccount").value).split("/")[0]) + 1;

	if (numNextPage > 0 && numNextPage <= actualTotalPages) {
		if (isIsochroneAnalyseMade == true) {
			performChangePage("-1",numNextPage,actualOrderBy,actualDirection);
		} else {
			performChangePage(actualQuery,numNextPage,actualOrderBy,actualDirection);
		}
	}
}

// go to the previous page of results
function previousPage() {
	var numPreviousPage = parseInt((document.getElementById("reccount").value).split("/")[0]) - 1;

	if (numPreviousPage > 0 && numPreviousPage <= actualTotalPages) {
		if (isIsochroneAnalyseMade == true) {
			performChangePage("-1",numPreviousPage,actualOrderBy,actualDirection);
		} else {
			performChangePage(actualQuery,numPreviousPage,actualOrderBy,actualDirection);
		}
	}
}

// go to the first page of results
function firstPage() {
	var numPage = parseInt((document.getElementById("reccount").value).split("/")[0]);

	if (actualTotalPages > 1 && numPage != 1) {
		if (isIsochroneAnalyseMade == true) {
			performChangePage("-1",1,actualOrderBy,actualDirection);
		} else {
			performChangePage(actualQuery,1,actualOrderBy,actualDirection);
		}
	}
}

// go to the last page of results
function lastPage() {
	var numPage = parseInt((document.getElementById("reccount").value).split("/")[0]);

	if (actualTotalPages > 1 && numPage != actualTotalPages) {
		if (isIsochroneAnalyseMade == true) {
			performChangePage("-1",actualTotalPages,actualOrderBy,actualDirection);
		} else {
			performChangePage(actualQuery,actualTotalPages,actualOrderBy,actualDirection);
		}
	}
}

// sorts grid by specified field (actualOrderBy) and direction (actualDirection) remaining in the actual page
function queryResultSort(direction, columnid) {
	actualOrderBy = columnid;
	actualDirection = direction;
	var numPage = parseInt((document.getElementById("reccount").value).split("/")[0]);
	if (isIsochroneAnalyseMade == true) {
		performChangePage("-1", numPage, columnid, direction);
	} else {
		performChangePage(actualQuery, numPage, columnid, direction);
	}
}

// zoom to the specified (double clicked) record of the results grid
function queryGridDblClicked() {
	//if (actualQueryType == "analysebuilderdiv" && actualQuery == null) {
	if ((isPathAnalyseMade == true || isIsochroneAnalyseMade == true) && actualQuery == null) {
		return;
	}

	performRecordZoom(mygrid.getSelectedId(),actualQuery);
}

// export the rows of the results grid in the specified format (currently only excel)
function queryExport(format) {
	//if (actualQueryType == "analysebuilderdiv" && actualQuery == null) {
	if (isPathAnalyseMade == true && actualQuery == null) {
		performPathExport(format);
	} else {
		if (isIsochroneAnalyseMade == true) {
			performQueryExport("-1", format);
		} else {
			performQueryExport(actualQuery, format);
		}
	}
}

// function to load the preview grid (simple query)
function generateGridPreviewQuery(gridPreviewRowCollection, gridPreviewHeaderCollection) {

	// clear the grid
	mygridpreview.clearAll(true);

	// get and set general data
	var header = gridPreviewHeaderCollection[0].attributes.getNamedItem("header").value;
	//mygridpreview.setHeader(document.getElementById('criterioquery').options[document.getElementById('criterioquery').selectedIndex].value);
	mygridpreview.setHeader(header);
	mygridpreview.setInitWidths("250*-*250");
	mygridpreview.setColAlign("left*-*right");
	mygridpreview.setColTypes("ro*-*ro");
	mygridpreview.setColSorting("str*-*int");

	// init grid
	mygridpreview.init();

	// insert rows
	for (var i=0; i<gridPreviewRowCollection.length; i++) {
		var rowId = gridPreviewRowCollection[i].attributes.getNamedItem("id").value;
		var values = gridPreviewRowCollection[i].attributes.getNamedItem("values").value;

		mygridpreview.addRow(rowId, values);
	}

	// adjust column size
	mygridpreview.adjustColumnSize(0);
	mygridpreview.adjustColumnSize(1);
	// set the correct name of the first header column
	mygridpreview.setHeaderCol(0,document.getElementById('criterioquery').options[document.getElementById('criterioquery').selectedIndex].text);

	// show the div
	document.getElementById('queryresultgridpreview').style.visibility = "visible";
}

// show the specified (double clicked) record of the preview grid on the map (simple query)
function queryGridPreDblClicked() {
	var rowId = mygridpreview.getSelectedId();

	// se rowId è uguale a nessunid, vuol dire che nella griglia ho solo il record che dice che non sono stati
	// trovati dei risultati, quindi impedisco il doppio clic su questo record
	if (rowId == 'nessunid') {
		return;
	}

	// disabilito le query precedenti

	var listaFigli = tree.getAllSubItems('themesquery').split(",");

	for (var i=0; i<listaFigli.length; i++) {
		tree.setCheck(listaFigli[i], 0);
	}

	var cellContent = mygridpreview.cells(rowId, 0).getValue();
	var themeName = document.getElementById('temiquery').options[document.getElementById('temiquery').selectedIndex].value;
	var criterion = document.getElementById('criterioquery').options[document.getElementById('criterioquery').selectedIndex].value;
	var queryText = document.getElementById('testoquery').value;

	if (rowId == 'tuttiid') {
		performQueryZoom(rowId, themeName, criterion, queryText);
	} else {
		performQueryZoom(rowId, themeName, criterion, cellContent);
	}
}

// function to load the preview grid (address query)
function generateGridCiviciPreviewQuery(gridCiviciPreviewRowCollection, gridCiviciPreviewHeaderCollection) {

	// clear the grid
	mygridcivicipreview.clearAll(true);

	// get and set general data
	var header = gridCiviciPreviewHeaderCollection[0].attributes.getNamedItem("header").value;

	mygridcivicipreview.setHeader(header);
	mygridcivicipreview.setInitWidths("250*-*250*-*250");
	mygridcivicipreview.setColAlign("left*-*right*-*left");
	mygridcivicipreview.setColTypes("ro*-*ro*-*ro");
	mygridcivicipreview.setColSorting("str*-*int*-*str");

	// init grid
	mygridcivicipreview.init();

	// insert rows
	for (var i=0; i<gridCiviciPreviewRowCollection.length; i++) {
		var rowId = gridCiviciPreviewRowCollection[i].attributes.getNamedItem("id").value;
		var values = gridCiviciPreviewRowCollection[i].attributes.getNamedItem("values").value;

		mygridcivicipreview.addRow(rowId, values);
	}

	// adjust column size
	mygridcivicipreview.adjustColumnSize(0);
	mygridcivicipreview.adjustColumnSize(1);
	mygridcivicipreview.adjustColumnSize(2);

	// show the div
	document.getElementById('queryresultcivicigrid').style.visibility = "visible";
}

// show the specified (double clicked) record of the preview grid on the map (address query)
function queryGridCiviciPreDblClicked() {
	var rowId = mygridcivicipreview.getSelectedId();

	// se rowId è uguale a nessunid, vuol dire che nella griglia ho solo il record che dice che non sono stati
	// trovati dei risultati, quindi impedisco il doppio clic su questo record
	if (rowId == 'nessunid') {
		return;
	}

	// disabilito le query precedenti

	var listaFigli = tree.getAllSubItems('themesquery').split(",");

	for (var i=0; i<listaFigli.length; i++) {
		tree.setCheck(listaFigli[i], 0);
	}

	performQueryCiviciZoom(rowId);
}

// function to load the preview grid (cadastre query)
function generateGridCatastoPreviewQuery(gridCatastoPreviewRowCollection, gridCatastoPreviewHeaderCollection) {

	// clear the grid
	mygridcatastopreview.clearAll(true);

	// get and set general data
	var header = gridCatastoPreviewHeaderCollection[0].attributes.getNamedItem("header").value;

	mygridcatastopreview.setHeader(header);
	mygridcatastopreview.setInitWidths("250");
	mygridcatastopreview.setColAlign("left");
	mygridcatastopreview.setColTypes("ro");
	mygridcatastopreview.setColSorting("str");

	// init grid
	mygridcatastopreview.init();

	// insert rows
	for (var i=0; i<gridCatastoPreviewRowCollection.length; i++) {
		var rowId = gridCatastoPreviewRowCollection[i].attributes.getNamedItem("id").value;
		var values = gridCatastoPreviewRowCollection[i].attributes.getNamedItem("values").value;

		mygridcatastopreview.addRow(rowId, values);
	}

	// adjust column size
	mygridcatastopreview.adjustColumnSize(0);

	// show the div
	document.getElementById('queryresultcatastogrid').style.visibility = "visible";
}

// show the specified (double clicked) record of the preview grid on the map (cadastre query)
function queryGridCatastoPreDblClicked() {
	var rowId = mygridcatastopreview.getSelectedId();
	var cellContent = mygridcatastopreview.cells(rowId, 0).getValue();
	var comuneCatastale = document.getElementById('ccquery').options[document.getElementById('ccquery').selectedIndex].value;

	// se rowId è uguale a nessunid, vuol dire che nella griglia ho solo il record che dice che non sono stati
	// trovati dei risultati, quindi impedisco il doppio clic su questo record
	if (rowId == 'nessunid') {
		return;
	}

	// disabilito le query precedenti

	var listaFigli = tree.getAllSubItems('themesquery').split(",");

	for (var i=0; i<listaFigli.length; i++) {
		tree.setCheck(listaFigli[i], 0);
	}

	performQueryCatastoZoom(comuneCatastale, cellContent);
}

// function to load the results' grid with the calculated path
function generateGridPath(gridPathDataCollection, gridPathHeaderCollection, gridPathRowCollection) {

	// get data
	var results = gridPathDataCollection[0].attributes.getNamedItem("results").value;
	var totalPages = gridPathDataCollection[0].attributes.getNamedItem("totalpages").value;
	var numOfPage = gridPathDataCollection[0].attributes.getNamedItem("numofpage").value;
	document.getElementById("results").innerHTML = results;
	document.getElementById("reccount").value = numOfPage+"/"+totalPages;
	actualTotalPages = totalPages;

	var header = gridPathHeaderCollection[0].attributes.getNamedItem("header").value;
	var initWidth = gridPathHeaderCollection[0].attributes.getNamedItem("initwidth").value;
	var colAlign = gridPathHeaderCollection[0].attributes.getNamedItem("colalign").value;
	var colTypes = gridPathHeaderCollection[0].attributes.getNamedItem("coltypes").value;
	var colSorting = gridPathHeaderCollection[0].attributes.getNamedItem("colsorting").value;
	var colNumber = gridPathHeaderCollection[0].attributes.getNamedItem("colnumber").value;

	// clear the grid
	mygrid.clearAll(true);

	// set general data
	mygrid.setHeader(header);
	mygrid.setColumnIds(header)
	mygrid.setInitWidths(initWidth);
	mygrid.setColAlign(colAlign);
	mygrid.setColTypes(colTypes);
	mygrid.setColSorting(colSorting);

	// init grid
	mygrid.init();

	// insert rows
	for (var i=0; i<gridPathRowCollection.length; i++) {
		var rowId = gridPathRowCollection[i].attributes.getNamedItem("id").value;
		var values = gridPathRowCollection[i].attributes.getNamedItem("values").value;

		mygrid.addRow(rowId, values);

		if (rowId.length == 1) {
			// not detailed path
			mygrid.setRowColor(rowId,"gray");
			//mygrid.setRowTextBold(rowId);
			mygrid.setCellTextStyle(rowId,3,"font-weight:bold"); // path cost in bold
			mygrid.setCellTextStyle(rowId,4,"font-weight:bold"); // CO2 emission in bold
		} else if (rowId == "1.1.1" || rowId == "3.0" || rowId == "4.0") { // parking row
			mygrid.setRowColor(rowId,"#cecece"); // light gray
			mygrid.setCellTextStyle(rowId,3,"font-weight:bold"); // parking cost in bold
		} else {
			// detailed path
			//mygrid.setCellTextStyle(rowId,0,"text-align:center");
			mygrid.setCellTextStyle(rowId,0,"text-indent:10%");
		}
	}

	// adjust column size
	for (var i=0; i < colNumber; i++) {
		mygrid.adjustColumnSize(i);
	}

	// show div
	displayOutput('resultdiv');
}

