public HtmlAutoCompleteBehaviour(InputElement input, InputElement hiddenInput, DOMElement anchor, bool isSuggest, InputElement parametersHiddenField) { DOMAttribute cometAtt = input.GetAttributeNode(HtmlAutoCompleteAttributes.CometServiceUrl); remoteSuggestionsGetter = new WebServiceRemoteSuggestionsGetter( input.GetAttributeNode(HtmlAutoCompleteAttributes.WebServiceUrl).Value, input.GetAttributeNode(HtmlAutoCompleteAttributes.WebServiceMethod).Value ); this.mode = isSuggest == true ? HtmlAutoCompleteMode.Suggest : HtmlAutoCompleteMode.Complete; this.input = input; this.hiddenInput = hiddenInput; this.anchor = anchor == null ? input : anchor; DomEvent.AddHandler(input, "blur", delegate(DomEvent e) { Window.SetTimeout(DoBlur, 250); }); DomEvent.AddHandler(input, "keydown", this.HandleKeyDown); DomEvent.AddHandler(input, "keyup", this.HandleKeyUp); DomEvent.AddHandler(input, "focus", CallOnFocus); DOMAttribute waterMarkNode = input.GetAttributeNode(HtmlAutoCompleteAttributes.Watermark); if (waterMarkNode != null) { watermarker = new WatermarkExtender(input, input.GetAttributeNode(HtmlAutoCompleteAttributes.Watermark).Value); } DOMAttribute popupLeftNode = input.GetAttributeNode(HtmlAutoCompleteAttributes.PopupLeftOffset); popupLeftOffset = popupLeftNode == null ? 0 : int.ParseInvariant(popupLeftNode.Value); DOMAttribute popupTopNode = input.GetAttributeNode(HtmlAutoCompleteAttributes.PopupTopOffset); popupTopOffset = popupTopNode == null ? 0 : int.ParseInvariant(popupTopNode.Value); DOMAttribute rightAlignNode = input.GetAttributeNode(HtmlAutoCompleteAttributes.RightAlign); rightAlign = rightAlignNode == null ? false : bool.Parse(rightAlignNode.Value); if (input.GetAttributeNode(HtmlAutoCompleteAttributes.PopupLeftOffset) != null) { popupLeftOffset = int.ParseInvariant(input.GetAttributeNode(HtmlAutoCompleteAttributes.PopupLeftOffset).Value); } Parameters = new PairListField(parametersHiddenField); Suggestions.OnSuggestionsChanged = delegate() { DisplaySuggestionsInPopupMenu(); }; this.remoteSuggestionsGetter.OnAllSuggestionsReceived = delegate() { RemoveLowPrioritySuggestionsAndSetRemainingSuggestionsToLowPriority(); HideAjaxIcon(); }; this.remoteSuggestionsGetter.OnSuggestionsRequested = delegate() { ShowAjaxIcon(); }; this.remoteSuggestionsGetter.OnSuggestionReceived = delegate(Suggestion[] newSuggestions) { Trace.Write("Received" + newSuggestions.Length + "suggestions"); if (TransformReceivedSuggestions != null) { AddSuggestions(TransformReceivedSuggestions(newSuggestions, maxNumberOfItemsToGet)); } else { AddSuggestions(newSuggestions); } }; this.remoteSuggestionsGetter.OnAbortCurrentRequest= delegate() { HideAjaxIcon(); }; }