/*
 * <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 getSearchIndex( searchField, idSearchTerm, filter, action, pageIndexPrevious, pageIndexNext, languageKey, selectedDbs) {
	var searchTerm = "";
	if (filter != "") {
		searchTerm = filter;
	}
	else {
		if ( document.getElementById ) { 
			searchTerm = document.getElementById(idSearchTerm).value;
			searchTerm = trim( fixText(searchTerm));
		}
	}
	if (trim( action ) == "") { action = "next"; }
	if (trim( searchField ) != "") {	
		DWRUtil.useLoadingMessage('Connecting...');	
		useLoadingImage("resources/appl_images/loadingImage24x24.gif","idCatalogSearchIndexPosition"); // CHECK THIS		
		CatalogSearchIndex.getSearchIndex( searchField, searchTerm, action, pageIndexPrevious, pageIndexNext, languageKey, selectedDbs, 
			{ 	callback:function(CatalogIndexTO) { fillSearchIndexTable( CatalogIndexTO, searchField, idSearchTerm, filter, action, languageKey, selectedDbs ); }, 
				errorHandler:function(message) { errorHandler('searchindex',message); }, 
				timeout:0
			} 
		);
	}
}

// Error Handling
function errorHandlerCatalogSearchIndex() {

	alert ("Connection Timeout");
	document.formCatalogSearch.submit(); // Submit Formular	
}


function fillSearchIndexTable( CatalogIndexTO, searchField, idSearchTerm, filter, action, languageKey, selectedDbs ) {
	var catalogIndex = CatalogIndexTO;
	var setIndexEntries = catalogIndex.catalogIndexEntries; 	// List of Entries 
	var mapPageIndexNext = catalogIndex.pageIndexNext;			// Map containing index of startRecord for each Database if User clicks on next-button 
	var listPageIndexPrevious = catalogIndex.pageIndexPrevious; // Map containing index of startRecord for each Database if User clicks on previous-button
	var entriesPerPage = catalogIndex.entriesPerPage;

	var catalogIndexEntry;	
	var tableElement, tbodyElement, trElement, tdElement, textElement, hrElement, aElement, buttonElement;
	var onClickEvent = ""
	
	var indexesPrevious = serialize(listPageIndexPrevious);	
	var indexesNext	= serialize(mapPageIndexNext);
		
	// Get SearchTerm for Filtering
	var searchTerm = "";	
	if (filter != "") {
		searchTerm = filter;
	}
	else {
		if ( document.getElementById ) { 
			searchTerm = document.getElementById(idSearchTerm).value;
			searchTerm = trim( fixText(searchTerm));
		}
	}
		
	if ( !document.getElementById || !document.createElement ) { return; }
	// Set Attributes for Anchor (<div>)
	var searchIndexDivElement = document.getElementById('idCatalogSearchIndexPosition');
	if (document.all) { // If Internet Explorer do not use position:absolute 
		setStyle(searchIndexDivElement,"position:relative; background-color:#f9eed4;");
	} 
	else {
		setStyle(searchIndexDivElement,"position:absolute; background-color:#f9eed4;");		
	}

	// Clear Table if exists
	if ( document.getElementById('idTableCatalogSearchIndex') != null ) {
		document.getElementById('idCatalogSearchIndexPosition').removeChild(document.getElementById('idTableCatalogSearchIndex'));
	}
	// Create Table for SearchIndex
	tableElement = document.createElement("table");
	tableElement.setAttribute("id","idTableCatalogSearchIndex");
	tableElement.className="searchIndex";
	tbodyElement = document.createElement("tbody");
	// First Row (HeadLine)
	trElement = document.createElement("tr");		
	tdElement = document.createElement("td");
	tdElement.className="searchIndex_topLeft";	
	textElement = document.createTextNode(this.advancedMessages['searchIndex']);
	tdElement.appendChild(textElement);
	trElement.appendChild(tdElement);		
	tdElement = document.createElement("td");
	tdElement.className="searchIndex_topRight";
	// onClick -> close Window
	buttonElement = document.createElement("input");
	buttonElement.setAttribute("type","button");	
	buttonElement.setAttribute("value","X");
	buttonElement.className = "searchIndex_close";
	buttonElement.onclick = new Function("closeSearchIndex()");
	tdElement.appendChild(buttonElement);		
	trElement.appendChild(tdElement);		
	tbodyElement.appendChild(trElement);
	// Second Row (empty)
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("colSpan","2");
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);	
	// Third Row (Filter)
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.setAttribute("colSpan","2");
	tdElement.className="searchIndex";
	if (searchTerm == "" || filter != "" ) {
		if (searchField == "dc.date") {
			for (var i = 10; i <= 20; i++) { 
				startidx=10; 
				aElement = document.createElement("a");
				aElement.className="searchIndex_filter";				
				var term = i.toString()+"00-"+i.toString()+"99";						
				onClickEvent = "javascript:getSearchIndex('"+searchField+"','"+idSearchTerm+"','"+term+"','next',[],{},'"+languageKey+"','"+selectedDatabases+"')";			
				aElement.href = onClickEvent;
				if (filter.substring(0,2) == i.toString()) {
					setStyle(aElement,"color:red; font-weight:bold;");
				}
				textElement = document.createTextNode(i+"xx ");
				aElement.appendChild(textElement);
				tdElement.appendChild(aElement);	
			}		
		}	
		else {
			for (var i = 65; i <= 90; i++) { 
				startidx=10; 
				aElement = document.createElement("a");
				aElement.className="searchIndex_filter";				
				onClickEvent = "javascript:getSearchIndex('"+searchField+"','"+idSearchTerm+"','"+String.fromCharCode(i)+"','next',[],{},'"+languageKey+"','"+selectedDatabases+"')";			
				aElement.href = onClickEvent;
				if (filter == String.fromCharCode(i)) {					
					setStyle(aElement,"color:red; font-weight:bold;");
				}
				textElement = document.createTextNode(String.fromCharCode(i)+" ");
				aElement.appendChild(textElement);
				tdElement.appendChild(aElement);	
			}
		}			
	}
	else {
		textElement = document.createTextNode(cutText(this.advancedMessages['filter'],30)+" '"+searchTerm+"*'");
		tdElement.appendChild(textElement);
	}
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);					
	// Fourth Row (empty)
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("colSpan","2");
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);	
	// Fifth Row (Navigation)
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("align","left");	
	// onClick -> get previous page
	if ( listPageIndexPrevious.length > 1 ) {
		onClickEvent = "javascript:getSearchIndex('"+searchField+"','"+idSearchTerm+"','"+filter+"','previous',"+indexesPrevious+","+indexesNext+",'"+languageKey+"','"+selectedDbs+"' )";
		buttonElement = document.createElement("input");
		buttonElement.setAttribute("type","button");
		buttonElement.setAttribute("value",this.advancedMessages['previous']);
		buttonElement.className = "searchIndex_button";		
		buttonElement.onclick = new Function (onClickEvent);
		tdElement.appendChild(buttonElement);
	}
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("align","right");					
	if ( setIndexEntries.length >= entriesPerPage ) {
		onClickEvent = "javascript:getSearchIndex('"+searchField+"','"+idSearchTerm+"','"+filter+"','next',"+indexesPrevious+","+indexesNext+",'"+languageKey+"','"+selectedDbs+"' )";	
		buttonElement = document.createElement("input");
		buttonElement.setAttribute("type","button");
		buttonElement.setAttribute("value",this.advancedMessages['next']);
		buttonElement.className = "searchIndex_button";		
		buttonElement.onclick = new Function(onClickEvent);
		tdElement.appendChild(buttonElement);
	}
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
	// Sixth Row (	horizontal line )
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("colSpan","2");	
	hrElement = document.createElement("hr");
	tdElement.appendChild(hrElement);
	trElement.appendChild(tdElement);	
	tbodyElement.appendChild(trElement);
	// Rows for the CatalogSearchIndex
    for (var i = 0; i < setIndexEntries.length; i++) {
      	catalogIndexEntry = setIndexEntries[i];
 		trElement = document.createElement("tr");	
		tdElement = document.createElement("td");
		tdElement.className="searchIndex_content";
		//setStyle(tdElement,"text-align:left;");							
		tdElement.setAttribute("colSpan","2");
		textElement = document.createTextNode( cutText( catalogIndexEntry.name, 50 )+" ("+catalogIndexEntry.numberOfNames+")");	
		// onClick -> Copy Index-Entry to Field 'searchTerm' and close Window
		catalogIndexEntry.name = catalogIndexEntry.name.replace(/'/, "\\'");
		aElement = document.createElement("a");
		aElement.className="searchIndex_content";
		aElement.href = "javascript:setSearchIndexValue('"+idSearchTerm+"','"+trim(catalogIndexEntry.name)+"')";
		aElement.setAttribute("title",catalogIndexEntry.name);
		aElement.appendChild(textElement);
		tdElement.appendChild(aElement);
		trElement.appendChild(tdElement);
		tbodyElement.appendChild(trElement);	           
    }    
    // Second to last Row ( horizontal line )
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("colSpan","2");
	hrElement = document.createElement("hr");
	tdElement.appendChild(hrElement);	
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);	
	// Last Row (Navigation)
	trElement = document.createElement("tr");	
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("align","left");	
	// onClick -> get previous page
	if ( listPageIndexPrevious.length > 1 ) {	
		onClickEvent = "javascript:getSearchIndex('"+searchField+"','"+idSearchTerm+"','"+filter+"','previous',"+indexesPrevious+","+indexesNext+",'"+languageKey+"','"+selectedDbs+"' )";
		buttonElement = document.createElement("input");
		buttonElement.setAttribute("type","button");
		buttonElement.setAttribute("value",this.advancedMessages['previous']);
		buttonElement.className = "searchIndex_button";		
		buttonElement.onclick = new Function (onClickEvent);
		tdElement.appendChild(buttonElement);
	} 
	trElement.appendChild(tdElement);
	tdElement = document.createElement("td");
	tdElement.className="searchIndex";
	tdElement.setAttribute("align","right");					
	// onClick -> get next page
	if ( setIndexEntries.length >= entriesPerPage ) {
		onClickEvent = "javascript:getSearchIndex('"+searchField+"','"+idSearchTerm+"','"+filter+"','next',"+indexesPrevious+","+indexesNext+",'"+languageKey+"','"+selectedDbs+"' )";	
		buttonElement = document.createElement("input");
		buttonElement.setAttribute("type","button");
		buttonElement.setAttribute("value",this.advancedMessages['next']);
		buttonElement.className = "searchIndex_button";		
		buttonElement.onclick = new Function(onClickEvent);
		tdElement.appendChild(buttonElement);
	}
	trElement.appendChild(tdElement);
	tbodyElement.appendChild(trElement);
 	tableElement.appendChild(tbodyElement);
 	
 	searchIndexDivElement.appendChild(tableElement);
	//dwr.util.setValue('idCatalogSearchIndexPosition', tableElement);
}

// Removes SearchIndex-Table if exists
function closeSearchIndex() {
	if ( document.getElementById('idCatalogSearchIndexPosition') != null && document.getElementById('idTableCatalogSearchIndex') != null ) {
		document.getElementById('idCatalogSearchIndexPosition').removeChild(document.getElementById('idTableCatalogSearchIndex'));
	}
}

// Copies SearchIndexEntry to advanced Inputfield 
function setSearchIndexValue( idSearchTerm, entryName ) {
	if ( document.getElementById('idCatalogSearchIndexPosition') != null && document.getElementById('idTableCatalogSearchIndex') != null && document.getElementById(idSearchTerm)!= null) {
		document.getElementById(idSearchTerm).value = entryName;
		document.getElementById('idCatalogSearchIndexPosition').removeChild(document.getElementById('idTableCatalogSearchIndex'));
	}			
}