[Mapbender-commits] r9346 - in trunk/mapbender/http/extensions: . bootstrap-select-1.9.3 bootstrap-select-1.9.3/dist bootstrap-select-1.9.3/dist/css bootstrap-select-1.9.3/dist/js bootstrap-select-1.9.3/dist/js/i18n bootstrap-select-1.9.3/docs bootstrap-select-1.9.3/docs/custom_theme bootstrap-select-1.9.3/docs/custom_theme/js bootstrap-select-1.9.3/docs/docs bootstrap-select-1.9.3/docs/docs/css bootstrap-select-1.9.3/js bootstrap-select-1.9.3/js/i18n bootstrap-select-1.9.3/less bootstrap-select-1.9.3/sass

svn_mapbender at osgeo.org svn_mapbender at osgeo.org
Tue Jan 12 07:49:39 PST 2016


Author: armin11
Date: 2016-01-12 07:49:39 -0800 (Tue, 12 Jan 2016)
New Revision: 9346

Added:
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/.gitignore
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/CONTRIBUTING.md
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/Gruntfile.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/LICENSE
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/README.md
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/bower.json
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/composer.json
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css.map
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.min.css
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js.map
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.min.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/base.html
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/js/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/js/base.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/nav.html
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/toc.html
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/css/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/css/custom.css
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/examples.md
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/index.md
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/methods.md
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/options.md
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/mkdocs.yml
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/.jshintrc
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/bootstrap-select.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ar_AR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-bg_BG.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-cs_CZ.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-da_DK.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-de_DE.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-en_US.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-es_CL.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-eu.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fa_IR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fi_FI.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fr_FR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-hu_HU.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-id_ID.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-it_IT.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ko_KR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nb_NO.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nl_NL.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pl_PL.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_BR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_PT.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ro_RO.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ru_RU.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sk_SK.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sl_SI.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sv_SE.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-tr_TR.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ua_UA.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_CN.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_TW.js
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/bootstrap-select.less
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/variables.less
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/package.json
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/bootstrap-select.scss
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/variables.scss
   trunk/mapbender/http/extensions/bootstrap-select-1.9.3/test.html
