/*
 * <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.
 *
 */
 

// ---------------------------------------------------------------------------------------------
// Initialisation and DWR-Method of ResultList
// ---------------------------------------------------------------------------------------------


// Globals
var catalogResultEntries;
var catalogResultFieldsInResultList;
var catalogLgKeys;
var resultListBookmarks=new Array();



// TODO: Add Description
function initCatalogResultList( mapBaseQueries, idSortCriteria1, idSortCriteria2, idHitsPerPage, languageKey, mapDbInfo ) {
	var sortCriteria1 = "";
	var sortCriteria2 = "";
	var hitsPerPage = "10";
	var action = "next";
	var selectedDbs = "";
	

	//cqlBaseQuery = trim(cqlBaseQuery);	
	// 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"; }
	if ( document.getElementById ) { 
		if ( document.getElementById(idSortCriteria1) ) { sortCriteria1  = trim(document.getElementById(idSortCriteria1).value); } else { return; }
		if ( document.getElementById(idSortCriteria2) ) {sortCriteria2  = trim(document.getElementById(idSortCriteria2).value);	} else { return; }
		if ( document.getElementById(idHitsPerPage) ) 	{hitsPerPage  = trim(document.getElementById(idHitsPerPage).value); }	else { return; }
	}
	else {
		return;
	}		
	//alert("SortCriteria1: "+sortCriteria1+"\nSortCriteria1: "+sortCriteria2+"\n HitsPerPage: "+hitsPerPage+"\n Language: "+languageKey+"\n BaseQuery: "+cqlBaseQuery+"\n Action: "+action );
	getCatalogResultList( mapBaseQueries, sortCriteria1, sortCriteria2, hitsPerPage, action, [], {}, languageKey, selectedDbs );
}


// TODO: Add Description
function getCatalogResultList( mapBaseQueries, sortCriteria1, sortCriteria2, hitsPerPage, action, pageIndexPrevious, pageIndexNext, languageKey, selectedDbs ){
	//useLoadingImage("resources/appl_images/loadingImage24x24.gif","idCatalogResultListPosition"); // CHECK THIS
	
	var showThumbnails="no";
	if (document.getElementById('idShowThumbnails') != null) {
		showThumbnails=document.getElementById('idShowThumbnails').value;
	}
				
	dwr.engine.setOrdered(true);
	try{
	updateBookmarks(0,languageKey);
	}catch(e){alert(e);}
	 	
	CatalogResultList.getCatalogResultList( mapBaseQueries, sortCriteria1, sortCriteria2, hitsPerPage, action, pageIndexPrevious, pageIndexNext, languageKey, selectedDbs, showThumbnails,
		{ 	callback:function(CatalogResultListTO){ fillResultListShort(CatalogResultListTO, mapBaseQueries, sortCriteria1, sortCriteria2, hitsPerPage, action, pageIndexPrevious, pageIndexNext, languageKey, selectedDbs);}, 
			errorHandler:function(message) { errorHandlerCatalogResultlist(); },
			timeout:0
		}		
	 );
	 return;
}

// Error Handling
function errorHandlerCatalogResultlist() {

	setCheckedContUpdate('idContUpdate', 'false'); // Uncheck Cont. Update in Case of Connection Timout
	alert ("Connection Timeout");
	document.formCatalogSearch.submit(); // Submit Formular	
}


// ---------------------------------------------------------------------------------------------
// ResultList Short an Extended
// ---------------------------------------------------------------------------------------------


