/**
 * JQuery Searchable DropDown Plugin
 * 
 * @required jQuery 1.3.x
 * @author Sascha Wolski <hagman@gmx.de>
 * $Id: jquery.searchabledropdown.js 34 2009-12-08 21:37:57Z xhaggi $
 * 
 * Based up on the AddIncSearch plugin published by Tobias Oetiker
 * http://plugins.jquery.com/project/AddIncSearch
 */
(function($){var B=register("searchable");B.defaults={maxListSize:100,maxMultiMatch:50,exactMatch:false,wildcards:true,ignoreCase:true,warnMultiMatch:"top {0} matches ...",warnNoMatch:"no matches ...",latency:200,observing:true,observingInterval:200,zIndex:"auto"};B.execute=function(f){if($.browser.msie&&parseInt(jQuery.browser.version)<7)return this;if(this.nodeName!="SELECT"||this.size>1)return this;var g=$(this);var h={index:-1,options:null};$.browser.chrome=/chrome/.test(navigator.userAgent.toLowerCase());if($.browser.chrome)$.browser.safari=false;if($.meta){f=$.extend({},options,g.data())}g.css("text-decoration","none");g.width(g.outerWidth());g.height(g.outerHeight());g.data("index",new Number(g.get(0).selectedIndex));var j=$("<option>"+f.warnMultiMatch.replace(/\{0\}/g,f.maxMultiMatch)+"</option>").attr("disabled","true");var k=$("<option>"+f.warnNoMatch+"</option>").attr("disabled","true");var l=$("<div/>");l.css({"position":"absolute","width":g.outerWidth(),"height":g.outerHeight(),"background-color":"#FFFFFF","opacity":"0.01"});var m=$("<input/>");m.attr("type","text");m.hide();m.css({"position":"absolute","margin":0,"padding":0,"outline-style":"none","border-style":"solid","border-bottom-style":"none","border-color":"transparent","background-color":"transparent"});m.width(g.innerWidth()-30);m.height(g.outerHeight());var n=new Array();n.push("border-left-width");n.push("border-top-width");n.push("font-size");n.push("font-stretch");n.push("font-variant");n.push("font-weight");n.push("color");n.push("text-align");n.push("text-indent");n.push("text-shadow");n.push("text-transform");n.push("padding-left");n.push("padding-top");for(var i=0;i<n.length;i++)m.css(n[i],g.css(n[i]));if($.browser.msie&&parseInt(jQuery.browser.version)<8){m.css("padding","0px");m.css("padding-left","3px");m.css("border-left-width","2px");m.css("border-top-width","3px")}else if($.browser.chrome){m.height(g.innerHeight());m.css("text-transform","none");m.css("padding-left",parseInt(/([0-9]+)px/.exec(m.css("padding-left"))[1])+3);m.css("padding-top",2)}else if($.browser.safari){m.height(g.innerHeight());m.css("padding-top",2);m.css("padding-left",3);m.css("text-transform","none")}else if($.browser.opera){m.height(g.innerHeight());var o=parseInt(/([0-9]+)px/.exec(g.css("padding-left"))[1]);m.css("padding-left",o==1?o+1:o);m.css("padding-top",0)}else{m.css("padding-left",parseInt(/([0-9]+)px/.exec(g.css("padding-left"))[1])+3);m.css("padding-top",parseInt(/([0-9]+)px/.exec(g.css("padding-top"))[1])+1)}var w=g.css("width");var p=g.outerWidth();g.css("width","auto");var p=p>g.outerWidth()?p:g.outerWidth();g.css("width",w);var q=$("<select />");q.attr("size",Math.min(g.get(0).length,20));q.hide();q.css({"position":"absolute","width":p,"border":"1px solid #333","font-weight":"normal","padding":0,"background-color":g.css("background-color"),"text-transform":g.css("text-transform")});var r=/^\d+$/.test(g.css("z-index"))?g.css("z-index"):1;if(f.zIndex&&/^\d+$/.test(f.zIndex))r=f.zIndex;l.css("z-index",(r).toString(10));m.css("z-index",(r+1).toString(10));q.css("z-index",(r+2).toString(10));function position(){var a=g.offset();l.css({top:a.top,left:a.left});m.css({top:a.top,left:a.left});q.css({top:a.top+g.outerHeight(),left:a.left})};g.resize(position);$(window).resize(position);position();loadDefaults();g.after(l);g.after(m);g.after(q);var s=false;$(l).mouseover(function(){s=true});$(l).mouseout(function(){s=false});$(q).mouseover(function(){s=true});$(q).mouseout(function(){s=false});m.click(function(e){if(!t){enable(e,true)}else{disable(e,true)}});g.keydown(function(e){if(e.keyCode!=9)enable(e,false,true)});g.click(function(e){q.focus()});q.click(function(e){if(q.get(0).selectedIndex<0)return;synchronize();disable(e)});q.focus(function(e){m.focus()});q.blur(function(e){if(!s)disable(e,true)});q.mousemove(function(e){if($.browser.opera&&parseFloat(jQuery.browser.version)>=9.8)return true;var a=Math.floor(parseFloat(/([0-9\.]+)px/.exec($(q.get(0).options[0]).css("font-size"))));var b=4;if($.browser.opera)b=2.5;if($.browser.safari||$.browser.chrome)b=3;a+=Math.round(a/b);q.get(0).selectedIndex=Math.floor((e.pageY-this.offsetTop+this.scrollTop)/a)});var t=false;l.click(function(e){if(!t){enable(e,true)}else{disable(e,true)}});m.keyup(function(e){if(jQuery.inArray(e.keyCode,new Array(9,13,16,33,34,35,36,38,40))>-1)return true;A=$.trim(m.val().toLowerCase());if(y!=null)clearTimeout(y);y=setTimeout(searching,f.latency)});m.keydown(function(e){if(e.shiftKey||e.ctrlKey||e.altKey)return;switch(e.keyCode){case 9:disable(e);moveTab(g,e.shiftKey?-1:1);break;case 13:disable(e);g.focus();break;case 27:disable(e,true);g.focus();break;case 33:if(q.get(0).selectedIndex-q.get(0).size>0){q.get(0).selectedIndex-=q.get(0).size}else{q.get(0).selectedIndex=0}synchronize();break;case 34:if(q.get(0).selectedIndex+q.get(0).size<q.get(0).options.length-1){q.get(0).selectedIndex+=q.get(0).size}else{q.get(0).selectedIndex=q.get(0).options.length-1}synchronize();break;case 38:if(q.get(0).selectedIndex>0){q.get(0).selectedIndex--;synchronize()}break;case 40:if(q.get(0).selectedIndex<q.get(0).options.length-1){q.get(0).selectedIndex++;synchronize()}break;default:return true}return false});function enable(e,a,v){if(g.attr("disabled"))return false;if(typeof v=="undefined")t=!t;synchronize();store();var b=g.find(":selected");g.data("text",b.text());b.text("");m.show();m.focus();m.select();if(a)q.show();if(typeof e!="undefined")e.stopPropagation()};function disable(e,a){t=false;if(y!=null)clearTimeout(y);g.find(":selected").text(g.data("text"));m.hide();q.hide();if(typeof a!="undefined")restore();if(typeof a=="undefined")populate();if(typeof e!="undefined")e.stopPropagation()};function populate(){u=false;if(q.get(0).selectedIndex<0||q.get(0).options[q.get(0).selectedIndex].disabled){u=true;return}g.get(0).selectedIndex=parseInt($(q.get(0).options[q.get(0).selectedIndex]).attr("lang"));g.change();g.data("index",new Number(g.get(0).selectedIndex));u=true};var u=true;if(f.observing){var x=window.setInterval(observe,f.observingInterval)}function observe(){if(u&&g.get(0).selectedIndex!=g.data("index")){g.data("index",new Number(g.get(0).selectedIndex));loadDefaults()}};function synchronize(){if(q.get(0).selectedIndex>-1&&!q.get(0).options[q.get(0).selectedIndex].disabled)m.val(g.get(0).options[parseInt($(q.get(0).options[q.get(0).selectedIndex]).attr("lang"))].text);else m.val(g.get(0).options[g.get(0).selectedIndex].text)};function store(){h.index=q.get(0).selectedIndex;h.options=new Array();for(var i=0;i<q.get(0).options.length;i++)h.options.push(q.get(0).options[i])};function restore(){q.empty();q.attr("size",Math.max(2,Math.min(h.options.length,20)));for(var i=0;i<h.options.length;i++)q.append(h.options[i]);q.get(0).selectedIndex=h.index};function loadDefaults(){var a=Math.floor(f.maxMultiMatch/2);var b=Math.max(0,(g.get(0).selectedIndex-a));var c=Math.min(g.get(0).length,Math.max(f.maxMultiMatch,(g.get(0).selectedIndex+a)));var d=g.get(0).selectedIndex-b;q.empty();for(var i=b;i<c;i++)q.append($(g.get(0).options[i]).clone().attr("lang",i));if(g.get(0).length>f.maxMultiMatch)q.append(j);q.get(0).selectedIndex=d};function moveTab(a,b){var c=a.parents("form,body").eq(0).find("button,input[type!=hidden],textarea,select");var d=c.index(a);if(d>-1&&d+b<c.length&&d+b>=0){c.eq(d+b).focus();return true}return false};function escapeRegExp(a){var b=["/",".","*","+","?","|","(",")","[","]","{","}","\\","^","$"];var c=new RegExp("(\\"+b.join("|\\")+")","g");return a.replace(c,"\\$1")};var y=null;var z;var A;function searching(){if(z==A){y=null;return}var a=0;z=A;q.hide();q.empty();var b=escapeRegExp(A);if(f.exactMatch)b="^"+b;if(f.wildcards){b=b.replace(/\\\*/g,".*");b=b.replace(/\\\?/g,".")}var c;if(f.ignoreCase)c="i";A=new RegExp(b,c);for(var i=0;i<g.get(0).length&&a<f.maxMultiMatch;i++){if(A.length==0||A.test(g.get(0).options[i].text)){var d=$(g.get(0).options[i]).clone().attr("lang",i);if(g.data("index")==i)d.text(g.data("text"));q.append(d);a++}}if(a>=1){q.get(0).selectedIndex=0}else if(a==0){q.append(k)}if(a>=f.maxMultiMatch){q.append(j)}q.attr("size",Math.max(2,Math.min(a,20)));q.show();y=null};return};function register(b){var c=$[b]={};$.fn[b]=function(a){a=$.extend(c.defaults,a);return this.each(function(){c.execute.call(this,a)})};return c}})(jQuery);
