/*
	Suchfunktionen für verschiedene Teilebereiche
	benötig pics.windows !!
	
	20080616gc - encodeURI geändert auf encodeURIComponent
	20080725gc - bug bei searchShow behoben
	
*/

// Constructor, falls das PICS-Framework nicht geladen ist
	if (typeof pics == 'undefined') pics = {};


	var gScrollPos=0;
	
//	==================== 	USERSUCHE 	==================== 

	var search_Element=null;			// Element, in dessen Zeile die Änderung gesetzt werden soll
	var search_Dest='';					// Ziel für Ergebnis
	var search_DestText='';				// Ziel für Text des Ergebnis
	var search_Params='';				// Parameter für die Suche
	var search_Size=5;					// Anzahl der Datensätze für Ergebnis
	var search_Array=new Array();		// Zwischenspeichern für Suchergebnis
	var search_oWin=null;				// Suchfenster
	var search_Running=false;			// läuft die Suche
	var search_callBack=null;			// alternativer Callback-Handler für Suche


	/*
	 *	pics.searchShow(pElement, pSearchParams, pSearchDest, pSearchDestText, pRowOnly, pRecords)
	 *		startet die Suche
 	 *	@param	object	pElement		Element, von dem aus die Suche startet
 	 *	@param	string	pSearchParams	zusätzliche Parameter für Suche
 	 *	@param	string	pSearchDest		Feld, in das die ID geschrieben wird
 	 *	@param	string	pSearchDestText	HTML-Element für die Ausgabe der Bezeichnung
 	 *	@param	string	pSearchTitle	Titel für das Suchfenster
 	 *	@param	bool	pRowOnly		Rückgabe nur in der aktuellen Zeile
 	 *	@param	int		pRecords		Anzahl der zurzuliefernden Datensätze
 	 *	@param	string	pHTML			alternativer HTML-Code für Formular
	 */
	pics.searchShow = function(pElement, pSearchParams, pSearchDest, pSearchDestText, pSearchTitle, pRowOnly, pRecords, pHTML)
	{
		if (typeof pElement == 'undefined') 		return false;
		if (typeof pSearchParams == 'undefined') 	return false;
		if (typeof pSearchDest == 'undefined') 		return false;
		if (typeof pSearchDestText == 'undefined') 	pSearchDestText='';
		if (typeof pSearchTitle == 'undefined') 	pSearchTitle='Suche';
		if (typeof pRowOnly == 'undefined') 		pRowOnly=false;
		if (typeof pRecords == 'undefined') 		pRecords=5;
		if (typeof pHTML == 'undefined') 			pHTML='';

		// Position ermitteln
		lX=pics.getElementX(pElement);
		lY=pics.getElementY(pElement);
		
		gScrollPos=pics.getPageScrollY();
		// Fenster nur neu erstellen, wenn die Parameter anders als bei der letzten
		if (search_Params!=pSearchParams)
		{
			// Formular bauen
			if (pHTML=='')
			{
				lHtml= '<form id="formPicsSearch">\n';
				lHtml+='<table width="400" cellspacing="0" cellpadding="0" border="0" id="tabPicsSearch"><tr>\n';
				lHtml+='<td style="padding:2px 5px;"><input type="Text" name="fSearchCode" class="formText" style="width:80px;" onchange="pics.searchUpdate(event)" title="Code eingeben" tabindex="1201"></td>\n';
				lHtml+='<td style="padding:2px 5px;"><input type="Text" name="fSearchText" class="formText" style="width:250px;" onkeyup="pics.searchUpdate(event)" title="Name eingeben" tabindex="1202"></td>\n';
				lHtml+='<td style="padding:2px 5px;"><a onclick="pics.searchStart()" title="Suche starten" class="linkCursor">&raquo;GO</a></td>\n';
				lHtml+='</tr><tr><td id="tabPicsSearchResult" colspan="3" style="padding:2px 5px;">&nbsp;</td></tr></table></form>';
			}
			else
			{
				lHtml=pHtml;
			}	
			// Window-Objekt erstellen
			if (search_oWin==null)
			{
				search_oWin=pics.Windows.addWindow("winSearch");
				search_oWin.destroyOnClose=false;
			}
			else
			{
				search_oWin.destroy();
			}
			// Position um Scrollposition anpassen
			lY-=pics.getPageScrollY()
			lX-=pics.getPageScrollX()
			// Fenster anzeigen
			search_oWin.create(lX,lY,400,0,lHtml,pSearchTitle,false);
		}
		else
		{
			search_oWin.move(lX,lY);
			search_oWin.show();
		}

		search_Element=pElement;
		search_Dest=pSearchDest;
		search_DestText=pSearchDestText;
		search_Params=pSearchParams;
		if (pRowOnly==false) search_Element=null;
		search_Size=pRecords;

		// Comboboxen im IE ausblenden
		if (pics.isIE) pics.disableElements('select');
		
		// und wieder zurückscrollen
		window.scrollTo(0,gScrollPos);
	} // pics.searchShow

	/*
	 *	pics.searchStart(pRecords)
	 *		Update-Handler für die Felder, startet bei Bedarf die suche
 	 *	@param	object	pEvent	event-Referenz
	 */
	pics.searchStart = function(pRecords)
	{
		if (typeof pRecords == 'undefined') pRecords=search_Size;

		// wenn noch keine Suche läuft
		if (!search_Running)
		{
			search_Running=true;
			
			// Scrollposition merken
			gScrollPos=pics.getPageScrollY();
			
			// Werte aus dem Formular holen
			oForm=document.getElementById('formPicsSearch');
			lCode=oForm.elements['fSearchCode'].value;
			lText=oForm.elements['fSearchText'].value;

			// Suchinfo ausgeben
			pics.setHTML('tabPicsSearchResult','Daten werden geladen ...');
		
			// Suche starten search_Params
			lUrl='getdata.php?mode='+search_Params+'&format=csv&code='+encodeURIComponent(lCode)+'&text='+encodeURIComponent(lText)+'&records='+pRecords;
			if (!pics.Ajax.request(lUrl, 'pics.searchFinish')) alert("Fehler bei Adressuche!");
		}
	} // pics.searchStart
	
	/*
	 *	pics.searchUpdate(pEvent)
	 *		Update-Handler für die Felder, startet bei Bedarf die suche
 	 *	@param	object	pEvent	event-Referenz
	 */
	pics.searchUpdate = function(pEvent)
	{
		// Werte aus den Feldern holen
		oForm=document.getElementById('formPicsSearch');
		lCode=oForm.elements['fSearchCode'].value;
		lText=oForm.elements['fSearchText'].value;
		
		lKey= pEvent.which || pEvent.keyCode;
		
		// Suchen, wen mind 4 Buchstaben oder 2 Nummern
		if ( (lText.length>3) || (lCode.length>2) || (lKey==13) ) pics.searchStart();
	} // pics.searchUpdate
	
	/*
	 *	pics.searchFinish(pCSV)
	 *		Verarbeitet das Ergebnis der Adressuche
 	 *	@param	string	pCSV		CSV-Ergebnis
	 */
	pics.searchFinish = function(pCSV)
	{
		// Daten aufbereiten und zwischenspeichern
		lHtml='<table width="380" cellspacing="0" cellpadding="0" border="0">';
		aLines=pCSV.split('\n');
		lCount=0;
		search_Array=new Array();
		for (i=0;i<aLines.length;i++)
		{
			// UID, UCode, UName, UInfo1, UInfo2, UInfo3, UFlags
			if (aLines[i]!='')
			{
				// Spalten aufsplitten und zwischenspeichern
				aCols=aLines[i].split(';');
				search_Array[lCount]=aCols;
				lTitle='';
				lHtml+='<tr class="tableRow" title="'+lTitle+'" onclick="pics.searchSet('+lCount+')"><td class="linkCursor">'+aCols[1]+'</td><td class="linkCursor">'+aCols[2]+'</td></tr>';
				lCount++;
			}
		}
		lHtml+='</table>';
		// wenn genau 5, dann den Button "Weitere anzeigen" anfügen
		if (lCount==5) lHtml+='<a onclick="pics.searchStart(50)" title="Weitere Treffer anzeigen..." class="linkCursor">&raquo; Weitere Treffer anzeigen...</a><br>'
		pics.setHTML('tabPicsSearchResult',lHtml);
		// und wieder zurückscrollen
		window.scrollTo(0,gScrollPos);
		// search wieder freigeben
		search_Running=false;
				
	} // pics.searchFinish
	
	
	/*
	 *	pics.searchSet(pPos)
	 *		setzt den ausgewählten Datensatz
 	 *	@param	int		pPos		Position im Array
	 */
	pics.searchSet = function(pPos)
	{
		aCols=search_Array[pPos];
		if (search_Element==null)
		{
			// als erstes setzen wir die ID in das Feld
			oFeld=document.getElementById(search_Dest);
			if (oFeld) oFeld.value=aCols[0];
			// eventuell gibt es auch eine kurzbezeichnung zum anzeigen
			pics.setHTML(search_DestText,aCols[2]);
		}	
		else
		{
			oRow=pics.findParentID(search_Element, "TR");
			oFeld=pics.findElementsById(oRow, search_Dest);
			if (oFeld) oFeld.value=aCols[0];
			// und dann zeigen wir die Adresse noch an
			if (search_DestText!='')
			{
				oElement=pics.findElementsById(oRow, search_DestText);
				if (oElement) oElement.innerHTML=aCols[2];
			} // if
		} // else

		// gibt es einen Callback?
		if (search_callBack) eval(search_callBack+"("+pPos+")");
		
		// Callback-reseten
		search_callBack=null;

		// und ausblenden
		pics.searchHide();
	} // pics.searchSet
	
	/*
	 *	pics.searchHide()
	 *		blendet das suchformular aus
 	 *	@param	int		pPos		Position im Array
	 */
	pics.searchHide = function()
	{
		search_oWin.hide();
		// eventuell ausgeblendete Comboboxen im IE wieder einblenden
		if (pics.isIE) pics.enableElements('select');
	} // pics.searchHide
	

		
	
