function() {
            var cid = this.containerId,
                scroll = "scroll." + cid,
                resize = "resize."+cid,
                orient = "orientationchange."+cid,
                mask, maskCss;

            this.container.addClass("select2-dropdown-open").addClass("select2-container-active");

            this.clearDropdownAlignmentPreference();

            if(this.dropdown[0] !== this.body().children().last()[0]) {
                this.dropdown.detach().appendTo(this.body());
            }

            // create the dropdown mask if doesnt already exist
            mask = $("#select2-drop-mask");
            if (mask.length == 0) {
                mask = $(document.createElement("div"));
                mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask");
                mask.hide();
                mask.appendTo(this.body());
                mask.on("mousedown touchstart click", function (e) {
                    var dropdown = $("#select2-drop"), self;
                    if (dropdown.length > 0) {
                        self=dropdown.data("select2");
                        if (self.opts.selectOnBlur) {
                            self.selectHighlighted({noFocus: true});
                        }
                        self.close();
                        e.preventDefault();
                        e.stopPropagation();
                    }
                });
            }

            // ensure the mask is always right before the dropdown
            if (this.dropdown.prev()[0] !== mask[0]) {
                this.dropdown.before(mask);
            }

            // move the global id to the correct dropdown
            $("#select2-drop").removeAttr("id");
            this.dropdown.attr("id", "select2-drop");

            // show the elements
            maskCss=_makeMaskCss();

            mask.css(maskCss).show();

            this.dropdown.show();
            this.positionDropdown();

            this.dropdown.addClass("select2-drop-active");

            // attach listeners to events that can change the position of the container and thus require
            // the position of the dropdown to be updated as well so it does not come unglued from the container
            var that = this;
            this.container.parents().add(window).each(function () {
                $(this).on(resize+" "+scroll+" "+orient, function (e) {
                    var maskCss=_makeMaskCss();
                    $("#select2-drop-mask").css(maskCss);
                    that.positionDropdown();
                });
            });

            function _makeMaskCss() {
                return {
                    width  : Math.max(document.documentElement.scrollWidth,  $(window).width()),
                    height : Math.max(document.documentElement.scrollHeight, $(window).height())
                }
            }
        }
function() {
            var cid = this.containerId,
                scroll = "scroll." + cid,
                resize = "resize."+cid,
                orient = "orientationchange."+cid,
                mask, maskCss;

            this.container.addClass("select2-dropdown-open").addClass("select2-container-active");

            this.clearDropdownAlignmentPreference();

            if(this.dropdown[0] !== this.body().children().last()[0]) {
                this.dropdown.detach().appendTo(this.body());
            }

            
            mask = $("#select2-drop-mask");
            if (mask.length == 0) {
                mask = $(document.createElement("div"));
                mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask");
                mask.hide();
                mask.appendTo(this.body());
                mask.on("mousedown touchstart click", function (e) {
                    var dropdown = $("#select2-drop"), self;
                    if (dropdown.length > 0) {
                        self=dropdown.data("select2");
                        if (self.opts.selectOnBlur) {
                            self.selectHighlighted({noFocus: true});
                        }
                        self.close();
                        e.preventDefault();
                        e.stopPropagation();
                    }
                });
            }

            
            if (this.dropdown.prev()[0] !== mask[0]) {
                this.dropdown.before(mask);
            }

            
            $("#select2-drop").removeAttr("id");
            this.dropdown.attr("id", "select2-drop");

            
            maskCss=_makeMaskCss();

            mask.css(maskCss).show();

            this.dropdown.show();
            this.positionDropdown();

            this.dropdown.addClass("select2-drop-active");

            
            
            var that = this;
            this.container.parents().add(window).each(function () {
                $(this).on(resize+" "+scroll+" "+orient, function (e) {
                    var maskCss=_makeMaskCss();
                    $("#select2-drop-mask").css(maskCss);
                    that.positionDropdown();
                });
            });

            function _makeMaskCss() {
                return {
                    width  : Math.max(document.documentElement.scrollWidth,  $(window).width()),
                    height : Math.max(document.documentElement.scrollHeight, $(window).height())
                }
            }
        }
function ( ) { var cid = this . containerId , scroll = "scroll." + cid , resize = "resize." + cid , orient = "orientationchange." + cid , mask , maskCss ; this . container . addClass ( "select2-dropdown-open" ) . addClass ( "select2-container-active" ) ; this . clearDropdownAlignmentPreference ( ) ; if ( this . dropdown [ 0 ] !== this . body ( ) . children ( ) . last ( ) [ 0 ] ) { this . dropdown . detach ( ) . appendTo ( this . body ( ) ) ; } // create the dropdown mask if doesnt already exist mask = $ ( "#select2-drop-mask" ) ; if ( mask . length == 0 ) { mask = $ ( document . createElement ( "div" ) ) ; mask . attr ( "id" , "select2-drop-mask" ) . attr ( "class" , "select2-drop-mask" ) ; mask . hide ( ) ; mask . appendTo ( this . body ( ) ) ; mask . on ( "mousedown touchstart click" , function ( e ) { var dropdown = $ ( "#select2-drop" ) , self ; if ( dropdown . length > 0 ) { self = dropdown . data ( "select2" ) ; if ( self . opts . selectOnBlur ) { self . selectHighlighted ( { noFocus : true } ) ; } self . close ( ) ; e . preventDefault ( ) ; e . stopPropagation ( ) ; } } ) ; } // ensure the mask is always right before the dropdown if ( this . dropdown . prev ( ) [ 0 ] !== mask [ 0 ] ) { this . dropdown . before ( mask ) ; } // move the global id to the correct dropdown $ ( "#select2-drop" ) . removeAttr ( "id" ) ; this . dropdown . attr ( "id" , "select2-drop" ) ; // show the elements maskCss = _makeMaskCss ( ) ; mask . css ( maskCss ) . show ( ) ; this . dropdown . show ( ) ; this . positionDropdown ( ) ; this . dropdown . addClass ( "select2-drop-active" ) ; // attach listeners to events that can change the position of the container and thus require // the position of the dropdown to be updated as well so it does not come unglued from the container var that = this ; this . container . parents ( ) . add ( window ) . each ( function ( ) { $ ( this ) . on ( resize + " " + scroll + " " + orient , function ( e ) { var maskCss = _makeMaskCss ( ) ; $ ( "#select2-drop-mask" ) . css ( maskCss ) ; that . positionDropdown ( ) ; } ) ; } ) ; function _makeMaskCss ( ) { return { width : Math . max ( document . documentElement . scrollWidth , $ ( window ) . width ( ) ) , height : Math . max ( document . documentElement . scrollHeight , $ ( window ) . height ( ) ) } } }
Performs the opening of the dropdown
 abstract
Performs the opening of the dropdown abstract