function initialize()

in wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js [86:253]


		function initialize(){
			var isShowing = false;
			// Remove the autocompletion menu if still present from
			// a previous call. This is required to properly register
			// the mouse event handler again 
			var choiceDiv = document.getElementById(getMenuId());
			if (choiceDiv !== null) {
				isShowing = choiceDiv.showingAutocomplete;
				choiceDiv.parentNode.parentNode.removeChild(choiceDiv.parentNode);
			}

			var obj = Wicket.$(ajaxAttributes.c);
			initialElement = obj;

			Wicket.Event.add(obj, 'blur', function (jqEvent) {
				var menuId=getMenuId();
				//workaround for IE. Clicks on scrollbar trigger
				//'blur' event on input field. (See https://issues.apache.org/jira/browse/WICKET-5882)
				if (menuId !== document.activeElement.id && (menuId + "-container") !== document.activeElement.id) {
					hideAutoCompleteTimer = window.setTimeout(function() {
							hideAutoComplete();
							isTriggeredChange = false;
							triggerChangeOnHide = false;
					}, 500);
				} else {
					jQuery(this).trigger("focus");
				}
			});

			Wicket.Event.add(obj, 'focus', function (jqEvent) {
				var input = jqEvent.target;
				if (!ignoreOneFocusGain && (cfg.showListOnFocusGain || (cfg.showListOnEmptyInput && (!input.value))) && visible === 0) {
					getAutocompleteMenu().showingAutocomplete = true;
					if (cfg.showCompleteListOnFocusGain) {
						updateChoices(true);
					} else {
						updateChoices();
					}
				}
				ignoreOneFocusGain = false;
			});

			Wicket.Event.add(obj, 'keydown', function (jqEvent) {
				var keyCode = Wicket.Event.keyCode(jqEvent);
				switch (keyCode) {
					case KEY_UP:
						if (elementCount > 0) {
							if (selected>-1) {
								setSelected(selected-1);
							}

							var searchTerm = Wicket.$(ajaxAttributes.c).value;
							if(selected === -1 && searchTerm) {
								// select the last element
								setSelected(elementCount-1);
								showAutoComplete();
							}
							render(true, false);
							jqEvent.preventDefault();
						}

						break;
					case KEY_DOWN:
						if (elementCount > 0) {
							if (selected < elementCount-1) {
								setSelected(selected+1);
							} else if (selected === elementCount-1) {
								// select the first element
								setSelected(0);
							}
							if (visible === 0) {
								updateChoices();
							} else {
								render(true, false);
								showAutoComplete();
							}
							jqEvent.preventDefault();
						}

						break;
					case KEY_ESC:
						if (visible === 1) {
							hideAutoComplete();
							return jqEvent.stopPropagation();
						}
						break;
					case KEY_TAB:
					case KEY_ENTER:
						ignoreKeyEnter = false;

						if (selected > -1) {
							var value = getSelectedValue();
							value = handleSelection(value);

							if (value) {
								obj.value = value;
								triggerChangeOnHide = true;
							}

							hideAutoComplete();

							if (cfg.keyTabBehavior === 'selectFocusAutocompleteInput' && keyCode === KEY_TAB) {
								// prevent moving focus to the next component if an item in the dropdown is selected
								// using the Tab key
								jqEvent.preventDefault();
							}

							ignoreKeyEnter = true;
						} else if (Wicket.AutoCompleteSettings.enterHidesWithNoSelection) {
							hideAutoComplete();

							ignoreKeyEnter = true;
						}

						return true;

					default:
				}
			});

			Wicket.Event.add(obj, 'change', function (jqEvent) {
				if (visible === 1) {
					// don't let any other change handler get this
					jqEvent.stopImmediatePropagation();

					triggerChangeOnHide = true;
				}
			});

			Wicket.Event.add(obj, 'input change', function (jqEvent) {
				var kc = Wicket.Event.keyCode(jqEvent);
				switch(kc) {
					case KEY_TAB:
					case KEY_ENTER:
						return jqEvent.stopImmediatePropagation();
					case KEY_UP:
					case KEY_DOWN:
					case KEY_ESC:
					case KEY_RIGHT:
					case KEY_LEFT:
					case KEY_SHIFT:
					case KEY_ALT:
					case KEY_CTRL:
						break;
					default:
						updateChoices();
				}
			});

			Wicket.Event.add(obj, 'keypress', function (jqEvent) {
				if(Wicket.Event.keyCode(jqEvent) === KEY_ENTER && ignoreKeyEnter){
					jqEvent.stopImmediatePropagation();
					return false;
				}
			});

			if (Wicket.Focus.getFocusedElement() === obj && isShowing === true)
			{
				// element already has focus, we should show list
				if (cfg.showListOnFocusGain) {
					if (cfg.showCompleteListOnFocusGain) {
						updateChoices(true);
					} else {
						updateChoices();
					}
				}
			}
		}