(function(n){typeof define=="function"&&define.amd?define(["knockout","jquery","jquery.ui"],n):n(window.ko,jQuery)})(function(n,t){var i=function(){var i=this,r=n.utils.unwrapObservable;this.init=function(u,f,e,o,s){var a,v,h=r(f()),c={},y=typeof h.filter=="function"?h.filter:i.defaultFilter,l;n.utils.extend(c,i.options);n.utils.extend(c,h.options);c.source=typeof h.source!="function"||n.isObservable(h.source)?i.processOptions.bind(i,f,y,h.source):function(n,t){var r=function(r){i.processOptions(f,null,r,n,t)};h.source.call(s.$data,n.term,r)};a=typeof c.select=="function"&&c.select;v=typeof c.change=="function"&&c.change;c.select=function(t,i){i.item&&i.item.actual&&(h.value(i.item.actual),n.isWriteableObservable(h.dataValue)&&h.dataValue(i.item.data));a&&a.apply(this,arguments)};c.change=function(t,i){i.item&&i.item.actual||(h.value(t.target&&t.target.value),n.isWriteableObservable(h.dataValue)&&h.dataValue(null));v&&v.apply(this,arguments)};l=t(u).autocomplete(c).data("ui-autocomplete");h.template&&(l._renderItem=i.renderItem.bind(i,h.template,s));n.utils.domNodeDisposal.addDisposeCallback(u,function(){l&&typeof l.destroy=="function"&&(l.destroy(),l=null)})};this.update=function(u,f){var o,s,h=r(f()),e=r(h&&h.value);(e||e===0)&&(s=r(h.source),o=i.getPropertyNames(f),t.isArray(s)&&o.value&&(e=n.utils.arrayFirst(s,function(n){return n[o.value]==e})||e),u.value=o.input&&e&&typeof e=="object"?e[o.input]:e)};this.defaultFilter=function(t,i){return i=i&&i.toLowerCase(),(t||t===0)&&n.toJSON(t).toLowerCase().indexOf(i)>-1};this.processOptions=function(n,t,i,u,f){for(var e,c=r(i)||[],l=[],o=this.getPropertyNames(n),s=0,h=c.length;s<h;s++)e=c[s],(!t||t(e,u.term))&&l.push({label:o.label?e[o.label]:e.toString(),value:o.input?e[o.input]:e.toString(),actual:o.value?e[o.value]:e,data:e});f(l)};this.renderItem=function(i,r,u,f){var e=t("<li><\/li>").appendTo(u),o=r.createChildContext(f.data);n.applyBindingsToNode(e[0],{template:i},o);e.one("remove",n.cleanNode.bind(n,e[0]));return e};this.getPropertyNames=function(t){var i=n.toJS(t());return{label:i.labelProp||i.valueProp,input:i.inputProp||i.labelProp||i.valueProp,value:i.valueProp}};this.options={autoFocus:!0,delay:50}};n.bindingHandlers.jqAuto=new i})