(function($){$.fn.tokenInput=function(url,options){var settings=$.extend({url:url,hintText:"Type in a search term",noResultsText:"No results",searchingText:"Searching...",searchDelay:300,minChars:1,tokenLimit:null,jsonContainer:null,method:"GET",contentType:"json",queryParam:"q",onResult:null},options);settings.classes=$.extend({tokenList:"token-input-list",token:"token-input-token",tokenDelete:"token-input-delete-token",selectedToken:"token-input-selected-token",highlightedToken:"token-input-highlighted-token", dropdown:"token-input-dropdown",dropdownItem:"token-input-dropdown-item",dropdownItem2:"token-input-dropdown-item2",selectedDropdownItem:"token-input-selected-dropdown-item",inputToken:"token-input-input-token"},options.classes);return this.each(function(){var list=new $.TokenList(this,settings)})};$.TokenList=function(input,settings){var POSITION={BEFORE:0,AFTER:1,END:2};var KEY={BACKSPACE:8,TAB:9,RETURN:13,ESC:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,COMMA:188};var saved_tokens=[];var token_count=0;var cache= new $.TokenList.Cache;var timeout;var input_box=$('').css({outline:"none"}).focus(function(){if(settings.tokenLimit==null||settings.tokenLimit!=token_count)show_dropdown_hint()}).blur(function(){hide_dropdown()}).keydown(function(event){var previous_token;var next_token;switch(event.keyCode){case KEY.LEFT:case KEY.RIGHT:case KEY.UP:case KEY.DOWN:if(!$(this).val()){previous_token=input_token.prev();next_token=input_token.next();if(previous_token.length&&previous_token.get(0)===selected_token|| next_token.length&&next_token.get(0)===selected_token)if(event.keyCode==KEY.LEFT||event.keyCode==KEY.UP)deselect_token($(selected_token),POSITION.BEFORE);else deselect_token($(selected_token),POSITION.AFTER);else if((event.keyCode==KEY.LEFT||event.keyCode==KEY.UP)&&previous_token.length)select_token($(previous_token.get(0)));else if((event.keyCode==KEY.RIGHT||event.keyCode==KEY.DOWN)&&next_token.length)select_token($(next_token.get(0)))}else{var dropdown_item=null;if(event.keyCode==KEY.DOWN||event.keyCode== KEY.RIGHT)dropdown_item=$(selected_dropdown_item).next();else dropdown_item=$(selected_dropdown_item).prev();if(dropdown_item.length)select_dropdown_item(dropdown_item);return false}break;case KEY.BACKSPACE:previous_token=input_token.prev();if(!$(this).val().length){if(selected_token)delete_token($(selected_token));else if(previous_token.length)select_token($(previous_token.get(0)));return false}else if($(this).val().length==1)hide_dropdown();else setTimeout(function(){do_search(false)},5);break; case KEY.TAB:case KEY.RETURN:case KEY.COMMA:if(selected_dropdown_item){add_token($(selected_dropdown_item));return false}break;case KEY.ESC:hide_dropdown();return true;default:if(is_printable_character(event.keyCode))setTimeout(function(){do_search(false)},5);break}});var hidden_input=$(input).hide().focus(function(){input_box.focus()}).bind("change_url",function(event,url){settings.url=url}).blur(function(){input_box.blur()});var selected_token=null;var selected_dropdown_item=null;var token_list= $("
"+ li_data[i].name+"
"+value+"
"+settings.searchingText+"
").show()}function show_dropdown_hint(){dropdown.html(""+settings.hintText+"
").show()}function highlight_term(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term+")(?![^<>]*>)(?![^&;]+;)","gi"),"$1")}function populate_dropdown(query,results){if(results.length){dropdown.empty();var dropdown_ul=$(""+settings.noResultsText+"
").show()}function select_dropdown_item(item){if(item){if(selected_dropdown_item)deselect_dropdown_item($(selected_dropdown_item));item.addClass(settings.classes.selectedDropdownItem);selected_dropdown_item=item.get(0)}}function deselect_dropdown_item(item){item.removeClass(settings.classes.selectedDropdownItem);selected_dropdown_item=null}function do_search(immediate){var query=input_box.val().toLowerCase();if(query&& query.length){if(selected_token)deselect_token($(selected_token),POSITION.AFTER);if(query.length>=settings.minChars){show_dropdown_searching();if(immediate)run_search(query);else{clearTimeout(timeout);timeout=setTimeout(function(){run_search(query)},settings.searchDelay)}}else hide_dropdown()}}function run_search(query){var cached_results=cache.get(query);if(cached_results)populate_dropdown(query,cached_results);else{var queryStringDelimiter=settings.url.indexOf("?")<0?"?":"&";var callback=function(results){if($.isFunction(settings.onResult))results= settings.onResult.call(this,results);cache.add(query,settings.jsonContainer?results[settings.jsonContainer]:results);populate_dropdown(query,settings.jsonContainer?results[settings.jsonContainer]:results)};var form=$(input_box).parents("form:first");var data={};if(form.length)data=$.J.form.extract(form);if(settings.method=="POST")$.post(settings.url+queryStringDelimiter+settings.queryParam+"="+query,$.toJSON(data),callback,settings.contentType);else $.get(settings.url+queryStringDelimiter+settings.queryParam+ "="+query,data,callback,settings.contentType)}}};$.TokenList.Cache=function(options){var settings=$.extend({max_size:50},options);var data={};var size=0;var flush=function(){data={};size=0};this.add=function(query,results){if(size>settings.max_size)flush();if(!data[query])size++;data[query]=results};this.get=function(query){return data[query]}}})(jQuery);