select2 status widget v1

for deltek channelFUNDS

by Jason Crowther

HTML

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<label>Status</label>
<select id="status" multiple="multiple">
  <option selected="selected" value="a">Any</option>
  <option value="1">Draft</option>
  <option value="2">Open</option>
  <option value="3">Approved</option>
  <option value="4">Rejected</option>
  <option value="5">Payment Approved</option>
  <option value="6">Paid</option>
</select>

CSS

label { display: block; }
select { width: 30em; }

JavaScript

var anyStatus =new Array("1","2","3","4","5","6");

$(document).ready(function() {

		$('#status').select2().on('select2:select', function (e) {
      
      if(e.params.data.selected && e.params.data.id == 'a') {
				// the last option added was 'any'
        // clear out the other previously selected
        // options
				$('#status').val(['a']).trigger('change');
        return;
      } else {
      	// something other than 'any' was selected
      	var left = new Array;
      	var a = $('#status').find(':selected')
        var needUpdate = 0;
        
        // scan through selected options to weed
        // out 'any'
        $.each(a,function(){
        	var v = this.value;
          // leave out any
          if(v != 'a') {
            left.push(v);
            needUpdate = 1;      
          }
          
        })
      
    	  if( JSON.stringify(left)==JSON.stringify(anyStatus) ) {
					// all the status were turned on, so 
          // short circuit back to any.
					$('#status').val(['a']).trigger('change');
        } else if(needUpdate) {
        	// update selected options to list
          // without 'any' selected
          $('#status').val(left).trigger('change');
        }
      }
		});
});