/*
 * <copyright>
 *  Copyright (c) 2009 by IICM, Graz University of Technology, Austria
 * </copyright>
 *
 *  This software is the confidential information of IICM,
 *  Graz University of Technology, Austria. You shall not disclose such
 *  confidential information and shall use it only in accordance with
 *  the IICM.
 *
 *  IICM MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 *  SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 *  PURPOSE, OR NON-INFRINGEMENT. IICM SHALL NOT BE LIABLE FOR ANY DAMAGES
 *  SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
 *  THIS SOFTWARE OR ITS DERIVATIVES.
 *
 */
 
function initStatisticsExport( mapBaseQueries, searchFieldFirst, searchFieldSecond, languageKey, mapDbInfo ) {
	var selectedDbs = "";

	var currentSearchFieldFirst = trim(searchFieldFirst);
	var currentSearchFieldSecond = trim(searchFieldSecond);
	var combination=false;
	if ( !document.getElementById || !document.createElement ) { return; }

	// Create database-list depending on 'hits>0' and 'database checked'
	for (db in mapDbInfo) {
		if ( mapDbInfo[db] == 'yes') { 
			// Check if hits of selected database greater 0, otherwise do not append to checked list for remote search 
			var hitsCurrentDb= dwr.util.getValue('idSpanDBConnected'+db);
			if ( isNaN(Number(hitsCurrentDb)) ) { hitsCurrentDb = 0; }
			if ( Number(hitsCurrentDb) > 0 ) {
				selectedDbs = selectedDbs+","+trim(db);
			}			
		}
	}	
	if ( selectedDbs.length > 0 ) { selectedDbs = selectedDbs.substring(1,selectedDbs.length); } else { return; }
	if ( trim(languageKey) == "") { languageKey="en"; }

	// Call DWR-Method to get List
	dwr.engine.setOrdered(true); 
	if (currentSearchFieldFirst != "" ) {
		if (currentSearchFieldSecond != "" ) {
			combination = true;
			//getStatisticsListCombination( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond, selectedDbs, languageKey,  );
		} 
		else {
			combination = false;
			//getStatisticsList( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond, selectedDbs, languageKey );
		}
	}
	StatisticsList.getStatisticsExport( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond, selectedDbs, languageKey, combination,
	{
	callback: function(file){dwr.engine.openInDownload(file);},
	errorHandler: function(message){errorHandler('statistics',message);},
	timeout:0
	} );
}


function initStatisticsList( mapBaseQueries, searchFieldFirst, searchFieldSecond, languageKey, mapDbInfo ) {
	var selectedDbs = "";

	var currentSearchFieldFirst = trim(searchFieldFirst);
	var currentSearchFieldSecond = trim(searchFieldSecond);
	
	if ( !document.getElementById || !document.createElement ) { return; }

	// Create database-list depending on 'hits>0' and 'database checked'
	for (db in mapDbInfo) {
		if ( mapDbInfo[db] == 'yes') { 
			// Check if hits of selected database greater 0, otherwise do not append to checked list for remote search 
			var hitsCurrentDb= dwr.util.getValue('idSpanDBConnected'+db);
			if ( isNaN(Number(hitsCurrentDb)) ) { hitsCurrentDb = 0; }
			if ( Number(hitsCurrentDb) > 0 ) {
				selectedDbs = selectedDbs+","+trim(db);
			}			
		}
	}	
	if ( selectedDbs.length > 0 ) { selectedDbs = selectedDbs.substring(1,selectedDbs.length); } else { return; }
	if ( trim(languageKey) == "") { languageKey="en"; }

	// Call DWR-Method to get List
	dwr.engine.setOrdered(true); 
	if (currentSearchFieldFirst != "" ) {
		if (currentSearchFieldSecond != "" ) {
			getStatisticsListCombination( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond, selectedDbs, languageKey );
		} 
		else {
			getStatisticsList( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond, selectedDbs, languageKey );
		}
	}
}


function errh(msg) {   // TEST REMOVE
  	alert("ERROR:"+msg);
}

