if (typeof(Wicket) == "undefined") Wicket = { }; Wicket.AutoCompleteSettings = { enterHidesWithNoSelection : false }; Wicket.AutoComplete=function(elementId, callbackUrl, cfg, indicatorId){ var KEY_TAB=9; var KEY_ENTER=13; var KEY_ESC=27; var KEY_LEFT=37; var KEY_UP=38; var KEY_RIGHT=39; var KEY_DOWN=40; var KEY_SHIFT=16; var KEY_CTRL=17; var KEY_ALT=18; var selected=-1; var elementCount=0; var visible=0; var mouseactive=0; var hidingAutocomplete=0; var objonkeydown; var objonblur; var objonkeyup; var objonkeypress; var objonchange; var objonchangeoriginal; var initialDelta = -1; var localThrottler = new Wicket.Throttler(true); var throttleDelay = 300; function initialize(){ var choiceDiv=document.getElementById(getMenuId()); if (choiceDiv != null) { choiceDiv.parentNode.parentNode.removeChild(choiceDiv.parentNode); } var obj=wicketGet(elementId); objonkeydown=obj.onkeydown; objonblur=obj.onblur; objonkeyup=obj.onkeyup; objonkeypress=obj.onkeypress; objonfocus=obj.onfocus; objonchangeoriginal=obj.onchange; obj.onchange=function(event){ if(mouseactive==1)return false; if(typeof objonchangeoriginal=="function")objonchangeoriginal.apply(this,[event]); } objonchange=obj.onchange; obj.onblur=function(event){ if(mouseactive==1){ Wicket.$(elementId).focus(); return killEvent(event); } hideAutoComplete(); if(typeof objonblur=="function")objonblur.apply(this,[event]); } obj.onfocus=function(event){ if (mouseactive==1) return killEvent(event); if (cfg.showListOnFocusGain) { if (cfg.showCompleteListOnFocusGain) { updateChoices(true); } else { updateChoices(); } } if(typeof objonfocus=="function")objonfocus.apply(this,[event]); } obj.onkeydown=function(event){ switch(wicketKeyCode(Wicket.fixEvent(event))){ case KEY_UP: if(selected>-1)selected--; if(selected==-1){ hideAutoComplete(); } else { render(); } if(Wicket.Browser.isSafari())return killEvent(event); break; case KEY_DOWN: if(selected -1) { var value = getSelectedValue(); if(value = handleSelection(value)) { obj.value = value; if(typeof objonchange=="function") objonchange.apply(this,[event]); } hideAutoComplete(); hidingAutocomplete = 1; } else if (Wicket.AutoCompleteSettings.enterHidesWithNoSelection) { hideAutoComplete(); hidingAutocomplete = 1; } mouseactive=0; if(typeof objonkeydown=="function")objonkeydown.apply(this,[event]); if(selected>-1){ } return true; break; default: } } obj.onkeyup=function(event){ switch(wicketKeyCode(Wicket.fixEvent(event))){ case KEY_TAB: case KEY_ENTER: return killEvent(event); 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(); } if(typeof objonkeyup=="function")objonkeyup.apply(this,[event]); return null; } obj.onkeypress=function(event){ if(wicketKeyCode(Wicket.fixEvent(event))==KEY_ENTER){ if(selected>-1 || hidingAutocomplete==1){ hidingAutocomplete=0; return killEvent(event); } } if(typeof objonkeypress=="function")objonkeypress.apply(this,[event]); } } function handleSelection(input) { var menu = getAutocompleteMenu(); var attr = menu.firstChild.childNodes[selected].attributes['onselect']; return attr ? eval(attr.value) : input; } function getMenuId() { return elementId+"-autocomplete"; } function getAutocompleteMenu() { var choiceDiv=document.getElementById(getMenuId()); if (choiceDiv==null) { var container = document.createElement("div"); container.className ="wicket-aa-container"; if(cfg.className) container.className += ' ' + cfg.className; document.body.appendChild(container); container.style.display="none"; container.style.overflow="auto"; container.style.position="absolute"; container.id=getMenuId()+"-container"; container.show = function() { wicketShow(this.id) }; container.hide = function() { wicketHide(this.id) }; choiceDiv=document.createElement("div"); container.appendChild(choiceDiv); choiceDiv.id=getMenuId(); choiceDiv.className="wicket-aa"; container.onmouseout=function() {mouseactive=0;}; container.onmousemove=function() {mouseactive=1;}; } return choiceDiv; } function getAutocompleteContainer() { var node=getAutocompleteMenu().parentNode; return node; } function killEvent(event){ if(!event)event=window.event; if(!event)return false; if(event.cancelBubble!=null){ event.cancelBubble=true; } if(event.returnValue){ event.returnValue=false; } if(event.stopPropagation){ event.stopPropagation(); } if(event.preventDefault){ event.preventDefault(); } return false; } function updateChoices(showAll){ selected=-1; if (showAll) { localThrottler.throttle(getMenuId(), throttleDelay, actualUpdateChoicesShowAll); } else { localThrottler.throttle(getMenuId(), throttleDelay, actualUpdateChoices); } } function actualUpdateChoicesShowAll() { showIndicator(); var request = new Wicket.Ajax.Request(callbackUrl+"&q=", doUpdateChoices, false, true, false, "wicket-autocomplete|d"); request.get(); } function actualUpdateChoices() { showIndicator(); var value = wicketGet(elementId).value; var request = new Wicket.Ajax.Request(callbackUrl+(callbackUrl.indexOf("?")>-1 ? "&" : "?") + "q="+processValue(value), doUpdateChoices, false, true, false, "wicket-autocomplete|d"); request.get(); } function showIndicator() { if (indicatorId!=null) { Wicket.$(indicatorId).style.display=''; } } function hideIndicator() { if (indicatorId!=null) { Wicket.$(indicatorId).style.display='none'; } } function processValue(param) { return (encodeURIComponent)?encodeURIComponent(param):escape(param); } function showAutoComplete(){ var position=getPosition(wicketGet(elementId)); var container = getAutocompleteContainer(); var input=wicketGet(elementId); var index=getOffsetParentZIndex(elementId); container.show(); if (!isNaN(new Number(index))) { container.style.zIndex=(new Number(index)+1); } container.style.left=position[0]+'px'; container.style.top=(input.offsetHeight+position[1])+'px'; if(cfg.adjustInputWidth) container.style.width=input.offsetWidth+'px'; visible=1; hideShowCovered(); } function hideAutoComplete(){ visible=0; selected=-1; if ( getAutocompleteContainer() ) { getAutocompleteContainer().hide(); hideShowCovered(); } } function getPosition(obj) { var leftPosition=0; var topPosition=0; do { topPosition += obj.offsetTop || 0; topPosition -= obj.scrollTop || 0; leftPosition += obj.offsetLeft || 0; leftPosition -= obj.scrollLeft || 0; obj = obj.offsetParent; } while (obj); return [leftPosition,topPosition]; } function doUpdateChoices(resp){ var input=wicketGet(elementId); if ((Wicket.Focus.getFocusedElement() != input) || !cfg.showListOnEmptyInput && (input.value==null || input.value=="")) { hideAutoComplete(); Wicket.Ajax.invokePostCallHandlers(); hideIndicator(); return; } var element = getAutocompleteMenu(); element.innerHTML=resp; if(element.firstChild && element.firstChild.childNodes) { elementCount=element.firstChild.childNodes.length; var clickFunc = function(event){ mouseactive=0; var value = getSelectedValue(); if(value = handleSelection(value)) { wicketGet(elementId).value=value; if (typeof objonchange=="function") {objonchange.apply(wicketGet(elementId), [event]);} } hideAutoComplete(); }; var mouseOverFunc = function(event){ selected = getElementIndex(this); render(); showAutoComplete(); }; var parentNode = element.firstChild; for(var i = 0;i < elementCount; i++) { var node = parentNode.childNodes[i]; node.onclick = clickFunc; node.onmouseover = mouseOverFunc; } } else { elementCount=0; } if(elementCount>0){ if(cfg.preselect==true){ selected = 0; } showAutoComplete(); } else { hideAutoComplete(); } render(); scheduleEmptyCheck(); Wicket.Log.info("Response processed successfully."); Wicket.Ajax.invokePostCallHandlers(); hideIndicator(); } function scheduleEmptyCheck() { window.setTimeout(function() { var input=wicketGet(elementId); if (!cfg.showListOnEmptyInput && (input.value==null || input.value=="")) { hideAutoComplete(); } }, 100); } function getSelectedValue(){ var element=getAutocompleteMenu(); var attr=element.firstChild.childNodes[selected].attributes['textvalue']; var value; if (attr==undefined) { value=element.firstChild.childNodes[selected].innerHTML; } else { value=attr.value; } return stripHTML(value); } function getElementIndex(element) { for(var i=0;i]+>/g,""); } function adjustScrollOffset(menu, item) { if (item.offsetTop + item.offsetHeight > menu.scrollTop + menu.offsetHeight) { menu.scrollTop = item.offsetTop + item.offsetHeight - menu.offsetHeight; } else if (item.offsetTop < menu.scrollTop) { menu.scrollTop = item.offsetTop; } } function render(){ var menu=getAutocompleteMenu(); var height=0; var node=menu.firstChild.childNodes[0]; var re = /\bselected\b/gi; for(var i=0;i -1) && (height < cfg.maxHeight)) height+=node.offsetHeight; node = node.nextSibling; } if (cfg.maxHeight > -1) { if (initialDelta == -1) initialDelta = menu.parentNode.offsetHeight - height; height = heightacRightX) || (rightXacBottomY) || (bottomY