/*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=(' + Fields['DATVV1'].getValue()+'))'
}
if (Fields['DATVV2'].getValue() !="") { /* Versteigerungsdatum bis */
tempquery += (tempquery.length==0) ? '' : ' AND ';
tempquery += '([DATSS]<=(' + Fields['DATVV2'].getValue()+'))'
}
tempquery = temp_fbuildsearch( "VVArt", tempquery, "AND", "=", "");
tempquery = temp_fbuildsearch( "AukH", tempquery, "AND", "=", "NUL");
tempquery = temp_fbuildsearch( "VPLZ", tempquery, "AND", "=", "");
tempquery = temp_fbuildsearch( "VOrt", tempquery, "AND", "=", "");
tempquery = temp_fbuildsearch( "BL", tempquery, "AND", "=", "NUL");
tempquery = tempquery;
return tempquery;
// Versteigerungsdatum
if( elem['DATVV1'].value !== "") {
returnfields = returnfields + "&DATVV1=" + escape(elem['DATVV1'].value);
if( elem["DATVV2"].value === "") {
if( tempquery !== "") {
tempquery = tempquery + " AND ";
}
tempquery = tempquery + "([DATSS]>=" + 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 */