Log:
Bootstrap version for selectboxes - MIT licence

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/.gitignore
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/.gitignore	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/.gitignore	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,13 @@
+# OS or Editor folders
+.DS_Store
+.idea
+
+# Folders to ignore
+node_modules
+bower_components
+.sass-cache
+
+# Dist zip
+bootstrap-select-*.zip
+
+docs/site

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/CONTRIBUTING.md
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/CONTRIBUTING.md	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/CONTRIBUTING.md	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,114 @@
+# Contributing to this project
+
+Please take a moment to review this document in order to make the contribution
+process easy and effective for everyone involved.
+
+Following these guidelines helps to communicate that you respect the time of
+the developers managing and developing this open source project. In return,
+they should reciprocate that respect in addressing your issue or assessing
+patches and features.
+
+
+## Using the issue tracker
+
+The issue tracker is the preferred channel for [bug reports](#bug-reports),
+[features requests](#feature-requests) and submitting pull requests, but please
+respect the following restrictions:
+
+* Please **do not** use the issue tracker for personal support requests (use
+  [Stack Overflow](http://stackoverflow.com) or IRC).
+
+* Please **do not** derail or troll issues. Keep the discussion on topic and
+  respect the opinions of others.
+
+
+## Bug reports
+
+A bug is a _demonstrable problem_ that is caused by the code in the repository.
+Good bug reports are extremely helpful - thank you!
+
+Guidelines for bug reports:
+
+1. **Use the GitHub issue search.** Check if the issue has already been
+   reported.
+
+2. **Check if the issue has been fixed.** Try to reproduce it using the
+   latest `master` or development branch in the repository.
+
+3. **Provide environment details.** Provide your operating system, browser(s),
+   jQuery version, Bootstrap version, and bootstrap-select version.
+
+4. **Create an isolated and reproducible test case.** Create a [reduced test
+   case](http://css-tricks.com/6263-reduced-test-cases/).
+
+5. **Include a live example.** Make use of jsFiddle or jsBin to share your
+   isolated test cases.
+
+A good bug report shouldn't leave others needing to chase you up for more
+information. Please try to be as detailed as possible in your report. What is
+your environment? What steps will reproduce the issue? What browser(s) and OS
+experience the problem? What would you expect to be the outcome? All these
+details will help people to fix any potential bugs.
+
+Example:
+
+> Short and descriptive example bug report title
+>
+> A summary of the issue and the browser/OS environment in which it occurs. If
+> suitable, include the steps required to reproduce the bug.
+>
+> 1. This is the first step
+> 2. This is the second step
+> 3. Further steps, etc.
+>
+> `<url>` - a link to the reduced test case
+>
+> Any other information you want to share that is relevant to the issue being
+> reported. This might include the lines of code that you have identified as
+> causing the bug, and potential solutions (and your opinions on their
+> merits).
+
+
+## Feature requests
+
+Feature requests are welcome. But take a moment to find out whether your idea
+fits with the scope and aims of the project. It's up to *you* to make a strong
+case to convince the project's developers of the merits of this feature. Please
+provide as much detail and context as possible.
+
+## Pull Request Guidelines
+
+You must understand that by contributing code to this project, you are granting
+the authors (and/or leaders) of the project a non-exclusive license to
+re-distribute your code under the current license and possibly re-license the
+code as deemed necessary.
+
+* To instantiate a context or use it, use the variable **that** instead of
+  **_this**.
+* Please check to make sure that there aren't existing pull requests attempting
+  to address the issue mentioned. We also recommend checking for issues related
+  to the issue on the tracker, as a team member may be working on the issue in
+  a branch or fork.
+* Non-trivial changes should be discussed in an issue first
+* If your change affects the distributed files, re-generate them using the
+  [grunt procedure](#using-grunt)
+* If possible, add relevant tests to cover the change
+* Write a convincing description of your PR and why we should land it
+
+## Using Grunt
+
+We are using node and grunt to build and (in the future) test this project.
+This means that you must setup a local development environment:
+
+1. Install `node` and `npm` using your preferred method
+2. Install the grunt CLI: `npm install -g grunt-cli`
+3. Install the project's development dependencies: `npm install`
+4. Run the various grunt tasks as needed:
+   - `grunt`: clean the distribution files and re-build them
+   - `grunt dist`: build the distribution files
+   - `grunt clean`: clean the distribution files
+   - `grunt dist-css`: build the css distribution files
+   - `grunt dist-js`: build the javascript distribution files
+   - `grunt watch`: watch for changes in the source files and build the
+     distribution files as needed
+

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/Gruntfile.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/Gruntfile.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/Gruntfile.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,274 @@
+module.exports = function (grunt) {
+
+  // From TWBS
+  RegExp.quote = function (string) {
+    return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
+  };
+
+  // Project configuration.
+  grunt.initConfig({
+
+    // Metadata.
+    pkg: grunt.file.readJSON('package.json'),
+    banner: '/*!\n' +
+    ' * Bootstrap-select v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
+    ' *\n' +
+    ' * Copyright 2013-<%= grunt.template.today(\'yyyy\') %> bootstrap-select\n' +
+    ' * Licensed under <%= pkg.license %> (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)\n' +
+    ' */\n',
+
+    // Task configuration.
+
+    clean: {
+      css: 'dist/css',
+      js: 'dist/js'
+    },
+
+    jshint: {
+      options: {
+        jshintrc: 'js/.jshintrc'
+      },
+      gruntfile: {
+        options: {
+          'node': true
+        },
+        src: 'Gruntfile.js'
+      },
+      main: {
+        src: 'js/*.js'
+      },
+      i18n: {
+        src: 'js/i18n/*.js'
+      }
+    },
+
+    concat: {
+      options: {
+        stripBanners: true
+      },
+      main: {
+        src: '<%= jshint.main.src %>',
+        dest: 'dist/js/<%= pkg.name %>.js'
+      },
+      i18n: {
+        expand: true,
+        src: '<%= jshint.i18n.src %>',
+        dest: 'dist/'
+      }
+    },
+
+    umd: {
+      main: {
+        options: {
+          deps: {
+            'default': ['jQuery'],
+            amd: ['jquery'],
+            cjs: ['jquery'],
+            global: ['jQuery']
+          }
+        },
+        src: '<%= concat.main.dest %>'
+      },
+      i18n: {
+        options: {
+          deps: {
+            'default': ['jQuery'],
+            amd: ['jquery'],
+            cjs: ['jquery'],
+            global: ['jQuery']
+          }
+        },
+        src: 'dist/<%= jshint.i18n.src %>',
+        dest: '.'
+      }
+    },
+
+    uglify: {
+      options: {
+        preserveComments: 'some'
+      },
+      main: {
+        src: '<%= concat.main.dest %>',
+        dest: 'dist/js/<%= pkg.name %>.min.js',
+        options: {
+          sourceMap: true,
+          sourceMapName: 'dist/js/<%= pkg.name %>.js.map'
+        }
+      },
+      i18n: {
+        expand: true,
+        src: 'dist/<%= jshint.i18n.src %>',
+        ext: '.min.js'
+      }
+    },
+
+    less: {
+      options: {
+        strictMath: true,
+        sourceMap: true,
+        outputSourceFiles: true,
+        sourceMapURL: '<%= pkg.name %>.css.map',
+        sourceMapFilename: '<%= less.css.dest %>.map'
+      },
+      css: {
+        src: 'less/bootstrap-select.less',
+        dest: 'dist/css/<%= pkg.name %>.css'
+      }
+    },
+
+    usebanner: {
+      css: {
+        options: {
+          banner: '<%= banner %>'
+        },
+        src: '<%= less.css.dest %>'
+      },
+      js: {
+        options: {
+          banner: '<%= banner %>'
+        },
+        src: [
+          '<%= concat.main.dest %>',
+          '<%= uglify.main.dest %>',
+          'dist/<%= jshint.i18n.src %>',
+        ]
+      }
+    },
+
+    cssmin: {
+      options: {
+        compatibility: 'ie8',
+        keepSpecialComments: '*',
+        advanced: false
+      },
+      css: {
+        src: '<%= less.css.dest %>',
+        dest: 'dist/css/<%= pkg.name %>.min.css'
+      }
+    },
+
+    csslint: {
+      options: {
+        'adjoining-classes': false,
+        'box-sizing': false,
+        'box-model': false,
+        'compatible-vendor-prefixes': false,
+        'floats': false,
+        'font-sizes': false,
+        'gradients': false,
+        'important': false,
+        'known-properties': false,
+        'outline-none': false,
+        'qualified-headings': false,
+        'regex-selectors': false,
+        'shorthand': false,
+        'text-indent': false,
+        'unique-headings': false,
+        'universal-selector': false,
+        'unqualified-attributes': false,
+        'overqualified-elements': false
+      },
+      css: {
+        src: '<%= less.css.dest %>'
+      }
+    },
+
+    sed: {
+      versionNumber: {
+        path: [
+          'js/<%= pkg.name %>.js',
+          'composer.json',
+          'package.json'
+        ],
+        pattern: (function () {
+          var old = grunt.option('old');
+          return old ? RegExp.quote(old) : old;
+        })(),
+        replacement: grunt.option('new'),
+        recursive: true
+      }
+    },
+
+    autoprefixer: {
+      options: {
+        browsers: [
+          'Android 2.3',
+          'Android >= 4',
+          'Chrome >= 20',
+          'Firefox >= 24', // Firefox 24 is the latest ESR
+          'Explorer >= 8',
+          'iOS >= 6',
+          'Opera >= 12',
+          'Safari >= 6'
+        ]
+      },
+      css: {
+        options: {
+          map: true
+        },
+        src: '<%= less.css.dest %>'
+      }
+    },
+
+    compress: {
+      zip: {
+        options: {
+          archive: 'bootstrap-select-<%= pkg.version %>.zip',
+          mode: 'zip'
+        },
+        files: [
+          {
+            expand: true,
+            cwd: 'dist/',
+            src: '**',
+            dest: 'bootstrap-select-<%= pkg.version %>/'
+          }, {
+            src: ['bower.json', 'composer.json', 'package.json'],
+            dest: 'bootstrap-select-<%= pkg.version %>/'
+          }
+        ]
+      }
+    },
+
+    watch: {
+      gruntfile: {
+        files: '<%= jshint.gruntfile.src %>',
+        tasks: 'jshint:gruntfile'
+      },
+      js: {
+        files: ['<%= jshint.main.src %>', '<%= jshint.i18n.src %>'],
+        tasks: 'build-js'
+      },
+      less: {
+        files: 'less/*.less',
+        tasks: 'build-css'
+      }
+    }
+  });
+
+  // These plugins provide necessary tasks.
+  require('load-grunt-tasks')(grunt, {
+    scope: 'devDependencies'
+  });
+
+  // Version numbering task.
+  // grunt change-version-number --old=A.B.C --new=X.Y.Z
+  // This can be overzealous, so its changes should always be manually reviewed!
+  grunt.registerTask('change-version-number', 'sed');
+
+  // CSS distribution
+  grunt.registerTask('build-css', ['clean:css', 'less', 'autoprefixer', 'usebanner:css', 'cssmin']);
+
+  // JS distribution
+  grunt.registerTask('build-js', ['clean:js', 'concat', 'umd', 'usebanner:js', 'uglify']);
+
+  // Development watch
+  grunt.registerTask('dev-watch', ['build-css', 'build-js', 'watch']);
+
+  // Full distribution
+  grunt.registerTask('dist', ['build-css', 'build-js', 'compress']);
+
+  // Default task.
+  grunt.registerTask('default', ['build-css', 'build-js']);
+
+};

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/LICENSE
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/LICENSE	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/LICENSE	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2015 bootstrap-select
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/README.md
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/README.md	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/README.md	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,73 @@
+bootstrap-select
+================
+
+[![Latest release](https://img.shields.io/github/release/silviomoreto/bootstrap-select.svg)](https://github.com/silviomoreto/bootstrap-select/releases/latest)
+[![Bower](https://img.shields.io/bower/v/bootstrap-select.svg)]()
+[![npm](https://img.shields.io/npm/v/bootstrap-select.svg)](https://www.npmjs.com/package/bootstrap-select)
+[![NuGet](https://img.shields.io/nuget/v/bootstrap-select.svg)](https://www.nuget.org/packages/bootstrap-select/)
+
+[![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE)
+[![Dependency Status](https://david-dm.org/silviomoreto/bootstrap-select.svg)](https://david-dm.org/silviomoreto/bootstrap-select)
+[![devDependency Status](https://david-dm.org/silviomoreto/bootstrap-select/dev-status.svg)](https://david-dm.org/silviomoreto/bootstrap-select#info=devDependencies)
+
+Bootstrap-select is a jQuery plugin that utilizes Bootstrap's dropdown.js to style and bring additional functionality to normal select boxes.
+
+## Demo and Documentation
+
+See a Bootstrap 3 example [here](http://silviomoreto.github.io/bootstrap-select).
+
+## Authors
+
+[Silvio Moreto](https://github.com/silviomoreto),
+[Ana Carolina](https://github.com/anacarolinats),
+[caseyjhol](https://github.com/caseyjhol),
+[Matt Bryson](https://github.com/mattbryson), and
+[t0xicCode](https://github.com/t0xicCode).
+
+## Usage
+
+Create your `<select>` with the `.selectpicker` class.
+```html
+<select class="selectpicker">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Barbecue</option>
+</select>
+```
+
+If you use a 1.6.3 or newer, you don't need to do anything else, as the data-api automatically picks up the `<select>`s with the `selectpicker` class.
+
+If you use an older version, you need to add the following either at the bottom of the page (after the last selectpicker), or in a [`$(document).ready()`](http://api.jquery.com/ready/) block.
+```js
+// To style only <select>s with the selectpicker class
+$('.selectpicker').selectpicker();
+```
+Or
+```js
+// To style all <select>s
+$('select').selectpicker();
+```
+
+Checkout the [documentation](http://silviomoreto.github.io/bootstrap-select) for further information.
+
+## CDN
+
+**N.B.**: The CDN is updated after the release is made public, which means that there is a delay between the publishing of a release and its availability on the CDN. Check [the GitHub page](https://github.com/silviomoreto/bootstrap-select/releases) for the latest release.
+
+* [//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.3/css/bootstrap-select.min.css](//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.3/css/bootstrap-select.min.css)
+* [//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.3/js/bootstrap-select.min.js](//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.3/js/bootstrap-select.min.js)
+* //cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.9.3/js/i18n/defaults-*.min.js (The translation files)
+
+## Bugs and feature requests
+
+Anyone and everyone is welcome to contribute. **Please take a moment to
+review the [guidelines for contributing](CONTRIBUTING.md)**. Make sure you're using the latest version of bootstrap-select before submitting an issue.
+
+* [Bug reports](CONTRIBUTING.md#bug-reports)
+* [Feature requests](CONTRIBUTING.md#feature-requests)
+
+## Copyright and license
+
+Copyright (C) 2013-2015 bootstrap-select
+
+Licensed under [the MIT license](LICENSE).

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/bower.json
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/bower.json	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/bower.json	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,31 @@
+{
+  "name": "bootstrap-select",
+  "main": [
+    "less/bootstrap-select.less",
+    "dist/css/bootstrap-select.css",
+    "dist/js/bootstrap-select.js"
+  ],
+  "homepage": "http://silviomoreto.github.io/bootstrap-select",
+  "authors": [
+    "silviomoreto"
+  ],
+  "keywords": [
+    "form",
+    "bootstrap",
+    "select",
+    "replacement"
+  ],
+  "dependencies": {
+    "jquery": ">=1.8"
+  },
+  "license": "MIT",
+  "ignore": [
+    ".gitignore",
+    "CONTRIBUTING.md",
+    "Gruntfile.js",
+    "README.md",
+    "composer.json",
+    "package.json",
+    "test.html"
+  ]
+}

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/composer.json
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/composer.json	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/composer.json	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+{
+  "name": "bootstrap-select/bootstrap-select",
+  "description": "A custom <select> for Bootstrap using button dropdown as replacement",
+  "keywords": [
+    "form",
+    "bootstrap",
+    "select",
+    "replacement"
+  ],
+  "homepage": "http://silviomoreto.github.io/bootstrap-select",
+  "version": "1.9.3",
+  "authors": [
+    {
+      "name": "Silvio Moreto",
+      "homepage": "https://github.com/silviomoreto"
+    }
+  ],
+  "license": "MIT",
+  "suggest": {
+    "components/jquery": ">=1.8",
+    "twbs/bootstrap": "~3.0.0"
+  }
+}

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,277 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+.bootstrap-select {
+  width: 220px \0;
+  /*IE9 and below*/
+}
+.bootstrap-select > .dropdown-toggle {
+  width: 100%;
+  padding-right: 25px;
+  z-index: 1;
+}
+.bootstrap-select > select {
+  position: absolute !important;
+  bottom: 0;
+  left: 50%;
+  width: 0.11px !important;
+  height: 100% !important;
+  padding: 0 !important;
+  opacity: 0 !important;
+  border: none;
+}
+.bootstrap-select > select.mobile-device {
+  top: 0;
+  left: 0;
+  display: block !important;
+  width: 100% !important;
+  z-index: 2;
+}
+.has-error .bootstrap-select .dropdown-toggle,
+.error .bootstrap-select .dropdown-toggle {
+  border-color: #b94a48;
+}
+.bootstrap-select.fit-width {
+  width: auto !important;
+}
+.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+  width: 220px;
+}
+.bootstrap-select .dropdown-toggle:focus {
+  outline: thin dotted #333333 !important;
+  outline: 5px auto -webkit-focus-ring-color !important;
+  outline-offset: -2px;
+}
+.bootstrap-select.form-control {
+  margin-bottom: 0;
+  padding: 0;
+  border: none;
+}
+.bootstrap-select.form-control:not([class*="col-"]) {
+  width: 100%;
+}
+.bootstrap-select.form-control.input-group-btn {
+  z-index: auto;
+}
+.bootstrap-select.btn-group:not(.input-group-btn),
+.bootstrap-select.btn-group[class*="col-"] {
+  float: none;
+  display: inline-block;
+  margin-left: 0;
+}
+.bootstrap-select.btn-group.dropdown-menu-right,
+.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right,
+.row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right {
+  float: right;
+}
+.form-inline .bootstrap-select.btn-group,
+.form-horizontal .bootstrap-select.btn-group,
+.form-group .bootstrap-select.btn-group {
+  margin-bottom: 0;
+}
+.form-group-lg .bootstrap-select.btn-group.form-control,
+.form-group-sm .bootstrap-select.btn-group.form-control {
+  padding: 0;
+}
+.form-inline .bootstrap-select.btn-group .form-control {
+  width: 100%;
+}
+.bootstrap-select.btn-group.disabled,
+.bootstrap-select.btn-group > .disabled {
+  cursor: not-allowed;
+}
+.bootstrap-select.btn-group.disabled:focus,
+.bootstrap-select.btn-group > .disabled:focus {
+  outline: none !important;
+}
+.bootstrap-select.btn-group.bs-container {
+  position: absolute;
+}
+.bootstrap-select.btn-group.bs-container .dropdown-menu {
+  z-index: 1060;
+}
+.bootstrap-select.btn-group .dropdown-toggle .filter-option {
+  display: inline-block;
+  overflow: hidden;
+  width: 100%;
+  text-align: left;
+}
+.bootstrap-select.btn-group .dropdown-toggle .caret {
+  position: absolute;
+  top: 50%;
+  right: 12px;
+  margin-top: -2px;
+  vertical-align: middle;
+}
+.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle {
+  width: 100%;
+}
+.bootstrap-select.btn-group .dropdown-menu {
+  min-width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bootstrap-select.btn-group .dropdown-menu.inner {
+  position: static;
+  float: none;
+  border: 0;
+  padding: 0;
+  margin: 0;
+  border-radius: 0;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li {
+  position: relative;
+}
+.bootstrap-select.btn-group .dropdown-menu li.active small {
+  color: #fff;
+}
+.bootstrap-select.btn-group .dropdown-menu li.disabled a {
+  cursor: not-allowed;
+}
+.bootstrap-select.btn-group .dropdown-menu li a {
+  cursor: pointer;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li a.opt {
+  position: relative;
+  padding-left: 2.25em;
+}
+.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {
+  display: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li a span.text {
+  display: inline-block;
+}
+.bootstrap-select.btn-group .dropdown-menu li small {
+  padding-left: 0.5em;
+}
+.bootstrap-select.btn-group .dropdown-menu .notify {
+  position: absolute;
+  bottom: 5px;
+  width: 96%;
+  margin: 0 2%;
+  min-height: 26px;
+  padding: 3px 5px;
+  background: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  pointer-events: none;
+  opacity: 0.9;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bootstrap-select.btn-group .no-results {
+  padding: 3px;
+  background: #f5f5f5;
+  margin: 0 5px;
+  white-space: nowrap;
+}
+.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option {
+  position: static;
+}
+.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret {
+  position: static;
+  top: auto;
+  margin-top: -1px;
+}
+.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {
+  position: absolute;
+  display: inline-block;
+  right: 15px;
+  margin-top: 5px;
+}
+.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {
+  margin-right: 34px;
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle {
+  z-index: 1061;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle:before {
+  content: '';
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid rgba(204, 204, 204, 0.2);
+  position: absolute;
+  bottom: -4px;
+  left: 9px;
+  display: none;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle:after {
+  content: '';
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid white;
+  position: absolute;
+  bottom: -4px;
+  left: 10px;
+  display: none;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {
+  bottom: auto;
+  top: -3px;
+  border-top: 7px solid rgba(204, 204, 204, 0.2);
+  border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {
+  bottom: auto;
+  top: -3px;
+  border-top: 6px solid white;
+  border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {
+  right: 12px;
+  left: auto;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {
+  right: 13px;
+  left: auto;
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {
+  display: block;
+}
+.bs-searchbox,
+.bs-actionsbox,
+.bs-donebutton {
+  padding: 4px 8px;
+}
+.bs-actionsbox {
+  width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bs-actionsbox .btn-group button {
+  width: 50%;
+}
+.bs-donebutton {
+  float: left;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bs-donebutton .btn-group button {
+  width: 100%;
+}
+.bs-searchbox + .bs-actionsbox {
+  padding: 0 8px 4px;
+}
+.bs-searchbox .form-control {
+  margin-bottom: 0;
+  width: 100%;
+  float: none;
+}
+/*# sourceMappingURL=bootstrap-select.css.map */
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css.map
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css.map	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.css.map	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1 @@
+{"version":3,"sources":["less/bootstrap-select.less","bootstrap-select.css"],"names":[],"mappings":"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","file":"bootstrap-select.css","sourcesContent":["@import \"variables\";\n\n// Mixins\n.cursor-disabled() {\n  cursor: not-allowed;\n}\n\n// Rules\n.bootstrap-select {\n  width: 220px \\0; /*IE9 and below*/\n\n  // The selectpicker button\n  > .dropdown-toggle {\n    width: 100%;\n    padding-right: 25px;\n    z-index: 1;\n  }\n\n  > select {\n    position: absolute !important;\n    bottom: 0;\n    left: 50%;\n    width: 0.11px !important;\n    height: 100% !important;\n    padding: 0 !important;\n    opacity: 0 !important;\n    border: none;\n\n    &.mobile-device {\n      top: 0;\n      left: 0;\n      display: block !important;\n      width: 
 100% !important;\n      z-index: 2;\n    }\n  }\n\n  // Error display\n  .has-error & .dropdown-toggle,\n  .error & .dropdown-toggle {\n    border-color: @color-red-error;\n  }\n\n  &.fit-width {\n    width: auto !important;\n  }\n\n  &:not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n    width: @width-default;\n  }\n\n  .dropdown-toggle:focus {\n    outline: thin dotted #333333 !important;\n    outline: 5px auto -webkit-focus-ring-color !important;\n    outline-offset: -2px;\n  }\n}\n\n.bootstrap-select.form-control {\n  margin-bottom: 0;\n  padding: 0;\n  border: none;\n\n  &:not([class*=\"col-\"]) {\n    width: 100%;\n  }\n\n  &.input-group-btn {\n    z-index: auto;\n  }\n}\n\n// The selectpicker components\n.bootstrap-select.btn-group {\n  &:not(.input-group-btn),\n  &[class*=\"col-\"] {\n    float: none;\n    display: inline-block;\n    margin-left: 0;\n  }\n\n  // Forces the pull to the right, if necessary\n  &,\n  &[class*=\"col-\"],\n  .row &[cl
 ass*=\"col-\"] {\n    &.dropdown-menu-right {\n      float: right;\n    }\n  }\n\n  .form-inline &,\n  .form-horizontal &,\n  .form-group & {\n    margin-bottom: 0;\n  }\n\n  .form-group-lg &.form-control,\n  .form-group-sm &.form-control {\n    padding: 0;\n  }\n\n  // Set the width of the live search (and any other form control within an inline form)\n  // see https://github.com/silviomoreto/bootstrap-select/issues/685\n  .form-inline & .form-control {\n    width: 100%;\n  }\n\n  &.disabled,\n  > .disabled {\n    .cursor-disabled();\n\n    &:focus {\n      outline: none !important;\n    }\n  }\n\n  &.bs-container {\n    position: absolute;\n    \n    .dropdown-menu {\n      z-index: @zindex-select-dropdown;\n    }\n  }\n\n  // The selectpicker button\n  .dropdown-toggle {\n    .filter-option {\n      display: inline-block;\n      overflow: hidden;\n      width: 100%;\n      text-align: left;\n    }\n\n    .caret {\n      position: absolute;\n      top: 50%;\n      right: 12px;\n  
     margin-top: -2px;\n      vertical-align: middle;\n    }\n  }\n\n  &[class*=\"col-\"] .dropdown-toggle {\n    width: 100%;\n  }\n\n  // The selectpicker dropdown\n  .dropdown-menu {\n    min-width: 100%;\n    box-sizing: border-box;\n\n    &.inner {\n      position: static;\n      float: none;\n      border: 0;\n      padding: 0;\n      margin: 0;\n      border-radius: 0;\n      box-shadow: none;\n    }\n\n    li {\n      position: relative;\n\n      &.active small {\n        color: #fff;\n      }\n\n      &.disabled a {\n        .cursor-disabled();\n      }\n\n      a {\n        cursor: pointer;\n        -webkit-user-select: none;\n           -moz-user-select: none;\n            -ms-user-select: none;\n                user-select: none;\n\n        &.opt {\n          position: relative;\n          padding-left: 2.25em;\n        }\n\n        span.check-mark {\n          display: none;\n        }\n\n        span.text {\n          display: inline-block;\n        }\n      }\n\n      
 small {\n        padding-left: 0.5em;\n      }\n    }\n\n    .notify {\n      position: absolute;\n      bottom: 5px;\n      width: 96%;\n      margin: 0 2%;\n      min-height: 26px;\n      padding: 3px 5px;\n      background: rgb(245, 245, 245);\n      border: 1px solid rgb(227, 227, 227);\n      box-shadow: inset 0 1px 1px fade(rgb(0, 0, 0), 5%);\n      pointer-events: none;\n      opacity: 0.9;\n      box-sizing: border-box;\n    }\n  }\n\n  .no-results {\n    padding: 3px;\n    background: #f5f5f5;\n    margin: 0 5px;\n    white-space: nowrap;\n  }\n\n  &.fit-width .dropdown-toggle {\n    .filter-option {\n      position: static;\n    }\n\n    .caret {\n      position: static;\n      top: auto;\n      margin-top: -1px;\n    }\n  }\n\n  &.show-tick .dropdown-menu li {\n    &.selected a span.check-mark {\n      position: absolute;\n      display: inline-block;\n      right: 15px;\n      margin-top: 5px;\n    }\n\n    a span.text {\n      margin-right: 34px;\n    }\n  }\n}\n\n.boot
 strap-select.show-menu-arrow {\n  &.open > .dropdown-toggle {\n    z-index: (@zindex-select-dropdown + 1);\n  }\n\n  .dropdown-toggle {\n    &:before {\n      content: '';\n      border-left: 7px solid transparent;\n      border-right: 7px solid transparent;\n      border-bottom: 7px solid @color-grey-arrow;\n      position: absolute;\n      bottom: -4px;\n      left: 9px;\n      display: none;\n    }\n\n    &:after {\n      content: '';\n      border-left: 6px solid transparent;\n      border-right: 6px solid transparent;\n      border-bottom: 6px solid white;\n      position: absolute;\n      bottom: -4px;\n      left: 10px;\n      display: none;\n    }\n  }\n\n  &.dropup .dropdown-toggle {\n    &:before {\n      bottom: auto;\n      top: -3px;\n      border-top: 7px solid @color-grey-arrow;\n      border-bottom: 0;\n    }\n\n    &:after {\n      bottom: auto;\n      top: -3px;\n      border-top: 6px solid white;\n      border-bottom: 0;\n    }\n  }\n\n  &.pull-right .dropdown-tog
 gle {\n    &:before {\n      right: 12px;\n      left: auto;\n    }\n\n    &:after {\n      right: 13px;\n      left: auto;\n    }\n  }\n\n  &.open > .dropdown-toggle {\n    &:before,\n    &:after {\n      display: block;\n    }\n  }\n}\n\n.bs-searchbox,\n.bs-actionsbox,\n.bs-donebutton {\n  padding: 4px 8px;\n}\n\n.bs-actionsbox {\n  width: 100%;\n  box-sizing: border-box;\n\n  & .btn-group button {\n    width: 50%;\n  }\n}\n\n.bs-donebutton {\n  float: left;\n  width: 100%;\n  box-sizing: border-box;\n\n  & .btn-group button {\n    width: 100%;\n  }\n}\n\n.bs-searchbox {\n  & + .bs-actionsbox {\n    padding: 0 8px 4px;\n  }\n\n  & .form-control {\n    margin-bottom: 0;\n    width: 100%;\n    float: none;\n  }\n}\n",".bootstrap-select {\n  width: 220px \\0;\n  /*IE9 and below*/\n}\n.bootstrap-select > .dropdown-toggle {\n  width: 100%;\n  padding-right: 25px;\n  z-index: 1;\n}\n.bootstrap-select > select {\n  position: absolute !important;\n  bottom: 0;\n  left: 50%;\n  width: 0.11
 px !important;\n  height: 100% !important;\n  padding: 0 !important;\n  opacity: 0 !important;\n  border: none;\n}\n.bootstrap-select > select.mobile-device {\n  top: 0;\n  left: 0;\n  display: block !important;\n  width: 100% !important;\n  z-index: 2;\n}\n.has-error .bootstrap-select .dropdown-toggle,\n.error .bootstrap-select .dropdown-toggle {\n  border-color: #b94a48;\n}\n.bootstrap-select.fit-width {\n  width: auto !important;\n}\n.bootstrap-select:not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n  width: 220px;\n}\n.bootstrap-select .dropdown-toggle:focus {\n  outline: thin dotted #333333 !important;\n  outline: 5px auto -webkit-focus-ring-color !important;\n  outline-offset: -2px;\n}\n.bootstrap-select.form-control {\n  margin-bottom: 0;\n  padding: 0;\n  border: none;\n}\n.bootstrap-select.form-control:not([class*=\"col-\"]) {\n  width: 100%;\n}\n.bootstrap-select.form-control.input-group-btn {\n  z-index: auto;\n}\n.bootstrap-select.btn-group:
 not(.input-group-btn),\n.bootstrap-select.btn-group[class*=\"col-\"] {\n  float: none;\n  display: inline-block;\n  margin-left: 0;\n}\n.bootstrap-select.btn-group.dropdown-menu-right,\n.bootstrap-select.btn-group[class*=\"col-\"].dropdown-menu-right,\n.row .bootstrap-select.btn-group[class*=\"col-\"].dropdown-menu-right {\n  float: right;\n}\n.form-inline .bootstrap-select.btn-group,\n.form-horizontal .bootstrap-select.btn-group,\n.form-group .bootstrap-select.btn-group {\n  margin-bottom: 0;\n}\n.form-group-lg .bootstrap-select.btn-group.form-control,\n.form-group-sm .bootstrap-select.btn-group.form-control {\n  padding: 0;\n}\n.form-inline .bootstrap-select.btn-group .form-control {\n  width: 100%;\n}\n.bootstrap-select.btn-group.disabled,\n.bootstrap-select.btn-group > .disabled {\n  cursor: not-allowed;\n}\n.bootstrap-select.btn-group.disabled:focus,\n.bootstrap-select.btn-group > .disabled:focus {\n  outline: none !important;\n}\n.bootstrap-select.btn-group.bs-container {\n  p
 osition: absolute;\n}\n.bootstrap-select.btn-group.bs-container .dropdown-menu {\n  z-index: 1060;\n}\n.bootstrap-select.btn-group .dropdown-toggle .filter-option {\n  display: inline-block;\n  overflow: hidden;\n  width: 100%;\n  text-align: left;\n}\n.bootstrap-select.btn-group .dropdown-toggle .caret {\n  position: absolute;\n  top: 50%;\n  right: 12px;\n  margin-top: -2px;\n  vertical-align: middle;\n}\n.bootstrap-select.btn-group[class*=\"col-\"] .dropdown-toggle {\n  width: 100%;\n}\n.bootstrap-select.btn-group .dropdown-menu {\n  min-width: 100%;\n  box-sizing: border-box;\n}\n.bootstrap-select.btn-group .dropdown-menu.inner {\n  position: static;\n  float: none;\n  border: 0;\n  padding: 0;\n  margin: 0;\n  border-radius: 0;\n  box-shadow: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li {\n  position: relative;\n}\n.bootstrap-select.btn-group .dropdown-menu li.active small {\n  color: #fff;\n}\n.bootstrap-select.btn-group .dropdown-menu li.disabled a {\n  cursor: not
 -allowed;\n}\n.bootstrap-select.btn-group .dropdown-menu li a {\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li a.opt {\n  position: relative;\n  padding-left: 2.25em;\n}\n.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {\n  display: none;\n}\n.bootstrap-select.btn-group .dropdown-menu li a span.text {\n  display: inline-block;\n}\n.bootstrap-select.btn-group .dropdown-menu li small {\n  padding-left: 0.5em;\n}\n.bootstrap-select.btn-group .dropdown-menu .notify {\n  position: absolute;\n  bottom: 5px;\n  width: 96%;\n  margin: 0 2%;\n  min-height: 26px;\n  padding: 3px 5px;\n  background: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  pointer-events: none;\n  opacity: 0.9;\n  box-sizing: border-box;\n}\n.bootstrap-select.btn-group .no-results {\n  padding: 3px;\n  background: #f5f5f5;\n  margin:
  0 5px;\n  white-space: nowrap;\n}\n.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option {\n  position: static;\n}\n.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret {\n  position: static;\n  top: auto;\n  margin-top: -1px;\n}\n.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {\n  position: absolute;\n  display: inline-block;\n  right: 15px;\n  margin-top: 5px;\n}\n.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {\n  margin-right: 34px;\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle {\n  z-index: 1061;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle:before {\n  content: '';\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid rgba(204, 204, 204, 0.2);\n  position: absolute;\n  bottom: -4px;\n  left: 9px;\n  display: none;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle:after {\n  content: '';\n  border-left: 6px solid t
 ransparent;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid white;\n  position: absolute;\n  bottom: -4px;\n  left: 10px;\n  display: none;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {\n  bottom: auto;\n  top: -3px;\n  border-top: 7px solid rgba(204, 204, 204, 0.2);\n  border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {\n  bottom: auto;\n  top: -3px;\n  border-top: 6px solid white;\n  border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {\n  right: 12px;\n  left: auto;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {\n  right: 13px;\n  left: auto;\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {\n  display: block;\n}\n.bs-searchbox,\n.bs-actionsbox,\n.bs-donebutton {\n  padding: 4px 8px;\n}\n.bs-actionsbox {\n  width: 100%;\n  box-sizing: border-box;\n}\
 n.bs-actionsbox .btn-group button {\n  width: 50%;\n}\n.bs-donebutton {\n  float: left;\n  width: 100%;\n  box-sizing: border-box;\n}\n.bs-donebutton .btn-group button {\n  width: 100%;\n}\n.bs-searchbox + .bs-actionsbox {\n  padding: 0 8px 4px;\n}\n.bs-searchbox .form-control {\n  margin-bottom: 0;\n  width: 100%;\n  float: none;\n}\n/*# sourceMappingURL=bootstrap-select.css.map */"]}
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.min.css
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.min.css	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/css/bootstrap-select.min.css	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */.bootstrap-select{width:220px\9}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px;z-index:1}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;width:.11px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.b
 tn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group.bs-container{position:absolute}.bootstrap-select.btn-group.bs-container .dropdown-menu{z-index:1060}.bootstrap-select.btn-group .drop
 down-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li.active small{color:#fff}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select.btn-group .dropdown-menu li a.opt{pos
 ition:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.select
 ed a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arr
 ow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,1710 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  'use strict';
+
+  //<editor-fold desc="Shims">
+  if (!String.prototype.includes) {
+    (function () {
+      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+      var toString = {}.toString;
+      var defineProperty = (function () {
+        // IE 8 only supports `Object.defineProperty` on DOM elements
+        try {
+          var object = {};
+          var $defineProperty = Object.defineProperty;
+          var result = $defineProperty(object, object, object) && $defineProperty;
+        } catch (error) {
+        }
+        return result;
+      }());
+      var indexOf = ''.indexOf;
+      var includes = function (search) {
+        if (this == null) {
+          throw new TypeError();
+        }
+        var string = String(this);
+        if (search && toString.call(search) == '[object RegExp]') {
+          throw new TypeError();
+        }
+        var stringLength = string.length;
+        var searchString = String(search);
+        var searchLength = searchString.length;
+        var position = arguments.length > 1 ? arguments[1] : undefined;
+        // `ToInteger`
+        var pos = position ? Number(position) : 0;
+        if (pos != pos) { // better `isNaN`
+          pos = 0;
+        }
+        var start = Math.min(Math.max(pos, 0), stringLength);
+        // Avoid the `indexOf` call if no match is possible
+        if (searchLength + start > stringLength) {
+          return false;
+        }
+        return indexOf.call(string, searchString, pos) != -1;
+      };
+      if (defineProperty) {
+        defineProperty(String.prototype, 'includes', {
+          'value': includes,
+          'configurable': true,
+          'writable': true
+        });
+      } else {
+        String.prototype.includes = includes;
+      }
+    }());
+  }
+
+  if (!String.prototype.startsWith) {
+    (function () {
+      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+      var defineProperty = (function () {
+        // IE 8 only supports `Object.defineProperty` on DOM elements
+        try {
+          var object = {};
+          var $defineProperty = Object.defineProperty;
+          var result = $defineProperty(object, object, object) && $defineProperty;
+        } catch (error) {
+        }
+        return result;
+      }());
+      var toString = {}.toString;
+      var startsWith = function (search) {
+        if (this == null) {
+          throw new TypeError();
+        }
+        var string = String(this);
+        if (search && toString.call(search) == '[object RegExp]') {
+          throw new TypeError();
+        }
+        var stringLength = string.length;
+        var searchString = String(search);
+        var searchLength = searchString.length;
+        var position = arguments.length > 1 ? arguments[1] : undefined;
+        // `ToInteger`
+        var pos = position ? Number(position) : 0;
+        if (pos != pos) { // better `isNaN`
+          pos = 0;
+        }
+        var start = Math.min(Math.max(pos, 0), stringLength);
+        // Avoid the `indexOf` call if no match is possible
+        if (searchLength + start > stringLength) {
+          return false;
+        }
+        var index = -1;
+        while (++index < searchLength) {
+          if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
+            return false;
+          }
+        }
+        return true;
+      };
+      if (defineProperty) {
+        defineProperty(String.prototype, 'startsWith', {
+          'value': startsWith,
+          'configurable': true,
+          'writable': true
+        });
+      } else {
+        String.prototype.startsWith = startsWith;
+      }
+    }());
+  }
+
+  if (!Object.keys) {
+    Object.keys = function (
+      o, // object
+      k, // key
+      r  // result array
+      ){
+      // initialize object and result
+      r=[];
+      // iterate over object keys
+      for (k in o)
+          // fill result array with non-prototypical keys
+        r.hasOwnProperty.call(o, k) && r.push(k);
+      // return result
+      return r;
+    };
+  }
+
+  $.fn.triggerNative = function (eventName) {
+    var el = this[0],
+        event;
+
+    if (el.dispatchEvent) {
+      if (typeof Event === 'function') {
+        // For modern browsers
+        event = new Event(eventName, {
+          bubbles: true
+        });
+      } else {
+        // For IE since it doesn't support Event constructor
+        event = document.createEvent('Event');
+        event.initEvent(eventName, true, false);
+      }
+
+      el.dispatchEvent(event);
+    } else {
+      if (el.fireEvent) {
+        event = document.createEventObject();
+        event.eventType = eventName;
+        el.fireEvent('on' + eventName, event);
+      }
+
+      this.trigger(eventName);
+    }
+  };
+  //</editor-fold>
+
+  // Case insensitive contains search
+  $.expr[':'].icontains = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
+    return haystack.includes(meta[3].toUpperCase());
+  };
+
+  // Case insensitive begins search
+  $.expr[':'].ibegins = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
+    return haystack.startsWith(meta[3].toUpperCase());
+  };
+
+  // Case and accent insensitive contains search
+  $.expr[':'].aicontains = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
+    return haystack.includes(meta[3].toUpperCase());
+  };
+
+  // Case and accent insensitive begins search
+  $.expr[':'].aibegins = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
+    return haystack.startsWith(meta[3].toUpperCase());
+  };
+
+  /**
+   * Remove all diatrics from the given text.
+   * @access private
+   * @param {String} text
+   * @returns {String}
+   */
+  function normalizeToBase(text) {
+    var rExps = [
+      {re: /[\xC0-\xC6]/g, ch: "A"},
+      {re: /[\xE0-\xE6]/g, ch: "a"},
+      {re: /[\xC8-\xCB]/g, ch: "E"},
+      {re: /[\xE8-\xEB]/g, ch: "e"},
+      {re: /[\xCC-\xCF]/g, ch: "I"},
+      {re: /[\xEC-\xEF]/g, ch: "i"},
+      {re: /[\xD2-\xD6]/g, ch: "O"},
+      {re: /[\xF2-\xF6]/g, ch: "o"},
+      {re: /[\xD9-\xDC]/g, ch: "U"},
+      {re: /[\xF9-\xFC]/g, ch: "u"},
+      {re: /[\xC7-\xE7]/g, ch: "c"},
+      {re: /[\xD1]/g, ch: "N"},
+      {re: /[\xF1]/g, ch: "n"}
+    ];
+    $.each(rExps, function () {
+      text = text.replace(this.re, this.ch);
+    });
+    return text;
+  }
+
+
+  function htmlEscape(html) {
+    var escapeMap = {
+      '&': '&',
+      '<': '<',
+      '>': '>',
+      '"': '"',
+      "'": '&#x27;',
+      '`': '&#x60;'
+    };
+    var source = '(?:' + Object.keys(escapeMap).join('|') + ')',
+        testRegexp = new RegExp(source),
+        replaceRegexp = new RegExp(source, 'g'),
+        string = html == null ? '' : '' + html;
+    return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) {
+      return escapeMap[match];
+    }) : string;
+  }
+
+  var Selectpicker = function (element, options, e) {
+    if (e) {
+      e.stopPropagation();
+      e.preventDefault();
+    }
+
+    this.$element = $(element);
+    this.$newElement = null;
+    this.$button = null;
+    this.$menu = null;
+    this.$lis = null;
+    this.options = options;
+
+    // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a
+    // data-attribute)
+    if (this.options.title === null) {
+      this.options.title = this.$element.attr('title');
+    }
+
+    //Expose public methods
+    this.val = Selectpicker.prototype.val;
+    this.render = Selectpicker.prototype.render;
+    this.refresh = Selectpicker.prototype.refresh;
+    this.setStyle = Selectpicker.prototype.setStyle;
+    this.selectAll = Selectpicker.prototype.selectAll;
+    this.deselectAll = Selectpicker.prototype.deselectAll;
+    this.destroy = Selectpicker.prototype.destroy;
+    this.remove = Selectpicker.prototype.remove;
+    this.show = Selectpicker.prototype.show;
+    this.hide = Selectpicker.prototype.hide;
+
+    this.init();
+  };
+
+  Selectpicker.VERSION = '1.9.3';
+
+  // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.
+  Selectpicker.DEFAULTS = {
+    noneSelectedText: 'Nothing selected',
+    noneResultsText: 'No results matched {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
+        (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
+      ];
+    },
+    selectAllText: 'Select All',
+    deselectAllText: 'Deselect All',
+    doneButton: false,
+    doneButtonText: 'Close',
+    multipleSeparator: ', ',
+    styleBase: 'btn',
+    style: 'btn-default',
+    size: 'auto',
+    title: null,
+    selectedTextFormat: 'values',
+    width: false,
+    container: false,
+    hideDisabled: false,
+    showSubtext: false,
+    showIcon: true,
+    showContent: true,
+    dropupAuto: true,
+    header: false,
+    liveSearch: false,
+    liveSearchPlaceholder: null,
+    liveSearchNormalize: false,
+    liveSearchStyle: 'contains',
+    actionsBox: false,
+    iconBase: 'glyphicon',
+    tickIcon: 'glyphicon-ok',
+    template: {
+      caret: '<span class="caret"></span>'
+    },
+    maxOptions: false,
+    mobile: false,
+    selectOnTab: false,
+    dropdownAlignRight: false
+  };
+
+  Selectpicker.prototype = {
+
+    constructor: Selectpicker,
+
+    init: function () {
+      var that = this,
+          id = this.$element.attr('id');
+
+      // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility
+      // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]')
+      this.liObj = {};
+      this.multiple = this.$element.prop('multiple');
+      this.autofocus = this.$element.prop('autofocus');
+      this.$newElement = this.createView();
+      this.$element
+        .after(this.$newElement)
+        .appendTo(this.$newElement);
+      this.$button = this.$newElement.children('button');
+      this.$menu = this.$newElement.children('.dropdown-menu');
+      this.$menuInner = this.$menu.children('.inner');
+      this.$searchbox = this.$menu.find('input');
+
+      if (this.options.dropdownAlignRight)
+        this.$menu.addClass('dropdown-menu-right');
+
+      if (typeof id !== 'undefined') {
+        this.$button.attr('data-id', id);
+        $('label[for="' + id + '"]').click(function (e) {
+          e.preventDefault();
+          that.$button.focus();
+        });
+      }
+
+      this.checkDisabled();
+      this.clickListener();
+      if (this.options.liveSearch) this.liveSearchListener();
+      this.render();
+      this.setStyle();
+      this.setWidth();
+      if (this.options.container) this.selectPosition();
+      this.$menu.data('this', this);
+      this.$newElement.data('this', this);
+      if (this.options.mobile) this.mobile();
+
+      this.$newElement.on({
+        'hide.bs.dropdown': function (e) {
+          that.$element.trigger('hide.bs.select', e);
+        },
+        'hidden.bs.dropdown': function (e) {
+          that.$element.trigger('hidden.bs.select', e);
+        },
+        'show.bs.dropdown': function (e) {
+          that.$element.trigger('show.bs.select', e);
+        },
+        'shown.bs.dropdown': function (e) {
+          that.$element.trigger('shown.bs.select', e);
+        }
+      });
+
+      if (that.$element[0].hasAttribute('required')) {
+        this.$element.on('invalid', function () {
+          that.$button
+            .addClass('bs-invalid')
+            .focus();
+          
+          that.$element.on({
+            'focus.bs.select': function () {
+              that.$button.focus();
+              that.$element.off('focus.bs.select');
+            },
+            'shown.bs.select': function () {
+              that.$element
+                .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened
+                .off('shown.bs.select');
+            },
+            'rendered.bs.select': function () {
+              // if select is no longer invalid, remove the bs-invalid class
+              if (this.validity.valid) that.$button.removeClass('bs-invalid');
+              that.$element.off('rendered.bs.select');
+            }
+          });
+          
+        });
+      }
+
+      setTimeout(function () {
+        that.$element.trigger('loaded.bs.select');
+      });
+    },
+
+    createDropdown: function () {
+      // Options
+      // If we are multiple, then add the show-tick class by default
+      var multiple = this.multiple ? ' show-tick' : '',
+          inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '',
+          autofocus = this.autofocus ? ' autofocus' : '';
+      // Elements
+      var header = this.options.header ? '<div class="popover-title"><button type="button" class="close" aria-hidden="true">×</button>' + this.options.header + '</div>' : '';
+      var searchbox = this.options.liveSearch ?
+      '<div class="bs-searchbox">' +
+      '<input type="text" class="form-control" autocomplete="off"' +
+      (null === this.options.liveSearchPlaceholder ? '' : ' placeholder="' + htmlEscape(this.options.liveSearchPlaceholder) + '"') + '>' +
+      '</div>'
+          : '';
+      var actionsbox = this.multiple && this.options.actionsBox ?
+      '<div class="bs-actionsbox">' +
+      '<div class="btn-group btn-group-sm btn-block">' +
+      '<button type="button" class="actions-btn bs-select-all btn btn-default">' +
+      this.options.selectAllText +
+      '</button>' +
+      '<button type="button" class="actions-btn bs-deselect-all btn btn-default">' +
+      this.options.deselectAllText +
+      '</button>' +
+      '</div>' +
+      '</div>'
+          : '';
+      var donebutton = this.multiple && this.options.doneButton ?
+      '<div class="bs-donebutton">' +
+      '<div class="btn-group btn-block">' +
+      '<button type="button" class="btn btn-sm btn-default">' +
+      this.options.doneButtonText +
+      '</button>' +
+      '</div>' +
+      '</div>'
+          : '';
+      var drop =
+          '<div class="btn-group bootstrap-select' + multiple + inputGroup + '">' +
+          '<button type="button" class="' + this.options.styleBase + ' dropdown-toggle" data-toggle="dropdown"' + autofocus + '>' +
+          '<span class="filter-option pull-left"></span> ' +
+          '<span class="bs-caret">' +
+          this.options.template.caret +
+          '</span>' +
+          '</button>' +
+          '<div class="dropdown-menu open">' +
+          header +
+          searchbox +
+          actionsbox +
+          '<ul class="dropdown-menu inner" role="menu">' +
+          '</ul>' +
+          donebutton +
+          '</div>' +
+          '</div>';
+
+      return $(drop);
+    },
+
+    createView: function () {
+      var $drop = this.createDropdown(),
+          li = this.createLi();
+
+      $drop.find('ul')[0].innerHTML = li;
+      return $drop;
+    },
+
+    reloadLi: function () {
+      //Remove all children.
+      this.destroyLi();
+      //Re build
+      var li = this.createLi();
+      this.$menuInner[0].innerHTML = li;
+    },
+
+    destroyLi: function () {
+      this.$menu.find('li').remove();
+    },
+
+    createLi: function () {
+      var that = this,
+          _li = [],
+          optID = 0,
+          titleOption = document.createElement('option'),
+          liIndex = -1; // increment liIndex whenever a new <li> element is created to ensure liObj is correct
+
+      // Helper functions
+      /**
+       * @param content
+       * @param [index]
+       * @param [classes]
+       * @param [optgroup]
+       * @returns {string}
+       */
+      var generateLI = function (content, index, classes, optgroup) {
+        return '<li' +
+            ((typeof classes !== 'undefined' & '' !== classes) ? ' class="' + classes + '"' : '') +
+            ((typeof index !== 'undefined' & null !== index) ? ' data-original-index="' + index + '"' : '') +
+            ((typeof optgroup !== 'undefined' & null !== optgroup) ? 'data-optgroup="' + optgroup + '"' : '') +
+            '>' + content + '</li>';
+      };
+
+      /**
+       * @param text
+       * @param [classes]
+       * @param [inline]
+       * @param [tokens]
+       * @returns {string}
+       */
+      var generateA = function (text, classes, inline, tokens) {
+        return '<a tabindex="0"' +
+            (typeof classes !== 'undefined' ? ' class="' + classes + '"' : '') +
+            (typeof inline !== 'undefined' ? ' style="' + inline + '"' : '') +
+            (that.options.liveSearchNormalize ? ' data-normalized-text="' + normalizeToBase(htmlEscape(text)) + '"' : '') +
+            (typeof tokens !== 'undefined' || tokens !== null ? ' data-tokens="' + tokens + '"' : '') +
+            '>' + text +
+            '<span class="' + that.options.iconBase + ' ' + that.options.tickIcon + ' check-mark"></span>' +
+            '</a>';
+      };
+
+      if (this.options.title && !this.multiple) {
+        // this option doesn't create a new <li> element, but does add a new option, so liIndex is decreased
+        // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended
+        liIndex--;
+
+        if (!this.$element.find('.bs-title-option').length) {
+          // Use native JS to prepend option (faster)
+          var element = this.$element[0];
+          titleOption.className = 'bs-title-option';
+          titleOption.appendChild(document.createTextNode(this.options.title));
+          titleOption.value = '';
+          element.insertBefore(titleOption, element.firstChild);
+          // Check if selected attribute is already set on an option. If not, select the titleOption option.
+          if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true;
+        }
+      }
+
+      this.$element.find('option').each(function (index) {
+        var $this = $(this);
+
+        liIndex++;
+
+        if ($this.hasClass('bs-title-option')) return;
+
+        // Get the class and text for the option
+        var optionClass = this.className || '',
+            inline = this.style.cssText,
+            text = $this.data('content') ? $this.data('content') : $this.html(),
+            tokens = $this.data('tokens') ? $this.data('tokens') : null,
+            subtext = typeof $this.data('subtext') !== 'undefined' ? '<small class="text-muted">' + $this.data('subtext') + '</small>' : '',
+            icon = typeof $this.data('icon') !== 'undefined' ? '<span class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></span> ' : '',
+            isDisabled = this.disabled || (this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled);
+
+        if (icon !== '' && isDisabled) {
+          icon = '<span>' + icon + '</span>';
+        }
+
+        if (that.options.hideDisabled && isDisabled) {
+          liIndex--;
+          return;
+        }
+
+        if (!$this.data('content')) {
+          // Prepend any icon and append any subtext to the main text.
+          text = icon + '<span class="text">' + text + subtext + '</span>';
+        }
+
+        if (this.parentNode.tagName === 'OPTGROUP' && $this.data('divider') !== true) {
+          var optGroupClass = ' ' + this.parentNode.className || '';
+
+          if ($this.index() === 0) { // Is it the first option of the optgroup?
+            optID += 1;
+
+            // Get the opt group label
+            var label = this.parentNode.label,
+                labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '<small class="text-muted">' + $this.parent().data('subtext') + '</small>' : '',
+                labelIcon = $this.parent().data('icon') ? '<span class="' + that.options.iconBase + ' ' + $this.parent().data('icon') + '"></span> ' : '';
+
+            label = labelIcon + '<span class="text">' + label + labelSubtext + '</span>';
+
+            if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown?
+              liIndex++;
+              _li.push(generateLI('', null, 'divider', optID + 'div'));
+            }
+            liIndex++;
+            _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID));
+          }
+          _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID));
+        } else if ($this.data('divider') === true) {
+          _li.push(generateLI('', index, 'divider'));
+        } else if ($this.data('hidden') === true) {
+          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));
+        } else {
+          if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') {
+            liIndex++;
+            _li.push(generateLI('', null, 'divider', optID + 'div'));
+          }
+          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index));
+        }
+
+        that.liObj[index] = liIndex;
+      });
+
+      //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button
+      if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {
+        this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');
+      }
+
+      return _li.join('');
+    },
+
+    findLis: function () {
+      if (this.$lis == null) this.$lis = this.$menu.find('li');
+      return this.$lis;
+    },
+
+    /**
+     * @param [updateLi] defaults to true
+     */
+    render: function (updateLi) {
+      var that = this,
+          notDisabled;
+
+      //Update the LI to match the SELECT
+      if (updateLi !== false) {
+        this.$element.find('option').each(function (index) {
+          var $lis = that.findLis().eq(that.liObj[index]);
+
+          that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis);
+          that.setSelected(index, this.selected, $lis);
+        });
+      }
+
+      this.tabIndex();
+
+      var selectedItems = this.$element.find('option').map(function () {
+        if (this.selected) {
+          if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return;
+
+          var $this = $(this),
+              icon = $this.data('icon') && that.options.showIcon ? '<i class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></i> ' : '',
+              subtext;
+
+          if (that.options.showSubtext && $this.data('subtext') && !that.multiple) {
+            subtext = ' <small class="text-muted">' + $this.data('subtext') + '</small>';
+          } else {
+            subtext = '';
+          }
+          if (typeof $this.attr('title') !== 'undefined') {
+            return $this.attr('title');
+          } else if ($this.data('content') && that.options.showContent) {
+            return $this.data('content');
+          } else {
+            return icon + $this.html() + subtext;
+          }
+        }
+      }).toArray();
+
+      //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled
+      //Convert all the values into a comma delimited string
+      var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);
+
+      //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..
+      if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {
+        var max = this.options.selectedTextFormat.split('>');
+        if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {
+          notDisabled = this.options.hideDisabled ? ', [disabled]' : '';
+          var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length,
+              tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;
+          title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());
+        }
+      }
+
+      if (this.options.title == undefined) {
+        this.options.title = this.$element.attr('title');
+      }
+
+      if (this.options.selectedTextFormat == 'static') {
+        title = this.options.title;
+      }
+
+      //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text
+      if (!title) {
+        title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;
+      }
+
+      //strip all html-tags and trim the result
+      this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, '')));
+      this.$button.children('.filter-option').html(title);
+
+      this.$element.trigger('rendered.bs.select');
+    },
+
+    /**
+     * @param [style]
+     * @param [status]
+     */
+    setStyle: function (style, status) {
+      if (this.$element.attr('class')) {
+        this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, ''));
+      }
+
+      var buttonClass = style ? style : this.options.style;
+
+      if (status == 'add') {
+        this.$button.addClass(buttonClass);
+      } else if (status == 'remove') {
+        this.$button.removeClass(buttonClass);
+      } else {
+        this.$button.removeClass(this.options.style);
+        this.$button.addClass(buttonClass);
+      }
+    },
+
+    liHeight: function (refresh) {
+      if (!refresh && (this.options.size === false || this.sizeInfo)) return;
+
+      var newElement = document.createElement('div'),
+          menu = document.createElement('div'),
+          menuInner = document.createElement('ul'),
+          divider = document.createElement('li'),
+          li = document.createElement('li'),
+          a = document.createElement('a'),
+          text = document.createElement('span'),
+          header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null,
+          search = this.options.liveSearch ? document.createElement('div') : null,
+          actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
+          doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null;
+
+      text.className = 'text';
+      newElement.className = this.$menu[0].parentNode.className + ' open';
+      menu.className = 'dropdown-menu open';
+      menuInner.className = 'dropdown-menu inner';
+      divider.className = 'divider';
+
+      text.appendChild(document.createTextNode('Inner text'));
+      a.appendChild(text);
+      li.appendChild(a);
+      menuInner.appendChild(li);
+      menuInner.appendChild(divider);
+      if (header) menu.appendChild(header);
+      if (search) {
+        // create a span instead of input as creating an input element is slower
+        var input = document.createElement('span');
+        search.className = 'bs-searchbox';
+        input.className = 'form-control';
+        search.appendChild(input);
+        menu.appendChild(search);
+      }
+      if (actions) menu.appendChild(actions);
+      menu.appendChild(menuInner);
+      if (doneButton) menu.appendChild(doneButton);
+      newElement.appendChild(menu);
+
+      document.body.appendChild(newElement);
+
+      var liHeight = a.offsetHeight,
+          headerHeight = header ? header.offsetHeight : 0,
+          searchHeight = search ? search.offsetHeight : 0,
+          actionsHeight = actions ? actions.offsetHeight : 0,
+          doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,
+          dividerHeight = $(divider).outerHeight(true),
+          // fall back to jQuery if getComputedStyle is not supported
+          menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false,
+          $menu = menuStyle ? null : $(menu),
+          menuPadding = parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +
+                        parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +
+                        parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +
+                        parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),
+          menuExtras =  menuPadding +
+                        parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +
+                        parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2;
+
+      document.body.removeChild(newElement);
+
+      this.sizeInfo = {
+        liHeight: liHeight,
+        headerHeight: headerHeight,
+        searchHeight: searchHeight,
+        actionsHeight: actionsHeight,
+        doneButtonHeight: doneButtonHeight,
+        dividerHeight: dividerHeight,
+        menuPadding: menuPadding,
+        menuExtras: menuExtras
+      };
+    },
+
+    setSize: function () {
+      this.findLis();
+      this.liHeight();
+
+      if (this.options.header) this.$menu.css('padding-top', 0);
+      if (this.options.size === false) return;
+
+      var that = this,
+          $menu = this.$menu,
+          $menuInner = this.$menuInner,
+          $window = $(window),
+          selectHeight = this.$newElement[0].offsetHeight,
+          liHeight = this.sizeInfo['liHeight'],
+          headerHeight = this.sizeInfo['headerHeight'],
+          searchHeight = this.sizeInfo['searchHeight'],
+          actionsHeight = this.sizeInfo['actionsHeight'],
+          doneButtonHeight = this.sizeInfo['doneButtonHeight'],
+          divHeight = this.sizeInfo['dividerHeight'],
+          menuPadding = this.sizeInfo['menuPadding'],
+          menuExtras = this.sizeInfo['menuExtras'],
+          notDisabled = this.options.hideDisabled ? '.disabled' : '',
+          menuHeight,
+          getHeight,
+          selectOffsetTop,
+          selectOffsetBot,
+          posVert = function () {
+            selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();
+            selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;
+          };
+
+      posVert();
+
+      if (this.options.size === 'auto') {
+        var getSize = function () {
+          var minHeight,
+              hasClass = function (className, include) {
+                return function (element) {
+                    if (include) {
+                        return (element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+                    } else {
+                        return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+                    }
+                };
+              },
+              lis = that.$menuInner[0].getElementsByTagName('li'),
+              lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'),
+              optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header');
+
+          posVert();
+          menuHeight = selectOffsetBot - menuExtras;
+
+          if (that.options.container) {
+            if (!$menu.data('height')) $menu.data('height', $menu.height());
+            getHeight = $menu.data('height');
+          } else {
+            getHeight = $menu.height();
+          }
+
+          if (that.options.dropupAuto) {
+            that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
+          }
+          if (that.$newElement.hasClass('dropup')) {
+            menuHeight = selectOffsetTop - menuExtras;
+          }
+
+          if ((lisVisible.length + optGroup.length) > 3) {
+            minHeight = liHeight * 3 + menuExtras - 2;
+          } else {
+            minHeight = 0;
+          }
+
+          $menu.css({
+            'max-height': menuHeight + 'px',
+            'overflow': 'hidden',
+            'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px'
+          });
+          $menuInner.css({
+            'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding + 'px',
+            'overflow-y': 'auto',
+            'min-height': Math.max(minHeight - menuPadding, 0) + 'px'
+          });
+        };
+        getSize();
+        this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);
+        $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize);
+      } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) {
+        var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(),
+            divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;
+        menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding;
+
+        if (that.options.container) {
+          if (!$menu.data('height')) $menu.data('height', $menu.height());
+          getHeight = $menu.data('height');
+        } else {
+          getHeight = $menu.height();
+        }
+
+        if (that.options.dropupAuto) {
+          //noinspection JSUnusedAssignment
+          this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
+        }
+        $menu.css({
+          'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',
+          'overflow': 'hidden',
+          'min-height': ''
+        });
+        $menuInner.css({
+          'max-height': menuHeight - menuPadding + 'px',
+          'overflow-y': 'auto',
+          'min-height': ''
+        });
+      }
+    },
+
+    setWidth: function () {
+      if (this.options.width === 'auto') {
+        this.$menu.css('min-width', '0');
+
+        // Get correct width if element is hidden
+        var $selectClone = this.$menu.parent().clone().appendTo('body'),
+            $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone,
+            ulWidth = $selectClone.children('.dropdown-menu').outerWidth(),
+            btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth();
+
+        $selectClone.remove();
+        $selectClone2.remove();
+
+        // Set width to whatever's larger, button title or longest option
+        this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px');
+      } else if (this.options.width === 'fit') {
+        // Remove inline min-width so width can be changed from 'auto'
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', '').addClass('fit-width');
+      } else if (this.options.width) {
+        // Remove inline min-width so width can be changed from 'auto'
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', this.options.width);
+      } else {
+        // Remove inline min-width/width so width can be changed
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', '');
+      }
+      // Remove fit-width class if width is changed programmatically
+      if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {
+        this.$newElement.removeClass('fit-width');
+      }
+    },
+
+    selectPosition: function () {
+      this.$bsContainer = $('<div class="bs-container" />');
+
+      var that = this,
+          pos,
+          actualHeight,
+          getPlacement = function ($element) {
+            that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));
+            pos = $element.offset();
+            actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;
+            that.$bsContainer.css({
+              'top': pos.top + actualHeight,
+              'left': pos.left,
+              'width': $element[0].offsetWidth
+            });
+          };
+
+      this.$button.on('click', function () {
+        var $this = $(this);
+
+        if (that.isDisabled()) {
+          return;
+        }
+
+        getPlacement(that.$newElement);
+
+        that.$bsContainer
+          .appendTo(that.options.container)
+          .toggleClass('open', !$this.hasClass('open'))
+          .append(that.$menu);
+      });
+
+      $(window).on('resize scroll', function () {
+        getPlacement(that.$newElement);
+      });
+
+      this.$element.on('hide.bs.select', function () {
+        that.$menu.data('height', that.$menu.height());
+        that.$bsContainer.detach();
+      });
+    },
+
+    setSelected: function (index, selected, $lis) {
+      if (!$lis) {
+        $lis = this.findLis().eq(this.liObj[index]);
+      }
+
+      $lis.toggleClass('selected', selected);
+    },
+
+    setDisabled: function (index, disabled, $lis) {
+      if (!$lis) {
+        $lis = this.findLis().eq(this.liObj[index]);
+      }
+
+      if (disabled) {
+        $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1);
+      } else {
+        $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0);
+      }
+    },
+
+    isDisabled: function () {
+      return this.$element[0].disabled;
+    },
+
+    checkDisabled: function () {
+      var that = this;
+
+      if (this.isDisabled()) {
+        this.$newElement.addClass('disabled');
+        this.$button.addClass('disabled').attr('tabindex', -1);
+      } else {
+        if (this.$button.hasClass('disabled')) {
+          this.$newElement.removeClass('disabled');
+          this.$button.removeClass('disabled');
+        }
+
+        if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {
+          this.$button.removeAttr('tabindex');
+        }
+      }
+
+      this.$button.click(function () {
+        return !that.isDisabled();
+      });
+    },
+
+    tabIndex: function () {
+      if (this.$element.data('tabindex') !== this.$element.attr('tabindex') && 
+        (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) {
+        this.$element.data('tabindex', this.$element.attr('tabindex'));
+        this.$button.attr('tabindex', this.$element.data('tabindex'));
+      }
+      
+      this.$element.attr('tabindex', -98);
+    },
+
+    clickListener: function () {
+      var that = this,
+          $document = $(document);
+
+      this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) {
+        e.stopPropagation();
+      });
+
+      $document.data('spaceSelect', false);
+
+      this.$button.on('keyup', function (e) {
+        if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {
+            e.preventDefault();
+            $document.data('spaceSelect', false);
+        }
+      });
+
+      this.$button.on('click', function () {
+        that.setSize();
+        that.$element.on('shown.bs.select', function () {
+          if (!that.options.liveSearch && !that.multiple) {
+            that.$menuInner.find('.selected a').focus();
+          } else if (!that.multiple) {
+            var selectedIndex = that.liObj[that.$element[0].selectedIndex];
+
+            if (typeof selectedIndex !== 'number' || that.options.size === false) return;
+
+            // scroll to selected option
+            var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop;
+            offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2;
+            that.$menuInner[0].scrollTop = offset;
+          }
+        });
+      });
+
+      this.$menuInner.on('click', 'li a', function (e) {
+        var $this = $(this),
+            clickedIndex = $this.parent().data('originalIndex'),
+            prevValue = that.$element.val(),
+            prevIndex = that.$element.prop('selectedIndex');
+
+        // Don't close on multi choice menu
+        if (that.multiple) {
+          e.stopPropagation();
+        }
+
+        e.preventDefault();
+
+        //Don't run if we have been disabled
+        if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {
+          var $options = that.$element.find('option'),
+              $option = $options.eq(clickedIndex),
+              state = $option.prop('selected'),
+              $optgroup = $option.parent('optgroup'),
+              maxOptions = that.options.maxOptions,
+              maxOptionsGrp = $optgroup.data('maxOptions') || false;
+
+          if (!that.multiple) { // Deselect all others if not multi select box
+            $options.prop('selected', false);
+            $option.prop('selected', true);
+            that.$menuInner.find('.selected').removeClass('selected');
+            that.setSelected(clickedIndex, true);
+          } else { // Toggle the one we have chosen if we are multi select.
+            $option.prop('selected', !state);
+            that.setSelected(clickedIndex, !state);
+            $this.blur();
+
+            if (maxOptions !== false || maxOptionsGrp !== false) {
+              var maxReached = maxOptions < $options.filter(':selected').length,
+                  maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;
+
+              if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {
+                if (maxOptions && maxOptions == 1) {
+                  $options.prop('selected', false);
+                  $option.prop('selected', true);
+                  that.$menuInner.find('.selected').removeClass('selected');
+                  that.setSelected(clickedIndex, true);
+                } else if (maxOptionsGrp && maxOptionsGrp == 1) {
+                  $optgroup.find('option:selected').prop('selected', false);
+                  $option.prop('selected', true);
+                  var optgroupID = $this.parent().data('optgroup');
+                  that.$menuInner.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected');
+                  that.setSelected(clickedIndex, true);
+                } else {
+                  var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ?
+                          that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.maxOptionsText,
+                      maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),
+                      maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),
+                      $notify = $('<div class="notify"></div>');
+                  // If {var} is set in array, replace it
+                  /** @deprecated */
+                  if (maxOptionsArr[2]) {
+                    maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);
+                    maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);
+                  }
+
+                  $option.prop('selected', false);
+
+                  that.$menu.append($notify);
+
+                  if (maxOptions && maxReached) {
+                    $notify.append($('<div>' + maxTxt + '</div>'));
+                    that.$element.trigger('maxReached.bs.select');
+                  }
+
+                  if (maxOptionsGrp && maxReachedGrp) {
+                    $notify.append($('<div>' + maxTxtGrp + '</div>'));
+                    that.$element.trigger('maxReachedGrp.bs.select');
+                  }
+
+                  setTimeout(function () {
+                    that.setSelected(clickedIndex, false);
+                  }, 10);
+
+                  $notify.delay(750).fadeOut(300, function () {
+                    $(this).remove();
+                  });
+                }
+              }
+            }
+          }
+
+          if (!that.multiple) {
+            that.$button.focus();
+          } else if (that.options.liveSearch) {
+            that.$searchbox.focus();
+          }
+
+          // Trigger select 'change'
+          if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {
+            that.$element.triggerNative('change');
+            // $option.prop('selected') is current option state (selected/unselected). state is previous option state.
+            that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]);
+          }
+        }
+      });
+
+      this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) {
+        if (e.currentTarget == this) {
+          e.preventDefault();
+          e.stopPropagation();
+          if (that.options.liveSearch && !$(e.target).hasClass('close')) {
+            that.$searchbox.focus();
+          } else {
+            that.$button.focus();
+          }
+        }
+      });
+
+      this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {
+        e.preventDefault();
+        e.stopPropagation();
+        if (that.options.liveSearch) {
+          that.$searchbox.focus();
+        } else {
+          that.$button.focus();
+        }
+      });
+
+      this.$menu.on('click', '.popover-title .close', function () {
+        that.$button.click();
+      });
+
+      this.$searchbox.on('click', function (e) {
+        e.stopPropagation();
+      });
+
+      this.$menu.on('click', '.actions-btn', function (e) {
+        if (that.options.liveSearch) {
+          that.$searchbox.focus();
+        } else {
+          that.$button.focus();
+        }
+
+        e.preventDefault();
+        e.stopPropagation();
+
+        if ($(this).hasClass('bs-select-all')) {
+          that.selectAll();
+        } else {
+          that.deselectAll();
+        }
+        that.$element.triggerNative('change');
+      });
+
+      this.$element.change(function () {
+        that.render(false);
+      });
+    },
+
+    liveSearchListener: function () {
+      var that = this,
+          $no_results = $('<li class="no-results"></li>');
+
+      this.$button.on('click.dropdown.data-api touchstart.dropdown.data-api', function () {
+        that.$menuInner.find('.active').removeClass('active');
+        if (!!that.$searchbox.val()) {
+          that.$searchbox.val('');
+          that.$lis.not('.is-hidden').removeClass('hidden');
+          if (!!$no_results.parent().length) $no_results.remove();
+        }
+        if (!that.multiple) that.$menuInner.find('.selected').addClass('active');
+        setTimeout(function () {
+          that.$searchbox.focus();
+        }, 10);
+      });
+
+      this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) {
+        e.stopPropagation();
+      });
+
+      this.$searchbox.on('input propertychange', function () {
+        if (that.$searchbox.val()) {
+          var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a');
+          if (that.options.liveSearchNormalize) {
+            $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")');
+          } else {
+            $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")');
+          }
+          $searchBase.parent().addClass('hidden');
+
+          that.$lis.filter('.dropdown-header').each(function () {
+            var $this = $(this),
+                optgroup = $this.data('optgroup');
+
+            if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) {
+              $this.addClass('hidden');
+              that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden');
+            }
+          });
+
+          var $lisVisible = that.$lis.not('.hidden');
+
+          // hide divider if first or last visible, or if followed by another divider
+          $lisVisible.each(function (index) {
+            var $this = $(this);
+
+            if ($this.hasClass('divider') && (
+              $this.index() === $lisVisible.first().index() ||
+              $this.index() === $lisVisible.last().index() ||
+              $lisVisible.eq(index + 1).hasClass('divider'))) {
+              $this.addClass('hidden');
+            }
+          });
+
+          if (!that.$lis.not('.hidden, .no-results').length) {
+            if (!!$no_results.parent().length) {
+              $no_results.remove();
+            }
+            $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show();
+            that.$menuInner.append($no_results);
+          } else if (!!$no_results.parent().length) {
+            $no_results.remove();
+          }
+        } else {
+          that.$lis.not('.is-hidden').removeClass('hidden');
+          if (!!$no_results.parent().length) {
+            $no_results.remove();
+          }
+        }
+
+        that.$lis.filter('.active').removeClass('active');
+        if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus();
+        $(this).focus();
+      });
+    },
+
+    _searchStyle: function () {
+      var styles = {
+        begins: 'ibegins',
+        startsWith: 'ibegins'
+      };
+
+      return styles[this.options.liveSearchStyle] || 'icontains';
+    },
+
+    val: function (value) {
+      if (typeof value !== 'undefined') {
+        this.$element.val(value);
+        this.render();
+
+        return this.$element;
+      } else {
+        return this.$element.val();
+      }
+    },
+
+    changeAll: function (status) {
+      if (typeof status === 'undefined') status = true;
+
+      this.findLis();
+
+      var $options = this.$element.find('option'),
+          $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').toggleClass('selected', status),
+          lisVisLen = $lisVisible.length,
+          selectedOptions = [];
+
+      for (var i = 0; i < lisVisLen; i++) {
+        var origIndex = $lisVisible[i].getAttribute('data-original-index');
+        selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0];
+      }
+
+      $(selectedOptions).prop('selected', status);
+
+      this.render(false);
+    },
+
+    selectAll: function () {
+      return this.changeAll(true);
+    },
+
+    deselectAll: function () {
+      return this.changeAll(false);
+    },
+
+    keydown: function (e) {
+      var $this = $(this),
+          $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),
+          $items,
+          that = $parent.data('this'),
+          index,
+          next,
+          first,
+          last,
+          prev,
+          nextPrev,
+          prevIndex,
+          isActive,
+          selector = ':not(.disabled, .hidden, .dropdown-header, .divider)',
+          keyCodeMap = {
+            32: ' ',
+            48: '0',
+            49: '1',
+            50: '2',
+            51: '3',
+            52: '4',
+            53: '5',
+            54: '6',
+            55: '7',
+            56: '8',
+            57: '9',
+            59: ';',
+            65: 'a',
+            66: 'b',
+            67: 'c',
+            68: 'd',
+            69: 'e',
+            70: 'f',
+            71: 'g',
+            72: 'h',
+            73: 'i',
+            74: 'j',
+            75: 'k',
+            76: 'l',
+            77: 'm',
+            78: 'n',
+            79: 'o',
+            80: 'p',
+            81: 'q',
+            82: 'r',
+            83: 's',
+            84: 't',
+            85: 'u',
+            86: 'v',
+            87: 'w',
+            88: 'x',
+            89: 'y',
+            90: 'z',
+            96: '0',
+            97: '1',
+            98: '2',
+            99: '3',
+            100: '4',
+            101: '5',
+            102: '6',
+            103: '7',
+            104: '8',
+            105: '9'
+          };
+
+      if (that.options.liveSearch) $parent = $this.parent().parent();
+
+      if (that.options.container) $parent = that.$menu;
+
+      $items = $('[role=menu] li', $parent);
+
+      isActive = that.$newElement.hasClass('open');
+
+      if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) {
+        if (!that.options.container) {
+          that.setSize();
+          that.$menu.parent().addClass('open');
+          isActive = true;
+        } else {
+          that.$button.trigger('click');
+        }
+        that.$searchbox.focus();
+      }
+
+      if (that.options.liveSearch) {
+        if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) {
+          e.preventDefault();
+          that.$menu.parent().removeClass('open');
+          if (that.options.container) that.$newElement.removeClass('open');
+          that.$button.focus();
+        }
+        // $items contains li elements when liveSearch is enabled
+        $items = $('[role=menu] li' + selector, $parent);
+        if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {
+          if ($items.filter('.active').length === 0) {
+            $items = that.$menuInner.find('li');
+            if (that.options.liveSearchNormalize) {
+              $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');
+            } else {
+              $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');
+            }
+          }
+        }
+      }
+
+      if (!$items.length) return;
+
+      if (/(38|40)/.test(e.keyCode.toString(10))) {
+        index = $items.index($items.find('a').filter(':focus').parent());
+        first = $items.filter(selector).first().index();
+        last = $items.filter(selector).last().index();
+        next = $items.eq(index).nextAll(selector).eq(0).index();
+        prev = $items.eq(index).prevAll(selector).eq(0).index();
+        nextPrev = $items.eq(next).prevAll(selector).eq(0).index();
+
+        if (that.options.liveSearch) {
+          $items.each(function (i) {
+            if (!$(this).hasClass('disabled')) {
+              $(this).data('index', i);
+            }
+          });
+          index = $items.index($items.filter('.active'));
+          first = $items.first().data('index');
+          last = $items.last().data('index');
+          next = $items.eq(index).nextAll().eq(0).data('index');
+          prev = $items.eq(index).prevAll().eq(0).data('index');
+          nextPrev = $items.eq(next).prevAll().eq(0).data('index');
+        }
+
+        prevIndex = $this.data('prevIndex');
+
+        if (e.keyCode == 38) {
+          if (that.options.liveSearch) index--;
+          if (index != nextPrev && index > prev) index = prev;
+          if (index < first) index = first;
+          if (index == prevIndex) index = last;
+        } else if (e.keyCode == 40) {
+          if (that.options.liveSearch) index++;
+          if (index == -1) index = 0;
+          if (index != nextPrev && index < next) index = next;
+          if (index > last) index = last;
+          if (index == prevIndex) index = first;
+        }
+
+        $this.data('prevIndex', index);
+
+        if (!that.options.liveSearch) {
+          $items.eq(index).children('a').focus();
+        } else {
+          e.preventDefault();
+          if (!$this.hasClass('dropdown-toggle')) {
+            $items.removeClass('active').eq(index).addClass('active').children('a').focus();
+            $this.focus();
+          }
+        }
+
+      } else if (!$this.is('input')) {
+        var keyIndex = [],
+            count,
+            prevKey;
+
+        $items.each(function () {
+          if (!$(this).hasClass('disabled')) {
+            if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {
+              keyIndex.push($(this).index());
+            }
+          }
+        });
+
+        count = $(document).data('keycount');
+        count++;
+        $(document).data('keycount', count);
+
+        prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);
+
+        if (prevKey != keyCodeMap[e.keyCode]) {
+          count = 1;
+          $(document).data('keycount', count);
+        } else if (count >= keyIndex.length) {
+          $(document).data('keycount', 0);
+          if (count > keyIndex.length) count = 1;
+        }
+
+        $items.eq(keyIndex[count - 1]).children('a').focus();
+      }
+
+      // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu.
+      if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {
+        if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault();
+        if (!that.options.liveSearch) {
+          var elem = $(':focus');
+          elem.click();
+          // Bring back focus for multiselects
+          elem.focus();
+          // Prevent screen from scrolling if the user hit the spacebar
+          e.preventDefault();
+          // Fixes spacebar selection of dropdown items in FF & IE
+          $(document).data('spaceSelect', true);
+        } else if (!/(32)/.test(e.keyCode.toString(10))) {
+          that.$menuInner.find('.active a').click();
+          $this.focus();
+        }
+        $(document).data('keycount', 0);
+      }
+
+      if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {
+        that.$menu.parent().removeClass('open');
+        if (that.options.container) that.$newElement.removeClass('open');
+        that.$button.focus();
+      }
+    },
+
+    mobile: function () {
+      this.$element.addClass('mobile-device');
+    },
+
+    refresh: function () {
+      this.$lis = null;
+      this.liObj = {};
+      this.reloadLi();
+      this.render();
+      this.checkDisabled();
+      this.liHeight(true);
+      this.setStyle();
+      this.setWidth();
+      if (this.$lis) this.$searchbox.trigger('propertychange');
+
+      this.$element.trigger('refreshed.bs.select');
+    },
+
+    hide: function () {
+      this.$newElement.hide();
+    },
+
+    show: function () {
+      this.$newElement.show();
+    },
+
+    remove: function () {
+      this.$newElement.remove();
+      this.$element.remove();
+    },
+
+    destroy: function () {
+        this.$newElement.remove();
+
+        if (this.$bsContainer) {
+            this.$bsContainer.remove();
+        } else {
+            this.$menu.remove();
+        }
+
+        this.$element
+          .off('.bs.select')
+          .removeData('selectpicker')
+          .removeClass('bs-select-hidden selectpicker');
+    }
+  };
+
+  // SELECTPICKER PLUGIN DEFINITION
+  // ==============================
+  function Plugin(option, event) {
+    // get the args of the outer function..
+    var args = arguments;
+    // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them
+    // to get lost/corrupted in android 2.3 and IE9 #715 #775
+    var _option = option,
+        _event = event;
+    [].shift.apply(args);
+
+    var value;
+    var chain = this.each(function () {
+      var $this = $(this);
+      if ($this.is('select')) {
+        var data = $this.data('selectpicker'),
+            options = typeof _option == 'object' && _option;
+
+        if (!data) {
+          var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);
+          config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template);
+          $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));
+        } else if (options) {
+          for (var i in options) {
+            if (options.hasOwnProperty(i)) {
+              data.options[i] = options[i];
+            }
+          }
+        }
+
+        if (typeof _option == 'string') {
+          if (data[_option] instanceof Function) {
+            value = data[_option].apply(data, args);
+          } else {
+            value = data.options[_option];
+          }
+        }
+      }
+    });
+
+    if (typeof value !== 'undefined') {
+      //noinspection JSUnusedAssignment
+      return value;
+    } else {
+      return chain;
+    }
+  }
+
+  var old = $.fn.selectpicker;
+  $.fn.selectpicker = Plugin;
+  $.fn.selectpicker.Constructor = Selectpicker;
+
+  // SELECTPICKER NO CONFLICT
+  // ========================
+  $.fn.selectpicker.noConflict = function () {
+    $.fn.selectpicker = old;
+    return this;
+  };
+
+  $(document)
+      .data('keycount', 0)
+      .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown)
+      .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', function (e) {
+        e.stopPropagation();
+      });
+
+  // SELECTPICKER DATA-API
+  // =====================
+  $(window).on('load.bs.select.data-api', function () {
+    $('.selectpicker').each(function () {
+      var $selectpicker = $(this);
+      Plugin.call($selectpicker, $selectpicker.data());
+    })
+  });
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js.map
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js.map	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.js.map	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1 @@
+{"version":3,"sources":["bootstrap-select.js"],"names":["root","factory","define","amd","a0","exports","module","require","jQuery","this","$","normalizeToBase","text","rExps","re","ch","each","replace","htmlEscape","html","escapeMap","&","<",">","\"","'","`","source","Object","keys","join","testRegexp","RegExp","replaceRegexp","string","test","match","Plugin","option","event","args","arguments","_option","_event","shift","apply","value","chain","$this","is","data","options","i","hasOwnProperty","config","extend","Selectpicker","DEFAULTS","fn","selectpicker","defaults","template","Function","String","prototype","includes","toString","defineProperty","object","$defineProperty","result","error","indexOf","search","TypeError","call","stringLength","length","searchString","searchLength","position","undefined","pos","Number","start","Math","min","max","configurable","writable","startsWith","index","charCodeAt","o","k","r","push","triggerNative","eventName","el","dispatchEvent","Event","bu
 bbles","document","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","expr","icontains","obj","meta","$obj","haystack","toUpperCase","ibegins","aicontains","aibegins","element","e","stopPropagation","preventDefault","$element","$newElement","$button","$menu","$lis","title","attr","val","render","refresh","setStyle","selectAll","deselectAll","destroy","remove","show","hide","init","VERSION","noneSelectedText","noneResultsText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","style","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","iconBase","tickIcon","caret","maxOptions","mobile","selectOnTab","dropdownAlignRight","constructor","that","id","liObj","multiple","prop"
 ,"autofocus","createView","after","appendTo","children","$menuInner","$searchbox","find","addClass","click","focus","checkDisabled","clickListener","liveSearchListener","setWidth","selectPosition","on","hide.bs.dropdown","hidden.bs.dropdown","show.bs.dropdown","shown.bs.dropdown","hasAttribute","focus.bs.select","off","shown.bs.select","rendered.bs.select","validity","valid","removeClass","setTimeout","createDropdown","inputGroup","parent","hasClass","searchbox","actionsbox","donebutton","drop","$drop","li","createLi","innerHTML","reloadLi","destroyLi","_li","optID","titleOption","createElement","liIndex","generateLI","content","classes","optgroup","generateA","inline","tokens","className","appendChild","createTextNode","insertBefore","firstChild","selectedIndex","selected","optionClass","cssText","subtext","icon","isDisabled","disabled","parentNode","tagName","optGroupClass","label","labelSubtext","labelIcon","previousElementSibling","eq","findLis","updateLi","notDisabled","setDisa
 bled","setSelected","tabIndex","selectedItems","map","toArray","split","totalCount","not","tr8nText","trim","status","buttonClass","liHeight","sizeInfo","newElement","menu","menuInner","divider","a","cloneNode","actions","input","body","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","dividerHeight","outerHeight","menuStyle","getComputedStyle","menuPadding","parseInt","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","menuExtras","marginTop","marginBottom","removeChild","setSize","menuHeight","getHeight","selectOffsetTop","selectOffsetBot","$window","window","selectHeight","divHeight","posVert","offset","top","scrollTop","height","getSize","minHeight","include","classList","contains","lis","getElementsByTagName","lisVisible","Array","filter","optGroup","toggleClass","max-height","overflow","min-height","overflow-y","optIndex","slice","last","divLength","$selectClone","clone","$selectClone2","ulWidth","outerWidth","btnWidth","$bsCo
 ntainer","actualHeight","getPlacement","left","offsetWidth","append","detach","removeAttr","$document","keyCode","offsetTop","clickedIndex","prevValue","prevIndex","$options","$option","state","$optgroup","maxOptionsGrp","blur","maxReached","maxReachedGrp","optgroupID","maxOptionsArr","maxTxt","maxTxtGrp","$notify","delay","fadeOut","currentTarget","target","change","$no_results","$searchBase","_searchStyle","$lisVisible","first","styles","begins","changeAll","lisVisLen","selectedOptions","origIndex","getAttribute","keydown","$items","next","prev","nextPrev","isActive","$parent","selector","keyCodeMap",32,48,49,50,51,52,53,54,55,56,57,59,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,96,97,98,99,100,101,102,103,104,105,"nextAll","prevAll","count","prevKey","keyIndex","toLowerCase","substring","elem","removeData","old","Constructor","noConflict","$selectpicker"],"mappings":"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","file":"bootstrap-select.min.js"}
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/bootstrap-select.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,8 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";function b(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b.replace(this.re,this.ch)}),b}function c(a){var b={"&":"&","<":"<",">":">",'"':""","'":"&#x27;","`":"&#x60;"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function d(b,c){var d=arguments,f=b,g=c;[].shift.apply(d);var h,i=this.each(function(){var b=a(this);if(b.is("select"))
 {var c=b.data("selectpicker"),i="object"==typeof f&&f;if(c){if(i)for(var j in i)i.hasOwnProperty(j)&&(c.options[j]=i[j])}else{var k=a.extend({},e.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),i);k.template=a.extend({},e.DEFAULTS.template,a.fn.selectpicker.defaults?a.fn.selectpicker.defaults.template:{},b.data().template,i.template),b.data("selectpicker",c=new e(this,k,g))}"string"==typeof f&&(h=c[f]instanceof Function?c[f].apply(c,d):c.options[f])}});return"undefined"!=typeof h?h:i}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),c="".indexOf,d=function(b){if(null==this)throw new TypeError;var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw new TypeError;var e=d.length,f=String(b),g=f.length,h=arguments.length>1?arguments[1]:void 0,i=h?Number(h):0;i!=i&&(i=0);var j=Math.min(Math.max(i,0),e);return g+j>e?!1:-1!=c.call(d,f,i)};b?b(String.prototype,"includes",{value:d,configurable:!
 0,writable:!0}):String.prototype.includes=d}(),String.prototype.startsWith||!function(){var a=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),b={}.toString,c=function(a){if(null==this)throw new TypeError;var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw new TypeError;var d=c.length,e=String(a),f=e.length,g=arguments.length>1?arguments[1]:void 0,h=g?Number(g):0;h!=h&&(h=0);var i=Math.min(Math.max(h,0),d);if(f+i>d)return!1;for(var j=-1;++j<f;)if(c.charCodeAt(i+j)!=e.charCodeAt(j))return!1;return!0};a?a(String.prototype,"startsWith",{value:c,configurable:!0,writable:!0}):String.prototype.startsWith=c}(),Object.keys||(Object.keys=function(a,b,c){c=[];for(b in a)c.hasOwnProperty.call(a,b)&&c.push(b);return c}),a.fn.triggerNative=function(a){var b,c=this[0];c.dispatchEvent?("function"==typeof Event?b=new Event(a,{bubbles:!0}):(b=document.createEvent("Event"),b.initEvent(a,!0,!1)),c.dispatchEvent(b)):(c.fireEvent&&(b=document.createEventObject(
 ),b.eventType=a,c.fireEvent("on"+a,b)),this.trigger(a))},a.expr[":"].icontains=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.text()).toUpperCase();return f.includes(d[3].toUpperCase())},a.expr[":"].ibegins=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.text()).toUpperCase();return f.startsWith(d[3].toUpperCase())},a.expr[":"].aicontains=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.data("normalizedText")||e.text()).toUpperCase();return f.includes(d[3].toUpperCase())},a.expr[":"].aibegins=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.data("normalizedText")||e.text()).toUpperCase();return f.startsWith(d[3].toUpperCase())};var e=function(b,c,d){d&&(d.stopPropagation(),d.preventDefault()),this.$element=a(b),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=c,null===this.options.title&&(this.options.title=this.$element.attr("title")),this.val=e.prototype.val,this.render=e.prototype.render,this.refresh=e.prototype.refresh,this.setStyle=e.pr
 ototype.setStyle,this.selectAll=e.prototype.selectAll,this.deselectAll=e.prototype.deselectAll,this.destroy=e.prototype.destroy,this.remove=e.prototype.remove,this.show=e.prototype.show,this.hide=e.prototype.hide,this.init()};e.VERSION="1.9.3",e.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results matched {0}",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return[1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",doneButton:!1,doneButtonText:"Close",multipleSeparator:", ",styleBase:"btn",style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,liveSearchNormalize:!1,liveSearchStyle:"co
 ntains",actionsBox:!1,iconBase:"glyphicon",tickIcon:"glyphicon-ok",template:{caret:'<span class="caret"></span>'},maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1},e.prototype={constructor:e,init:function(){var b=this,c=this.$element.attr("id");this.liObj={},this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement).appendTo(this.$newElement),this.$button=this.$newElement.children("button"),this.$menu=this.$newElement.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.options.dropdownAlignRight&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.setStyle(),this.se
 tWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(a){b.$element.trigger("hide.bs.select",a)},"hidden.bs.dropdown":function(a){b.$element.trigger("hidden.bs.select",a)},"show.bs.dropdown":function(a){b.$element.trigger("show.bs.select",a)},"shown.bs.dropdown":function(a){b.$element.trigger("shown.bs.select",a)}}),b.$element[0].hasAttribute("required")&&this.$element.on("invalid",function(){b.$button.addClass("bs-invalid").focus(),b.$element.on({"focus.bs.select":function(){b.$button.focus(),b.$element.off("focus.bs.select")},"shown.bs.select":function(){b.$element.val(b.$element.val()).off("shown.bs.select")},"rendered.bs.select":function(){this.validity.valid&&b.$button.removeClass("bs-invalid"),b.$element.off("rendered.bs.select")}})}),setTimeout(function(){b.$element.trigger("loaded.bs.select")})},createDropdown:function(){var b=t
 his.multiple?" show-tick":"",d=this.$element.parent().hasClass("input-group")?" input-group-btn":"",e=this.autofocus?" autofocus":"",f=this.options.header?'<div class="popover-title"><button type="button" class="close" aria-hidden="true">×</button>'+this.options.header+"</div>":"",g=this.options.liveSearch?'<div class="bs-searchbox"><input type="text" class="form-control" autocomplete="off"'+(null===this.options.liveSearchPlaceholder?"":' placeholder="'+c(this.options.liveSearchPlaceholder)+'"')+"></div>":"",h=this.multiple&&this.options.actionsBox?'<div class="bs-actionsbox"><div class="btn-group btn-group-sm btn-block"><button type="button" class="actions-btn bs-select-all btn btn-default">'+this.options.selectAllText+'</button><button type="button" class="actions-btn bs-deselect-all btn btn-default">'+this.options.deselectAllText+"</button></div></div>":"",i=this.multiple&&this.options.doneButton?'<div class="bs-donebutton"><div class="btn-group btn-block"><button type="but
 ton" class="btn btn-sm btn-default">'+this.options.doneButtonText+"</button></div></div>":"",j='<div class="btn-group bootstrap-select'+b+d+'"><button type="button" class="'+this.options.styleBase+' dropdown-toggle" data-toggle="dropdown"'+e+'><span class="filter-option pull-left"></span> <span class="bs-caret">'+this.options.template.caret+'</span></button><div class="dropdown-menu open">'+f+g+h+'<ul class="dropdown-menu inner" role="menu"></ul>'+i+"</div></div>";return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menuInner[0].innerHTML=a},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var d=this,e=[],f=0,g=document.createElement("option"),h=-1,i=function(a,b,c,d){return"<li"+("undefined"!=typeof c&""!==c?' class="'+c+'"':"")+("undefined"!=typeof b&null!==b?' data-original-index="'+b+'"':"")+("undefined"!=typeof d&null!==
 d?'data-optgroup="'+d+'"':"")+">"+a+"</li>"},j=function(a,e,f,g){return'<a tabindex="0"'+("undefined"!=typeof e?' class="'+e+'"':"")+("undefined"!=typeof f?' style="'+f+'"':"")+(d.options.liveSearchNormalize?' data-normalized-text="'+b(c(a))+'"':"")+("undefined"!=typeof g||null!==g?' data-tokens="'+g+'"':"")+">"+a+'<span class="'+d.options.iconBase+" "+d.options.tickIcon+' check-mark"></span></a>'};if(this.options.title&&!this.multiple&&(h--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];g.className="bs-title-option",g.appendChild(document.createTextNode(this.options.title)),g.value="",k.insertBefore(g,k.firstChild),void 0===a(k.options[k.selectedIndex]).attr("selected")&&(g.selected=!0)}return this.$element.find("option").each(function(b){var c=a(this);if(h++,!c.hasClass("bs-title-option")){var g=this.className||"",k=this.style.cssText,l=c.data("content")?c.data("content"):c.html(),m=c.data("tokens")?c.data("tokens"):null,n="undefined"!=typeof c.data("subte
 xt")?'<small class="text-muted">'+c.data("subtext")+"</small>":"",o="undefined"!=typeof c.data("icon")?'<span class="'+d.options.iconBase+" "+c.data("icon")+'"></span> ':"",p=this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled;if(""!==o&&p&&(o="<span>"+o+"</span>"),d.options.hideDisabled&&p)return void h--;if(c.data("content")||(l=o+'<span class="text">'+l+n+"</span>"),"OPTGROUP"===this.parentNode.tagName&&c.data("divider")!==!0){var q=" "+this.parentNode.className||"";if(0===c.index()){f+=1;var r=this.parentNode.label,s="undefined"!=typeof c.parent().data("subtext")?'<small class="text-muted">'+c.parent().data("subtext")+"</small>":"",t=c.parent().data("icon")?'<span class="'+d.options.iconBase+" "+c.parent().data("icon")+'"></span> ':"";r=t+'<span class="text">'+r+s+"</span>",0!==b&&e.length>0&&(h++,e.push(i("",null,"divider",f+"div"))),h++,e.push(i(r,null,"dropdown-header"+q,f))}e.push(i(j(l,"opt "+g+q,k,m),b,"",f))}else c.data("divider")===!0?e.push(i("
 ",b,"divider")):c.data("hidden")===!0?e.push(i(j(l,g,k,m),b,"hidden is-hidden")):(this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName&&(h++,e.push(i("",null,"divider",f+"div"))),e.push(i(j(l,g,k,m),b)));d.liObj[b]=h}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),e.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this;b!==!1&&this.$element.find("option").each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled,b),d.setSelected(a,this.selected,b)}),this.tabIndex();var e=this.$element.find("option").map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled))return;var b,c=a(this),e=c.data("icon")&&d
 .options.showIcon?'<i class="'+d.options.iconBase+" "+c.data("icon")+'"></i> ':"";return b=d.options.showSubtext&&c.data("subtext")&&!d.multiple?' <small class="text-muted">'+c.data("subtext")+"</small>":"","undefined"!=typeof c.attr("title")?c.attr("title"):c.data("content")&&d.options.showContent?c.data("content"):e+c.html()+b}}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){c=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+c).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"stat
 ic"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$button.children(".filter-option").html(f),this.$element.trigger("rendered.bs.select")},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(b){if(b||this.options.size!==!1&&!this.sizeInfo){var c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("ul"),f=document.createElement("li"),g=document.createElement("li"),h=document.createElement("a"),i=document.createElement("span"),j=this.options.header&&this.$menu.find
 (".popover-title").length>0?this.$menu.find(".popover-title")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple&&this.$menu.find(".bs-actionsbox").length>0?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple&&this.$menu.find(".bs-donebutton").length>0?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null;if(i.className="text",c.className=this.$menu[0].parentNode.className+" open",d.className="dropdown-menu open",e.className="dropdown-menu inner",f.className="divider",i.appendChild(document.createTextNode("Inner text")),h.appendChild(i),g.appendChild(h),e.appendChild(g),e.appendChild(f),j&&d.appendChild(j),k){var n=document.createElement("span");k.className="bs-searchbox",n.className="form-control",k.appendChild(n),d.appendChild(k)}l&&d.appendChild(l),d.appendChild(e),m&&d.appendChild(m),c.appendChild(d),document.body.appendChild(c);var o=h.offsetHeight,p=j?j.offse
 tHeight:0,q=k?k.offsetHeight:0,r=l?l.offsetHeight:0,s=m?m.offsetHeight:0,t=a(f).outerHeight(!0),u="function"==typeof getComputedStyle?getComputedStyle(d):!1,v=u?null:a(d),w=parseInt(u?u.paddingTop:v.css("paddingTop"))+parseInt(u?u.paddingBottom:v.css("paddingBottom"))+parseInt(u?u.borderTopWidth:v.css("borderTopWidth"))+parseInt(u?u.borderBottomWidth:v.css("borderBottomWidth")),x=w+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+2;document.body.removeChild(c),this.sizeInfo={liHeight:o,headerHeight:p,searchHeight:q,actionsHeight:r,doneButtonHeight:s,dividerHeight:t,menuPadding:w,menuExtras:x}}},setSize:function(){if(this.findLis(),this.liHeight(),this.options.header&&this.$menu.css("padding-top",0),this.options.size!==!1){var b,c,d,e,f=this,g=this.$menu,h=this.$menuInner,i=a(window),j=this.$newElement[0].offsetHeight,k=this.sizeInfo.liHeight,l=this.sizeInfo.headerHeight,m=this.sizeInfo.searchHeight,n=this.sizeInfo.actionsHeight,o=this.sizeI
 nfo.doneButtonHeight,p=this.sizeInfo.dividerHeight,q=this.sizeInfo.menuPadding,r=this.sizeInfo.menuExtras,s=this.options.hideDisabled?".disabled":"",t=function(){d=f.$newElement.offset().top-i.scrollTop(),e=i.height()-d-j};if(t(),"auto"===this.options.size){var u=function(){var i,j=function(b,c){return function(d){return c?d.classList?d.classList.contains(b):a(d).hasClass(b):!(d.classList?d.classList.contains(b):a(d).hasClass(b))}},p=f.$menuInner[0].getElementsByTagName("li"),s=Array.prototype.filter?Array.prototype.filter.call(p,j("hidden",!1)):f.$lis.not(".hidden"),u=Array.prototype.filter?Array.prototype.filter.call(s,j("dropdown-header",!0)):s.filter(".dropdown-header");t(),b=e-r,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&f.$newElement.toggleClass("dropup",d>e&&c>b-r),f.$newElement.hasClass("dropup")&&(b=d-r),i=s.length+u.length>3?3*k+r-2:0,g.css({"max-height":b+"px",overflow:"hidden","min-height":i+l
 +m+n+o+"px"}),h.css({"max-height":b-l-m-n-o-q+"px","overflow-y":"auto","min-height":Math.max(i-q,0)+"px"})};u(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",u),i.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",u)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(s).length>this.options.size){var v=this.$lis.not(".divider").not(s).children().slice(0,this.options.size).last().parent().index(),w=this.$lis.slice(0,v+1).filter(".divider").length;b=k*this.options.size+w*p+q,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&this.$newElement.toggleClass("dropup",d>e&&c>b-r),g.css({"max-height":b+l+m+n+o+"px",overflow:"hidden","min-height":""}),h.css({"max-height":b-q+"px","overflow-y":"auto","min-height":""})}}},setWidth:function(){if("auto"===this.options.width){this.$menu.css("min-width","0");var a=this.$menu.parent().clo
 ne().appendTo("body"),b=this.options.container?this.$newElement.clone().appendTo("body"):a,c=a.children(".dropdown-menu").outerWidth(),d=b.css("width","auto").children("button").outerWidth();a.remove(),b.remove(),this.$newElement.css("width",Math.max(c,d)+"px")}else"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){this.$bsContainer=a('<div class="bs-container" />');var b,c,d=this,e=function(a){d.$bsContainer.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,d.$bsContainer.css({top:b.top+c,left:b.left,width:a[
 0].offsetWidth})};this.$button.on("click",function(){var b=a(this);d.isDisabled()||(e(d.$newElement),d.$bsContainer.appendTo(d.options.container).toggleClass("open",!b.hasClass("open")).append(d.$menu))}),a(window).on("resize scroll",function(){e(d.$newElement)}),this.$element.on("hide.bs.select",function(){d.$menu.data("height",d.$menu.height()),d.$bsContainer.detach()})},setSelected:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),c.toggleClass("selected",b)},setDisabled:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){var a=this;this.isDisabled()?(this.$newElement.addClass("disabled"),this.$button.addClass("disabled").attr("tabindex",-1)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.remove
 Class("disabled")),-1!=this.$button.attr("tabindex")||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},tabIndex:function(){this.$element.data("tabindex")!==this.$element.attr("tabindex")&&-98!==this.$element.attr("tabindex")&&"-98"!==this.$element.attr("tabindex")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex"))),this.$element.attr("tabindex",-98)},clickListener:function(){var b=this,c=a(document);this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),c.data("spaceSelect",!1),this.$button.on("keyup",function(a){/(32)/.test(a.keyCode.toString(10))&&c.data("spaceSelect")&&(a.preventDefault(),c.data("spaceSelect",!1))}),this.$button.on("click",function(){b.setSize(),b.$element.on("shown.bs.select",function(){if(b.options.liveSearch||b.multiple){if(!b.multiple){var a=b.liObj[b.$element[0].selectedInde
 x];if("number"!=typeof a||b.options.size===!1)return;var c=b.$lis.eq(a)[0].offsetTop-b.$menuInner[0].offsetTop;c=c-b.$menuInner[0].offsetHeight/2+b.sizeInfo.liHeight/2,b.$menuInner[0].scrollTop=c}}else b.$menuInner.find(".selected a").focus()})}),this.$menuInner.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var h=b.$element.find("option"),i=h.eq(e),j=i.prop("selected"),k=i.parent("optgroup"),l=b.options.maxOptions,m=k.data("maxOptions")||!1;if(b.multiple){if(i.prop("selected",!j),b.setSelected(e,!j),d.blur(),l!==!1||m!==!1){var n=l<h.filter(":selected").length,o=m<k.find("option:selected").length;if(l&&n||m&&o)if(l&&1==l)h.prop("selected",!1),i.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected"),b.setSelected(e,!0);else if(m&&1==m){k.find("option:selected").prop("selected
 ",!1),i.prop("selected",!0);var p=d.parent().data("optgroup");b.$menuInner.find('[data-optgroup="'+p+'"]').removeClass("selected"),b.setSelected(e,!0)}else{var q="function"==typeof b.options.maxOptionsText?b.options.maxOptionsText(l,m):b.options.maxOptionsText,r=q[0].replace("{n}",l),s=q[1].replace("{n}",m),t=a('<div class="notify"></div>');q[2]&&(r=r.replace("{var}",q[2][l>1?0:1]),s=s.replace("{var}",q[2][m>1?0:1])),i.prop("selected",!1),b.$menu.append(t),l&&n&&(t.append(a("<div>"+r+"</div>")),b.$element.trigger("maxReached.bs.select")),m&&o&&(t.append(a("<div>"+s+"</div>")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),t.delay(750).fadeOut(300,function(){a(this).remove()})}}}else h.prop("selected",!1),i.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected"),b.setSelected(e,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex
 ")&&!b.multiple)&&(b.$element.triggerNative("change"),b.$element.trigger("changed.bs.select",[e,i.prop("selected"),j]))}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(c){c.currentTarget==this&&(c.preventDefault(),c.stopPropagation(),b.options.liveSearch&&!a(c.target).hasClass("close")?b.$searchbox.focus():b.$button.focus())}),this.$menuInner.on("click",".divider, .dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.click()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).hasClass("bs-select-all")?b.selectAll():b.deselectAll(),b.$element.triggerNative("change")}),this.$element.change(function(){b.render(!1)})},liveSearchListene
 r:function(){var d=this,e=a('<li class="no-results"></li>');this.$button.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){d.$menuInner.find(".active").removeClass("active"),d.$searchbox.val()&&(d.$searchbox.val(""),d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),d.multiple||d.$menuInner.find(".selected").addClass("active"),setTimeout(function(){d.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){if(d.$searchbox.val()){var f=d.$lis.not(".is-hidden").removeClass("hidden").children("a");f=d.options.liveSearchNormalize?f.not(":a"+d._searchStyle()+'("'+b(d.$searchbox.val())+'")'):f.not(":"+d._searchStyle()+'("'+d.$searchbox.val()+'")'),f.parent().addClass("hidden"),d.$lis.filter(".dropdown-header").each(function(){var b=a(this),c=b.data("optgroup");0===d.$lis.filter("[data-optgroup=
 "+c+"]").not(b).not(".hidden").length&&(b.addClass("hidden"),d.$lis.filter("[data-optgroup="+c+"div]").addClass("hidden"))});var g=d.$lis.not(".hidden");g.each(function(b){var c=a(this);c.hasClass("divider")&&(c.index()===g.first().index()||c.index()===g.last().index()||g.eq(b+1).hasClass("divider"))&&c.addClass("hidden")}),d.$lis.not(".hidden, .no-results").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(d.options.noneResultsText.replace("{0}",'"'+c(d.$searchbox.val())+'"')).show(),d.$menuInner.append(e))}else d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove();d.$lis.filter(".active").removeClass("active"),d.$searchbox.val()&&d.$lis.not(".hidden, .divider, .dropdown-header").eq(0).addClass("active").children("a").focus(),a(this).focus()})},_searchStyle:function(){var a={begins:"ibegins",startsWith:"ibegins"};return a[this.options.liveSearchStyle]||"icontains"},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this
 .render(),this.$element):this.$element.val()},changeAll:function(b){"undefined"==typeof b&&(b=!0),this.findLis();for(var c=this.$element.find("option"),d=this.$lis.not(".divider, .dropdown-header, .disabled, .hidden").toggleClass("selected",b),e=d.length,f=[],g=0;e>g;g++){var h=d[g].getAttribute("data-original-index");f[f.length]=c.eq(h)[0]}a(f).prop("selected",b),this.render(!1)},selectAll:function(){return this.changeAll(!0)},deselectAll:function(){return this.changeAll(!1)},keydown:function(c){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p=":not(.disabled, .hidden, .dropdown-header, .divider)",q={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"
 9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li",n),l=o.$newElement.hasClass("open"),!l&&(c.keyCode>=48&&c.keyCode<=57||c.keyCode>=96&&c.keyCode<=105||c.keyCode>=65&&c.keyCode<=90)&&(o.options.container?o.$button.trigger("click"):(o.setSize(),o.$menu.parent().addClass("open"),l=!0),o.$searchbox.focus()),o.options.liveSearch&&(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(c.preventDefault(),o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus()),d=a("[role=menu] li"+p,n),m.val()||/(38|40)/.test(c.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$menuInner.find("li"),d=o.options.liveSearchNormalize?d.filter(":a"+o._searchStyle()+"("+b(q[c.keyCode])+")"):d.filter(":"+o._searchStyle()+"("+q[c.keyCode]+")"))),d.length){if(/(38|40)/.test(c.keyCode.toString(10)))e=d.index(d.find("a").filter(":focus").parent()),g=d.filter(p).first().i
 ndex(),h=d.filter(p).last().index(),f=d.eq(e).nextAll(p).eq(0).index(),i=d.eq(e).prevAll(p).eq(0).index(),j=d.eq(f).prevAll(p).eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).hasClass("disabled")||a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.first().data("index"),h=d.last().data("index"),f=d.eq(e).nextAll().eq(0).data("index"),i=d.eq(e).prevAll().eq(0).data("index"),j=d.eq(f).prevAll().eq(0).data("index")),k=m.data("prevIndex"),38==c.keyCode?(o.options.liveSearch&&e--,e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)):40==c.keyCode&&(o.options.liveSearch&&e++,-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(c.preventDefault(),m.hasClass("dropdown-toggle")||(d.removeClass("active").eq(e).addClass("active").children("a").focus(),m.focus())):d.eq(e).children("a").focus();else if(!m.is("input")){var r,s,t=[];d.each(function(){a(this).hasClass("disabled")||a.trim(a(this).children("a").text().toLowerCase()).substring(0
 ,1)==q[c.keyCode]&&t.push(a(this).index())}),r=a(document).data("keycount"),r++,a(document).data("keycount",r),s=a.trim(a(":focus").text().toLowerCase()).substring(0,1),s!=q[c.keyCode]?(r=1,a(document).data("keycount",r)):r>=t.length&&(a(document).data("keycount",0),r>t.length&&(r=1)),d.eq(t[r-1]).children("a").focus()}if((/(13|32)/.test(c.keyCode.toString(10))||/(^9$)/.test(c.keyCode.toString(10))&&o.options.selectOnTab)&&l){if(/(32)/.test(c.keyCode.toString(10))||c.preventDefault(),o.options.liveSearch)/(32)/.test(c.keyCode.toString(10))||(o.$menuInner.find(".active a").click(),m.focus());else{var u=a(":focus");u.click(),u.focus(),c.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(c.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.ad
 dClass("mobile-device")},refresh:function(){this.$lis=null,this.liObj={},this.reloadLi(),this.render(),this.checkDisabled(),this.liHeight(!0),this.setStyle(),this.setWidth(),this.$lis&&this.$searchbox.trigger("propertychange"),this.$element.trigger("refreshed.bs.select")},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()},destroy:function(){this.$newElement.remove(),this.$bsContainer?this.$bsContainer.remove():this.$menu.remove(),this.$element.off(".bs.select").removeData("selectpicker").removeClass("bs-select-hidden selectpicker")}};var f=a.fn.selectpicker;a.fn.selectpicker=d,a.fn.selectpicker.Constructor=e,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=f,this},a(document).data("keycount",0).on("keydown.bs.select",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',e.prototype.keydown).on("focusin.modal",'.bootstrap-select
  [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);d.call(b,b.data())})})}(a)});
