/********************************************************************************************************/
/* DATEI: sitesearch.js                                                                                 */
/* DATUM: 31.08.2006                                                                                    */
/* AUTOR: Otto Aschenbrenner - nbsp                                                                     */
/* AUFGABE: Diese JavaScript-Bibliothek stellt alle Routinen zur Verfuegung, die benoetigt werden, um   */
/*          die Einstellungen des SiteSearch-Filterformulars zu verwalten.                              */
/*                                                                                                      */
/*          Die Bibliothek besteht aus oeffentlichen und privaten Funktionen. Die privaten Funktionen   */
/*          werden nur von dieser Bibliothek intern benoetigt und haben nach aussen hin keine besondere */
/*          Bedeutung, waehrend die oeffentlichen Funktionen zur Implementation der Suche benoetigt     */
/*          werden.                                                                                     */
/*                                                                                                      */
/********************************************************************************************************/

/* ==================================================================================================== */
/* PUBLIC FUNCTIONS FOR SITESEARCH-FILTERFORM                                                           */
/* ==================================================================================================== */

/*************************************************************************************/
/* FUNKTION: addFilter                                                               */
/* DATUM:    30.08.2006                                                              */
/* AUTOR:    Otto Aschenbrenner - nbsp                                               */
/* AUFGABE:  Fuegt einen Suchfilter zum Sitesearch-Filterformular hinzu              */
/*                                                                                   */
/*************************************************************************************/
/* PARAMETER: filtertype; String: Name des Filters; z.B. ssf_sort oder ssf_keyword   */
/*                                (Namenskonvention "ssf" steht fuer SiteSearchForm, */
/*                                sollte beibehalten werden, da die Verarbeitungs-   */
/*                                logik darauf aufbaut)                              */
/*            filtervalue; String: Wert, auf den der Filter gesetzt werden sollte.   */
/*                                 Falls der Filter auf keinen Wert gesetzt werden   */
/*                                 sollte, sollte er mit der Funktion clearFilter()  */
/*                                 entfernt werden.                                  */
/* RUECKGABE: statusflag; Boolean: Gibt "true" zurueck, wenn der Filter erfolgreich  */
/*                                 angelegt werden konnte oder "false" im Fehler-    */
/*                                 fall.                                             */
/*************************************************************************************/
function addFilter(filtertype, filtervalue)
{
	try
	{
		var ret_value = true; 
		var ssf = getSiteSearchForm(); 

		// Filtertypen werden Uppercase abgespeichert
		filtertype = filtertype.toUpperCase(); 

		if(ssf != null)
		{
			// Filterobjekt erzeugen
			var filterObj = document.createElement("input"); 
			filterObj.setAttribute("type", "hidden"); 
//			filterObj.setAttribute("type", "text"); 
			filterObj.setAttribute("name", filtertype); // Ohne dieses Attribut kann das neue Filter-Objekt mit dem Formular nicht versendet werden
			filterObj.setAttribute("id", filtertype); 
			filterObj.setAttribute("value", filtervalue); 
			// Neuen Filter zum Filterformular hinzufuegen
			ssf.appendChild(filterObj); 
		}
		else
		{
			// Filterformular konnte nicht gefunden werden
			ret_value = false; 
		}
		
		return(ret_value); 
	}
	catch(exception)
	{
		return(false); 
	}
}

/*************************************************************************************/
/* FUNKTION: clearFilter                                                             */
/* DATUM:    30.08.2006                                                              */
/* AUTOR:    Otto Aschenbrenner - nbsp                                               */
/* AUFGABE:  Entfernt einen Suchfilter aus dem SiteSearch-Filterformular             */
/*                                                                                   */
/*************************************************************************************/
/* PARAMETER: filtertype; String: Name des Filters; z.B. ssf_sort oder ssf_keyword.  */
/*                                Wenn als Filtertyp "ALL" uebergeben wurde, werden  */
/*                                alle bisher gesetzten Suchfilter geloescht.        */
/*            filtervalue; String, optional: Wert des Filters, der geloescht werden  */
/*                                   soll.                                           */
/*                                   Falls dieser Parameter nicht uebergeben wurde,  */
/*                                   werden alle Filtereinschraenkungen des ueber-   */
/*                                   gebenen Filtertyps entfernt.                    */
/* RUECKGABE: statusflag; Boolean: Gibt "true" zurueck, wenn der Filter erfolgreich  */
/*                                 entfernt werden konnte oder "false" im Fehler-    */
/*                                 fall.                                             */
/*************************************************************************************/
function clearFilter(filtertype)
{
	try
	{
		var ret_value = true; 
		var ssf = getSiteSearchForm(); 
		var arrFilterObj = new Array(); 
		
		// Filtertypen werden Uppercase abgespeichert
		filtertype = filtertype.toUpperCase(); 
		
		if(ssf == null)
		{
			// Fehlerhaft abbrechen, falls das SiteSearch-Filterformular nicht ausgelesen werden konnte
			ret_value = false; 
		}
		else
		{
			var tmp_arrFilterObj = null; 
			
			// Auslesen der zu bearbeitenden Filtereinschraenkungen
			if(filtertype.toUpperCase() == "ALL")
			{
				// Alle gesetzten Filtereinschraenkungen auslesen
				tmp_arrFilterObj = ssf.getElementsByTagName("input"); 
			}
			else
			{
				// Filtereinschraenkungen des uebergebenen Typs auslesen
				var tmp_arrFilterObj = document.getElementsByName(filtertype); 
			}
			
			// Ueberpruefen, ob nur Filter mit einem bestimmten Wert geloescht werden soll
			if(arguments.length > 1)
			{
				// Filterwert wurde uebergeben
				filtervalue = arguments[1]; 
				arrFilterObj = new Array(); 
				for(i=0; i < tmp_arrFilterObj.length; i++)
				{
					if(tmp_arrFilterObj[i].getAttribute("value") == filtervalue)
						arrFilterObj.push(tmp_arrFilterObj[i]); 
				}
				
			}
			else
			{
				// Alle bisher ausgelesenen Filter in Loesch-Array uebernehmen (by value)
				for(i=0; i < tmp_arrFilterObj.length; i++)
					arrFilterObj.push(tmp_arrFilterObj[i]); 
			}
			
			// Ausgelesene Filter loeschen
			if(arrFilterObj.length != 0)
			{
				for(i=0; i < arrFilterObj.length; i++)
				{
					ssf.removeChild(arrFilterObj[i]); 
				}
			}
			
		}
		return(ret_value); 
	}
	catch(exception)
	{
		return(false); 
	}
}