function getStatisticsList( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond, selectedDbs, languageKey ) {
	dwr.engine.setOrdered(true); // TEST	
	useLoadingImage("resources/appl_images/loadingImage24x24.gif","idStatisticsListPosition"); // CHECK THIS
	StatisticsList.getStatisticsList( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond,selectedDbs, languageKey,
		{ 	callback:function(StatisticsListTO){ createStatisticsList(StatisticsListTO, currentSearchFieldFirst, currentSearchFieldSecond, mapBaseQueries, selectedDbs);},
			errorHandler:function(message) { errorHandler('statistics',message); },
			timeout:0
		}		
	 );	

}

function getStatisticsListCombination( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond, selectedDbs, languageKey ) {
	dwr.engine.setOrdered(true); // TEST	
	useLoadingImage("resources/appl_images/loadingImage24x24.gif","idStatisticsListPosition"); // CHECK THIS
	StatisticsList.getStatisticsListCombination( mapBaseQueries, currentSearchFieldFirst, currentSearchFieldSecond,selectedDbs, languageKey,
		{ 	callback:function(StatisticsListCombinationTO){ createStatisticsListCombination(StatisticsListCombinationTO, currentSearchFieldFirst, currentSearchFieldSecond, mapBaseQueries, selectedDbs);},
			errorHandler:function(message) { errorHandler('statistics',message); },
			timeout:0
		}		
	 );	

}
	
