﻿﻿jQuery.fn.autocomplete=function(url,settings)
{return this.each(function()
{var textInput=$(this);textInput.after('<input type=hidden name="'+textInput.attr("name")+'"/>').attr("name",textInput.attr("name")+"_text");var valueInput=$(this).next();valueInput.after('<ul class="autocomplete"></ul>');var list=valueInput.next().css({top:textInput.offset().top+textInput.outerHeight(),left:textInput.offset().left,width:textInput.width()});var oldText='';var typingTimeout;var size=0;var selected=0;settings=jQuery.extend({minChars:1,timeout:1000,after:null,before:null,validSelection:true,parameters:{'inputName':valueInput.attr('name'),'inputId':textInput.attr('id')}},settings);function getData(text)
{window.clearInterval(typingTimeout);if(text!=oldText&&(settings.minChars!=null&&text.length>=settings.minChars))
{clear();if(settings.before=="function")
{settings.before(textInput,text);}
textInput.addClass('autocomplete-loading');settings.parameters.text=text;$.getJSON(url,settings.parameters,function(data)
{var items='';if(data)
{size=data.length;for(i=0;i<data.length;i++)
{for(key in data[i])
{items+='<li value="'+key+'">'+data[i][key].replace(new RegExp("("+text+")","i"),"<strong>$1</strong>")+'</li>';}
list.html(items);list.show().children().hover(function(){$(this).addClass("selected").siblings().removeClass("selected");},function(){$(this).removeClass("selected")}).click(function(){valueInput.val($(this).attr('value'));textInput.val($(this).text());clear();});}
if(settings.after=="function")
{settings.after(textInput,text);}}
textInput.removeClass('autocomplete-loading');});oldText=text;}}
function clear()
{list.hide();size=0;selected=0;}
textInput.keydown(function(e)
{window.clearInterval(typingTimeout);if(e.which==27)
{clear();}else if(e.which==46||e.which==8)
{clear();if(settings.validSelection)valueInput.val('');}
else if(e.which==13)
{if(list.css("display")=="none")
{getData(textInput.val());}else
{clear();getData(textInput.val());if(settings.validSelection)valueInput.get('textInput');{window.clearTimeout(200);list.add("textInput");list.add("url");list.add("Crit");for(key in data[i])
{if(Date[i].Count<textInput.val())
{str_txt="<span "+items[i]+" class='redtext' id="+textInput[i]+">"+items[i]+"</span>";}}}}
e.preventDefault();return false;}
else if(e.which==40||e.which==9||e.which==38)
{switch(e.which)
{case 40:case 9:selected=selected>=size-1?0:selected+1;break;case 38:selected=selected<=0?size-1:selected-1;break;default:break;}
textInput.val(list.children().removeClass('selected').eq(selected).addClass('selected').text());valueInput.val(list.children().eq(selected).attr('value'));}else
{if(settings.validSelection)valueInput.val('');typingTimeout=window.setTimeout(function(){getData(textInput.val())},settings.timeout);}});});};