// Creates Table using JS-DOM containig ResultListShort on position with id = 'idCatalogResultListPosition' 
function fillResultListShort(CatalogResultListTO, mapBaseQueries, sortCriteria1, sortCriteria2, hitsPerPage, action, pageIndexPrevious, pageIndexNext, languageKey, selectedDbs){

	var catalogResultList = CatalogResultListTO;		
	var resultEntries = catalogResultList.catalogResultListEntries;  // List of Entries		
	var mapPageIndexNext = catalogResultList.pageIndexNext;			 // Map containing index of startRecord for each Database if User clicks on next-button 
	var listPageIndexPrevious = catalogResultList.pageIndexPrevious; // Map containing index of startRecord for each Database if User clicks on previous-button
	var fieldsInResultList = catalogResultList.fieldsInResultList.split(','); // Array containing those Searchfields who are displayed in Resultlist
	var lgKeys = catalogResultList.lgKeys; 							 // Map containing languageKeys
	var showThumbnails = catalogResultList.showThumbnails;			 // yes or no
	var catalogResultEntry;	
	var tableElement, tbodyElement, trElement, tdElement, textElement, hrElement, aElement, innerTableElement, innerTbodyElement, innerTrElement, innerTdElement;
	var onClickEvent = ""	
	var numberEntriesCurrentPage = resultEntries.length;
	
	this.catalogResultEntries=resultEntries;
	this.catalogResultFieldsInResultList = fieldsInResultList;
	this.catalogLgKeys = lgKeys;
	//if (showThumbnails != "yes" || showThumbnails!="no" ) {  showThumbnails="no"; }
	
	if ( !document.getElementById || !document.createElement ) { return; }
	// Clear Table if exists
	if ( document.getElementById('idCatalogResultListPosition') != null && document.getElementById('idTableCatalogResultList') != null) {
		document.getElementById('idCatalogResultListPosition').removeChild(document.getElementById('idTableCatalogResultList'));
	}
	// Clear Message 'simpleSearchInfoBelow' if exist
	trElement = document.getElementById('idSimpleSearchInfoBelow_txt')
	if ( trElement != null ) {
		trElement.parentNode.removeChild(trElement);
	}
	trElement = document.getElementById('idSimpleSearchInfoBelow_hr')
	if ( trElement != null ) {
		trElement.parentNode.removeChild(trElement);
	}
	
	// Create Table for ResultListShort (7 Columns)
	tableElement = document.createElement("table");
	tableElement.setAttribute("id","idTableCatalogResultList");
	tableElement.className="resultlist";
	tbodyElement = document.createElement("tbody");
	trElement = document.createElement("tr");
	// Menu and Navigation
	trElement = getMenuResultListShort( mapBaseQueries, resultEntries, sortCriteria1, sortCriteria2, hitsPerPage, numberEntriesCurrentPage, action, listPageIndexPrevious, mapPageIndexNext, languageKey, selectedDbs, showThumbnails );
	tbodyElement.appendChild(trElement);
			
	trElement = createDeSEL();
	tbodyElement.appendChild(trElement);
	// Inner-Table containing Descriptions and Entries
	innerTableElement = document.createElement("table");
	innerTableElement.setAttribute("id","idTableCatalogResultListEntries"); 
	innerTableElement.setAttribute("border","2px");	
	innerTableElement.setAttribute("width","950px");	
	innerTableElement.className = "resultlistContent";	
	innerTbodyElement = document.createElement("tbody");	
	innerTrElement = document.createElement("tr");	
	innerTbodyElement.appendChild( innerTrElement );	
	// Descriptions
	innerTrElement = getHeadLineResultListShort( fieldsInResultList );
	innerTbodyElement.appendChild(innerTrElement);
	// Rows containing Entries
	for (var i = 0; i < resultEntries.length; i++) {  
		catalogResultEntry = resultEntries[i].resultEntry;
 		innerTrElement = getSingleEntryResultListShort( i, hitsPerPage, listPageIndexPrevious );
 		innerTrElement.setAttribute("valign","top");
  		innerTbodyElement.appendChild( innerTrElement ); 		
	}	
	innerTableElement.appendChild(innerTbodyElement);
	trElement = document.createElement("tr");
	tdElement = document.createElement("td"); 	
	tdElement.setAttribute("colSpan","7");	
	tdElement.appendChild(innerTableElement);
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
	// Footer
	trElement = getFooterResultListShort( mapBaseQueries, sortCriteria1, sortCriteria2, hitsPerPage, numberEntriesCurrentPage, action, listPageIndexPrevious, mapPageIndexNext, languageKey, selectedDbs );
	tbodyElement.appendChild(trElement);
	
	tableElement.appendChild(tbodyElement);		
	document.getElementById('idCatalogResultListPosition').appendChild(tableElement);
	if (showThumbnails == 'yes') {showThumbnailsResultList();}
	
}


