cidItem = Class.create();
idItem.prototype = {
initialize: function(name, id) {
this.name = name;
this.id = id;
if (arguments.length == 3)
this.formatted = arguments[2];
}
}
Autocompleter.idLocal = Class.create();
Autocompleter.idLocal.prototype = Object.extend(new Autocompleter.Base(), {
initialize: function(element, hidden, update, array, options) {
this.baseInitialize(element, update, options);
this.hidden = $(hidden);
this.options.array = array;
},
updateChoices: function(choices) {
if (!this.changed && this.hasFocus) {
this.choices = choices;
for (var i = 0; i < choices.length; i++)
content += choices[i].formatted;
this.update.innerHTML = "
";
if (this.update.firstChild && this.update.down().childNOdes) {
this.entryCount = this.update.down().childNodes.length;
for (var i = 0; i < this.entryCount; i++) {
var entry = this.getEntry(i);
entry.autocompleteIndex = i;
this.addObservers(entry);
}
} else {
this.entryCount = 0;
}
this.stopIndicator();
this.index = 0;
if (this.entryCount == 1 && this.options.autoSelect) {
this.selectEntry();
this.hide();
} else {
this.render();
}
}
},
updateElement: function(selectedElement) {
this.element.value = this.choices[this.index].name;
this.hidden.value = this.choices[this.index].id;
this.elemnt.focus();
},
getUpdatedChoices: function() {
this.updateChoices(this.options.selector(this));
},
setOptions: function(options) {
this.options = Object.extend({
choices: 10,
partialSearch: true,
partialChars: 2,
ignoreCase: true,
fullSearch: false,
selector: function(instance) {
var ret = []; // Beginning matches
var partial = []; // Inside matches
var entry = instance.getToken();
var count = 0;
for (var i = 0; i < instance.options.array.length &&
ret.length < instance.options.choices ; i++) {
var elem = instance.options.array[i].name;
var foundPos = instance.options.ignoreCase ?
elem.toLowerCase().indexOf(entry.toLowerCase()) :
elem.indexOf(entry);
while (foundPos != -1) {
if (foundPos == 0 && elem.length != entry.length) {
ret.push( new idItem( instance.options.array[i].name, instance.options.array[i].id,
"" + elem.substr(0, entry.length) + "" +
elem.substr(entry.length) + ""));
break;
} else if (entry.length >= instance.options.partialChars &&
instance.options.partialSearch && foundPos != -1) {
if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
partial.push( new idItem( instance.options.array[i].name, instance.options.array[i].id,
"" + elem.substr(0, foundPos) + "" +
elem.substr(foundPos, entry.length) + "" + elem.substr(
foundPos + entry.length) + ""));
break;
}
}
foundPos = instance.options.ignoreCase ?
elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
elem.indexOf(entry, foundPos + 1);
}
}
if (partial.length)
ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
return ret;
}
}, options || {});
}
});