/*jsl:option explicit*/ /** * @fileoverview * Hilfsfunktionen, um die Eingaben zu überprüfen und die Abfrage direkt via JavaScript abzuschicken. Enthält auch * die JavaScript Hilfsfunktionen für den Aufruf des Kalenders, für den "bis=ab" Knopf und die gegenseitige * Ausschließung der Orte *
 
* Changes:
* 20071230 LeMa Umgebaut für Einfache Suche "Ersteinträge/Änderungen" === NUL * 20080212 MaSu HTML_SEARCH_DELIM * * @author LeMa (Martin Leyrer), 2007 * @version 1.2 */ // Feld- und Werteliste, um die eingegbenen Parameter in der Suchmaske nach einer Suche wieder anzuzeigen var returnfields = ""; // Counter für die View-Liste var ctr = 0; var doc; var elem; var dateFormat; var dateFormatString = 'TT.MM.JJJJ'; var doBGColor = false; /* Hintergrund */ var doOKCheck = true; /*do onblur ok/nok gif switching*/ var searchview; /* suchedi oder suchobj */ var subform; var qval; var doclinkkennung; /* für xml Linkname */ var errortext=''; /* Fehlermessage für generateFTQuery */ var ftquery = ''; /* ftquery für Felderbefüllen nach query */ var HTML_SEARCH_DELIM = '?'; /** * Wird von allen Forms aufgerufen, um versch. Variablen und Objekte zu * initialisieren * * @param par {Windows} Window-Objekt, in dessen OnLoad die Funktion aufgerufen wird. * * @return Nix * * @author Susanne Mauritz, 2008 * @author Martin Leyrer, 2007 * @version 1.0 */ function initForm(par) {/*init all forms*/ doc = par.document; // Aus xmlhttp.js. - Versteckt eintrag.css, damit die Suche und // Suchergebnisse korrekt angezeigt werden // changeStyle("suchen"); // Statusbar setzen wir nicht mehr // window.top.defaultStatus = doc.title; if (doc.forms.length === 0) return;/*not in edit mode*/ // elem beinhaltet alle Elemente des gültigen Formulars elem = doc.forms['Main'].elements; // form wird auf Namens des gültigen Formulars gesetzt var form = doc.forms['Main'].name; dateFormatString = (elem['DateFormat']) ? elem['DateFormat'].value :(typeof(dateFormatString)=='string')? dateFormatString:'TT.MM.JJJJ'; dateFormat = new dateFormat(dateFormatString); readValidationFields(doc.forms['Parameters'].elements); if( elem['subf'] !== null) { subform = elem['subf'].value; if (subform=='g') { showId("Kat2JS",doc) hideId("Kat2NJS",doc) setKatVars(elem); var sel = elem['Kat1']; tryKat12options(sel,elem['simQuery'].value); setKat2(sel); var sel = elem['Kat2']; tryKat12options(sel,elem['simQuery'].value); doclinkkennung = 'edikey/' } if (subform=='p') { // temporärer Code showId("Kat2JS",doc) hideId("Kat2NJS",doc) setKatVars(elem); var sel = elem['Kat1']; tryKat12options(sel,elem['simQuery'].value); setKat2(sel); var sel = elem['Kat2']; tryKat12options(sel,elem['simQuery'].value); doclinkkennung = 'ediposkey/' } } // Initialisierung für AJAX-Funktionen checkSession(doc, doclinkkennung); // Kalender- und ab=bis Buttons in erweiterter Suche sichtbar machen if( document.getElementById('helpcal1') !== null) { document.getElementById('helpcal1').className=''; } if( document.getElementById('helpcal2') !== null) { document.getElementById('helpcal2').className=''; } if( document.getElementById('gleichbutton1') !== null) { document.getElementById('gleichbutton1').className='px3'; } if( document.getElementById('gleichbutton2') !== null) { document.getElementById('gleichbutton2').className='px3'; } if( document.getElementById('printalldiv') !== null) { document.getElementById('printalldiv').className='printall'; } if( document.getElementById('numhead') !== null) { document.getElementById('numhead').className=''; } // Fokus auf erstes Eingabefeld setzten setFocus("") } /** * Einstiegspunkt, wird von allen Submit-Schaltflächen eines Forms aufgerufen (auch Zeitungslesefunktion) * * @param par {button} Das Button-Objekt der gedrückten Schaltfläche "submitSuche(this)" * * @return Nix * * @author Martin Leyrer, 2007 * @version 1.0 */ function submitSuche(par) { doc = par.form.document; //if( validateParameterFields(par) ) { if( validateFields(par,null,'Parameters') ) { // debugger; var form = par.form; var elem = form.elements; var queryb = ""; var subform = ""; returnfields = ""; if( elem['subf'] !== null) { subform = elem['subf'].value; } switch(subform) { case "g": queryb = buildqueryG(par, form, elem); searchview = "suchobj" break; case "p": queryb = buildqueryG(par, form, elem); searchview = "suchposobj" break; case "d": queryb = buildqueryD(par, form, elem); searchview = "suchedi" break; default: return false; break; } if (errortext !="") { setValidationError( 'ValidationError','Fehler bei der Suche. ' + errortext); return false; } if ( queryb === "") { setValidationError( 'ValidationError','Keine Suchparameter eingegeben. Bitte füllen Sie die gewünschten Felder!'); return false; } // var querytag = "query"; var queryend = ""; ftquery = ftquery.replace(/\+/,'%2B') queryb = escape(queryb).replace(/\+/,'%2B') //alert(queryb) /* url = url & "&subf=" & AgentArgs("subf") url = url & "&SearchOrder=" & AgentArgs("SearchOrder") url = url & "&SearchMax=" & AgentArgs("SearchMax") url = url & "&query=" & query url = url & "&ftquery=" & ftquery url = url & "&end" */ var x = form.action; var y = x.replace(/\.nsf.*/i,'') + '.nsf/' + searchview + HTML_SEARCH_DELIM + "SearchView&subf=" + subform + "&SearchOrder=4" + "&query=" + queryb + queryend + "&ftquery=" + ftquery+ "&end"; form.action = y; form.baseuri = y; self.location.href = y; return false; } return false; } /** * Bastelt den Query-String für die Suche nach Edikten zusammen und setzt returnfields entsprechend, damit die Eingaben * des Benutzers auch nach der Suche in den Feldern angezeigt werden können. *
Gibt den neuen Query-String zurück. * * @param par {button} Das Button-Objekt der gedrückten Schaltfläche "submitSuche(this)" * @param form {form} Das aktuelle Form-Objekt * @param elem {array} Ein Array aller Felder des formulars * * @return String * * @author Martin Leyrer, 2007 * @author Susanne Mauritz, 2007 * @version 1.0 */ function buildqueryD(par, form, elem) { var tempquery = ""; // Geschäftsabteilung muss dreistellig sein if( elem["GA"] !== null) { if( elem["GA"].value !== "") { elem["GA"].value = PadDigits(elem["GA"].value, 3); } } // Aktenzahl muss fünfstellig sein if( elem["Zahl"] !== null) { if( elem["Zahl"].value !== "") { elem["Zahl"].value = PadDigits(elem["Zahl"].value, 5); } } tempquery = temp_fbuildsearch( "Ger", tempquery, "AND", "=", "NUL"); tempquery = temp_fbuildsearch( "GA", tempquery, "AND", "=", ""); tempquery = temp_fbuildsearch( "GZ", tempquery, "AND", "=", "NUL"); tempquery = temp_fbuildsearch( "Zahl", tempquery, "AND", "=", ""); tempquery = temp_fbuildsearch( "Jahr", tempquery, "AND", "=", "NUL"); tempquery = temp_fbuildsearch( "BL", tempquery, "AND", "=", "NUL"); tempquery = temp_fbuildsearch( "VVArt", tempquery, "AND", "=", ""); if( par.name !== "sebut") { if( tempquery !== "") { tempquery = tempquery + " AND ";} tempquery = tempquery + "([DATBM]>=" + par.value; tempquery = tempquery + ")"; } return tempquery; } /** * Bastelt den Query-String für die Suche nach Gegenständen zusammen und setzt returnfields entsprechend, damit die Eingaben * des Benutzers auch nach der Suche in den Feldern angezeigt werden können. *
Gibt den neuen Query-String zurück. * * @param par {button} Das Button-Objekt der gedrückten Schaltfläche "submitSuche(this)" * @param form {form} Das aktuelle Form-Objekt * @param elem {array} Ein Array aller Felder des formulars * * @return String * * @author Martin Leyrer, 2007 * @version 1.2 */ function buildqueryG(par, form, elem) { var tempquery = ""; var atquery = ""; var availquery = ""; if( elem['FT'].value !== "") { /* Volltext-Suche */ if( tempquery !== "") { tempquery = tempquery + " AND "; } ftquery = elem['FT'].value.trim() tempquery = generateFTQuery (ftquery) ftquery = ftquery.replace( new RegExp( "\\+", "g" ), "%2B" ); returnfields = returnfields + "&FT=" + escape(elem['FT'].value); } if (elem['Kat1'].value !== "NUL") { /* Kat1 - Mehrfachnennungen möglich */ var katquery = "" for (var i=0;i=" + elem['DATVV1'].value + " | [DATBMZ]>=" + elem['DATVV1'].value + ")"; } else if( elem["DATVV2"].value === elem['DATVV1'].value ) { if( atquery !== "") { atquery = atquery + " & "; } atquery = atquery + "DATSS=[" + elem["DATVV1"].value+ "]"; returnfields = returnfields + "&DATVV2=" + escape(elem['DATVV2'].value); } else { if( atquery !== "") { atquery = atquery + " & "; } atquery = atquery + "_" + elem["DATVV1"].value + "_DATBM_" + elem['DATVV2'].value + "_"; returnfields = returnfields + "&DATVV2=" + escape(elem['DATVV2'].value); } } if(atquery !== "") { tempquery = tempquery + "_&_" + atquery; } if( elem['BL'].value !== null && elem['BL'].value === "A" ) { if( tempquery !== "") { tempquery = tempquery + " AND "; } tempquery = tempquery + "([BL]=!9)"; returnfields = returnfields + "&BL=" + escape(elem['BL'].value); } else { tempquery = temp_buildsearch( elem, "BL", tempquery, "AND", "=", "NUL"); } tempquery = temp_buildsearch( elem, "GH", tempquery, "AND", "=", "NUL"); tempquery = temp_buildsearch( elem, "GZ", tempquery, "AND", "=", "NUL"); // Die Datumssuchen müssen als Letztes bearbeitet werden, da sie an das Ende der Query gehören // Versteigerungsdatum if( elem['DATVV1'].value !== "") { returnfields = returnfields + "&DATVV1=" + escape(elem['DATVV1'].value); if( elem["DATVV2"].value === "") { if( tempquery !== "") { tempquery = tempquery + " AND "; } tempquery = tempquery + "([DATBMA]>=" + elem['DATVV1'].value + " | [DATBMZ]>=" + elem['DATVV1'].value + ")"; } else if( elem["DATVV2"].value === elem['DATVV1'].value ) { if( atquery !== "") { atquery = atquery + " & "; } atquery = atquery + "DATBM=[" + elem["DATVV1"].value+ "]"; returnfields = returnfields + "&DATVV2=" + escape(elem['DATVV2'].value); } else { if( atquery !== "") { atquery = atquery + " & "; } atquery = atquery + "_" + elem["DATVV1"].value + "_DATBM_" + elem['DATVV2'].value + "_"; returnfields = returnfields + "&DATVV2=" + escape(elem['DATVV2'].value); } } if(atquery !== "") { tempquery = tempquery + "_&_" + atquery; } // if(atquery === "" && availquery !== "") { // tempquery = tempquery + "_&_"; // } tempquery = tempquery; return tempquery; } /** * Baut einen gültigen Notes FT-Suchausdruck aus den übergebenen Parametern zusammen und hängt ihn an den * übergebenen Query-String an. Weiters wird die globale Variable returnfields entsprechend mit "Feldname=Wert" * befüllt. * * @param elem {array} Ein Array aller Felder des formulars * @param feldname {String} Name des zu bearbeitenden Feldes * @param feldname {String} Name des zu bearbeitenden Feldes * @param build_query {String} Bereits bestehender String, an den angehängt werden soll * @param concatop {String} Operator (AND, OR) mit dem der Suchausdruck an den Query-String angehängt werden soll * @param compop {String} Vergleichsoperator für den Suchausdruck (=,>, ...) * @param emptyval {String} Wert, der für dieses Feld als "leer" angesehen wird. * * @return String * * @author Martin Leyrer, 2007 * @version 1.0 */ function temp_buildsearch( elem, fieldname, build_query, concatop, compop, emptyval) { if( elem[fieldname] === null) { return build_query; } if( elem[fieldname].value === emptyval) { return build_query; } if (build_query !== "") { build_query = build_query + " " + concatop + " "; } build_query = build_query + "([" + fieldname + "]" + compop + "(" + elem[fieldname].value + "))"; returnfields = returnfields + "&"; returnfields = returnfields + escape(fieldname) + "=" + escape(elem[fieldname].value); return build_query; } /** * Baut einen gültigen Notes FT-Suchausdruck aus den übergebenen Parametern zusammen und hängt ihn an den * übergebenen Query-String an. Weiters wird die globale Variable returnfields entsprechend mit "Feldname=Wert" * befüllt. * * @param elem {array} Ein Array aller Felder des formulars * @param feldname {String} Name des zu bearbeitenden Feldes * @param feldname {String} Name des zu bearbeitenden Feldes * @param build_query {String} Bereits bestehender String, an den angehängt werden soll * @param concatop {String} Operator (AND, OR) mit dem der Suchausdruck an den Query-String angehängt werden soll * @param compop {String} Vergleichsoperator für den Suchausdruck (=,>, ...) * @param emptyval {String} Wert, der für dieses Feld als "leer" angesehen wird. * * @return String * * @author Martin Leyrer, 2007 * @version 1.0 */ function temp_fbuildsearch( fieldname, build_query, concatop, compop, emptyval) { if( Fields[fieldname] === null) { return build_query; } //alert(fieldname) qval = Fields[fieldname].getValue(); //alert (qval) if( qval === emptyval) { return build_query; } if (build_query !== "") { build_query = build_query + " " + concatop + " "; } build_query = build_query + "([" + fieldname + "]" + compop + "(" + qval + "))"; returnfields = returnfields + "&"; returnfields = returnfields + escape(fieldname) + "=" + qval ; return build_query; } /** * Übernimmt den Feldwert eines Formularfeldes in ein anderes. *
Usage: onClick="bis2ab(this,'SDatWert4','SDatWert3')" * * @param but {Button} Schaltfläche, über welche die Aktion ausgelöst wurde * @param target {String} Name des Zielfeldes * @param source {String} Name des Quellfeldes * * @return Nothing * * @author Gerhard Schuster * @author Martin Leyrer, 2007 * @version 1.0 */ function bis2ab(but,target,source) { but.form.elements[target].value = but.form.elements[source].value; } /** * Setz die anderen beiden Drop-Downs auf den Default-Wert zurück, wenn in dem dritten Feld etwas ausgewählt wurde. *
Usage: onChange="chOrt(this);" * * @param fld {Button} Feld, über welches die Aktion ausgelöst wurde * * @return Nothing * * @author Gerhard Schuster * @author Martin Leyrer, 2007 * @version 1.0 */ function chOrt(fld) { var locs = new Array('VVArt','AukH','VPLZ','VOrt','BL'); for (var i in locs) { if (locs[i]==fld.name) { continue; } element = fld.form.elements[locs[i]]; if (element.type == 'text') { element.value=''; } else if (element.type == 'select-one') { element.selectedIndex=0; } else if (element.type == 'checkbox') { element.checked=false; } } } /** * Um einem Umlaut-Problem aus dem weg zu gehen, sind die Werte in Select- * Feldern ohne Umlaute angegeben, Für die Suche benötigt man die Felder * aber mit Umlauten.
* Diese Funktion sucht zu einem gegebenen Auswahlwert die Beschriftung * aus dem select-Element und liefert diese zurück. *
Usage: onChange="chOrt(this);" * * @param element {Object} HTML-Select-Object, aus dem der Text * extrahiert werden soll * @param wert {String} Suchbegriff * * @return String * * @author Martin Leyrer, 2007 * @version 1.0 */ function getTextforSelectValue (element, wert) { var beschriftung = ""; for( i=0; i < element.length; i++) { if( element.options[i].value == wert ) { beschriftung = element.options[i].text; break; } } return beschriftung; } /** * run submitSuche if enter pressed in single input field * * @param par {Button-Object} * * @return Nothing * * @author Martin Leyrer, 2007 * @version 1.0 */ function onSubmitSuche(par) {/*run onsubmit if enter pressed in single input field*/ if (par['sebut']) { /*button Suche on all subforms*/ submitSuche(par['sebut']); return false; /*don't submit, use subSearch*/ } else { return false; } } /** * run search if enter in field FT in subfv:onKeyPress(event); * * @param e {Event Object} * * @return Nothing * * @author Martin Leyrer, 2007 * @version 1.0 */ function onKeyPress(e) { /*Moz1.5,IE5.5: e=[event object]*/ if (e) { if (e.keyCode) { if (e.keyCode == 13) { // Return onSubmitSuche(window.document.forms['Main']); return false; } } } return false; } /** * Da Domino nativ keine Möglichkeit bietet, Suchergebnisse automatisch zu * nummerieren, müssen wir diese Nummerierung mit JavaScript nachbilden. * In dem TD, in dem die Nummerierung stehen soll, muss diese Funktion * aufgerufen werden. Weiters muss eine globale Variable "ctr" definiert * und mit "0" initialisiert sein. * * @param e {Event Object} * * @return Nothing * * @author Martin Leyrer, 2007 * @author Gerhard Schuster * @version 1.0 */ function count() {/*auto number*/ /*jsl:ignore*/ document.write( (++ctr).toString()+'.' ); /*jsl:end*/ } /** * Füllt den übergebenen String mit der übergebenen Anzahl von * führenden Nullen auf, falls der String kürzer als die übergebene Anzahl ist. * * @param n {String} Der String, der aufzufüllen ist * @param totalDigits {Integer} Anzahl der Stellen, auf die der String * mit führenden Nullen aufzufüllen ist * * @return String * * @author Martin Leyrer, 2007 * @version 1.0 */ function PadDigits(n, totalDigits) { n = n.toString(); var pd = ''; if (totalDigits > n.length) { for (i=0; i < (totalDigits-n.length); i++) { pd += '0'; } } return pd + n.toString(); } function generateFTQuery(ftquery) { var ftquerystring = ftquery.trim(); var queryb='' var isQuote=false; var startQuote = '' var endQuote = '' var tmpquery; var zitat; var rest; var aposplitarray; var apo = ftquerystring.indexOf('"'); var amp = ftquerystring.indexOf('&'); var plu = ftquerystring.indexOf('+'); var and = ftquerystring.toLowerCase().indexOf(' and '); errortext = ''; if (apo + amp + plu + and==-4) { /* keine Besonderheiten */ queryb = ftquerystring } else { /* logical operator "und" an erster Stelle */ if ((amp==0) || (plu==0) || (amp==ftquerystring.length-1) || (plu==ftquerystring.length-1)) { errortext = operatorError; return false; } if (apo== -1) { /* kein quoted string */ tmpquery = ftquerystring.replace( new RegExp( "\\+", "g" ), " AND " ); tmpquery = tmpquery.replace( new RegExp( "\\&", "g" ), " AND " ); queryb = tmpquery } else { /* quoted string */ aposplitarray = ftquery.split('"'); if (aposplitarray.length%2 == 0) { /* ungerade "-anzahl - Fehler, Abbruch */ errortext = quotationError; return false; } while (ftquerystring.length>0) { if (apo==0) { /* Apostroph an erster Stelle - Quoted string */ ftquerystring = ftquerystring.substring(apo+1).trim() endQuote = ftquerystring.indexOf('"'); zitat = '"' + ftquerystring.substring(0,endQuote).trim()+ '"' tmpquery = '"' + ftquerystring.substring(0,endQuote).trim()+ '"' ftquerystring = ftquerystring.substring(endQuote+1).trim() } else{ /* außerhalb des quoted strings */ startQuote = ftquerystring.indexOf('"'); if(startQuote==-1) { /* letzter Suchbegriff */ rest = ftquerystring; ftquerystring=''; } else { /* es folgen weitere quoted sSuchbegriffe */ rest = ftquerystring.substring(0,startQuote).trim() ftquerystring = ftquerystring.substring(startQuote).trim() } tmpquery = rest.replace( new RegExp( "\\+", "g" ), " AND " ); tmpquery = tmpquery.replace( new RegExp( "\\&", "g" ), " AND " ); } apo = ftquerystring.indexOf('"'); queryb = queryb + ' ' + tmpquery }/* while */ } /* else quoted string */ } /* else suchstring mit quotes oder log ops */ return '(' + queryb.trim() + ')' } function generateFTQuery1(ftquery) { var tmpquery=''; var queryb='' var isQuote=false; var apo='"' var aposplitarray; var apostroph = ftquery.indexOf(apo); aposplitarray = ftquery.split(apo); if (aposplitarray.length%2 == 0) { /* ungerade "-anzahl - Fehler, Abbruch */ errortext = quotationError; return queryb; } for (var i=0; i<(aposplitarray.length);i++) { //alert(aposplitarray[i] + ' ' + isQuote) if (aposplitarray[i].trim().length == 0) { /* Beginn oder Ende Zitat */ isQuote = isQuote== false ? true : false; } else { if (isQuote==true) { /* Zitat */ tmpquery = '"' + aposplitarray[i] + '"' isQuote=false; } else { /* restliche Query - & und + durch AND ersetzen */ tmpquery = tmpquery + aposplitarray[i].replace( new RegExp( "\\+", "g" ), " AND " ); tmpquery = tmpquery.replace( new RegExp( "\\&", "g" ), " AND " ); } /* else isQuote==true? */ } /* aposplitarray[i].length */ //alert("tmpquery " + tmpquery) if (tmpquery.length>0) { queryb = queryb.length>0 ? queryb + ' ' + tmpquery : tmpquery //alert('queryb ' + queryb) tmpquery='' } } /* for */ if (queryb.length>0) { queryb = '(' + queryb + ')' } return (queryb) } /* generateFTQuery */