jQuery.fn.selectbox=function(options){var settings={className:"jquery-selectbox",animationSpeed:"normal",listboxMaxSize:10,replaceInvisible:false};var commonClass="jquery-custom-selectboxes-replaced";var listOpen=false;var showList=function(listObj){var selectbox=listObj.parents("."+settings.className+"");listObj.slideDown(settings.animationSpeed,function(){listOpen=true});selectbox.addClass("selecthover");jQuery(document).bind("click",onBlurList);return listObj};var hideList=function(listObj){var selectbox=listObj.parents("."+settings.className+"");listObj.slideUp(settings.animationSpeed,function(){listOpen=false;jQuery(this).parents("."+settings.className+"").removeClass("selecthover")});jQuery(document).unbind("click",onBlurList);return listObj};var onBlurList=function(e){var trgt=e.target;var currentListElements=jQuery("."+settings.className+"-list:visible").parent().find("*").andSelf();if(jQuery.inArray(trgt,currentListElements)<0&&listOpen){hideList(jQuery("."+commonClass+"-list"))}return false};settings=jQuery.extend(settings,options||{});return this.each(function(){var _this=jQuery(this);if(_this.filter(":visible").length==0&&!settings.replaceInvisible){return}var replacement=jQuery('<div class="'+settings.className+" "+commonClass+'"><div class="'+settings.className+'-moreButton" /><div class="'+settings.className+"-list "+commonClass+'-list" /><span class="'+settings.className+'-currentItem" /></div>');jQuery("option",_this).each(function(k,v){var v=jQuery(v);var listElement=jQuery('<span class="'+settings.className+"-item value-"+v.val()+" item-"+k+'">'+v.text()+"</span>");listElement.click(function(){var thisListElement=jQuery(this);var thisReplacment=thisListElement.parents("."+settings.className);var thisIndex=thisListElement[0].className.split(" ");for(k1 in thisIndex){if(/^item-[0-9]+$/.test(thisIndex[k1])){thisIndex=parseInt(thisIndex[k1].replace("item-",""),10);break}}var thisValue=thisListElement[0].className.split(" ");for(k1 in thisValue){if(/^value-.+$/.test(thisValue[k1])){thisValue=thisValue[k1].replace("value-","");break}}thisReplacment.find("."+settings.className+"-currentItem").text(thisListElement.text());thisReplacment.find("select").val(thisValue).triggerHandler("change");var thisSublist=thisReplacment.find("."+settings.className+"-list");if(thisSublist.filter(":visible").length>0){hideList(thisSublist)}else{showList(thisSublist)}}).bind("mouseenter",function(){jQuery(this).addClass("listelementhover")}).bind("mouseleave",function(){jQuery(this).removeClass("listelementhover")});jQuery("."+settings.className+"-list",replacement).append(listElement);if(v.filter(":selected").length>0){jQuery("."+settings.className+"-currentItem",replacement).text(v.text())}});replacement.find("."+settings.className+"-moreButton").click(function(){var thisMoreButton=jQuery(this);var otherLists=jQuery("."+settings.className+"-list").not(thisMoreButton.siblings("."+settings.className+"-list"));hideList(otherLists);var thisList=thisMoreButton.siblings("."+settings.className+"-list");if(thisList.filter(":visible").length>0){hideList(thisList)}else{showList(thisList)}}).bind("mouseenter",function(){jQuery(this).addClass("morebuttonhover")}).bind("mouseleave",function(){jQuery(this).removeClass("morebuttonhover")});_this.hide().replaceWith(replacement).appendTo(replacement);var thisListBox=replacement.find("."+settings.className+"-list");var thisListBoxSize=thisListBox.find("."+settings.className+"-item").length;if(thisListBoxSize>settings.listboxMaxSize){thisListBoxSize=settings.listboxMaxSize}if(thisListBoxSize==0){thisListBoxSize=1}var thisListBoxWidth=Math.round(_this.width()+5);if(jQuery.browser.safari){thisListBoxWidth=thisListBoxWidth*0.94}replacement.css("width",thisListBoxWidth+"px");thisListBox.css({width:Math.round(thisListBoxWidth-5)+"px",height:3+"em"})})};jQuery.fn.unselectbox=function(){var commonClass="jquery-custom-selectboxes-replaced";return this.each(function(){var selectToRemove=jQuery(this).filter("."+commonClass);selectToRemove.replaceWith(selectToRemove.find("select").show())})};(function($){$.suggest=function(input,options){var t=this;t.input=input;t.options=options;t.$input=$(input).attr("autocomplete","off");t.$results=$(document.createElement("ul"));t.currentItem=-1;t.items=false;t.timeout=false;t.prevLength=-1;t.cache=[];t.cacheSize=0;t.$results.addClass(t.options.resultsClass).appendTo("body");t.resetPosition();$(window).load(function(){t.resetPosition()}).resize(function(){t.resetPosition()});t.$input.blur(function(){setTimeout(function(){t.hideResults()},200)});try{t.$results.bgiframe()}catch(e){}if($.browser.mozilla){t.$input.keypress(function(e){t.processKey(e)})}else{t.$input.keydown(function(e){t.processKey(e)})}};$.extend($.suggest.prototype,{addMatchClass:function(txt,q){return txt.replace(new RegExp(q,"ig"),'<span class="'+this.options.matchClass+'">$&</span>')},resetPosition:function(){var offset=this.$input.offset();this.$results.css({top:(offset.top+this.input.offsetHeight)+"px",left:offset.left+"px"})},processKey:function(e){if((/27$|38$|40$/.test(e.keyCode)&&this.$results.is(":visible"))||(/^13$|^9$/.test(e.keyCode)&&this.currentItem>=0)){if(e.preventDefault){e.preventDefault()}if(e.stopPropagation){e.stopPropagation()}e.cancelBubble=true;e.returnValue=false;switch(e.keyCode){case 38:this.selectItem(this.currentItem-1);break;case 40:this.selectItem(this.currentItem+1);break;case 9:case 13:this.selectCurrentItem();break;case 27:this.hideResults();break}}else{if(this.$input.val().length!=this.prevLength){var t=this;if(t.timeout){clearTimeout(t.timeout)}t.timeout=setTimeout(function(){t.suggest()},t.options.delay);t.prevLength=t.$input.val().length}}},suggest:function(){var q=$.trim(this.$input.val());if(q.length>=this.options.minchars){cached=this.checkCache(q);if(cached){this.items=cached.items;this.displayItems(q)}else{var t=this;var newurl=t.options.source;var selection=$("#default-usage-select").val();newurl=newurl+"/selection:"+selection;if(this.xhr){this.xhr.abort();}this.xhr=$.get(newurl,{q:q},function(txt){t.hideResults();t.items=t.options.createItems?t.options.createItems.call(this,txt):txt.split(t.options.delimiter);t.displayItems(q);t.addToCache(q,txt.length)})}}else{this.hideResults()}},checkCache:function(q){for(var i=0;i<this.cache.length;i++){if(this.cache[i]["q"]==q){this.cache.unshift(this.cache.splice(i,1)[0]);return this.cache[0]}}return false},addToCache:function(q,size){while(this.cache.length&&(this.cacheSize+size>this.options.maxCacheSize)){var cached=this.cache.pop();this.cacheSize-=cached.size}this.cache.push({q:q,size:size,items:this.items});this.cacheSize+=size},displayItems:function(q){var t=this;if(!t.items){return}var html="";for(var i=0;i<t.items.length;i++){var item=t.options.formatItem?t.options.formatItem.call(t,t.items[i],q):t.formatItem(t.items[i],q);if(!item){t.items.splice(i,1)}else{html+=item}}if(!t.items.length){t.hideResults();return}this.resetPosition();t.$results.html(html).show().children().mouseover(function(){var $items=t.$results.children();for(var i=0;i<$items.length;i++){if($items[i]==this){break}}t.selectItem(i)}).click(function(e){t.selectCurrentItem();return false})},formatItem:function(txt,q){txt=$.trim(txt);if(txt){return"<li>"+this.addMatchClass(txt,q)+"</li>"}return false},hideResults:function(){this.$results.hide();this.currentItem=-1},selectItem:function(i){if(i<0){i=this.items.length-1}if(i>=this.items.length){i=0}this.currentItem=i;this.$results.children().removeClass(this.options.selectClass).eq(i).addClass(this.options.selectClass)},selectCurrentItem:function(){if(this.currentItem>=0){var item=this.currentItem;this.$input.val(this.options.selectItemText?this.options.selectItemText.call(this,this.items[item]):this.$results.children().eq(item).text());this.hideResults();if(this.options.onSelect){this.options.onSelect.call(this.$input[0],this.items[item])}}}});$.fn.suggest=function(source,options){if(!source){return}options=$.extend({delay:100,resultsClass:"ac_results",selectClass:"ac_over",matchClass:"ac_match",minchars:2,delimiter:"\n",createItems:false,formatItem:false,selectItemText:false,onSelect:false,maxCacheSize:65536},options);options.source=source;this.each(function(){new $.suggest(this,options)});return this}})(jQuery);
