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