(function(c){c.fn.extend({autocomplete:function(a,b){var i="string"==typeof a,b=c.extend({},c.Autocompleter.defaults,{url:i?a:null,data:i?null:a,delay:i?c.Autocompleter.defaults.delay:10,max:b&&!b.scroll?20:150},b);b.highlight=b.highlight||function(a){return a};b.formatMatch=b.formatMatch||b.formatItem;return this.each(function(){new c.Autocompleter(this,b)})},result:function(a){return this.bind("result",a)},search:function(a){return this.trigger("search",[a])},flushCache:function(){return this.trigger("flushCache")}, setOptions:function(a){return this.trigger("setOptions",[a])},unautocomplete:function(){return this.trigger("unautocomplete")}});c.Autocompleter=function(a,b){var i,p;function m(){var s=k.selected();if(!s)return!1;var f=s.result;o=f;if(b.multiple){var d=n(e.val());if(1<d.length){var j=b.multipleSeparator.length,h=c(a).selection().start,l,i=0;c.each(d,function(a,b){i+=b.length;if(h<=i)return l=a,!1;i+=j});d[l]=f;f=d.join(b.multipleSeparator)}f+=b.multipleSeparator}e.val(f);g();e.trigger("result",[s.data, s.value]);return!0}function l(a,c){if(t==i)k.hide();else{var f=e.val();if(c||f!=o)o=f,f=j(f),f.length>=b.minChars?(e.addClass(b.loadingClass),b.matchCase||(f=f.toLowerCase()),q(f,d,g)):(e.removeClass(b.loadingClass),k.hide())}}function n(a){return!a?[""]:!b.multiple?[c.trim(a)]:c.map(a.split(b.multipleSeparator),function(b){return c.trim(a).length?c.trim(b):null})}function j(f){if(!b.multiple)return f;var d=n(f);if(1==d.length)return d[0];d=c(a).selection().start;d=d==f.length?n(f):n(f.replace(f.substring(d), ""));return d[d.length-1]}function g(){k.visible();k.hide();clearTimeout(r);e.removeClass(b.loadingClass);b.mustMatch&&e.search(function(a){a||(b.multiple?(a=n(e.val()).slice(0,-1),e.val(a.join(b.multipleSeparator)+(a.length?b.multipleSeparator:""))):(e.val(""),e.trigger("result",null)))})}function d(d,h){if(h&&h.length&&f){e.removeClass(b.loadingClass);k.display(h,d);var i=h[0].value;b.autoFill&&j(e.val()).toLowerCase()==d.toLowerCase()&&t!=p&&(e.val(e.val()+i.substring(j(o).length)),c(a).selection(o.length, o.length+i.length));k.show()}else g()}function q(f,d,g){b.matchCase||(f=f.toLowerCase());var e=h.load(f);if(e&&e.length)d(f,e);else if("string"==typeof b.url&&0<b.url.length){var i={timestamp:+new Date};c.each(b.extraParams,function(a,f){i[a]="function"==typeof f?f():f});c.ajax({mode:"abort",port:"autocomplete"+a.name,dataType:b.dataType,url:b.url,data:c.extend({q:j(f),limit:b.max},i),success:function(a){var e;if(!(e=b.parse&&b.parse(a))){e=[];for(var a=a.split("\n"),g=0;g<a.length;g++){var j=c.trim(a[g]); j&&(j=j.split("|"),e[e.length]={data:j,value:j[0],result:b.formatResult&&b.formatResult(j,j[0])||j[0]})}}h.add(f,e);d(f,e)}})}else k.emptyList(),g(f)}i=46;p=8;var e=c(a).attr("autocomplete","off").addClass(b.inputClass),r,o="",h=c.Autocompleter.Cache(b),f=0,t,v={mouseDownOnSelect:!1},k=c.Autocompleter.Select(b,a,m,v),u;c.browser.opera&&c(a.form).bind("submit.autocomplete",function(){if(u)return u=!1});e.bind((c.browser.opera?"keypress":"keydown")+".autocomplete",function(a){f=1;t=a.keyCode;switch(a.keyCode){case 38:a.preventDefault(); k.visible()?k.prev():l(0,!0);break;case 40:a.preventDefault();k.visible()?k.next():l(0,!0);break;case 33:a.preventDefault();k.visible()?k.pageUp():l(0,!0);break;case 34:a.preventDefault();k.visible()?k.pageDown():l(0,!0);break;case b.multiple&&","==c.trim(b.multipleSeparator)&&188:case 9:case 13:if(m())return a.preventDefault(),u=!0,!1;break;case 27:k.hide();break;default:clearTimeout(r),r=setTimeout(l,b.delay)}}).focus(function(){f++}).blur(function(){f=0;v.mouseDownOnSelect||(clearTimeout(r),r= setTimeout(g,200))}).click(function(){1<f++&&!k.visible()&&l(0,!0)}).bind("search",function(){function a(b,d){var c;if(d&&d.length)for(var g=0;g<d.length;g++)if(d[g].result.toLowerCase()==b.toLowerCase()){c=d[g];break}"function"==typeof f?f(c):e.trigger("result",c&&[c.data,c.value])}var f=1<arguments.length?arguments[1]:null;c.each(n(e.val()),function(f,b){q(b,a,a)})}).bind("flushCache",function(){h.flush()}).bind("setOptions",function(a,f){c.extend(b,f);"data"in f&&h.populate()}).bind("unautocomplete", function(){k.unbind();e.unbind();c(a.form).unbind(".autocomplete")})};c.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:!1,matchSubset:!0,matchContains:!1,cacheLength:50,max:100,mustMatch:!1,extraParams:{},selectFirst:!0,formatItem:function(a){return a[0]},formatMatch:null,autoFill:!1,width:0,multiple:!1,multipleSeparator:", ",highlight:function(a,b){return a.replace(RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:!0,scrollHeight:180};c.Autocompleter.Cache=function(a){function b(b,c){a.matchCase||(b=b.toLowerCase());var d=b.indexOf(c);"word"==a.matchContains&&(d=b.toLowerCase().search("\\b"+c.toLowerCase()));return-1==d?!1:0==d||a.matchContains}function i(b,c){n>a.cacheLength&&m();l[b]||n++;l[b]=c}function p(){if(!a.data)return!1;var b={},g=0;if(!a.url)a.cacheLength=1;b[""]=[];for(var d=0,n=a.data.length;d<n;d++){var e=a.data[d],e="string"== typeof e?[e]:e,l=a.formatMatch(e,d+1,a.data.length);if(!1!==l){var o=l.charAt(0).toLowerCase();b[o]||(b[o]=[]);e={value:l,data:e,result:a.formatResult&&a.formatResult(e)||l};b[o].push(e);g++<a.max&&b[""].push(e)}}c.each(b,function(b,f){a.cacheLength++;i(b,f)})}function m(){l={};n=0}var l={},n=0;setTimeout(p,25);return{flush:m,add:i,populate:p,load:function(i){if(!a.cacheLength||!n)return null;if(!a.url&&a.matchContains){var g=[],d;for(d in l)if(0<d.length){var m=l[d];c.each(m,function(a,d){b(d.value, i)&&g.push(d)})}return g}if(l[i])return l[i];if(a.matchSubset)for(d=i.length-1;d>=a.minChars;d--)if(m=l[i.substr(0,d)])return g=[],c.each(m,function(a,d){b(d.value,i)&&(g[g.length]=d)}),g;return null}}};c.Autocompleter.Select=function(a,b,i,p){var m;function l(){r&&(o=c("<div/>").hide().addClass(a.resultsClass).css("position","absolute").appendTo(document.body),h=c("<ul/>").appendTo(o).mouseover(function(a){n(a).nodeName&&"LI"==n(a).nodeName.toUpperCase()&&(d=c("li",h).removeClass(m).index(n(a)), c(n(a)).addClass(m))}).click(function(a){c(n(a)).addClass(m);i();b.focus();return!1}).mousedown(function(){p.mouseDownOnSelect=!0}).mouseup(function(){p.mouseDownOnSelect=!1}),0<a.width&&o.css("width",a.width),r=!1)}function n(a){for(a=a.target;a&&"LI"!=a.tagName;)a=a.parentNode;return!a?[]:a}function j(b){g.slice(d,d+1).removeClass(m);d+=b;0>d?d=g.size()-1:d>=g.size()&&(d=0);b=g.slice(d,d+1).addClass(m);if(a.scroll){var c=0;g.slice(0,d).each(function(){c+=this.offsetHeight});c+b[0].offsetHeight- h.scrollTop()>h[0].clientHeight?h.scrollTop(c+b[0].offsetHeight-h.innerHeight()):c<h.scrollTop()&&h.scrollTop(c)}}m="ac_over";var g,d=-1,q,e="",r=!0,o,h;return{display:function(b,i){l();q=b;e=i;h.empty();for(var n=a.max&&a.max<q.length?a.max:q.length,k=0;k<n;k++)if(q[k]){var j=a.formatItem(q[k].data,k+1,n,q[k].value,e);!1!==j&&(j="stad"==j?c("<ul/>").html('<center><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#CC9933"><u><strong>Stad/gemeente</strong></u></font></center>').appendTo(h)[0]: "acc"==j?c("<ul/>").html('<center><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#CC9933"><u><strong>B&B/hotel</strong></u></font></center>').appendTo(h)[0]:"wk"==j?c("<ul/>").html('<center><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#CC9933"><u><strong>Thema Pagina</strong></u></font></center>').appendTo(h)[0]:c("<li/>").html(a.highlight(j,e)).addClass(0==k%2?"ac_even":"ac_odd").appendTo(h)[0],c.data(j,"ac_data",q[k]))}g=h.find("li");a.selectFirst&&(g.slice(0, 1).addClass(m),d=0);c.fn.bgiframe&&h.bgiframe()},next:function(){j(1)},prev:function(){j(-1)},pageUp:function(){0!=d&&0>d-8?j(-d):j(-8)},pageDown:function(){d!=g.size()-1&&d+8>g.size()?j(g.size()-1-d):j(8)},hide:function(){o&&o.hide();g&&g.removeClass(m);d=-1},visible:function(){return o&&o.is(":visible")},current:function(){return this.visible()&&(g.filter("."+m)[0]||a.selectFirst&&g[0])},show:function(){var d=c(b).offset();o.css({width:"string"==typeof a.width||0<a.width?a.width:c(b).width(),top:d.top+ b.offsetHeight,left:d.left}).show();if(a.scroll&&(h.scrollTop(0),h.css({maxHeight:a.scrollHeight,overflow:"auto"}),c.browser.msie&&"undefined"===typeof document.body.style.maxHeight)){var e=0;g.each(function(){e+=this.offsetHeight});d=e>a.scrollHeight;h.css("height",d?a.scrollHeight:e);d||g.width(h.width()-parseInt(g.css("padding-left"))-parseInt(g.css("padding-right")))}},selected:function(){var a=g&&g.filter("."+m).removeClass(m);return a&&a.length&&c.data(a[0],"ac_data")},emptyList:function(){h&& h.empty()},unbind:function(){o&&o.remove()}}};c.fn.selection=function(a,b){if(void 0!==a)return this.each(function(){if(this.createTextRange){var c=this.createTextRange();void 0===b||a==b?c.move("character",a):(c.collapse(!0),c.moveStart("character",a),c.moveEnd("character",b));c.select()}else if(this.setSelectionRange)this.setSelectionRange(a,b);else if(this.selectionStart)this.selectionStart=a,this.selectionEnd=b});var c=this[0];if(c.createTextRange){var p=document.selection.createRange(),m=c.value, l=p.text.length;p.text="<->";p=c.value.indexOf("<->");c.value=m;this.selection(p,p+l);return{start:p,end:p+l}}if(void 0!==c.selectionStart)return{start:c.selectionStart,end:c.selectionEnd}}})(jQuery);