// Returns <tr>-Element containing Menu and Navigation-Buttons of ResultListShort
function getMenuResultListShort( mapBaseQueries, resultEntries, sortCriteria1, sortCriteria2, hitsPerPage, numberEntriesCurrentPage, action, listPageIndexPrevious, mapPageIndexNext, languageKey, selectedDbs, showThumbnails) {
	var trElement;
	var tdElement;
	var textElement;
	var inputElement;
	var onClickEvent = "";	
	var indexesNext = serialize(mapPageIndexNext);
	var indexesPrevious = serialize(listPageIndexPrevious);	
	var pageNumber = listPageIndexPrevious.length-1;
	var numberOfEntries = resultEntries.length;
		
	trElement = document.createElement("tr");
    trElement.setAttribute("align","center");	
	// 1. Column (Empty)
	tdElement = document.createElement("td");	
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px; font-weight:bold; font-size:12px;");	
	if ( numberOfEntries>0 ) {
		var entryNumberFrom = pageNumber*Number(hitsPerPage)+1;
		var entryNumberTo = (pageNumber*Number(hitsPerPage)+Number(numberOfEntries));
		textElement = document.createTextNode(entryNumberFrom+" - "+entryNumberTo);	
		tdElement.appendChild(textElement);		
	}	
	trElement.appendChild(tdElement);
	// 2. Column ( Thumbnails )
	tdElement = document.createElement("td");	
	tdElement.className="resultlist_menu";		
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');
	inputElement.setAttribute("id","idShowThumbnails");		
	inputElement.setAttribute("type","hidden");	
	inputElement.setAttribute("value",showThumbnails);
	inputElement.className="resultlist";
	tdElement.appendChild(inputElement);
	inputElement = document.createElement('input');	
	inputElement.setAttribute("id","idShowThumbnailsButton");		
	inputElement.className="resultlist";
	if (showThumbnails == 'yes') { setStyle(inputElement,"display:hidden;"); }
	else { setStyle(inputElement,"display:inline;");}					
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["showThumbs"]);
	inputElement.onclick = new Function("showThumbnailsResultList()");	
	tdElement.appendChild(inputElement);	
	inputElement = document.createElement('input');	
	inputElement.setAttribute("id","idHideThumbnailsButton");	
	inputElement.className="resultlist";
	if (showThumbnails == 'yes') {setStyle(inputElement,"display:inline;");} 
	else { setStyle(inputElement,"display:none;");}						
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["hideThumbs"]);
	inputElement.onclick = new Function("hideThumbnailsResultList("+resultEntries.length+")");	
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	// 3. Column ( Export Results and Bookmark )
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');	
	inputElement.className="resultlist";
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["exportResults"]);
	inputElement.onclick = new Function("menu(mapBaseQueries,'"+sortCriteria1+"','"+sortCriteria2+"','"+hitsPerPage+"','"+numberEntriesCurrentPage+"','"+action+"',"+indexesPrevious+","+indexesNext+", '"+languageKey+"','"+selectedDbs+"')");
	var anker = document.createElement("div");
	anker.setAttribute("style","position:absolute");
	anker.setAttribute("id","idExportMenu");
	tdElement.appendChild(anker);
	tdElement.appendChild(inputElement);   
	trElement.appendChild(tdElement);	
	// 4. Column (Bookmarks)
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');		
	inputElement.className="resultlist";		
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["bookmarks"]);		
	inputElement.onclick = new Function("createBookmarkList('"+languageKey+"');"); // TODO Bookmarks
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	// 5. Column ( Empty )
	tdElement = document.createElement("td");	
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px;");					
	trElement.appendChild(tdElement);
	// 6. Column ( Previous )
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');	
	inputElement.className="resultlist";	
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["previous"]);
	if (listPageIndexPrevious.length <= 1 ) { inputElement.setAttribute("disabled","true"); }	
	inputElement.onclick = new Function("getCatalogResultList( mapBaseQueries, '"+sortCriteria1+"', '"+sortCriteria2+"', '"+hitsPerPage+"', 'previous', "+indexesPrevious+", "+indexesNext+", '"+languageKey+"', '"+selectedDbs+"' )");
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);	
	// 7. Column ( Next )
	var pageNumber = listPageIndexPrevious.length-1;
	var lastNumber = Number(pageNumber)*Number(hitsPerPage)+numberEntriesCurrentPage;
	var totalHits = document.getElementById('idTotalHits').value;
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');	
	inputElement.className="resultlist";		
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["next"]);
	if ( numberEntriesCurrentPage < hitsPerPage || Number(totalHits) == lastNumber ) { inputElement.setAttribute("disabled","true"); }
	inputElement.onclick = new Function("getCatalogResultList( mapBaseQueries, '"+sortCriteria1+"', '"+sortCriteria2+"', '"+hitsPerPage+"', 'next', "+indexesPrevious+", "+indexesNext+", '"+languageKey+"', '"+selectedDbs+"' )");	
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);

	return trElement;
}


// Returns <tr>-Element containing Descriptions of Result Searchfields
function getHeadLineResultListShort( fieldsInResultList ) {
	var trElement,thElement,textElement,spanElement;
	
	trElement = document.createElement("tr");
	// First Column (Empty)
	thElement = document.createElement("th");
	thElement.className="resultlistContent";			
	trElement.appendChild(thElement);	
	// Second Column (Empty)
	thElement = document.createElement("th");
	thElement.className="resultlistContent";							
	trElement.appendChild(thElement);
	// Third Column (Thumbnail)
	thElement = document.createElement("th");
	thElement.className="resultlistContent";		
	spanElement =  document.createElement("span");	
	spanElement.setAttribute("id","idThumbnailsHeadline");	 
	spanElement.className="";		
	setStyle(spanElement,"display:none;") 	
	textElement = document.createTextNode( this.catalogLgKeys["thumbnail"] ); 
	spanElement.appendChild(textElement);
	thElement.appendChild(spanElement);
	trElement.appendChild(thElement);	
	// Fourth Column (Database)
	thElement = document.createElement("th");
	thElement.className="resultlistContent";			
	textElement = document.createTextNode( this.catalogLgKeys["dc.database"] ); // TODO: Language
	thElement.appendChild(textElement);
	trElement.appendChild(thElement);
	// Colums Descriptions of Searchfields
	for (var i=0; i<fieldsInResultList.length; i++) {
		thElement = document.createElement("th");
		thElement.className="resultlistContent";		
		textElement = document.createTextNode( this.catalogLgKeys[trim(fieldsInResultList[i])] );
		thElement.appendChild(textElement);
		trElement.appendChild(thElement);
	}
	
	return trElement;
}



