/*
  jQuery-SelectBox
  
  Traditional select elements are very difficult to style by themselves, 
  but they are also very usable and feature rich. This plugin attempts to 
  recreate all selectbox functionality and appearance while adding 
  animation and stylability.
  
  This product includes software developed 
  by RevSystems, Inc (http://www.revsystems.com/) and its contributors
  
  Please see the accompanying LICENSE.txt for licensing information.
*/
(function(d){d.fn.borderWidth=function(){return d(this).outerWidth()-d(this).innerWidth()};d.fn.paddingWidth=function(){return d(this).innerWidth()-d(this).width()};d.fn.extraWidth=function(){return d(this).outerWidth(true)-d(this).width()};d.fn.offsetFrom=function(g){var f=d(g);return{left:d(this).offset().left-f.offset().left,top:d(this).offset().top-f.offset().top}};d.fn.maxWidth=function(){var f=0;d(this).each(function(){if(d(this).width()>f){f=d(this).width()}});return f};d.fn.triggerAll=function(f,g){return d(this).each(function(){d(this).triggerHandler(f,g)})};var c=Array.prototype.slice,a=function(){return Math.floor(Math.random()*999999999)};d.proto=function(){var g=arguments[0],f=arguments[1],h=f,j={},i;opts=d.extend({elem:"elem",access:"access",init:"init",instantAccess:false},arguments[2]);if(f._super){j[opts.init]=function(){};h=f.extend(j)}d.fn[g]=function(){var k,l=arguments;d(this).each(function(){var n=d(this),o=n.data(g),m=!o;if(m){o=new h();if(f._super){o[opts.init]=f.prototype.init}o[opts.elem]=n[0];if(o[opts.init]){o[opts.init].apply(o,opts.instantAccess?[]:c.call(l,0))}n.data(g,o)}if(!m||opts.instantAccess){if(o[opts.access]){o[opts.access].apply(o,c.call(l,0))}if(l.length>0){if(d.isFunction(o[l[0]])){k=o[l[0]].apply(o,c.call(l,1))}else{if(l.length===1){if(d.getObject){k=d.getObject(l[0],o)}else{k=o[l[0]]}}else{if(d.setObject){d.setObject(l[0],l[1],o)}else{o[l[0]]=l[1]}}}}else{if(k===i){k=n.data(g)}}}});if(k===i){return d(this)}return k}};var b=function(){return false},e=function(){var l=this,P={},i=null,y=null,q=null,r=null,h=null,W=null,R="",B=null,Q=null,O,U,j,Z,n,X,T,H,V,s,Y,N,L,G,u,v,f,S,M,E,D,K,C,J,z,x,g,I,k,w,A,t,p,m,F;O=function(){q=d("<div class='sb "+P.selectboxClass+" "+i.attr("class")+"' id='sb"+a()+"'></div>").attr("role","listbox").attr("aria-has-popup","true").attr("aria-labelledby",y.attr("id")?y.attr("id"):"");d("body").append(q);var aa=i.children().size()>0?P.displayFormat.call(i.find("option:selected")[0],0,0):"&nbsp;";r=d("<div class='display "+i.attr("class")+"' id='sbd"+a()+"'></div>").append("<div class='text'>"+aa+"</div>").append(P.arrowMarkup);q.append(r);h=d("<ul class='"+P.selectboxClass+" items "+i.attr("class")+"' role='menu' id='sbdd"+a()+"'></ul>").attr("aria-hidden","true");q.append(h).attr("aria-owns",h.attr("id"));if(i.children().size()===0){h.append(U())}else{i.children().each(function(ab){var ac,ad,ae,af;if(d(this).is("optgroup")){ad=d(this);ae=d("<li class='optgroup'>"+P.optgroupFormat.call(ad[0],ab+1)+"</li>").addClass(ad.is(":disabled")?"disabled":"").attr("aria-disabled",ad.is(":disabled")?"true":"");af=d("<ul class='items'></ul>");ae.append(af);h.append(ae);ad.children("option").each(function(){ac=U(d(this),ab).addClass(ad.is(":disabled")?"disabled":"").attr("aria-disabled",ad.is(":disabled")?"true":"");af.append(ac)})}else{h.append(U(d(this),ab))}})}W=h.find("li").not(".optgroup");q.attr("aria-active-descendant",W.filter(".selected").attr("id"));h.children(":first").addClass("first");h.children(":last").addClass("last");if(!P.fixedWidth){var o=h.find(".text, .optgroup").maxWidth()+r.extraWidth()+1;q.width(P.maxWidth?Math.min(P.maxWidth,o):o)}else{if(P.maxWidth&&q.width()>P.maxWidth){q.width(P.maxWidth)}}i.before(q).addClass("has_sb").hide().show();Y();F();h.hide();if(!i.is(":disabled")){i.bind("blur.sb",Z).bind("focus.sb",j);r.mousedown(E).mousedown(N).click(b).focus(v).blur(f).hover(S,M);J().click(L).hover(S,M);h.find(".optgroup").hover(S,M).click(b);W.filter(".disabled").click(b)}else{q.addClass("disabled").attr("aria-disabled");r.click(function(ab){ab.preventDefault()})}q.bind("close.sb",s).bind("destroy.sb",n);i.bind("reload.sb",X);if(d.fn.tie&&P.useTie){i.bind("domupdate.sb",T)}};U=function(ab,o){if(!ab){ab=d("<option value=''>&nbsp;</option>");o=0}var ad=d("<li id='sbo"+a()+"'></li>").attr("role","option").data("orig",ab[0]).data("value",ab?ab.attr("value"):"").addClass(ab.is(":selected")?"selected":"").addClass(ab.is(":disabled")?"disabled":"").attr("aria-disabled",ab.is(":disabled")?"true":""),ac=d("<div class='item'></div>"),aa=d("<div class='text'></div>").html(P.optionFormat.call(ab[0],0,o+1));return ad.append(ac.append(aa))};j=function(){p();r.triggerHandler("focus")};Z=function(){r.triggerHandler("blur")};n=function(){q.remove();i.unbind(".sb").removeClass("has_sb").removeData(l.id)};X=function(){var aa=q.is(".open"),o=r.is(".focused");s(true);n();l.init(P);if(aa){i.focus();H(true)}else{if(o){i.focus()}}};T=function(){clearTimeout(Q);Q=setTimeout(X,30)};t=function(){s();d(document).unbind("click",t)};w=function(){d(".sb.open."+P.selectboxClass).triggerAll("close")};p=function(){d(".sb.focused."+P.selectboxClass).not(q[0]).find(".display").blur()};A=function(){d(".sb.open."+P.selectboxClass).not(q[0]).triggerAll("close")};s=function(o){if(q.is(".open")){r.blur();W.removeClass("hover");d(document).unbind("keyup",G).unbind("keydown",m).unbind("keypress",m).unbind("keydown",u);h.attr("aria-hidden","true");if(o===true){h.hide();q.removeClass("open");q.append(h)}else{h.fadeOut(P.animDuration,function(){q.removeClass("open");q.append(h)})}}};K=function(){var o=null;if(P.ddCtx==="self"){o=q}else{if(d.isFunction(P.ddCtx)){o=d(P.ddCtx.call(i[0]))}else{o=d(P.ddCtx)}}return o};C=function(){return W.filter(".selected")};J=function(){return W.not(".disabled")};V=function(){h.scrollTop(h.scrollTop()+C().offsetFrom(h).top-h.height()/2+C().outerHeight(true)/2)};F=function(){if(d.browser.msie&&d.browser.version<8){d("."+P.selectboxClass+" .display").hide().show()}};H=function(aa){var o,ab=K();p();q.addClass("open");ab.append(h);o=Y();h.attr("aria-hidden","false");if(aa===true){h.show();V()}else{if(o==="down"){h.slideDown(P.animDuration,V)}else{h.fadeIn(P.animDuration,V)}}d(document).click(t);i.focus()};Y=function(){var ab=K(),ai=0,aa=r.offsetFrom(ab).left,o=0,ad="",ah,ag,ac,aj,af,ae;h.removeClass("above");h.show().css({maxHeight:"none",position:"relative",visibility:"hidden"});if(!P.fixedWidth){h.width(r.outerWidth()-h.extraWidth()+1)}ah=d(window).scrollTop()+d(window).height()-r.offset().top-r.outerHeight();ag=r.offset().top-d(window).scrollTop();ac=r.offsetFrom(ab).top+r.outerHeight();aj=ah-ag+P.dropupThreshold;if(h.outerHeight()<ah){ai=P.maxHeight?P.maxHeight:ah;o=ac;ad="down"}else{if(h.outerHeight()<ag){ai=P.maxHeight?P.maxHeight:ag;o=r.offsetFrom(ab).top-Math.min(ai,h.outerHeight());ad="up"}else{if(aj>=0){ai=P.maxHeight?P.maxHeight:ah;o=ac;ad="down"}else{if(aj<0){ai=P.maxHeight?P.maxHeight:ag;o=r.offsetFrom(ab).top-Math.min(ai,h.outerHeight());ad="up"}else{ai=P.maxHeight?P.maxHeight:"none";o=ac;ad="down"}}}}af=d().jquery>="1.4.2"?parseInt(d("body").css("margin-left")):d("body").offset().left;ae=d().jquery>="1.4.2"?parseInt(parseInt(d("body").css("margin-left"))):d("body").offset().top;h.hide().css({left:aa+(ab.is("body")?af:0),maxHeight:ai,position:"absolute",top:o+(ab.is("body")?ae:0),visibility:"visible"});if(ad==="up"){h.addClass("above")}return ad};N=function(o){if(q.is(".open")){s()}else{H()}return false};z=function(){var aa=d(this),o=i.val(),ab=aa.data("value");i.find("option").removeAttr("selected");d(aa.data("orig")).attr("selected","selected");J().removeClass("selected");aa.addClass("selected");q.attr("aria-active-descendant",aa.attr("id"));r.find(".text").attr("title",aa.find(".text").html());r.find(".text").html(P.displayFormat.call(aa.data("orig")));if(o!==ab){i.change()}};L=function(o){z.call(this);t();i.focus();return false};x=function(){R=""};g=function(ad){var ac,ab,o,aa=J();for(ac=0;ac<aa.size();ac++){o=aa.eq(ac).find(".text");ab=o.children().size()==0?o.text():o.find("*").text();if(ad.length>0&&ab.toLowerCase().match("^"+ad.toLowerCase())){return aa.eq(ac)}}return null};I=function(aa){var o=g(aa);if(o!==null){z.call(o[0]);return true}return false};m=function(o){if(o.ctrlKey||o.altKey){return}if(o.which===38||o.which===40||o.which===8||o.which===32){o.preventDefault()}};k=function(ad){var ac,ab,o=C(),aa=J();for(ac=aa.index(o)+1;ac<aa.size();ac++){ab=aa.eq(ac).find(".text").text();if(ab!==""&&ab.substring(0,1).toLowerCase()===ad.toLowerCase()){z.call(aa.eq(ac)[0]);return true}}return false};u=function(ab){if(ab.altKey||ab.ctrlKey){return false}var aa=C(),o=J();switch(ab.which){case 35:if(aa.size()>0){ab.preventDefault();z.call(o.filter(":last")[0]);V()}break;case 36:if(aa.size()>0){ab.preventDefault();z.call(o.filter(":first")[0]);V()}break;case 38:if(aa.size()>0){if(o.filter(":first")[0]!==aa[0]){ab.preventDefault();z.call(o.eq(o.index(aa)-1)[0])}V()}break;case 40:if(aa.size()>0){if(o.filter(":last")[0]!==aa[0]){ab.preventDefault();z.call(o.eq(o.index(aa)+1)[0]);V()}}else{if(W.size()>1){ab.preventDefault();z.call(W.eq(0)[0])}}break;default:break}};G=function(o){if(o.altKey||o.ctrlKey){return false}if(o.which!==38&&o.which!==40){R+=String.fromCharCode(o.keyCode);if(I(R)){clearTimeout(B);B=setTimeout(x,P.acTimeout)}else{if(k(String.fromCharCode(o.keyCode))){V();clearTimeout(B);B=setTimeout(x,P.acTimeout)}else{x();clearTimeout(B)}}}};v=function(){A();q.addClass("focused");d(document).unbind("keyup",G).keyup(G).unbind("keypress",m).keypress(m).unbind("keydown",m).keydown(m).keydown(u).unbind("keydown",u).keydown(u)};f=function(){q.removeClass("focused");d(document).unbind("keyup",G).unbind("keydown",m).unbind("keydown",u)};S=function(){d(this).addClass("hover")};M=function(){d(this).removeClass("hover")};E=function(){r.addClass("active");d(document).bind("mouseup",D)};D=function(){r.removeClass("active");d(document).unbind("mouseup",D)};this.init=function(o){if(d.browser.msie&&d.browser.version<7){return}i=d(this.elem);if(i.attr("id")){y=d("label[for='"+i.attr("id")+"']:first")}if(!y||y.size()===0){y=i.closest("label")}if(i.hasClass("has_sb")){return}P=d.extend({acTimeout:800,animDuration:200,ddCtx:"body",dropupThreshold:150,fixedWidth:false,maxHeight:false,maxWidth:false,selectboxClass:"selectbox",useTie:false,arrowMarkup:"<div class='arrow_btn'><span class='arrow'></span></div>",displayFormat:undefined,optionFormat:function(aa,ac){if(d(this).size()>0){var ab=d(this).attr("label");if(ab&&ab.length>0){return ab}return d(this).text()}else{return""}},optgroupFormat:function(aa){return"<span class='label'>"+d(this).attr("label")+"</span>"}},o);P.displayFormat=P.displayFormat||P.optionFormat;O()};this.open=H;this.close=s;this.refresh=X;this.destroy=n;this.options=function(o){P=d.extend(P,o);X()}};d.proto("sb",e)}(jQuery));
