/*
  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:true,maxHeight:false,maxWidth:false,noScrollThreshold:100,selectboxClass:"selectbox",useTie:false,arrowMarkup:"<span class='arrow_btn'><span class='interior'><span class='arrow'></span></span></span>",optionFormat:function(c,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;function D(){j=a("<div class='"+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'>"+b.optionFormat.call(f.find("option:selected")[0],0,0)+"</span>"+b.arrowMarkup+"</a>");j.append(k);e=a("<ul class='items "+f.attr("class")+"'></ul>");j.append(e);f.children().each(function(N){if(a(this).is("optgroup")){var O=a(this);var P=a("<li class='optgroup'>"+b.optgroupFormat.call(O[0],N+1)+"</li>");var R=a("<ul class='items'></ul>");P.append(R);e.append(P);O.children("option").each(function(S){var T=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,N+1,S+1)+"</span></a></li>");T.data("val",a(this).attr("value"));R.append(T)})}else{var Q=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,N+1)+"</span></a></li>");Q.data("val",a(this).attr("value"));e.append(Q)}});J=e.find("li").not(".optgroup");e.children(":first").addClass("first");e.children(":last").addClass("last");f.hide();if(b.fixedWidth){var M=j.find(".text, .optgroup").maxWidth()+k.extraWidth()+1;j.width(b.maxWidth?Math.min(b.maxWidth,M):M);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(N){N.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).show()}function w(){l();a(document).unbind("click",w)}function l(){a("."+b.selectboxClass).trigger("close")}function o(){a("."+b.selectboxClass).not(j[0]).trigger("close")}function m(){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 N=x();var U=0;var M=0;var P="";e.removeClass("above");e.css({display:"block",maxHeight:"none",position:"relative",visibility:"hidden"});if(b.fixedWidth){e.width(k.outerWidth()-e.extraWidth()+1)}var T=a(window).scrollTop()+a(window).height()-k.offset().top-k.outerHeight();var S=k.offset().top-a(window).scrollTop();var O=k.offsetFrom(N).top+k.outerHeight();var V=T-S+b.dropupThreshold;if(e.outerHeight()<T){U=b.maxHeight?b.maxHeight:T;M=O;P="down"}else{if(e.outerHeight()<S){U=b.maxHeight?b.maxHeight:S;M=k.offsetFrom(N).top-Math.min(U,e.outerHeight());P="up"}else{if(V>=0){U=b.maxHeight?b.maxHeight:T;M=O;P="down"}else{if(V<0){U=b.maxHeight?b.maxHeight:S;M=k.offsetFrom(N).top-Math.min(U,e.outerHeight());P="up"}else{U=b.maxHeight?b.maxHeight:"none";M=O;P="down"}}}}var R=a().jquery<"1.4.2"?a("body").offset().left:parseInt(a("body").css("margin-left"));var Q=a().jquery<"1.4.2"?a("body").offset().top:parseInt(a("body").css("margin-top"));e.css({display:"none",left:k.offsetFrom(N).left+(N[0].tagName.toLowerCase()=="body"?R:0),maxHeight:U,position:"absolute",top:M+(N[0].tagName.toLowerCase()=="body"?Q:0),visibility:"visible"});if(P=="up"){e.addClass("above")}return P}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").html(N.find(".text").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);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);