// Returns <tr>-Element containing a Single Entry of ResultList
function getSingleEntryResultListShort( currentNumber, hitsPerPage, listPageIndexPrevious) {
	var trElement,tdElement,textElement,imgElement,divElement,inputElement,aElement;
	var onClickEvent="";
		
	//catalogResultEntry = catalogResultEntries[currentNumber].resultEntry;						
	catalogResultEntry = this.catalogResultEntries[currentNumber].resultEntry;
	fieldsInResultList = this.catalogResultFieldsInResultList;
	
	var pageNumber = listPageIndexPrevious.length-1;
	var number = Number(pageNumber)*Number(hitsPerPage)+currentNumber+1;
		
	trElement = document.createElement("tr");
	trElement.setAttribute("align","left");	
	// First Column (Number of Entry)
	tdElement = document.createElement("td");
	tdElement.className="resultlistContent_left";
	textElement = document.createTextNode("#"+number);	
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);	
	// Second Column (Bookmark)
	tdElement = document.createElement("td");
	tdElement.className="resultlistContent_middle_right";
	divElement = document.createElement("div"); // Anchor for displaying Details of current Entry	
	setStyle(divElement, "position:absolute; z-index:2; background-color:FFFFFF; border:none;");
	divElement.setAttribute("id","idAnchorResultListDetailedView_"+currentNumber);
	tdElement.appendChild(divElement);
	inputElement = document.createElement("input");		
	inputElement.setAttribute("type","checkbox");
	inputElement.setAttribute("id","idCheckbox_"+currentNumber); 
	
	//----------------------------------------------------------------------------------------
	// BOOKMARKS
	//----------------------------------------------------------------------------------------
		var entryChecked = "false";

		
		entryChecked = isBookmarkedEntry(catalogResultEntry);

		inputElement.checked=entryChecked; 
		if (entryChecked){
			inputElement.defaultChecked = true ;
			inputElement.setAttribute("checked",true);	
		}
		inputElement.onclick = new Function("bookmarkResultlistEntry('idCheckbox_"+currentNumber+"',"+currentNumber+")"); 

	//----------------------------------------------------------------------------------------
	// END
	//----------------------------------------------------------------------------------------
	
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	// Third Column (Thumbnail)
	tdElement = document.createElement("td");
	tdElement.className="resultlistContent_hidden";
	tdElement.setAttribute("style","visibility:hidden;");
	tdElement.setAttribute("id","idThumbnailResultlist_"+currentNumber);
	trElement.appendChild(tdElement);
	// Fourth Column (Database)
	tdElement = document.createElement("td");
	tdElement.className="resultlistContent_middle_right";	
	textElement = document.createTextNode( trim(catalogResultEntry['dc.database']) );
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);
	// Colums Descriptions of Searchfields
	for (var i=0; i<fieldsInResultList.length; i++) {
		tdElement = document.createElement("td");
		tdElement.className="resultlistContent_middle_right";	
		var text = trim(catalogResultEntry[fieldsInResultList[i]]);
		if ( text.toString() == '-1' && fieldsInResultList[i] == "dcx.height" ) { text = ' --- '; }
		if ( text.toString() == '-1' && fieldsInResultList[i] == "dc.date" ) { text = ' --- '; }		
		if ( fieldsInResultList[i] == "dc.title" ) { text = cutText(text, 84); }
		if ( fieldsInResultList[i] == "dcx.originplace" ) { text = cutText(text, 18); }
		if ( fieldsInResultList[i] == "dcx.height" ) { text = cutText(text, 7); }		
		if ( fieldsInResultList[i] == "dc.date" ) { 
			var dateString = trim(catalogResultEntry["dcx.datestring"]);
			if (dateString == '' || dateString == '---') {
				text = cutText(text, 30); 
			}
			else {  
				text = trim(cutText(dateString, 30));
			}
		}
		if ( text == '') { text=' --- '; }		
		textElement = document.createTextNode( text ); 
		if ( fieldsInResultList[i] == "dcx.refnr") { // Create href to Details of ResultEntry 
			aElement = document.createElement("a");
			aElement.className="resultlistContent_link";
			aElement.href = "#";
			aElement.onclick = new Function("showDetailsResultListEntry('idAnchorResultListDetailedView_',"+currentNumber+")");
			aElement.appendChild(textElement);
			tdElement.appendChild(aElement);
			inputElement = document.createElement("input");
			inputElement.setAttribute("type","hidden");
			inputElement.setAttribute("id","idRefNumber_"+currentNumber);
			inputElement.setAttribute("value",text);
			tdElement.appendChild(inputElement);
		}
		else {
			tdElement.appendChild(textElement);
		}
		trElement.appendChild(tdElement);
	}
		
	return trElement;
}

