var Suggest = function (searchField, xmlTarget, onSelect)
{
this.SearchField = searchField;
this.XMLTarget = xmlTarget;
this.OnSelect = onSelect;
this.XMLHandler = new XMLHandler();
// Resolve the searchField node if not an object.
if (this.SearchField != null && typeof(this.SearchField) != 'object') {
this.SearchField = window.document.getElementById(this.SearchField);
}
var suggest = this;
this.ResultContainer = window.document.createElement('div');
this.ResultContainer.AddItem = function (xmlNode)
{
var sId = xmlNode.attributes.getNamedItem('id').value;
var sName = xmlNode.attributes.getNamedItem('name').value;
var sZip = xmlNode.attributes.getNamedItem('zip').value;
var bFull = ((node = xmlNode.attributes.getNamedItem('full')) && node.value == 'true');
suggest.ResultContainer.innerHTML += (bFull ? '' + sName + '
' : '' + sZip + ' - ' + sName + '
');
}
this.ResultContainer.AddNoResult = function (xmlNode)
{
suggest.ResultContainer.innerHTML += 'Intet resultat
';
}
this.ResultContainer.ClearItems = function ()
{
suggest.ResultContainer.innerHTML = '';
}
this.ResultContainer.style.height = '6.2em';
this.ResultContainer.style.overflow = 'auto';
this.ResultContainer.style.marginBottom = '.8em';
this.ResultContainer.style.display = 'none';
this.SearchField.parentNode.appendChild(this.ResultContainer);
var oldOnKeyup = this.SearchField.onkeyup;
this.SearchField.onkeyup = function ()
{
suggest.OnInputChange();
if (oldOnKeyup != null) oldOnKeyup();
}
}
Suggest.prototype.OnInputChange = function ()
{
if (this.TimerID != null) {
clearTimeout(this.TimerID);
this.TimerID = null;
}
if (this.SearchField.value.length > 0) {
var suggest = this;
this.TimerID = setTimeout(function () { suggest.UpdateSuggestions(); }, 800);
} else {
this.HideResults();
}
}
Suggest.prototype.UpdateSuggestions = function ()
{
var sUrl = this._XMLTargetUrl('pattern=' + encodeURI(this.SearchField.value));
this.XMLHandler.LoadURL(sUrl);
var oItems = this.XMLHandler.DOMDocument.documentElement;
this.ResultContainer.ClearItems();
var itemAdded = false;
for (var i = 0; i < oItems.childNodes.length; i++) {
var childNode = oItems.childNodes.item(i);
if (childNode.nodeName == 'Item') {
itemAdded = true;
this.ResultContainer.AddItem(childNode);
}
}
if(!itemAdded) {
this.ResultContainer.AddNoResult();
}
this.ShowResults();
}
Suggest.prototype.ShowResults = function ()
{
this.ResultContainer.style.display = '';
}
Suggest.prototype.HideResults = function ()
{
this.ResultContainer.style.display = 'none';
}
/**
* Get the XMLTarget with the specified paramters.
*/
Suggest.prototype._XMLTargetUrl = function ()
{
if (this.XMLTarget.indexOf('?') == -1) {
var xmlTarget = this.XMLTarget + '?';
} else {
var xmlTarget = this.XMLTarget + '&';
}
for (var i = 0; i < arguments.length; i++) {
xmlTarget += arguments[i];
if (i < arguments.length - 1) {
xmlTarget += '&';
}
}
return xmlTarget;
}