(function(a){a.fn.autoSuggest=function(f,c){var i={asHtmlID:false,allowArbitrary:true,startText:"Enter Name Here",emptyText:"No Results Found",showEmptyText:true,preFill:{},limitText:"No More Selections Are Allowed",selectedItemProp:"value",selectedValuesProp:"value",searchObjProps:"value",queryParam:"q",retrieveLimit:false,extraParams:"",matchCase:false,minChars:1,keyDelay:400,resultsHighlight:true,neverSubmit:false,selectionLimit:false,showResultList:true,start:function(){},selectionClick:function(j){},selectionAdded:function(j){},selectionRemoved:function(j){j.remove()},formatList:false,beforeRetrieve:function(j){return j},retrieveComplete:function(j){return j},resultClick:function(j){},resultsComplete:function(){},singleSelectionOnly:false};var e=a.extend(i,c);var d="object";var h=0;if(typeof f=="string"){d="string";var b=f}else{var g=f;for(k in f){if(f.hasOwnProperty(k)){h++}}}if((d=="object"&&h>0)||d=="string"){return this.each(function(z){if(!e.asHtmlID){z=z+""+Math.floor(Math.random()*100);var l="as-input-"+z}else{z=e.asHtmlID;var l=z}e.start.call(this);var B=a(this);B.attr("autocomplete","off").addClass("as-input").attr("id",l).val(e.startText);B.bind("reset",function(){B.val(e.startText);if(!e.singleSelectionOnly){while(u.prev().is("li")){var x=J.val().split(",");x=x[x.length-2];J.val(J.val().replace(x+",",""));e.selectionRemoved.call(this,u.prev())}}});var F=false;if(!e.singleSelectionOnly){B.wrap('<ul class="as-selections" id="as-selections-'+z+'"></ul>').wrap('<li class="as-original" id="as-original-'+z+'"></li>');var G=a("#as-selections-"+z);var u=a("#as-original-"+z)}var n=a('<div class="as-results" id="as-results-'+z+'"></div>').hide();var o=a('<ul class="as-list"></ul>');var J=a('<input type="hidden" class="as-values" name="as_values_'+z+'" id="as-values-'+z+'" />');var t="";if(typeof e.preFill=="string"){var C=e.preFill.split(",");for(var H=0;H<C.length;H++){var m={};m[e.selectedValuesProp]=C[H];if(C[H]!=""){I(m,"000"+H)}}t=e.preFill}else{t="";var K=0;for(k in e.preFill){if(e.preFill.hasOwnProperty(k)){K++}}if(K>0){for(var H=0;H<K;H++){var D=e.preFill[H][e.selectedValuesProp];if(D==undefined){D=""}t=t+D+",";if(D!=""){I(e.preFill[H],"000"+H)}}}}if(t!=""){B.val("");var A=t.substring(t.length-1);if(A!=","){t=t+","}J.val(","+t);a("li.as-selection-item",G).addClass("blur").removeClass("selected")}B.after(J);if(!e.singleSelectionOnly){G.click(function(){F=true;B.focus()}).mousedown(function(){F=false}).after(n)}else{B.after(n)}var w=null;var E="";var p=0;var q=false;B.focus(function(){if(a(this).val()==e.startText&&J.val()==""){a(this).val("")}else{if(F){if(!e.singleSelectionOnly){a("li.as-selection-item",G).removeClass("blur");if(a(this).val()!=""){o.css("width",G.outerWidth());n.show()}}}}F=true;return true}).blur(function(){if(a(this).val()==""&&J.val()==""&&t==""){a(this).val(e.startText)}else{if(F){a("li.as-selection-item",G).addClass("blur").removeClass("selected");n.hide()}}});if(a.browser.opera){B.keypress(y)}else{B.keydown(y)}function y(P){lastKeyPressCode=P.keyCode;first_focus=false;switch(P.keyCode){case 38:P.preventDefault();v("up");break;case 40:P.preventDefault();v("down");break;case 8:if(!e.singleSelectionOnly){if(B.val()==""){var L=J.val().split(",");L=L[L.length-2];G.children().not(u.prev()).removeClass("selected");if(u.prev().hasClass("selected")){J.val(J.val().replace(L+",",""));e.selectionRemoved.call(this,u.prev())}else{e.selectionClick.call(this,u.prev());u.prev().addClass("selected")}}if(B.val().length==1){n.hide();E=""}}if(a(":visible",n).length>0){if(w){clearTimeout(w)}w=setTimeout(function(){j()},e.keyDelay)}break;case 9:case 188:q=true;var O=a("li.active:first",n);var N=B.val().replace(/(,)/g,"");if(N!=""&&O.length==0&&J.val().search(","+N+",")<0&&N.length>=e.minChars&&e.allowArbitrary){P.preventDefault();var M={};M[e.selectedItemProp]=N;M[e.selectedValuesProp]=N;var x=a("li",G).length;I(M,"00"+(x+1));B.val("");n.hide();if(e.neverSubmit||O.length>0){P.preventDefault()}break}else{if(O.length==0){break}}case 13:q=false;var O=a("li.active:first",n);if(O.length>0){O.click().removeClass("active");n.hide()}if(e.neverSubmit||O.length>0){P.preventDefault()}break;default:if(e.showResultList){if(e.selectionLimit&&a("li.as-selection-item",G).length>=e.selectionLimit){o.html('<li class="as-message">'+e.limitText+"</li>");P.preventDefault()}else{if(w){clearTimeout(w)}w=setTimeout(function(){j()},e.keyDelay)}}break}}function j(){if(lastKeyPressCode==46||(lastKeyPressCode>8&&lastKeyPressCode<32)){return n.hide()}var L=B.val().replace(/[\\]+|[\/]+/g,"");if(L==E){return}E=L;if(L.length>=e.minChars){if(!e.singleSelectionOnly){G.addClass("loading")}if(d=="string"){var x="";if(e.retrieveLimit){x="&limit="+encodeURIComponent(e.retrieveLimit)}if(e.beforeRetrieve){L=e.beforeRetrieve.call(this,L)}a.getJSON(b+"?"+e.queryParam+"="+encodeURIComponent(L)+x+e.extraParams,function(N){h=0;var M=e.retrieveComplete.call(this,N);for(k in M){if(M.hasOwnProperty(k)){h++}}r(M,L)})}else{if(e.beforeRetrieve){L=e.beforeRetrieve.call(this,L)}r(g,L)}}else{if(!e.singleSelectionOnly){G.removeClass("loading")}n.hide()}}var s=0;function r(N,T){if(!e.matchCase){T=T.toLowerCase()}var V=0;n.html(o.html("")).hide();for(var O=0;O<h;O++){var P=O;s++;var Q=false;if(e.searchObjProps=="value"){var R=N[P].value}else{var R="";var S=e.searchObjProps.split(",");for(var U=0;U<S.length;U++){var x=a.trim(S[U]);R=R+N[P][x]+" "}}if(R){if(!e.matchCase){R=R.toLowerCase()}if(R.search(T)!=-1&&J.val().search(","+N[P][e.selectedValuesProp]+",")==-1){Q=true}}if(Q){var M=a('<li class="as-result-item" id="as-result-item-'+P+'"></li>').click(function(){var Z=a(this).data("data");var X=Z.num;if(a("#as-selection-"+X,G).length<=0&&!q){var Y=Z.attributes;B.val("").focus();E="";I(Y,X);e.resultClick.call(this,Z);n.hide()}q=false}).mousedown(function(){F=false}).mouseover(function(){a("li",o).removeClass("active");a(this).addClass("active")}).data("data",{attributes:N[P],num:s});var W=a.extend({},N[P]);if(!e.matchCase){var L=new RegExp("(?![^&;]+;)(?!<[^<>]*)("+T+")(?![^<>]*>)(?![^&;]+;)","gi")}else{var L=new RegExp("(?![^&;]+;)(?!<[^<>]*)("+T+")(?![^<>]*>)(?![^&;]+;)","g")}if(e.resultsHighlight){W[e.selectedItemProp]=W[e.selectedItemProp].replace(L,"<em>$1</em>")}if(!e.formatList){M=M.html(W[e.selectedItemProp])}else{M=e.formatList.call(this,W,M)}o.append(M);delete W;V++;if(e.retrieveLimit&&e.retrieveLimit==V){break}}}if(!e.singleSelectionOnly){G.removeClass("loading")}if(V<=0){if(e.showEmptyText){o.html('<li class="as-message">'+e.emptyText+"</li>")}}if(!e.singleSelectionOnly){o.css("width",G.outerWidth())}n.show();e.resultsComplete.call(this)}function I(M,x){J.val(J.val()+M[e.selectedValuesProp]+",");var L=a('<li class="as-selection-item" id="as-selection-'+x+'"></li>').click(function(){e.selectionClick.call(this,a(this));G.children().removeClass("selected");a(this).addClass("selected")}).mousedown(function(){F=false});var N=a('<a class="as-close">&times;</a>').click(function(){J.val(J.val().replace(M[e.selectedValuesProp]+",",""));e.selectionRemoved.call(this,L);F=true;B.focus();return false});if(!e.singleSelectionOnly){u.before(L.html("<span>"+M[e.selectedItemProp]+"</span>").append(N));e.selectionAdded.call(this,u.prev())}}function v(M){if(a(":visible",n).length>0){var x=a("li",n);if(M=="down"){var N=x.eq(0)}else{var N=x.filter(":last")}var L=a("li.active:first",n);if(L.length>0){if(M=="down"){N=L.next()}else{N=L.prev()}}x.removeClass("active");N.addClass("active")}}})}}})(jQuery);