// Returns <tr>-Element containing Footer with Navigation of ResultListShort
function getFooterResultListShort(mapBaseQueries, sortCriteria1, sortCriteria2, hitsPerPage, numberEntriesCurrentPage, action, listPageIndexPrevious, mapPageIndexNext, languageKey, selectedDbs) {
	var trElement;
	var tdElement;
	var inputElement;
	var onClickEvent = "";
	
	var indexesPrevious = serialize(listPageIndexPrevious);
	var indexesNext = serialize(mapPageIndexNext);

	trElement = document.createElement("tr");
	trElement.setAttribute("align","center");	
	trElement.className="";	
	setStyle(trElement,"border:1px;");				
	// 1.-2. Column (Empty)
	tdElement = document.createElement("td");	
	tdElement.setAttribute("colSpan","2");
	tdElement.className="resultlist_footer";	
	setStyle(tdElement,"border:0px;");					
	trElement.appendChild(tdElement);
	// 3. Column ( Export  )
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');	
	inputElement.className="resultlist";
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["exportResults"]);
	inputElement.onclick=new Function("menu(mapBaseQueries,'"+sortCriteria1+"','"+sortCriteria2+"','"+hitsPerPage+"','"+numberEntriesCurrentPage+"','"+action+"',"+indexesPrevious+","+indexesNext+", '"+languageKey+"','"+selectedDbs+"')");
	tdElement.appendChild(inputElement);   
	trElement.appendChild(tdElement);	
	// 4. Column (Bookmarks)
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_menu";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');		
	inputElement.className="resultlist";		
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["bookmarks"]);		
	inputElement.onclick = new Function("createBookmarkList();"); // TODO Bookmarks
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	// 5. Column (empty)
	tdElement = document.createElement("td");	
	tdElement.setAttribute("colSpan","1");
	tdElement.className="resultlist_footer";	
	setStyle(tdElement,"border:0px;");					
	trElement.appendChild(tdElement);
	
	// 6. Column ( Previous )
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_footer";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');	
	inputElement.className="resultlist";	
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["previous"]);
	if (listPageIndexPrevious.length <= 1 ) { inputElement.setAttribute("disabled","true"); }		
	inputElement.onclick = new Function("getCatalogResultList( mapBaseQueries, '"+sortCriteria1+"', '"+sortCriteria2+"', '"+hitsPerPage+"', 'previous', "+indexesPrevious+", "+indexesNext+", '"+languageKey+"', '"+selectedDbs+"' )");		
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);	
	// 7. Column ( Next )
	var pageNumber = listPageIndexPrevious.length-1;
	var lastNumber = Number(pageNumber)*Number(hitsPerPage)+numberEntriesCurrentPage;
	var totalHits = document.getElementById('idTotalHits').value;	
	tdElement = document.createElement("td");			
	tdElement.className="resultlist_footer";	
	setStyle(tdElement,"border:0px;");	
	inputElement = document.createElement('input');	
	inputElement.className="resultlist";	
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["next"]);
	if ( numberEntriesCurrentPage < hitsPerPage || Number(totalHits) == lastNumber ) { inputElement.setAttribute("disabled","true"); }	
	inputElement.onclick = new Function("getCatalogResultList( mapBaseQueries, '"+sortCriteria1+"', '"+sortCriteria2+"', '"+hitsPerPage+"', 'next', "+indexesPrevious+", "+indexesNext+", '"+languageKey+"', '"+selectedDbs+"' )");	
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	
	return trElement;
}


// Creates Image-Tags for Thumbnails on position 'idThumbnailResultlist_i'
function showThumbnailsResultList() {	

	document.getElementById('idShowThumbnails').value="yes";


	var resultEntries = this.catalogResultEntries;
	var tdElement,divElement,imgElement,aElement,textElement;
	var onMouseOverEvent = "";
	var onMouseOutEvent = "";
	var onClickEvent = "";
	if ( !document.getElementById ) { return; }	
	document.getElementById('idShowThumbnailsButton').style.display="none";
	document.getElementById('idHideThumbnailsButton').style.display="inline";
	document.getElementById('idThumbnailsHeadline').style.display="inline";		
	for (var i = 0; i < resultEntries.length; i++) {  
		catalogResultEntry = resultEntries[i].resultEntry;
		tdElement = document.getElementById('idThumbnailResultlist_'+i);
		setStyle(tdElement,"visibility:visible;");
		divElement = document.createElement("div");
		divElement.setAttribute("id","idThumbnailResultlistDiv_"+i);
		divElement.className="resultlistContent_thumbs";
		setStyle(divElement,"width:120px; height:130px; overflow:auto;");			
		aElement = document.createElement("a");
		aElement.onmouseover = new Function("expandThumbnailTimer=setTimeout( 'new Function( expandThumbnail(\\'"+i+"\\') )', 500 )");
		aElement.onmouseout = new Function("clearTimeout(expandThumbnailTimer);new Function( collapseThumbnail('"+i+"') )");	
		imgElement = document.createElement("img");
		imgElement.setAttribute("src",trim(catalogResultEntry['dcx.thumbnail']));
		imgElement.setAttribute("id","idThumbnailResultlistImg_"+i);	
		imgElement.setAttribute("alt",this.catalogLgKeys["noImage"]); // TODO LanguageKey	
		setStyle(imgElement,"width:100px;");
		aElement.appendChild(imgElement);
		divElement.appendChild(aElement);		
		tdElement.appendChild(divElement);		
	}	
}