/*************************************************************************************/
/* FUNKTION: getFilter                                                               */
/* DATUM:    16.11.2006                                                              */
/* AUTOR:    Otto Aschenbrenner - nbsp                                               */
/* AUFGABE:  Gibt die Filtereinstellungen des angegebenen Filtertypen als Array      */
/*           zurueck.                                                                */
/*                                                                                   */
/*************************************************************************************/
/* PARAMETER: filtertype; String: Name des Filters, der ausgelesen werden soll,      */
/*                                z.B. ssf_sort oder ssf_contenttype.                */
/* RUECKGABE: arrFilterValues; Array: Array mit den derzeit gesetzten Filtern        */
/*                                    des uebergebenen Filtertypen.                  */
/*                                    Falls der angegebene Filtertyp derzeit         */
/*                                    nicht gesetzt ist, wird ein leeres Array       */
/*                                    zurueckgegeben.                                */
/*************************************************************************************/
function getFilter(filtertype)
{
	var arrFilterValues = new Array(); 
	try
	{
		var ssf = getSiteSearchForm(); 

		// Filtertypen werden Uppercase abgespeichert
		filtertype = filtertype.toUpperCase(); 

		if(ssf != null)
		{
			// Auslesen aller vorhandenen Filtersettings
			tmp_arrFilterObj = ssf.getElementsByTagName("input"); 
			for(i=0; i < tmp_arrFilterObj.length; i++)
			{
				var currName = tmp_arrFilterObj[i].getAttribute("name"); 
				if(currName == filtertype)
				{
					var currValue = tmp_arrFilterObj[i].value; 
					arrFilterValues.push(currValue); 
				}
			}
		}
		else
		{
			// Filterformular konnte nicht gefunden werden
		}
		
		return(arrFilterValues); 
	}
	catch(exception)
	{
		return(arrFilterValues); 
	}
}

/*************************************************************************************/
/* FUNKTION: submitSiteSearch                                                        */
/* DATUM:    30.08.2006                                                              */
/* AUTOR:    Otto Aschenbrenner - nbsp                                               */
/* AUFGABE:  Sendet das aktuelle Filterformular an das SiteSearch-Suchtemplate ab.   */
/*                                                                                   */
/*************************************************************************************/
/* PARAMETER: destinationurl; String, optional: Ziel-URL, an die das Filterformular  */
/*                                  gesendet werden soll.                            */
/*                                  Defaultwert = aktuelle URL                       */
/* RUECKGABE: statusflag; Boolean: True = Suchfilter-Formular konnte erfolgreich     */
/*                                        abgeschickt werden                         */
/*                                 False = Ein Fehler ist aufgetreten                */
/*************************************************************************************/
function submitSiteSearch()
{
	try
	{
		var ret_value = true; 
		
		// Auslesen Ziel-URL (falls uebergeben)
		var destinationurl = ""; 
		if(arguments.length > 0)
			destinationurl = arguments[0]; 
		
		var sitesearchform = getSiteSearchForm(); 
		
		if(sitesearchform != null)
		{
			// Inhalt der einzelnen Suchfilter-Felder mit Split-Zeichenfolge kennzeichen
			// (wird benoetigt, um die Inhalte der einzelnen Filterfelder im Nachhinein
			// noch bestimmen zu koennen)
			arrFilterObj = sitesearchform.getElementsByTagName("input"); 
			for(i=0; i < arrFilterObj.length; i++)
			{
				var currValue = arrFilterObj[i].value; 
				var splitFieldsInserted = true; 
				if(currValue.length < 6)
				{
					// Split-Zeichenkette "|<|" und "|>|" nicht im aktuellen Feldwert vorhanden
					splitFieldsInserted = false; 
				}
				else
				{
					var tmp_startstring = currValue.substring(0, 3); 
					var tmp_endstring = currValue.substring(eval(currValue.length - 3), currValue.length); 
					if(tmp_startstring != "|<|" || tmp_endstring != "|>|")
						splitFieldsInserted = false; 
				}
				
				if(splitFieldsInserted == false)
				{
					currValue = "|<|" + currValue + "|>|"; 
					arrFilterObj[i].value = currValue; 
				}
			}
			
			// Ziel-URL des Formulars anpassen, falls dieser Wert uebergeben wurde
			if(destinationurl.length > 0)
				sitesearchform.action = destinationurl; 

			// Absenden der Suchfilter
			sitesearchform.submit(); 
		}
		else
			ret_value = false; 
	
		return(ret_value); 
	} 
	catch(exception)
	{
		return(false); 
	}
}

