jQuery.fn.combobox=function(h,j){var a=this;this.combobox=new Function();var i={comboboxContainerClass:null,comboboxValueContentContainerClass:null,comboboxValueContentClass:null,comboboxDropDownButtonClass:null,comboboxDropDownClass:null,comboboxDropDownItemClass:null,comboboxDropDownItemHoverClass:null,comboboxDropDownGroupItemHeaderClass:null,comboboxDropDownGroupItemContainerClass:null};var b={animationType:"slide",animationSpeed:"fast",width:120};if(h){jQuery.extend(i,h)}if(j){jQuery.extend(b,j)}this.combobox.onChange=null;function d(k){return k[0].internalCombobox}function e(k){return function(){d(k).remove()}}function c(k){return function(){d(k).update()}}function g(k){return function(){d(k).updateSelection()}}function f(k){return function(l){d(k).addRange(l)}}jQuery.fn.extend(this.combobox,{addRange:f(a),remove:e(a),update:c(a),updateSelection:g(a)});return this.each(function(){this.internalCombobox=new k(this);this.internalCombobox.initialise();function k(S){var ab=jQuery(S);var ai=null;var U="background-color:#fff;border-left: solid 2px #777;border-top: solid 2px #777;border-right: solid 1px #ccc;border-bottom: solid 1px #ccc;";var aD="padding:0;";var az=null;var ad="list-style-type:none;min-height:15px;padding-top:0;margin:0;overflow:auto";var n="cursor:default;padding:2px;background:#fff;border-right:solid 1px #000;border-bottom:solid 1px #000;border-left:solid 1px #aaa;border-top:solid 1px #aaa;";var T="display:block;";var v="cursor:default;padding-left:2px;font-weight:normal;font-style:normal;";var O="list-style-type:none;";var M="padding-left:10px;margin-left:0;";var aA="";var am="font-style:italic;font-weight:bold;";var q=300;var aK=null;var L="position:relative;overflow:hidden;";var N=null;var o="float:left;position:absolute;cursor:default;overflow:hidden;";var Z="padding-left:3px;";var aB=null;var w="overflow:hidden;width:16px;height:18px;color:#000;background:#D6D3CE;font-family:arial;font-size:8px;cursor:default;text-align:center;vertical-align:middle;";var aI="background-repeat:no-repeat;float:right;";var B="padding-left:0px;padding-top:1px;width:12px;height:13px;border-right:solid 2px #404040;border-bottom:solid 2px #404040;border-left:solid 2px #f0f0f0;border-top:solid 2px #f0f0f0";var aC="padding-left:1px;padding-top:3px;width:12px;height:13px;border:solid 1px #808080";var ar="&#9660;";var aj=null;var s=null;var u=null;var aw=false;var aG=0;var aH=null;var l=0;var D=null;var W=null;var aE=null;String.format=function(){var aN=null;if(arguments.length!=0){aN=arguments[0];for(var aM=1;aM<arguments.length;aM++){var aO=new RegExp("\\{"+(aM-1)+"\\}","gm");aN=aN.replace(aO,arguments[aM])}}return aN};function P(aN){var aM=null;if(aN){if(aN.substr(-2,2)=="px"){aM=aN.substr(0,(aN.length-2))}}return aM}function an(aM,aN){var aO=(aM.outerWidth()-aM.width());aM.width(aN-aO)}function au(aN,aM){var aO=(aN.outerHeight()-aN.height());aN.height(aM-aO)}function t(aM,aQ){var aP=aQ.split(";");if(aP.length>0){for(var aO=0;aO<aP.length;aO++){var aR=aP[aO];var aN=aR.split(":");aM.css(aN[0],aN[1])}}}function I(aM){var aN=new Object();aN.width=0;aN.height=0;sizingImageJQuery=jQuery("<img style='border:none;margin:0;padding:0;'></img>");sizingImageJQuery.attr("src",aM);ai.append(sizingImageJQuery);aN.width=sizingImageJQuery.width();aN.height=sizingImageJQuery.height();sizingImageJQuery.remove();return aN}function ae(aO){var aN=null;var aM=aO.css("background-image");aM=aM.replace("url(","","gi");aM=aM.replace('"',"","gi");aM=aM.replace('"',"","gi");aM=aM.replace(")","","gi");if(aM!="none"){aN=I(aM)}return aN}function G(){D=ae(aB);W=ae(aK)}function Y(aO){if(i.comboboxValueContentContainerClass){if(W!=null){var aM=aK.height();var aP=(aO*aM);if(W.height>aP){var aN=String.format("0px -{0}px",aP);aK.css("background-position",aN)}}}}function x(aP){if(i.comboboxDropDownButtonClass){if(D!=null){var aO=aB.width();var aQ=(aP*aO);if(D.width>aQ){var aM=String.format("-{0}px 0px",aQ);aB.css("background-position",aM)}}}else{var aN=B;if(aP==1){aN=aC}t(aB,aN)}}function A(aM){Y(aM);x(aM)}function r(){var aO="";if(i.comboboxValueContentContainerClass){aO=String.format("<div class='{0}' style='{1}'></div>",i.comboboxValueContentContainerClass,L)}else{aO=String.format("<div style='{0}'></div>",L)}var aN="";if(i.comboboxValueContentClass){aN=String.format("<div class='{0}' style='{1}'></div>",i.comboboxValueContentClass,o)}else{aN=String.format("<div style='{0}'></div>",o+Z)}var aM="";if(i.comboboxDropDownButtonClass){aM=String.format("<div class='{1}' style='{0}'></div>",aI,i.comboboxDropDownButtonClass)}else{aM=String.format("<div style='{0}'>{1}</div>",(aI+w),ar)}N=jQuery(aN);aB=jQuery(aM);aK=jQuery(aO);aK.appendTo(ai);N.appendTo(aK);aB.appendTo(aK);G();aE=P(N.css("max-height"));A(0)}function ak(aP){var aT="";var aV=null;var aR="";var aN="";var aQ=null;var aS="";var aM="option";var aO=aP[0];if(aO.title){if(aO.title!=""){aN=aO.title}}if(aP.is("option")){if(aO.dataText){aR=aO.dataText}else{aR=aP.text()}aQ=aP.val();if(i.comboboxDropDownItemClass){aV=i.comboboxDropDownItemClass;aS=T}else{aS=(T+v)}if(aV){aT=String.format("<li style='{0}' class='{1}'>{2}</li>",aS,aV,aR)}else{aT=String.format("<li style='{0}'>{1}</li>",aS,aR)}}else{if(aP[0].dataText){aR=aP[0].dataText}else{aR=aP.attr("label")}aQ=aP.attr("class");aM="optgroup";if(i.comboboxDropDownGroupItemHeaderClass){aV=i.comboboxDropDownGroupItemHeaderClass;aS=aA}else{aS=(aA+am)}if(aV){aT=String.format("<li><span style='{0}' class='{1}'>{2}</span></li>",aS,aV,aR)}else{aT=String.format("<li><span style='{0}'>{1}</span></li>",aS,aR)}}var aU=jQuery(aT);aU.css("display","inline");aU[0].dataText=aR;aU[0].dataValue=aQ;aU[0].dataType=aM;if(aN==""){aN=aR}aU[0].title=aN;return aU}function al(aM,aN){aN.each(function(){var aR=jQuery(this);var aT=ak(aR);aM.append(aT);var aQ=aT.offset().left;aQ-=aH.left;if(aQ<0){aQ=0}var aP=(aQ+aT.outerWidth());if(aP>aG){aG=aP}t(aT,T);if(aR.is("optgroup")){var aO="";if(i.comboboxDropDownGroupItemContainerClass){aO=String.format("<ul style='{0}' class='{1}'></ul>",O,i.comboboxDropDownGroupItemContainerClass)}else{aO=String.format("<ul style='{0}'></ul>",(O+M))}var aS=jQuery(aO);aT.append(aS);al(aS,aR.children())}})}function at(){var aM=ab.children();aj=null;u=null;if(az){az.empty()}else{var aP="";if(i.comboboxDropDownClass){aP=String.format("<ul class='{0}' style='{1}'></ul>",i.comboboxDropDownClass,ad)}else{aP=String.format("<ul style='{0}'></ul>",(ad+n))}az=jQuery(aP);az.appendTo(ai);az.attr("tabIndex",0)}if(aM.length>0){aG=0;aH=az.offset();al(az,aM)}var aN=P(az.css("max-height"));if(aN){q=aN}var aO=az.height();if(aO>q){az.height(q)}l=az.height()}function H(){var aM=ai.outerWidth();if(aM<aG){aM=aG}az.width(aM)}function p(){N.height("auto");var aN=N.outerHeight();var aM=aK.height();if(aE){if(aE<aN){aN=aE;N.height(aN)}}var aO=((aM-aN)/2);if(aO<0){aO=0}N.css("top",aO)}function X(){ai.width(b.width);var aP=ai.width();an(aK,aP);var aO=(aK.width()-aB.outerWidth());an(N,aO);var aM=aB.outerHeight();au(aK,aM);az.css("position","absolute");az.css("z-index","20000");H();var aQ=az.offset().left;var aN=(aQ-(ai.outerWidth()-ai.width()));az.css("left",aN+1);az.hide()}function V(){var aP=false;var aM=ab[0];var aN;if(aM.length>0){var aO=jQuery("li[dataValue='"+ab.val()+"']",az);N.html(aO[0].dataText);N.attr("title",aO[0].title);p();if(u){if(u!=ab.val()){aP=true}}u=ab.val();if(aP){if(a.combobox.onChange){a.combobox.onChange()}}if(aj){av(aj,false)}aj=aO;av(aj,true)}}function J(aM){if(aM){if(l>=q){var aN=aM.offset();if((aN.top>l)||(aN.top<=aM.outerHeight())){aM[0].scrollIntoView()}}}}function av(aN,aM){if(aN){if(i.comboboxDropDownItemHoverClass){if(aM){aN.addClass(i.comboboxDropDownItemHoverClass)}else{aN.removeClass(i.comboboxDropDownItemHoverClass)}}else{if(aM){aN.css("background","#000");aN.css("color","#fff")}else{aN.css("background","");aN.css("color","")}}}}function Q(){var aM="";if(i.comboboxContainerClass){aM=String.format("<div class='{0}' style='{1}'></div>",i.comboboxContainerClass,aD)}else{aM=String.format("<div style='{0}' style='{1}'></div>",U,aD)}ai=jQuery(aM);ab.before(ai);ai.append(ab);ab.hide();ai.attr("tabIndex",0)}this.initialise=function(){Q();r();at();X();ay();V()};function m(){az.focus();J(aj)}function ao(){ai.focus();aL()}function af(aM){az.animate({height:"toggle",top:aM},b.animationSpeed,m)}function ag(aM){az.animate({height:"toggle",opacity:"toggle",top:aM},b.animationSpeed,ao)}function aJ(aM){az.animate({height:"toggle",opacity:"toggle"},b.animationSpeed,aM)}function ac(){var aN=ai.position().top;var aQ=az.outerHeight();var aP=(aN+ai.outerHeight());var aR=jQuery(window).scrollTop();var aS=jQuery(window).height();var aM=(aS-(aP-aR));var aO;aO=aP;aw=false;if(aM<aQ){if((aN-aR)>aQ){aO=(aN-aQ);aw=true}}return aO}function E(aP){if(aP){if(az.is(":hidden")){aq();av(s,false);av(aj,true);A(1);var aN=ac();az.css("top",aN);az.css("left",ai.offset().left);switch(b.animationType){case"slide":if(aw){var aM=ai.position().top;var aO=ai.outerHeight();az.css("top",(aM-aO));af(aN)}else{aJ(m)}break;case"fade":az.fadeIn(b.animationSpeed,m);break;default:az.show(1,m)}}}else{if(az.is(":visible")){A(0);switch(b.animationType){case"slide":if(aw){aM=ai.position().top;dropdownListHeight=az.height();ag(aM-ai.outerHeight())}else{aJ(ao)}break;case"fade":az.fadeOut(b.animationSpeed,ao);break;default:az.hide();ao()}}}}function aF(aM,aN){var aO=ab[0];if(aN==null){aO.selectedIndex=aM}else{aO.value=aN}if(aO.onchange){aO.onchange()}V()}function R(aP){var aM=ab[0];var aN=aM.selectedIndex;var aO=-1;var aQ=aM.length-1;switch(aP){case":next":aO=aN+1;if(aO>aQ){aO=aQ}break;case":previous":aO=aN-1;if(aO<0){aO=0}break;case":first":aO=0;break;case":last":aO=aQ;break}aF(aO,null);J(aj)}function K(){return az.is(":visible")}function ax(){jQuery("li",az).not("ul").not("span").not("[dataType='optgroup']").each(function(){var aM=jQuery(this);aM.click(function(aN){aN.stopPropagation();F(aM)});aM.mouseover(function(){ah(aM)});aM.mouseout(function(){C(aM)})})}function ap(){az.blur(function(aM){aM.stopPropagation();aa()})}function aL(){ai.click(function(){z()})}function aq(){ai.unbind("click")}function ay(){ai.keydown(function(aM){aM.preventDefault();y(aM)});aL();ap();ax()}function z(){if(az.is(":hidden")){E(true)}else{E(false)}}function aa(){if(az.is(":visible")){E(false)}}function F(aM){aF(null,aM[0].dataValue);E(false)}function ah(aM){av(aj,false);av(s,false);av(aM,true)}function C(aM){s=aM}function y(aM){switch(aM.which){case 33:case 36:R(":first");break;case 34:case 35:R(":last");break;case 37:R(":previous");break;case 38:if(aM.altKey){E(!(K()))}else{R(":previous")}break;case 39:R(":next");break;case 40:if(aM.altKey){E(!(K()))}else{R(":next")}break;case 27:case 13:E(false);break;case 9:az.blur();jQuery(window)[0].focus();break}}this.updateSelection=function(){V()};this.update=function(){at();H();ax();V()};this.remove=function(){ai.before(ab);ai.remove();ab[0].internalCombobox=null;ab.show()};this.addRange=function(aP){if(aP){var aQ=ab[0].options;var aO=aQ.length;for(optionIndex in aP){var aN=aP[optionIndex];var aM=document.createElement("option");aM.value=aN.value;aM.text=aN.text;aM.dataText=aN.text;if(aN.title){aM.title=aN.title}aQ[aO+optionIndex]=aM}ab.combobox.update()}}}})};