|  | @@ -212,7 +212,7 @@
 | 
	
		
			
				|  |  |                  requestSequence += 1; // increment the sequence
 | 
	
		
			
				|  |  |                  var requestNumber = requestSequence, // this request's sequence number
 | 
	
		
			
				|  |  |                      data = options.data, // ajax data function
 | 
	
		
			
				|  |  | -                    transport=options.transport||$.ajax;
 | 
	
		
			
				|  |  | +                    transport = options.transport || $.ajax;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  data = data.call(this, query.term, query.page);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -318,6 +318,11 @@
 | 
	
		
			
				|  |  |          // prepare options
 | 
	
		
			
				|  |  |          this.opts = this.prepareOpts(opts);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        // destroy if called on an existing component
 | 
	
		
			
				|  |  | +        if (opts.element.data("select2") !== undefined) {
 | 
	
		
			
				|  |  | +            this.destroy();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          this.container = this.createContainer();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (opts.element.attr("class") !== undefined) {
 | 
	
	
		
			
				|  | @@ -325,7 +330,8 @@
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // swap container for the element
 | 
	
		
			
				|  |  | -        this.opts.element.data("select2", this)
 | 
	
		
			
				|  |  | +        this.opts.element
 | 
	
		
			
				|  |  | +            .data("select2", this)
 | 
	
		
			
				|  |  |              .hide()
 | 
	
		
			
				|  |  |              .after(this.container);
 | 
	
		
			
				|  |  |          this.container.data("select2", this);
 | 
	
	
		
			
				|  | @@ -382,6 +388,16 @@
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    AbstractSelect2.prototype.destroy = function () {
 | 
	
		
			
				|  |  | +        var select2 = this.opts.element.data("select2");
 | 
	
		
			
				|  |  | +        if (select2 !== undefined) {
 | 
	
		
			
				|  |  | +            select2.container.remove();
 | 
	
		
			
				|  |  | +            select2.opts.element
 | 
	
		
			
				|  |  | +                .removeData("select2")
 | 
	
		
			
				|  |  | +                .show();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      AbstractSelect2.prototype.prepareOpts = function (opts) {
 | 
	
		
			
				|  |  |          var element, select;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1157,7 +1173,8 @@
 | 
	
		
			
				|  |  |          // filter out duplicates
 | 
	
		
			
				|  |  |          $(data).each(function () {
 | 
	
		
			
				|  |  |              if (indexOf(this.id, ids) < 0) {
 | 
	
		
			
				|  |  | -                ids.push(this.id); filtered.push(this);
 | 
	
		
			
				|  |  | +                ids.push(this.id);
 | 
	
		
			
				|  |  | +                filtered.push(this);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |          data = filtered;
 | 
	
	
		
			
				|  | @@ -1344,7 +1361,7 @@
 | 
	
		
			
				|  |  |          var args = Array.prototype.slice.call(arguments, 0),
 | 
	
		
			
				|  |  |              opts,
 | 
	
		
			
				|  |  |              select2,
 | 
	
		
			
				|  |  | -            value, multiple, allowedMethods = ["val"];
 | 
	
		
			
				|  |  | +            value, multiple, allowedMethods = ["val", "destroy"];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.each(function () {
 | 
	
		
			
				|  |  |              if (args.length === 0 || typeof(args[0]) === "object") {
 | 
	
	
		
			
				|  | @@ -1368,6 +1385,7 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  value = undefined;
 | 
	
		
			
				|  |  |                  select2 = $(this).data("select2");
 | 
	
		
			
				|  |  | +                if (select2 === undefined) return;
 | 
	
		
			
				|  |  |                  value = select2[args[0]].apply(select2, args.slice(1));
 | 
	
		
			
				|  |  |                  if (value !== undefined) {return false;}
 | 
	
		
			
				|  |  |              } else {
 |