/*
  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(a){jQuery.fn.borderWidth=function(){return a(this).outerWidth()-a(this).innerWidth()};jQuery.fn.marginWidth=function(){return a(this).outerWidth(true)-a(this).outerWidth()};jQuery.fn.paddingWidth=function(){return a(this).innerWidth()-a(this).width()};jQuery.fn.extraWidth=function(){return a(this).outerWidth(true)-a(this).width()};jQuery.fn.offsetFrom=function(b){return{left:a(this).offset().left-b.offset().left,top:a(this).offset().top-b.offset().top}};jQuery.fn.maxWidth=function(){var b=0;a(this).each(function(){if(a(this).width()>b){b=a(this).width()}});return b};jQuery.fn.sb=function(b){if(a.browser.msie&&a.browser.version<7){return a(this)}b=a.extend({acTimeout:800,animDuration:300,ddCtx:"body",dropupThreshold:150,fixedWidth:false,maxHeight:false,maxWidth:false,selectboxClass:"selectbox",useTie:false,arrowMarkup:"<span class='arrow_btn'><span class='interior'><span class='arrow'></span></span></span>",displayFormat:function(){var c=a(this).attr("label");if(a.trim(c)!=""){return c}return a(this).text()},optionFormat:function(c,e){var d=a(this).attr("label");if(a.trim(d)!=""){return d}return a(this).text()},optgroupFormat:function(c){return"<span class='label'>"+a(this).attr("label")+"</span>"}},b);a(this).each(function(){var f=a(this);var j=null;var k=null;var e=null;var J=null;if(f.hasClass("has_sb")){return}else{f.addClass("has_sb")}function D(){var M=f.children().size()>0?b.displayFormat.call(f.find("option:selected")[0],0,0):"&nbsp;";j=a("<div class='sb "+b.selectboxClass+" "+f.attr("class")+"'></div>");a("body").append(j);k=a("<a href='#' class='display "+f.attr("class")+"'><span class='value'>"+f.val()+"</span> <span class='text'>"+M+"</span>"+b.arrowMarkup+"</a>");j.append(k);e=a("<ul class='"+b.selectboxClass+" items "+f.attr("class")+"'></ul>");j.append(e);if(f.children().size()==0){var O=a("<li class='selected empty'><a href='#'><span class='value'></span><span class='text'>&nbsp;</span></a></li>");O.data("val","");e.append(O)}else{f.children().each(function(P){if(a(this).is("optgroup")){var Q=a(this);var R=a("<li class='optgroup'>"+b.optgroupFormat.call(Q[0],P+1)+"</li>");var T=a("<ul class='items'></ul>");R.append(T);e.append(R);Q.children("option").each(function(U){var V=a("<li class='"+(a(this).attr("selected")?"selected":"")+" "+(a(this).attr("disabled")?"disabled":"")+"'><a href='#'><span class='value'>"+a(this).attr("value")+"</span><span class='text'>"+b.optionFormat.call(this,0,P+1)+"</span></a></li>");V.data("val",a(this).attr("value"));T.append(V)})}else{var S=a("<li class='"+(a(this).attr("selected")?"selected":"")+" "+(a(this).attr("disabled")?"disabled":"")+"'><a href='#'><span class='value'>"+a(this).attr("value")+"</span><span class='text'>"+b.optionFormat.call(this,0,P+1)+"</span></a></li>");S.data("val",a(this).attr("value"));e.append(S)}})}J=e.find("li").not(".optgroup");e.children(":first").addClass("first");e.children(":last").addClass("last");f.hide();if(!b.fixedWidth){var N=j.find(".text, .optgroup").maxWidth()+k.extraWidth()+1;j.width(b.maxWidth?Math.min(b.maxWidth,N):N);if(a.browser.msie&&a.browser.version<=7){J.find("a").each(function(){a(this).css("width","100%").width(a(this).width()-a(this).paddingWidth()-a(this).borderWidth())})}}else{if(b.maxWidth&&j.width()>b.maxWidth){j.width(b.maxWidth)}}f.before(j);e.hide();if(!f.is(":disabled")){k.click(C).focus(p).blur(c).hover(G,A);J.not(".disabled").find("a").click(z);J.filter(".disabled").find("a").click(function(){return false});J.not(".disabled").hover(G,A);e.find(".optgroup").hover(G,A).click(function(){return false})}else{j.addClass("disabled");k.click(function(P){P.preventDefault()})}j.bind("close",m);j.bind("destroy",i);f.bind("reload",K);if(jQuery.fn.tie&&b.useTie){f.bind("domupdate",H)}f.focus(g)}function g(){k.focus();return false}var E=null;function H(){clearTimeout(E);E=setTimeout(K,30)}function K(){var N=j.is(".open");var M=k.is(".focused");B();i();D();if(N){k.focus();t()}else{if(M){k.focus()}}}function i(){j.unbind().find("*").unbind();j.remove();f.unbind("reload",K).unbind("domupdate",H).unbind("focus",g).removeClass("has_sb").show()}function w(){l();a(document).unbind("click",w)}function l(){a(".sb."+b.selectboxClass).each(function(){a(this).triggerHandler("close")})}function o(){a(".sb."+b.selectboxClass).not(j[0]).each(function(){a(this).triggerHandler("close")})}function m(){if(j.is(".open")){J.removeClass("hover");a(document).unbind("keyup",u);a(document).unbind("keydown",h);a(document).unbind("keydown",n);e.fadeOut(b.animDuration,function(){j.removeClass("open");j.append(e)})}}function B(){J.removeClass("hover");a(document).unbind("keyup",u);a(document).unbind("keydown",h);e.hide();j.removeClass("open");j.append(e)}function x(){var M=null;if(b.ddCtx=="self"){M=j}else{if(a.isFunction(b.ddCtx)){M=a(b.ddCtx.call(f[0]))}else{M=a(b.ddCtx)}}return M}function I(){e.scrollTop(e.scrollTop()+J.filter(".selected").offsetFrom(e).top-e.height()/2+J.filter(".selected").outerHeight(true)/2)}function v(){var N=x();l();j.addClass("open");var M=L();N.append(e);if(a.browser.msie&&a.browser.version<8){a("."+b.selectboxClass+" .display").hide().show()}if(M=="up"){e.fadeIn(b.animDuration,I)}else{if(M=="down"){e.slideDown(b.animDuration,I)}else{e.fadeIn(b.animDuration,I)}}a(document).click(w);k.focus()}function t(){var N=x();l();j.addClass("open");var M=L();N.append(e);if(a.browser.msie&&a.browser.version<8){a("."+b.selectboxClass+" .display").hide().show()}e.show();I();a(document).click(w);k.focus()}function L(){var O=x();var V=0;var N=k.offsetFrom(O).left;var M=0;var Q="";e.removeClass("above");e.css({display:"block",maxHeight:"none",position:"relative",visibility:"hidden"});if(!b.fixedWidth){e.width(k.outerWidth()-e.extraWidth()+1)}var U=a(window).scrollTop()+a(window).height()-k.offset().top-k.outerHeight();var T=k.offset().top-a(window).scrollTop();var P=k.offsetFrom(O).top+k.outerHeight();var W=U-T+b.dropupThreshold;if(e.outerHeight()<U){V=b.maxHeight?b.maxHeight:U;M=P;Q="down"}else{if(e.outerHeight()<T){V=b.maxHeight?b.maxHeight:T;M=k.offsetFrom(O).top-Math.min(V,e.outerHeight());Q="up"}else{if(W>=0){V=b.maxHeight?b.maxHeight:U;M=P;Q="down"}else{if(W<0){V=b.maxHeight?b.maxHeight:T;M=k.offsetFrom(O).top-Math.min(V,e.outerHeight());Q="up"}else{V=b.maxHeight?b.maxHeight:"none";M=P;Q="down"}}}}var S=a().jquery<"1.4.2"?a("body").offset().left:parseInt(a("body").css("margin-left"));var R=a().jquery<"1.4.2"?a("body").offset().top:parseInt(a("body").css("margin-top"));e.css({display:"none",left:N+(O[0].tagName.toLowerCase()=="body"?S:0),maxHeight:V,position:"absolute",top:M+(O[0].tagName.toLowerCase()=="body"?R:0),visibility:"visible"});if(Q=="up"){e.addClass("above")}return Q}function C(M){var N=a(this).closest("."+b.selectboxClass);if(N.is(".open")){m()}else{k.focus();v()}return false}function r(){var N=a(this);k.find(".value").html(N.find(".value").html());k.find(".text").attr("title",N.find(".text").html());e.find("li").removeClass("selected");N.closest("li").addClass("selected");var M=f.val();var O=N.closest("li").data("val");f.val(O);k.find(".text").html(b.displayFormat.call(f.find("option:selected")[0]));if(M!=O){f.change()}}function z(M){r.call(this);w();k.focus();return false}var F="";var s=null;function q(){F=""}function d(P){var Q="";var O=J.not(".disabled");for(var N=0;N<O.size();N++){var M=O.eq(N).find(".text").text();Q+=M+" ";if(M.toLowerCase().match("^"+P.toLowerCase())==P.toLowerCase()){return O.eq(N)}}return null}function y(N){var M=d(N);if(M!=null){r.call(M[0]);return true}return false}function h(M){if(M.which==38||M.which==40||M.which==8||M.which==32){M.preventDefault()}}function n(N){if(N.altKey||N.ctrlKey){return false}var M=J.filter(".selected");switch(N.which){case 35:if(M.size()>0){N.preventDefault();r.call(J.not(".disabled").filter(":last")[0]);I()}break;case 36:if(M.size()>0){N.preventDefault();r.call(J.not(".disabled").filter(":first")[0]);I()}break;case 38:if(M.size()>0){if(J.not(".disabled").filter(":first")[0]!=M[0]){N.preventDefault();r.call(J.not(".disabled").eq(J.not(".disabled").index(M)-1)[0])}I()}break;case 40:if(M.size()>0){if(J.not(".disabled").filter(":last")[0]!=M[0]){N.preventDefault();r.call(J.not(".disabled").eq(J.not(".disabled").index(M)+1)[0]);I()}}else{if(J.size()>1){N.preventDefault();r.call(J.eq(0)[0])}}break;default:break}}function u(N){if(N.altKey||N.ctrlKey){return false}var M=J.filter(".selected");if(N.which!=38&&N.which!=40){F+=String.fromCharCode(N.keyCode);if(!y(F)){clearTimeout(s);q()}else{clearTimeout(s);s=setTimeout(q,b.acTimeout)}}}function p(){o();j.addClass("focused");a(document).unbind("keyup",u).keyup(u);a(document).unbind("keydown",h).keydown(h);a(document).unbind("keydown",n).keydown(n)}function c(){j.removeClass("focused");a(document).unbind("keyup",u);a(document).unbind("keydown",h);a(document).unbind("keydown",n)}function G(){a(this).addClass("hover")}function A(){a(this).removeClass("hover")}D()})}})(jQuery);