// Fills Table StatisticsList
function createStatisticsList(StatisticsListTO, currentSearchFieldFirst, currentSearchFieldSecond, mapBaseQueries, selectedDbs, languageKey) {
	var tableElement,tbodyElement,trElement,tdElement, textElement, innerTableElement, innerTbodyElement,innerTrElement,innerTdElement, pElement,hrElement ;	
	var statisticList = StatisticsListTO;
	var singleEntries = statisticList.singleEntries;
	var rangeEntries = statisticList.rangeEntries;
	var dataType = statisticList.dataType;
	var messages = statisticList.lgKeys;
	var numberOfCols = 3;
/*	var statisticalParams = statisticSummary.statisticalParams;
	var errorMsg = statisticSummary.errorMsg;
*/	


	if ( !document.getElementById || !document.createElement ) { return; }
	// Clear Table if exists
	removeStatisticsDetailedList();	
	// Calculate Columns of Table
	if (dataType == 'string') { numberOfCols = 2; }
	if (dataType == 'date') { numberOfCols = 5; }	
	if (dataType == 'numeric') { numberOfCols = 6; }
	numberOfEntries = singleEntries.length;		
	entriesPerCol = Math.ceil(numberOfEntries/numberOfCols);	
	numberOfRangeEntries = rangeEntries.length;
	entriesPerColRange = Math.ceil(numberOfRangeEntries/numberOfCols);		
	// Exit if no Entries
	if (numberOfEntries==0 && numberOfRangeEntries==0 ) return;
	
	// Calculate Div-size depending on numberOfEnties
	setStyle(document.getElementById("idStatisticsListPosition"),"overflow:auto;");	
	if ((entriesPerCol+entriesPerColRange)>10) {
		setStyle(document.getElementById("idStatisticsListPosition"),"height:200px; overflow:auto;");
	}
	// -------------- SINGLE VALUES --------------	
				
	// Create Table including statistical details 
	tableElement = document.createElement("table");
	tableElement.id = "idTableStatisticsListSingle";
	tableElement.className = "statisticsList";
	tbodyElement = document.createElement("tbody");
	trElement = document.createElement("tr");	
	// First row -> Top Line
	tdElement = document.createElement("td");	
	tdElement.className = "statisticsList_topLeft";	
	tdElement.colSpan=""+((numberOfCols*2)-2)+"";	
	textElement = document.createTextNode(messages['statList.details']);
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td");
	tdElement.className = "statisticsList_topRight";
	tdElement.colSpan="2";		
	buttonElement = document.createElement("input");	
	buttonElement.setAttribute("type","button");	
	buttonElement.setAttribute("value","X");
	buttonElement.className = "regions_topRight";
	buttonElement.onclick = new Function("removeStatisticsDetailedList();");
	tdElement.appendChild(buttonElement);
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
	trElement = document.createElement("tr");	
	// Display Details
	var i=0;
	for (var col=0; col<numberOfCols; col++ ) {	
		// Third Row - > Table including details
		tdElement = document.createElement("td");
		tdElement.className = "statisticsList";				
		innerTableElement = document.createElement("table");
		innerTableElement.className="statisticsListContent";
		innerTbodyElement = document.createElement("tbody");
		innerTrElement = document.createElement("tr");
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent_headLine";
		textElement = document.createTextNode(messages['domainText']);
		innerTdElement.appendChild(textElement);							
		innerTrElement.appendChild(innerTdElement);
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent_headLine";
		textElement = document.createTextNode(messages['statList.numberOfNames']);
		innerTdElement.appendChild(textElement);							
		innerTrElement.appendChild(innerTdElement);
		innerTbodyElement.appendChild(innerTrElement);
		for (var j=0; j<entriesPerCol; j++)	{
			innerTrElement = document.createElement("tr");
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent";
			if ( i<numberOfEntries ) {
				var textToDisplay = singleEntries[i].name;
				if (isNaN(textToDisplay) == false ) { textToDisplay = parseInt(textToDisplay); }
				textElement = document.createTextNode(textToDisplay);
				innerTdElement.appendChild(textElement);							
			}
			else{
				textElement = document.createTextNode("\u0020");
				innerTdElement.appendChild(textElement);							
				
			}					
			innerTrElement.appendChild(innerTdElement);
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent_quantity";			
			if ( i<numberOfEntries ) {
				textElement = document.createTextNode(singleEntries[i].numberOfNames);
				innerTdElement.appendChild(textElement);							
			}	
			else{
				textElement = document.createTextNode("\u0020");
				innerTdElement.appendChild(textElement);							
				
			}		
			innerTrElement.appendChild(innerTdElement);
			innerTbodyElement.appendChild(innerTrElement);
			i++;
		}	
		innerTableElement.appendChild(innerTbodyElement);	
		tdElement.appendChild(innerTableElement);
		trElement.appendChild(tdElement);			
	}	
	tbodyElement.appendChild(trElement);
	tableElement.appendChild(tbodyElement);			
	document.getElementById("idStatisticsListPosition").appendChild(tableElement);
	
	// -------------- RANGE VALUES --------------
	if (numberOfRangeEntries>0) {
		// Add <p>-Element
		hrElement = document.createElement("hr");
		hrElement.id="idTableStatisticsListHr";
		document.getElementById("idStatisticsListPosition").appendChild(hrElement);					
		// Create Table including statistical details 
		tableElement = document.createElement("table");
		tableElement.id = "idTableStatisticsListRange";
		tableElement.className = "statisticsList";
		tbodyElement = document.createElement("tbody");
		trElement = document.createElement("tr");	
		// Display Details
		var i=0;
		for (var col=0; col<numberOfCols; col++ ) {	
			// Third Row - > Table including details
			tdElement = document.createElement("td");
			tdElement.className = "statisticsList";				
			innerTableElement = document.createElement("table");
			innerTableElement.className="statisticsListContent";
			innerTbodyElement = document.createElement("tbody");
			innerTrElement = document.createElement("tr");
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent_headLine";
			textElement = document.createTextNode(messages['domainText']);
			innerTdElement.appendChild(textElement);							
			innerTrElement.appendChild(innerTdElement);
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent_headLine";
			textElement = document.createTextNode(messages['statList.numberOfNames']);
			innerTdElement.appendChild(textElement);							
			innerTrElement.appendChild(innerTdElement);
			innerTbodyElement.appendChild(innerTrElement);
			for (var j=0; j<entriesPerColRange; j++)	{
				innerTrElement = document.createElement("tr");
				innerTdElement = document.createElement("td");
				innerTdElement.className="statisticsListContent";
				if ( i<numberOfRangeEntries ) {
					var textToDisplay = rangeEntries[i].name;
					if (isNaN(textToDisplay) == false ) { textToDisplay = parseInt(textToDisplay); }				
					textElement = document.createTextNode(textToDisplay);
					innerTdElement.appendChild(textElement);							
				}
				else{
					textElement = document.createTextNode("\u0020");
					innerTdElement.appendChild(textElement);							
					
				}						
				innerTrElement.appendChild(innerTdElement);
				innerTdElement = document.createElement("td");
				innerTdElement.className="statisticsListContent_quantity";			
				if ( i<numberOfRangeEntries ) {
					textElement = document.createTextNode(rangeEntries[i].numberOfNames);
					innerTdElement.appendChild(textElement);							
				}	
				else{
					textElement = document.createTextNode("\u0020");
					innerTdElement.appendChild(textElement);							
					
				}		
				innerTrElement.appendChild(innerTdElement);
				innerTbodyElement.appendChild(innerTrElement);
				i++;
			}	
			innerTableElement.appendChild(innerTbodyElement);	
			tdElement.appendChild(innerTableElement);
			trElement.appendChild(tdElement);			
		}	
		tbodyElement.appendChild(trElement);
		tableElement.appendChild(tbodyElement);			
		document.getElementById("idStatisticsListPosition").appendChild(tableElement);
	}
}


