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