(function(a){a.widget("ui.dropdownchecklist",{_appendDropContainer:function(){var c=a("<div/>");c.addClass("ui-dropdownchecklist ui-dropdownchecklist-dropcontainer-wrapper");c.addClass("ui-widget");c.css({position:"absolute",left:"-33000px",top:"-33000px"});var b=a("<div/>");b.addClass("ui-dropdownchecklist-dropcontainer ui-widget-content");b.css("overflow-y","auto");c.append(b);a(document.body).append(c);c.isOpen=false;return c},_isDropDownKeyShortcut:function(c,b){return c.altKey&&(a.ui.keyCode.DOWN==b)},_isDropDownCloseKey:function(c,b){return(a.ui.keyCode.ESCAPE==b)||(a.ui.keyCode.ENTER==b)},_keyFocusChange:function(f,i,c){var g=a(":focusable");var d=g.index(f);if(d>=0){d+=i;if(c){var e=this.dropWrapper.find("input:not([disabled])");var b=g.index(e.get(0));var h=g.index(e.get(e.length-1));if(d<b){d=h}else{if(d>h){d=b}}}g.get(d).focus()}},_handleKeyboard:function(d){var b=this;var c=(d.keyCode||d.which);if(!b.dropWrapper.isOpen&&b._isDropDownKeyShortcut(d,c)){d.stopImmediatePropagation();b._toggleDropContainer(true)}else{if(b.dropWrapper.isOpen&&b._isDropDownCloseKey(d,c)){d.stopImmediatePropagation();b._toggleDropContainer(false)}else{if(b.dropWrapper.isOpen&&(d.target.type=="checkbox")&&((c==a.ui.keyCode.DOWN)||(c==a.ui.keyCode.UP))){d.stopImmediatePropagation();b._keyFocusChange(d.target,(c==a.ui.keyCode.DOWN)?1:-1,true)}else{if(b.dropWrapper.isOpen&&(c==a.ui.keyCode.TAB)){}}}}},_handleFocus:function(c,b){if(!this.dropWrapper.isOpen){c.stopImmediatePropagation();if(b){this.controlWrapper.find(".ui-dropdownchecklist-selector").addClass("ui-state-hover");if(a.ui.dropdownchecklist.gLastOpened!=null){a.ui.dropdownchecklist.gLastOpened._toggleDropContainer(false)}}else{this.controlWrapper.find(".ui-dropdownchecklist-selector").removeClass("ui-state-hover")}}},_appendControl:function(){var b=this,f=this.sourceSelect,c=this.options;var i=a("<span/>");i.addClass("ui-dropdownchecklist ui-dropdownchecklist-selector-wrapper ui-widget");i.css({cursor:"default",overflow:"hidden"});var h=a("<span/>");h.addClass("ui-dropdownchecklist-selector ui-state-default");h.css({display:"inline-block",overflow:"hidden","white-space":"nowrap"});h.attr("tabIndex",0);h.keyup(function(j){b._handleKeyboard(j)});h.focus(function(j){b._handleFocus(j,true)});h.blur(function(j){b._handleFocus(j,false)});i.append(h);if(c.icon!=null){var d=(c.icon.placement==null)?"left":c.icon.placement;var e=a("<div/>");e.addClass("ui-icon");e.addClass((c.icon.toOpen!=null)?c.icon.toOpen:"ui-icon-triangle-1-e");e.css({"float":d});h.append(e)}var g=a("<span/>");g.addClass("ui-dropdownchecklist-text");g.css({display:"inline-block","white-space":"nowrap",overflow:"hidden"});h.append(g);i.hover(function(){if(!b.disabled){h.addClass("ui-state-hover")}},function(){if(!b.disabled){h.removeClass("ui-state-hover")}});i.click(function(j){if(!b.disabled){j.stopPropagation();b._toggleDropContainer(!b.dropWrapper.isOpen)}});i.insertAfter(f);a(window).resize(function(){if(!b.disabled&&b.dropWrapper.isOpen){b._toggleDropContainer(true)}});return i},_createDropItem:function(h,k,m,l,f,d){var o=this;var n=a("<div/>");n.addClass("ui-dropdownchecklist-item");n.css({"white-space":"nowrap"});var c=l?' checked="checked"':"";var j=f?' class="inactive"':' class="active"';var p=(o.sourceSelect.attr("id")||"ddcl");var b=p+"-i"+h;var g;if(o.isMultiple){g=a('<input disabled type="checkbox" id="'+b+'"'+c+j+"/>")}else{g=a('<input disabled type="radio" id="'+b+'" name="'+p+'"'+c+j+"/>")}g=g.attr("index",h).val(k);n.append(g);var i=a("<label for="+b+"/>");i.addClass("ui-dropdownchecklist-text");i.css({cursor:"default"});i.text(m);if(d){n.addClass("ui-dropdownchecklist-indent")}n.addClass("ui-state-default");if(f){n.addClass("ui-state-disabled")}i.click(function(q){q.stopPropagation()});n.append(i);var e;if(!f){n.hover(function(){n.addClass("ui-state-hover")},function(){n.removeClass("ui-state-hover")});g.click(function(q){q.stopPropagation();if(!f){o._syncSelected(a(this));o.sourceSelect.trigger("change","ddcl_internal")}});e=function(r){r.stopPropagation();if(!f){var q=g.attr("checked");g.attr("checked",!q);o._syncSelected(g);o.sourceSelect.trigger("change","ddcl_internal")}}}else{e=function(q){q.stopPropagation()}}n.click(e);n.keyup(function(q){o._handleKeyboard(q)});return n},_createGroupItem:function(d){var c=a("<div />");c.addClass("ui-dropdownchecklist-group ui-widget-header");c.css({"white-space":"nowrap"});var b=a("<span/>");b.addClass("ui-dropdownchecklist-text");b.css({cursor:"default"});b.text(d);c.append(b);return c},_appendItems:function(){var d=this,g=this.sourceSelect,f=this.dropWrapper;var b=f.find(".ui-dropdownchecklist-dropcontainer");g.children().each(function(h){var i=a(this);if(i.is("option")){d._appendOption(i,b,h,false)}else{if(i.is("optgroup")){var k=i.attr("label");var j=d._createGroupItem(k);b.append(j);d._appendOptions(i,b,h,true)}}});var c=b.outerWidth();var e=b.outerHeight();return{width:c,height:e}},_appendOptions:function(f,c,e,b){var d=this;f.children("option").each(function(g){var h=a(this);var i=(e+"."+g);d._appendOption(h,c,i,b)})},_appendOption:function(f,b,g,c){var k=this;var i=f.text();var h=f.val();var e=f.attr("selected");var d=f.attr("disabled");var j=k._createDropItem(g,h,i,e,d,c);b.append(j)},_syncSelected:function(g){var h=this,i=this.options,c=this.sourceSelect,d=this.dropWrapper;var f=d.find("input:not([disabled])");if(i.firstItemChecksAll){if(g.attr("index")==0){f.attr("checked",g.attr("checked"))}else{var e;e=true;f.each(function(k){if(k>0){var l=a(this).attr("checked");if(!l){e=false}}});var j=f.filter(":first");j.attr("checked",false);if(e){j.attr("checked",true)}}}f=d.find("input");var b=c.get(0).options;f.each(function(k){a(b[k]).attr("selected",a(this).attr("checked"))});h._updateControlText();g.focus()},_sourceSelectChangeHandler:function(c){var b=this,d=this.dropWrapper;d.find("input").val(b.sourceSelect.val());b._updateControlText()},_updateControlText:function(){var c=this,g=this.sourceSelect,d=this.options,f=this.controlWrapper;var h=g.find("option:first");var b=g.find("option");var i=c._formatText(b,d.firstItemChecksAll,h);var e=f.find(".ui-dropdownchecklist-text");e.html(i);e.attr("title",i)},_formatText:function(b,d,e){var f;if(a.isFunction(this.options.textFormatFunction)){try{f=this.options.textFormatFunction(b)}catch(c){alert("textFormatFunction failed: "+c)}}else{if(d&&(e!=null)&&e.attr("selected")){f=e.text()}else{f="";b.each(function(){if(a(this).attr("selected")){if(f!=""){f+=", "}f+=a(this).text()}});if(f==""){f=(this.options.emptyText!=null)?this.options.emptyText:"&nbsp;"}}}return f},_toggleDropContainer:function(e){var c=this;var d=function(f){if((f!=null)&&f.dropWrapper.isOpen){f.dropWrapper.isOpen=false;a.ui.dropdownchecklist.gLastOpened=null;var h=f.options;f.dropWrapper.css({top:"-33000px",left:"-33000px"});var g=f.controlWrapper.find(".ui-dropdownchecklist-selector");g.removeClass("ui-state-active");g.removeClass("ui-state-hover");var j=f.controlWrapper.find(".ui-icon");if(j.length>0){j.removeClass((h.icon.toClose!=null)?h.icon.toClose:"ui-icon-triangle-1-s");j.addClass((h.icon.toOpen!=null)?h.icon.toOpen:"ui-icon-triangle-1-e")}a(document).unbind("click",d);f.dropWrapper.find("input.active").attr("disabled","disabled");if(a.isFunction(h.onComplete)){try{h.onComplete.call(f,f.sourceSelect.get(0))}catch(i){alert("callback failed: "+i)}}}};var b=function(f){if(!f.dropWrapper.isOpen){f.dropWrapper.isOpen=true;a.ui.dropdownchecklist.gLastOpened=f;var i=f.options;f.dropWrapper.css({top:f.controlWrapper.offset().top+f.controlWrapper.outerHeight()+"px",left:f.controlWrapper.offset().left+"px"});var m=f.controlWrapper.parents().map(function(){var n=a(this).css("z-index");return isNaN(n)?0:n}).get();var h=Math.max.apply(Math,m);if(h>0){f.dropWrapper.css({zIndex:(h+1)})}var g=f.controlWrapper.find(".ui-dropdownchecklist-selector");g.addClass("ui-state-active");g.removeClass("ui-state-hover");var j=f.controlWrapper.find(".ui-icon");if(j.length>0){j.removeClass((i.icon.toOpen!=null)?i.icon.toOpen:"ui-icon-triangle-1-e");j.addClass((i.icon.toClose!=null)?i.icon.toClose:"ui-icon-triangle-1-s")}a(document).bind("click",function(n){d(f)});var l=f.dropWrapper.find("input.active");l.removeAttr("disabled");var k=l.get(0);if(k!=null){k.focus()}}};if(e){d(a.ui.dropdownchecklist.gLastOpened);b(c)}else{d(c)}},_setSize:function(b){var l=this.options,f=this.dropWrapper,k=this.controlWrapper;var j=b.width;if(l.width!=null){j=parseInt(l.width)}else{if(l.minWidth!=null){var c=parseInt(l.minWidth);if(j<c){j=c}}}var i=k.find(".ui-dropdownchecklist-selector");i.css({width:j+"px"});var g=i.find(".ui-dropdownchecklist-text");var d=i.find(".ui-icon");if(d!=null){j-=(d.outerWidth()+6);g.css({width:j+"px"})}j=k.outerWidth();var h=(l.maxDropHeight!=null)?parseInt(l.maxDropHeight):b.height;var e=b.width<j?j:b.width;a(f).css({height:h+"px",width:e+"px"});f.find(".ui-dropdownchecklist-dropcontainer").css({height:h+"px"})},_init:function(){var c=this,d=this.options;var g=c.element;c.initialDisplay=g.css("display");g.css("display","none");c.initialMultiple=g.attr("multiple");c.isMultiple=c.initialMultiple;if(d.forceMultiple!=null){c.isMultiple=d.forceMultiple}g.attr("multiple",true);c.sourceSelect=g;var f=c._appendDropContainer();c.dropWrapper=f;var b=c._appendItems();var e=c._appendControl();c.controlWrapper=e;c._updateControlText(e,f,g);c._setSize(b);if(d.bgiframe&&typeof c.dropWrapper.bgiframe=="function"){c.dropWrapper.bgiframe()}c.sourceSelect.change(function(i,h){if(h!="ddcl_internal"){c._sourceSelectChangeHandler(i)}})},enable:function(){this.controlWrapper.find(".ui-dropdownchecklist-selector").removeClass("ui-state-disabled");this.disabled=false},disable:function(){this.controlWrapper.find(".ui-dropdownchecklist-selector").addClass("ui-state-disabled");this.disabled=true},destroy:function(){a.widget.prototype.destroy.apply(this,arguments);this.sourceSelect.css("display",this.initialDisplay);this.sourceSelect.attr("multiple",this.initialMultiple);this.controlWrapper.unbind().remove();this.dropWrapper.remove()}});a.extend(a.ui.dropdownchecklist,{defaults:{width:null,maxDropHeight:null,firstItemChecksAll:false,minWidth:50,bgiframe:false}})})(jQuery);