// Combinations
function createStatisticsListCombination(StatisticsListCombinationTO, currentSearchFieldFirst, currentSearchFieldSecond, mapBaseQueries, selectedDbs, languageKey) {
	var tableElement,tbodyElement,trElement,tdElement, textElement, innerTableElement, innerTbodyElement,innerTrElement,innerTdElement, pElement,hrElement ;	
	var statisticList = StatisticsListCombinationTO;
	var domainEntries = statisticList.domainEntries;
	var rangeAxis = statisticList.rangeAxis;
	var domainAxis = statisticList.domainAxis;
	var matrix = statisticList.matrix;
	var dataType = statisticList.dataType;
	var messages = statisticList.lgKeys;
	var numberOfCols = 2;
/*	var statisticalParams = statisticSummary.statisticalParams;
	var errorMsg = statisticSummary.errorMsg;
*/	


	if ( !document.getElementById || !document.createElement ) { return; }
	// Clear Table if exists
	removeStatisticsDetailedList();	
	if (dataType != 'matrix') {
		// Calculate Columns of Table
		if (dataType == 'string') { numberOfCols = 2; }
		if (dataType == 'numeric') { numberOfCols = 4; }
		numberOfEntries = domainEntries.length;		
		entriesPerCol = Math.ceil(numberOfEntries/numberOfCols);		
		// Exit if no Entries
		if (numberOfEntries==0) return;	
		// Calculate Div-size depending on numberOfEnties
		setStyle(document.getElementById("idStatisticsListPosition"),"overflow:auto;");	
		if (entriesPerCol>10) {
			setStyle(document.getElementById("idStatisticsListPosition"),"height:200px; overflow:auto;");
		}
	}	
	else {
			setStyle(document.getElementById("idStatisticsListPosition"),"height:200px; overflow:auto;");	
	}	
	
	// Create Table including statistical details 
	tableElement = document.createElement("table");
	tableElement.id = "idTableStatisticsListSingle";
	tableElement.className = "statisticsList";
	tbodyElement = document.createElement("tbody");
	trElement = document.createElement("tr");	
	// First row -> Top Line
	tdElement = document.createElement("td");	
	tdElement.className = "statisticsList_topLeft";	
	tdElement.colSpan=""+((numberOfCols*2)-2)+"";	
	textElement = document.createTextNode(messages['statList.details']);
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td");
	tdElement.className = "statisticsList_topRight";
	tdElement.colSpan="2";		
	buttonElement = document.createElement("input");	
	buttonElement.setAttribute("type","button");	
	buttonElement.setAttribute("value","X");
	buttonElement.className = "regions_topRight";
	buttonElement.onclick = new Function("removeStatisticsDetailedList();");
	tdElement.appendChild(buttonElement);
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
	//trElement = document.createElement("tr");	
	if (dataType == 'matrix') {
		trElement = fillCombinationMatrix(rangeAxis,domainAxis,matrix,messages);
	} 
	else {
		trElement =  fillCombinationTables(domainEntries, messages, numberOfEntries, numberOfCols, entriesPerCol);
	}
	tbodyElement.appendChild(trElement);
	tableElement.appendChild(tbodyElement);			
	document.getElementById("idStatisticsListPosition").appendChild(tableElement);
}