// Deletes Image-Tags for Thumbnails on position 'idThumbnailResultlist_i'
function hideThumbnailsResultList( resultEntryListLength ) {	
	var tdElement,divElement,imgElement;

	document.getElementById('idShowThumbnails').value="no";


	if ( !document.getElementById ) { return; }		
	document.getElementById('idShowThumbnailsButton').style.display="inline";
	document.getElementById('idHideThumbnailsButton').style.display="none";	
	document.getElementById('idThumbnailsHeadline').style.display="none";	
	for (var i = 0; i < resultEntryListLength; i++) {  
		tdElement = document.getElementById('idThumbnailResultlist_'+i);
		setStyle(tdElement,"visibility:hidden;");
		tdElement.removeChild( document.getElementById('idThumbnailResultlistDiv_'+i) );
	}	
}


// Expands Thumnail on List-Position 'i'
function expandThumbnail( indexOfThumbnail ) {
	var divElement,imgElement,absDivElement;
	
	if ( !document.getElementById ) { return; }				
	tdElement = document.getElementById('idThumbnailResultlist_'+indexOfThumbnail); // Set height of td to fixed value
	tdElement.setAttribute("height","130px");
	divElement = document.getElementById('idThumbnailResultlistDiv_'+indexOfThumbnail); // Remove styles of div to get full Size of image
	setStyle(divElement,"border:1px solid black; position:absolute;");
	imgElement = document.getElementById('idThumbnailResultlistImg_'+indexOfThumbnail);	
	imgElement.removeAttribute("style");
}


// Collapses Thumnail on List-Position 'i'
function collapseThumbnail( indexOfThumbnail ) {
	var divElement,imgElement;
	
	if ( !document.getElementById ) { return; }		
	tdElement = document.getElementById('idThumbnailResultlist_'+indexOfThumbnail); // Set height of td to fixed value
	tdElement.removeAttribute("height");		
	divElement = document.getElementById('idThumbnailResultlistDiv_'+indexOfThumbnail);
	setStyle(divElement,"width:120px; height:130px; overflow:auto;");
	imgElement = document.getElementById('idThumbnailResultlistImg_'+indexOfThumbnail);
	imgElement.removeAttribute("style");
	setStyle(imgElement,"width:100px;");	
}


// ---------------------------------------------------------------------------------------------
// ResultList Detailed View of an single Entry
// ---------------------------------------------------------------------------------------------