+//# sourceMappingURL=bootstrap-select.js.map
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,49 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+/*!
+ * Translated default messages for bootstrap-select.
+ * Locale: AR (Arabic)
+ * Author: Yasser Lotfy <y_l at alive.com>
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'لم يتم إختيار شئ',
+    noneResultsText: 'لا توجد نتائج مطابقة لـ {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} خيار تم إختياره" : "{0} خيارات تمت إختيارها";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'تخطى الحد المسموح ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح ({n} خيارات بحد أقصى)',
+        (numGroup == 1) ? 'تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)'
+      ];
+    },
+    selectAllText: 'إختيار الجميع',
+    deselectAllText: 'إلغاء إختيار الجميع',
+    multipleSeparator: '، '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ar_AR.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,12 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){/*!
+ * Translated default messages for bootstrap-select.
+ * Locale: AR (Arabic)
+ * Author: Yasser Lotfy <y_l at alive.com>
+ */
+!function(a){a.fn.selectpicker.defaults={noneSelectedText:"لم يتم إختيار شئ",noneResultsText:"لا توجد نتائج مطابقة لـ {0}",countSelectedText:function(a,b){return 1==a?"{0} خيار تم إختياره":"{0} خيارات تمت إختيارها"},maxOptionsText:function(a,b){return[1==a?"تخطى الحد المسموح ({n} خيار بحد أقصى)":"تخطى الحد المسموح ({n} خيارات بحد أقصى)",1==b?"تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)":"تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)"]},selectAllText:"إختيار الجميع",deselectAllText:"إلغاء إختيار الجميع",multipleSeparator:"، "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Нищо избрано',
+    noneResultsText: 'Няма резултат за {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} избран елемент" : "{0} избрани елемента";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)',
+        (numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)'
+      ];
+    },
+    selectAllText: 'Избери всички',
+    deselectAllText: 'Размаркирай всички',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-bg_BG.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нищо избрано",noneResultsText:"Няма резултат за {0}",countSelectedText:function(a,b){return 1==a?"{0} избран елемент":"{0} избрани елемента"},maxOptionsText:function(a,b){return[1==a?"Лимита е достигнат ({n} елемент максимум)":"Лимита е достигнат ({n} елемента максимум)",1==b?"Груповия лимит е достигнат ({n} елемент максимум)":"Груповия лимит е достигнат ({n} елемента максимум)"]},selectAllText:"Избери всички",deselectAllText:"Размаркирай всички",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nic není vybráno',
+    noneResultsText: 'Žádné výsledky {0}',
+    countSelectedText: 'Označeno {0} z {1}',
+    maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-cs_CZ.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic není vybráno",noneResultsText:"Žádné výsledky {0}",countSelectedText:"Označeno {0} z {1}",maxOptionsText:["Limit překročen ({n} {var} max)","Limit skupiny překročen ({n} {var} max)",["položek","položka"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Intet valgt',
+    noneResultsText: 'Ingen resultater fundet {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} valgt" : "{0} valgt";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)',
+        (numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)'
+      ];
+    },
+    selectAllText: 'Markér alle',
+    deselectAllText: 'Afmarkér alle',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-da_DK.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Intet valgt",noneResultsText:"Ingen resultater fundet {0}",countSelectedText:function(a,b){return"{0} valgt"},maxOptionsText:function(a,b){return[1==a?"Begrænsning nået (max {n} valgt)":"Begrænsning nået (max {n} valgte)",1==b?"Gruppe-begrænsning nået (max {n} valgt)":"Gruppe-begrænsning nået (max {n} valgte)"]},selectAllText:"Markér alle",deselectAllText:"Afmarkér alle",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Bitte wählen...',
+    noneResultsText: 'Keine Ergebnisse für {0}',
+    countSelectedText: '{0} von {1} ausgewählt',
+    maxOptionsText: ['Limit erreicht ({n} {var} max.)', 'Gruppen-Limit erreicht ({n} {var} max.)', ['Eintrag', 'Einträge']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-de_DE.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Bitte wählen...",noneResultsText:"Keine Ergebnisse für {0}",countSelectedText:"{0} von {1} ausgewählt",maxOptionsText:["Limit erreicht ({n} {var} max.)","Gruppen-Limit erreicht ({n} {var} max.)",["Eintrag","Einträge"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nothing selected',
+    noneResultsText: 'No results match {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
+        (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
+      ];
+    },
+    selectAllText: 'Select All',
+    deselectAllText: 'Deselect All',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-en_US.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nothing selected",noneResultsText:"No results match {0}",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return[1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'No hay selección',
+    noneResultsText: 'No hay resultados {0}',
+    countSelectedText: 'Seleccionados {0} de {1}',
+    maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-es_CL.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"No hay selección",noneResultsText:"No hay resultados {0}",countSelectedText:"Seleccionados {0} de {1}",maxOptionsText:["Límite alcanzado ({n} {var} max)","Límite del grupo alcanzado({n} {var} max)",["elementos","element"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Hautapenik ez',
+    noneResultsText: 'Emaitzarik ez {0}',
+    countSelectedText: '{1}(e)tik {0} hautatuta',
+    maxOptionsText: ['Mugara iritsita ({n} {var} gehienez)', 'Taldearen mugara iritsita ({n} {var} gehienez)', ['elementu', 'elementu']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-eu.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Hautapenik ez",noneResultsText:"Emaitzarik ez {0}",countSelectedText:"{1}(e)tik {0} hautatuta",maxOptionsText:["Mugara iritsita ({n} {var} gehienez)","Taldearen mugara iritsita ({n} {var} gehienez)",["elementu","elementu"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,37 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+    $.fn.selectpicker.defaults = {
+        noneSelectedText: 'چیزی انتخاب نشده است',
+        noneResultsText: 'هیج مشابهی برای {0} پیدا نشد',
+        countSelectedText: "{0} از {1} مورد انتخاب شده",
+        maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'],
+        selectAllText: 'انتخاب همه',
+        deselectAllText: 'انتخاب هیچ کدام',
+        multipleSeparator: ', '
+    };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fa_IR.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"چیزی انتخاب نشده است",noneResultsText:"هیج مشابهی برای {0} پیدا نشد",countSelectedText:"{0} از {1} مورد انتخاب شده",maxOptionsText:["بیشتر ممکن نیست {حداکثر {n} عدد}","بیشتر ممکن نیست {حداکثر {n} عدد}"],selectAllText:"انتخاب همه",deselectAllText:"انتخاب هیچ کدام",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Ei valintoja',
+    noneResultsText: 'Ei hakutuloksia {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} valittu" : "{0} valitut";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Valintojen maksimimäärä ({n} saavutettu)' : 'Valintojen maksimimäärä ({n} saavutettu)',
+        (numGroup == 1) ? 'Ryhmän maksimimäärä ({n} saavutettu)' : 'Ryhmän maksimimäärä ({n} saavutettu)'
+      ];
+    },
+    selectAllText: 'Valitse kaikki',
+    deselectAllText: 'Poista kaikki',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fi_FI.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ei valintoja",noneResultsText:"Ei hakutuloksia {0}",countSelectedText:function(a,b){return 1==a?"{0} valittu":"{0} valitut"},maxOptionsText:function(a,b){return["Valintojen maksimimäärä ({n} saavutettu)","Ryhmän maksimimäärä ({n} saavutettu)"]},selectAllText:"Valitse kaikki",deselectAllText:"Poista kaikki",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,42 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Aucune sélection',
+    noneResultsText: 'Aucun résultat pour {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected > 1) ? "{0} éléments sélectionnés" : "{0} élément sélectionné";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)',
+        (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)'
+      ];
+    },
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-fr_FR.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Aucune sélection",noneResultsText:"Aucun résultat pour {0}",countSelectedText:function(a,b){return a>1?"{0} éléments sélectionnés":"{0} élément sélectionné"},maxOptionsText:function(a,b){return[a>1?"Limite atteinte ({n} éléments max)":"Limite atteinte ({n} élément max)",b>1?"Limite du groupe atteinte ({n} éléments max)":"Limite du groupe atteinte ({n} élément max)"]},multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Válasszon!',
+    noneResultsText: 'Nincs találat {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return '{0} elem kiválasztva';
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        'Legfeljebb {n} elem választható',
+        'A csoportban legfeljebb {n} elem választható'
+      ];
+    },
+    selectAllText: 'Mind',
+    deselectAllText: 'Egyik sem',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-hu_HU.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Válasszon!",noneResultsText:"Nincs találat {0}",countSelectedText:function(a,b){return"{0} elem kiválasztva"},maxOptionsText:function(a,b){return["Legfeljebb {n} elem választható","A csoportban legfeljebb {n} elem választható"]},selectAllText:"Mind",deselectAllText:"Egyik sem",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,37 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Tidak ada yang dipilih',
+    noneResultsText: 'Tidak ada yang cocok {0}',
+    countSelectedText: '{0} terpilih',
+    maxOptionsText: ['Mencapai batas (maksimum {n})', 'Mencapai batas grup (maksimum {n})'],
+    selectAllText: 'Pilih Semua',
+    deselectAllText: 'Hapus Semua',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-id_ID.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Tidak ada yang dipilih",noneResultsText:"Tidak ada yang cocok {0}",countSelectedText:"{0} terpilih",maxOptionsText:["Mencapai batas (maksimum {n})","Mencapai batas grup (maksimum {n})"],selectAllText:"Pilih Semua",deselectAllText:"Hapus Semua",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nessuna selezione',
+    noneResultsText: 'Nessun risultato per {0}',
+    countSelectedText: 'Selezionati {0} di {1}',
+    maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-it_IT.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nessuna selezione",noneResultsText:"Nessun risultato per {0}",countSelectedText:"Selezionati {0} di {1}",maxOptionsText:["Limite raggiunto ({n} {var} max)","Limite del gruppo raggiunto ({n} {var} max)",["elementi","elemento"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: '항목을 선택해주세요',
+    noneResultsText: '{0} 검색 결과가 없습니다',
+    countSelectedText: function (numSelected, numTotal) {
+      return "{0}개를 선택하였습니다";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        '{n}개까지 선택 가능합니다',
+        '해당 그룹은 {n}개까지 선택 가능합니다'
+      ];
+    },
+    selectAllText: '전체선택',
+    deselectAllText: '전체해제',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ko_KR.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"항목을 선택해주세요",noneResultsText:"{0} 검색 결과가 없습니다",countSelectedText:function(a,b){return"{0}개를 선택하였습니다"},maxOptionsText:function(a,b){return["{n}개까지 선택 가능합니다","해당 그룹은 {n}개까지 선택 가능합니다"]},selectAllText:"전체선택",deselectAllText:"전체해제",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,70 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+/*!
+ * Bootstrap-select v1.8.1 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Ingen valgt',
+    noneResultsText: 'Søket gir ingen treff {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} alternativ valgt" : "{0} alternativer valgt";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Grense nådd (maks {n} valg)' : 'Grense nådd (maks {n} valg)',
+        (numGroup == 1) ? 'Grense for grupper nådd (maks {n} grupper)' : 'Grense for grupper nådd (maks {n} grupper)'
+      ];
+    },
+    selectAllText: 'Merk alle',
+    deselectAllText: 'Fjern alle',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nb_NO.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,13 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){/*!
+ * Bootstrap-select v1.8.1 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(b,c){"function"==typeof define&&define.amd?define(["jquery"],function(a){return c(a)}):"object"==typeof exports?module.exports=c(require("jquery")):c(a)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ingen valgt",noneResultsText:"Søket gir ingen treff {0}",countSelectedText:function(a,b){return 1==a?"{0} alternativ valgt":"{0} alternativer valgt"},maxOptionsText:function(a,b){return["Grense nådd (maks {n} valg)","Grense for grupper nådd (maks {n} grupper)"]},selectAllText:"Merk alle",deselectAllText:"Fjern alle",multipleSeparator:", "}}(a)})});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Niets geselecteerd',
+    noneResultsText: 'Geen resultaten gevonden voor {0}',
+    countSelectedText: '{0} van {1} geselecteerd',
+    maxOptionsText: ['Limiet bereikt ({n} {var} max)', 'Groep limiet bereikt ({n} {var} max)', ['items', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-nl_NL.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Niets geselecteerd",noneResultsText:"Geen resultaten gevonden voor {0}",countSelectedText:"{0} van {1} geselecteerd",maxOptionsText:["Limiet bereikt ({n} {var} max)","Groep limiet bereikt ({n} {var} max)",["items","item"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,37 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nic nie zaznaczono',
+    noneResultsText: 'Brak wyników wyszukiwania {0}',
+    countSelectedText: 'Zaznaczono {0} z {1}',
+    maxOptionsText: ['Osiągnięto limit ({n} {var} max)', 'Limit grupy osiągnięty ({n} {var} max)', ['elementy', 'element']],
+    selectAll: 'Zaznacz wszystkie',
+    deselectAll: 'Odznacz wszystkie',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pl_PL.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nic nie zaznaczono",noneResultsText:"Brak wyników wyszukiwania {0}",countSelectedText:"Zaznaczono {0} z {1}",maxOptionsText:["Osiągnięto limit ({n} {var} max)","Limit grupy osiągnięty ({n} {var} max)",["elementy","element"]],selectAll:"Zaznacz wszystkie",deselectAll:"Odznacz wszystkie",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nada selecionado',
+    noneResultsText: 'Nada encontrado contendo {0}',
+    countSelectedText: 'Selecionado {0} de {1}',
+    maxOptionsText: ['Limite excedido (máx. {n} {var})', 'Limite do grupo excedido (máx. {n} {var})', ['itens', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_BR.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nada selecionado",noneResultsText:"Nada encontrado contendo {0}",countSelectedText:"Selecionado {0} de {1}",maxOptionsText:["Limite excedido (máx. {n} {var})","Limite do grupo excedido (máx. {n} {var})",["itens","item"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+$.fn.selectpicker.defaults = {
+noneSelectedText: 'Nenhum seleccionado',
+noneResultsText: 'Sem resultados contendo {0}',
+countSelectedText: 'Selecionado {0} de {1}',
+maxOptionsText: ['Limite ultrapassado (máx. {n} {var})', 'Limite de seleções ultrapassado (máx. {n} {var})', ['itens', 'item']],
+multipleSeparator: ', '
+};
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-pt_PT.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nenhum seleccionado",noneResultsText:"Sem resultados contendo {0}",countSelectedText:"Selecionado {0} de {1}",maxOptionsText:["Limite ultrapassado (máx. {n} {var})","Limite de seleções ultrapassado (máx. {n} {var})",["itens","item"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nu a fost selectat nimic',
+    noneResultsText: 'Nu exista niciun rezultat {0}',
+    countSelectedText: '{0} din {1} selectat(e)',
+    maxOptionsText: ['Limita a fost atinsa ({n} {var} max)', 'Limita de grup a fost atinsa ({n} {var} max)', ['iteme', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ro_RO.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nu a fost selectat nimic",noneResultsText:"Nu exista niciun rezultat {0}",countSelectedText:"{0} din {1} selectat(e)",maxOptionsText:["Limita a fost atinsa ({n} {var} max)","Limita de grup a fost atinsa ({n} {var} max)",["iteme","item"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,36 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Ничего не выбрано',
+    noneResultsText: 'Совпадений не найдено {0}',
+    countSelectedText: 'Выбрано {0} из {1}',
+    maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']],
+    doneButtonText: 'Закрыть',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ru_RU.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Ничего не выбрано",noneResultsText:"Совпадений не найдено {0}",countSelectedText:"Выбрано {0} из {1}",maxOptionsText:["Достигнут предел ({n} {var} максимум)","Достигнут предел в группе ({n} {var} максимум)",["items","item"]],doneButtonText:"Закрыть",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,37 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Vyberte zo zoznamu',
+    noneResultsText: 'Pre výraz {0} neboli nájdené žiadne výsledky',
+    countSelectedText: 'Vybrané {0} z {1}',
+    maxOptionsText: ['Limit prekročený ({n} {var} max)', 'Limit skupiny prekročený ({n} {var} max)', ['položiek', 'položka']],
+    selectAllText: 'Vybrať všetky',
+    deselectAllText: 'Zrušiť výber',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sk_SK.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Vyberte zo zoznamu",noneResultsText:"Pre výraz {0} neboli nájdené žiadne výsledky",countSelectedText:"Vybrané {0} z {1}",maxOptionsText:["Limit prekročený ({n} {var} max)","Limit skupiny prekročený ({n} {var} max)",["položiek","položka"]],selectAllText:"Vybrať všetky",deselectAllText:"Zrušiť výber",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nič izbranega',
+    noneResultsText: 'Ni zadetkov za {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      "Število izbranih: {0}";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        'Omejitev dosežena (max. izbranih: {n})',
+        'Omejitev skupine dosežena (max. izbranih: {n})'
+      ];
+    },
+    selectAllText: 'Izberi vse',
+    deselectAllText: 'Počisti izbor',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sl_SI.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Nič izbranega",noneResultsText:"Ni zadetkov za {0}",countSelectedText:function(a,b){"Število izbranih: {0}"},maxOptionsText:function(a,b){return["Omejitev dosežena (max. izbranih: {n})","Omejitev skupine dosežena (max. izbranih: {n})"]},selectAllText:"Izberi vse",deselectAllText:"Počisti izbor",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Inget valt',
+    noneResultsText: 'Inget sökresultat matchar {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected === 1) ? "{0} alternativ valt" : "{0} alternativ valda";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        'Gräns uppnåd (max {n} alternativ)',
+        'Gräns uppnåd (max {n} gruppalternativ)'
+      ];
+    },
+    selectAllText: 'Markera alla',
+    deselectAllText: 'Avmarkera alla',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-sv_SE.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Inget valt",noneResultsText:"Inget sökresultat matchar {0}",countSelectedText:function(a,b){return 1===a?"{0} alternativ valt":"{0} alternativ valda"},maxOptionsText:function(a,b){return["Gräns uppnåd (max {n} alternativ)","Gräns uppnåd (max {n} gruppalternativ)"]},selectAllText:"Markera alla",deselectAllText:"Avmarkera alla",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Hiçbiri seçilmedi',
+    noneResultsText: 'Hiçbir sonuç bulunamadı {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} öğe seçildi" : "{0} öğe seçildi";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Limit aşıldı (maksimum {n} sayıda öğe )' : 'Limit aşıldı (maksimum {n} sayıda öğe)',
+        (numGroup == 1) ? 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' : 'Grup limiti aşıldı (maksimum {n} sayıda öğe)'
+      ];
+    },
+    selectAllText: 'Tümünü Seç',
+    deselectAllText: 'Seçiniz',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-tr_TR.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Hiçbiri seçilmedi",noneResultsText:"Hiçbir sonuç bulunamadı {0}",countSelectedText:function(a,b){return"{0} öğe seçildi"},maxOptionsText:function(a,b){return[1==a?"Limit aşıldı (maksimum {n} sayıda öğe )":"Limit aşıldı (maksimum {n} sayıda öğe)","Grup limiti aşıldı (maksimum {n} sayıda öğe)"]},selectAllText:"Tümünü Seç",deselectAllText:"Seçiniz",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Нічого не вибрано',
+    noneResultsText: 'Збігів не знайдено {0}',
+    countSelectedText: 'Вибрано {0} із {1}',
+    maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-ua_UA.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"Нічого не вибрано",noneResultsText:"Збігів не знайдено {0}",countSelectedText:"Вибрано {0} із {1}",maxOptionsText:["Досягнута межа ({n} {var} максимум)","Досягнута межа в групі ({n} {var} максимум)",["items","item"]],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,35 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: '没有选中任何项',
+    noneResultsText: '没有找到匹配项',
+    countSelectedText: '选中{1}中的{0}项',
+    maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'],
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_CN.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"没有选中任何项",noneResultsText:"没有找到匹配项",countSelectedText:"选中{1}中的{0}项",maxOptionsText:["超出限制 (最多选择{n}项)","组选择超出限制(最多选择{n}组)"],multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,37 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: '沒有選取任何項目',
+    noneResultsText: '沒有找到符合的結果',
+    countSelectedText: '已經選取{0}個項目',
+    maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'],
+    selectAllText: '選取全部',
+    deselectAllText: '全部取消',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.min.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.min.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/dist/js/i18n/defaults-zh_TW.min.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap-select v1.9.3 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.fn.selectpicker.defaults={noneSelectedText:"沒有選取任何項目",noneResultsText:"沒有找到符合的結果",countSelectedText:"已經選取{0}個項目",maxOptionsText:["超過限制 (最多選擇{n}項)","超過限制(最多選擇{n}組)"],selectAllText:"選取全部",deselectAllText:"全部取消",multipleSeparator:", "}}(a)});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/base.html
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/base.html	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/base.html	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  {% if page_description %}<meta name="description" content="{{ page_description }}">{% endif %}
+  {% if site_author %}<meta name="author" content="{{ site_author }}">{% endif %}
+  {% if canonical_url %}<link rel="canonical" href="{{ canonical_url }}">{% endif %}
+  {% if favicon %}<link rel="shortcut icon" href="{{ favicon }}">
+  {% else %}<link rel="shortcut icon" href="{{ base_url }}/img/favicon.ico">{% endif %}
+
+  <title>{% if page_title %}{{ page_title }} - {% endif %}{{ site_name }}</title>
+
+  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
+  <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
+  <link href="{{ base_url }}/css/highlight.css" rel="stylesheet">
+  <link href="{{ base_url }}/css/base.css" rel="stylesheet">
+  <link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/{{ config.extra.version }}/css/bootstrap-select.min.css" rel="stylesheet">
+  {%- for path in extra_css %}
+  <link href="{{ path }}" rel="stylesheet">
+  {%- endfor %}
+
+  <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
+  <!--[if lt IE 9]>
+    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+    <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
+  <![endif]-->
+</head>
+
+<body>
+
+{% include "nav.html" %}
+
+{% if current_page and current_page.is_homepage %} 
+<div class="jumbotron bs-docs-header">
+  <div class="container text-center">
+    <h1>bootstrap-select</h1>
+    <p class="lead">Bootstrap-select is a jQuery plugin that utilizes Bootstrap's dropdown.js to style and bring additional functionality to normal select boxes.</p>
+    <a class="btn btn-outline-inverse btn-lg" href="//github.com/silviomoreto/bootstrap-select/archive/v{{ config.extra.version }}.zip" role="button">
+      <i class="fa fa-download"></i> Download (v{{ config.extra.version }})
+    </a>
+  </div>
+</div>
+<div class="container">
+{% include "content.html" %}
+</div>
+{% else %}
+<div class="container">
+  <div class="col-md-3">{% include "toc.html" %}</div>
+  <div class="col-md-9" role="main">{% include "content.html" %}</div>
+</div>
+{% endif %}
+
+  <div class="footer">
+    <div class="container text-center">
+      <p class="text-muted">Bootstrap-select is maintained by <a href="https://github.com/caseyjhol">caseyjhol</a>,
+        <a href="https://github.com/t0xicCode">t0xicCode</a>, and the community.</p>
+    </div>
+  </div>
+
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
+<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
+<script src="{{ base_url }}/js/highlight.pack.js"></script>
+<script src="{{ base_url }}/js/base.js"></script>
+<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/{{ config.extra.version }}/js/bootstrap-select.min.js"></script>
+{%- for path in extra_javascript %}
+<script src="{{ path }}"></script>
+{%- endfor %}
+
+{% if google_analytics %}
+<script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-35848102-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function () {
+    var ga = document.createElement('script');
+    ga.type = 'text/javascript';
+    ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0];
+    s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+{% endif %}
+</body>
+</html>

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/js/base.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/js/base.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/js/base.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+/* Highlight */
+$( document ).ready(function() {
+    hljs.initHighlightingOnLoad();
+    $('table').addClass('table table-striped table-hover');
+    $('pre').addClass('highlight');
+});
+
+$('body').scrollspy({
+    target: '.bs-sidebar',
+});
+
+/* Prevent disabled links from causing a page reload */
+$("li.disabled a").click(function() {
+    event.preventDefault();
+});
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/nav.html
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/nav.html	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/nav.html	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,60 @@
+<div class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+
+    <!-- Collapsed navigation -->
+    <div class="navbar-header">
+      {% if include_nav or include_next_prev or repo_url %}
+      <!-- Expander button -->
+      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+        <span class="sr-only">Toggle navigation</span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+        <span class="icon-bar"></span>
+      </button>
+      {% endif %}
+
+      <!-- Main title -->
+      <a class="navbar-brand" href="{{ homepage_url }}">{{ site_name }}</a>
+    </div>
+
+    <!-- Expanded navigation -->
+    <div class="navbar-collapse collapse">
+      {% if include_nav %}
+      <!-- Main navigation -->
+      <ul class="nav navbar-nav">
+        {% for nav_item in nav %}
+        {% if nav_item.children %}
+        <li class="dropdown{% if nav_item.active %} active{% endif %}">
+          <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ nav_item.title }} <b class="caret"></b></a>
+          <ul class="dropdown-menu">
+            {% for nav_item in nav_item.children %}
+            {% include "nav-sub.html" %}
+            {% endfor %}
+          </ul>
+        </li>
+        {% else %}
+        <li {% if nav_item.active %}class="active"{% endif %}>
+          <a href="{{ nav_item.url }}">{{ nav_item.title }}</a>
+        </li>
+        {% endif %}
+        {% endfor %}
+      </ul>
+      {% endif %}
+
+      <ul class="nav navbar-nav navbar-right">
+        {% if repo_url %}
+        <li>
+          <a href="{{ repo_url }}">
+            {% if repo_name == 'GitHub' %}
+            <i class="fa fa-github"></i>
+            {% elif repo_name == 'Bitbucket' %}
+            <i class="fa fa-bitbucket"></i>
+            {% endif %}
+            {{ repo_name }}
+          </a>
+        </li>
+        {% endif %}
+      </ul>
+    </div>
+  </div>
+</div>

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/toc.html
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/toc.html	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/custom_theme/toc.html	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+<div class="bs-sidebar hidden-print affix" role="complementary">
+    <ul class="nav bs-sidenav">
+    {% for toc_item in toc %}
+        <li class="main {% if toc_item.active %}active{% endif %}">
+	        <a href="{{ toc_item.url }}">{{ toc_item.title }}</a>
+	        <ul class="nav">
+	        {% for toc_item in toc_item.children %}
+	            <li><a href="{{ toc_item.url }}">{{ toc_item.title }}</a></li>
+	        {% endfor %}
+	        </ul>
+        </li>
+    {% endfor %}
+    </ul>
+</div>
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/css/custom.css
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/css/custom.css	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/css/custom.css	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,198 @@
+html {
+  position: relative;
+  min-height: 100%;
+}
+body {
+  padding-top: 51px;
+  /* Margin bottom by footer height */
+  margin-bottom: 60px;
+}
+label {
+  display: block;
+}
+/* hide "Home" in navbar */
+.nav.navbar-nav:first-child > li:first-child {
+    display: none;
+}
+
+ul.nav li.main {
+  font-weight: normal;
+}
+
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  /* Set the fixed height of the footer here */
+  height: 60px;
+  background-color: #f5f5f5;
+}
+
+.footer .container .text-muted {
+  margin: 20px 0;
+}
+
+.footer .container {
+  padding-right: 15px;
+  padding-left: 15px;
+}
+
+/* Outline button for use within the docs */
+.btn-outline {
+  color: #337ab7;
+  background-color: transparent;
+  border-color: #337ab7;
+}
+.btn-outline:hover,
+.btn-outline:focus,
+.btn-outline:active {
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+
+/* Inverted outline button (white on dark) */
+.btn-outline-inverse {
+  color: #fff;
+  background-color: transparent;
+  border-color: #fff;
+}
+.btn-outline-inverse:hover,
+.btn-outline-inverse:focus,
+.btn-outline-inverse:active {
+  color: #337ab7;
+  text-shadow: none;
+  background-color: #fff;
+  border-color: #fff;
+}
+
+.bs-docs-header {
+  margin-bottom: 0;
+  background: #337ab7;
+  color: #fff;
+}
+
+.bs-docs-header .btn {
+  padding: 15px 30px;
+  font-size: 20px
+}
+
+.bs-docs-header h1 {
+  margin-bottom: 30px;
+}
+
+.bs-docs-header .lead {
+  margin: 0 auto 30px;
+}
+
+.bs-docs-sub-header {
+  padding-top: 20px;
+  padding-bottom: 20px;
+}
+
+.content h1:first-of-type,
+.content h1:first-of-type + p:first-of-type {
+  text-align: center;
+}
+
+.bs-docs-example > p {
+  margin-top: 20px;
+}
+
+.bs-docs-example > p:last-child {
+  margin-bottom: 0;
+}
+
+.bs-docs-example .table,
+.bs-docs-example .progress,
+.bs-docs-example .well,
+.bs-docs-example .alert,
+.bs-docs-example .hero-unit,
+.bs-docs-example .pagination,
+.bs-docs-example .navbar,
+.bs-docs-example > .nav,
+.bs-docs-example blockquote {
+  margin-bottom: 5px;
+}
+
+.bs-docs-example .pagination {
+  margin-top: 0;
+}
+
+.special {
+  font-weight: bold !important;
+  color: #fff !important;
+  background: #bc0000 !important;
+  text-transform: uppercase;
+}
+
+.bs-docs-example {
+  position: relative;
+  padding: 45px 15px 15px;
+  margin: 0 -15px 15px;
+  border-color: #e5e5e5 #eee #eee;
+  border-style: solid;
+  border-width: 1px 0;
+  -webkit-box-shadow: inset 0 3px 6px rgba(0,0,0,.05);
+  box-shadow: inset 0 3px 6px rgba(0,0,0,.05);
+}
+
+/* Echo out a label for the example */
+.bs-docs-example:after {
+  position: absolute;
+  top: 15px;
+  left: 15px;
+  font-size: 12px;
+  font-weight: 700;
+  color: #959595;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  content: "Example";
+}
+
+.highlight {
+  padding: 9px 14px;
+  margin-bottom: 14px;
+  background-color: #f7f7f9;
+  border: 1px solid #e1e1e8;
+  border-radius: 4px;
+}
+
+.bs-docs-example + .highlight {
+    margin: -15px -15px 15px;
+    border-width: 0 0 1px;
+    border-radius: 0;
+}
+
+ at media (min-width: 768px) {
+  .bs-docs-example {
+    margin-right: 0;
+    margin-left: 0;
+    background-color: #fff;
+    border-color: #ddd;
+    border-width: 1px;
+    border-radius: 4px 4px 0 0;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+
+  .bs-docs-example.no-code {
+    border-radius: 4px;
+  }
+
+
+  .bs-docs-example + .highlight {
+    margin-top: -16px;
+    margin-right: 0;
+    margin-left: 0;
+    border-width: 1px;
+    border-bottom-right-radius: 4px;
+    border-bottom-left-radius: 4px;
+  }
+}
+
+ at media (min-width: 992px){
+  .bs-docs-header .lead {
+      width: 80%;
+  }
+}
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/examples.md
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/examples.md	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/examples.md	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,903 @@
+# Basic examples
+
+---
+## Standard select boxes
+
+<div class="bs-docs-example">
+  <p>Make this:</p>
+
+  <select>
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+
+  <p>Become this:</p>
+
+  <select class="selectpicker">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+<div id="optgroup"></div>
+## Select boxes with optgroups
+
+<div class="bs-docs-example">
+  <select class="selectpicker">
+    <optgroup label="Picnic">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </optgroup>
+    <optgroup label="Camping">
+      <option>Tent</option>
+      <option>Flashlight</option>
+      <option>Toilet Paper</option>
+    </optgroup>
+  </select>
+</div>
+
+```html
+<select class="selectpicker">
+  <optgroup label="Picnic">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </optgroup>
+  <optgroup label="Camping">
+    <option>Tent</option>
+    <option>Flashlight</option>
+    <option>Toilet Paper</option>
+  </optgroup>
+</select>
+```
+
+## Multiple select boxes
+
+<div class="bs-docs-example">
+  <select class="selectpicker" multiple>
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" multiple>
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+# Live search
+
+---
+
+## Live search
+
+You can add a search input by passing `data-live-search="true"` attribute:
+
+<div class="bs-docs-example no-code">
+  <select class="selectpicker" data-live-search="true">
+    <option>Hot Dog, Fries and a Soda</option>
+    <option>Burger, Shake and a Smile</option>
+    <option>Sugar, Spice and all things nice</option>
+  </select>
+</div>
+
+## Key words
+
+Add key words to options to improve their searchability using `data-tokens`.
+
+<div class="bs-docs-example">
+  <select class="selectpicker" data-live-search="true">
+    <option data-tokens="ketchup mustard">Hot Dog, Fries and a Soda</option>
+    <option data-tokens="mustard">Burger, Shake and a Smile</option>
+    <option data-tokens="frosting">Sugar, Spice and all things nice</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" data-live-search="true">
+  <option data-tokens="ketchup mustard">Hot Dog, Fries and a Soda</option>
+  <option data-tokens="mustard">Burger, Shake and a Smile</option>
+  <option data-tokens="frosting">Sugar, Spice and all things nice</option>
+</select>
+```
+
+# Limit the number of selections
+
+Limit the number of options that can be selected via the `data-max-options` attribute. It also works for option groups. Customize the message displayed when the limit is reached with `maxOptionsText`.
+
+<div class="bs-docs-example">
+  <select class="selectpicker" multiple data-max-options="2">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+
+  <select class="selectpicker" multiple>
+    <optgroup label="Condiments" data-max-options="2">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </optgroup>
+    <optgroup label="Breads" data-max-options="2">
+      <option>Plain</option>
+      <option>Steamed</option>
+      <option>Toasted</option>
+    </optgroup>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" multiple data-max-options="2">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+
+<select class="selectpicker" multiple>
+  <optgroup label="Condiments" data-max-options="2">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </optgroup>
+  <optgroup label="Breads" data-max-options="2">
+    <option>Plain</option>
+    <option>Steamed</option>
+    <option>Toasted</option>
+  </optgroup>
+</select>
+```
+
+# Custom button text
+
+---
+
+## Placeholder
+<p id="titleMultiples"></p>
+Using the `title` attribute will set the default placeholder text when nothing is selected. This works for both multiple and standard select boxes:
+
+<div class="bs-docs-example">
+  <div class="form-group">
+    <label>Multiple</label>
+    <select class="selectpicker" multiple title="Choose one of the following...">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </select>
+  </div>
+
+  <div class="form-group">
+    <label>Standard</label>
+    <select class="selectpicker" title="Choose one of the following...">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </select>
+  </div>
+</div>
+
+```html
+<select class="selectpicker" multiple title="Choose one of the following...">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+## Selected text
+
+<p id="title"></p>
+Set the `title` attribute on individual options to display alternative text when the option is selected:
+
+<div class="bs-docs-example no-code">
+  <select class="selectpicker">
+    <option title="Combo 1">Hot Dog, Fries and a Soda</option>
+    <option title="Combo 2">Burger, Shake and a Smile</option>
+    <option title="Combo 3">Sugar, Spice and all things nice</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker">
+  <option title="Combo 1">Hot Dog, Fries and a Soda</option>
+  <option title="Combo 2">Burger, Shake and a Smile</option>
+  <option title="Combo 3">Sugar, Spice and all things nice</option>
+</select>
+```
+## Selected text format
+
+<p id="titleMultiplesFormat"></p>
+Specify how the selection is displayed with the `data-selected-text-format` attribute on a multiple select.
+
+The supported values are:
+
+* `values`: A comma delimited list of selected values (default)
+* `count`: If one item is selected, then the option value is shown. If more than one is selected then the number of selected items is displayed, e.g. `2 of 6 selected`
+* `count > x`: Where `x` is the number of items selected when the display format changes from `values` to `count`
+* `static`: Always show the select title (placeholder), regardless of selection
+
+<div class="bs-docs-example">
+  <select class="selectpicker" multiple data-selected-text-format="count">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" multiple data-selected-text-format="count">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+<div class="bs-docs-example">
+  <select class="selectpicker" multiple data-selected-text-format="count > 3">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+    <option>Onions</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" multiple data-selected-text-format="count > 3">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+  <option>Onions</option>
+</select>
+```
+
+# Styling
+
+---
+
+## Button classes
+
+You can set the button classes via the `data-style` attribute:
+
+<div class="bs-docs-example">
+  <div class="form-group">
+    <select class="selectpicker" data-style="btn-primary">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </select>
+  </div>
+  <div class="form-group">
+    <select class="selectpicker" data-style="btn-info">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </select>
+  </div>
+  <div class="form-group">
+    <select class="selectpicker" data-style="btn-success">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </select>
+  </div>
+  <div class="form-group">
+    <select class="selectpicker" data-style="btn-warning">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </select>
+  </div>
+  <div class="form-group">
+    <select class="selectpicker" data-style="btn-danger">
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </select>
+  </div>
+</div>
+
+```html
+<select class="selectpicker" data-style="btn-primary">
+  ...
+</select>
+
+<select class="selectpicker" data-style="btn-info">
+  ...
+</select>
+
+<select class="selectpicker" data-style="btn-success">
+  ...
+</select>
+
+<select class="selectpicker" data-style="btn-warning">
+  ...
+</select>
+
+<select class="selectpicker" data-style="btn-danger">
+  ...
+</select>
+```
+
+## Checkmark on selected option
+
+You can also show the checkmark icon on standard select boxes with the `show-tick` class:
+
+<div class="bs-docs-example">
+  <select class="selectpicker show-tick">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker show-tick">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+## Menu arrow
+
+The Bootstrap menu arrow can be added with the `show-menu-arrow` class:
+
+<div class="bs-docs-example">
+  <select class="selectpicker show-menu-arrow">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker show-menu-arrow">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+## Style individual options
+
+<p id="classes"></p>
+Classes added to options are transferred to the select box:
+
+<div class="bs-docs-example">
+  <select class="selectpicker">
+    <option>Mustard</option>
+    <option class="special">Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker">
+  <option>Mustard</option>
+  <option class="special">Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+```css
+.special {
+  font-weight: bold !important;
+  color: #fff !important;
+  background: #bc0000 !important;
+  text-transform: uppercase;
+}
+```
+
+## Width
+
+<p id="grid"></p>
+Wrap selects in grid columns, or any custom parent element, to easily enforce desired widths.
+
+<div class="bs-docs-example">
+  <div class="row">
+    <div class="col-xs-3">
+      <div class="form-group">
+        <select class="selectpicker form-control">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+        </select>
+      </div>
+    </div>
+    <div class="col-xs-9">
+      <div class="form-group">
+        <select class="selectpicker form-control">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+        </select>
+      </div>
+    </div>
+  </div>
+  <div class="row">
+    <div class="col-xs-4">
+       <div class="form-group">
+        <select class="selectpicker form-control">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+        </select>
+      </div>
+    </div>
+    <div class="col-xs-8">
+       <div class="form-group">
+        <select class="selectpicker form-control">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+        </select>
+      </div>
+    </div>
+  </div>
+  <div class="row">
+    <div class="col-xs-5">
+      <div class="form-group">
+        <select class="selectpicker form-control">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+        </select>
+      </div>
+    </div>
+    <div class="col-xs-7">
+      <div class="form-group">
+        <select class="selectpicker form-control">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+        </select>
+      </div>
+    </div>
+  </div>
+</div>
+
+```html
+<div class="row">
+  <div class="col-xs-3">
+    <div class="form-group">
+      <select class="selectpicker form-control">
+        <option>Mustard</option>
+        <option>Ketchup</option>
+        <option>Relish</option>
+      </select>
+    </div>
+  </div>
+</div>
+```
+
+<div id="data-width"></div>
+
+Alternatively, use the `data-width` attribute to set the width of the select. Set `data-width` to `'auto'` to automatically adjust the width of the select to its widest option. `'fit'` automatically adjusts the width of the select to the width of its currently selected option. An exact value can also be specified, e.g., `300px` or `50%`.
+
+<div class="bs-docs-example">
+  <div class="row">
+    <div class="col-xs-12">
+      <div class="form-group">
+        <label>width: 'auto'</label>
+        <select class="selectpicker form-control" data-width="auto">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+          <option>All of the above (and much, much more!)</option>
+        </select>
+      </div>
+    </div>
+  </div>
+  <div class="row">
+    <div class="col-xs-12">
+      <div class="form-group">
+        <label>width: 'fit'</label>
+        <select class="selectpicker form-control" data-width="fit">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+          <option>All of the above (and much, much more!)</option>
+        </select>
+      </div>
+    </div>
+  </div>
+  <div class="row">
+    <div class="col-xs-12">
+      <div class="form-group">
+        <label>width: '100px'</label>
+        <select class="selectpicker form-control" data-width="100px">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+          <option>All of the above (and much, much more!)</option>
+        </select>
+      </div>
+    </div>
+  </div>
+  <div class="row">
+    <div class="col-xs-12">
+      <div class="form-group">
+        <label>width: '75%'</label>
+        <select class="selectpicker form-control" data-width="75%">
+          <option>Mustard</option>
+          <option>Ketchup</option>
+          <option>Relish</option>
+          <option>All of the above (and much, much more!)</option>
+        </select>
+      </div>
+    </div>
+  </div>
+</div>
+
+```html
+<select class="selectpicker" data-width="auto">
+  ...
+</select>
+<select class="selectpicker" data-width="fit">
+  ...
+</select>
+<select class="selectpicker" data-width="100px">
+  ...
+</select>
+<select class="selectpicker" data-width="75%">
+  ...
+</select>
+```
+
+# Customize options
+
+---
+
+## Icons
+
+Add an icon to an option or optgroup with the `data-icon` attribute:
+
+<div class="bs-docs-example">
+  <select class="selectpicker">
+    <option data-icon="glyphicon-glass">Mustard</option>
+    <option data-icon="glyphicon-heart">Ketchup</option>
+    <option data-icon="glyphicon-film">Relish</option>
+    <option data-icon="glyphicon-home">Mayonnaise</option>
+    <option data-icon="glyphicon-print">Barbecue Sauce</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker">
+  <option data-icon="glyphicon-heart">Ketchup</option>
+</select>
+```
+
+## Custom content
+
+Insert custom HTML into the option with the `data-content` attribute:
+
+<div class="bs-docs-example">
+  <select class="selectpicker">
+    <option data-content="<span class='label label-warning'>Mustard</span>">Mustard</option>
+    <option data-content="<span class='label label-danger label-important'>Ketchup</span>">Ketchup</option>
+    <option data-content="<span class='label label-success'>Relish</span>">Relish</option>
+    <option data-content="<span class='label label-info'>Mayonnaise</span>">Mayonnaise</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker">
+  <option data-content="<span class='label label-success'>Relish</span>">Relish</option>
+</select>
+```
+
+## Subtext
+Add subtext to an option or optgroup with the `data-subtext` attribute:
+
+<div class="bs-docs-example">
+  <div class="form-group">
+    <select class="selectpicker">
+      <option data-subtext="French's">Mustard</option>
+      <option data-subtext="Heinz">Ketchup</option>
+      <option data-subtext="Sweet">Relish</option>
+      <option data-subtext="Miracle Whip">Mayonnaise</option>
+      <option data-divider="true"></option>
+      <option data-subtext="Honey">Barbecue Sauce</option>
+      <option data-subtext="Ranch">Salad Dressing</option>
+      <option data-subtext="Sweet & Spicy">Tabasco</option>
+      <option data-subtext="Chunky">Salsa</option>
+    </select>
+  </div>
+
+  <div class="form-group">
+    <select class="selectpicker" data-show-subtext="true">
+      <option data-subtext="French's">Mustard</option>
+      <option data-subtext="Heinz">Ketchup</option>
+      <option data-subtext="Sweet">Relish</option>
+      <option data-subtext="Miracle Whip">Mayonnaise</option>
+      <option data-divider="true"></option>
+      <option data-subtext="Honey">Barbecue Sauce</option>
+      <option data-subtext="Ranch">Salad Dressing</option>
+      <option data-subtext="Sweet & Spicy">Tabasco</option>
+      <option data-subtext="Chunky">Salsa</option>
+    </select>
+    <span class="help-block">With <code>showSubtext</code> set to true.</span>
+  </div>
+</div>
+
+```html
+<select class="selectpicker" data-size="5">
+  <option data-subtext="Heinz">Ketchup</option>
+</select>
+```
+
+# Customize menu
+
+---
+
+## Menu size
+
+The `size` option is set to `'auto'` by default. When `size` is set to `'auto'`, the menu always opens up to show as many items as the window will allow without being cut off. Set `size` to `false` to always show all items. The size of the menu can also be specifed using the `data-size` attribute.
+
+<div class="bs-docs-example">
+  <select class="selectpicker">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+    <option>Mayonnaise</option>
+    <option>Barbecue Sauce</option>
+    <option>Salad Dressing</option>
+    <option>Tabasco</option>
+    <option>Salsa</option>
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+    <option>Mayonnaise</option>
+    <option>Barbecue Sauce</option>
+    <option>Salad Dressing</option>
+    <option>Tabasco</option>
+    <option>Salsa</option>
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+    <option>Mayonnaise</option>
+    <option>Barbecue Sauce</option>
+    <option>Salad Dressing</option>
+    <option>Tabasco</option>
+    <option>Salsa</option>
+  </select>
+</div>
+
+<p id="data-size"></p>
+Specify a number for `data-size` to choose the maximum number of items to show in the menu.
+
+<div class="bs-docs-example">
+  <select class="selectpicker" data-size="5">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+    <option>Mayonnaise</option>
+    <option>Barbecue Sauce</option>
+    <option>Salad Dressing</option>
+    <option>Tabasco</option>
+    <option>Salsa</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" data-size="5">
+  ...
+</select>
+```
+
+## Select/deselect all options
+
+Adds two buttons to the top of the menu - **Select All** & **Deselect All** with `data-actions-box="true"`.
+
+<div class="bs-docs-example">
+  <select class="selectpicker" multiple data-actions-box="true">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" multiple data-actions-box="true">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+## Divider
+
+Add `data-divider="true"` to an option to turn it into a divider.
+
+<div class="bs-docs-example">
+  <select class="selectpicker">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+    <option>Mayonnaise</option>
+    <option data-divider="true"></option>
+    <option>Barbecue Sauce</option>
+    <option>Salad Dressing</option>
+    <option>Tabasco</option>
+    <option>Salsa</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" data-size="5">
+  <option data-divider="true"></option>
+</select>
+```
+
+## Menu header
+
+Add a header to the dropdown menu, e.g. `header: 'Select a condiment'` or `data-header="Select a condiment"`
+
+<div class="bs-docs-example">
+  <div class="row-fluid">
+    <select class="selectpicker" data-header="Select a condiment">
+      <option data-subtext="French's">Mustard</option>
+      <option data-subtext="Heinz">Ketchup</option>
+      <option data-subtext="Sweet">Relish</option>
+      <option data-subtext="Miracle Whip">Mayonnaise</option>
+      <option data-divider="true"></option>
+      <option data-subtext="Honey">Barbecue Sauce</option>
+      <option data-subtext="Ranch">Salad Dressing</option>
+      <option data-subtext="Sweet & Spicy">Tabasco</option>
+      <option data-subtext="Chunky">Salsa</option>
+    </select>
+  </div>
+</div>
+
+```html
+<select class="selectpicker" data-header="Select a condiment">
+  ...
+</select>
+```
+
+## Container
+
+Append the select to a specific element, e.g. `container: 'body'` or `data-container=".main-content"`
+
+<div class="bs-docs-example" style="overflow:hidden;">
+  <div class="row-fluid">
+    <select class="selectpicker">
+      <option data-subtext="French's">Mustard</option>
+      <option data-subtext="Heinz">Ketchup</option>
+      <option data-subtext="Sweet">Relish</option>
+      <option data-subtext="Miracle Whip">Mayonnaise</option>
+      <option data-divider="true"></option>
+      <option data-subtext="Honey">Barbecue Sauce</option>
+      <option data-subtext="Ranch">Salad Dressing</option>
+      <option data-subtext="Sweet & Spicy">Tabasco</option>
+      <option data-subtext="Chunky">Salsa</option>
+    </select>
+    <select class="selectpicker" data-container="body">
+      <option data-subtext="French's">Mustard</option>
+      <option data-subtext="Heinz">Ketchup</option>
+      <option data-subtext="Sweet">Relish</option>
+      <option data-subtext="Miracle Whip">Mayonnaise</option>
+      <option data-divider="true"></option>
+      <option data-subtext="Honey">Barbecue Sauce</option>
+      <option data-subtext="Ranch">Salad Dressing</option>
+      <option data-subtext="Sweet & Spicy">Tabasco</option>
+      <option data-subtext="Chunky">Salsa</option>
+    </select>
+  </div>
+</div>
+
+```html
+<div style="overflow:hidden;">
+  <select class="selectpicker">
+    ...
+  </select>
+  <select class="selectpicker" data-container="body">
+    ...
+  </select>
+</div>
+```
+
+## Dropup menu
+
+`dropupAuto` is set to true by default, which automatically determines whether or not the menu should display above or below the select box. If `dropupAuto` is set to false, manually make the select a dropup menu by adding the `.dropup` class to the select.
+
+<div class="bs-docs-example">
+  <select class="selectpicker dropup">
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker dropup">
+  ...
+</select>
+```
+
+# Disabled
+
+---
+
+## Disabled select box
+
+<div class="bs-docs-example">
+  <select class="selectpicker" disabled>
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker" disabled>
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+## Disabled options
+
+<div class="bs-docs-example">
+  <select class="selectpicker">
+    <option>Mustard</option>
+    <option disabled>Ketchup</option>
+    <option>Relish</option>
+  </select>
+</div>
+
+```html
+<select class="selectpicker">
+  <option>Mustard</option>
+  <option disabled>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+## Disabled option groups
+
+<div class="bs-docs-example">
+  <select class="selectpicker test">
+    <optgroup label="Picnic" disabled>
+      <option>Mustard</option>
+      <option>Ketchup</option>
+      <option>Relish</option>
+    </optgroup>
+    <optgroup label="Camping">
+      <option>Tent</option>
+      <option>Flashlight</option>
+      <option>Toilet Paper</option>
+    </optgroup>
+  </select>
+</div>
+
+```html
+<select class="selectpicker test">
+  <optgroup label="Picnic" disabled>
+    <option>Mustard</option>
+    <option>Ketchup</option>
+    <option>Relish</option>
+  </optgroup>
+  <optgroup label="Camping">
+    <option>Tent</option>
+    <option>Flashlight</option>
+    <option>Toilet Paper</option>
+  </optgroup>
+</select>
+```
\ No newline at end of file

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/index.md
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/index.md	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/index.md	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,70 @@
+# Getting Started
+
+---
+
+## Dependencies
+
+Requires jQuery v1.8.0+, Bootstrap’s dropdown.js component, and Bootstrap's CSS. If you're not already using Bootstrap in your project, a precompiled version of the minimum requirements can be downloaded [here](http://getbootstrap.com/customize/?id=7830063837006f6fc84f).
+
+## CDN
+
+The folks at CDNJS host a copy of the library. Just use these links:
+
+```html
+<!-- Latest compiled and minified CSS -->
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.8.1/css/bootstrap-select.min.css">
+
+<!-- Latest compiled and minified JavaScript -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.8.1/js/bootstrap-select.min.js"></script>
+
+<!-- (Optional) Latest compiled and minified JavaScript translation files -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.8.1/js/i18n/defaults-*.min.js"></script>
+```
+
+## Install with Bower
+
+You can also install bootstrap-select using [Bower](http://bower.io):
+
+```elixir
+$ bower install bootstrap-select
+```
+
+## Install with npm
+
+You can also install bootstrap-select using [npm](https://www.npmjs.com/package/bootstrap-select):
+
+```elixir
+$ npm install bootstrap-select
+```
+
+## Install with NuGet
+
+You can also install bootstrap-select using [NuGet](https://www.nuget.org/packages/bootstrap-select):
+
+```elixir
+$ Install-Package bootstrap-select
+```
+
+# Usage
+
+---
+
+Bootstrap-select requires bootstrap and jquery. Create your `<select>` with the `.selectpicker` class. The data-api will automatically theme these elements.
+
+```html
+<select class="selectpicker">
+  <option>Mustard</option>
+  <option>Ketchup</option>
+  <option>Relish</option>
+</select>
+```
+
+Options can be passed via data attributes or JavaScript.
+
+```js
+$('.selectpicker').selectpicker({
+  style: 'btn-info',
+  size: 4
+});
+```
+

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/methods.md
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/methods.md	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/methods.md	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,221 @@
+# Methods
+
+Interface with bootstrap-select.
+
+---
+
+## val()
+
+You can set the selected value by calling the `val` method on the element.
+
+```js
+$('.selectpicker').selectpicker('val', 'Mustard');
+$('.selectpicker').selectpicker('val', ['Mustard','Relish']);
+```
+
+This is different to calling `val()` directly on the `select` element. If you call `val()` on the element directly, the bootstrap-select ui will not refresh (as the change event only fires from user interaction). You will have to call the ui refresh method yourself.
+
+```js
+$('.selectpicker').val('Mustard');
+$('.selectpicker').selectpicker('render');
+
+// this is the equivalent of the above
+$('.selectpicker').selectpicker('val', 'Mustard');
+```
+
+---
+
+## selectAll()
+
+This will select all items in a multi-select.
+
+```js
+$('.selectpicker').selectpicker('selectAll');
+```
+
+---
+
+## deselectAll()
+
+This will deselect all items in a multi-select.
+
+```js
+$('.selectpicker').selectpicker('deselectAll');
+```
+
+---
+
+## render()
+
+You can force a re-render of the bootstrap-select ui with the `render` method. This is useful if you programatically change any underlying values that affect the layout of the element.
+
+```js
+$('.selectpicker').selectpicker('render');
+```
+
+---
+
+## mobile()
+
+Enable mobile scrolling by calling `$('.selectpicker').selectpicker('mobile')`. This enables the device's native menu for select menus.
+
+The method for detecting the browser is left up to the user.
+
+```js
+if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
+  $('.selectpicker').selectpicker('mobile');
+}
+```
+
+---
+
+## setStyle()
+
+Modify the class(es) associated with either the button itself or its container.
+
+If changing the class on the container:
+
+```js
+$('.selectpicker').addClass('col-lg-12').selectpicker('setStyle');
+```
+
+If changing the class(es) on the button (altering data-style):
+
+```js
+// Replace Class
+$('.selectpicker').selectpicker('setStyle', 'btn-danger');
+
+// Add Class
+$('.selectpicker').selectpicker('setStyle', 'btn-large', 'add');
+
+// Remove Class
+$('.selectpicker').selectpicker('setStyle', 'btn-large', 'remove');
+```
+
+
+---
+
+## refresh()
+
+To programmatically update a select with JavaScript, first manipulate the select, then use the `refresh` method to 
+update the UI to match the new state. This is necessary when removing or adding options, or when disabling/enabling a 
+select via JavaScript.
+
+```js
+$('.selectpicker').selectpicker('refresh');
+```
+
+<div class="bs-docs-example">
+  <div class="form-group">
+    <select class="selectpicker remove-example">
+      <option value="Mustard">Mustard</option>
+      <option value="Ketchup">Ketchup</option>
+      <option value="Relish">Relish</option>
+    </select>
+  </div>
+
+  <button class="btn btn-warning rm-mustard">Remove Mustard</button>
+  <button class="btn btn-danger rm-ketchup">Remove Ketchup</button>
+  <button class="btn btn-success rm-relish">Remove Relish</button>
+</div>
+
+```html
+<select class="selectpicker remove-example">
+  <option value="Mustard">Mustard</option>
+  <option value="Ketchup">Ketchup</option>
+  <option value="Relish">Relish</option>
+</select>
+
+<button class="btn btn-warning rm-mustard">Remove Mustard</button>
+<button class="btn btn-danger rm-ketchup">Remove Ketchup</button>
+<button class="btn btn-success rm-relish">Remove Relish</button>
+```
+```js
+$('.rm-mustard').click(function () {
+  $('.remove-example').find('[value=Mustard]').remove();
+  $('.remove-example').selectpicker('refresh');
+});
+```
+
+<div class="bs-docs-example">
+  <div class="form-group">
+    <select class="selectpicker disable-example">
+      <option value="Mustard">Mustard</option>
+      <option value="Ketchup">Ketchup</option>
+      <option value="Relish">Relish</option>
+    </select>
+  </div>
+
+  <button class="btn btn-default ex-disable"><i class="icon-remove"></i> Disable</button>
+  <button class="btn btn-default ex-enable"><i class="icon-ok"></i> Enable</button>
+</div>
+
+```js
+$('.ex-disable').click(function () {
+  $('.disable-example').prop('disabled', true);
+  $('.disable-example').selectpicker('refresh');
+});
+
+$('.ex-enable').click(function () {
+  $('.disable-example').prop('disabled', false);
+  $('.disable-example').selectpicker('refresh');
+});
+```
+
+<script type="text/javascript">
+  window.onload = function () {
+    var $re = $('.remove-example'),
+        $de = $('.disable-example');
+
+    $('.rm-mustard').click(function () {
+      $re.find('[value=Mustard]').remove();
+      $re.selectpicker('refresh');
+    });
+    $('.rm-ketchup').click(function () {
+      $re.find('[value=Ketchup]').remove();
+      $re.selectpicker('refresh');
+    });
+    $('.rm-relish').click(function () {
+      $re.find('[value=Relish]').remove();
+      $re.selectpicker('refresh');
+    });
+    $('.ex-disable').click(function () {
+      $de.prop('disabled', true);
+      $de.selectpicker('refresh');
+    });
+    $('.ex-enable').click(function () {
+      $de.prop('disabled', false);
+      $de.selectpicker('refresh');
+    });
+  };
+</script>
+
+---
+
+## hide()
+
+To programmatically hide the bootstrap-select use the `hide` method.
+
+```js
+$('.selectpicker').selectpicker('hide');
+```
+
+---
+
+## show()
+
+To programmatically show the bootstrap-select use the `show` method.
+
+```js
+$('.selectpicker').selectpicker('show');
+```
+
+---
+
+## destroy()
+
+To programmatically destroy the bootstrap-select, use the `destroy` method.
+
+```js
+$('.selectpicker').selectpicker('destroy');
+```

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/options.md
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/options.md	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/docs/options.md	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,197 @@
+# Options
+
+Configure bootstrap-select.
+
+---
+
+Options can be passed via data attributes or JavaScript. For data attributes, append the option name to `data-`, as in 
+`data-style=""` or `data-selected-text-format="count"`.
+
+<table class="table table-bordered table-striped">
+  <thead>
+  <tr>
+    <th style="width: 15%;">Name</th>
+    <th style="width: 32%;">Type</th>
+    <th style="width: 10%;">Default</th>
+    <th style="width: 43%;">Description</th>
+  </tr>
+  </thead>
+  <tbody>
+  <tr>
+    <td>actionsBox</td>
+    <td>boolean</td>
+    <td><code>false</code></td>
+    <td>
+      <p>When set to <code>true</code>, adds two buttons to the top of the dropdown menu (<strong>Select All</strong> & <strong>Deselect All</strong>).</p>
+    </td>
+  </tr>
+  <tr>
+    <td>container</td>
+    <td>string | false</td>
+    <td><code>false</code></td>
+    <td>
+        <p>When set to a string, appends the select to a specific element or selector, e.g., 
+        <code>container: 'body' | '.main-body'</code></p>
+    </td>
+  </tr>
+  <tr>
+    <td>countSelectedText</td>
+    <td>string | function</td>
+    <td><code>function</code></td>
+    <td>
+      <p>Sets the format for the text displayed when selectedTextFormat is <code>count</code> or <code>count > 
+      #</code>. {0} is the selected amount. {1} is total available for selection.</p>
+      <p>When set to a function, the first parameter is the number of selected options, and the second is the total number of 
+      options. The function must return a string.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>dropupAuto</td>
+    <td>boolean</td>
+    <td><code>true</code></td>
+    <td>
+      <p>checks to see which has more room, above or below. If the dropup has enough room to fully open normally, but
+      there is more room above, the dropup still opens normally. Otherwise, it becomes a dropup. If dropupAuto is
+      set to false, dropups must be called manually.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>header</td>
+    <td>string</td>
+    <td><code>false</code></td>
+    <td>
+      <p>adds a header to the top of the menu; includes a close button by default</p>
+    </td>
+  </tr>
+  <tr>
+    <td>hideDisabled</td>
+    <td>boolean</td>
+    <td><code>false</code></td>
+    <td>
+      <p>removes disabled options and optgroups from the menu <code>data-hide-disabled: true</code></p>
+    </td>
+  </tr>
+  <tr>
+    <td>liveSearch</td>
+    <td>boolean</td>
+    <td><code>false</code></td>
+    <td>
+      <p>When set to <code>true</code>, adds a search box to the top of the selectpicker dropdown.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>maxOptions</td>
+    <td>integer | false</td>
+    <td><code>false</code></td>
+    <td>
+      <p>When set to an integer and in a multi-select, the number of selected options cannot exceed the given value.</p>
+      <p>This option can also exist as a data-attribute for an <code><optgroup></code>, in which case it only 
+      applies to that <code><optgroup></code>.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>mobile</td>
+    <td>boolean</td>
+    <td><code>false</code></td>
+    <td>
+      <p>When set to <code>true</code>, enables the device's native menu for select menus.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>multipleSeparator</td>
+    <td>string</td>
+    <td><code>', '</code></td>
+    <td>
+      <p>Set the character displayed in the button that separates selected options.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>noneSelectedText</td>
+    <td>string</td>
+    <td><code>'Nothing selected'</code></td>
+    <td>
+      <p>The text that is displayed when a multiple select has no selected options.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>selectedTextFormat</td>
+    <td><code>'values'</code> | <code>'static'</code> | <code>'count'</code> | <code>'count > x'</code> (where x is an integer)</td>
+    <td><code>'values'</code></td>
+    <td>
+      <p>Specifies how the selection is displayed with a multiple select.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>selectOnTab</td>
+    <td>boolean</td>
+    <td><code>false</code></td>
+    <td>
+      <p>When set to <code>true</code>, treats the tab character like the enter or space characters within the 
+      selectpicker dropdown.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>showSubtext</td>
+    <td>boolean</td>
+    <td><code>false</code></td>
+    <td>
+      <p>When set to <code>true</code>, display subtext associated with a selected option in the button.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>showIcon</td>
+    <td>boolean</td>
+    <td><code>true</code></td>
+    <td>
+      <p>When set to <code>true</code>, display icon(s) associated with selected option(s) in the button.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>showContent</td>
+    <td>boolean</td>
+    <td><code>true</code></td>
+    <td>
+      <p>When set to <code>true</code>, display custom HTML associated with selected option(s) in the button. When set 
+       to <code>false</code>, the option value will be displayed instead.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>size</td>
+    <td><code>'auto'</code> | integer | false</td>
+    <td><code>'auto'</code></td>
+    <td>
+      <p>When set to <code>'auto'</code>, the menu always opens up to show as many items as the window will allow
+      without being cut off.</p>
+      <p>When set to an integer, the menu will show the given number of items, even if the dropdown is cut off.</p>
+      <p>When set to <code>false</code>, the menu will always show all items.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>style</td>
+    <td>string | null</td>
+    <td><code>null</code></td>
+    <td>
+      <p>When set to a string, add the value to the button's style.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>title</td>
+    <td>string | null</td>
+    <td><code>null</code></td>
+    <td>
+      <p>The default title for the selectpicker.</p>
+    </td>
+  </tr>
+  <tr>
+    <td>width</td>
+    <td><code>'auto'</code> | <code>'fit'</code> | css-width | false (where <code>css-width</code> is a CSS width with units, e.g. <code>100px</code>)</td>
+    <td><code>false</code></td>
+    <td>
+      <p>When set to <code>auto</code>, the width of the selectpicker is automatically adjusted to accommodate the 
+      widest option.</p>
+      <p>When set to a css-width, the width of the selectpicker is forced inline to the given value.</p>
+      <p>When set to <code>false</code>, all width information is removed.</p>
+    </td>
+  </tr>
+  </tbody>
+</table>

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/mkdocs.yml
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/mkdocs.yml	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/docs/mkdocs.yml	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+site_name: bootstrap-select
+site_description: Bootstrap-select is a jQuery plugin that utilizes Bootstrap's dropdown.js to style and bring additional functionality to normal select boxes.
+repo_url: https://github.com/silviomoreto/bootstrap-select
+theme: bootstrap
+theme_dir: custom_theme
+extra_css:
+- css/custom.css
+pages:
+- Bootstrap-select: index.md
+- Examples: examples.md
+- Options: options.md
+- Methods: methods.md
+extra:
+    version: 1.8.1

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/.jshintrc
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/.jshintrc	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/.jshintrc	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+{
+  "curly": true,
+  "eqeqeq": true,
+  "immed": true,
+  "latedef": true,
+  "newcap": true,
+  "noarg": true,
+  "sub": true,
+  "undef": true,
+  "unused": true,
+  "boss": true,
+  "eqnull": true,
+  "browser": true,
+  "jquery": true
+}

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/bootstrap-select.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/bootstrap-select.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/bootstrap-select.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,1684 @@
+(function ($) {
+  'use strict';
+
+  //<editor-fold desc="Shims">
+  if (!String.prototype.includes) {
+    (function () {
+      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+      var toString = {}.toString;
+      var defineProperty = (function () {
+        // IE 8 only supports `Object.defineProperty` on DOM elements
+        try {
+          var object = {};
+          var $defineProperty = Object.defineProperty;
+          var result = $defineProperty(object, object, object) && $defineProperty;
+        } catch (error) {
+        }
+        return result;
+      }());
+      var indexOf = ''.indexOf;
+      var includes = function (search) {
+        if (this == null) {
+          throw new TypeError();
+        }
+        var string = String(this);
+        if (search && toString.call(search) == '[object RegExp]') {
+          throw new TypeError();
+        }
+        var stringLength = string.length;
+        var searchString = String(search);
+        var searchLength = searchString.length;
+        var position = arguments.length > 1 ? arguments[1] : undefined;
+        // `ToInteger`
+        var pos = position ? Number(position) : 0;
+        if (pos != pos) { // better `isNaN`
+          pos = 0;
+        }
+        var start = Math.min(Math.max(pos, 0), stringLength);
+        // Avoid the `indexOf` call if no match is possible
+        if (searchLength + start > stringLength) {
+          return false;
+        }
+        return indexOf.call(string, searchString, pos) != -1;
+      };
+      if (defineProperty) {
+        defineProperty(String.prototype, 'includes', {
+          'value': includes,
+          'configurable': true,
+          'writable': true
+        });
+      } else {
+        String.prototype.includes = includes;
+      }
+    }());
+  }
+
+  if (!String.prototype.startsWith) {
+    (function () {
+      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+      var defineProperty = (function () {
+        // IE 8 only supports `Object.defineProperty` on DOM elements
+        try {
+          var object = {};
+          var $defineProperty = Object.defineProperty;
+          var result = $defineProperty(object, object, object) && $defineProperty;
+        } catch (error) {
+        }
+        return result;
+      }());
+      var toString = {}.toString;
+      var startsWith = function (search) {
+        if (this == null) {
+          throw new TypeError();
+        }
+        var string = String(this);
+        if (search && toString.call(search) == '[object RegExp]') {
+          throw new TypeError();
+        }
+        var stringLength = string.length;
+        var searchString = String(search);
+        var searchLength = searchString.length;
+        var position = arguments.length > 1 ? arguments[1] : undefined;
+        // `ToInteger`
+        var pos = position ? Number(position) : 0;
+        if (pos != pos) { // better `isNaN`
+          pos = 0;
+        }
+        var start = Math.min(Math.max(pos, 0), stringLength);
+        // Avoid the `indexOf` call if no match is possible
+        if (searchLength + start > stringLength) {
+          return false;
+        }
+        var index = -1;
+        while (++index < searchLength) {
+          if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
+            return false;
+          }
+        }
+        return true;
+      };
+      if (defineProperty) {
+        defineProperty(String.prototype, 'startsWith', {
+          'value': startsWith,
+          'configurable': true,
+          'writable': true
+        });
+      } else {
+        String.prototype.startsWith = startsWith;
+      }
+    }());
+  }
+
+  if (!Object.keys) {
+    Object.keys = function (
+      o, // object
+      k, // key
+      r  // result array
+      ){
+      // initialize object and result
+      r=[];
+      // iterate over object keys
+      for (k in o)
+          // fill result array with non-prototypical keys
+        r.hasOwnProperty.call(o, k) && r.push(k);
+      // return result
+      return r;
+    };
+  }
+
+  $.fn.triggerNative = function (eventName) {
+    var el = this[0],
+        event;
+
+    if (el.dispatchEvent) {
+      if (typeof Event === 'function') {
+        // For modern browsers
+        event = new Event(eventName, {
+          bubbles: true
+        });
+      } else {
+        // For IE since it doesn't support Event constructor
+        event = document.createEvent('Event');
+        event.initEvent(eventName, true, false);
+      }
+
+      el.dispatchEvent(event);
+    } else {
+      if (el.fireEvent) {
+        event = document.createEventObject();
+        event.eventType = eventName;
+        el.fireEvent('on' + eventName, event);
+      }
+
+      this.trigger(eventName);
+    }
+  };
+  //</editor-fold>
+
+  // Case insensitive contains search
+  $.expr[':'].icontains = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
+    return haystack.includes(meta[3].toUpperCase());
+  };
+
+  // Case insensitive begins search
+  $.expr[':'].ibegins = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
+    return haystack.startsWith(meta[3].toUpperCase());
+  };
+
+  // Case and accent insensitive contains search
+  $.expr[':'].aicontains = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
+    return haystack.includes(meta[3].toUpperCase());
+  };
+
+  // Case and accent insensitive begins search
+  $.expr[':'].aibegins = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
+    return haystack.startsWith(meta[3].toUpperCase());
+  };
+
+  /**
+   * Remove all diatrics from the given text.
+   * @access private
+   * @param {String} text
+   * @returns {String}
+   */
+  function normalizeToBase(text) {
+    var rExps = [
+      {re: /[\xC0-\xC6]/g, ch: "A"},
+      {re: /[\xE0-\xE6]/g, ch: "a"},
+      {re: /[\xC8-\xCB]/g, ch: "E"},
+      {re: /[\xE8-\xEB]/g, ch: "e"},
+      {re: /[\xCC-\xCF]/g, ch: "I"},
+      {re: /[\xEC-\xEF]/g, ch: "i"},
+      {re: /[\xD2-\xD6]/g, ch: "O"},
+      {re: /[\xF2-\xF6]/g, ch: "o"},
+      {re: /[\xD9-\xDC]/g, ch: "U"},
+      {re: /[\xF9-\xFC]/g, ch: "u"},
+      {re: /[\xC7-\xE7]/g, ch: "c"},
+      {re: /[\xD1]/g, ch: "N"},
+      {re: /[\xF1]/g, ch: "n"}
+    ];
+    $.each(rExps, function () {
+      text = text.replace(this.re, this.ch);
+    });
+    return text;
+  }
+
+
+  function htmlEscape(html) {
+    var escapeMap = {
+      '&': '&',
+      '<': '<',
+      '>': '>',
+      '"': '"',
+      "'": '&#x27;',
+      '`': '&#x60;'
+    };
+    var source = '(?:' + Object.keys(escapeMap).join('|') + ')',
+        testRegexp = new RegExp(source),
+        replaceRegexp = new RegExp(source, 'g'),
+        string = html == null ? '' : '' + html;
+    return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) {
+      return escapeMap[match];
+    }) : string;
+  }
+
+  var Selectpicker = function (element, options, e) {
+    if (e) {
+      e.stopPropagation();
+      e.preventDefault();
+    }
+
+    this.$element = $(element);
+    this.$newElement = null;
+    this.$button = null;
+    this.$menu = null;
+    this.$lis = null;
+    this.options = options;
+
+    // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a
+    // data-attribute)
+    if (this.options.title === null) {
+      this.options.title = this.$element.attr('title');
+    }
+
+    //Expose public methods
+    this.val = Selectpicker.prototype.val;
+    this.render = Selectpicker.prototype.render;
+    this.refresh = Selectpicker.prototype.refresh;
+    this.setStyle = Selectpicker.prototype.setStyle;
+    this.selectAll = Selectpicker.prototype.selectAll;
+    this.deselectAll = Selectpicker.prototype.deselectAll;
+    this.destroy = Selectpicker.prototype.destroy;
+    this.remove = Selectpicker.prototype.remove;
+    this.show = Selectpicker.prototype.show;
+    this.hide = Selectpicker.prototype.hide;
+
+    this.init();
+  };
+
+  Selectpicker.VERSION = '1.9.3';
+
+  // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.
+  Selectpicker.DEFAULTS = {
+    noneSelectedText: 'Nothing selected',
+    noneResultsText: 'No results matched {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
+        (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
+      ];
+    },
+    selectAllText: 'Select All',
+    deselectAllText: 'Deselect All',
+    doneButton: false,
+    doneButtonText: 'Close',
+    multipleSeparator: ', ',
+    styleBase: 'btn',
+    style: 'btn-default',
+    size: 'auto',
+    title: null,
+    selectedTextFormat: 'values',
+    width: false,
+    container: false,
+    hideDisabled: false,
+    showSubtext: false,
+    showIcon: true,
+    showContent: true,
+    dropupAuto: true,
+    header: false,
+    liveSearch: false,
+    liveSearchPlaceholder: null,
+    liveSearchNormalize: false,
+    liveSearchStyle: 'contains',
+    actionsBox: false,
+    iconBase: 'glyphicon',
+    tickIcon: 'glyphicon-ok',
+    template: {
+      caret: '<span class="caret"></span>'
+    },
+    maxOptions: false,
+    mobile: false,
+    selectOnTab: false,
+    dropdownAlignRight: false
+  };
+
+  Selectpicker.prototype = {
+
+    constructor: Selectpicker,
+
+    init: function () {
+      var that = this,
+          id = this.$element.attr('id');
+
+      // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility
+      // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]')
+      this.liObj = {};
+      this.multiple = this.$element.prop('multiple');
+      this.autofocus = this.$element.prop('autofocus');
+      this.$newElement = this.createView();
+      this.$element
+        .after(this.$newElement)
+        .appendTo(this.$newElement);
+      this.$button = this.$newElement.children('button');
+      this.$menu = this.$newElement.children('.dropdown-menu');
+      this.$menuInner = this.$menu.children('.inner');
+      this.$searchbox = this.$menu.find('input');
+
+      if (this.options.dropdownAlignRight)
+        this.$menu.addClass('dropdown-menu-right');
+
+      if (typeof id !== 'undefined') {
+        this.$button.attr('data-id', id);
+        $('label[for="' + id + '"]').click(function (e) {
+          e.preventDefault();
+          that.$button.focus();
+        });
+      }
+
+      this.checkDisabled();
+      this.clickListener();
+      if (this.options.liveSearch) this.liveSearchListener();
+      this.render();
+      this.setStyle();
+      this.setWidth();
+      if (this.options.container) this.selectPosition();
+      this.$menu.data('this', this);
+      this.$newElement.data('this', this);
+      if (this.options.mobile) this.mobile();
+
+      this.$newElement.on({
+        'hide.bs.dropdown': function (e) {
+          that.$element.trigger('hide.bs.select', e);
+        },
+        'hidden.bs.dropdown': function (e) {
+          that.$element.trigger('hidden.bs.select', e);
+        },
+        'show.bs.dropdown': function (e) {
+          that.$element.trigger('show.bs.select', e);
+        },
+        'shown.bs.dropdown': function (e) {
+          that.$element.trigger('shown.bs.select', e);
+        }
+      });
+
+      if (that.$element[0].hasAttribute('required')) {
+        this.$element.on('invalid', function () {
+          that.$button
+            .addClass('bs-invalid')
+            .focus();
+          
+          that.$element.on({
+            'focus.bs.select': function () {
+              that.$button.focus();
+              that.$element.off('focus.bs.select');
+            },
+            'shown.bs.select': function () {
+              that.$element
+                .val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened
+                .off('shown.bs.select');
+            },
+            'rendered.bs.select': function () {
+              // if select is no longer invalid, remove the bs-invalid class
+              if (this.validity.valid) that.$button.removeClass('bs-invalid');
+              that.$element.off('rendered.bs.select');
+            }
+          });
+          
+        });
+      }
+
+      setTimeout(function () {
+        that.$element.trigger('loaded.bs.select');
+      });
+    },
+
+    createDropdown: function () {
+      // Options
+      // If we are multiple, then add the show-tick class by default
+      var multiple = this.multiple ? ' show-tick' : '',
+          inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '',
+          autofocus = this.autofocus ? ' autofocus' : '';
+      // Elements
+      var header = this.options.header ? '<div class="popover-title"><button type="button" class="close" aria-hidden="true">×</button>' + this.options.header + '</div>' : '';
+      var searchbox = this.options.liveSearch ?
+      '<div class="bs-searchbox">' +
+      '<input type="text" class="form-control" autocomplete="off"' +
+      (null === this.options.liveSearchPlaceholder ? '' : ' placeholder="' + htmlEscape(this.options.liveSearchPlaceholder) + '"') + '>' +
+      '</div>'
+          : '';
+      var actionsbox = this.multiple && this.options.actionsBox ?
+      '<div class="bs-actionsbox">' +
+      '<div class="btn-group btn-group-sm btn-block">' +
+      '<button type="button" class="actions-btn bs-select-all btn btn-default">' +
+      this.options.selectAllText +
+      '</button>' +
+      '<button type="button" class="actions-btn bs-deselect-all btn btn-default">' +
+      this.options.deselectAllText +
+      '</button>' +
+      '</div>' +
+      '</div>'
+          : '';
+      var donebutton = this.multiple && this.options.doneButton ?
+      '<div class="bs-donebutton">' +
+      '<div class="btn-group btn-block">' +
+      '<button type="button" class="btn btn-sm btn-default">' +
+      this.options.doneButtonText +
+      '</button>' +
+      '</div>' +
+      '</div>'
+          : '';
+      var drop =
+          '<div class="btn-group bootstrap-select' + multiple + inputGroup + '">' +
+          '<button type="button" class="' + this.options.styleBase + ' dropdown-toggle" data-toggle="dropdown"' + autofocus + '>' +
+          '<span class="filter-option pull-left"></span> ' +
+          '<span class="bs-caret">' +
+          this.options.template.caret +
+          '</span>' +
+          '</button>' +
+          '<div class="dropdown-menu open">' +
+          header +
+          searchbox +
+          actionsbox +
+          '<ul class="dropdown-menu inner" role="menu">' +
+          '</ul>' +
+          donebutton +
+          '</div>' +
+          '</div>';
+
+      return $(drop);
+    },
+
+    createView: function () {
+      var $drop = this.createDropdown(),
+          li = this.createLi();
+
+      $drop.find('ul')[0].innerHTML = li;
+      return $drop;
+    },
+
+    reloadLi: function () {
+      //Remove all children.
+      this.destroyLi();
+      //Re build
+      var li = this.createLi();
+      this.$menuInner[0].innerHTML = li;
+    },
+
+    destroyLi: function () {
+      this.$menu.find('li').remove();
+    },
+
+    createLi: function () {
+      var that = this,
+          _li = [],
+          optID = 0,
+          titleOption = document.createElement('option'),
+          liIndex = -1; // increment liIndex whenever a new <li> element is created to ensure liObj is correct
+
+      // Helper functions
+      /**
+       * @param content
+       * @param [index]
+       * @param [classes]
+       * @param [optgroup]
+       * @returns {string}
+       */
+      var generateLI = function (content, index, classes, optgroup) {
+        return '<li' +
+            ((typeof classes !== 'undefined' & '' !== classes) ? ' class="' + classes + '"' : '') +
+            ((typeof index !== 'undefined' & null !== index) ? ' data-original-index="' + index + '"' : '') +
+            ((typeof optgroup !== 'undefined' & null !== optgroup) ? 'data-optgroup="' + optgroup + '"' : '') +
+            '>' + content + '</li>';
+      };
+
+      /**
+       * @param text
+       * @param [classes]
+       * @param [inline]
+       * @param [tokens]
+       * @returns {string}
+       */
+      var generateA = function (text, classes, inline, tokens) {
+        return '<a tabindex="0"' +
+            (typeof classes !== 'undefined' ? ' class="' + classes + '"' : '') +
+            (typeof inline !== 'undefined' ? ' style="' + inline + '"' : '') +
+            (that.options.liveSearchNormalize ? ' data-normalized-text="' + normalizeToBase(htmlEscape(text)) + '"' : '') +
+            (typeof tokens !== 'undefined' || tokens !== null ? ' data-tokens="' + tokens + '"' : '') +
+            '>' + text +
+            '<span class="' + that.options.iconBase + ' ' + that.options.tickIcon + ' check-mark"></span>' +
+            '</a>';
+      };
+
+      if (this.options.title && !this.multiple) {
+        // this option doesn't create a new <li> element, but does add a new option, so liIndex is decreased
+        // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended
+        liIndex--;
+
+        if (!this.$element.find('.bs-title-option').length) {
+          // Use native JS to prepend option (faster)
+          var element = this.$element[0];
+          titleOption.className = 'bs-title-option';
+          titleOption.appendChild(document.createTextNode(this.options.title));
+          titleOption.value = '';
+          element.insertBefore(titleOption, element.firstChild);
+          // Check if selected attribute is already set on an option. If not, select the titleOption option.
+          if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true;
+        }
+      }
+
+      this.$element.find('option').each(function (index) {
+        var $this = $(this);
+
+        liIndex++;
+
+        if ($this.hasClass('bs-title-option')) return;
+
+        // Get the class and text for the option
+        var optionClass = this.className || '',
+            inline = this.style.cssText,
+            text = $this.data('content') ? $this.data('content') : $this.html(),
+            tokens = $this.data('tokens') ? $this.data('tokens') : null,
+            subtext = typeof $this.data('subtext') !== 'undefined' ? '<small class="text-muted">' + $this.data('subtext') + '</small>' : '',
+            icon = typeof $this.data('icon') !== 'undefined' ? '<span class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></span> ' : '',
+            isDisabled = this.disabled || (this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled);
+
+        if (icon !== '' && isDisabled) {
+          icon = '<span>' + icon + '</span>';
+        }
+
+        if (that.options.hideDisabled && isDisabled) {
+          liIndex--;
+          return;
+        }
+
+        if (!$this.data('content')) {
+          // Prepend any icon and append any subtext to the main text.
+          text = icon + '<span class="text">' + text + subtext + '</span>';
+        }
+
+        if (this.parentNode.tagName === 'OPTGROUP' && $this.data('divider') !== true) {
+          var optGroupClass = ' ' + this.parentNode.className || '';
+
+          if ($this.index() === 0) { // Is it the first option of the optgroup?
+            optID += 1;
+
+            // Get the opt group label
+            var label = this.parentNode.label,
+                labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '<small class="text-muted">' + $this.parent().data('subtext') + '</small>' : '',
+                labelIcon = $this.parent().data('icon') ? '<span class="' + that.options.iconBase + ' ' + $this.parent().data('icon') + '"></span> ' : '';
+
+            label = labelIcon + '<span class="text">' + label + labelSubtext + '</span>';
+
+            if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown?
+              liIndex++;
+              _li.push(generateLI('', null, 'divider', optID + 'div'));
+            }
+            liIndex++;
+            _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID));
+          }
+          _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID));
+        } else if ($this.data('divider') === true) {
+          _li.push(generateLI('', index, 'divider'));
+        } else if ($this.data('hidden') === true) {
+          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));
+        } else {
+          if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') {
+            liIndex++;
+            _li.push(generateLI('', null, 'divider', optID + 'div'));
+          }
+          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index));
+        }
+
+        that.liObj[index] = liIndex;
+      });
+
+      //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button
+      if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {
+        this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');
+      }
+
+      return _li.join('');
+    },
+
+    findLis: function () {
+      if (this.$lis == null) this.$lis = this.$menu.find('li');
+      return this.$lis;
+    },
+
+    /**
+     * @param [updateLi] defaults to true
+     */
+    render: function (updateLi) {
+      var that = this,
+          notDisabled;
+
+      //Update the LI to match the SELECT
+      if (updateLi !== false) {
+        this.$element.find('option').each(function (index) {
+          var $lis = that.findLis().eq(that.liObj[index]);
+
+          that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis);
+          that.setSelected(index, this.selected, $lis);
+        });
+      }
+
+      this.tabIndex();
+
+      var selectedItems = this.$element.find('option').map(function () {
+        if (this.selected) {
+          if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return;
+
+          var $this = $(this),
+              icon = $this.data('icon') && that.options.showIcon ? '<i class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></i> ' : '',
+              subtext;
+
+          if (that.options.showSubtext && $this.data('subtext') && !that.multiple) {
+            subtext = ' <small class="text-muted">' + $this.data('subtext') + '</small>';
+          } else {
+            subtext = '';
+          }
+          if (typeof $this.attr('title') !== 'undefined') {
+            return $this.attr('title');
+          } else if ($this.data('content') && that.options.showContent) {
+            return $this.data('content');
+          } else {
+            return icon + $this.html() + subtext;
+          }
+        }
+      }).toArray();
+
+      //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled
+      //Convert all the values into a comma delimited string
+      var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);
+
+      //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..
+      if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {
+        var max = this.options.selectedTextFormat.split('>');
+        if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {
+          notDisabled = this.options.hideDisabled ? ', [disabled]' : '';
+          var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length,
+              tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;
+          title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());
+        }
+      }
+
+      if (this.options.title == undefined) {
+        this.options.title = this.$element.attr('title');
+      }
+
+      if (this.options.selectedTextFormat == 'static') {
+        title = this.options.title;
+      }
+
+      //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text
+      if (!title) {
+        title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;
+      }
+
+      //strip all html-tags and trim the result
+      this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, '')));
+      this.$button.children('.filter-option').html(title);
+
+      this.$element.trigger('rendered.bs.select');
+    },
+
+    /**
+     * @param [style]
+     * @param [status]
+     */
+    setStyle: function (style, status) {
+      if (this.$element.attr('class')) {
+        this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, ''));
+      }
+
+      var buttonClass = style ? style : this.options.style;
+
+      if (status == 'add') {
+        this.$button.addClass(buttonClass);
+      } else if (status == 'remove') {
+        this.$button.removeClass(buttonClass);
+      } else {
+        this.$button.removeClass(this.options.style);
+        this.$button.addClass(buttonClass);
+      }
+    },
+
+    liHeight: function (refresh) {
+      if (!refresh && (this.options.size === false || this.sizeInfo)) return;
+
+      var newElement = document.createElement('div'),
+          menu = document.createElement('div'),
+          menuInner = document.createElement('ul'),
+          divider = document.createElement('li'),
+          li = document.createElement('li'),
+          a = document.createElement('a'),
+          text = document.createElement('span'),
+          header = this.options.header && this.$menu.find('.popover-title').length > 0 ? this.$menu.find('.popover-title')[0].cloneNode(true) : null,
+          search = this.options.liveSearch ? document.createElement('div') : null,
+          actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
+          doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null;
+
+      text.className = 'text';
+      newElement.className = this.$menu[0].parentNode.className + ' open';
+      menu.className = 'dropdown-menu open';
+      menuInner.className = 'dropdown-menu inner';
+      divider.className = 'divider';
+
+      text.appendChild(document.createTextNode('Inner text'));
+      a.appendChild(text);
+      li.appendChild(a);
+      menuInner.appendChild(li);
+      menuInner.appendChild(divider);
+      if (header) menu.appendChild(header);
+      if (search) {
+        // create a span instead of input as creating an input element is slower
+        var input = document.createElement('span');
+        search.className = 'bs-searchbox';
+        input.className = 'form-control';
+        search.appendChild(input);
+        menu.appendChild(search);
+      }
+      if (actions) menu.appendChild(actions);
+      menu.appendChild(menuInner);
+      if (doneButton) menu.appendChild(doneButton);
+      newElement.appendChild(menu);
+
+      document.body.appendChild(newElement);
+
+      var liHeight = a.offsetHeight,
+          headerHeight = header ? header.offsetHeight : 0,
+          searchHeight = search ? search.offsetHeight : 0,
+          actionsHeight = actions ? actions.offsetHeight : 0,
+          doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,
+          dividerHeight = $(divider).outerHeight(true),
+          // fall back to jQuery if getComputedStyle is not supported
+          menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false,
+          $menu = menuStyle ? null : $(menu),
+          menuPadding = parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +
+                        parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +
+                        parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +
+                        parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),
+          menuExtras =  menuPadding +
+                        parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +
+                        parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2;
+
+      document.body.removeChild(newElement);
+
+      this.sizeInfo = {
+        liHeight: liHeight,
+        headerHeight: headerHeight,
+        searchHeight: searchHeight,
+        actionsHeight: actionsHeight,
+        doneButtonHeight: doneButtonHeight,
+        dividerHeight: dividerHeight,
+        menuPadding: menuPadding,
+        menuExtras: menuExtras
+      };
+    },
+
+    setSize: function () {
+      this.findLis();
+      this.liHeight();
+
+      if (this.options.header) this.$menu.css('padding-top', 0);
+      if (this.options.size === false) return;
+
+      var that = this,
+          $menu = this.$menu,
+          $menuInner = this.$menuInner,
+          $window = $(window),
+          selectHeight = this.$newElement[0].offsetHeight,
+          liHeight = this.sizeInfo['liHeight'],
+          headerHeight = this.sizeInfo['headerHeight'],
+          searchHeight = this.sizeInfo['searchHeight'],
+          actionsHeight = this.sizeInfo['actionsHeight'],
+          doneButtonHeight = this.sizeInfo['doneButtonHeight'],
+          divHeight = this.sizeInfo['dividerHeight'],
+          menuPadding = this.sizeInfo['menuPadding'],
+          menuExtras = this.sizeInfo['menuExtras'],
+          notDisabled = this.options.hideDisabled ? '.disabled' : '',
+          menuHeight,
+          getHeight,
+          selectOffsetTop,
+          selectOffsetBot,
+          posVert = function () {
+            selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();
+            selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;
+          };
+
+      posVert();
+
+      if (this.options.size === 'auto') {
+        var getSize = function () {
+          var minHeight,
+              hasClass = function (className, include) {
+                return function (element) {
+                    if (include) {
+                        return (element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+                    } else {
+                        return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+                    }
+                };
+              },
+              lis = that.$menuInner[0].getElementsByTagName('li'),
+              lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'),
+              optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header');
+
+          posVert();
+          menuHeight = selectOffsetBot - menuExtras;
+
+          if (that.options.container) {
+            if (!$menu.data('height')) $menu.data('height', $menu.height());
+            getHeight = $menu.data('height');
+          } else {
+            getHeight = $menu.height();
+          }
+
+          if (that.options.dropupAuto) {
+            that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
+          }
+          if (that.$newElement.hasClass('dropup')) {
+            menuHeight = selectOffsetTop - menuExtras;
+          }
+
+          if ((lisVisible.length + optGroup.length) > 3) {
+            minHeight = liHeight * 3 + menuExtras - 2;
+          } else {
+            minHeight = 0;
+          }
+
+          $menu.css({
+            'max-height': menuHeight + 'px',
+            'overflow': 'hidden',
+            'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px'
+          });
+          $menuInner.css({
+            'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding + 'px',
+            'overflow-y': 'auto',
+            'min-height': Math.max(minHeight - menuPadding, 0) + 'px'
+          });
+        };
+        getSize();
+        this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);
+        $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize);
+      } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) {
+        var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(),
+            divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;
+        menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding;
+
+        if (that.options.container) {
+          if (!$menu.data('height')) $menu.data('height', $menu.height());
+          getHeight = $menu.data('height');
+        } else {
+          getHeight = $menu.height();
+        }
+
+        if (that.options.dropupAuto) {
+          //noinspection JSUnusedAssignment
+          this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
+        }
+        $menu.css({
+          'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',
+          'overflow': 'hidden',
+          'min-height': ''
+        });
+        $menuInner.css({
+          'max-height': menuHeight - menuPadding + 'px',
+          'overflow-y': 'auto',
+          'min-height': ''
+        });
+      }
+    },
+
+    setWidth: function () {
+      if (this.options.width === 'auto') {
+        this.$menu.css('min-width', '0');
+
+        // Get correct width if element is hidden
+        var $selectClone = this.$menu.parent().clone().appendTo('body'),
+            $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone,
+            ulWidth = $selectClone.children('.dropdown-menu').outerWidth(),
+            btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth();
+
+        $selectClone.remove();
+        $selectClone2.remove();
+
+        // Set width to whatever's larger, button title or longest option
+        this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px');
+      } else if (this.options.width === 'fit') {
+        // Remove inline min-width so width can be changed from 'auto'
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', '').addClass('fit-width');
+      } else if (this.options.width) {
+        // Remove inline min-width so width can be changed from 'auto'
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', this.options.width);
+      } else {
+        // Remove inline min-width/width so width can be changed
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', '');
+      }
+      // Remove fit-width class if width is changed programmatically
+      if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {
+        this.$newElement.removeClass('fit-width');
+      }
+    },
+
+    selectPosition: function () {
+      this.$bsContainer = $('<div class="bs-container" />');
+
+      var that = this,
+          pos,
+          actualHeight,
+          getPlacement = function ($element) {
+            that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));
+            pos = $element.offset();
+            actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;
+            that.$bsContainer.css({
+              'top': pos.top + actualHeight,
+              'left': pos.left,
+              'width': $element[0].offsetWidth
+            });
+          };
+
+      this.$button.on('click', function () {
+        var $this = $(this);
+
+        if (that.isDisabled()) {
+          return;
+        }
+
+        getPlacement(that.$newElement);
+
+        that.$bsContainer
+          .appendTo(that.options.container)
+          .toggleClass('open', !$this.hasClass('open'))
+          .append(that.$menu);
+      });
+
+      $(window).on('resize scroll', function () {
+        getPlacement(that.$newElement);
+      });
+
+      this.$element.on('hide.bs.select', function () {
+        that.$menu.data('height', that.$menu.height());
+        that.$bsContainer.detach();
+      });
+    },
+
+    setSelected: function (index, selected, $lis) {
+      if (!$lis) {
+        $lis = this.findLis().eq(this.liObj[index]);
+      }
+
+      $lis.toggleClass('selected', selected);
+    },
+
+    setDisabled: function (index, disabled, $lis) {
+      if (!$lis) {
+        $lis = this.findLis().eq(this.liObj[index]);
+      }
+
+      if (disabled) {
+        $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1);
+      } else {
+        $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0);
+      }
+    },
+
+    isDisabled: function () {
+      return this.$element[0].disabled;
+    },
+
+    checkDisabled: function () {
+      var that = this;
+
+      if (this.isDisabled()) {
+        this.$newElement.addClass('disabled');
+        this.$button.addClass('disabled').attr('tabindex', -1);
+      } else {
+        if (this.$button.hasClass('disabled')) {
+          this.$newElement.removeClass('disabled');
+          this.$button.removeClass('disabled');
+        }
+
+        if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {
+          this.$button.removeAttr('tabindex');
+        }
+      }
+
+      this.$button.click(function () {
+        return !that.isDisabled();
+      });
+    },
+
+    tabIndex: function () {
+      if (this.$element.data('tabindex') !== this.$element.attr('tabindex') && 
+        (this.$element.attr('tabindex') !== -98 && this.$element.attr('tabindex') !== '-98')) {
+        this.$element.data('tabindex', this.$element.attr('tabindex'));
+        this.$button.attr('tabindex', this.$element.data('tabindex'));
+      }
+      
+      this.$element.attr('tabindex', -98);
+    },
+
+    clickListener: function () {
+      var that = this,
+          $document = $(document);
+
+      this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) {
+        e.stopPropagation();
+      });
+
+      $document.data('spaceSelect', false);
+
+      this.$button.on('keyup', function (e) {
+        if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {
+            e.preventDefault();
+            $document.data('spaceSelect', false);
+        }
+      });
+
+      this.$button.on('click', function () {
+        that.setSize();
+        that.$element.on('shown.bs.select', function () {
+          if (!that.options.liveSearch && !that.multiple) {
+            that.$menuInner.find('.selected a').focus();
+          } else if (!that.multiple) {
+            var selectedIndex = that.liObj[that.$element[0].selectedIndex];
+
+            if (typeof selectedIndex !== 'number' || that.options.size === false) return;
+
+            // scroll to selected option
+            var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop;
+            offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2;
+            that.$menuInner[0].scrollTop = offset;
+          }
+        });
+      });
+
+      this.$menuInner.on('click', 'li a', function (e) {
+        var $this = $(this),
+            clickedIndex = $this.parent().data('originalIndex'),
+            prevValue = that.$element.val(),
+            prevIndex = that.$element.prop('selectedIndex');
+
+        // Don't close on multi choice menu
+        if (that.multiple) {
+          e.stopPropagation();
+        }
+
+        e.preventDefault();
+
+        //Don't run if we have been disabled
+        if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {
+          var $options = that.$element.find('option'),
+              $option = $options.eq(clickedIndex),
+              state = $option.prop('selected'),
+              $optgroup = $option.parent('optgroup'),
+              maxOptions = that.options.maxOptions,
+              maxOptionsGrp = $optgroup.data('maxOptions') || false;
+
+          if (!that.multiple) { // Deselect all others if not multi select box
+            $options.prop('selected', false);
+            $option.prop('selected', true);
+            that.$menuInner.find('.selected').removeClass('selected');
+            that.setSelected(clickedIndex, true);
+          } else { // Toggle the one we have chosen if we are multi select.
+            $option.prop('selected', !state);
+            that.setSelected(clickedIndex, !state);
+            $this.blur();
+
+            if (maxOptions !== false || maxOptionsGrp !== false) {
+              var maxReached = maxOptions < $options.filter(':selected').length,
+                  maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;
+
+              if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {
+                if (maxOptions && maxOptions == 1) {
+                  $options.prop('selected', false);
+                  $option.prop('selected', true);
+                  that.$menuInner.find('.selected').removeClass('selected');
+                  that.setSelected(clickedIndex, true);
+                } else if (maxOptionsGrp && maxOptionsGrp == 1) {
+                  $optgroup.find('option:selected').prop('selected', false);
+                  $option.prop('selected', true);
+                  var optgroupID = $this.parent().data('optgroup');
+                  that.$menuInner.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected');
+                  that.setSelected(clickedIndex, true);
+                } else {
+                  var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ?
+                          that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.maxOptionsText,
+                      maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),
+                      maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),
+                      $notify = $('<div class="notify"></div>');
+                  // If {var} is set in array, replace it
+                  /** @deprecated */
+                  if (maxOptionsArr[2]) {
+                    maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);
+                    maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);
+                  }
+
+                  $option.prop('selected', false);
+
+                  that.$menu.append($notify);
+
+                  if (maxOptions && maxReached) {
+                    $notify.append($('<div>' + maxTxt + '</div>'));
+                    that.$element.trigger('maxReached.bs.select');
+                  }
+
+                  if (maxOptionsGrp && maxReachedGrp) {
+                    $notify.append($('<div>' + maxTxtGrp + '</div>'));
+                    that.$element.trigger('maxReachedGrp.bs.select');
+                  }
+
+                  setTimeout(function () {
+                    that.setSelected(clickedIndex, false);
+                  }, 10);
+
+                  $notify.delay(750).fadeOut(300, function () {
+                    $(this).remove();
+                  });
+                }
+              }
+            }
+          }
+
+          if (!that.multiple) {
+            that.$button.focus();
+          } else if (that.options.liveSearch) {
+            that.$searchbox.focus();
+          }
+
+          // Trigger select 'change'
+          if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {
+            that.$element.triggerNative('change');
+            // $option.prop('selected') is current option state (selected/unselected). state is previous option state.
+            that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]);
+          }
+        }
+      });
+
+      this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) {
+        if (e.currentTarget == this) {
+          e.preventDefault();
+          e.stopPropagation();
+          if (that.options.liveSearch && !$(e.target).hasClass('close')) {
+            that.$searchbox.focus();
+          } else {
+            that.$button.focus();
+          }
+        }
+      });
+
+      this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {
+        e.preventDefault();
+        e.stopPropagation();
+        if (that.options.liveSearch) {
+          that.$searchbox.focus();
+        } else {
+          that.$button.focus();
+        }
+      });
+
+      this.$menu.on('click', '.popover-title .close', function () {
+        that.$button.click();
+      });
+
+      this.$searchbox.on('click', function (e) {
+        e.stopPropagation();
+      });
+
+      this.$menu.on('click', '.actions-btn', function (e) {
+        if (that.options.liveSearch) {
+          that.$searchbox.focus();
+        } else {
+          that.$button.focus();
+        }
+
+        e.preventDefault();
+        e.stopPropagation();
+
+        if ($(this).hasClass('bs-select-all')) {
+          that.selectAll();
+        } else {
+          that.deselectAll();
+        }
+        that.$element.triggerNative('change');
+      });
+
+      this.$element.change(function () {
+        that.render(false);
+      });
+    },
+
+    liveSearchListener: function () {
+      var that = this,
+          $no_results = $('<li class="no-results"></li>');
+
+      this.$button.on('click.dropdown.data-api touchstart.dropdown.data-api', function () {
+        that.$menuInner.find('.active').removeClass('active');
+        if (!!that.$searchbox.val()) {
+          that.$searchbox.val('');
+          that.$lis.not('.is-hidden').removeClass('hidden');
+          if (!!$no_results.parent().length) $no_results.remove();
+        }
+        if (!that.multiple) that.$menuInner.find('.selected').addClass('active');
+        setTimeout(function () {
+          that.$searchbox.focus();
+        }, 10);
+      });
+
+      this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) {
+        e.stopPropagation();
+      });
+
+      this.$searchbox.on('input propertychange', function () {
+        if (that.$searchbox.val()) {
+          var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a');
+          if (that.options.liveSearchNormalize) {
+            $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")');
+          } else {
+            $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")');
+          }
+          $searchBase.parent().addClass('hidden');
+
+          that.$lis.filter('.dropdown-header').each(function () {
+            var $this = $(this),
+                optgroup = $this.data('optgroup');
+
+            if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) {
+              $this.addClass('hidden');
+              that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden');
+            }
+          });
+
+          var $lisVisible = that.$lis.not('.hidden');
+
+          // hide divider if first or last visible, or if followed by another divider
+          $lisVisible.each(function (index) {
+            var $this = $(this);
+
+            if ($this.hasClass('divider') && (
+              $this.index() === $lisVisible.first().index() ||
+              $this.index() === $lisVisible.last().index() ||
+              $lisVisible.eq(index + 1).hasClass('divider'))) {
+              $this.addClass('hidden');
+            }
+          });
+
+          if (!that.$lis.not('.hidden, .no-results').length) {
+            if (!!$no_results.parent().length) {
+              $no_results.remove();
+            }
+            $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show();
+            that.$menuInner.append($no_results);
+          } else if (!!$no_results.parent().length) {
+            $no_results.remove();
+          }
+        } else {
+          that.$lis.not('.is-hidden').removeClass('hidden');
+          if (!!$no_results.parent().length) {
+            $no_results.remove();
+          }
+        }
+
+        that.$lis.filter('.active').removeClass('active');
+        if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus();
+        $(this).focus();
+      });
+    },
+
+    _searchStyle: function () {
+      var styles = {
+        begins: 'ibegins',
+        startsWith: 'ibegins'
+      };
+
+      return styles[this.options.liveSearchStyle] || 'icontains';
+    },
+
+    val: function (value) {
+      if (typeof value !== 'undefined') {
+        this.$element.val(value);
+        this.render();
+
+        return this.$element;
+      } else {
+        return this.$element.val();
+      }
+    },
+
+    changeAll: function (status) {
+      if (typeof status === 'undefined') status = true;
+
+      this.findLis();
+
+      var $options = this.$element.find('option'),
+          $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').toggleClass('selected', status),
+          lisVisLen = $lisVisible.length,
+          selectedOptions = [];
+
+      for (var i = 0; i < lisVisLen; i++) {
+        var origIndex = $lisVisible[i].getAttribute('data-original-index');
+        selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0];
+      }
+
+      $(selectedOptions).prop('selected', status);
+
+      this.render(false);
+    },
+
+    selectAll: function () {
+      return this.changeAll(true);
+    },
+
+    deselectAll: function () {
+      return this.changeAll(false);
+    },
+
+    keydown: function (e) {
+      var $this = $(this),
+          $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),
+          $items,
+          that = $parent.data('this'),
+          index,
+          next,
+          first,
+          last,
+          prev,
+          nextPrev,
+          prevIndex,
+          isActive,
+          selector = ':not(.disabled, .hidden, .dropdown-header, .divider)',
+          keyCodeMap = {
+            32: ' ',
+            48: '0',
+            49: '1',
+            50: '2',
+            51: '3',
+            52: '4',
+            53: '5',
+            54: '6',
+            55: '7',
+            56: '8',
+            57: '9',
+            59: ';',
+            65: 'a',
+            66: 'b',
+            67: 'c',
+            68: 'd',
+            69: 'e',
+            70: 'f',
+            71: 'g',
+            72: 'h',
+            73: 'i',
+            74: 'j',
+            75: 'k',
+            76: 'l',
+            77: 'm',
+            78: 'n',
+            79: 'o',
+            80: 'p',
+            81: 'q',
+            82: 'r',
+            83: 's',
+            84: 't',
+            85: 'u',
+            86: 'v',
+            87: 'w',
+            88: 'x',
+            89: 'y',
+            90: 'z',
+            96: '0',
+            97: '1',
+            98: '2',
+            99: '3',
+            100: '4',
+            101: '5',
+            102: '6',
+            103: '7',
+            104: '8',
+            105: '9'
+          };
+
+      if (that.options.liveSearch) $parent = $this.parent().parent();
+
+      if (that.options.container) $parent = that.$menu;
+
+      $items = $('[role=menu] li', $parent);
+
+      isActive = that.$newElement.hasClass('open');
+
+      if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) {
+        if (!that.options.container) {
+          that.setSize();
+          that.$menu.parent().addClass('open');
+          isActive = true;
+        } else {
+          that.$button.trigger('click');
+        }
+        that.$searchbox.focus();
+      }
+
+      if (that.options.liveSearch) {
+        if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) {
+          e.preventDefault();
+          that.$menu.parent().removeClass('open');
+          if (that.options.container) that.$newElement.removeClass('open');
+          that.$button.focus();
+        }
+        // $items contains li elements when liveSearch is enabled
+        $items = $('[role=menu] li' + selector, $parent);
+        if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {
+          if ($items.filter('.active').length === 0) {
+            $items = that.$menuInner.find('li');
+            if (that.options.liveSearchNormalize) {
+              $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');
+            } else {
+              $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');
+            }
+          }
+        }
+      }
+
+      if (!$items.length) return;
+
+      if (/(38|40)/.test(e.keyCode.toString(10))) {
+        index = $items.index($items.find('a').filter(':focus').parent());
+        first = $items.filter(selector).first().index();
+        last = $items.filter(selector).last().index();
+        next = $items.eq(index).nextAll(selector).eq(0).index();
+        prev = $items.eq(index).prevAll(selector).eq(0).index();
+        nextPrev = $items.eq(next).prevAll(selector).eq(0).index();
+
+        if (that.options.liveSearch) {
+          $items.each(function (i) {
+            if (!$(this).hasClass('disabled')) {
+              $(this).data('index', i);
+            }
+          });
+          index = $items.index($items.filter('.active'));
+          first = $items.first().data('index');
+          last = $items.last().data('index');
+          next = $items.eq(index).nextAll().eq(0).data('index');
+          prev = $items.eq(index).prevAll().eq(0).data('index');
+          nextPrev = $items.eq(next).prevAll().eq(0).data('index');
+        }
+
+        prevIndex = $this.data('prevIndex');
+
+        if (e.keyCode == 38) {
+          if (that.options.liveSearch) index--;
+          if (index != nextPrev && index > prev) index = prev;
+          if (index < first) index = first;
+          if (index == prevIndex) index = last;
+        } else if (e.keyCode == 40) {
+          if (that.options.liveSearch) index++;
+          if (index == -1) index = 0;
+          if (index != nextPrev && index < next) index = next;
+          if (index > last) index = last;
+          if (index == prevIndex) index = first;
+        }
+
+        $this.data('prevIndex', index);
+
+        if (!that.options.liveSearch) {
+          $items.eq(index).children('a').focus();
+        } else {
+          e.preventDefault();
+          if (!$this.hasClass('dropdown-toggle')) {
+            $items.removeClass('active').eq(index).addClass('active').children('a').focus();
+            $this.focus();
+          }
+        }
+
+      } else if (!$this.is('input')) {
+        var keyIndex = [],
+            count,
+            prevKey;
+
+        $items.each(function () {
+          if (!$(this).hasClass('disabled')) {
+            if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {
+              keyIndex.push($(this).index());
+            }
+          }
+        });
+
+        count = $(document).data('keycount');
+        count++;
+        $(document).data('keycount', count);
+
+        prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);
+
+        if (prevKey != keyCodeMap[e.keyCode]) {
+          count = 1;
+          $(document).data('keycount', count);
+        } else if (count >= keyIndex.length) {
+          $(document).data('keycount', 0);
+          if (count > keyIndex.length) count = 1;
+        }
+
+        $items.eq(keyIndex[count - 1]).children('a').focus();
+      }
+
+      // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu.
+      if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {
+        if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault();
+        if (!that.options.liveSearch) {
+          var elem = $(':focus');
+          elem.click();
+          // Bring back focus for multiselects
+          elem.focus();
+          // Prevent screen from scrolling if the user hit the spacebar
+          e.preventDefault();
+          // Fixes spacebar selection of dropdown items in FF & IE
+          $(document).data('spaceSelect', true);
+        } else if (!/(32)/.test(e.keyCode.toString(10))) {
+          that.$menuInner.find('.active a').click();
+          $this.focus();
+        }
+        $(document).data('keycount', 0);
+      }
+
+      if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {
+        that.$menu.parent().removeClass('open');
+        if (that.options.container) that.$newElement.removeClass('open');
+        that.$button.focus();
+      }
+    },
+
+    mobile: function () {
+      this.$element.addClass('mobile-device');
+    },
+
+    refresh: function () {
+      this.$lis = null;
+      this.liObj = {};
+      this.reloadLi();
+      this.render();
+      this.checkDisabled();
+      this.liHeight(true);
+      this.setStyle();
+      this.setWidth();
+      if (this.$lis) this.$searchbox.trigger('propertychange');
+
+      this.$element.trigger('refreshed.bs.select');
+    },
+
+    hide: function () {
+      this.$newElement.hide();
+    },
+
+    show: function () {
+      this.$newElement.show();
+    },
+
+    remove: function () {
+      this.$newElement.remove();
+      this.$element.remove();
+    },
+
+    destroy: function () {
+        this.$newElement.remove();
+
+        if (this.$bsContainer) {
+            this.$bsContainer.remove();
+        } else {
+            this.$menu.remove();
+        }
+
+        this.$element
+          .off('.bs.select')
+          .removeData('selectpicker')
+          .removeClass('bs-select-hidden selectpicker');
+    }
+  };
+
+  // SELECTPICKER PLUGIN DEFINITION
+  // ==============================
+  function Plugin(option, event) {
+    // get the args of the outer function..
+    var args = arguments;
+    // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them
+    // to get lost/corrupted in android 2.3 and IE9 #715 #775
+    var _option = option,
+        _event = event;
+    [].shift.apply(args);
+
+    var value;
+    var chain = this.each(function () {
+      var $this = $(this);
+      if ($this.is('select')) {
+        var data = $this.data('selectpicker'),
+            options = typeof _option == 'object' && _option;
+
+        if (!data) {
+          var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);
+          config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template);
+          $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));
+        } else if (options) {
+          for (var i in options) {
+            if (options.hasOwnProperty(i)) {
+              data.options[i] = options[i];
+            }
+          }
+        }
+
+        if (typeof _option == 'string') {
+          if (data[_option] instanceof Function) {
+            value = data[_option].apply(data, args);
+          } else {
+            value = data.options[_option];
+          }
+        }
+      }
+    });
+
+    if (typeof value !== 'undefined') {
+      //noinspection JSUnusedAssignment
+      return value;
+    } else {
+      return chain;
+    }
+  }
+
+  var old = $.fn.selectpicker;
+  $.fn.selectpicker = Plugin;
+  $.fn.selectpicker.Constructor = Selectpicker;
+
+  // SELECTPICKER NO CONFLICT
+  // ========================
+  $.fn.selectpicker.noConflict = function () {
+    $.fn.selectpicker = old;
+    return this;
+  };
+
+  $(document)
+      .data('keycount', 0)
+      .on('keydown.bs.select', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown)
+      .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', function (e) {
+        e.stopPropagation();
+      });
+
+  // SELECTPICKER DATA-API
+  // =====================
+  $(window).on('load.bs.select.data-api', function () {
+    $('.selectpicker').each(function () {
+      var $selectpicker = $(this);
+      Plugin.call($selectpicker, $selectpicker.data());
+    })
+  });
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ar_AR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ar_AR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ar_AR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*!
+ * Translated default messages for bootstrap-select.
+ * Locale: AR (Arabic)
+ * Author: Yasser Lotfy <y_l at alive.com>
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'لم يتم إختيار شئ',
+    noneResultsText: 'لا توجد نتائج مطابقة لـ {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} خيار تم إختياره" : "{0} خيارات تمت إختيارها";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'تخطى الحد المسموح ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح ({n} خيارات بحد أقصى)',
+        (numGroup == 1) ? 'تخطى الحد المسموح للمجموعة ({n} خيار بحد أقصى)' : 'تخطى الحد المسموح للمجموعة ({n} خيارات بحد أقصى)'
+      ];
+    },
+    selectAllText: 'إختيار الجميع',
+    deselectAllText: 'إلغاء إختيار الجميع',
+    multipleSeparator: '، '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-bg_BG.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-bg_BG.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-bg_BG.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: BG (Bulgaria)
+ * Region: BG (Bulgaria)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Нищо избрано',
+    noneResultsText: 'Няма резултат за {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} избран елемент" : "{0} избрани елемента";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Лимита е достигнат ({n} елемент максимум)' : 'Лимита е достигнат ({n} елемента максимум)',
+        (numGroup == 1) ? 'Груповия лимит е достигнат ({n} елемент максимум)' : 'Груповия лимит е достигнат ({n} елемента максимум)'
+      ];
+    },
+    selectAllText: 'Избери всички',
+    deselectAllText: 'Размаркирай всички',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-cs_CZ.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-cs_CZ.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-cs_CZ.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: CS
+ * Region: CZ (Czech Republic)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nic není vybráno',
+    noneResultsText: 'Žádné výsledky {0}',
+    countSelectedText: 'Označeno {0} z {1}',
+    maxOptionsText: ['Limit překročen ({n} {var} max)', 'Limit skupiny překročen ({n} {var} max)', ['položek', 'položka']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-da_DK.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-da_DK.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-da_DK.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: DA (Danish)
+ * Region: DK (Denmark)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Intet valgt',
+    noneResultsText: 'Ingen resultater fundet {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} valgt" : "{0} valgt";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Begrænsning nået (max {n} valgt)' : 'Begrænsning nået (max {n} valgte)',
+        (numGroup == 1) ? 'Gruppe-begrænsning nået (max {n} valgt)' : 'Gruppe-begrænsning nået (max {n} valgte)'
+      ];
+    },
+    selectAllText: 'Markér alle',
+    deselectAllText: 'Afmarkér alle',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-de_DE.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-de_DE.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-de_DE.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: DE (German, deutsch)
+ * Region: DE (Germany, Deutschland)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Bitte wählen...',
+    noneResultsText: 'Keine Ergebnisse für {0}',
+    countSelectedText: '{0} von {1} ausgewählt',
+    maxOptionsText: ['Limit erreicht ({n} {var} max.)', 'Gruppen-Limit erreicht ({n} {var} max.)', ['Eintrag', 'Einträge']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-en_US.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-en_US.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-en_US.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: EN (English)
+ * Region: US (United States)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nothing selected',
+    noneResultsText: 'No results match {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
+        (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
+      ];
+    },
+    selectAllText: 'Select All',
+    deselectAllText: 'Deselect All',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-es_CL.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-es_CL.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-es_CL.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: ES (Spanish)
+ * Region: CL (Chile)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'No hay selección',
+    noneResultsText: 'No hay resultados {0}',
+    countSelectedText: 'Seleccionados {0} de {1}',
+    maxOptionsText: ['Límite alcanzado ({n} {var} max)', 'Límite del grupo alcanzado({n} {var} max)', ['elementos', 'element']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-eu.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-eu.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-eu.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: EU (Basque)
+ * Region: 
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Hautapenik ez',
+    noneResultsText: 'Emaitzarik ez {0}',
+    countSelectedText: '{1}(e)tik {0} hautatuta',
+    maxOptionsText: ['Mugara iritsita ({n} {var} gehienez)', 'Taldearen mugara iritsita ({n} {var} gehienez)', ['elementu', 'elementu']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fa_IR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fa_IR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fa_IR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,16 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: FA (Farsi)
+ * Region: IR (Iran)
+ */
+(function ($) {
+    $.fn.selectpicker.defaults = {
+        noneSelectedText: 'چیزی انتخاب نشده است',
+        noneResultsText: 'هیج مشابهی برای {0} پیدا نشد',
+        countSelectedText: "{0} از {1} مورد انتخاب شده",
+        maxOptionsText: ['بیشتر ممکن نیست {حداکثر {n} عدد}', 'بیشتر ممکن نیست {حداکثر {n} عدد}'],
+        selectAllText: 'انتخاب همه',
+        deselectAllText: 'انتخاب هیچ کدام',
+        multipleSeparator: ', '
+    };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fi_FI.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fi_FI.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fi_FI.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: FI (Finnish)
+ * Region: FI (Finland)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Ei valintoja',
+    noneResultsText: 'Ei hakutuloksia {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} valittu" : "{0} valitut";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Valintojen maksimimäärä ({n} saavutettu)' : 'Valintojen maksimimäärä ({n} saavutettu)',
+        (numGroup == 1) ? 'Ryhmän maksimimäärä ({n} saavutettu)' : 'Ryhmän maksimimäärä ({n} saavutettu)'
+      ];
+    },
+    selectAllText: 'Valitse kaikki',
+    deselectAllText: 'Poista kaikki',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fr_FR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fr_FR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-fr_FR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,21 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: FR (French; Français)
+ * Region: FR (France)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Aucune sélection',
+    noneResultsText: 'Aucun résultat pour {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected > 1) ? "{0} éléments sélectionnés" : "{0} élément sélectionné";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll > 1) ? 'Limite atteinte ({n} éléments max)' : 'Limite atteinte ({n} élément max)',
+        (numGroup > 1) ? 'Limite du groupe atteinte ({n} éléments max)' : 'Limite du groupe atteinte ({n} élément max)'
+      ];
+    },
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-hu_HU.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-hu_HU.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-hu_HU.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: HU (Hungarian)
+ * Region: HU (Hungary)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Válasszon!',
+    noneResultsText: 'Nincs találat {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return '{0} elem kiválasztva';
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        'Legfeljebb {n} elem választható',
+        'A csoportban legfeljebb {n} elem választható'
+      ];
+    },
+    selectAllText: 'Mind',
+    deselectAllText: 'Egyik sem',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-id_ID.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-id_ID.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-id_ID.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,16 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: ID (Indonesian; Bahasa Indonesia)
+ * Region: ID (Indonesia)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Tidak ada yang dipilih',
+    noneResultsText: 'Tidak ada yang cocok {0}',
+    countSelectedText: '{0} terpilih',
+    maxOptionsText: ['Mencapai batas (maksimum {n})', 'Mencapai batas grup (maksimum {n})'],
+    selectAllText: 'Pilih Semua',
+    deselectAllText: 'Hapus Semua',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-it_IT.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-it_IT.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-it_IT.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: IT (Italian; italiano)
+ * Region: IT (Italy; Italia)
+ * Author: Michele Beltrame <mb at cattlegrid.info>
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nessuna selezione',
+    noneResultsText: 'Nessun risultato per {0}',
+    countSelectedText: 'Selezionati {0} di {1}',
+    maxOptionsText: ['Limite raggiunto ({n} {var} max)', 'Limite del gruppo raggiunto ({n} {var} max)', ['elementi', 'elemento']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ko_KR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ko_KR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ko_KR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: KO (Korean)
+ * Region: KR (South Korea)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: '항목을 선택해주세요',
+    noneResultsText: '{0} 검색 결과가 없습니다',
+    countSelectedText: function (numSelected, numTotal) {
+      return "{0}개를 선택하였습니다";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        '{n}개까지 선택 가능합니다',
+        '해당 그룹은 {n}개까지 선택 가능합니다'
+      ];
+    },
+    selectAllText: '전체선택',
+    deselectAllText: '전체해제',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nb_NO.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nb_NO.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nb_NO.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap-select v1.8.1 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Ingen valgt',
+    noneResultsText: 'Søket gir ingen treff {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} alternativ valgt" : "{0} alternativer valgt";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Grense nådd (maks {n} valg)' : 'Grense nådd (maks {n} valg)',
+        (numGroup == 1) ? 'Grense for grupper nådd (maks {n} grupper)' : 'Grense for grupper nådd (maks {n} grupper)'
+      ];
+    },
+    selectAllText: 'Merk alle',
+    deselectAllText: 'Fjern alle',
+    multipleSeparator: ', '
+  };
+})(jQuery);
+
+
+}));

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nl_NL.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nl_NL.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-nl_NL.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: NL (Dutch; Nederlands)
+ * Region: NL (Europe)
+ * Author: Daan Rosbergen (Badmuts)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Niets geselecteerd',
+    noneResultsText: 'Geen resultaten gevonden voor {0}',
+    countSelectedText: '{0} van {1} geselecteerd',
+    maxOptionsText: ['Limiet bereikt ({n} {var} max)', 'Groep limiet bereikt ({n} {var} max)', ['items', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pl_PL.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pl_PL.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pl_PL.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,16 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: PL (Polish)
+ * Region: EU (Europe)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nic nie zaznaczono',
+    noneResultsText: 'Brak wyników wyszukiwania {0}',
+    countSelectedText: 'Zaznaczono {0} z {1}',
+    maxOptionsText: ['Osiągnięto limit ({n} {var} max)', 'Limit grupy osiągnięty ({n} {var} max)', ['elementy', 'element']],
+    selectAll: 'Zaznacz wszystkie',
+    deselectAll: 'Odznacz wszystkie',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_BR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_BR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_BR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: PT (Portuguese; português)
+ * Region: BR (Brazil; Brasil)
+ * Author: Rodrigo de Avila <rodrigo at avila.net.br>
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nada selecionado',
+    noneResultsText: 'Nada encontrado contendo {0}',
+    countSelectedText: 'Selecionado {0} de {1}',
+    maxOptionsText: ['Limite excedido (máx. {n} {var})', 'Limite do grupo excedido (máx. {n} {var})', ['itens', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_PT.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_PT.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-pt_PT.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+/*
+* Translated default messages for bootstrap-select.
+* Locale: PT (Portuguese; português)
+* Region: PT (Portugal; Portugal)
+* Author: Burnspirit <burnspirit at gmail.com>
+*/
+(function ($) {
+$.fn.selectpicker.defaults = {
+noneSelectedText: 'Nenhum seleccionado',
+noneResultsText: 'Sem resultados contendo {0}',
+countSelectedText: 'Selecionado {0} de {1}',
+maxOptionsText: ['Limite ultrapassado (máx. {n} {var})', 'Limite de seleções ultrapassado (máx. {n} {var})', ['itens', 'item']],
+multipleSeparator: ', '
+};
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ro_RO.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ro_RO.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ro_RO.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: RO (Romanian)
+ * Region: RO (Romania)
+ * Alex Florea <alecz.fia at gmail.com>
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nu a fost selectat nimic',
+    noneResultsText: 'Nu exista niciun rezultat {0}',
+    countSelectedText: '{0} din {1} selectat(e)',
+    maxOptionsText: ['Limita a fost atinsa ({n} {var} max)', 'Limita de grup a fost atinsa ({n} {var} max)', ['iteme', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ru_RU.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ru_RU.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ru_RU.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,15 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: RU (Russian; Русский)
+ * Region: RU (Russian Federation)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Ничего не выбрано',
+    noneResultsText: 'Совпадений не найдено {0}',
+    countSelectedText: 'Выбрано {0} из {1}',
+    maxOptionsText: ['Достигнут предел ({n} {var} максимум)', 'Достигнут предел в группе ({n} {var} максимум)', ['items', 'item']],
+    doneButtonText: 'Закрыть',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sk_SK.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sk_SK.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sk_SK.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,16 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: SK
+ * Region: SK (Slovak Republic)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Vyberte zo zoznamu',
+    noneResultsText: 'Pre výraz {0} neboli nájdené žiadne výsledky',
+    countSelectedText: 'Vybrané {0} z {1}',
+    maxOptionsText: ['Limit prekročený ({n} {var} max)', 'Limit skupiny prekročený ({n} {var} max)', ['položiek', 'položka']],
+    selectAllText: 'Vybrať všetky',
+    deselectAllText: 'Zrušiť výber',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sl_SI.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sl_SI.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sl_SI.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: SL (Slovenian)
+ * Region: SI (Slovenia)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Nič izbranega',
+    noneResultsText: 'Ni zadetkov za {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      "Število izbranih: {0}";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        'Omejitev dosežena (max. izbranih: {n})',
+        'Omejitev skupine dosežena (max. izbranih: {n})'
+      ];
+    },
+    selectAllText: 'Izberi vse',
+    deselectAllText: 'Počisti izbor',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sv_SE.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sv_SE.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-sv_SE.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,23 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: SV (Swedish)
+ * Region: SE (Sweden)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Inget valt',
+    noneResultsText: 'Inget sökresultat matchar {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected === 1) ? "{0} alternativ valt" : "{0} alternativ valda";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        'Gräns uppnåd (max {n} alternativ)',
+        'Gräns uppnåd (max {n} gruppalternativ)'
+      ];
+    },
+    selectAllText: 'Markera alla',
+    deselectAllText: 'Avmarkera alla',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-tr_TR.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-tr_TR.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-tr_TR.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,24 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: TR (Turkey)
+ * Region: TR (Europe)
+ * Author: Serhan Güney
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Hiçbiri seçilmedi',
+    noneResultsText: 'Hiçbir sonuç bulunamadı {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} öğe seçildi" : "{0} öğe seçildi";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Limit aşıldı (maksimum {n} sayıda öğe )' : 'Limit aşıldı (maksimum {n} sayıda öğe)',
+        (numGroup == 1) ? 'Grup limiti aşıldı (maksimum {n} sayıda öğe)' : 'Grup limiti aşıldı (maksimum {n} sayıda öğe)'
+      ];
+    },
+    selectAllText: 'Tümünü Seç',
+    deselectAllText: 'Seçiniz',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ua_UA.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ua_UA.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-ua_UA.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: UA (Ukrainian; Українська)
+ * Region: UA (Ukraine)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: 'Нічого не вибрано',
+    noneResultsText: 'Збігів не знайдено {0}',
+    countSelectedText: 'Вибрано {0} із {1}',
+    maxOptionsText: ['Досягнута межа ({n} {var} максимум)', 'Досягнута межа в групі ({n} {var} максимум)', ['items', 'item']],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_CN.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_CN.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_CN.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,14 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: ZH (Chinese)
+ * Region: CN (China)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: '没有选中任何项',
+    noneResultsText: '没有找到匹配项',
+    countSelectedText: '选中{1}中的{0}项',
+    maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'],
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_TW.js
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_TW.js	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/js/i18n/defaults-zh_TW.js	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,16 @@
+/*
+ * Translated default messages for bootstrap-select.
+ * Locale: ZH (Chinese)
+ * Region: TW (Taiwan)
+ */
+(function ($) {
+  $.fn.selectpicker.defaults = {
+    noneSelectedText: '沒有選取任何項目',
+    noneResultsText: '沒有找到符合的結果',
+    countSelectedText: '已經選取{0}個項目',
+    maxOptionsText: ['超過限制 (最多選擇{n}項)', '超過限制(最多選擇{n}組)'],
+    selectAllText: '選取全部',
+    deselectAllText: '全部取消',
+    multipleSeparator: ', '
+  };
+})(jQuery);

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/bootstrap-select.less
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/bootstrap-select.less	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/bootstrap-select.less	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,348 @@
+ at import "variables";
+
+// Mixins
+.cursor-disabled() {
+  cursor: not-allowed;
+}
+
+// Rules
+.bootstrap-select {
+  width: 220px \0; /*IE9 and below*/
+
+  // The selectpicker button
+  > .dropdown-toggle {
+    width: 100%;
+    padding-right: 25px;
+    z-index: 1;
+  }
+
+  > select {
+    position: absolute !important;
+    bottom: 0;
+    left: 50%;
+    width: 0.11px !important;
+    height: 100% !important;
+    padding: 0 !important;
+    opacity: 0 !important;
+    border: none;
+
+    &.mobile-device {
+      top: 0;
+      left: 0;
+      display: block !important;
+      width: 100% !important;
+      z-index: 2;
+    }
+  }
+
+  // Error display
+  .has-error & .dropdown-toggle,
+  .error & .dropdown-toggle {
+    border-color: @color-red-error;
+  }
+
+  &.fit-width {
+    width: auto !important;
+  }
+
+  &:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+    width: @width-default;
+  }
+
+  .dropdown-toggle:focus {
+    outline: thin dotted #333333 !important;
+    outline: 5px auto -webkit-focus-ring-color !important;
+    outline-offset: -2px;
+  }
+}
+
+.bootstrap-select.form-control {
+  margin-bottom: 0;
+  padding: 0;
+  border: none;
+
+  &:not([class*="col-"]) {
+    width: 100%;
+  }
+
+  &.input-group-btn {
+    z-index: auto;
+  }
+}
+
+// The selectpicker components
+.bootstrap-select.btn-group {
+  &:not(.input-group-btn),
+  &[class*="col-"] {
+    float: none;
+    display: inline-block;
+    margin-left: 0;
+  }
+
+  // Forces the pull to the right, if necessary
+  &,
+  &[class*="col-"],
+  .row &[class*="col-"] {
+    &.dropdown-menu-right {
+      float: right;
+    }
+  }
+
+  .form-inline &,
+  .form-horizontal &,
+  .form-group & {
+    margin-bottom: 0;
+  }
+
+  .form-group-lg &.form-control,
+  .form-group-sm &.form-control {
+    padding: 0;
+  }
+
+  // Set the width of the live search (and any other form control within an inline form)
+  // see https://github.com/silviomoreto/bootstrap-select/issues/685
+  .form-inline & .form-control {
+    width: 100%;
+  }
+
+  &.disabled,
+  > .disabled {
+    .cursor-disabled();
+
+    &:focus {
+      outline: none !important;
+    }
+  }
+
+  &.bs-container {
+    position: absolute;
+    
+    .dropdown-menu {
+      z-index: @zindex-select-dropdown;
+    }
+  }
+
+  // The selectpicker button
+  .dropdown-toggle {
+    .filter-option {
+      display: inline-block;
+      overflow: hidden;
+      width: 100%;
+      text-align: left;
+    }
+
+    .caret {
+      position: absolute;
+      top: 50%;
+      right: 12px;
+      margin-top: -2px;
+      vertical-align: middle;
+    }
+  }
+
+  &[class*="col-"] .dropdown-toggle {
+    width: 100%;
+  }
+
+  // The selectpicker dropdown
+  .dropdown-menu {
+    min-width: 100%;
+    box-sizing: border-box;
+
+    &.inner {
+      position: static;
+      float: none;
+      border: 0;
+      padding: 0;
+      margin: 0;
+      border-radius: 0;
+      box-shadow: none;
+    }
+
+    li {
+      position: relative;
+
+      &.active small {
+        color: #fff;
+      }
+
+      &.disabled a {
+        .cursor-disabled();
+      }
+
+      a {
+        cursor: pointer;
+        -webkit-user-select: none;
+           -moz-user-select: none;
+            -ms-user-select: none;
+                user-select: none;
+
+        &.opt {
+          position: relative;
+          padding-left: 2.25em;
+        }
+
+        span.check-mark {
+          display: none;
+        }
+
+        span.text {
+          display: inline-block;
+        }
+      }
+
+      small {
+        padding-left: 0.5em;
+      }
+    }
+
+    .notify {
+      position: absolute;
+      bottom: 5px;
+      width: 96%;
+      margin: 0 2%;
+      min-height: 26px;
+      padding: 3px 5px;
+      background: rgb(245, 245, 245);
+      border: 1px solid rgb(227, 227, 227);
+      box-shadow: inset 0 1px 1px fade(rgb(0, 0, 0), 5%);
+      pointer-events: none;
+      opacity: 0.9;
+      box-sizing: border-box;
+    }
+  }
+
+  .no-results {
+    padding: 3px;
+    background: #f5f5f5;
+    margin: 0 5px;
+    white-space: nowrap;
+  }
+
+  &.fit-width .dropdown-toggle {
+    .filter-option {
+      position: static;
+    }
+
+    .caret {
+      position: static;
+      top: auto;
+      margin-top: -1px;
+    }
+  }
+
+  &.show-tick .dropdown-menu li {
+    &.selected a span.check-mark {
+      position: absolute;
+      display: inline-block;
+      right: 15px;
+      margin-top: 5px;
+    }
+
+    a span.text {
+      margin-right: 34px;
+    }
+  }
+}
+
+.bootstrap-select.show-menu-arrow {
+  &.open > .dropdown-toggle {
+    z-index: (@zindex-select-dropdown + 1);
+  }
+
+  .dropdown-toggle {
+    &:before {
+      content: '';
+      border-left: 7px solid transparent;
+      border-right: 7px solid transparent;
+      border-bottom: 7px solid @color-grey-arrow;
+      position: absolute;
+      bottom: -4px;
+      left: 9px;
+      display: none;
+    }
+
+    &:after {
+      content: '';
+      border-left: 6px solid transparent;
+      border-right: 6px solid transparent;
+      border-bottom: 6px solid white;
+      position: absolute;
+      bottom: -4px;
+      left: 10px;
+      display: none;
+    }
+  }
+
+  &.dropup .dropdown-toggle {
+    &:before {
+      bottom: auto;
+      top: -3px;
+      border-top: 7px solid @color-grey-arrow;
+      border-bottom: 0;
+    }
+
+    &:after {
+      bottom: auto;
+      top: -3px;
+      border-top: 6px solid white;
+      border-bottom: 0;
+    }
+  }
+
+  &.pull-right .dropdown-toggle {
+    &:before {
+      right: 12px;
+      left: auto;
+    }
+
+    &:after {
+      right: 13px;
+      left: auto;
+    }
+  }
+
+  &.open > .dropdown-toggle {
+    &:before,
+    &:after {
+      display: block;
+    }
+  }
+}
+
+.bs-searchbox,
+.bs-actionsbox,
+.bs-donebutton {
+  padding: 4px 8px;
+}
+
+.bs-actionsbox {
+  width: 100%;
+  box-sizing: border-box;
+
+  & .btn-group button {
+    width: 50%;
+  }
+}
+
+.bs-donebutton {
+  float: left;
+  width: 100%;
+  box-sizing: border-box;
+
+  & .btn-group button {
+    width: 100%;
+  }
+}
+
+.bs-searchbox {
+  & + .bs-actionsbox {
+    padding: 0 8px 4px;
+  }
+
+  & .form-control {
+    margin-bottom: 0;
+    width: 100%;
+    float: none;
+  }
+}

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/variables.less
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/variables.less	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/less/variables.less	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,6 @@
+ at color-red-error: rgb(185, 74, 72);
+ at color-grey-arrow: rgba(204, 204, 204, 0.2);
+
+ at width-default: 220px; // 3 960px-grid columns
+
+ at zindex-select-dropdown: 1060; // must be higher than a modal background (1050)

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/package.json
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/package.json	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/package.json	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,65 @@
+{
+  "name": "bootstrap-select",
+  "title": "bootstrap-select",
+  "main": "dist/js/bootstrap-select.js",
+  "description": "A custom <select> for Bootstrap using button dropdown as replacement",
+  "version": "1.9.3",
+  "homepage": "http://silviomoreto.github.io/bootstrap-select",
+  "author": {
+    "name": "Silvio Moreto",
+    "url": "https://github.com/silviomoreto"
+  },
+  "contributors": [
+    {
+      "name": "Silvio Moreto",
+      "url": "https://github.com/silviomoreto"
+    },
+    {
+      "name": "Ana Carolina",
+      "url": "https://github.com/anacarolinats"
+    },
+    {
+      "name": "caseyjhol",
+      "url": "https://github.com/caseyjhol"
+    },
+    {
+      "name": "Matt Bryson",
+      "url": "https://github.com/mattbryson"
+    },
+    {
+      "name": "t0xicCode",
+      "url": "https://github.com/t0xicCode"
+    }
+  ],
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/silviomoreto/bootstrap-select.git"
+  },
+  "license": "MIT",
+  "dependencies": {
+    "jquery": ">=1.8"
+  },
+  "devDependencies": {
+    "grunt": "~0.4.5",
+    "grunt-autoprefixer": "~1.0.0",
+    "grunt-banner": "~0.3.1",
+    "grunt-contrib-clean": "~0.6.0",
+    "grunt-contrib-compress": "~0.13.0",
+    "grunt-contrib-concat": "~0.5.0",
+    "grunt-contrib-csslint": "~0.2.0",
+    "grunt-contrib-cssmin": "~0.11.0",
+    "grunt-contrib-jshint": "~0.10.0",
+    "grunt-contrib-less": "~0.11.3",
+    "grunt-contrib-uglify": "~0.7.0",
+    "grunt-contrib-watch": "~0.6.1",
+    "grunt-sed": "~0.1.1",
+    "grunt-umd": "~2.3.3",
+    "load-grunt-tasks": "~2.0.0"
+  },
+  "keywords": [
+    "form",
+    "bootstrap",
+    "select",
+    "replacement"
+  ]
+}

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/bootstrap-select.scss
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/bootstrap-select.scss	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/bootstrap-select.scss	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,373 @@
+/*!
+ * Bootstrap-select v1.8.0 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+ at import "variables";
+
+// Mixins
+ at mixin cursor-disabled() {
+  cursor: not-allowed;
+}
+
+ at mixin box-sizing($fmt) {
+  -webkit-box-sizing: $fmt;
+     -moz-box-sizing: $fmt;
+          box-sizing: $fmt;
+}
+
+ at mixin box-shadow($fmt) {
+  -webkit-box-shadow: $fmt;
+          box-shadow: $fmt;
+}
+
+ at function fade($color, $amnt) {
+  @if $amnt > 1 {
+    $amnt: $amnt / 100; // convert to percentage if int
+  }
+  @return rgba($color, $amnt);
+}
+
+// Rules
+.bootstrap-select {
+  width: 220px \0; /*IE9 and below*/
+
+  // The selectpicker button
+  > .dropdown-toggle {
+    width: 100%;
+    padding-right: 25px;
+    z-index: 1;
+  }
+
+  > select {
+    position: absolute !important;
+    bottom: 0;
+    left: 50%;
+    width: 0.11px !important;
+    height: 100% !important;
+    padding: 0 !important;
+    opacity: 0 !important;
+    border: none;
+
+    &.mobile-device {
+      top: 0;
+      left: 0;
+      display: block !important;
+      width: 100% !important;
+      z-index: 2;
+    }
+  }
+
+  // Error display
+  .has-error & .dropdown-toggle,
+  .error & .dropdown-toggle {
+    border-color: $color-red-error;
+  }
+
+  &.fit-width {
+    width: auto !important;
+  }
+
+  &:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+    width: $width-default;
+  }
+
+  .dropdown-toggle:focus {
+    outline: thin dotted #333333 !important;
+    outline: 5px auto -webkit-focus-ring-color !important;
+    outline-offset: -2px;
+  }
+}
+
+.bootstrap-select.form-control {
+  margin-bottom: 0;
+  padding: 0;
+  border: none;
+
+  &:not([class*="col-"]) {
+    width: 100%;
+  }
+
+  &.input-group-btn {
+    z-index: auto;
+  }
+}
+
+// The selectpicker components
+.bootstrap-select.btn-group {
+  &:not(.input-group-btn),
+  &[class*="col-"] {
+    float: none;
+    display: inline-block;
+    margin-left: 0;
+  }
+
+  // Forces the pull to the right, if necessary
+  &,
+  &[class*="col-"],
+  .row &[class*="col-"] {
+    &.dropdown-menu-right {
+      float: right;
+    }
+  }
+
+  .form-inline &,
+  .form-horizontal &,
+  .form-group & {
+    margin-bottom: 0;
+  }
+
+  .form-group-lg &.form-control,
+  .form-group-sm &.form-control {
+    padding: 0;
+  }
+
+  // Set the width of the live search (and any other form control within an inline form)
+  // see https://github.com/silviomoreto/bootstrap-select/issues/685
+  .form-inline & .form-control {
+    width: 100%;
+  }
+
+  &.disabled,
+  > .disabled {
+    @include cursor-disabled();
+
+    &:focus {
+      outline: none !important;
+    }
+  }
+
+  &.bs-container {
+    position: absolute;
+
+    .dropdown-menu {
+      z-index: $zindex-select-dropdown;
+    }
+  }
+
+  // The selectpicker button
+  .dropdown-toggle {
+    .filter-option {
+      display: inline-block;
+      overflow: hidden;
+      width: 100%;
+      text-align: left;
+    }
+
+    .caret {
+      position: absolute;
+      top: 50%;
+      right: 12px;
+      margin-top: -2px;
+      vertical-align: middle;
+    }
+  }
+
+  &[class*="col-"] .dropdown-toggle {
+    width: 100%;
+  }
+
+  // The selectpicker dropdown
+  .dropdown-menu {
+    min-width: 100%;
+    @include box-sizing(border-box);
+
+    &.inner {
+      position: static;
+      float: none;
+      border: 0;
+      padding: 0;
+      margin: 0;
+      border-radius: 0;
+      box-shadow: none;
+    }
+
+    li {
+      position: relative;
+
+      &.active small {
+        color: #fff;
+      }
+
+      &.disabled a {
+        @include cursor-disabled();
+      }
+
+      a {
+        cursor: pointer;
+        -webkit-user-select: none;
+           -moz-user-select: none;
+            -ms-user-select: none;
+                user-select: none;
+
+        &.opt {
+          position: relative;
+          padding-left: 2.25em;
+        }
+
+        span.check-mark {
+          display: none;
+        }
+
+        span.text {
+          display: inline-block;
+        }
+      }
+
+      small {
+        padding-left: 0.5em;
+      }
+    }
+
+    .notify {
+      position: absolute;
+      bottom: 5px;
+      width: 96%;
+      margin: 0 2%;
+      min-height: 26px;
+      padding: 3px 5px;
+      background: rgb(245, 245, 245);
+      border: 1px solid rgb(227, 227, 227);
+      @include box-shadow(inset 0 1px 1px fade(rgb(0, 0, 0), 5));
+      pointer-events: none;
+      opacity: 0.9;
+      @include box-sizing(border-box);
+    }
+  }
+
+  .no-results {
+    padding: 3px;
+    background: #f5f5f5;
+    margin: 0 5px;
+    white-space: nowrap;
+  }
+
+  &.fit-width .dropdown-toggle {
+    .filter-option {
+      position: static;
+    }
+
+    .caret {
+      position: static;
+      top: auto;
+      margin-top: -1px;
+    }
+  }
+
+  &.show-tick .dropdown-menu li {
+    &.selected a span.check-mark {
+      position: absolute;
+      display: inline-block;
+      right: 15px;
+      margin-top: 5px;
+    }
+
+    a span.text {
+      margin-right: 34px;
+    }
+  }
+}
+
+.bootstrap-select.show-menu-arrow {
+  &.open > .dropdown-toggle {
+    z-index: ($zindex-select-dropdown + 1);
+  }
+
+  .dropdown-toggle {
+    &:before {
+      content: '';
+      border-left: 7px solid transparent;
+      border-right: 7px solid transparent;
+      border-bottom: 7px solid $color-grey-arrow;
+      position: absolute;
+      bottom: -4px;
+      left: 9px;
+      display: none;
+    }
+
+    &:after {
+      content: '';
+      border-left: 6px solid transparent;
+      border-right: 6px solid transparent;
+      border-bottom: 6px solid white;
+      position: absolute;
+      bottom: -4px;
+      left: 10px;
+      display: none;
+    }
+  }
+
+  &.dropup .dropdown-toggle {
+    &:before {
+      bottom: auto;
+      top: -3px;
+      border-top: 7px solid $color-grey-arrow;
+      border-bottom: 0;
+    }
+
+    &:after {
+      bottom: auto;
+      top: -3px;
+      border-top: 6px solid white;
+      border-bottom: 0;
+    }
+  }
+
+  &.pull-right .dropdown-toggle {
+    &:before {
+      right: 12px;
+      left: auto;
+    }
+
+    &:after {
+      right: 13px;
+      left: auto;
+    }
+  }
+
+  &.open > .dropdown-toggle {
+    &:before,
+    &:after {
+      display: block;
+    }
+  }
+}
+
+.bs-searchbox,
+.bs-actionsbox,
+.bs-donebutton {
+  padding: 4px 8px;
+}
+
+.bs-actionsbox {
+  width: 100%;
+  @include box-sizing(border-box);
+
+  & .btn-group button {
+    width: 50%;
+  }
+}
+
+.bs-donebutton {
+  float: left;
+  width: 100%;
+  @include box-sizing(border-box);
+
+  & .btn-group button {
+    width: 100%;
+  }
+}
+
+.bs-searchbox {
+  & + .bs-actionsbox {
+    padding: 0 8px 4px;
+  }
+
+  & .form-control {
+    margin-bottom: 0;
+    width: 100%;
+    float: none;
+  }
+}

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/variables.scss
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/variables.scss	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/sass/variables.scss	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,6 @@
+$color-red-error: rgb(185, 74, 72);
+$color-grey-arrow: rgba(204, 204, 204, 0.2);
+
+$width-default: 220px; // 3 960px-grid columns
+
+$zindex-select-dropdown: 1060; // must be higher than a modal background (1050)