function fillCombinationTables(domainEntries, messages, numberOfEntries, numberOfCols, entriesPerCol) {
	trElement = document.createElement("tr");
	var i=0;
	for (var col=0; col<numberOfCols; col++ ) {	
		// Third Row - > Table including details
		tdElement = document.createElement("td");
		tdElement.className = "statisticsList";				
		innerTableElement = document.createElement("table");
		innerTableElement.className="statisticsListContent";
		innerTbodyElement = document.createElement("tbody");
		innerTrElement = document.createElement("tr");
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent_headLine";
		textElement = document.createTextNode(messages['domainText']);
		innerTdElement.appendChild(textElement);							
		innerTrElement.appendChild(innerTdElement);
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent_headLine";
		textElement = document.createTextNode(messages['statList.numberOfNames']);
		innerTdElement.appendChild(textElement);							
		innerTrElement.appendChild(innerTdElement);
		innerTbodyElement.appendChild(innerTrElement);
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent_headLine";
		textElement = document.createTextNode(messages['statList.iqm']);
		innerTdElement.appendChild(textElement);							
		innerTrElement.appendChild(innerTdElement);
		innerTbodyElement.appendChild(innerTrElement);
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent_headLine";
		textElement = document.createTextNode(messages['statList.minValue']);
		innerTdElement.appendChild(textElement);							
		innerTrElement.appendChild(innerTdElement);
		innerTbodyElement.appendChild(innerTrElement);
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent_headLine";
		textElement = document.createTextNode(messages['statList.maxValue']);
		innerTdElement.appendChild(textElement);							
		innerTrElement.appendChild(innerTdElement);
		innerTbodyElement.appendChild(innerTrElement);
		
		for (var j=0; j<entriesPerCol; j++)	{
			innerTrElement = document.createElement("tr");
			// Name
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent";
			if ( i<numberOfEntries ) {
				var textToDisplay = domainEntries[i].name;
				if (isNaN(textToDisplay) == false ) { textToDisplay = parseInt(textToDisplay); }
				textElement = document.createTextNode(textToDisplay);
				innerTdElement.appendChild(textElement);							
			}
			else{
				textElement = document.createTextNode("\u0020");
				innerTdElement.appendChild(textElement);							
				
			}					
			innerTrElement.appendChild(innerTdElement);
			// NumberOfNames
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent_quantity";			
			if ( i<numberOfEntries ) {
				textElement = document.createTextNode(domainEntries[i].numberOfNames);
				innerTdElement.appendChild(textElement);							
			}	
			else{
				textElement = document.createTextNode("\u0020");
				innerTdElement.appendChild(textElement);							
				
			}		
			innerTrElement.appendChild(innerTdElement);
			// Iqm
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent_quantity";			
			if ( i<numberOfEntries ) {
				var textToDisplay="---";
				var iqm = domainEntries[i].iqm;				
				if (isNaN(iqm) == false ) { iqm = (Math.round(iqm*10)/10); }
				if (iqm != -1.0 ) {  
					textToDisplay = iqm.toString();					
					if ( iqm == parseInt(iqm)) { textToDisplay += ".0"; }
				}
				textElement = document.createTextNode(textToDisplay);
				innerTdElement.appendChild(textElement);							
			}	
			else{
				textElement = document.createTextNode("\u0020");
				innerTdElement.appendChild(textElement);							
				
			}		
			innerTrElement.appendChild(innerTdElement);
			// MinValue
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent_quantity";			
			if ( i<numberOfEntries ) {
				var textToDisplay="---";
				var min = domainEntries[i].minValue;				
				if (min != -1.0 ) { textToDisplay = min.toString(); }
				textElement = document.createTextNode(textToDisplay);
				innerTdElement.appendChild(textElement);							
			}	
			else{
				textElement = document.createTextNode("\u0020");
				innerTdElement.appendChild(textElement);							
				
			}		
			innerTrElement.appendChild(innerTdElement);
			// MaxValue
			innerTdElement = document.createElement("td");
			innerTdElement.className="statisticsListContent_quantity";			
			if ( i<numberOfEntries ) {
				var textToDisplay="---";
				var max = domainEntries[i].maxValue;				
				if (max != -1.0 ) { textToDisplay = max.toString(); }			
				textElement = document.createTextNode(textToDisplay);
				innerTdElement.appendChild(textElement);							
			}	
			else{
				textElement = document.createTextNode("\u0020");
				innerTdElement.appendChild(textElement);							
				
			}		
			innerTrElement.appendChild(innerTdElement);			
			innerTbodyElement.appendChild(innerTrElement);
			i++;
		}	
		innerTableElement.appendChild(innerTbodyElement);	
		tdElement.appendChild(innerTableElement);
		trElement.appendChild(tdElement);			
	}
	return trElement;
}