/*************************************************************************************/
/* FUNKTION: deploySiteSearchForm                                                    */
/* DATUM:    18.01.2007                                                              */
/* AUTOR:    Otto Aschenbrenner - nbsp                                               */
/* AUFGABE:  Legt im aktuellen HTML-Dokument ein SiteSearch-Filterformular an, falls */
/*           noch keines existiert.                                                  */
/*           Diese Funktion wird in erster Linie fuer SiteSearch-Filter              */
/*           Implementationen verwendet, die ausschliesslich auf JavaScript-         */
/*           Technologie beruhen (z.B. AJAX oder XML Data Islands).                  */
/*           Das hier erzeugte SiteSearch-Filterformular sollte nicht an eine Folge- */
/*           seite gesendet werden, da dadurch die Filtereinstellungen verloren      */
/*           gehen wuerden. Fuer eine serverseitige Verarbeitung der Suchfilter      */
/*           muss das Filterformular anhand der Komponente "searchfilter.cfc"        */
/*           generiert werden.                                                       */
/*                                                                                   */
/*************************************************************************************/
/* PARAMETER: Keine                                                                  */
/* RUECKGABE: statusflag; Boolean: True = Suchfilter-Formular konnte erfolgreich     */
/*                                        erstellt werden oder war bereits vorhanden */
/*                                 False = Ein Fehler ist aufgetreten                */
/*************************************************************************************/
function deploySiteSearchForm()
{
	try
	{
		var ret_value = true; 
		
		// Sourcecode fuer SiteSearch-Formular zusammensetzen
		var sFormCode = '<form name="sitesearch_filterform" method="post" onSubmit="return(false)"></form>'; 
		var bodynode = document.getElementsByTagName("body"); 
		if(bodynode.length == 1)
			bodynode = bodynode[0]; 
		else
			return(false); 
		
		// Existiert bereits ein SiteSearch-Formular? 
		if(getSiteSearchForm() == null)
		{
			// Noch kein SiteSearch-Formular vorhanden =>
			// Neues SiteSearch-Formular ohne Filtersettings anlegen
/* OA - 19.01.2007: Deprecated; Funktioniert nicht auf Mac-Browsern
			var formObj = document.createElement(sFormCode); 
			bodynode.appendChild(formObj); 
*/
			bodynode.innerHTML += sFormCode; 
		}
		
		return(ret_value); 
	}
	catch(exception)
	{
		return(false); 
	}
}


/* ==================================================================================================== */
/* PRIVATE FUNCTIONS FOR SITESEARCH-FILTERFORM                                                          */
/* ==================================================================================================== */

/*************************************************************************************/
/* FUNKTION: getSiteSearchForm                                                       */
/* DATUM:    30.08.2006                                                              */
/* AUTOR:    Otto Aschenbrenner - nbsp                                               */
/* AUFGABE:  Gibt eine Referenz auf das SiteSearch-Filterformular zurueck.           */
/*                                                                                   */
/*************************************************************************************/
/* PARAMETER: Keine                                                                  */
/* RUECKGABE: sitesearchform; HTML-Objekt: Suchfilter-Formular als HTML-Objekt oder  */
/*                               NULL, falls das Objekt nicht ausgelesen werden      */
/*                               konnte.                                             */
/*************************************************************************************/
function getSiteSearchForm()
{
	try
	{
		var sitesearchform = document.getElementsByName("sitesearch_filterform"); 
		if(sitesearchform.length == 1)
		{
			// Filterformular konnte gefunden werden
			sitesearchform = sitesearchform[0]; 
		}
		else
		{
			// Filterformular konnte nicht gefunden werden
			sitesearchform = null; 
		}
		return(sitesearchform); 
	}
	catch(exception)
	{
		return(null); 
	}
}

