Some very old PHP code originally intended to become an image management tool.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

326 lines
7.6 KiB

/*
* requires fittingStrings.js to be loaded first
*/
/*
* provide alternative Names already existent in DB to given names in
* input text fields:
*
* Arguments:
* fname / ID of the input text field with firstname
* sname / ID of the input text field with surname
* fnameAlt / ID of the list that recieves the alternative firstnames
* snameAlt / ID of the list that receives the alternative surnames
* names / Array containing the already existing names and persons.
*
* Methods:
* updField / exact match(no-case) found => update input field
* genAlternativesList / generate List of alternative Strings
* altSurnames / fill the list of alternative surnames
* altFirstnames / fill the list of alternative firstnames
*/
function c_personSearch (fname, sname, fnameAlt, snameAlt, names, person)
{
this.firstname = fname;
this.surname = sname;
this.fNameAlt = fnameAlt;
this.sNameAlt = snameAlt;
this.surnames = new Array ();
this.firstnames = new Array ();
this.persons = new Array ();
for (sn in names)
{
this.surnames.push (sn);
this.firstnames[sn] = new Array ();
this.persons[sn] = new Array ();
for (d in names[sn])
{
this.firstnames[sn].push (names[sn][d][0]);
this.persons[sn][names[sn][d][0]] = names[sn][d][1];
}
}
this.person = person;
this.sNameBest = new Array (-1, -1, null);
this.fNameBest = new Array (-1, -1, null);
this.snameIdx = -1;
this.fnameIdx = -1;
this.snameMaxIdx = -1;
this.fnameMaxIdx = -1;
this.snameDists = new Array ();
this.fnameDists = new Array ();
this.incSnameIdx = function ()
{
if (this.snameIdx < this.snameMaxIdx-1)
this.snameIdx ++;
}
this.incFnameIdx = function ()
{
if (this.fnameIdx < this.fnameMaxIdx-1)
this.fnameIdx ++;
}
this.decSnameIdx = function ()
{
if (this.snameIdx >= 0)
this.snameIdx --;
}
this.decFnameIdx = function ()
{
if (this.fnameIdx >= 0)
this.fnameIdx --;
}
this.show = function (id)
{
var node = document.getElementById (id);
node.parentNode.style.visibility = 'visible';
return false;
}
this.hide = function (id)
{
var node = document.getElementById (id);
var inField =
node.parentNode.parentNode.getElementsByTagName ('input')[0];
var idx = -1;
var dists = new Array ();
node.parentNode.style.visibility = 'hidden';
switch (inField.getAttribute ('id'))
{
case 'personSearch_fname':
idx = this.fnameIdx;
if (idx != -1)
{
dists = this.fnameDists[idx].split ('::');
this.fNameBest = new Array (0, 0, dists[2]);
inField.value = dists[2];
}
break;
case 'personSearch_sname':
idx = this.snameIdx;
if (idx != -1)
{
dists = this.snameDists[idx].split ('::');
this.sNameBest = new Array (0, 0, dists[2]);
inField.value = dists[2];
}
}
if (this.person != null)
if (this.sNameBest[1] == 0 && this.fNameBest[1] == 0)
this.person.update (
this.persons[this.sNameBest[2]][this.fNameBest[2]]);
else
this.person.empty ();
return false;
}
this.updField = function (field, alternative, altId)
{
if (alternative[1] == 0)
field.value = alternative[2];
else
if (alternative[1] >= 0)
return this.show (altId);
return this.hide (altId);
}
this.genAlternativesList = function (bestFit, dists, idx)
{
if (dists.length > 0)
// there are caculated distances for surnames
{
var bestMatch = dists[0].split ('::'); // infos for best match
var len = bestMatch[1];
// reset matches select
while ((child = bestFit.firstChild) != null)
bestFit.removeChild (child);
// len ist ein Array mit entweder snameMaxIdx oder fnameMaxIdx
// als einziges Element. Ich übergebe das als Array um ein call
// bei reference zu simulieren.
if (len < dists.length)
while (dists[len].split ('::')[1] < bestMatch[1] &&
len < dists.lenth)
len++;
else
len = dists.length;
for (var i=0; i<len; i++)
// walk through all matches
{
// get infos for match
var sMatch = dists[i].split ('::');
// create list entries
newLi = document.createElement ('li');
if (i == idx)
newLi.className = 'bgc-tt1-selItem';
liTxt = document.createTextNode (sMatch[2]);
newLi.appendChild (liTxt);
bestFit.appendChild (newLi);
}
}
else
// there are no caculated distances for surnames
{
// reset matches select
while ((child = bestFit.firstChild) != null)
bestFit.removeChild (child);
return -1;
}
return len;
}
this.altSurnames = function ()
{
var surname = document.getElementById (this.surname);
var sNameAlt = document.getElementById (this.sNameAlt);
this.snameDists = fittingStrings (surname.value, this.surnames, false);
if (this.snameDists.length > 0)
this.sNameBest = this.snameDists[0].split ('::');
else
this.sNameBest = new Array (-1, -1, '');
this.snameMaxIdx =
this.genAlternativesList (sNameAlt, this.snameDists, this.snameIdx);
this.updField (surname, this.sNameBest, this.sNameAlt)
if (this.sNameBest[1] == 0)
{
var firstname = document.getElementById (this.firstname);
this.fnameDists = fittingStrings (
firstname.value, this.firstnames[this.sNameBest[2]], false);
if (this.fnameDists.length > 0)
this.fNameBest = this.fnameDists[0].split ('::');
else
this.fNameBest = new Array (-1, -1, '');
if (this.fnameDists.length > 0)
this.fNameBest = this.fnameDists[0].split ('::');
if (this.person != null)
if (this.fNameBest[1] == 0)
this.person.update (
this.persons[this.sNameBest[2]][this.fNameBest[2]]);
else
this.person.empty ();
}
else
{
this.fNameBest = new Array (-1, -1, null);
if (this.person != null)
this.person.empty ();
}
return false;
}
this.altFirstnames = function ()
{
var firstname = document.getElementById (this.firstname);
var fNameAlt = document.getElementById (this.fNameAlt);
if (this.sNameBest[1] == 0)
{
var surname = document.getElementById (this.surname);
this.fnameDists = fittingStrings (
firstname.value, this.firstnames[this.sNameBest[2]], false);
}
else
this.fnameDists = new Array ();
if (this.fnameDists.length > 0)
this.fNameBest = this.fnameDists[0].split ('::');
else
this.fNameBest = new Array (-1, -1, '');
this.fnameMaxIdx =
this.genAlternativesList (fNameAlt, this.fnameDists, this.fnameIdx);
this.updField (firstname, this.fNameBest, this.fNameAlt)
if (this.person != null)
if (this.sNameBest[1] == 0 && this.fNameBest[1] == 0)
this.person.update (
this.persons[this.sNameBest[2]][this.fNameBest[2]]);
else
this.person.empty ();
return false;
}
}
function personSearchAltFirstnameHandler (_event)
{
if (_event == undefined)
_event = window.event;
if (_event.which)
var keycode = _event.which;
else if (_event.keyCode)
var keycode = _event.keyCode;
// pSearch wird im php personSearch.js angelegt.
switch (keycode)
{
case 38:
pSearch.decFnameIdx ();
break;
case 40:
pSearch.incFnameIdx ();
break;
case 13:
return pSearch.hide ('personSearch_fBestFit');
default:
pSearch.fnameIdx = -1;
}
return pSearch.altFirstnames ();
}
function personSearchAltSurnameHandler (_event)
{
if (_event == undefined)
_event = window.event;
if (_event.which)
var keycode = _event.which;
else if (_event.keyCode)
var keycode = _event.keyCode;
// pSearch wird im php personSearch.js angelegt.
switch (keycode)
{
case 38:
pSearch.decSnameIdx ();
break;
case 40:
pSearch.incSnameIdx ();
break;
case 13:
return pSearch.hide ('personSearch_sBestFit');
default:
pSearch.snameIdx = -1;
}
return pSearch.altSurnames ();
}