/*! User Modifiable Combobox - v0.1.0 - 2012-10-03 * https://github.com/luv2code/MomboBox * Copyright (c) 2012 Matthew Taylor; Licensed MIT, GPL */ (function(e,t){var n={data:[],templates:{buttonTemplate:'',itemTemplate:'{item}',menuTemplate:'
',render:function(e,t,n){return e.replace("{"+n+"}",t)}},cssClasses:{matchingItem:"match",selectedItem:"selected",item:"item",menu:"mombomenu"},flags:{customItems:!0,addCustomItems:!0,hideUnmatchedItems:!0,prependCustom:!0}},r=t.define;e.fn.momboBox=function(r){return this.each(function(){if(this.nodeName!=="INPUT")throw new Error("the momboBox plugin only works on input elements");var i=this.momboBox=e.extend(!0,{},n,r),s="",o,u=e(this),a=u.val(),f=u.val,l=e(i.templates.buttonTemplate).insertAfter(u),c,h=function(){s="",e.each(i.data,function(e,t){s+=i.templates.render(i.templates.itemTemplate,t,"item")}),c.empty(),o=e(s).appendTo(c)},p=function(){var t,n=new RegExp("("+u.val()+")","i");return u.val()?(o.each(function(r,s){var o=e(s),a=o.text();n.test(a)?(o.addClass(i.cssClasses.matchingItem),a.toLowerCase()===u.val().toLowerCase()&&(t=o)):o.removeClass(i.cssClasses.matchingItem)}),t=t||o.siblings("."+i.cssClasses.matchingItem).first(),t.length>0&&(c.scrollTop(t.position().top),t.addClass(i.cssClasses.selectedItem))):o.removeClass(i.cssClasses.matchingItem),t},d=function(e){var t=i.flags.prependCustom?"unshift":"push";i.data[t](e),i.update()};i.update=function(){h(),p()},i.getPosition=function(){var e=u.offset(),t=u.outerHeight()+e.top,n=e.left;return{top:t,left:n}},u.val=function(e,t){return typeof e=="string"?(a=t?a:e,f.call(u,e)):f.call(u)},!i.flags.customItems&&!!i.data&&i.data.length>0&&u.val(i.data[0]),c=e(i.templates.menuTemplate).insertAfter(l).offset(i.getPosition()).on("click","."+i.cssClasses.item,function(t){u.val(e(t.target).text()),c.fadeOut("fast"),o.removeClass(i.cssClasses.matchingItem),u.trigger("changed",u.val())}).on("mouseover","."+i.cssClasses.item,function(t){o.removeClass(i.cssClasses.selectedItem),e(t.target).addClass(i.cssClasses.selectedItem)}).hide(),h(),e(document).on("click",function(){!u.is(":momboFocus")&&!l.is(":momboFocus")&&c.fadeOut("fast")}),l.on("click",function(){u.focus()}),u.on("added-custom",function(e,t){!e.isPropagationStopped()&&i.flags.addCustomItems&&d(t)}).on("click",function(){u.focus()}).on("focus",function(){c.show(),c.offset(i.getPosition()),t.setTimeout(function(){u.select()},0)}).on("keydown",function(t){var n=o.siblings("."+i.cssClasses.selectedItem),r=0,s=o.length-1,f,l,h;t.which!==27&&c.show(),n.toggleClass(i.cssClasses.selectedItem+" "+i.cssClasses.matchingItem);switch(t.which){case 38:n.length>0?o.each(function(t,u){u===n.get(0)&&(r=t===0?s:r,f=e(o[r]).addClass(i.cssClasses.selectedItem+" "+i.cssClasses.matchingItem).text(),l=e(o[r]).position().top),r=t}):(f=o.last().addClass(i.cssClasses.selectedItem+" "+i.cssClasses.matchingItem).text(),l=o.last().position().top),u.val(f,!0);break;case 40:n.length>0?o.each(function(t,u){r=t+1,u===n.get(0)&&(r=t===s?0:r,f=e(o[r]).addClass(i.cssClasses.selectedItem+" "+i.cssClasses.matchingItem).text(),l=e(o[r]).position().top)}):(f=o.last().addClass(i.cssClasses.selectedItem+" "+i.cssClasses.matchingItem).text(),l=o.first().position().top),u.val(f,!0);break;case 27:c.fadeOut("fast"),u.val(a);break;case 9:c.fadeOut("fast");break;case 13:h=p(),h.length>0?u.val(h.first().text()):i.flags.customItems?u.trigger("added-custom",[u.val()]):u.val(a),u.trigger("changed",u.val()),c.fadeOut("fast")}}).on("keyup",function(e){var t;p()})})},e.expr[":"].momboFocus=function(e){return e===document.activeElement&&(e.type||e.href)},typeof r=="function"&&r.amd&&r.amd.jQuery&&r(function(){})})(jQuery,window);