﻿/*!
* jQuery auto complete search ext. v1.1
* Studentum AB
*/
(function(b){b.keyCodes={enter:13,tab:9,keyUp:38,keyDown:40,esc:27};b.autoCompleteSearch=function(d,a){function k(){var c=e.find("li:not(."+a.groupCssClass+")").index(e.find("li."+a.listItemActiveCssClass));return c==-1||h==null||h.length==0?null:h[c]}function q(c){var d=e.find("li:not(."+a.groupCssClass+")"),b=d.index(e.find("li."+a.listItemActiveCssClass));d.removeClass(a.listItemActiveCssClass);if(b==-1&&c==1)b=0;else if(b==-1&&c==-1)return;else b+=c;b==-1&&c==-1?b=a.cycleList?d.length-1:b+1:b== d.length&&c==1&&(b=a.cycleList?0:b-1);m(b)}function m(c){e.find("li:not(."+a.groupCssClass+"):eq("+c+")").addClass(a.listItemActiveCssClass);o(e)}function r(){var c=k();if(c&&(d.val(c.name.replace(/\&nbsp;/gi," ")),i.val(c.value||""),a.onSelectedCallback))a.onSelectedCallback(c,d);e.hide();a.autoPostback||d.blur()}function s(){d.val().length>=a.minSearchLength?t():e.hide()}function u(){var c=b('<input type="hidden" />'),a=String.format("{0}_value",d.attr("id"));c.attr("name",a);c.attr("id",a);d.parent().append(c)} function o(c){var b=d.position(),e=d.css("padding-bottom");e&&e.replace("px","");var g=d.css("padding-left"),g=g?g.replace("px",""):0,e=d.height(),g=d.width()+parseInt(g)*2+2;c.css({left:b.left,top:b.top+e+1,width:String.format("{0}px",a.fixedWidth?a.fixedWidth:g)})}function t(){b.getJSON(String.format(a.jsonUrl,d.val()),function(a){var b=[];a.SuggestionGroups?b=a.SuggestionGroups:b.push({Type:null,Suggestions:a.Suggestions});for(var a=[],d=0;d<b.length;d++)for(var e=b[d],f=0;f<e.Suggestions.length;f++){var h= e.Suggestions[f];a.push({name:h.Value,value:h.ID,type:h.Type,group:e.Type})}v(a)})}function v(c){e.empty();o(e);h=c;var j=null,c=RegExp(String.format("({0})",d.val()),"i");if(h!=null&&h.length>0){for(var i=b("<ul />"),g=0;g<h.length;g++){var f=h[g];if(f.group&&h[g].group!=j){j=a.resources[f.group];if(!j)j=f.group;j=b('<li style="font-weight:normal;color:#666;font-size:11px;background-color:#D8D8D8;padding-left:2px;" />').html(j).addClass(a.groupCssClass);i.append(j)}var j=f.group,l=b('<li style="color:#000;" />'); l.addClass(a.listItemCssClass);g<h.length-1&&f.group!=h[g+1].group&&l.css("padding-bottom","2px");f=h[g].name.replace(/\&amp;/gi,"&");f=f.substring(0,1).toUpperCase()+f.substring(1);a.boldOnMatch&&(f=f.replace(c,"<b>$1</b>"));if(a.fixedWidth){f=b("<span>").html(f);f.cropTextToWidth(a.fixedWidth-10,{extraCss:[{name:"font-family",value:"Arial"},{name:"font-size",value:"9pt"}]});var k=f.find("span");k.length>0&&a.boldOnMatch&&k.html(k.html().replace(c,"<b>$1</b>"));f=f.html()}g==0&&a.helpText&&(f=String.format("{0}{1}{2}{3}", '<div style="float:right;">',a.helpText,"</div>",f));l.html(f);l.hover(function(){n=!0;e.find("li").removeClass(a.listItemActiveCssClass);b(this).addClass(a.listItemActiveCssClass);m(g)},function(){n=!1;b(this).removeClass(a.listItemActiveCssClass)});l.click(function(a){a.stopPropagation();a.preventDefault();m(g);n=!1;r()});i.append(l)}e.append(i);e.show();a.selectFirstItem&&m(0)}else a.noItemsFoundText?(e.text(a.noItemsFoundText),e.show()):e.hide()}var h=[],p,n=!1,e=function(){var c=b("<div />").addClass(a.listCssClass).css("position", "absolute").hide();o(c);d.parent().append(c);return c}();a.createHiddenField&&u();var i=b(String.format("#{0}_value",d.attr("id")));d.addClass(a.inputCssClass);d.attr("autocomplete","off");d.blur(function(){n||(!k()&&a.createHiddenField&&!i.val()&&!a.allowNoMatch&&d.val(""),a.createHiddenField&&!d.val()&&i.val(""),e.hide())});d.keyup(function(c){c=c.keyCode;c!=b.keyCodes.esc&&c!=b.keyCodes.tab&&c!=b.keyCodes.enter&&c!=b.keyCodes.keyUp&&c!=b.keyCodes.keyDown&&(a.searchDelay&&b(this).val().length>a.minSearchLength? (p&&clearTimeout(p),p=setTimeout(function(){s()},a.searchDelay)):s())});d.keydown(function(c){d.unbind("keypress");switch(c.keyCode){case b.keyCodes.esc:e.find("li").removeClass(a.listItemActiveCssClass);i.val("");e.hide();break;case b.keyCodes.tab:case b.keyCodes.enter:r();c.preventDefault();if(a.onTabEnterCallback)a.onTabEnterCallback(k(),d);a.autoPostback&&(a.sendFormWithNoValue||i.val())&&d.closest("form").submit();break;case b.keyCodes.keyUp:c.preventDefault();q(-1);break;case b.keyCodes.keyDown:c.preventDefault(), q(1)}})};b.fn.autoCompleteSearch=function(d){var a={inputCssClass:"autoCompleteSearch",listCssClass:"autoCompleteSearchList",listItemCssClass:"autoCompleteSearchListItem",listItemActiveCssClass:"autoCompleteSearchListItemActive",groupCssClass:"autoCompleteSearchGroup",resources:{},noItemsFoundText:null,helpText:"",allowNoMatch:!1,boldOnMatch:!1,cycleList:!1,createHiddenField:!1,searchDelay:100,autoPostback:!1,sendFormWithNoValue:!0,selectFirstItem:!0,onSelectedCallback:null,onTabEnterCallback:null, minSearchLength:2,maxItems:25,wsUrl:null,wsMethod:null,fixedWidth:null,wsParameters:{},formatUrl:function(){return String.format("{0}/{1}",this.wsUrl,this.wsMethod)},jsonUrl:null};d&&b.extend(a,d);this.each(function(){b.autoCompleteSearch(b(this),a)});return this}})(jQuery);
