(function(d){d.widget("ui.selectmenu",{getter:"value",version:"1.9",eventPrefix:"selectmenu",options:{transferClasses:true,typeAhead:1E3,style:"dropdown",positionOptions:{my:"left top",at:"left bottom",offset:null},width:null,menuWidth:null,handleWidth:26,maxHeight:null,icons:null,format:null,bgImage:function(){},wrapperElement:"<div />"},_create:function(){var a=this,b=this.options,c=(this.element.attr("id")||"ui-selectmenu-"+Math.random().toString(16).slice(2,10)).replace(":","\\:");this.ids=[c, c+"-button",c+"-menu"];this._safemouseup=true;this.isOpen=false;this.newelement=d("<a />",{"class":this.widgetBaseClass+" ui-widget ui-state-default ui-corner-all",id:this.ids[1],role:"button",href:"#nogo",tabindex:this.element.attr("disabled")?1:0,"aria-haspopup":true,"aria-owns":this.ids[2]});this.newelementWrap=d(b.wrapperElement).append(this.newelement).insertAfter(this.element);(c=this.element.attr("tabindex"))&&this.newelement.attr("tabindex",c);this.newelement.data("selectelement",this.element); this.selectmenuIcon=d('<span class="'+this.widgetBaseClass+'-icon ui-icon"></span>').prependTo(this.newelement);this.newelement.prepend('<span class="'+a.widgetBaseClass+'-status" />');this.element.bind({"click.selectmenu":function(b){a.newelement.focus();b.preventDefault()}});this.newelement.bind("mousedown.selectmenu",function(c){a._toggle(c,true);if(b.style=="popup")a._safemouseup=false,setTimeout(function(){a._safemouseup=true},300);return false}).bind("click.selectmenu",function(){return false}).bind("keydown.selectmenu", function(b){var c=false;switch(b.keyCode){case d.ui.keyCode.ENTER:c=true;break;case d.ui.keyCode.SPACE:a._toggle(b);break;case d.ui.keyCode.UP:b.altKey?a.open(b):a._moveSelection(-1);break;case d.ui.keyCode.DOWN:b.altKey?a.open(b):a._moveSelection(1);break;case d.ui.keyCode.LEFT:a._moveSelection(-1);break;case d.ui.keyCode.RIGHT:a._moveSelection(1);break;case d.ui.keyCode.TAB:c=true;break;case d.ui.keyCode.HOME:a.index(0);break;default:c=true}return c}).bind("keypress.selectmenu",function(b){b.which> 0&&a._typeAhead(b.which,"mouseup");return true}).bind("mouseover.selectmenu focus.selectmenu",function(){b.disabled||d(this).addClass(a.widgetBaseClass+"-focus ui-state-hover")}).bind("mouseout.selectmenu blur.selectmenu",function(){b.disabled||d(this).removeClass(a.widgetBaseClass+"-focus ui-state-hover")});d(document).bind("mousedown.selectmenu-"+this.ids[0],function(b){a.isOpen&&a.close(b)});this.element.bind("click.selectmenu",function(){a._refreshValue()}).bind("focus.selectmenu",function(){a.newelement&& a.newelement[0].focus()});if(!b.width)b.width=this.element.outerWidth();this.newelement.width(b.width);this.element.hide();this.list=d("<ul />",{"class":"ui-widget ui-widget-content","aria-hidden":true,role:"listbox","aria-labelledby":this.ids[1],id:this.ids[2]});this.listWrap=d(b.wrapperElement).addClass(a.widgetBaseClass+"-menu").append(this.list).appendTo("body");this.list.bind("keydown.selectmenu",function(b){var c=false;switch(b.keyCode){case d.ui.keyCode.UP:b.altKey?a.close(b,true):a._moveFocus(-1); break;case d.ui.keyCode.DOWN:b.altKey?a.close(b,true):a._moveFocus(1);break;case d.ui.keyCode.LEFT:a._moveFocus(-1);break;case d.ui.keyCode.RIGHT:a._moveFocus(1);break;case d.ui.keyCode.HOME:a._moveFocus(":first");break;case d.ui.keyCode.PAGE_UP:a._scrollPage("up");break;case d.ui.keyCode.PAGE_DOWN:a._scrollPage("down");break;case d.ui.keyCode.END:a._moveFocus(":last");break;case d.ui.keyCode.ENTER:case d.ui.keyCode.SPACE:a.close(b,true);d(b.target).parents("li:eq(0)").trigger("mouseup");break;case d.ui.keyCode.TAB:c= true;a.close(b,true);d(b.target).parents("li:eq(0)").trigger("mouseup");break;case d.ui.keyCode.ESCAPE:a.close(b,true);break;default:c=true}return c}).bind("keypress.selectmenu",function(b){b.which>0&&a._typeAhead(b.which,"focus");return true}).bind("mousedown.selectmenu mouseup.selectmenu",function(){return false});d(window).bind("resize.selectmenu-"+this.ids[0],d.proxy(a.close,this))},_init:function(){var a=this,b=this.options,c=[];this.element.find("option").each(function(){var e=d(this);c.push({value:e.attr("value"), text:a._formatText(e.text()),selected:e.attr("selected"),disabled:e.attr("disabled"),classes:e.attr("class"),typeahead:e.attr("typeahead"),parentOptGroup:e.parent("optgroup"),bgImage:b.bgImage.call(e)})});var i=a.options.style=="popup"?" ui-state-active":"";this.list.html("");if(c.length)for(var e=0;e<c.length;e++){var g={role:"presentation"};c[e].disabled&&(g["class"]=this.namespace+"-state-disabled");var f={html:c[e].text,href:"#nogo",tabindex:-1,role:"option","aria-selected":false};if(c[e].disabled)f["aria-disabled"]= c[e].disabled;if(c[e].typeahead)f.typeahead=c[e].typeahead;f=d("<a/>",f);g=d("<li/>",g).append(f).data("index",e).addClass(c[e].classes).data("optionClasses",c[e].classes||"").bind("mouseup.selectmenu",function(b){if(a._safemouseup&&!a._disabled(b.currentTarget)&&!a._disabled(d(b.currentTarget).parents("ul>li."+a.widgetBaseClass+"-group "))){var c=d(this).data("index")!=a._selectedIndex();a.index(d(this).data("index"));a.select(b);c&&a.change(b);a.close(b,true)}return false}).bind("click.selectmenu", function(){return false}).bind("mouseover.selectmenu focus.selectmenu",function(b){!d(b.currentTarget).hasClass(a.namespace+"-state-disabled")&&!d(b.currentTarget).parent("ul").parent("li").hasClass(a.namespace+"-state-disabled")&&(a._selectedOptionLi().addClass(i),a._focusedOptionLi().removeClass(a.widgetBaseClass+"-item-focus ui-state-hover"),d(this).removeClass("ui-state-active").addClass(a.widgetBaseClass+"-item-focus ui-state-hover"))}).bind("mouseout.selectmenu blur.selectmenu",function(){d(this).is(a._selectedOptionLi().selector)&& d(this).addClass(i);d(this).removeClass(a.widgetBaseClass+"-item-focus ui-state-hover")});c[e].parentOptGroup.length?(f=a.widgetBaseClass+"-group-"+this.element.find("optgroup").index(c[e].parentOptGroup),this.list.find("li."+f).length?this.list.find("li."+f+":last ul").append(g):d(' <li role="presentation" class="'+a.widgetBaseClass+"-group "+f+(c[e].parentOptGroup.attr("disabled")?" "+this.namespace+'-state-disabled" aria-disabled="true"':'"')+'><span class="'+a.widgetBaseClass+'-group-label">'+ c[e].parentOptGroup.attr("label")+"</span><ul></ul></li> ").appendTo(this.list).find("ul").append(g)):g.appendTo(this.list);if(b.icons)for(var h in b.icons)g.is(b.icons[h].find)&&(g.data("optionClasses",c[e].classes+" "+a.widgetBaseClass+"-hasIcon").addClass(a.widgetBaseClass+"-hasIcon"),f=b.icons[h].icon||"",g.find("a:eq(0)").prepend('<span class="'+a.widgetBaseClass+"-item-icon ui-icon "+f+'"></span>'),c[e].bgImage&&g.find("span").css("background-image",c[e].bgImage))}else d('<li role="presentation"><a href="#nogo" tabindex="-1" role="option"></a></li>').appendTo(this.list); e=b.style=="dropdown";this.newelement.toggleClass(a.widgetBaseClass+"-dropdown",e).toggleClass(a.widgetBaseClass+"-popup",!e);this.list.toggleClass(a.widgetBaseClass+"-menu-dropdown ui-corner-bottom",e).toggleClass(a.widgetBaseClass+"-menu-popup ui-corner-all",!e).find("li:first").toggleClass("ui-corner-top",!e).end().find("li:last").addClass("ui-corner-bottom");this.selectmenuIcon.toggleClass("ui-icon-triangle-1-s",e).toggleClass("ui-icon-triangle-2-n-s",!e);b.transferClasses&&(e=this.element.attr("class")|| "",this.newelement.add(this.list).addClass(e));b.style=="dropdown"?this.list.width(b.menuWidth?b.menuWidth:b.width):this.list.width(b.menuWidth?b.menuWidth:b.width-b.handleWidth);this.list.css("height","auto");e=this.listWrap.height();b.maxHeight&&b.maxHeight<e?this.list.height(b.maxHeight):(h=d(window).height()/3,h<e&&this.list.height(h));this._optionLis=this.list.find("li:not(."+a.widgetBaseClass+"-group)");this.element.attr("disabled")?this.disable():this.enable();this.index(this._selectedIndex()); window.setTimeout(function(){a._refreshPosition()},200)},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled").unbind(".selectmenu");d(window).unbind(".selectmenu-"+this.ids[0]);d(document).unbind(".selectmenu-"+this.ids[0]);this.newelementWrap.remove();this.listWrap.remove();this.element.unbind(".selectmenu").show();d.Widget.prototype.destroy.apply(this,arguments)},_typeAhead:function(a, b){var c=this,d=String.fromCharCode(a).toLowerCase(),e=this.list.find("li a"),g=null,f=null;if(c._typeAhead_timer)window.clearTimeout(c._typeAhead_timer),c._typeAhead_timer=void 0;c._typeAhead_chars=(c._typeAhead_chars===void 0?"":c._typeAhead_chars).concat(d);c._typeAhead_chars.length<2||c._typeAhead_chars.substr(-2,1)===d&&c._typeAhead_cycling?(c._typeAhead_cycling=true,g=d):(c._typeAhead_cycling=false,g=c._typeAhead_chars);for(var d=(b!=="focus"?this._selectedOptionLi().data("index"):this._focusedOptionLi().data("index"))|| 0,h=0;h<e.length;h++)if(e.eq(h).text().substr(0,g.length).toLowerCase()===g)if(c._typeAhead_cycling){if(f===null&&(f=h),h>d){f=h;break}}else f=h;f!==null&&e.eq(f).trigger(b);c._typeAhead_timer=window.setTimeout(function(){c._typeAhead_timer=void 0;c._typeAhead_chars=void 0;c._typeAhead_cycling=void 0},c.options.typeAhead)},_uiHash:function(){var a=this.index();return{index:a,option:d("option",this.element).get(a),value:this.element[0].value}},open:function(a){var b=this.options;if(this.newelement.attr("aria-disabled")!= "true"){this._closeOthers(a);this.newelement.addClass("ui-state-active");this.listWrap.appendTo(b.appendTo);this.list.attr("aria-hidden",false);this.listWrap.addClass(this.widgetBaseClass+"-open");var c=this._selectedOptionLi();b.style=="dropdown"?this.newelement.removeClass("ui-corner-all").addClass("ui-corner-top"):this.list.css("left",-5E3).scrollTop(this.list.scrollTop()+c.position().top-this.list.outerHeight()/2+c.outerHeight()/2).css("left","auto");this._refreshPosition();b=c.find("a");b.length&& b[0].focus();this.isOpen=true;this._trigger("open",a,this._uiHash())}},close:function(a,b){if(this.newelement.is(".ui-state-active"))this.newelement.removeClass("ui-state-active"),this.listWrap.removeClass(this.widgetBaseClass+"-open"),this.list.attr("aria-hidden",true),this.options.style=="dropdown"&&this.newelement.removeClass("ui-corner-top").addClass("ui-corner-all"),b&&this.newelement.focus(),this.isOpen=false,this._trigger("close",a,this._uiHash())},change:function(a){this.element.trigger("change"); this._trigger("change",a,this._uiHash())},select:function(a){if(this._disabled(a.currentTarget))return false;this._trigger("select",a,this._uiHash())},_closeOthers:function(a){d("."+this.widgetBaseClass+".ui-state-active").not(this.newelement).each(function(){d(this).data("selectelement").selectmenu("close",a)});d("."+this.widgetBaseClass+".ui-state-hover").trigger("mouseout")},_toggle:function(a,b){this.isOpen?this.close(a,b):this.open(a)},_formatText:function(a){return this.options.format?this.options.format(a): a},_selectedIndex:function(){return this.element[0].selectedIndex},_selectedOptionLi:function(){return this._optionLis.eq(this._selectedIndex())},_focusedOptionLi:function(){return this.list.find("."+this.widgetBaseClass+"-item-focus")},_moveSelection:function(a,b){if(!this.options.disabled){var c=parseInt(this._selectedOptionLi().data("index")||0,10)+a;c<0&&(c=0);c>this._optionLis.size()-1&&(c=this._optionLis.size()-1);if(c===b)return false;if(this._optionLis.eq(c).hasClass(this.namespace+"-state-disabled"))a> 0?++a:--a,this._moveSelection(a,c);else return this._optionLis.eq(c).trigger("mouseup")}},_moveFocus:function(a,b){var c=isNaN(a)?parseInt(this._optionLis.filter(a).data("index"),10):parseInt(this._focusedOptionLi().data("index")||0,10)+a;c<0&&(c=0);c>this._optionLis.size()-1&&(c=this._optionLis.size()-1);if(c===b)return false;var d=this.widgetBaseClass+"-item-"+Math.round(Math.random()*1E3);this._focusedOptionLi().find("a:eq(0)").attr("id","");this._optionLis.eq(c).hasClass(this.namespace+"-state-disabled")? (a>0?++a:--a,this._moveFocus(a,c)):this._optionLis.eq(c).find("a:eq(0)").attr("id",d).focus();this.list.attr("aria-activedescendant",d)},_scrollPage:function(a){var b=Math.floor(this.list.outerHeight()/this.list.find("li:first").outerHeight());this._moveFocus(a=="up"?-b:b)},_setOption:function(a,b){this.options[a]=b;a=="disabled"&&(b&&this.close(),this.element.add(this.newelement).add(this.list)[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled", b))},disable:function(a,b){typeof a=="undefined"?this._setOption("disabled",true):b=="optgroup"?this._disableOptgroup(a):this._disableOption(a)},enable:function(a,b){typeof a=="undefined"?this._setOption("disabled",false):b=="optgroup"?this._enableOptgroup(a):this._enableOption(a)},_disabled:function(a){return d(a).hasClass(this.namespace+"-state-disabled")},_disableOption:function(a){var b=this._optionLis.eq(a);b&&(b.addClass(this.namespace+"-state-disabled").find("a").attr("aria-disabled",true), this.element.find("option").eq(a).attr("disabled","disabled"))},_enableOption:function(a){var b=this._optionLis.eq(a);b&&(b.removeClass(this.namespace+"-state-disabled").find("a").attr("aria-disabled",false),this.element.find("option").eq(a).removeAttr("disabled"))},_disableOptgroup:function(a){var b=this.list.find("li."+this.widgetBaseClass+"-group-"+a);b&&(b.addClass(this.namespace+"-state-disabled").attr("aria-disabled",true),this.element.find("optgroup").eq(a).attr("disabled","disabled"))},_enableOptgroup:function(a){var b= this.list.find("li."+this.widgetBaseClass+"-group-"+a);b&&(b.removeClass(this.namespace+"-state-disabled").attr("aria-disabled",false),this.element.find("optgroup").eq(a).removeAttr("disabled"))},index:function(a){if(arguments.length)if(this._disabled(d(this._optionLis[a])))return false;else this.element[0].selectedIndex=a,this._refreshValue();else return this._selectedIndex()},value:function(a){if(arguments.length)this.element[0].value=a,this._refreshValue();else return this.element[0].value},_refreshValue:function(){var a= this.options.style=="popup"?" ui-state-active":"",b=this.widgetBaseClass+"-item-"+Math.round(Math.random()*1E3);this.list.find("."+this.widgetBaseClass+"-item-selected").removeClass(this.widgetBaseClass+"-item-selected"+a).find("a").attr("aria-selected","false").attr("id","");this._selectedOptionLi().addClass(this.widgetBaseClass+"-item-selected"+a).find("a").attr("aria-selected","true").attr("id",b);var a=this.newelement.data("optionClasses")?this.newelement.data("optionClasses"):"",c=this._selectedOptionLi().data("optionClasses")? this._selectedOptionLi().data("optionClasses"):"";this.newelement.removeClass(a).data("optionClasses",c).addClass(c).find("."+this.widgetBaseClass+"-status").html(this._selectedOptionLi().find("a:eq(0)").html());this.list.attr("aria-activedescendant",b)},_refreshPosition:function(){var a=this.options;if(a.style=="popup"&&!a.positionOptions.offset)var b=this._selectedOptionLi(),b="0 "+(this.list.offset().top-b.offset().top-(this.newelement.outerHeight()+b.outerHeight())/2);this.listWrap.zIndex(this.element.zIndex()+ 1).position({of:a.positionOptions.of||this.newelement,my:a.positionOptions.my,at:a.positionOptions.at,offset:a.positionOptions.offset||b,collision:a.positionOptions.collision||"flip"})}})})(jQuery);
