
/* --- Suche ----------- Lexika CD --------*/
/*                                         */ 
/* Projekt: PAETEC-DUDEN, Schuelerlexikon  */ 
/* Autor: Maurice Karg					   */
/* Kontakt: karg@helliwood.de         	   */
/* Datei: search.js                    	   */
/* ------------------- www.helliwood.de ---*/

/*
var myHead = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Suche</title>' +
			 '<link href="../styles/main.css" rel="stylesheet" type="text/css">'+
			 '<script language="JavaScript" type="text/javascript" src="../scripts/allgem.js"></script>'+
			 '<body class="listBody" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0" scroll="yes">';

var myFoot = '</body></html>';

*/
function str_replace( searchString, replaceString, sourceString ) {
	
	if ((sourceString == null) || (searchString == null))           { return null; }
    if ((sourceString.length == 0) || (searchString.length == 0))   { return sourceString; }
	
	// Kein replaceString ?
	if ((replaceString == null) || (replaceString.length == 0))    { replaceString = ""; }
	
	var LaengesearchString = searchString.length;
	var LaengereplaceString = replaceString.length;
	var Pos = sourceString.indexOf(searchString, 0);
	
	while (Pos >= 0) {
		sourceString = sourceString.substring(0, Pos) + replaceString + sourceString.substring(Pos + LaengesearchString);
		Pos = sourceString.indexOf(searchString, Pos + LaengereplaceString);
	}
	
	return sourceString;
	
}

function MyConvert(myInput)
{
	if(navigator.userAgent.indexOf("Mac")!= -1)
	{
		/* apple */   
		if (navigator.userAgent.indexOf("MSIE") == -1)
		{
			/* Netscape */
			myInput = str_replace("%80", "&Auml;", myInput );
			myInput = str_replace("%8A", "&auml;", myInput );
			myInput = str_replace("%85", "&Ouml;", myInput );
			myInput = str_replace("%9A", "&ouml;", myInput );
			myInput = str_replace("%86", "&Uuml;", myInput );
			myInput = str_replace("%9F", "&uuml;", myInput );
			myInput = str_replace("%A7", "&szlig;", myInput );
		
		} else{

			/* MSIE */
			myInput = str_replace("%C4", "&Auml;", myInput );
			myInput = str_replace("%uFFC4", "&Auml;", myInput );

			myInput = str_replace("%E4", "&auml;", myInput );
			myInput = str_replace("%uFFE4", "&auml;", myInput );

			myInput = str_replace("%D6", "&Ouml;", myInput );
			myInput = str_replace("%uFFD6", "&Ouml;", myInput );

			myInput = str_replace("%F6", "&ouml;", myInput );
			myInput = str_replace("%uFFF6", "&ouml;", myInput );   
			
			myInput = str_replace("%DC", "&Uuml;", myInput );
			myInput = str_replace("%uFFDC", "&Uuml;", myInput );
			
			myInput = str_replace("%FC", "&uuml;", myInput );  
			myInput = str_replace("%uFFFC", "&uuml;", myInput );

			myInput = str_replace("%DF", "&szlig;", myInput );
			myInput = str_replace("%uFFDF", "&szlig;", myInput );
		}
	
	} else {
	
		/* alle anderen */
		myInput = str_replace("%C4", "&Auml;", myInput );
		myInput = str_replace("%E4", "&auml;", myInput );
		myInput = str_replace("%D6", "&Ouml;", myInput );
		myInput = str_replace("%F6", "&ouml;", myInput );
		myInput = str_replace("%DC", "&Uuml;", myInput );
		myInput = str_replace("%FC", "&uuml;", myInput );
		myInput = str_replace("%DF", "&szlig;", myInput );
	}
	
	return myInput;

}

function getSearchStrings( searchString ) {
	
	var searchStrings = new Array();
	
	searchStrings = searchString.split(" ");
	
	var extendedSearchString = new Array();
	
	var keys = 0;
	
	for( var i = 0; i < searchStrings.length; i	++ ) {
		
		searchStrings[i] = str_replace( " ", "", searchStrings[i] );
		
		if( searchStrings[i].length > 0 ) {
		
			if( searchStrings[i].slice( 0, 1 ) == "+" ) {
				
				extendedSearchString[keys] = new Array( searchStrings[i].slice( 1, searchStrings[i].length ), '+' );
				keys++;
				
			}
			if( searchStrings[i].slice( 0, 1 ) == "-" ) {
				
				extendedSearchString[keys] = new Array( searchStrings[i].slice( 1, searchStrings[i].length ), '-' );
				keys++;
				
			}
			if( searchStrings[i].slice( 0, 1 ) != "-" && searchStrings[i].slice( 0, 1 ) != "+" ) {
				
				extendedSearchString[keys] = new Array( searchStrings[i], 'x' );
				keys++;
				
			}
		
		}
		
	}
	
	return extendedSearchString;
}