// Shows Details of an single ResultList-Entry
function showDetailsResultListEntry(idAnchorBase, currentNumber) {

	var tableElement,tbodyElement, trElement,tdElement,textElement,imgElement,aElement,innerTableElement,innerTBodyElement, innerTrElement,innerTdElement;
	var fieldDescription = "";
	var onClickEvent = "";	
	var idAnchor = idAnchorBase+currentNumber;
	var catalogResultEntry = this.catalogResultEntries[currentNumber].resultEntry;
	var lastIndex = this.catalogResultEntries.length-1;				

	if ( !document.getElementById || !document.createElement ) { return; }
	
	// Remove Table with Entry-Details if exist before displaying
	var tableDetails = document.getElementById('idTableCatalogResultlistDetails');
	if (tableDetails != null) {
		tableDetails.parentNode.removeChild(tableDetails);
	}
	
	// Create Table with 3 Colums containing Result-Entry Details	
	tableElement = document.createElement("table");
	tableElement.setAttribute("id","idTableCatalogResultlistDetails");  
	tableElement.className="resultlistShort";
	tableElement.setAttribute("align","left"); 
	tableElement.setAttribute("valign","top"); 	
	tableElement.cellPadding = "0"; 
	tableElement.cellSpacing = "0"; 
	//setStyle(tableElement,"width:794px; border:2px solid black; font-size:12px; background-color:#ffffff;")
	tbodyElement=document.createElement("tbody");
	// First Row (Navigation)	
	trElement = document.createElement("tr"); // Bookmark
	tdElement = document.createElement("td"); // 
	tdElement.className="resultlistShortButton";	
	tdElement.setAttribute("style","border:0px;");
	
	//INPUT CHECKBOX	
	var cInputElement = document.createElement('input');		
	cInputElement.className="resultlistShortButton";	
	cInputElement.setAttribute("type","checkbox");
	cInputElement.setAttribute("id","idDCheckbox_"+currentNumber);		
	var check = document.getElementById("idCheckbox_"+currentNumber).checked;
	cInputElement.setAttribute("checked",check); // TODO
	cInputElement.checked = check;
	cInputElement.defaultChecked = check;

	cInputElement.onclick=new Function("detailedViewClick('idCheckbox_"+currentNumber+"','"+!cInputElement.checked+"','"+currentNumber+"');");
	//END INPUT CHECKBOX
			
	tdElement.appendChild(cInputElement);
	textElement = document.createTextNode(this.catalogLgKeys["bookmark"]); 
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td");	// Previous- and Next-Button	
	tdElement.className="resultlistShortHeadButton";	
	tdElement.setAttribute("style","border:0px;");		
	inputElement = document.createElement('input');	// Previous Button
	inputElement.className="resultlistShortButton";	
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["previous"]);
	if (currentNumber < 1 ) { inputElement.setAttribute("disabled","true"); }	
	inputElement.onclick = new Function("showDetailsResultListEntry('"+idAnchorBase+"',"+(currentNumber-1)+")");	
	tdElement.appendChild(inputElement);
	textElement = document.createTextNode("\u0020");
	tdElement.appendChild(textElement);
	inputElement = document.createElement('input');	// Next Button
	inputElement.className="resultlistShortButton";	
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["next"]);
	if (currentNumber >= lastIndex ) { inputElement.setAttribute("disabled","true"); }		
	inputElement.onclick = new Function("showDetailsResultListEntry('"+idAnchorBase+"',"+(currentNumber+1)+")");
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td");	//  Close-Button		
	tdElement.className="resultlistShortButton";	
	tdElement.setAttribute("style","border:0px;");		
	inputElement = document.createElement('input');	 // Close Window Button
	inputElement.className="resultlistShortButton";	
	inputElement.setAttribute("type","button");		
	inputElement.setAttribute("value",this.catalogLgKeys["closeDetails"]);
	inputElement.onclick = new Function("closeDetailsResultListEntry('"+idAnchor+"')");
	tdElement.appendChild(inputElement);
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
	// Second Row (Headlines)
	trElement = document.createElement("tr"); 
	trElement.className="resultListDetails";
	tdElement = document.createElement("td"); // Text 'Picture'
	tdElement.className="resultListDetailsHeader";	
	tdElement.setAttribute("style","border:0px;");	
	textElement = document.createTextNode(this.catalogLgKeys["picture"]); 
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td"); // Text 'Information'
	tdElement.setAttribute("colSpan","2");
	tdElement.className="resultListDetailsHeader";
	tdElement.setAttribute("style","border:0px;");	
	textElement = document.createTextNode(this.catalogLgKeys["information"]); 
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);	
	tbodyElement.appendChild(trElement);
	// Third Row (Picure and Information)
	trElement = document.createElement("tr"); // Picture
	tdElement = document.createElement("td"); 
	tdElement.className="resultListDetailsContent";	
	tdElement.setAttribute("style","border:0px;");	
	divElement = document.createElement("div");
	divElement.id = "idImageResultlistDetails";
	setStyle(divElement,"width:200px; height:300px; overflow:auto;");
	imgElement = document.createElement("img");
	setStyle(imgElement,"border:none;");
	imgElement.setAttribute("src",trim(catalogResultEntry['dcx.thumbnail']));
	imgElement.onmouseover = new Function("expandImageResultListDetails()");	
	imgElement.onmouseout = new Function("collapseImageResultListDetails()");	
	divElement.appendChild(imgElement);
	tdElement.appendChild(divElement);
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td"); 
	tdElement.setAttribute("colSpan","2");	
	tdElement.className="resultListDetailsContent";	
	tdElement.setAttribute("style","border:0px;");	
	// Inner-Table (Information)
	innerTableElement = document.createElement("table");
	innerTableElement.cellPadding = "0"; 
	innerTableElement.cellSpacing = "0"; 
	innerTableElement.className ="resultlistShortContent";	
	innerTBodyElement = document.createElement("tbody");
	// -------------------------------------------
	// ----- HACK -----
	var fieldsOrdered = "dcx.refnr,dc.title,dcx.distance,dcx.width,dcx.height,dc.date,dcx.originplace,dcx.placenorm,dcx.location,dc.database,dc.identifier,dcx.datestring,dc.creator,dcx.shelfmark,dc.relation,dcx.briquet,dcx.laidline";
	var fieldsOrderedArr = fieldsOrdered.split(",");
	for (var ct=0; ct<fieldsOrderedArr.length; ct++) { 
		i=fieldsOrderedArr[ct]; 
	// ----- END HACK -----
	// -------------------------------------------
	
	//FIX 4 THE Unescaped elements
	var check = catalogResultEntry[i].toString();
	check = check.replace(/\\'/g, "\'");
	catalogResultEntry[i]= check;
	//END FIX
	
	//for (i in catalogResultEntry) { // ORIGINAL
		if ( i != "dcx.thumbnail" ) {
			innerTrElement = document.createElement("tr");
			innerTdElement = document.createElement("td");	
			innerTdElement.className="resultlistShortContentLeft";
			if (i == "dc.identifier" ) { fieldDescription = this.catalogLgKeys["link"] } else { fieldDescription = this.catalogLgKeys[i]; } 
			textElement = document.createTextNode( fieldDescription ); 
			innerTdElement.appendChild(textElement);
			innerTrElement.appendChild(innerTdElement);
			innerTdElement = document.createElement("td");	
			innerTdElement.className="resultlistShortContentRight";
			if (i == "dc.identifier" ) {  // Link to remote Database ( new window )
				var linkGoTo = trim(catalogResultEntry["dc.identifier"]);
				if (linkGoTo == '' || linkGoTo == "---" ) {
					textElement = document.createTextNode(" --- ");
					innerTdElement.appendChild(textElement);
				}
				else {
					aElement = document.createElement("a");	
					aElement.className = "resultlistShortContentLink";
					textElement = document.createTextNode( this.catalogLgKeys["goTo"]+" "+this.catalogLgKeys[catalogResultEntry["dc.database"].toLowerCase()]); 	
					aElement.href = linkGoTo;	
					aElement.setAttribute("target","_blank");
					aElement.appendChild(textElement);	
					innerTdElement.appendChild(aElement);	
				}					
			} else {
				// ----	Hack
				if ( catalogResultEntry[i] == null) {  catalogResultEntry[i] = ' --- '; }
				if ( catalogResultEntry[i].toString() == '-1' && i == "dc.date" ) { catalogResultEntry[i] = ' --- '; }					
				if ( catalogResultEntry[i].toString() == '-1' && i == "dcx.height" ) { catalogResultEntry[i] = ' --- '; }
				if ( catalogResultEntry[i].toString() == '-1' && i == "dcx.distance" ) { catalogResultEntry[i] = ' --- '; }
				if ( catalogResultEntry[i].toString() == '-1' && i == "dcx.width" ) { catalogResultEntry[i] = ' --- '; }
				if ( catalogResultEntry[i].toString() == '-1' && i == "dcx.shelfmark" ) { catalogResultEntry[i] = ' --- '; }								
				// ----
				if ( trim(catalogResultEntry[i]) == "" ) { catalogResultEntry[i] = ' --- '; }
				var textToDisplay = catalogResultEntry[i];
				if (i == "dc.date" &&  catalogResultEntry["dcx.datestring"] != " --- " ) {
					textToDisplay=catalogResultEntry["dcx.datestring"];
				}
				if (i == "dcx.datestring" &&  catalogResultEntry["dc.date"] != " --- " ) {
					textToDisplay=catalogResultEntry["dc.date"];
				}
				if (i == "dc.date" &&  catalogResultEntry["dcx.datestring"] == " --- " ) {
					textToDisplay=catalogResultEntry["dc.date"];
				}
				if (i == "dcx.datestring" &&  catalogResultEntry["dcx.datestring"] == " --- " ) {
					textToDisplay=" --- ";
				}
				
				
			
				textElement = document.createTextNode( textToDisplay ); 
				innerTdElement.appendChild(textElement);
			}
			innerTrElement.appendChild(innerTdElement);
			innerTBodyElement.appendChild(innerTrElement);
		}
	}	
	innerTableElement.appendChild(innerTBodyElement);
	tdElement.appendChild(innerTableElement);
	// End Inner-Table (Information)		
	trElement.appendChild(tdElement);		
	tbodyElement.appendChild(trElement)	
	tableElement.appendChild(tbodyElement);
	
	document.getElementById(idAnchor).appendChild(tableElement);
}