function fillCombinationMatrix(rangeAxis,domainAxis,matrix,messages) {
	var numberOfRangeEntries = rangeAxis.length;
	var numberOfDomainEntries = domainAxis.length;
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.className = "statisticsList";	
	// InnerTable			
	innerTableElement = document.createElement("table");
	innerTableElement.className="statisticsListContent";
	innerTbodyElement = document.createElement("tbody");
	innerTrElement = document.createElement("tr");

	// Headline Domain
	innerTdElement = document.createElement("td");
	innerTdElement.colSpan="2";
	innerTrElement.appendChild(innerTdElement);		
	innerTdElement = document.createElement("td");
	innerTdElement.colSpan = ""+(numberOfDomainEntries)+"";
	innerTdElement.className="statisticsMatrixAxis";
	setStyle(innerTdElement,"padding-bottom:10px;");	
	textElement = document.createTextNode(messages["rangeText"]);
	innerTdElement.appendChild(textElement);
	innerTrElement.appendChild(innerTdElement);	
	innerTbodyElement.appendChild(innerTrElement);
	innerTrElement = document.createElement("tr");
	innerTdElement = document.createElement("td");
	innerTrElement.appendChild(innerTdElement);
	// DomainAxis
	innerTdElement = document.createElement("td");
	innerTdElement.className="statisticsListContent";
	innerTrElement.appendChild(innerTdElement);		
	for (var i=0; i<numberOfDomainEntries; i++) {
		innerTdElement = document.createElement("td");
		innerTdElement.className="statisticsListContent";
		setStyle(innerTdElement,"line-height:1.0em; width:15px; text-align:center;");
		divElement = document.createElement("div");
		setStyle(divElement,"width:8px;height:100%;border:none;padding:0px;text-align:center;");
		// Add white spaces to each charactor of text to display to enable vertical text
		var textDomain=domainAxis[i];
		var textToDisplay = "";
		for (var ct=0;ct<textDomain.length;ct++) {
			textToDisplay+=textDomain.substring(ct,ct+1)+" "; 
			if (ct>20) {textToDisplay+=".."; break;}
		}
		textElement = document.createTextNode(textToDisplay);		
		divElement.appendChild(textElement);
		innerTdElement.appendChild(divElement);
		innerTrElement.appendChild(innerTdElement);
	}	
	innerTbodyElement.appendChild(innerTrElement);
	// Headline Range
	innerTrElement = document.createElement("tr");	
	innerTdElement = document.createElement("td");	
	innerTdElement.className="statisticsMatrixAxis";
	setStyle(innerTdElement,"width:25px;text-align:left;");
	innerTdElement.rowSpan = ""+(numberOfRangeEntries+1)+"";
	divElement = document.createElement("div");
	setStyle(divElement,"width:8px;height:100%;border:none;padding:0px;text-align:center;");	
	var domainText = messages["domainText"];
	var textToDisplay = ""
	for (var ct=0;ct<domainText.length;ct++) {
		textToDisplay+=domainText.substring(ct,ct+1)+" ";
	} 	
	textElement = document.createTextNode(textToDisplay);
	divElement.appendChild(textElement);
	innerTdElement.appendChild(divElement);
	innerTrElement.appendChild(innerTdElement);	
	innerTbodyElement.appendChild(innerTrElement);
	// Matrix
	for (var j=numberOfRangeEntries-1; j>=0; j--) {
		innerTrElement = document.createElement("tr");
		innerTdElement = document.createElement("td");	
		if (j==0) {
			innerTdElement.className="statisticsMatrixContent_top";	
		}
		else {
			innerTdElement.className="statisticsMatrixContent_inner";
		}	
		var textToDisplay = rangeAxis[j];
		if (rangeAxis[j].length >30) { textToDisplay = rangeAxis[j].substring(0,28)+".."; }
		textElement = document.createTextNode(textToDisplay);
		innerTdElement.appendChild(textElement);
		innerTrElement.appendChild(innerTdElement);
		for (var i=0; i<numberOfDomainEntries; i++) {
			innerTdElement = document.createElement("td");
			if (j==0) {
				innerTdElement.className="statisticsMatrixContent_top";
			}
			else {
				innerTdElement.className="statisticsMatrixContent_inner";
			}
			setStyle(innerTdElement,"text-align:center; width:25px;")
			aElement = document.createElement("a");	
			aElement.className="statisticsMatrixLink"		
			aElement.href = "#";			
			aElement.onmouseover = new Function("showMatrixDetails("+j+","+i+",'"+messages['rangeText']+"','"+rangeAxis[j]+"','"+messages['domainText']+"','"+domainAxis[i]+"',"+matrix[i][j]+")");
			aElement.onmouseout = new Function("hideMatrixDetails("+j+","+i+")");					
			textElement = document.createTextNode(matrix[i][j]);
			aElement.appendChild(textElement);		
			innerTdElement.appendChild(aElement);
			innerDivElement = document.createElement("div");
			innerDivElement.id="idAnchorMatrixDetails_"+i+"_"+j;
			innerTdElement.appendChild(innerDivElement);			
			innerTrElement.appendChild(innerTdElement);
		}	
		innerTbodyElement.appendChild(innerTrElement);			
	}
	// Add Matrix
	innerTableElement.appendChild(innerTbodyElement);
	//End InnerTable	
	tdElement.appendChild(innerTableElement);
	trElement.appendChild(tdElement);
	return trElement;
}