Added: trunk/mapbender/http/extensions/bootstrap-select-1.9.3/test.html
===================================================================
--- trunk/mapbender/http/extensions/bootstrap-select-1.9.3/test.html	                        (rev 0)
+++ trunk/mapbender/http/extensions/bootstrap-select-1.9.3/test.html	2016-01-12 15:49:39 UTC (rev 9346)
@@ -0,0 +1,316 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Bootstrap-select test page</title>
+
+  <meta charset="utf-8">
+
+  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
+  <link rel="stylesheet" href="dist/css/bootstrap-select.css">
+
+  <style>
+    body {
+      padding-top: 70px;
+    }
+  </style>
+
+  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
+  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
+  <script src="dist/js/bootstrap-select.js"></script>
+</head>
+<body>
+<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
+  <div class="container">
+    <div class="navbar-header">
+      <a class="navbar-brand" href="#">Bootstrap-select usability tests</a>
+    </div>
+  </div>
+</nav>
+
+<div class="container">
+  <form class="form-horizontal" role="form">
+    <div class="form-group">
+      <label for="basic" class="col-lg-2 control-label">"Basic" (liveSearch disabled)</label>
+
+      <div class="col-lg-10">
+        <select id="basic" class="selectpicker show-tick form-control">
+          <option>cow</option>
+          <option data-subtext="option subtext">bull</option>
+          <option class="get-class" disabled>ox</option>
+          <optgroup label="test" data-subtext="optgroup subtext">
+            <option>ASD</option>
+            <option selected>Bla</option>
+            <option>Ble</option>
+          </optgroup>
+        </select>
+      </div>
+    </div>
+  </form>
+
+  <hr>
+
+  <form class="form-horizontal" role="form">
+    <div class="form-group">
+      <label for="basic" class="col-lg-2 control-label">"Basic" (liveSearch enabled)</label>
+
+      <div class="col-lg-10">
+        <select id="basic" class="selectpicker show-tick form-control" data-live-search="true">
+          <option>cow</option>
+          <option data-subtext="option subtext">bull</option>
+          <option class="get-class" disabled>ox</option>
+          <optgroup label="test" data-subtext="optgroup subtext">
+            <option>ASD</option>
+            <option selected>Bla</option>
+            <option>Ble</option>
+          </optgroup>
+        </select>
+      </div>
+    </div>
+  </form>
+
+  <hr>
+  <form class="form-horizontal" role="form">
+    <div class="form-group">
+      <label for="basic2" class="col-lg-2 control-label">"Basic" (multiple, maxOptions=1)</label>
+
+      <div class="col-lg-10">
+        <select id="basic2" class="show-tick form-control" multiple>
+          <option>cow</option>
+          <option>bull</option>
+          <option class="get-class" disabled>ox</option>
+          <optgroup label="test" data-subtext="another test">
+            <option>ASD</option>
+            <option selected>Bla</option>
+            <option>Ble</option>
+          </optgroup>
+        </select>
+      </div>
+    </div>
+  </form>
+
+  <hr>
+  <form class="form-horizontal" role="form">
+    <div class="form-group">
+      <label for="maxOption2" class="col-lg-2 control-label">multiple, show-menu-arrow, maxOptions=2</label>
+
+      <div class="col-lg-10">
+        <select id="maxOption2" class="selectpicker show-menu-arrow form-control" multiple data-max-options="2">
+          <option>chicken</option>
+          <option>turkey</option>
+          <option disabled>duck</option>
+          <option>goose</option>
+        </select>
+      </div>
+    </div>
+  </form>
+
+  <hr>
+  <form class="form-inline">
+    <div class="form-group">
+      <label class="col-md-1 control-label" for="lunch">Lunch:</label>
+    </div>
+    <div class="form-group">
+      <select id="lunch" class="selectpicker" data-live-search="true" title="Please select a lunch ...">
+        <option>Hot Dog, Fries and a Soda</option>
+        <option>Burger, Shake and a Smile</option>
+        <option>Sugar, Spice and all things nice</option>
+        <option>Baby Back Ribs</option>
+        <option>A really really long option made to illustrate an issue with the live search in an inline form</option>
+      </select>
+    </div>
+  </form>
+
+  <hr>
+  <form class="form-horizontal" role="form">
+    <div class="form-group form-group-lg">
+      <label for="error" class="col-lg-2 control-label">error</label>
+
+      <div class="col-lg-10 error">
+        <select id="error" class="selectpicker show-tick form-control">
+          <option>pen</option>
+          <option>pencil</option>
+          <option selected>brush</option>
+        </select>
+      </div>
+    </div>
+  </form>
+
+  <hr>
+  <form class="form-horizontal" role="form">
+    <div class="form-group has-error form-group-lg">
+      <label class="control-label col-lg-2" for="country">error type 2</label>
+
+      <div class="col-lg-10">
+        <select id="country" name="country" class="form-control selectpicker">
+          <option>Argentina</option>
+          <option>United State</option>
+          <option>Mexico</option>
+        </select>
+
+        <p class="help-block">No service available in the selected country</p>
+      </div>
+    </div>
+  </form>
+
+  <hr>
+  <nav class="navbar navbar-default" role="navigation">
+    <div class="container-fluid">
+      <div class="navbar-header">
+        <a class="navbar-brand" href="#">Navbar</a>
+      </div>
+
+      <form class="navbar-form navbar-left" role="search">
+        <div class="form-group">
+          <select class="selectpicker" multiple data-live-search="true" data-live-search-placeholder="Search" data-actions-box="true">
+            <optgroup label="filter1">
+              <option>option1</option>
+              <option>option2</option>
+              <option>option3</option>
+              <option>option4</option>
+            </optgroup>
+            <optgroup label="filter2">
+              <option>option1</option>
+              <option>option2</option>
+              <option>option3</option>
+              <option>option4</option>
+            </optgroup>
+            <optgroup label="filter3">
+              <option>option1</option>
+              <option>option2</option>
+              <option>option3</option>
+              <option>option4</option>
+            </optgroup>
+          </select>
+        </div>
+
+        <div class="input-group">
+          <input type="text" class="form-control" placeholder="Search" name="q">
+
+          <div class="input-group-btn">
+            <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button>
+          </div>
+        </div>
+        <button type="submit" class="btn btn-default">Search</button>
+      </form>
+
+    </div>
+    <!-- .container-fluid -->
+  </nav>
+
+  <hr>
+  <select id="first-disabled" class="selectpicker" data-hide-disabled="true" data-live-search="true">
+    <optgroup disabled="disabled" label="disabled">
+      <option>Hidden</option>
+    </optgroup>
+    <optgroup label="Fruit">
+      <option>Apple</option>
+      <option>Orange</option>
+    </optgroup>
+    <optgroup label="Vegetable">
+      <option>Corn</option>
+      <option>Carrot</option>
+    </optgroup>
+  </select>
+
+  <hr>
+  <select id="first-disabled2" class="selectpicker" multiple data-hide-disabled="true" data-size="5">
+    <option>Apple</option>
+    <option>Banana</option>
+    <option>Orange</option>
+    <option>Pineapple</option>
+    <option>Apple2</option>
+    <option>Banana2</option>
+    <option>Orange2</option>
+    <option>Pineapple2</option>
+    <option>Apple2</option>
+    <option>Banana2</option>
+    <option>Orange2</option>
+    <option>Pineapple2</option>
+  </select>
+  <button id="special" class="btn btn-default">Hide selected by disabling</button>
+  <button id="special2" class="btn btn-default">Reset</button>
+  <p>Just select 1st element, click button and check list again</p>
+
+  <hr>
+  <div class="input-group">
+    <span class="input-group-addon">@</span>
+    <select class="form-control selectpicker">
+      <option>One</option>
+      <option>Two</option>
+      <option>Three</option>
+    </select>
+  </div>
+
+  <hr>
+  <div class="input-group">
+    <span class="input-group-addon">@</span>
+    <select class="form-control selectpicker" data-mobile="true">
+      <option>One</option>
+      <option>Two</option>
+      <option>Three</option>
+    </select>
+  </div>
+  <p>With <code>data-mobile="true"</code> option.</p>
+
+  <hr>
+  <select id="done" class="selectpicker" multiple data-done-button="true">
+    <option>Apple</option>
+    <option>Banana</option>
+    <option>Orange</option>
+    <option>Pineapple</option>
+    <option>Apple2</option>
+    <option>Banana2</option>
+    <option>Orange2</option>
+    <option>Pineapple2</option>
+    <option>Apple2</option>
+    <option>Banana2</option>
+    <option>Orange2</option>
+    <option>Pineapple2</option>
+  </select>
+
+  <hr>
+  <select id="tokens" class="selectpicker" multiple data-live-search="true">
+    <option data-tokens="first">I actually am called "first"</option>
+    <option data-tokens="second">And me "second"</option>
+    <option data-tokens="last">I am "last"</option>
+  </select>
+
+  <hr>
+  <form class="form-inline">
+    <div class="form-group">
+      <label class="col-md-1 control-label" for="lunchBegins">Lunch (Begins search):</label>
+    </div>
+    <div class="form-group">
+      <select id="lunchBegins" class="selectpicker" data-live-search="true" data-live-search-style="begins" title="Please select a lunch ...">
+        <option>Hot Dog, Fries and a Soda</option>
+        <option>Burger, Shake and a Smile</option>
+        <option>Sugar, Spice and all things nice</option>
+        <option>Baby Back Ribs</option>
+        <option>A really really long option made to illustrate an issue with the live search in an inline form</option>
+      </select>
+    </div>
+  </form>
+</div>
+
+<script>
+  $(document).ready(function () {
+    var mySelect = $('#first-disabled2');
+
+    $('#special').on('click', function () {
+      mySelect.find('option:selected').prop('disabled', true);
+      mySelect.selectpicker('refresh');
+    });
+
+    $('#special2').on('click', function () {
+      mySelect.find('option:disabled').prop('disabled', false);
+      mySelect.selectpicker('refresh');
+    });
+
+    $('#basic2').selectpicker({
+      liveSearch: true,
+      maxOptions: 1
+    });
+  });
+</script>
+</body>
+</html>



More information about the Mapbender_commits mailing list