function getSearchResult( searchStrings ) {
	// Anzahl der gefundenen Container
	var res = 0;
	
	// Temporärer-Array der mit den gefunden Container gefüllt wird
	var searchTmpResult = new Array();
	
	// Array der mit den gefunden Containern gefüllt wird
	var searchResults = new Array();
	
	// Remove-Flag => falls Container entfernt werden muss
	var remove = false;
		
	// Muss ein bestimmtes Wort vorkommen?
	var plusSearch = false;
	
	// Wurde das bestimmte Wort gefunden?
	var plusSearchFind = false;
	
	// Ist ein Fehler aufgetreten?
	var error = false;
	
	// Durchläuft die Container
	for( var i = 0; i < content.length; i ++ ) 
	{
		
		// Containerinformationen
		containerKeywords 	= content[i][2];	// Array mit Keywords des aktuellen Containers
		//containerURL		= content[i][2];	// URL zum aktuellen Container
		containerName		= content[i][0];	// Name des aktuellen Containers
		//containerFullExists = content[i][5];	// Boolean ob ein Kurzcontainer oder Full.htm vorhanden
		containerID			= i;				// ID des aktuellen Containers
		
		// Temporäres Container Array
		searchTmpResult = new Array();
		
		// Durchläuft die eingegebenen Suchworte
		for( var n = 0; n < searchStrings.length; n ++ ) 
		{
			// Variablen zum Prüfen der Muss-Suchworte
			plusSearch = false;
			plusSearchFind = false;
			
			
			
			// Wenn Suchwort ein Muss-Suchwort => Flag setzen
			if( searchStrings[n][1] == "+" ) {
				plusSearch = true;
			}
			
			// Umlaute in Suchworten werden Formatiert
			var searchString = str_replace("ß","&szlig;",str_replace("ü","&uuml;",str_replace("ö","&ouml;",str_replace("ä","&auml;",searchStrings[n][0].toLowerCase()))));
			
			// Durchläuft die Keywords der Container 
			// und vergleicht diese mit den Suchworten
			for( var x = 0; x < containerKeywords.length; x ++ ) 
			{				
				
				// Suchwort enthalten?
				if( containerKeywords[x].toLowerCase().indexOf(searchString) >= 0 ) 
				{
					// Wenn nicht gewünschtes Suchwort gefunden => aussteigen
					if( searchStrings[n][1] == "-" ) 
					{
						remove = true;
						break;
					}
					
					// Suchwort highlighten
					var startPos = containerKeywords[x].toLowerCase().indexOf(searchString);
					var endPos	 = startPos+searchString.length;
					var tmpKeywordReplace = containerKeywords[x].slice(0,startPos) + '<span class="searchHighlight">'+containerKeywords[x].slice(startPos, endPos)+'</span>' + containerKeywords[x].slice(endPos,containerKeywords[x].length);
					
					// Wenn schon vorhanden dann Eintrag zum Ordnen erhöhen
					if( searchTmpResult.length > 0 ) 
					{
						
						// Priorität erhöhen
						searchTmpResult[0]++;
						
						// Suchwort hinzufügen (Prüfen ob full.htm vorhanden)
						searchTmpResult[2] += ', '+tmpKeywordReplace;
					} else { // Eintrag noch nicht vorhanden
						
						// TODO : richtigen werte für suchausgabe
						tmpText 		= containerName;
						tmpKeyword 		= tmpKeywordReplace;
						
						searchTmpResult = new Array( 1,tmpText , tmpKeyword ,  containerID);
						
					}
					
					// Muss-Suchwort ist vorhanden => Flasg setzen
					if( searchStrings[n][1] == "+" ) 
					{
						plusSearchFind = true;
					}
					
				}
			
			}
			
			// Wenn nicht gewünschtes Suchwort gefunden => aussteigen
			if( remove == true ) 
			{
				error = true;
				break;
			}	
			
			// Wenn das Suchwort im Titel vorkommt, Priorität erhöhen
			if( containerName.toLowerCase().indexOf(searchString) >= 0 ) 
			{
				searchTmpResult[0]+=5;
			}
			
			
			// Wenn Muss-Suche aber kein Resultat => Error
			if( plusSearch == true && plusSearchFind == false ) 
			{
				error = true;
				break;
			}		
			
		}
		
		// Suche erfolgreich und keine Fehler? Array erweitern!
		if( searchTmpResult.length > 0 && error == false && searchTmpResult[1] != undefined ) 
		{
			searchResults[res] = searchTmpResult;
			res++;
		}
		
		remove = false;
		error = false;

	}
	
	// Ergebnis nach Priorität ordnen
	searchResults.sort();
	searchResults.reverse();

	return searchResults;
}


function startSearch( searchString ) {
	
	var mySearchResults = new Array();
	var mySearchStrings = new Array();
	
	// Searchstring spliten und Suchart ermitteln (Plus-, Minus-Suche)
	
	mySearchStrings = getSearchStrings( searchString );

	
	// Suchengine ansteuern => Rückgabe Ergebnisse
	
	mySearchResults = getSearchResult( mySearchStrings );
	//mySearchResults = 'test';


	
	
	return mySearchResults;
}