// Closes CatalogResultlist
function closeDetailsResultListEntry(idAnchor) {
	if (document.getElementById(idAnchor)) {
		dwr.util.setValue(idAnchor, '');
	}
}


function expandImageResultListDetails() {
	if (document.getElementById("idImageResultlistDetails") != null ) {
		divElement=document.getElementById("idImageResultlistDetails");
		divElement.removeAttribute("style");
		document.getElementById("idImageResultlistDetails").style.backgroundColor='#ffffff';
		document.getElementById("idImageResultlistDetails").style.zIndex='100';		
		var width=document.getElementById("idImageResultlistDetails").style.width;
		var height=document.getElementById("idImageResultlistDetails").style.height;		
		if (width<200) { document.getElementById("idImageResultlistDetails").style.width='200px'; }
		if (height<300) { document.getElementById("idImageResultlistDetails").style.height='300px'; }		
	}
}

function collapseImageResultListDetails() {
	if (document.getElementById("idImageResultlistDetails") != null ) {
		divElement=document.getElementById("idImageResultlistDetails");
		setStyle(divElement,"width:200px; height:300px; overflow:auto;");
	}
}


function createDeSEL(){
	var trElement = document.createElement("tr");
	var tdElement = document.createElement("td");
	var element = document.createElement("input");
	element.setAttribute("type","button");
	element.setAttribute("value",this.catalogLgKeys["selectall"]);
	element.className="resultlist";
	element.onclick=new Function("selectAll()");
	tdElement.appendChild(element);
	element = document.createElement("input");
	element.setAttribute("type","button");
	element.setAttribute("value",this.catalogLgKeys["deselectall"]);
	element.onclick=new Function("deselectAll()");
	element.className="resultlist";
	tdElement.appendChild(element);
	trElement.appendChild(tdElement);
	return trElement;
}