function showMatrixDetails(j,i,rangeText,rangeValue,domainText,domainValue,numberOfRecords) {
	divElement=document.createElement("div");
	divElement.className="statisticsMatrixDetails";
	setStyle(divElement,"position:absolute;");
	// Set Content
	textElement = document.createTextNode(numberOfRecords+" X "+rangeText+": ");	
	divElement.appendChild(textElement);	
	textElement = document.createTextNode(domainValue);	
	divElement.appendChild(textElement);	
	brElement = document.createElement("br");
	divElement.appendChild(textElement);	
	hrElement = document.createElement("hr");
	divElement.appendChild(hrElement);	
	textElement = document.createTextNode(domainText+": ");	
	divElement.appendChild(textElement);
	textElement = document.createTextNode(rangeValue);	
	divElement.appendChild(textElement);	
	// Append to Anchor
	var id = "idAnchorMatrixDetails_"+i+"_"+j;
	if (document.getElementById(id) != null) {
		document.getElementById(id).appendChild(divElement);
	} 	
}



function hideMatrixDetails(j,i) {
	var id = "idAnchorMatrixDetails_"+i+"_"+j;
	if (document.getElementById(id) != null) {
		anchorElement = document.getElementById(id);
		if ( anchorElement.hasChildNodes() ) {
	    	while ( anchorElement.childNodes.length >= 1 ) {
	        	anchorElement.removeChild( anchorElement.firstChild );       
	    	} 
		}	
	}	
}



// Clears StatisticsList
function removeStatisticsDetailedList() {
	// Clear Table if exists
	if ( document.getElementById('idStatisticsListPosition') != null && document.getElementById('idTableStatisticsListSingle') != null) {
		document.getElementById('idStatisticsListPosition').removeChild(document.getElementById('idTableStatisticsListSingle'));
	}
	if ( document.getElementById('idStatisticsListPosition') != null && document.getElementById('idTableStatisticsListRange') != null) {
		document.getElementById('idStatisticsListPosition').removeChild(document.getElementById('idTableStatisticsListRange'));
	}
	if ( document.getElementById('idStatisticsListPosition') != null && document.getElementById('idTableStatisticsListHr') != null) {
		document.getElementById('idStatisticsListPosition').removeChild(document.getElementById('idTableStatisticsListHr'));
	}	
	if ( document.getElementById('idStatisticsListPosition') != null) {
		setStyle(document.getElementById("idStatisticsListPosition"),"");	
	}
	
	
}
