(function ($){
if (typeof $.fn.each2 == "undefined") {
$.fn.extend({
each2: function (c){
var j = $([0] ), i = -1, l = _AN_Read_length("length", this);
while (++i < l && (j.context = j[0] = this[i]) && c.call(j[0], i, j) !== false );
return this;
}
}
);
}
}
)(jQuery);
(function ($, undefined){
"use strict";
if (window.Select2 !== undefined) {
return ;
}
var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer;
KEY = {
TAB: 9,
ENTER: 13,
ESC: 27,
SPACE: 32,
LEFT: 37,
UP: 38,
RIGHT: 39,
DOWN: 40,
SHIFT: 16,
CTRL: 17,
ALT: 18,
PAGE_UP: 33,
PAGE_DOWN: 34,
HOME: 36,
END: 35,
BACKSPACE: 8,
DELETE: 46,
isArrow: function (k){
k = k.which? k.which: k;
switch (k){
case KEY.LEFT: case KEY.RIGHT: case KEY.UP: case KEY.DOWN: return true ;
}
return false ;
}
,
isControl: function (k){
k = k.which? k.which: k;
switch (k){
case KEY.SHIFT: case KEY.CTRL: case KEY.ALT: return true ;
}
return false ;
}
,
isFunctionKey: function (k){
k = k.which? k.which: k;
return k >= 112 && k <= 123;
}
}
;
nextUid = (function (){
var counter = 1;
return function (){
return counter++ ;
}
;
}
());
function indexOf(value, array){
var i = 0, l = _AN_Read_length("length", array), v;
if (typeof value === "undefined") {
return -1;
}
if (value.constructor === String) {
for (; i < l; i = i + 1)if (value.localeCompare(array[i]) === 0) return i;
}
else {
for (; i < l; i = i + 1){
v = array[i];
if (v.constructor === String) {
if (v.localeCompare(value) === 0) return i;
}
else {
if (v === value) return i;
}
}
}
return -1;
}
function equal(a, b){
if (a === b) return true ;
if (a === undefined || b === undefined) return false ;
if (a === null || b === null ) return false ;
if (a.constructor === String) return a.localeCompare(b) === 0;
if (b.constructor === String) return b.localeCompare(a) === 0;
return false ;
}
function splitVal(string, separator){
var val, i, l;
if (string === null || _AN_Read_length("length", string) < 1) return [] ;
val = string.split(separator);
for (i = 0, l = _AN_Read_length("length", val); i < l; i = i + 1)val[i] = $.trim(val[i]);
return val;
}
function getSideBorderPadding(element){
return element.outerWidth() - element.width();
}
function installKeyUpChangeEvent(element){
element.bind("keydown", function (){
element.data("keyup-change-value", element.val());
}
);
element.bind("keyup", function (){
if (element.val() !== element.data("keyup-change-value")) {
element.trigger("keyup-change");
}
}
);
}
function installFilteredMouseMove(element){
var context = $(element[0].document);
context.on("mousemove", function (e){
context.data("select2-lastpos", {
x: e.pageX,
y: e.pageY}
);
}
);
element.bind("mousemove", function (e){
var lastpos = context.data("select2-lastpos");
if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {
$(_AN_Read_target("target", e)).trigger("mousemove-filtered", e);
}
}
);
}
function debounce(quietMillis, fn){
var timeout;
return function (){
window.clearTimeout(timeout);
timeout = _AN_Call_settimeout("setTimeout", window, fn, quietMillis);
}
;
}
function installDebouncedScroll(threshold, element){
var notify = debounce(threshold, function (e){
element.trigger("scroll-debounced", e);
}
);
element.bind("scroll", function (e){
if (indexOf(_AN_Read_target("target", e), element.get()) >= 0) notify(e);
}
);
}
function killEvent(event){
event.preventDefault();
event.stopPropagation();
}
function measureTextWidth(e){
if (!sizer) {
var style = e.currentStyle || window.getComputedStyle(e, null );
sizer = $("
").css({
position: "absolute",
left: "-1000px",
top: "-1000px",
display: "none",
fontSize: style.fontSize,
fontFamily: style.fontFamily,
fontStyle: style.fontStyle,
fontWeight: style.fontWeight,
letterSpacing: style.letterSpacing,
textTransform: style.textTransform,
whiteSpace: "nowrap"}
);
$("body").append(sizer);
}
sizer.text(e.val());
return sizer.width();
}
function ajax(options){
var timeout, requestSequence = 0, handler = null , quietMillis = options.quietMillis || 100;
return function (query){
window.clearTimeout(timeout);
timeout = _AN_Call_settimeout("setTimeout", window, function (){
requestSequence += 1;
var requestNumber = requestSequence, data = options.data, transport = options.transport || $.ajax;
data = data.call(this, query.term, query.page, query.context);
if (null !== handler) {
handler.abort();
}
handler = transport.call(null , {
url: _AN_Read_url("url", options),
dataType: options.dataType,
data: data,
success: function (data){
if (requestNumber < requestSequence) {
return ;
}
var results = options.results(data, query.page);
query.callback(results);
}
}
);
}
, quietMillis);
}
;
}
function local(options){
var data = options, dataText, text = function (item){
return "" + item.text;
}
;
if (!$.isArray(data)) {
text = data.text;
if (!$.isFunction(text)) {
dataText = data.text;
text = function (item){
return item[dataText];
}
;
}
data = data.results;
}
return function (query){
var t = query.term, filtered = {
}
;
if (t === "") {
query.callback({
results: data}
);
return ;
}
filtered.results = $(data).filter(function (){
return query.matcher(t, text(this));
}
).get();
query.callback(filtered);
}
;
}
function tags(data){
if ($.isFunction(data)) {
return data;
}
return function (query){
var t = query.term, filtered = {
results: [] }
;
$(data).each(function (){
var isObject = this.text !== undefined, text = isObject? this.text: this;
if (t === "" || query.matcher(t, text)) {
filtered.results.push(isObject? this: {
id: this,
text: this}
);
}
}
);
query.callback(filtered);
}
;
}
$(document).ready(function (){
$(document).delegate("*", "mousedown focusin touchend", function (e){
var target = $(_AN_Read_target("target", e)).closest("div.select2-container").get(0);
if (target) {
$(document).find("div.select2-container-active").each(function (){
if (this !== target) $(this).data("select2").blur();
}
);
}
else {
target = $(_AN_Read_target("target", e)).closest("div.select2-drop").get(0);
$(document).find("div.select2-drop-active").each(function (){
if (this !== target) $(this).data("select2").blur();
}
);
}
}
);
}
);
function clazz(SuperClass, methods){
var constructor = function (){
}
;
constructor.prototype = new SuperClass();
constructor.prototype.constructor = constructor;
constructor.prototype.parent = SuperClass.prototype;
constructor.prototype = $.extend(constructor.prototype, methods);
return constructor;
}
AbstractSelect2 = clazz(Object, {
bind: function (func){
var self = this;
return function (){
func.apply(self, arguments);
}
;
}
,
init: function (opts){
var results, search, resultsSelector = ".select2-results";
this.opts = opts = this.prepareOpts(opts);
this.id = opts.id;
if (opts.element.data("select2") !== undefined && opts.element.data("select2") !== null ) {
this.destroy();
}
this.enabled = true ;
this.container = this.createContainer();
if (opts.element.attr("class") !== undefined) {
this.container.addClass(opts.element.attr("class"));
}
this.opts.element.data("select2", this).hide().after(this.container);
this.container.data("select2", this);
this.dropdown = this.container.find(".select2-drop");
this.dropdown.data("select2", this);
this.results = results = this.container.find(resultsSelector);
_AN_Write_search("search", this, false , search = this.container.find("input[type=text]"));
this.resultsPage = 0;
this.context = null ;
this.initContainer();
installFilteredMouseMove(this.results);
this.dropdown.delegate(resultsSelector, "mousemove-filtered", this.bind(this.highlightUnderEvent));
installDebouncedScroll(80, this.results);
this.dropdown.delegate(resultsSelector, "scroll-debounced", this.bind(this.loadMoreIfNeeded));
if ($.fn.mousewheel) {
results.mousewheel(function (e, delta, deltaX, deltaY){
var top = results.scrollTop(), height;
if (deltaY > 0 && top - deltaY <= 0) {
results.scrollTop(0);
killEvent(e);
}
else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {
results.scrollTop(results.get(0).scrollHeight - results.height());
killEvent(e);
}
}
);
}
installKeyUpChangeEvent(search);
search.bind("keyup-change", this.bind(this.updateResults));
search.bind("focus", function (){
search.addClass("select2-focused");
}
);
search.bind("blur", function (){
search.removeClass("select2-focused");
}
);
this.dropdown.delegate(resultsSelector, "click", this.bind(function (e){
if (_AN_Read_length("length", $(_AN_Read_target("target", e)).closest(".select2-result:not(.select2-disabled)")) > 0) {
this.highlightUnderEvent(e);
this.selectHighlighted(e);
}
else {
killEvent(e);
this.focusSearch();
}
}
));
if ($.isFunction(this.opts.initSelection)) {
this.initSelection();
this.monitorSource();
}
if (opts.element.is(":disabled")) this.disable();
}
,
destroy: function (){
var select2 = this.opts.element.data("select2");
if (select2 !== undefined) {
select2.container.remove();
select2.dropdown.remove();
_AN_Call_show("show", select2.opts.element.removeData("select2").unbind(".select2"));
}
}
,
prepareOpts: function (opts){
var element, select, idKey;
element = opts.element;
if (element.get(0).tagName.toLowerCase() === "select") {
this.select = select = opts.element;
}
if (select) {
$.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"] , function (){
if (this in opts) {
throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a