]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
jquery-ui updated to 1.11.3
authorMikael Nordfeldth <mmn@hethane.se>
Sat, 7 Mar 2015 13:14:19 +0000 (14:14 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Sat, 7 Mar 2015 13:14:19 +0000 (14:14 +0100)
Checked all checkboxes on http://jqueryui.com/download/

17 files changed:
js/extlib/jquery-ui/css/smoothness/images/animated-overlay.gif [deleted file]
js/extlib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
js/extlib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
js/extlib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
js/extlib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png
js/extlib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png
js/extlib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png
js/extlib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png
js/extlib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png
js/extlib/jquery-ui/css/smoothness/jquery-ui.css
js/extlib/jquery-ui/css/smoothness/jquery-ui.min.css [deleted file]
js/extlib/jquery-ui/jquery-ui.js

diff --git a/js/extlib/jquery-ui/css/smoothness/images/animated-overlay.gif b/js/extlib/jquery-ui/css/smoothness/images/animated-overlay.gif
deleted file mode 100644 (file)
index d441f75..0000000
Binary files a/js/extlib/jquery-ui/css/smoothness/images/animated-overlay.gif and /dev/null differ
index e97ed12dcbb4a622caaa7e0a2733c510f840db52..b527b5a2d76c49b7c993ed3241401bc1bd2c4069 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png differ
index 9c371ee1c9ce43938b01446c9e83e823435b40ed..1b7f2e4fff4244730bf3f562772ef95d88d5f594 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png differ
index 3fce4a10da7340e48e30740bfd223c8d0bca0fea..55faf257dea5f19fd3dfcb7c2d3f899e2fcb6942 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png differ
index a75596bb1c1e14d9fa0f154fa38fba1313cfc35d..a97b928f282fdfca32eed74ac33371bd2485f3ab 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png differ
index fdef16fabb5dab0357b193e6b726887cf4ebfbaa..7ef631cecd41102f44ae57f73d8860b4cc76ac8a 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png differ
index 385c0a3c989042cdfa6ce7272b6b5d977b37ac5f..5aa4a22b34d6eb69a180184ca8bf37901e036bfb 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png differ
index 14f3ba7cf9929e19af4b0888c8bff8cfe70ef68b..920e13b6a61aba897fd634da06a531cd3242c7bb 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png differ
index af6b6aa6c547c1a1abe354a763403e2f49834cf9..4496537eb88038ee95c2b416cd8033fd0ad2f099 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ
index c1cb1170c8b3795835b8831ab81fa9ae63b606b1..24de795563734d08e7d7254a27628e7732a94bcb 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png differ
index 84b601bf0f726bf95801da487deaf2344a32e4b8..a2980c8e2116dedbf12ae383b9cc9585941bf5ad 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png differ
index b6db1acdd433be80a472b045018f25c7f2cf7e08..e7687a37243e903811d84325b2dbac9e7a13a82e 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png differ
index feea0e20264c4649b2ef03fe6705d69b4937c04e..a85f2c4e369b703f5ed99f85672ca52cec775f4c 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png differ
index ed5b6b0930f672fa08e9b9bdbe5e55370fd1dc30..7af13a6004008f4d683852d9098f23751ee6c293 100644 (file)
Binary files a/js/extlib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png and b/js/extlib/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png differ
index 9379ede653395c9aa670419ce95ec13c4fb5daef..05a54792b7c171c08d7dd004d25b840e52058eeb 100644 (file)
@@ -1,8 +1,8 @@
-/*! jQuery UI - v1.10.3 - 2013-09-12
+/*! jQuery UI - v1.11.3 - 2015-03-07
 * http://jqueryui.com
-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
 * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
 
 /* Layout helpers
 ----------------------------------*/
@@ -48,7 +48,7 @@
        left: 0;
        position: absolute;
        opacity: 0;
-       filter:Alpha(Opacity=0);
+       filter:Alpha(Opacity=0); /* support: IE8 */
 }
 
 .ui-front {
        width: 100%;
        height: 100%;
 }
+.ui-draggable-handle {
+       -ms-touch-action: none;
+       touch-action: none;
+}
 .ui-resizable {
        position: relative;
 }
@@ -93,6 +97,8 @@
        position: absolute;
        font-size: 0.1px;
        display: block;
+       -ms-touch-action: none;
+       touch-action: none;
 }
 .ui-resizable-disabled .ui-resizable-handle,
 .ui-resizable-autohide .ui-resizable-handle {
        right: -5px;
        top: -5px;
 }
+.ui-selectable {
+       -ms-touch-action: none;
+       touch-action: none;
+}
 .ui-selectable-helper {
        position: absolute;
        z-index: 100;
        border: 1px dotted black;
 }
+.ui-sortable-handle {
+       -ms-touch-action: none;
+       touch-action: none;
+}
 .ui-accordion .ui-accordion-header {
        display: block;
        cursor: pointer;
        position: relative;
-       margin-top: 2px;
+       margin: 2px 0 0 0;
        padding: .5em .5em .5em .7em;
        min-height: 0; /* support: IE7 */
+       font-size: 100%;
 }
 .ui-accordion .ui-accordion-icons {
        padding-left: 2.2em;
 }
-.ui-accordion .ui-accordion-noicons {
-       padding-left: .7em;
-}
 .ui-accordion .ui-accordion-icons .ui-accordion-icons {
        padding-left: 2.2em;
 }
@@ -347,12 +359,9 @@ button.ui-button::-moz-focus-inner {
        font-size: 1em;
        margin: 1px 0;
 }
-.ui-datepicker select.ui-datepicker-month-year {
-       width: 100%;
-}
 .ui-datepicker select.ui-datepicker-month,
 .ui-datepicker select.ui-datepicker-year {
-       width: 49%;
+       width: 45%;
 }
 .ui-datepicker table {
        width: 100%;
@@ -466,6 +475,7 @@ button.ui-button::-moz-focus-inner {
        border-left-width: 1px;
 }
 .ui-dialog {
+       overflow: hidden;
        position: absolute;
        top: 0;
        left: 0;
@@ -488,7 +498,7 @@ button.ui-button::-moz-focus-inner {
        position: absolute;
        right: .3em;
        top: 50%;
-       width: 21px;
+       width: 20px;
        margin: -10px 0 0 0;
        padding: 1px;
        height: 20px;
@@ -526,72 +536,56 @@ button.ui-button::-moz-focus-inner {
 }
 .ui-menu {
        list-style: none;
-       padding: 2px;
+       padding: 0;
        margin: 0;
        display: block;
        outline: none;
 }
 .ui-menu .ui-menu {
-       margin-top: -3px;
        position: absolute;
 }
 .ui-menu .ui-menu-item {
+       position: relative;
        margin: 0;
-       padding: 0;
-       width: 100%;
+       padding: 3px 1em 3px .4em;
+       cursor: pointer;
+       min-height: 0; /* support: IE7 */
        /* support: IE10, see #8844 */
-       list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
+       list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
 }
 .ui-menu .ui-menu-divider {
-       margin: 5px -2px 5px -2px;
+       margin: 5px 0;
        height: 0;
        font-size: 0;
        line-height: 0;
        border-width: 1px 0 0 0;
 }
-.ui-menu .ui-menu-item a {
-       text-decoration: none;
-       display: block;
-       padding: 2px .4em;
-       line-height: 1.5;
-       min-height: 0; /* support: IE7 */
-       font-weight: normal;
-}
-.ui-menu .ui-menu-item a.ui-state-focus,
-.ui-menu .ui-menu-item a.ui-state-active {
-       font-weight: normal;
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
        margin: -1px;
 }
 
-.ui-menu .ui-state-disabled {
-       font-weight: normal;
-       margin: .4em 0 .2em;
-       line-height: 1.5;
-}
-.ui-menu .ui-state-disabled a {
-       cursor: default;
-}
-
 /* icon support */
 .ui-menu-icons {
        position: relative;
 }
-.ui-menu-icons .ui-menu-item a {
-       position: relative;
+.ui-menu-icons .ui-menu-item {
        padding-left: 2em;
 }
 
 /* left-aligned */
 .ui-menu .ui-icon {
        position: absolute;
-       top: .2em;
+       top: 0;
+       bottom: 0;
        left: .2em;
+       margin: auto 0;
 }
 
 /* right-aligned */
 .ui-menu .ui-menu-icon {
-       position: static;
-       float: right;
+       left: auto;
+       right: 0;
 }
 .ui-progressbar {
        height: 2em;
@@ -603,14 +597,63 @@ button.ui-button::-moz-focus-inner {
        height: 100%;
 }
 .ui-progressbar .ui-progressbar-overlay {
-       background: url("images/animated-overlay.gif");
+       background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
        height: 100%;
-       filter: alpha(opacity=25);
+       filter: alpha(opacity=25); /* support: IE8 */
        opacity: 0.25;
 }
 .ui-progressbar-indeterminate .ui-progressbar-value {
        background-image: none;
 }
+.ui-selectmenu-menu {
+       padding: 0;
+       margin: 0;
+       position: absolute;
+       top: 0;
+       left: 0;
+       display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+       overflow: auto;
+       /* Support: IE7 */
+       overflow-x: hidden;
+       padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+       font-size: 1em;
+       font-weight: bold;
+       line-height: 1.5;
+       padding: 2px 0.4em;
+       margin: 0.5em 0 0 0;
+       height: auto;
+       border: 0;
+}
+.ui-selectmenu-open {
+       display: block;
+}
+.ui-selectmenu-button {
+       display: inline-block;
+       overflow: hidden;
+       position: relative;
+       text-decoration: none;
+       cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+       right: 0.5em;
+       left: auto;
+       margin-top: -8px;
+       position: absolute;
+       top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+       text-align: left;
+       padding: 0.4em 2.1em 0.4em 1em;
+       display: block;
+       line-height: 1.4;
+       overflow: hidden;
+       text-overflow: ellipsis;
+       white-space: nowrap;
+}
 .ui-slider {
        position: relative;
        text-align: left;
@@ -621,6 +664,8 @@ button.ui-button::-moz-focus-inner {
        width: 1.2em;
        height: 1.2em;
        cursor: default;
+       -ms-touch-action: none;
+       touch-action: none;
 }
 .ui-slider .ui-slider-range {
        position: absolute;
@@ -631,7 +676,7 @@ button.ui-button::-moz-focus-inner {
        background-position: 0 0;
 }
 
-/* For IE8 - See #6727 */
+/* support: IE8 - See #6727 */
 .ui-slider.ui-state-disabled .ui-slider-handle,
 .ui-slider.ui-state-disabled .ui-slider-range {
        filter: inherit;
@@ -704,13 +749,13 @@ button.ui-button::-moz-focus-inner {
        overflow: hidden;
        right: 0;
 }
-/* more specificity required here to overide default borders */
+/* more specificity required here to override default borders */
 .ui-spinner a.ui-spinner-button {
        border-top: none;
        border-bottom: none;
        border-right: none;
 }
-/* vertical centre icon */
+/* vertically center icon */
 .ui-spinner .ui-icon {
        position: absolute;
        margin-top: -8px;
@@ -747,7 +792,7 @@ button.ui-button::-moz-focus-inner {
        padding: 0;
        white-space: nowrap;
 }
-.ui-tabs .ui-tabs-nav li a {
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
        float: left;
        padding: .5em 1em;
        text-decoration: none;
@@ -756,13 +801,12 @@ button.ui-button::-moz-focus-inner {
        margin-bottom: -1px;
        padding-bottom: 1px;
 }
-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
        cursor: text;
 }
-.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
        cursor: pointer;
 }
 .ui-tabs .ui-tabs-panel {
@@ -801,7 +845,7 @@ body .ui-tooltip {
 }
 .ui-widget-content {
        border: 1px solid #aaaaaa;
-       background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
+       background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
        color: #222222;
 }
 .ui-widget-content a {
@@ -809,7 +853,7 @@ body .ui-tooltip {
 }
 .ui-widget-header {
        border: 1px solid #aaaaaa;
-       background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
+       background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
        color: #222222;
        font-weight: bold;
 }
@@ -823,7 +867,7 @@ body .ui-tooltip {
 .ui-widget-content .ui-state-default,
 .ui-widget-header .ui-state-default {
        border: 1px solid #d3d3d3;
-       background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
+       background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
        font-weight: normal;
        color: #555555;
 }
@@ -840,14 +884,18 @@ body .ui-tooltip {
 .ui-widget-content .ui-state-focus,
 .ui-widget-header .ui-state-focus {
        border: 1px solid #999999;
-       background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
+       background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
        font-weight: normal;
        color: #212121;
 }
 .ui-state-hover a,
 .ui-state-hover a:hover,
 .ui-state-hover a:link,
-.ui-state-hover a:visited {
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
        color: #212121;
        text-decoration: none;
 }
@@ -855,7 +903,7 @@ body .ui-tooltip {
 .ui-widget-content .ui-state-active,
 .ui-widget-header .ui-state-active {
        border: 1px solid #aaaaaa;
-       background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+       background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
        font-weight: normal;
        color: #212121;
 }
@@ -872,7 +920,7 @@ body .ui-tooltip {
 .ui-widget-content .ui-state-highlight,
 .ui-widget-header .ui-state-highlight {
        border: 1px solid #fcefa1;
-       background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
+       background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
        color: #363636;
 }
 .ui-state-highlight a,
@@ -884,7 +932,7 @@ body .ui-tooltip {
 .ui-widget-content .ui-state-error,
 .ui-widget-header .ui-state-error {
        border: 1px solid #cd0a0a;
-       background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
+       background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
        color: #cd0a0a;
 }
 .ui-state-error a,
@@ -906,18 +954,18 @@ body .ui-tooltip {
 .ui-widget-content .ui-priority-secondary,
 .ui-widget-header .ui-priority-secondary {
        opacity: .7;
-       filter:Alpha(Opacity=70);
+       filter:Alpha(Opacity=70); /* support: IE8 */
        font-weight: normal;
 }
 .ui-state-disabled,
 .ui-widget-content .ui-state-disabled,
 .ui-widget-header .ui-state-disabled {
        opacity: .35;
-       filter:Alpha(Opacity=35);
+       filter:Alpha(Opacity=35); /* support: IE8 */
        background-image: none;
 }
 .ui-state-disabled .ui-icon {
-       filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+       filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
 }
 
 /* Icons
@@ -930,27 +978,27 @@ body .ui-tooltip {
 }
 .ui-icon,
 .ui-widget-content .ui-icon {
-       background-image: url(images/ui-icons_222222_256x240.png);
+       background-image: url("images/ui-icons_222222_256x240.png");
 }
 .ui-widget-header .ui-icon {
-       background-image: url(images/ui-icons_222222_256x240.png);
+       background-image: url("images/ui-icons_222222_256x240.png");
 }
 .ui-state-default .ui-icon {
-       background-image: url(images/ui-icons_888888_256x240.png);
+       background-image: url("images/ui-icons_888888_256x240.png");
 }
 .ui-state-hover .ui-icon,
 .ui-state-focus .ui-icon {
-       background-image: url(images/ui-icons_454545_256x240.png);
+       background-image: url("images/ui-icons_454545_256x240.png");
 }
 .ui-state-active .ui-icon {
-       background-image: url(images/ui-icons_454545_256x240.png);
+       background-image: url("images/ui-icons_454545_256x240.png");
 }
 .ui-state-highlight .ui-icon {
-       background-image: url(images/ui-icons_2e83ff_256x240.png);
+       background-image: url("images/ui-icons_2e83ff_256x240.png");
 }
 .ui-state-error .ui-icon,
 .ui-state-error-text .ui-icon {
-       background-image: url(images/ui-icons_cd0a0a_256x240.png);
+       background-image: url("images/ui-icons_cd0a0a_256x240.png");
 }
 
 /* positioning */
@@ -1163,15 +1211,15 @@ body .ui-tooltip {
 
 /* Overlays */
 .ui-widget-overlay {
-       background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
+       background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
        opacity: .3;
-       filter: Alpha(Opacity=30);
+       filter: Alpha(Opacity=30); /* support: IE8 */
 }
 .ui-widget-shadow {
        margin: -8px 0 0 -8px;
        padding: 8px;
-       background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
+       background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
        opacity: .3;
-       filter: Alpha(Opacity=30);
+       filter: Alpha(Opacity=30); /* support: IE8 */
        border-radius: 8px;
 }
diff --git a/js/extlib/jquery-ui/css/smoothness/jquery-ui.min.css b/js/extlib/jquery-ui/css/smoothness/jquery-ui.min.css
deleted file mode 100644 (file)
index d5464c5..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.10.3 - 2013-09-12
-* http://jqueryui.com
-* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css, jquery.ui.theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:none}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:normal}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-menu .ui-state-disabled{font-weight:normal;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("images/animated-overlay.gif");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file
index 25148b0ea83260134f37c8de83c77c7e49399c3c..583a1b24b9cbb0d46edb9538b2992128bd02c63b 100644 (file)
@@ -1,18 +1,36 @@
-/*! jQuery UI - v1.10.3 - 2013-09-11
+/*! jQuery UI - v1.11.3 - 2015-03-01
 * http://jqueryui.com
-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
-* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
 
-(function( $, undefined ) {
+(function( factory ) {
+       if ( typeof define === "function" && define.amd ) {
+
+               // AMD. Register as an anonymous module.
+               define([ "jquery" ], factory );
+       } else {
+
+               // Browser globals
+               factory( jQuery );
+       }
+}(function( $ ) {
+/*!
+ * jQuery UI Core 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/ui-core/
+ */
 
-var uuid = 0,
-       runiqueId = /^ui-id-\d+$/;
 
 // $.ui might exist from components with no dependencies, e.g., $.ui.position
 $.ui = $.ui || {};
 
 $.extend( $.ui, {
-       version: "1.10.3",
+       version: "1.11.3",
 
        keyCode: {
                BACKSPACE: 8,
@@ -24,12 +42,6 @@ $.extend( $.ui, {
                ESCAPE: 27,
                HOME: 36,
                LEFT: 37,
-               NUMPAD_ADD: 107,
-               NUMPAD_DECIMAL: 110,
-               NUMPAD_DIVIDE: 111,
-               NUMPAD_ENTER: 108,
-               NUMPAD_MULTIPLY: 106,
-               NUMPAD_SUBTRACT: 109,
                PAGE_DOWN: 34,
                PAGE_UP: 33,
                PERIOD: 190,
@@ -42,77 +54,36 @@ $.extend( $.ui, {
 
 // plugins
 $.fn.extend({
-       focus: (function( orig ) {
-               return function( delay, fn ) {
-                       return typeof delay === "number" ?
-                               this.each(function() {
-                                       var elem = this;
-                                       setTimeout(function() {
-                                               $( elem ).focus();
-                                               if ( fn ) {
-                                                       fn.call( elem );
-                                               }
-                                       }, delay );
-                               }) :
-                               orig.apply( this, arguments );
-               };
-       })( $.fn.focus ),
-
-       scrollParent: function() {
-               var scrollParent;
-               if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) {
-                       scrollParent = this.parents().filter(function() {
-                               return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
-                       }).eq(0);
-               } else {
-                       scrollParent = this.parents().filter(function() {
-                               return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x"));
-                       }).eq(0);
-               }
+       scrollParent: function( includeHidden ) {
+               var position = this.css( "position" ),
+                       excludeStaticParent = position === "absolute",
+                       overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+                       scrollParent = this.parents().filter( function() {
+                               var parent = $( this );
+                               if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+                                       return false;
+                               }
+                               return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
+                       }).eq( 0 );
 
-               return (/fixed/).test(this.css("position")) || !scrollParent.length ? $(document) : scrollParent;
+               return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
        },
 
-       zIndex: function( zIndex ) {
-               if ( zIndex !== undefined ) {
-                       return this.css( "zIndex", zIndex );
-               }
+       uniqueId: (function() {
+               var uuid = 0;
 
-               if ( this.length ) {
-                       var elem = $( this[ 0 ] ), position, value;
-                       while ( elem.length && elem[ 0 ] !== document ) {
-                               // Ignore z-index if position is set to a value where z-index is ignored by the browser
-                               // This makes behavior of this function consistent across browsers
-                               // WebKit always returns auto if the element is positioned
-                               position = elem.css( "position" );
-                               if ( position === "absolute" || position === "relative" || position === "fixed" ) {
-                                       // IE returns 0 when zIndex is not specified
-                                       // other browsers return a string
-                                       // we ignore the case of nested elements with an explicit value of 0
-                                       // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
-                                       value = parseInt( elem.css( "zIndex" ), 10 );
-                                       if ( !isNaN( value ) && value !== 0 ) {
-                                               return value;
-                                       }
+               return function() {
+                       return this.each(function() {
+                               if ( !this.id ) {
+                                       this.id = "ui-id-" + ( ++uuid );
                                }
-                               elem = elem.parent();
-                       }
-               }
-
-               return 0;
-       },
-
-       uniqueId: function() {
-               return this.each(function() {
-                       if ( !this.id ) {
-                               this.id = "ui-id-" + (++uuid);
-                       }
-               });
-       },
+                       });
+               };
+       })(),
 
        removeUniqueId: function() {
                return this.each(function() {
-                       if ( runiqueId.test( this.id ) ) {
+                       if ( /^ui-id-\d+$/.test( this.id ) ) {
                                $( this ).removeAttr( "id" );
                        }
                });
@@ -129,10 +100,10 @@ function focusable( element, isTabIndexNotNaN ) {
                if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
                        return false;
                }
-               img = $( "img[usemap=#" + mapName + "]" )[0];
+               img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
                return !!img && visible( img );
        }
-       return ( /input|select|textarea|button|object/.test( nodeName ) ?
+       return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
                !element.disabled :
                "a" === nodeName ?
                        element.href || isTabIndexNotNaN :
@@ -240,93 +211,136 @@ if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
        })( $.fn.removeData );
 }
 
-
-
-
-
 // deprecated
 $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
 
-$.support.selectstart = "onselectstart" in document.createElement( "div" );
 $.fn.extend({
-       disableSelection: function() {
-               return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
-                       ".ui-disableSelection", function( event ) {
+       focus: (function( orig ) {
+               return function( delay, fn ) {
+                       return typeof delay === "number" ?
+                               this.each(function() {
+                                       var elem = this;
+                                       setTimeout(function() {
+                                               $( elem ).focus();
+                                               if ( fn ) {
+                                                       fn.call( elem );
+                                               }
+                                       }, delay );
+                               }) :
+                               orig.apply( this, arguments );
+               };
+       })( $.fn.focus ),
+
+       disableSelection: (function() {
+               var eventType = "onselectstart" in document.createElement( "div" ) ?
+                       "selectstart" :
+                       "mousedown";
+
+               return function() {
+                       return this.bind( eventType + ".ui-disableSelection", function( event ) {
                                event.preventDefault();
                        });
-       },
+               };
+       })(),
 
        enableSelection: function() {
                return this.unbind( ".ui-disableSelection" );
-       }
-});
+       },
 
-$.extend( $.ui, {
-       // $.ui.plugin is deprecated. Use $.widget() extensions instead.
-       plugin: {
-               add: function( module, option, set ) {
-                       var i,
-                               proto = $.ui[ module ].prototype;
-                       for ( i in set ) {
-                               proto.plugins[ i ] = proto.plugins[ i ] || [];
-                               proto.plugins[ i ].push( [ option, set[ i ] ] );
-                       }
-               },
-               call: function( instance, name, args ) {
-                       var i,
-                               set = instance.plugins[ name ];
-                       if ( !set || !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) {
-                               return;
-                       }
+       zIndex: function( zIndex ) {
+               if ( zIndex !== undefined ) {
+                       return this.css( "zIndex", zIndex );
+               }
 
-                       for ( i = 0; i < set.length; i++ ) {
-                               if ( instance.options[ set[ i ][ 0 ] ] ) {
-                                       set[ i ][ 1 ].apply( instance.element, args );
+               if ( this.length ) {
+                       var elem = $( this[ 0 ] ), position, value;
+                       while ( elem.length && elem[ 0 ] !== document ) {
+                               // Ignore z-index if position is set to a value where z-index is ignored by the browser
+                               // This makes behavior of this function consistent across browsers
+                               // WebKit always returns auto if the element is positioned
+                               position = elem.css( "position" );
+                               if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+                                       // IE returns 0 when zIndex is not specified
+                                       // other browsers return a string
+                                       // we ignore the case of nested elements with an explicit value of 0
+                                       // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+                                       value = parseInt( elem.css( "zIndex" ), 10 );
+                                       if ( !isNaN( value ) && value !== 0 ) {
+                                               return value;
+                                       }
                                }
+                               elem = elem.parent();
                        }
                }
-       },
 
-       // only used by resizable
-       hasScroll: function( el, a ) {
+               return 0;
+       }
+});
 
-               //If overflow is hidden, the element might have extra content, but the user wants to hide it
-               if ( $( el ).css( "overflow" ) === "hidden") {
-                       return false;
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+$.ui.plugin = {
+       add: function( module, option, set ) {
+               var i,
+                       proto = $.ui[ module ].prototype;
+               for ( i in set ) {
+                       proto.plugins[ i ] = proto.plugins[ i ] || [];
+                       proto.plugins[ i ].push( [ option, set[ i ] ] );
                }
+       },
+       call: function( instance, name, args, allowDisconnected ) {
+               var i,
+                       set = instance.plugins[ name ];
 
-               var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
-                       has = false;
+               if ( !set ) {
+                       return;
+               }
 
-               if ( el[ scroll ] > 0 ) {
-                       return true;
+               if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+                       return;
                }
 
-               // TODO: determine which cases actually cause this to happen
-               // if the element doesn't have the scroll set, see if it's possible to
-               // set the scroll
-               el[ scroll ] = 1;
-               has = ( el[ scroll ] > 0 );
-               el[ scroll ] = 0;
-               return has;
+               for ( i = 0; i < set.length; i++ ) {
+                       if ( instance.options[ set[ i ][ 0 ] ] ) {
+                               set[ i ][ 1 ].apply( instance.element, args );
+                       }
+               }
        }
-});
+};
 
-})( jQuery );
-(function( $, undefined ) {
 
-var uuid = 0,
-       slice = Array.prototype.slice,
-       _cleanData = $.cleanData;
-$.cleanData = function( elems ) {
-       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-               try {
-                       $( elem ).triggerHandler( "remove" );
-               // http://bugs.jquery.com/ticket/8235
-               } catch( e ) {}
-       }
-       _cleanData( elems );
-};
+/*!
+ * jQuery UI Widget 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+
+
+var widget_uuid = 0,
+       widget_slice = Array.prototype.slice;
+
+$.cleanData = (function( orig ) {
+       return function( elems ) {
+               var events, elem, i;
+               for ( i = 0; (elem = elems[i]) != null; i++ ) {
+                       try {
+
+                               // Only trigger remove when necessary to save time
+                               events = $._data( elem, "events" );
+                               if ( events && events.remove ) {
+                                       $( elem ).triggerHandler( "remove" );
+                               }
+
+                       // http://bugs.jquery.com/ticket/8235
+                       } catch ( e ) {}
+               }
+               orig( elems );
+       };
+})( $.cleanData );
 
 $.widget = function( name, base, prototype ) {
        var fullName, existingConstructor, constructor, basePrototype,
@@ -411,7 +425,7 @@ $.widget = function( name, base, prototype ) {
                // TODO: remove support for widgetEventPrefix
                // always use the name + a colon as the prefix, e.g., draggable:start
                // don't prefix for widgets that aren't DOM-based
-               widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+               widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
        }, proxiedPrototype, {
                constructor: constructor,
                namespace: namespace,
@@ -439,10 +453,12 @@ $.widget = function( name, base, prototype ) {
        }
 
        $.widget.bridge( name, constructor );
+
+       return constructor;
 };
 
 $.widget.extend = function( target ) {
-       var input = slice.call( arguments, 1 ),
+       var input = widget_slice.call( arguments, 1 ),
                inputIndex = 0,
                inputLength = input.length,
                key,
@@ -471,18 +487,17 @@ $.widget.bridge = function( name, object ) {
        var fullName = object.prototype.widgetFullName || name;
        $.fn[ name ] = function( options ) {
                var isMethodCall = typeof options === "string",
-                       args = slice.call( arguments, 1 ),
+                       args = widget_slice.call( arguments, 1 ),
                        returnValue = this;
 
-               // allow multiple hashes to be passed on init
-               options = !isMethodCall && args.length ?
-                       $.widget.extend.apply( null, [ options ].concat(args) ) :
-                       options;
-
                if ( isMethodCall ) {
                        this.each(function() {
                                var methodValue,
                                        instance = $.data( this, fullName );
+                               if ( options === "instance" ) {
+                                       returnValue = instance;
+                                       return false;
+                               }
                                if ( !instance ) {
                                        return $.error( "cannot call methods on " + name + " prior to initialization; " +
                                                "attempted to call method '" + options + "'" );
@@ -499,10 +514,19 @@ $.widget.bridge = function( name, object ) {
                                }
                        });
                } else {
+
+                       // Allow multiple hashes to be passed on init
+                       if ( args.length ) {
+                               options = $.widget.extend.apply( null, [ options ].concat(args) );
+                       }
+
                        this.each(function() {
                                var instance = $.data( this, fullName );
                                if ( instance ) {
-                                       instance.option( options || {} )._init();
+                                       instance.option( options || {} );
+                                       if ( instance._init ) {
+                                               instance._init();
+                                       }
                                } else {
                                        $.data( this, fullName, new object( options, this ) );
                                }
@@ -529,12 +553,8 @@ $.Widget.prototype = {
        _createWidget: function( options, element ) {
                element = $( element || this.defaultElement || this )[ 0 ];
                this.element = $( element );
-               this.uuid = uuid++;
+               this.uuid = widget_uuid++;
                this.eventNamespace = "." + this.widgetName + this.uuid;
-               this.options = $.widget.extend( {},
-                       this.options,
-                       this._getCreateOptions(),
-                       options );
 
                this.bindings = $();
                this.hoverable = $();
@@ -557,6 +577,11 @@ $.Widget.prototype = {
                        this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
                }
 
+               this.options = $.widget.extend( {},
+                       this.options,
+                       this._getCreateOptions(),
+                       options );
+
                this._create();
                this._trigger( "create", null, this._getCreateEventData() );
                this._init();
@@ -572,9 +597,6 @@ $.Widget.prototype = {
                // all event bindings should go through this._on()
                this.element
                        .unbind( this.eventNamespace )
-                       // 1.9 BC for #7810
-                       // TODO remove dual storage
-                       .removeData( this.widgetName )
                        .removeData( this.widgetFullName )
                        // support: jquery <1.6.3
                        // http://bugs.jquery.com/ticket/9413
@@ -620,12 +642,12 @@ $.Widget.prototype = {
                                        curOption = curOption[ parts[ i ] ];
                                }
                                key = parts.pop();
-                               if ( value === undefined ) {
+                               if ( arguments.length === 1 ) {
                                        return curOption[ key ] === undefined ? null : curOption[ key ];
                                }
                                curOption[ key ] = value;
                        } else {
-                               if ( value === undefined ) {
+                               if ( arguments.length === 1 ) {
                                        return this.options[ key ] === undefined ? null : this.options[ key ];
                                }
                                options[ key ] = value;
@@ -650,20 +672,23 @@ $.Widget.prototype = {
 
                if ( key === "disabled" ) {
                        this.widget()
-                               .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
-                               .attr( "aria-disabled", value );
-                       this.hoverable.removeClass( "ui-state-hover" );
-                       this.focusable.removeClass( "ui-state-focus" );
+                               .toggleClass( this.widgetFullName + "-disabled", !!value );
+
+                       // If the widget is becoming disabled, then nothing is interactive
+                       if ( value ) {
+                               this.hoverable.removeClass( "ui-state-hover" );
+                               this.focusable.removeClass( "ui-state-focus" );
+                       }
                }
 
                return this;
        },
 
        enable: function() {
-               return this._setOption( "disabled", false );
+               return this._setOptions({ disabled: false });
        },
        disable: function() {
-               return this._setOption( "disabled", true );
+               return this._setOptions({ disabled: true });
        },
 
        _on: function( suppressDisabledCheck, element, handlers ) {
@@ -683,7 +708,6 @@ $.Widget.prototype = {
                        element = this.element;
                        delegateElement = this.widget();
                } else {
-                       // accept selectors, DOM elements
                        element = delegateElement = $( element );
                        this.bindings = this.bindings.add( element );
                }
@@ -708,7 +732,7 @@ $.Widget.prototype = {
                                        handler.guid || handlerProxy.guid || $.guid++;
                        }
 
-                       var match = event.match( /^(\w+)\s*(.*)$/ ),
+                       var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
                                eventName = match[1] + instance.eventNamespace,
                                selector = match[2];
                        if ( selector ) {
@@ -720,8 +744,14 @@ $.Widget.prototype = {
        },
 
        _off: function( element, eventName ) {
-               eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+               eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+                       this.eventNamespace;
                element.unbind( eventName ).undelegate( eventName );
+
+               // Clear the stack to avoid memory leaks (#10056)
+               this.bindings = $( this.bindings.not( element ).get() );
+               this.focusable = $( this.focusable.not( element ).get() );
+               this.hoverable = $( this.hoverable.not( element ).get() );
        },
 
        _delay: function( handler, delay ) {
@@ -823,16 +853,28 @@ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
        };
 });
 
-})( jQuery );
-(function( $, undefined ) {
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Mouse 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/mouse/
+ */
+
 
 var mouseHandled = false;
 $( document ).mouseup( function() {
        mouseHandled = false;
 });
 
-$.widget("ui.mouse", {
-       version: "1.10.3",
+var mouse = $.widget("ui.mouse", {
+       version: "1.11.3",
        options: {
                cancel: "input,textarea,button,select,option",
                distance: 1,
@@ -842,10 +884,10 @@ $.widget("ui.mouse", {
                var that = this;
 
                this.element
-                       .bind("mousedown."+this.widgetName, function(event) {
+                       .bind("mousedown." + this.widgetName, function(event) {
                                return that._mouseDown(event);
                        })
-                       .bind("click."+this.widgetName, function(event) {
+                       .bind("click." + this.widgetName, function(event) {
                                if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
                                        $.removeData(event.target, that.widgetName + ".preventClickEvent");
                                        event.stopImmediatePropagation();
@@ -859,17 +901,21 @@ $.widget("ui.mouse", {
        // TODO: make sure destroying one instance of mouse doesn't mess with
        // other instances of mouse
        _mouseDestroy: function() {
-               this.element.unbind("."+this.widgetName);
+               this.element.unbind("." + this.widgetName);
                if ( this._mouseMoveDelegate ) {
-                       $(document)
-                               .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
-                               .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+                       this.document
+                               .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+                               .unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
                }
        },
 
        _mouseDown: function(event) {
                // don't let more than one widget handle mouseStart
-               if( mouseHandled ) { return; }
+               if ( mouseHandled ) {
+                       return;
+               }
+
+               this._mouseMoved = false;
 
                // we may have missed mouseup (out of window)
                (this._mouseStarted && this._mouseUp(event));
@@ -912,9 +958,10 @@ $.widget("ui.mouse", {
                this._mouseUpDelegate = function(event) {
                        return that._mouseUp(event);
                };
-               $(document)
-                       .bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
-                       .bind("mouseup."+this.widgetName, this._mouseUpDelegate);
+
+               this.document
+                       .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+                       .bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
 
                event.preventDefault();
 
@@ -923,9 +970,23 @@ $.widget("ui.mouse", {
        },
 
        _mouseMove: function(event) {
-               // IE mouseup check - mouseup happened when mouse was out of window
-               if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
-                       return this._mouseUp(event);
+               // Only check for mouseups outside the document if you've moved inside the document
+               // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+               // fire a mousemove event if content is placed under the cursor. See #7778
+               // Support: IE <9
+               if ( this._mouseMoved ) {
+                       // IE mouseup check - mouseup happened when mouse was out of window
+                       if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+                               return this._mouseUp(event);
+
+                       // Iframe mouseup check - mouseup occurred in another document
+                       } else if ( !event.which ) {
+                               return this._mouseUp( event );
+                       }
+               }
+
+               if ( event.which || event.button ) {
+                       this._mouseMoved = true;
                }
 
                if (this._mouseStarted) {
@@ -943,9 +1004,9 @@ $.widget("ui.mouse", {
        },
 
        _mouseUp: function(event) {
-               $(document)
-                       .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
-                       .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
+               this.document
+                       .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+                       .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
 
                if (this._mouseStarted) {
                        this._mouseStarted = false;
@@ -957,6 +1018,7 @@ $.widget("ui.mouse", {
                        this._mouseStop(event);
                }
 
+               mouseHandled = false;
                return false;
        },
 
@@ -979,12 +1041,23 @@ $.widget("ui.mouse", {
        _mouseCapture: function(/* event */) { return true; }
 });
 
-})(jQuery);
-(function( $, undefined ) {
+
+/*!
+ * jQuery UI Position 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+(function() {
 
 $.ui = $.ui || {};
 
-var cachedScrollbarWidth,
+var cachedScrollbarWidth, supportsOffsetFractions,
        max = Math.max,
        abs = Math.abs,
        round = Math.round,
@@ -1042,7 +1115,7 @@ $.position = {
                        return cachedScrollbarWidth;
                }
                var w1, w2,
-                       div = $( "<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+                       div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
                        innerDiv = div.children()[0];
 
                $( "body" ).append( div );
@@ -1060,8 +1133,10 @@ $.position = {
                return (cachedScrollbarWidth = w1 - w2);
        },
        getScrollInfo: function( within ) {
-               var overflowX = within.isWindow ? "" : within.element.css( "overflow-x" ),
-                       overflowY = within.isWindow ? "" : within.element.css( "overflow-y" ),
+               var overflowX = within.isWindow || within.isDocument ? "" :
+                               within.element.css( "overflow-x" ),
+                       overflowY = within.isWindow || within.isDocument ? "" :
+                               within.element.css( "overflow-y" ),
                        hasOverflowX = overflowX === "scroll" ||
                                ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
                        hasOverflowY = overflowY === "scroll" ||
@@ -1073,15 +1148,20 @@ $.position = {
        },
        getWithinInfo: function( element ) {
                var withinElement = $( element || window ),
-                       isWindow = $.isWindow( withinElement[0] );
+                       isWindow = $.isWindow( withinElement[0] ),
+                       isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
                return {
                        element: withinElement,
                        isWindow: isWindow,
+                       isDocument: isDocument,
                        offset: withinElement.offset() || { left: 0, top: 0 },
                        scrollLeft: withinElement.scrollLeft(),
                        scrollTop: withinElement.scrollTop(),
-                       width: isWindow ? withinElement.width() : withinElement.outerWidth(),
-                       height: isWindow ? withinElement.height() : withinElement.outerHeight()
+
+                       // support: jQuery 1.6.x
+                       // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+                       width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+                       height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
                };
        }
 };
@@ -1193,7 +1273,7 @@ $.fn.position = function( options ) {
                position.top += myOffset[ 1 ];
 
                // if the browser doesn't support fractions, then round for consistent results
-               if ( !$.support.offsetFractions ) {
+               if ( !supportsOffsetFractions ) {
                        position.left = round( position.left );
                        position.top = round( position.top );
                }
@@ -1217,7 +1297,7 @@ $.fn.position = function( options ) {
                                        my: options.my,
                                        at: options.at,
                                        within: within,
-                                       elem : elem
+                                       elem: elem
                                });
                        }
                });
@@ -1371,8 +1451,7 @@ $.ui.position = {
                                if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
                                        position.left += myOffset + atOffset + offset;
                                }
-                       }
-                       else if ( overRight > 0 ) {
+                       } else if ( overRight > 0 ) {
                                newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
                                if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
                                        position.left += myOffset + atOffset + offset;
@@ -1403,13 +1482,12 @@ $.ui.position = {
                                newOverBottom;
                        if ( overTop < 0 ) {
                                newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
-                               if ( ( position.top + myOffset + atOffset + offset) > overTop && ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) ) {
+                               if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
                                        position.top += myOffset + atOffset + offset;
                                }
-                       }
-                       else if ( overBottom > 0 ) {
-                               newOverTop = position.top -  data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
-                               if ( ( position.top + myOffset + atOffset + offset) > overBottom && ( newOverTop > 0 || abs( newOverTop ) < overBottom ) ) {
+                       } else if ( overBottom > 0 ) {
+                               newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+                               if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
                                        position.top += myOffset + atOffset + offset;
                                }
                        }
@@ -1428,7 +1506,7 @@ $.ui.position = {
 };
 
 // fraction support test
-(function () {
+(function() {
        var testElement, testElementParent, testElementStyle, offsetLeft, i,
                body = document.getElementsByTagName( "body" )[ 0 ],
                div = document.createElement( "div" );
@@ -1460,17 +1538,31 @@ $.ui.position = {
        div.style.cssText = "position: absolute; left: 10.7432222px;";
 
        offsetLeft = $( div ).offset().left;
-       $.support.offsetFractions = offsetLeft > 10 && offsetLeft < 11;
+       supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
 
        testElement.innerHTML = "";
        testElementParent.removeChild( testElement );
 })();
 
-}( jQuery ) );
-(function( $, undefined ) {
+})();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI Draggable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/draggable/
+ */
+
 
 $.widget("ui.draggable", $.ui.mouse, {
-       version: "1.10.3",
+       version: "1.11.3",
        widgetEventPrefix: "drag",
        options: {
                addClasses: true,
@@ -1505,8 +1597,8 @@ $.widget("ui.draggable", $.ui.mouse, {
        },
        _create: function() {
 
-               if (this.options.helper === "original" && !(/^(?:r|a|f)/).test(this.element.css("position"))) {
-                       this.element[0].style.position = "relative";
+               if ( this.options.helper === "original" ) {
+                       this._setPositionRelative();
                }
                if (this.options.addClasses){
                        this.element.addClass("ui-draggable");
@@ -1514,20 +1606,34 @@ $.widget("ui.draggable", $.ui.mouse, {
                if (this.options.disabled){
                        this.element.addClass("ui-draggable-disabled");
                }
+               this._setHandleClassName();
 
                this._mouseInit();
+       },
 
+       _setOption: function( key, value ) {
+               this._super( key, value );
+               if ( key === "handle" ) {
+                       this._removeHandleClassName();
+                       this._setHandleClassName();
+               }
        },
 
        _destroy: function() {
+               if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+                       this.destroyOnClear = true;
+                       return;
+               }
                this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+               this._removeHandleClassName();
                this._mouseDestroy();
        },
 
        _mouseCapture: function(event) {
-
                var o = this.options;
 
+               this._blurActiveElement( event );
+
                // among others, prevent a drag on a resizable-handle
                if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
                        return false;
@@ -1539,34 +1645,68 @@ $.widget("ui.draggable", $.ui.mouse, {
                        return false;
                }
 
-               $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
-                       $("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>")
-                       .css({
-                               width: this.offsetWidth+"px", height: this.offsetHeight+"px",
-                               position: "absolute", opacity: "0.001", zIndex: 1000
-                       })
-                       .css($(this).offset())
-                       .appendTo("body");
-               });
+               this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
 
                return true;
 
        },
 
-       _mouseStart: function(event) {
+       _blockFrames: function( selector ) {
+               this.iframeBlocks = this.document.find( selector ).map(function() {
+                       var iframe = $( this );
 
-               var o = this.options;
+                       return $( "<div>" )
+                               .css( "position", "absolute" )
+                               .appendTo( iframe.parent() )
+                               .outerWidth( iframe.outerWidth() )
+                               .outerHeight( iframe.outerHeight() )
+                               .offset( iframe.offset() )[ 0 ];
+               });
+       },
 
-               //Create and append the visible helper
-               this.helper = this._createHelper(event);
+       _unblockFrames: function() {
+               if ( this.iframeBlocks ) {
+                       this.iframeBlocks.remove();
+                       delete this.iframeBlocks;
+               }
+       },
 
-               this.helper.addClass("ui-draggable-dragging");
+       _blurActiveElement: function( event ) {
+               var document = this.document[ 0 ];
 
-               //Cache the helper size
+               // Only need to blur if the event occurred on the draggable itself, see #10527
+               if ( !this.handleElement.is( event.target ) ) {
+                       return;
+               }
+
+               // support: IE9
+               // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+               try {
+
+                       // Support: IE9, IE10
+                       // If the <body> is blurred, IE will switch windows, see #9520
+                       if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
+
+                               // Blur any element that currently has focus, see #4261
+                               $( document.activeElement ).blur();
+                       }
+               } catch ( error ) {}
+       },
+
+       _mouseStart: function(event) {
+
+               var o = this.options;
+
+               //Create and append the visible helper
+               this.helper = this._createHelper(event);
+
+               this.helper.addClass("ui-draggable-dragging");
+
+               //Cache the helper size
                this._cacheHelperProportions();
 
                //If ddmanager is used for droppables, set the global draggable
-               if($.ui.ddmanager) {
+               if ($.ui.ddmanager) {
                        $.ui.ddmanager.current = this;
                }
 
@@ -1580,31 +1720,18 @@ $.widget("ui.draggable", $.ui.mouse, {
 
                //Store the helper's css position
                this.cssPosition = this.helper.css( "position" );
-               this.scrollParent = this.helper.scrollParent();
+               this.scrollParent = this.helper.scrollParent( true );
                this.offsetParent = this.helper.offsetParent();
-               this.offsetParentCssPosition = this.offsetParent.css( "position" );
+               this.hasFixedAncestor = this.helper.parents().filter(function() {
+                               return $( this ).css( "position" ) === "fixed";
+                       }).length > 0;
 
                //The element's absolute position on the page minus margins
-               this.offset = this.positionAbs = this.element.offset();
-               this.offset = {
-                       top: this.offset.top - this.margins.top,
-                       left: this.offset.left - this.margins.left
-               };
-
-               //Reset scroll cache
-               this.offset.scroll = false;
-
-               $.extend(this.offset, {
-                       click: { //Where the click happened, relative to the element
-                               left: event.pageX - this.offset.left,
-                               top: event.pageY - this.offset.top
-                       },
-                       parent: this._getParentOffset(),
-                       relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
-               });
+               this.positionAbs = this.element.offset();
+               this._refreshOffsets( event );
 
                //Generate the original position
-               this.originalPosition = this.position = this._generatePosition(event);
+               this.originalPosition = this.position = this._generatePosition( event, false );
                this.originalPageX = event.pageX;
                this.originalPageY = event.pageY;
 
@@ -1615,7 +1742,7 @@ $.widget("ui.draggable", $.ui.mouse, {
                this._setContainment();
 
                //Trigger event + callbacks
-               if(this._trigger("start", event) === false) {
+               if (this._trigger("start", event) === false) {
                        this._clear();
                        return false;
                }
@@ -1628,6 +1755,9 @@ $.widget("ui.draggable", $.ui.mouse, {
                        $.ui.ddmanager.prepareOffsets(this, event);
                }
 
+               // Reset helper's right/bottom css if they're set and set explicit width/height instead
+               // as this prevents resizing of elements with right/bottom set (see #7772)
+               this._normalizeRightBottom();
 
                this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
 
@@ -1639,33 +1769,45 @@ $.widget("ui.draggable", $.ui.mouse, {
                return true;
        },
 
+       _refreshOffsets: function( event ) {
+               this.offset = {
+                       top: this.positionAbs.top - this.margins.top,
+                       left: this.positionAbs.left - this.margins.left,
+                       scroll: false,
+                       parent: this._getParentOffset(),
+                       relative: this._getRelativeOffset()
+               };
+
+               this.offset.click = {
+                       left: event.pageX - this.offset.left,
+                       top: event.pageY - this.offset.top
+               };
+       },
+
        _mouseDrag: function(event, noPropagation) {
                // reset any necessary cached properties (see #5009)
-               if ( this.offsetParentCssPosition === "fixed" ) {
+               if ( this.hasFixedAncestor ) {
                        this.offset.parent = this._getParentOffset();
                }
 
                //Compute the helpers position
-               this.position = this._generatePosition(event);
+               this.position = this._generatePosition( event, true );
                this.positionAbs = this._convertPositionTo("absolute");
 
                //Call plugins and callbacks and use the resulting position if something is returned
                if (!noPropagation) {
                        var ui = this._uiHash();
-                       if(this._trigger("drag", event, ui) === false) {
+                       if (this._trigger("drag", event, ui) === false) {
                                this._mouseUp({});
                                return false;
                        }
                        this.position = ui.position;
                }
 
-               if(!this.options.axis || this.options.axis !== "y") {
-                       this.helper[0].style.left = this.position.left+"px";
-               }
-               if(!this.options.axis || this.options.axis !== "x") {
-                       this.helper[0].style.top = this.position.top+"px";
-               }
-               if($.ui.ddmanager) {
+               this.helper[ 0 ].style.left = this.position.left + "px";
+               this.helper[ 0 ].style.top = this.position.top + "px";
+
+               if ($.ui.ddmanager) {
                        $.ui.ddmanager.drag(this, event);
                }
 
@@ -1682,24 +1824,19 @@ $.widget("ui.draggable", $.ui.mouse, {
                }
 
                //if a drop comes from outside (a sortable)
-               if(this.dropped) {
+               if (this.dropped) {
                        dropped = this.dropped;
                        this.dropped = false;
                }
 
-               //if the original element is no longer in the DOM don't bother to continue (see #8269)
-               if ( this.options.helper === "original" && !$.contains( this.element[ 0 ].ownerDocument, this.element[ 0 ] ) ) {
-                       return false;
-               }
-
-               if((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+               if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
                        $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
-                               if(that._trigger("stop", event) !== false) {
+                               if (that._trigger("stop", event) !== false) {
                                        that._clear();
                                }
                        });
                } else {
-                       if(this._trigger("stop", event) !== false) {
+                       if (this._trigger("stop", event) !== false) {
                                this._clear();
                        }
                }
@@ -1707,23 +1844,26 @@ $.widget("ui.draggable", $.ui.mouse, {
                return false;
        },
 
-       _mouseUp: function(event) {
-               //Remove frame helpers
-               $("div.ui-draggable-iframeFix").each(function() {
-                       this.parentNode.removeChild(this);
-               });
+       _mouseUp: function( event ) {
+               this._unblockFrames();
 
                //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
-               if( $.ui.ddmanager ) {
+               if ( $.ui.ddmanager ) {
                        $.ui.ddmanager.dragStop(this, event);
                }
 
+               // Only need to focus if the event occurred on the draggable itself, see #10527
+               if ( this.handleElement.is( event.target ) ) {
+                       // The interaction is over; whether or not the click resulted in a drag, focus the element
+                       this.element.focus();
+               }
+
                return $.ui.mouse.prototype._mouseUp.call(this, event);
        },
 
        cancel: function() {
 
-               if(this.helper.is(".ui-draggable-dragging")) {
+               if (this.helper.is(".ui-draggable-dragging")) {
                        this._mouseUp({});
                } else {
                        this._clear();
@@ -1739,16 +1879,38 @@ $.widget("ui.draggable", $.ui.mouse, {
                        true;
        },
 
+       _setHandleClassName: function() {
+               this.handleElement = this.options.handle ?
+                       this.element.find( this.options.handle ) : this.element;
+               this.handleElement.addClass( "ui-draggable-handle" );
+       },
+
+       _removeHandleClassName: function() {
+               this.handleElement.removeClass( "ui-draggable-handle" );
+       },
+
        _createHelper: function(event) {
 
                var o = this.options,
-                       helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper === "clone" ? this.element.clone().removeAttr("id") : this.element);
-
-               if(!helper.parents("body").length) {
+                       helperIsFunction = $.isFunction( o.helper ),
+                       helper = helperIsFunction ?
+                               $( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+                               ( o.helper === "clone" ?
+                                       this.element.clone().removeAttr( "id" ) :
+                                       this.element );
+
+               if (!helper.parents("body").length) {
                        helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
                }
 
-               if(helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+               // http://bugs.jqueryui.com/ticket/9446
+               // a helper function can return the original element
+               // which wouldn't have been set to relative in _create
+               if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+                       this._setPositionRelative();
+               }
+
+               if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
                        helper.css("position", "absolute");
                }
 
@@ -1756,12 +1918,18 @@ $.widget("ui.draggable", $.ui.mouse, {
 
        },
 
+       _setPositionRelative: function() {
+               if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+                       this.element[ 0 ].style.position = "relative";
+               }
+       },
+
        _adjustOffsetFromHelper: function(obj) {
                if (typeof obj === "string") {
                        obj = obj.split(" ");
                }
                if ($.isArray(obj)) {
-                       obj = {left: +obj[0], top: +obj[1] || 0};
+                       obj = { left: +obj[0], top: +obj[1] || 0 };
                }
                if ("left" in obj) {
                        this.offset.click.left = obj.left + this.margins.left;
@@ -1777,54 +1945,57 @@ $.widget("ui.draggable", $.ui.mouse, {
                }
        },
 
+       _isRootNode: function( element ) {
+               return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+       },
+
        _getParentOffset: function() {
 
                //Get the offsetParent and cache its position
-               var po = this.offsetParent.offset();
+               var po = this.offsetParent.offset(),
+                       document = this.document[ 0 ];
 
                // This is a special case where we need to modify a offset calculated on start, since the following happened:
                // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
                // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
                //    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-               if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+               if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
                        po.left += this.scrollParent.scrollLeft();
                        po.top += this.scrollParent.scrollTop();
                }
 
-               //This needs to be actually done for all browsers, since pageX/pageY includes this information
-               //Ugly IE fix
-               if((this.offsetParent[0] === document.body) ||
-                       (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+               if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
                        po = { top: 0, left: 0 };
                }
 
                return {
-                       top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
-                       left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+                       top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+                       left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
                };
 
        },
 
        _getRelativeOffset: function() {
-
-               if(this.cssPosition === "relative") {
-                       var p = this.element.position();
-                       return {
-                               top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
-                               left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
-                       };
-               } else {
+               if ( this.cssPosition !== "relative" ) {
                        return { top: 0, left: 0 };
                }
 
+               var p = this.element.position(),
+                       scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+               return {
+                       top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+                       left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+               };
+
        },
 
        _cacheMargins: function() {
                this.margins = {
-                       left: (parseInt(this.element.css("marginLeft"),10) || 0),
-                       top: (parseInt(this.element.css("marginTop"),10) || 0),
-                       right: (parseInt(this.element.css("marginRight"),10) || 0),
-                       bottom: (parseInt(this.element.css("marginBottom"),10) || 0)
+                       left: (parseInt(this.element.css("marginLeft"), 10) || 0),
+                       top: (parseInt(this.element.css("marginTop"), 10) || 0),
+                       right: (parseInt(this.element.css("marginRight"), 10) || 0),
+                       bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
                };
        },
 
@@ -1837,8 +2008,11 @@ $.widget("ui.draggable", $.ui.mouse, {
 
        _setContainment: function() {
 
-               var over, c, ce,
-                       o = this.options;
+               var isUserScrollable, c, ce,
+                       o = this.options,
+                       document = this.document[ 0 ];
+
+               this.relativeContainer = null;
 
                if ( !o.containment ) {
                        this.containment = null;
@@ -1877,63 +2051,71 @@ $.widget("ui.draggable", $.ui.mouse, {
                c = $( o.containment );
                ce = c[ 0 ];
 
-               if( !ce ) {
+               if ( !ce ) {
                        return;
                }
 
-               over = c.css( "overflow" ) !== "hidden";
+               isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
 
                this.containment = [
                        ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
-                       ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ) ,
-                       ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left - this.margins.right,
-                       ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top  - this.margins.bottom
+                       ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+                       ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+                               ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+                               ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+                               this.helperProportions.width -
+                               this.margins.left -
+                               this.margins.right,
+                       ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+                               ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+                               ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+                               this.helperProportions.height -
+                               this.margins.top -
+                               this.margins.bottom
                ];
-               this.relative_container = c;
+               this.relativeContainer = c;
        },
 
        _convertPositionTo: function(d, pos) {
 
-               if(!pos) {
+               if (!pos) {
                        pos = this.position;
                }
 
                var mod = d === "absolute" ? 1 : -1,
-                       scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent;
-
-               //Cache the scroll
-               if (!this.offset.scroll) {
-                       this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
-               }
+                       scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
 
                return {
                        top: (
                                pos.top +                                                                                                                               // The absolute mouse position
                                this.offset.relative.top * mod +                                                                                // Only for relative positioned nodes: Relative offset from element to offset parent
                                this.offset.parent.top * mod -                                                                          // The offsetParent's offset without borders (offset + border)
-                               ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) * mod )
+                               ( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
                        ),
                        left: (
                                pos.left +                                                                                                                              // The absolute mouse position
                                this.offset.relative.left * mod +                                                                               // Only for relative positioned nodes: Relative offset from element to offset parent
                                this.offset.parent.left * mod   -                                                                               // The offsetParent's offset without borders (offset + border)
-                               ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) * mod )
+                               ( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
                        )
                };
 
        },
 
-       _generatePosition: function(event) {
+       _generatePosition: function( event, constrainPosition ) {
 
                var containment, co, top, left,
                        o = this.options,
-                       scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent,
+                       scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
                        pageX = event.pageX,
                        pageY = event.pageY;
 
-               //Cache the scroll
-               if (!this.offset.scroll) {
-                       this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()};
+               // Cache the scroll
+               if ( !scrollIsRootNode || !this.offset.scroll ) {
+                       this.offset.scroll = {
+                               top: this.scrollParent.scrollTop(),
+                               left: this.scrollParent.scrollLeft()
+                       };
                }
 
                /*
@@ -1942,36 +2124,35 @@ $.widget("ui.draggable", $.ui.mouse, {
                 */
 
                // If we are not dragging yet, we won't check for options
-               if ( this.originalPosition ) {
+               if ( constrainPosition ) {
                        if ( this.containment ) {
-                               if ( this.relative_container ){
-                                       co = this.relative_container.offset();
+                               if ( this.relativeContainer ){
+                                       co = this.relativeContainer.offset();
                                        containment = [
                                                this.containment[ 0 ] + co.left,
                                                this.containment[ 1 ] + co.top,
                                                this.containment[ 2 ] + co.left,
                                                this.containment[ 3 ] + co.top
                                        ];
-                               }
-                               else {
+                               } else {
                                        containment = this.containment;
                                }
 
-                               if(event.pageX - this.offset.click.left < containment[0]) {
+                               if (event.pageX - this.offset.click.left < containment[0]) {
                                        pageX = containment[0] + this.offset.click.left;
                                }
-                               if(event.pageY - this.offset.click.top < containment[1]) {
+                               if (event.pageY - this.offset.click.top < containment[1]) {
                                        pageY = containment[1] + this.offset.click.top;
                                }
-                               if(event.pageX - this.offset.click.left > containment[2]) {
+                               if (event.pageX - this.offset.click.left > containment[2]) {
                                        pageX = containment[2] + this.offset.click.left;
                                }
-                               if(event.pageY - this.offset.click.top > containment[3]) {
+                               if (event.pageY - this.offset.click.top > containment[3]) {
                                        pageY = containment[3] + this.offset.click.top;
                                }
                        }
 
-                       if(o.grid) {
+                       if (o.grid) {
                                //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
                                top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
                                pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
@@ -1980,6 +2161,13 @@ $.widget("ui.draggable", $.ui.mouse, {
                                pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
                        }
 
+                       if ( o.axis === "y" ) {
+                               pageX = this.originalPageX;
+                       }
+
+                       if ( o.axis === "x" ) {
+                               pageY = this.originalPageY;
+                       }
                }
 
                return {
@@ -1988,14 +2176,14 @@ $.widget("ui.draggable", $.ui.mouse, {
                                this.offset.click.top   -                                                                                               // Click offset (relative to the element)
                                this.offset.relative.top -                                                                                              // Only for relative positioned nodes: Relative offset from element to offset parent
                                this.offset.parent.top +                                                                                                // The offsetParent's offset without borders (offset + border)
-                               ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top )
+                               ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
                        ),
                        left: (
                                pageX -                                                                                                                                 // The absolute mouse position
                                this.offset.click.left -                                                                                                // Click offset (relative to the element)
                                this.offset.relative.left -                                                                                             // Only for relative positioned nodes: Relative offset from element to offset parent
                                this.offset.parent.left +                                                                                               // The offsetParent's offset without borders (offset + border)
-                               ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left )
+                               ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
                        )
                };
 
@@ -2003,23 +2191,39 @@ $.widget("ui.draggable", $.ui.mouse, {
 
        _clear: function() {
                this.helper.removeClass("ui-draggable-dragging");
-               if(this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+               if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
                        this.helper.remove();
                }
                this.helper = null;
                this.cancelHelperRemoval = false;
+               if ( this.destroyOnClear ) {
+                       this.destroy();
+               }
+       },
+
+       _normalizeRightBottom: function() {
+               if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
+                       this.helper.width( this.helper.width() );
+                       this.helper.css( "right", "auto" );
+               }
+               if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
+                       this.helper.height( this.helper.height() );
+                       this.helper.css( "bottom", "auto" );
+               }
        },
 
        // From now on bulk stuff - mainly helpers
 
-       _trigger: function(type, event, ui) {
+       _trigger: function( type, event, ui ) {
                ui = ui || this._uiHash();
-               $.ui.plugin.call(this, type, [event, ui]);
-               //The absolute position has to be recalculated after plugins
-               if(type === "drag") {
-                       this.positionAbs = this._convertPositionTo("absolute");
+               $.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+               // Absolute position and offset (see #6884 ) have to be recalculated after plugins
+               if ( /^(drag|start|stop)/.test( type ) ) {
+                       this.positionAbs = this._convertPositionTo( "absolute" );
+                       ui.offset = this.positionAbs;
                }
-               return $.Widget.prototype._trigger.call(this, type, event, ui);
+               return $.Widget.prototype._trigger.call( this, type, event, ui );
        },
 
        plugins: {},
@@ -2035,173 +2239,212 @@ $.widget("ui.draggable", $.ui.mouse, {
 
 });
 
-$.ui.plugin.add("draggable", "connectToSortable", {
-       start: function(event, ui) {
-
-               var inst = $(this).data("ui-draggable"), o = inst.options,
-                       uiSortable = $.extend({}, ui, { item: inst.element });
-               inst.sortables = [];
-               $(o.connectToSortable).each(function() {
-                       var sortable = $.data(this, "ui-sortable");
-                       if (sortable && !sortable.options.disabled) {
-                               inst.sortables.push({
-                                       instance: sortable,
-                                       shouldRevert: sortable.options.revert
-                               });
-                               sortable.refreshPositions();    // Call the sortable's refreshPositions at drag start to refresh the containerCache since the sortable container cache is used in drag and needs to be up to date (this will ensure it's initialised as well as being kept in step with any changes that might have happened on the page).
-                               sortable._trigger("activate", event, uiSortable);
-                       }
+$.ui.plugin.add( "draggable", "connectToSortable", {
+       start: function( event, ui, draggable ) {
+               var uiSortable = $.extend( {}, ui, {
+                       item: draggable.element
                });
 
-       },
-       stop: function(event, ui) {
+               draggable.sortables = [];
+               $( draggable.options.connectToSortable ).each(function() {
+                       var sortable = $( this ).sortable( "instance" );
 
-               //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
-               var inst = $(this).data("ui-draggable"),
-                       uiSortable = $.extend({}, ui, { item: inst.element });
+                       if ( sortable && !sortable.options.disabled ) {
+                               draggable.sortables.push( sortable );
 
-               $.each(inst.sortables, function() {
-                       if(this.instance.isOver) {
+                               // refreshPositions is called at drag start to refresh the containerCache
+                               // which is used in drag. This ensures it's initialized and synchronized
+                               // with any changes that might have happened on the page since initialization.
+                               sortable.refreshPositions();
+                               sortable._trigger("activate", event, uiSortable);
+                       }
+               });
+       },
+       stop: function( event, ui, draggable ) {
+               var uiSortable = $.extend( {}, ui, {
+                       item: draggable.element
+               });
 
-                               this.instance.isOver = 0;
+               draggable.cancelHelperRemoval = false;
 
-                               inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
-                               this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
+               $.each( draggable.sortables, function() {
+                       var sortable = this;
 
-                               //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: "valid/invalid"
-                               if(this.shouldRevert) {
-                                       this.instance.options.revert = this.shouldRevert;
-                               }
+                       if ( sortable.isOver ) {
+                               sortable.isOver = 0;
 
-                               //Trigger the stop of the sortable
-                               this.instance._mouseStop(event);
+                               // Allow this sortable to handle removing the helper
+                               draggable.cancelHelperRemoval = true;
+                               sortable.cancelHelperRemoval = false;
 
-                               this.instance.options.helper = this.instance.options._helper;
+                               // Use _storedCSS To restore properties in the sortable,
+                               // as this also handles revert (#9675) since the draggable
+                               // may have modified them in unexpected ways (#8809)
+                               sortable._storedCSS = {
+                                       position: sortable.placeholder.css( "position" ),
+                                       top: sortable.placeholder.css( "top" ),
+                                       left: sortable.placeholder.css( "left" )
+                               };
 
-                               //If the helper has been the original item, restore properties in the sortable
-                               if(inst.options.helper === "original") {
-                                       this.instance.currentItem.css({ top: "auto", left: "auto" });
-                               }
+                               sortable._mouseStop(event);
 
+                               // Once drag has ended, the sortable should return to using
+                               // its original helper, not the shared helper from draggable
+                               sortable.options.helper = sortable.options._helper;
                        } else {
-                               this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
-                               this.instance._trigger("deactivate", event, uiSortable);
-                       }
+                               // Prevent this Sortable from removing the helper.
+                               // However, don't set the draggable to remove the helper
+                               // either as another connected Sortable may yet handle the removal.
+                               sortable.cancelHelperRemoval = true;
 
+                               sortable._trigger( "deactivate", event, uiSortable );
+                       }
                });
-
        },
-       drag: function(event, ui) {
-
-               var inst = $(this).data("ui-draggable"), that = this;
-
-               $.each(inst.sortables, function() {
-
+       drag: function( event, ui, draggable ) {
+               $.each( draggable.sortables, function() {
                        var innermostIntersecting = false,
-                               thisSortable = this;
+                               sortable = this;
 
-                       //Copy over some variables to allow calling the sortable's native _intersectsWith
-                       this.instance.positionAbs = inst.positionAbs;
-                       this.instance.helperProportions = inst.helperProportions;
-                       this.instance.offset.click = inst.offset.click;
+                       // Copy over variables that sortable's _intersectsWith uses
+                       sortable.positionAbs = draggable.positionAbs;
+                       sortable.helperProportions = draggable.helperProportions;
+                       sortable.offset.click = draggable.offset.click;
 
-                       if(this.instance._intersectsWith(this.instance.containerCache)) {
+                       if ( sortable._intersectsWith( sortable.containerCache ) ) {
                                innermostIntersecting = true;
-                               $.each(inst.sortables, function () {
-                                       this.instance.positionAbs = inst.positionAbs;
-                                       this.instance.helperProportions = inst.helperProportions;
-                                       this.instance.offset.click = inst.offset.click;
-                                       if (this !== thisSortable &&
-                                               this.instance._intersectsWith(this.instance.containerCache) &&
-                                               $.contains(thisSortable.instance.element[0], this.instance.element[0])
-                                       ) {
+
+                               $.each( draggable.sortables, function() {
+                                       // Copy over variables that sortable's _intersectsWith uses
+                                       this.positionAbs = draggable.positionAbs;
+                                       this.helperProportions = draggable.helperProportions;
+                                       this.offset.click = draggable.offset.click;
+
+                                       if ( this !== sortable &&
+                                                       this._intersectsWith( this.containerCache ) &&
+                                                       $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
                                                innermostIntersecting = false;
                                        }
+
                                        return innermostIntersecting;
                                });
                        }
 
+                       if ( innermostIntersecting ) {
+                               // If it intersects, we use a little isOver variable and set it once,
+                               // so that the move-in stuff gets fired only once.
+                               if ( !sortable.isOver ) {
+                                       sortable.isOver = 1;
 
-                       if(innermostIntersecting) {
-                               //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
-                               if(!this.instance.isOver) {
+                                       sortable.currentItem = ui.helper
+                                               .appendTo( sortable.element )
+                                               .data( "ui-sortable-item", true );
 
-                                       this.instance.isOver = 1;
-                                       //Now we fake the start of dragging for the sortable instance,
-                                       //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
-                                       //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
-                                       this.instance.currentItem = $(that).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", true);
-                                       this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
-                                       this.instance.options.helper = function() { return ui.helper[0]; };
+                                       // Store helper option to later restore it
+                                       sortable.options._helper = sortable.options.helper;
 
-                                       event.target = this.instance.currentItem[0];
-                                       this.instance._mouseCapture(event, true);
-                                       this.instance._mouseStart(event, true, true);
-
-                                       //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
-                                       this.instance.offset.click.top = inst.offset.click.top;
-                                       this.instance.offset.click.left = inst.offset.click.left;
-                                       this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
-                                       this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
+                                       sortable.options.helper = function() {
+                                               return ui.helper[ 0 ];
+                                       };
 
-                                       inst._trigger("toSortable", event);
-                                       inst.dropped = this.instance.element; //draggable revert needs that
-                                       //hack so receive/update callbacks work (mostly)
-                                       inst.currentItem = inst.element;
-                                       this.instance.fromOutside = inst;
+                                       // Fire the start events of the sortable with our passed browser event,
+                                       // and our own helper (so it doesn't create a new one)
+                                       event.target = sortable.currentItem[ 0 ];
+                                       sortable._mouseCapture( event, true );
+                                       sortable._mouseStart( event, true, true );
+
+                                       // Because the browser event is way off the new appended portlet,
+                                       // modify necessary variables to reflect the changes
+                                       sortable.offset.click.top = draggable.offset.click.top;
+                                       sortable.offset.click.left = draggable.offset.click.left;
+                                       sortable.offset.parent.left -= draggable.offset.parent.left -
+                                               sortable.offset.parent.left;
+                                       sortable.offset.parent.top -= draggable.offset.parent.top -
+                                               sortable.offset.parent.top;
+
+                                       draggable._trigger( "toSortable", event );
+
+                                       // Inform draggable that the helper is in a valid drop zone,
+                                       // used solely in the revert option to handle "valid/invalid".
+                                       draggable.dropped = sortable.element;
+
+                                       // Need to refreshPositions of all sortables in the case that
+                                       // adding to one sortable changes the location of the other sortables (#9675)
+                                       $.each( draggable.sortables, function() {
+                                               this.refreshPositions();
+                                       });
 
+                                       // hack so receive/update callbacks work (mostly)
+                                       draggable.currentItem = draggable.element;
+                                       sortable.fromOutside = draggable;
                                }
 
-                               //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
-                               if(this.instance.currentItem) {
-                                       this.instance._mouseDrag(event);
+                               if ( sortable.currentItem ) {
+                                       sortable._mouseDrag( event );
+                                       // Copy the sortable's position because the draggable's can potentially reflect
+                                       // a relative position, while sortable is always absolute, which the dragged
+                                       // element has now become. (#8809)
+                                       ui.position = sortable.position;
                                }
-
                        } else {
+                               // If it doesn't intersect with the sortable, and it intersected before,
+                               // we fake the drag stop of the sortable, but make sure it doesn't remove
+                               // the helper by using cancelHelperRemoval.
+                               if ( sortable.isOver ) {
 
-                               //If it doesn't intersect with the sortable, and it intersected before,
-                               //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
-                               if(this.instance.isOver) {
+                                       sortable.isOver = 0;
+                                       sortable.cancelHelperRemoval = true;
 
-                                       this.instance.isOver = 0;
-                                       this.instance.cancelHelperRemoval = true;
+                                       // Calling sortable's mouseStop would trigger a revert,
+                                       // so revert must be temporarily false until after mouseStop is called.
+                                       sortable.options._revert = sortable.options.revert;
+                                       sortable.options.revert = false;
 
-                                       //Prevent reverting on this forced stop
-                                       this.instance.options.revert = false;
+                                       sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+                                       sortable._mouseStop( event, true );
 
-                                       // The out event needs to be triggered independently
-                                       this.instance._trigger("out", event, this.instance._uiHash(this.instance));
+                                       // restore sortable behaviors that were modfied
+                                       // when the draggable entered the sortable area (#9481)
+                                       sortable.options.revert = sortable.options._revert;
+                                       sortable.options.helper = sortable.options._helper;
 
-                                       this.instance._mouseStop(event, true);
-                                       this.instance.options.helper = this.instance.options._helper;
-
-                                       //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
-                                       this.instance.currentItem.remove();
-                                       if(this.instance.placeholder) {
-                                               this.instance.placeholder.remove();
+                                       if ( sortable.placeholder ) {
+                                               sortable.placeholder.remove();
                                        }
 
-                                       inst._trigger("fromSortable", event);
-                                       inst.dropped = false; //draggable revert needs that
-                               }
+                                       // Recalculate the draggable's offset considering the sortable
+                                       // may have modified them in unexpected ways (#8809)
+                                       draggable._refreshOffsets( event );
+                                       ui.position = draggable._generatePosition( event, true );
 
-                       }
+                                       draggable._trigger( "fromSortable", event );
 
-               });
+                                       // Inform draggable that the helper is no longer in a valid drop zone
+                                       draggable.dropped = false;
 
+                                       // Need to refreshPositions of all sortables just in case removing
+                                       // from one sortable changes the location of other sortables (#9675)
+                                       $.each( draggable.sortables, function() {
+                                               this.refreshPositions();
+                                       });
+                               }
+                       }
+               });
        }
 });
 
 $.ui.plugin.add("draggable", "cursor", {
-       start: function() {
-               var t = $("body"), o = $(this).data("ui-draggable").options;
+       start: function( event, ui, instance ) {
+               var t = $( "body" ),
+                       o = instance.options;
+
                if (t.css("cursor")) {
                        o._cursor = t.css("cursor");
                }
                t.css("cursor", o.cursor);
        },
-       stop: function() {
-               var o = $(this).data("ui-draggable").options;
+       stop: function( event, ui, instance ) {
+               var o = instance.options;
                if (o._cursor) {
                        $("body").css("cursor", o._cursor);
                }
@@ -2209,71 +2452,77 @@ $.ui.plugin.add("draggable", "cursor", {
 });
 
 $.ui.plugin.add("draggable", "opacity", {
-       start: function(event, ui) {
-               var t = $(ui.helper), o = $(this).data("ui-draggable").options;
-               if(t.css("opacity")) {
+       start: function( event, ui, instance ) {
+               var t = $( ui.helper ),
+                       o = instance.options;
+               if (t.css("opacity")) {
                        o._opacity = t.css("opacity");
                }
                t.css("opacity", o.opacity);
        },
-       stop: function(event, ui) {
-               var o = $(this).data("ui-draggable").options;
-               if(o._opacity) {
+       stop: function( event, ui, instance ) {
+               var o = instance.options;
+               if (o._opacity) {
                        $(ui.helper).css("opacity", o._opacity);
                }
        }
 });
 
 $.ui.plugin.add("draggable", "scroll", {
-       start: function() {
-               var i = $(this).data("ui-draggable");
-               if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
-                       i.overflowOffset = i.scrollParent.offset();
+       start: function( event, ui, i ) {
+               if ( !i.scrollParentNotHidden ) {
+                       i.scrollParentNotHidden = i.helper.scrollParent( false );
                }
-       },
-       drag: function( event ) {
 
-               var i = $(this).data("ui-draggable"), o = i.options, scrolled = false;
+               if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+                       i.overflowOffset = i.scrollParentNotHidden.offset();
+               }
+       },
+       drag: function( event, ui, i  ) {
 
-               if(i.scrollParent[0] !== document && i.scrollParent[0].tagName !== "HTML") {
+               var o = i.options,
+                       scrolled = false,
+                       scrollParent = i.scrollParentNotHidden[ 0 ],
+                       document = i.document[ 0 ];
 
-                       if(!o.axis || o.axis !== "x") {
-                               if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
-                                       i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
-                               } else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
-                                       i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;
+               if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+                       if ( !o.axis || o.axis !== "x" ) {
+                               if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
+                                       scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+                               } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+                                       scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
                                }
                        }
 
-                       if(!o.axis || o.axis !== "y") {
-                               if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
-                                       i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
-                               } else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
-                                       i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;
+                       if ( !o.axis || o.axis !== "y" ) {
+                               if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
+                                       scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+                               } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+                                       scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
                                }
                        }
 
                } else {
 
-                       if(!o.axis || o.axis !== "x") {
-                               if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+                       if (!o.axis || o.axis !== "x") {
+                               if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
                                        scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
-                               } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+                               } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
                                        scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
                                }
                        }
 
-                       if(!o.axis || o.axis !== "y") {
-                               if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+                       if (!o.axis || o.axis !== "y") {
+                               if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
                                        scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
-                               } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+                               } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
                                        scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
                                }
                        }
 
                }
 
-               if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+               if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
                        $.ui.ddmanager.prepareOffsets(i, event);
                }
 
@@ -2281,17 +2530,16 @@ $.ui.plugin.add("draggable", "scroll", {
 });
 
 $.ui.plugin.add("draggable", "snap", {
-       start: function() {
+       start: function( event, ui, i ) {
 
-               var i = $(this).data("ui-draggable"),
-                       o = i.options;
+               var o = i.options;
 
                i.snapElements = [];
 
                $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
                        var $t = $(this),
                                $o = $t.offset();
-                       if(this !== i.element[0]) {
+                       if (this !== i.element[0]) {
                                i.snapElements.push({
                                        item: this,
                                        width: $t.outerWidth(), height: $t.outerHeight(),
@@ -2301,10 +2549,9 @@ $.ui.plugin.add("draggable", "snap", {
                });
 
        },
-       drag: function(event, ui) {
+       drag: function( event, ui, inst ) {
 
                var ts, bs, ls, rs, l, r, t, b, i, first,
-                       inst = $(this).data("ui-draggable"),
                        o = inst.options,
                        d = o.snapTolerance,
                        x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
@@ -2312,60 +2559,60 @@ $.ui.plugin.add("draggable", "snap", {
 
                for (i = inst.snapElements.length - 1; i >= 0; i--){
 
-                       l = inst.snapElements[i].left;
+                       l = inst.snapElements[i].left - inst.margins.left;
                        r = l + inst.snapElements[i].width;
-                       t = inst.snapElements[i].top;
+                       t = inst.snapElements[i].top - inst.margins.top;
                        b = t + inst.snapElements[i].height;
 
                        if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
-                               if(inst.snapElements[i].snapping) {
+                               if (inst.snapElements[i].snapping) {
                                        (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
                                }
                                inst.snapElements[i].snapping = false;
                                continue;
                        }
 
-                       if(o.snapMode !== "inner") {
+                       if (o.snapMode !== "inner") {
                                ts = Math.abs(t - y2) <= d;
                                bs = Math.abs(b - y1) <= d;
                                ls = Math.abs(l - x2) <= d;
                                rs = Math.abs(r - x1) <= d;
-                               if(ts) {
-                                       ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+                               if (ts) {
+                                       ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
                                }
-                               if(bs) {
-                                       ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top - inst.margins.top;
+                               if (bs) {
+                                       ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
                                }
-                               if(ls) {
-                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left - inst.margins.left;
+                               if (ls) {
+                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
                                }
-                               if(rs) {
-                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left - inst.margins.left;
+                               if (rs) {
+                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
                                }
                        }
 
                        first = (ts || bs || ls || rs);
 
-                       if(o.snapMode !== "outer") {
+                       if (o.snapMode !== "outer") {
                                ts = Math.abs(t - y1) <= d;
                                bs = Math.abs(b - y2) <= d;
                                ls = Math.abs(l - x1) <= d;
                                rs = Math.abs(r - x2) <= d;
-                               if(ts) {
-                                       ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top - inst.margins.top;
+                               if (ts) {
+                                       ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
                                }
-                               if(bs) {
-                                       ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top - inst.margins.top;
+                               if (bs) {
+                                       ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
                                }
-                               if(ls) {
-                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left - inst.margins.left;
+                               if (ls) {
+                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
                                }
-                               if(rs) {
-                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left - inst.margins.left;
+                               if (rs) {
+                                       ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
                                }
                        }
 
-                       if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+                       if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
                                (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
                        }
                        inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
@@ -2376,11 +2623,11 @@ $.ui.plugin.add("draggable", "snap", {
 });
 
 $.ui.plugin.add("draggable", "stack", {
-       start: function() {
+       start: function( event, ui, instance ) {
                var min,
-                       o = this.data("ui-draggable").options,
-                       group = $.makeArray($(o.stack)).sort(function(a,b) {
-                               return (parseInt($(a).css("zIndex"),10) || 0) - (parseInt($(b).css("zIndex"),10) || 0);
+                       o = instance.options,
+                       group = $.makeArray($(o.stack)).sort(function(a, b) {
+                               return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
                        });
 
                if (!group.length) { return; }
@@ -2394,30 +2641,41 @@ $.ui.plugin.add("draggable", "stack", {
 });
 
 $.ui.plugin.add("draggable", "zIndex", {
-       start: function(event, ui) {
-               var t = $(ui.helper), o = $(this).data("ui-draggable").options;
-               if(t.css("zIndex")) {
+       start: function( event, ui, instance ) {
+               var t = $( ui.helper ),
+                       o = instance.options;
+
+               if (t.css("zIndex")) {
                        o._zIndex = t.css("zIndex");
                }
                t.css("zIndex", o.zIndex);
        },
-       stop: function(event, ui) {
-               var o = $(this).data("ui-draggable").options;
-               if(o._zIndex) {
+       stop: function( event, ui, instance ) {
+               var o = instance.options;
+
+               if (o._zIndex) {
                        $(ui.helper).css("zIndex", o._zIndex);
                }
        }
 });
 
-})(jQuery);
-(function( $, undefined ) {
+var draggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Droppable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/droppable/
+ */
 
-function isOverAxis( x, reference, size ) {
-       return ( x > reference ) && ( x < ( reference + size ) );
-}
 
-$.widget("ui.droppable", {
-       version: "1.10.3",
+$.widget( "ui.droppable", {
+       version: "1.11.3",
        widgetEventPrefix: "drop",
        options: {
                accept: "*",
@@ -2437,138 +2695,165 @@ $.widget("ui.droppable", {
        },
        _create: function() {
 
-               var o = this.options,
+               var proportions,
+                       o = this.options,
                        accept = o.accept;
 
                this.isover = false;
                this.isout = true;
 
-               this.accept = $.isFunction(accept) ? accept : function(d) {
-                       return d.is(accept);
+               this.accept = $.isFunction( accept ) ? accept : function( d ) {
+                       return d.is( accept );
                };
 
-               //Store the droppable's proportions
-               this.proportions = { width: this.element[0].offsetWidth, height: this.element[0].offsetHeight };
+               this.proportions = function( /* valueToWrite */ ) {
+                       if ( arguments.length ) {
+                               // Store the droppable's proportions
+                               proportions = arguments[ 0 ];
+                       } else {
+                               // Retrieve or derive the droppable's proportions
+                               return proportions ?
+                                       proportions :
+                                       proportions = {
+                                               width: this.element[ 0 ].offsetWidth,
+                                               height: this.element[ 0 ].offsetHeight
+                                       };
+                       }
+               };
 
-               // Add the reference and positions to the manager
-               $.ui.ddmanager.droppables[o.scope] = $.ui.ddmanager.droppables[o.scope] || [];
-               $.ui.ddmanager.droppables[o.scope].push(this);
+               this._addToManager( o.scope );
 
-               (o.addClasses && this.element.addClass("ui-droppable"));
+               o.addClasses && this.element.addClass( "ui-droppable" );
 
        },
 
-       _destroy: function() {
-               var i = 0,
-                       drop = $.ui.ddmanager.droppables[this.options.scope];
+       _addToManager: function( scope ) {
+               // Add the reference and positions to the manager
+               $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+               $.ui.ddmanager.droppables[ scope ].push( this );
+       },
 
+       _splice: function( drop ) {
+               var i = 0;
                for ( ; i < drop.length; i++ ) {
-                       if ( drop[i] === this ) {
-                               drop.splice(i, 1);
+                       if ( drop[ i ] === this ) {
+                               drop.splice( i, 1 );
                        }
                }
+       },
+
+       _destroy: function() {
+               var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+               this._splice( drop );
 
-               this.element.removeClass("ui-droppable ui-droppable-disabled");
+               this.element.removeClass( "ui-droppable ui-droppable-disabled" );
        },
 
-       _setOption: function(key, value) {
+       _setOption: function( key, value ) {
 
-               if(key === "accept") {
-                       this.accept = $.isFunction(value) ? value : function(d) {
-                               return d.is(value);
+               if ( key === "accept" ) {
+                       this.accept = $.isFunction( value ) ? value : function( d ) {
+                               return d.is( value );
                        };
+               } else if ( key === "scope" ) {
+                       var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+                       this._splice( drop );
+                       this._addToManager( value );
                }
-               $.Widget.prototype._setOption.apply(this, arguments);
+
+               this._super( key, value );
        },
 
-       _activate: function(event) {
+       _activate: function( event ) {
                var draggable = $.ui.ddmanager.current;
-               if(this.options.activeClass) {
-                       this.element.addClass(this.options.activeClass);
+               if ( this.options.activeClass ) {
+                       this.element.addClass( this.options.activeClass );
                }
-               if(draggable){
-                       this._trigger("activate", event, this.ui(draggable));
+               if ( draggable ){
+                       this._trigger( "activate", event, this.ui( draggable ) );
                }
        },
 
-       _deactivate: function(event) {
+       _deactivate: function( event ) {
                var draggable = $.ui.ddmanager.current;
-               if(this.options.activeClass) {
-                       this.element.removeClass(this.options.activeClass);
+               if ( this.options.activeClass ) {
+                       this.element.removeClass( this.options.activeClass );
                }
-               if(draggable){
-                       this._trigger("deactivate", event, this.ui(draggable));
+               if ( draggable ){
+                       this._trigger( "deactivate", event, this.ui( draggable ) );
                }
        },
 
-       _over: function(event) {
+       _over: function( event ) {
 
                var draggable = $.ui.ddmanager.current;
 
                // Bail if draggable and droppable are same element
-               if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+               if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
                        return;
                }
 
-               if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
-                       if(this.options.hoverClass) {
-                               this.element.addClass(this.options.hoverClass);
+               if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+                       if ( this.options.hoverClass ) {
+                               this.element.addClass( this.options.hoverClass );
                        }
-                       this._trigger("over", event, this.ui(draggable));
+                       this._trigger( "over", event, this.ui( draggable ) );
                }
 
        },
 
-       _out: function(event) {
+       _out: function( event ) {
 
                var draggable = $.ui.ddmanager.current;
 
                // Bail if draggable and droppable are same element
-               if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+               if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
                        return;
                }
 
-               if (this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
-                       if(this.options.hoverClass) {
-                               this.element.removeClass(this.options.hoverClass);
+               if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+                       if ( this.options.hoverClass ) {
+                               this.element.removeClass( this.options.hoverClass );
                        }
-                       this._trigger("out", event, this.ui(draggable));
+                       this._trigger( "out", event, this.ui( draggable ) );
                }
 
        },
 
-       _drop: function(event,custom) {
+       _drop: function( event, custom ) {
 
                var draggable = custom || $.ui.ddmanager.current,
                        childrenIntersection = false;
 
                // Bail if draggable and droppable are same element
-               if (!draggable || (draggable.currentItem || draggable.element)[0] === this.element[0]) {
+               if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
                        return false;
                }
 
-               this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function() {
-                       var inst = $.data(this, "ui-droppable");
-                       if(
+               this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() {
+                       var inst = $( this ).droppable( "instance" );
+                       if (
                                inst.options.greedy &&
                                !inst.options.disabled &&
                                inst.options.scope === draggable.options.scope &&
-                               inst.accept.call(inst.element[0], (draggable.currentItem || draggable.element)) &&
-                               $.ui.intersect(draggable, $.extend(inst, { offset: inst.element.offset() }), inst.options.tolerance)
+                               inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
+                               $.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
                        ) { childrenIntersection = true; return false; }
                });
-               if(childrenIntersection) {
+               if ( childrenIntersection ) {
                        return false;
                }
 
-               if(this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
-                       if(this.options.activeClass) {
-                               this.element.removeClass(this.options.activeClass);
+               if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+                       if ( this.options.activeClass ) {
+                               this.element.removeClass( this.options.activeClass );
                        }
-                       if(this.options.hoverClass) {
-                               this.element.removeClass(this.options.hoverClass);
+                       if ( this.options.hoverClass ) {
+                               this.element.removeClass( this.options.hoverClass );
                        }
-                       this._trigger("drop", event, this.ui(draggable));
+                       this._trigger( "drop", event, this.ui( draggable ) );
                        return this.element;
                }
 
@@ -2576,9 +2861,9 @@ $.widget("ui.droppable", {
 
        },
 
-       ui: function(c) {
+       ui: function( c ) {
                return {
-                       draggable: (c.currentItem || c.element),
+                       draggable: ( c.currentItem || c.element ),
                        helper: c.helper,
                        position: c.position,
                        offset: c.positionAbs
@@ -2587,45 +2872,51 @@ $.widget("ui.droppable", {
 
 });
 
-$.ui.intersect = function(draggable, droppable, toleranceMode) {
-
-       if (!droppable.offset) {
-               return false;
+$.ui.intersect = (function() {
+       function isOverAxis( x, reference, size ) {
+               return ( x >= reference ) && ( x < ( reference + size ) );
        }
 
-       var draggableLeft, draggableTop,
-               x1 = (draggable.positionAbs || draggable.position.absolute).left, x2 = x1 + draggable.helperProportions.width,
-               y1 = (draggable.positionAbs || draggable.position.absolute).top, y2 = y1 + draggable.helperProportions.height,
-               l = droppable.offset.left, r = l + droppable.proportions.width,
-               t = droppable.offset.top, b = t + droppable.proportions.height;
+       return function( draggable, droppable, toleranceMode, event ) {
+
+               if ( !droppable.offset ) {
+                       return false;
+               }
 
-       switch (toleranceMode) {
+               var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+                       y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
+                       x2 = x1 + draggable.helperProportions.width,
+                       y2 = y1 + draggable.helperProportions.height,
+                       l = droppable.offset.left,
+                       t = droppable.offset.top,
+                       r = l + droppable.proportions().width,
+                       b = t + droppable.proportions().height;
+
+               switch ( toleranceMode ) {
                case "fit":
-                       return (l <= x1 && x2 <= r && t <= y1 && y2 <= b);
+                       return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
                case "intersect":
-                       return (l < x1 + (draggable.helperProportions.width / 2) && // Right Half
-                               x2 - (draggable.helperProportions.width / 2) < r && // Left Half
-                               t < y1 + (draggable.helperProportions.height / 2) && // Bottom Half
-                               y2 - (draggable.helperProportions.height / 2) < b ); // Top Half
+                       return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+                               x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+                               t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+                               y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
                case "pointer":
-                       draggableLeft = ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left);
-                       draggableTop = ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top);
-                       return isOverAxis( draggableTop, t, droppable.proportions.height ) && isOverAxis( draggableLeft, l, droppable.proportions.width );
+                       return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
                case "touch":
                        return (
-                               (y1 >= t && y1 <= b) || // Top edge touching
-                               (y2 >= t && y2 <= b) || // Bottom edge touching
-                               (y1 < t && y2 > b)              // Surrounded vertically
+                               ( y1 >= t && y1 <= b ) || // Top edge touching
+                               ( y2 >= t && y2 <= b ) || // Bottom edge touching
+                               ( y1 < t && y2 > b ) // Surrounded vertically
                        ) && (
-                               (x1 >= l && x1 <= r) || // Left edge touching
-                               (x2 >= l && x2 <= r) || // Right edge touching
-                               (x1 < l && x2 > r)              // Surrounded horizontally
+                               ( x1 >= l && x1 <= r ) || // Left edge touching
+                               ( x2 >= l && x2 <= r ) || // Right edge touching
+                               ( x1 < l && x2 > r ) // Surrounded horizontally
                        );
                default:
                        return false;
                }
-
-};
+       };
+})();
 
 /*
        This manager tracks offsets of draggables and droppables
@@ -2633,61 +2924,61 @@ $.ui.intersect = function(draggable, droppable, toleranceMode) {
 $.ui.ddmanager = {
        current: null,
        droppables: { "default": [] },
-       prepareOffsets: function(t, event) {
+       prepareOffsets: function( t, event ) {
 
                var i, j,
-                       m = $.ui.ddmanager.droppables[t.options.scope] || [],
+                       m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
                        type = event ? event.type : null, // workaround for #2317
-                       list = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+                       list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
 
-               droppablesLoop: for (i = 0; i < m.length; i++) {
+               droppablesLoop: for ( i = 0; i < m.length; i++ ) {
 
-                       //No disabled and non-accepted
-                       if(m[i].options.disabled || (t && !m[i].accept.call(m[i].element[0],(t.currentItem || t.element)))) {
+                       // No disabled and non-accepted
+                       if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {
                                continue;
                        }
 
                        // Filter out elements in the current dragged item
-                       for (j=0; j < list.length; j++) {
-                               if(list[j] === m[i].element[0]) {
-                                       m[i].proportions.height = 0;
+                       for ( j = 0; j < list.length; j++ ) {
+                               if ( list[ j ] === m[ i ].element[ 0 ] ) {
+                                       m[ i ].proportions().height = 0;
                                        continue droppablesLoop;
                                }
                        }
 
-                       m[i].visible = m[i].element.css("display") !== "none";
-                       if(!m[i].visible) {
+                       m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+                       if ( !m[ i ].visible ) {
                                continue;
                        }
 
-                       //Activate the droppable if used directly from draggables
-                       if(type === "mousedown") {
-                               m[i]._activate.call(m[i], event);
+                       // Activate the droppable if used directly from draggables
+                       if ( type === "mousedown" ) {
+                               m[ i ]._activate.call( m[ i ], event );
                        }
 
-                       m[i].offset = m[i].element.offset();
-                       m[i].proportions = { width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight };
+                       m[ i ].offset = m[ i ].element.offset();
+                       m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
 
                }
 
        },
-       drop: function(draggable, event) {
+       drop: function( draggable, event ) {
 
                var dropped = false;
                // Create a copy of the droppables in case the list changes during the drop (#9116)
-               $.each(($.ui.ddmanager.droppables[draggable.options.scope] || []).slice(), function() {
+               $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
 
-                       if(!this.options) {
+                       if ( !this.options ) {
                                return;
                        }
-                       if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) {
-                               dropped = this._drop.call(this, event) || dropped;
+                       if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
+                               dropped = this._drop.call( this, event ) || dropped;
                        }
 
-                       if (!this.options.disabled && this.visible && this.accept.call(this.element[0],(draggable.currentItem || draggable.element))) {
+                       if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
                                this.isout = true;
                                this.isover = false;
-                               this._deactivate.call(this, event);
+                               this._deactivate.call( this, event );
                        }
 
                });
@@ -2695,89 +2986,93 @@ $.ui.ddmanager = {
 
        },
        dragStart: function( draggable, event ) {
-               //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+               // Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
                draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
-                       if( !draggable.options.refreshPositions ) {
+                       if ( !draggable.options.refreshPositions ) {
                                $.ui.ddmanager.prepareOffsets( draggable, event );
                        }
                });
        },
-       drag: function(draggable, event) {
+       drag: function( draggable, event ) {
 
-               //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
-               if(draggable.options.refreshPositions) {
-                       $.ui.ddmanager.prepareOffsets(draggable, event);
+               // If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+               if ( draggable.options.refreshPositions ) {
+                       $.ui.ddmanager.prepareOffsets( draggable, event );
                }
 
-               //Run through all droppables and check their positions based on specific tolerance options
-               $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function() {
+               // Run through all droppables and check their positions based on specific tolerance options
+               $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
 
-                       if(this.options.disabled || this.greedyChild || !this.visible) {
+                       if ( this.options.disabled || this.greedyChild || !this.visible ) {
                                return;
                        }
 
                        var parentInstance, scope, parent,
-                               intersects = $.ui.intersect(draggable, this, this.options.tolerance),
-                               c = !intersects && this.isover ? "isout" : (intersects && !this.isover ? "isover" : null);
-                       if(!c) {
+                               intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
+                               c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
+                       if ( !c ) {
                                return;
                        }
 
-                       if (this.options.greedy) {
+                       if ( this.options.greedy ) {
                                // find droppable parents with same scope
                                scope = this.options.scope;
-                               parent = this.element.parents(":data(ui-droppable)").filter(function () {
-                                       return $.data(this, "ui-droppable").options.scope === scope;
+                               parent = this.element.parents( ":data(ui-droppable)" ).filter(function() {
+                                       return $( this ).droppable( "instance" ).options.scope === scope;
                                });
 
-                               if (parent.length) {
-                                       parentInstance = $.data(parent[0], "ui-droppable");
-                                       parentInstance.greedyChild = (c === "isover");
+                               if ( parent.length ) {
+                                       parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+                                       parentInstance.greedyChild = ( c === "isover" );
                                }
                        }
 
                        // we just moved into a greedy child
-                       if (parentInstance && c === "isover") {
+                       if ( parentInstance && c === "isover" ) {
                                parentInstance.isover = false;
                                parentInstance.isout = true;
-                               parentInstance._out.call(parentInstance, event);
+                               parentInstance._out.call( parentInstance, event );
                        }
 
-                       this[c] = true;
+                       this[ c ] = true;
                        this[c === "isout" ? "isover" : "isout"] = false;
-                       this[c === "isover" ? "_over" : "_out"].call(this, event);
+                       this[c === "isover" ? "_over" : "_out"].call( this, event );
 
                        // we just moved out of a greedy child
-                       if (parentInstance && c === "isout") {
+                       if ( parentInstance && c === "isout" ) {
                                parentInstance.isout = false;
                                parentInstance.isover = true;
-                               parentInstance._over.call(parentInstance, event);
+                               parentInstance._over.call( parentInstance, event );
                        }
                });
 
        },
        dragStop: function( draggable, event ) {
                draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
-               //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
-               if( !draggable.options.refreshPositions ) {
+               // Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+               if ( !draggable.options.refreshPositions ) {
                        $.ui.ddmanager.prepareOffsets( draggable, event );
                }
        }
 };
 
-})(jQuery);
-(function( $, undefined ) {
+var droppable = $.ui.droppable;
 
-function num(v) {
-       return parseInt(v, 10) || 0;
-}
 
-function isNumber(value) {
-       return !isNaN(parseInt(value, 10));
-}
+/*!
+ * jQuery UI Resizable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/resizable/
+ */
+
 
 $.widget("ui.resizable", $.ui.mouse, {
-       version: "1.10.3",
+       version: "1.11.3",
        widgetEventPrefix: "resize",
        options: {
                alsoResize: false,
@@ -2803,6 +3098,37 @@ $.widget("ui.resizable", $.ui.mouse, {
                start: null,
                stop: null
        },
+
+       _num: function( value ) {
+               return parseInt( value, 10 ) || 0;
+       },
+
+       _isNumber: function( value ) {
+               return !isNaN( parseInt( value, 10 ) );
+       },
+
+       _hasScroll: function( el, a ) {
+
+               if ( $( el ).css( "overflow" ) === "hidden") {
+                       return false;
+               }
+
+               var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+                       has = false;
+
+               if ( el[ scroll ] > 0 ) {
+                       return true;
+               }
+
+               // TODO: determine which cases actually cause this to happen
+               // if the element doesn't have the scroll set, see if it's possible to
+               // set the scroll
+               el[ scroll ] = 1;
+               has = ( el[ scroll ] > 0 );
+               el[ scroll ] = 0;
+               return has;
+       },
+
        _create: function() {
 
                var n, i, handle, axis, hname,
@@ -2818,10 +3144,9 @@ $.widget("ui.resizable", $.ui.mouse, {
                        _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
                });
 
-               //Wrap the element if it cannot hold child nodes
-               if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)) {
+               // Wrap the element if it cannot hold child nodes
+               if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
 
-                       //Create a wrapper element and set the wrapper to the new current internal element
                        this.element.wrap(
                                $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
                                        position: this.element.css("position"),
@@ -2832,34 +3157,56 @@ $.widget("ui.resizable", $.ui.mouse, {
                                })
                        );
 
-                       //Overwrite the original this.element
                        this.element = this.element.parent().data(
-                               "ui-resizable", this.element.data("ui-resizable")
+                               "ui-resizable", this.element.resizable( "instance" )
                        );
 
                        this.elementIsWrapper = true;
 
-                       //Move margins to the wrapper
-                       this.element.css({ marginLeft: this.originalElement.css("marginLeft"), marginTop: this.originalElement.css("marginTop"), marginRight: this.originalElement.css("marginRight"), marginBottom: this.originalElement.css("marginBottom") });
-                       this.originalElement.css({ marginLeft: 0, marginTop: 0, marginRight: 0, marginBottom: 0});
-
-                       //Prevent Safari textarea resize
+                       this.element.css({
+                               marginLeft: this.originalElement.css("marginLeft"),
+                               marginTop: this.originalElement.css("marginTop"),
+                               marginRight: this.originalElement.css("marginRight"),
+                               marginBottom: this.originalElement.css("marginBottom")
+                       });
+                       this.originalElement.css({
+                               marginLeft: 0,
+                               marginTop: 0,
+                               marginRight: 0,
+                               marginBottom: 0
+                       });
+                       // support: Safari
+                       // Prevent Safari textarea resize
                        this.originalResizeStyle = this.originalElement.css("resize");
                        this.originalElement.css("resize", "none");
 
-                       //Push the actual element to our proportionallyResize internal array
-                       this._proportionallyResizeElements.push(this.originalElement.css({ position: "static", zoom: 1, display: "block" }));
+                       this._proportionallyResizeElements.push( this.originalElement.css({
+                               position: "static",
+                               zoom: 1,
+                               display: "block"
+                       }) );
 
+                       // support: IE9
                        // avoid IE jump (hard set the margin)
                        this.originalElement.css({ margin: this.originalElement.css("margin") });
 
-                       // fix handlers offset
                        this._proportionallyResize();
-
                }
 
-               this.handles = o.handles || (!$(".ui-resizable-handle", this.element).length ? "e,s,se" : { n: ".ui-resizable-n", e: ".ui-resizable-e", s: ".ui-resizable-s", w: ".ui-resizable-w", se: ".ui-resizable-se", sw: ".ui-resizable-sw", ne: ".ui-resizable-ne", nw: ".ui-resizable-nw" });
-               if(this.handles.constructor === String) {
+               this.handles = o.handles ||
+                       ( !$(".ui-resizable-handle", this.element).length ?
+                               "e,s,se" : {
+                                       n: ".ui-resizable-n",
+                                       e: ".ui-resizable-e",
+                                       s: ".ui-resizable-s",
+                                       w: ".ui-resizable-w",
+                                       se: ".ui-resizable-se",
+                                       sw: ".ui-resizable-sw",
+                                       ne: ".ui-resizable-ne",
+                                       nw: ".ui-resizable-nw"
+                               } );
+
+               if (this.handles.constructor === String) {
 
                        if ( this.handles === "all") {
                                this.handles = "n,e,s,w,se,sw,ne,nw";
@@ -2868,22 +3215,20 @@ $.widget("ui.resizable", $.ui.mouse, {
                        n = this.handles.split(",");
                        this.handles = {};
 
-                       for(i = 0; i < n.length; i++) {
+                       for (i = 0; i < n.length; i++) {
 
                                handle = $.trim(n[i]);
-                               hname = "ui-resizable-"+handle;
+                               hname = "ui-resizable-" + handle;
                                axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
 
-                               // Apply zIndex to all handles - see #7960
                                axis.css({ zIndex: o.zIndex });
 
-                               //TODO : What's going on here?
+                               // TODO : What's going on here?
                                if ("se" === handle) {
                                        axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
                                }
 
-                               //Insert into internal handles object and append to element
-                               this.handles[handle] = ".ui-resizable-"+handle;
+                               this.handles[handle] = ".ui-resizable-" + handle;
                                this.element.append(axis);
                        }
 
@@ -2895,21 +3240,18 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                        target = target || this.element;
 
-                       for(i in this.handles) {
+                       for (i in this.handles) {
 
-                               if(this.handles[i].constructor === String) {
-                                       this.handles[i] = $(this.handles[i], this.element).show();
+                               if (this.handles[i].constructor === String) {
+                                       this.handles[i] = this.element.children( this.handles[ i ] ).first().show();
                                }
 
-                               //Apply pad to wrapper element, needed to fix axis position (textarea, inputs, scrolls)
-                               if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/textarea|input|select|button/i)) {
+                               if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
 
                                        axis = $(this.handles[i], this.element);
 
-                                       //Checking the correct pad and border
                                        padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
 
-                                       //The padding type i have to apply...
                                        padPos = [ "padding",
                                                /ne|nw|n/.test(i) ? "Top" :
                                                /se|sw|s/.test(i) ? "Bottom" :
@@ -2921,31 +3263,28 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                                }
 
-                               //TODO: What's that good for? There's not anything to be executed left
-                               if(!$(this.handles[i]).length) {
+                               // TODO: What's that good for? There's not anything to be executed left
+                               if (!$(this.handles[i]).length) {
                                        continue;
                                }
                        }
                };
 
-               //TODO: make renderAxis a prototype function
+               // TODO: make renderAxis a prototype function
                this._renderAxis(this.element);
 
                this._handles = $(".ui-resizable-handle", this.element)
                        .disableSelection();
 
-               //Matching axis name
                this._handles.mouseover(function() {
                        if (!that.resizing) {
                                if (this.className) {
                                        axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
                                }
-                               //Axis, default = se
                                that.axis = axis && axis[1] ? axis[1] : "se";
                        }
                });
 
-               //If we want to auto hide the elements
                if (o.autoHide) {
                        this._handles.hide();
                        $(this.element)
@@ -2957,7 +3296,7 @@ $.widget("ui.resizable", $.ui.mouse, {
                                        $(this).removeClass("ui-resizable-autohide");
                                        that._handles.show();
                                })
-                               .mouseleave(function(){
+                               .mouseleave(function() {
                                        if (o.disabled) {
                                                return;
                                        }
@@ -2968,7 +3307,6 @@ $.widget("ui.resizable", $.ui.mouse, {
                                });
                }
 
-               //Initialize the mouse interaction
                this._mouseInit();
 
        },
@@ -2979,11 +3317,16 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                var wrapper,
                        _destroy = function(exp) {
-                               $(exp).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
-                                       .removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove();
+                               $(exp)
+                                       .removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+                                       .removeData("resizable")
+                                       .removeData("ui-resizable")
+                                       .unbind(".resizable")
+                                       .find(".ui-resizable-handle")
+                                               .remove();
                        };
 
-               //TODO: Unwrap at same DOM position
+               // TODO: Unwrap at same DOM position
                if (this.elementIsWrapper) {
                        _destroy(this.element);
                        wrapper = this.element;
@@ -3021,39 +3364,50 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                var curleft, curtop, cursor,
                        o = this.options,
-                       iniPos = this.element.position(),
                        el = this.element;
 
                this.resizing = true;
 
-               // bugfix for http://dev.jquery.com/ticket/1749
-               if ( (/absolute/).test( el.css("position") ) ) {
-                       el.css({ position: "absolute", top: el.css("top"), left: el.css("left") });
-               } else if (el.is(".ui-draggable")) {
-                       el.css({ position: "absolute", top: iniPos.top, left: iniPos.left });
-               }
-
                this._renderProxy();
 
-               curleft = num(this.helper.css("left"));
-               curtop = num(this.helper.css("top"));
+               curleft = this._num(this.helper.css("left"));
+               curtop = this._num(this.helper.css("top"));
 
                if (o.containment) {
                        curleft += $(o.containment).scrollLeft() || 0;
                        curtop += $(o.containment).scrollTop() || 0;
                }
 
-               //Store needed variables
                this.offset = this.helper.offset();
                this.position = { left: curleft, top: curtop };
-               this.size = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
-               this.originalSize = this._helper ? { width: el.outerWidth(), height: el.outerHeight() } : { width: el.width(), height: el.height() };
+
+               this.size = this._helper ? {
+                               width: this.helper.width(),
+                               height: this.helper.height()
+                       } : {
+                               width: el.width(),
+                               height: el.height()
+                       };
+
+               this.originalSize = this._helper ? {
+                               width: el.outerWidth(),
+                               height: el.outerHeight()
+                       } : {
+                               width: el.width(),
+                               height: el.height()
+                       };
+
+               this.sizeDiff = {
+                       width: el.outerWidth() - el.width(),
+                       height: el.outerHeight() - el.height()
+               };
+
                this.originalPosition = { left: curleft, top: curtop };
-               this.sizeDiff = { width: el.outerWidth() - el.width(), height: el.outerHeight() - el.height() };
                this.originalMousePosition = { left: event.pageX, top: event.pageY };
 
-               //Aspect Ratio
-               this.aspectRatio = (typeof o.aspectRatio === "number") ? o.aspectRatio : ((this.originalSize.width / this.originalSize.height) || 1);
+               this.aspectRatio = (typeof o.aspectRatio === "number") ?
+                       o.aspectRatio :
+                       ((this.originalSize.width / this.originalSize.height) || 1);
 
                cursor = $(".ui-resizable-" + this.axis).css("cursor");
                $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
@@ -3065,27 +3419,21 @@ $.widget("ui.resizable", $.ui.mouse, {
 
        _mouseDrag: function(event) {
 
-               //Increase performance, avoid regex
-               var data,
-                       el = this.helper, props = {},
+               var data, props,
                        smp = this.originalMousePosition,
                        a = this.axis,
-                       prevTop = this.position.top,
-                       prevLeft = this.position.left,
-                       prevWidth = this.size.width,
-                       prevHeight = this.size.height,
-                       dx = (event.pageX-smp.left)||0,
-                       dy = (event.pageY-smp.top)||0,
+                       dx = (event.pageX - smp.left) || 0,
+                       dy = (event.pageY - smp.top) || 0,
                        trigger = this._change[a];
 
+               this._updatePrevProperties();
+
                if (!trigger) {
                        return false;
                }
 
-               // Calculate the attrs that will be change
-               data = trigger.apply(this, [event, dx, dy]);
+               data = trigger.apply(this, [ event, dx, dy ]);
 
-               // Put this in the mouseDrag handler since the user can start pressing shift while resizing
                this._updateVirtualBoundaries(event.shiftKey);
                if (this._aspectRatio || event.shiftKey) {
                        data = this._updateRatio(data, event);
@@ -3095,30 +3443,18 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                this._updateCache(data);
 
-               // plugins callbacks need to be called first
                this._propagate("resize", event);
 
-               if (this.position.top !== prevTop) {
-                       props.top = this.position.top + "px";
-               }
-               if (this.position.left !== prevLeft) {
-                       props.left = this.position.left + "px";
-               }
-               if (this.size.width !== prevWidth) {
-                       props.width = this.size.width + "px";
-               }
-               if (this.size.height !== prevHeight) {
-                       props.height = this.size.height + "px";
-               }
-               el.css(props);
+               props = this._applyChanges();
 
-               if (!this._helper && this._proportionallyResizeElements.length) {
+               if ( !this._helper && this._proportionallyResizeElements.length ) {
                        this._proportionallyResize();
                }
 
-               // Call the user callback if the element was resized
-               if ( ! $.isEmptyObject(props) ) {
-                       this._trigger("resize", event, this.ui());
+               if ( !$.isEmptyObject( props ) ) {
+                       this._updatePrevProperties();
+                       this._trigger( "resize", event, this.ui() );
+                       this._applyChanges();
                }
 
                return false;
@@ -3130,16 +3466,21 @@ $.widget("ui.resizable", $.ui.mouse, {
                var pr, ista, soffseth, soffsetw, s, left, top,
                        o = this.options, that = this;
 
-               if(this._helper) {
+               if (this._helper) {
 
                        pr = this._proportionallyResizeElements;
                        ista = pr.length && (/textarea/i).test(pr[0].nodeName);
-                       soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height;
+                       soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
                        soffsetw = ista ? 0 : that.sizeDiff.width;
 
-                       s = { width: (that.helper.width()  - soffsetw), height: (that.helper.height() - soffseth) };
-                       left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null;
-                       top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+                       s = {
+                               width: (that.helper.width()  - soffsetw),
+                               height: (that.helper.height() - soffseth)
+                       };
+                       left = (parseInt(that.element.css("left"), 10) +
+                               (that.position.left - that.originalPosition.left)) || null;
+                       top = (parseInt(that.element.css("top"), 10) +
+                               (that.position.top - that.originalPosition.top)) || null;
 
                        if (!o.animate) {
                                this.element.css($.extend(s, { top: top, left: left }));
@@ -3167,35 +3508,65 @@ $.widget("ui.resizable", $.ui.mouse, {
 
        },
 
-       _updateVirtualBoundaries: function(forceAspectRatio) {
+       _updatePrevProperties: function() {
+               this.prevPosition = {
+                       top: this.position.top,
+                       left: this.position.left
+               };
+               this.prevSize = {
+                       width: this.size.width,
+                       height: this.size.height
+               };
+       },
+
+       _applyChanges: function() {
+               var props = {};
+
+               if ( this.position.top !== this.prevPosition.top ) {
+                       props.top = this.position.top + "px";
+               }
+               if ( this.position.left !== this.prevPosition.left ) {
+                       props.left = this.position.left + "px";
+               }
+               if ( this.size.width !== this.prevSize.width ) {
+                       props.width = this.size.width + "px";
+               }
+               if ( this.size.height !== this.prevSize.height ) {
+                       props.height = this.size.height + "px";
+               }
+
+               this.helper.css( props );
+
+               return props;
+       },
+
+       _updateVirtualBoundaries: function(forceAspectRatio) {
                var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
                        o = this.options;
 
                b = {
-                       minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
-                       maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
-                       minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
-                       maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
+                       minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+                       maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+                       minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+                       maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
                };
 
-               if(this._aspectRatio || forceAspectRatio) {
-                       // We want to create an enclosing box whose aspect ration is the requested one
-                       // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
+               if (this._aspectRatio || forceAspectRatio) {
                        pMinWidth = b.minHeight * this.aspectRatio;
                        pMinHeight = b.minWidth / this.aspectRatio;
                        pMaxWidth = b.maxHeight * this.aspectRatio;
                        pMaxHeight = b.maxWidth / this.aspectRatio;
 
-                       if(pMinWidth > b.minWidth) {
+                       if (pMinWidth > b.minWidth) {
                                b.minWidth = pMinWidth;
                        }
-                       if(pMinHeight > b.minHeight) {
+                       if (pMinHeight > b.minHeight) {
                                b.minHeight = pMinHeight;
                        }
-                       if(pMaxWidth < b.maxWidth) {
+                       if (pMaxWidth < b.maxWidth) {
                                b.maxWidth = pMaxWidth;
                        }
-                       if(pMaxHeight < b.maxHeight) {
+                       if (pMaxHeight < b.maxHeight) {
                                b.maxHeight = pMaxHeight;
                        }
                }
@@ -3204,16 +3575,16 @@ $.widget("ui.resizable", $.ui.mouse, {
 
        _updateCache: function(data) {
                this.offset = this.helper.offset();
-               if (isNumber(data.left)) {
+               if (this._isNumber(data.left)) {
                        this.position.left = data.left;
                }
-               if (isNumber(data.top)) {
+               if (this._isNumber(data.top)) {
                        this.position.top = data.top;
                }
-               if (isNumber(data.height)) {
+               if (this._isNumber(data.height)) {
                        this.size.height = data.height;
                }
-               if (isNumber(data.width)) {
+               if (this._isNumber(data.width)) {
                        this.size.width = data.width;
                }
        },
@@ -3224,9 +3595,9 @@ $.widget("ui.resizable", $.ui.mouse, {
                        csize = this.size,
                        a = this.axis;
 
-               if (isNumber(data.height)) {
+               if (this._isNumber(data.height)) {
                        data.width = (data.height * this.aspectRatio);
-               } else if (isNumber(data.width)) {
+               } else if (this._isNumber(data.width)) {
                        data.height = (data.width / this.aspectRatio);
                }
 
@@ -3246,8 +3617,10 @@ $.widget("ui.resizable", $.ui.mouse, {
 
                var o = this._vBoundaries,
                        a = this.axis,
-                       ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
-                       isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+                       ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+                       ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+                       isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+                       isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
                        dw = this.originalPosition.left + this.originalSize.width,
                        dh = this.position.top + this.size.height,
                        cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
@@ -3277,7 +3650,7 @@ $.widget("ui.resizable", $.ui.mouse, {
                        data.top = dh - o.maxHeight;
                }
 
-               // fixing jump error on top/left - bug #2330
+               // Fixing jump error on top/left - bug #2330
                if (!data.width && !data.height && !data.left && data.top) {
                        data.top = null;
                } else if (!data.width && !data.height && !data.top && data.left) {
@@ -3287,32 +3660,56 @@ $.widget("ui.resizable", $.ui.mouse, {
                return data;
        },
 
+       _getPaddingPlusBorderDimensions: function( element ) {
+               var i = 0,
+                       widths = [],
+                       borders = [
+                               element.css( "borderTopWidth" ),
+                               element.css( "borderRightWidth" ),
+                               element.css( "borderBottomWidth" ),
+                               element.css( "borderLeftWidth" )
+                       ],
+                       paddings = [
+                               element.css( "paddingTop" ),
+                               element.css( "paddingRight" ),
+                               element.css( "paddingBottom" ),
+                               element.css( "paddingLeft" )
+                       ];
+
+               for ( ; i < 4; i++ ) {
+                       widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );
+                       widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );
+               }
+
+               return {
+                       height: widths[ 0 ] + widths[ 2 ],
+                       width: widths[ 1 ] + widths[ 3 ]
+               };
+       },
+
        _proportionallyResize: function() {
 
                if (!this._proportionallyResizeElements.length) {
                        return;
                }
 
-               var i, j, borders, paddings, prel,
+               var prel,
+                       i = 0,
                        element = this.helper || this.element;
 
-               for ( i=0; i < this._proportionallyResizeElements.length; i++) {
+               for ( ; i < this._proportionallyResizeElements.length; i++) {
 
                        prel = this._proportionallyResizeElements[i];
 
-                       if (!this.borderDif) {
-                               this.borderDif = [];
-                               borders = [prel.css("borderTopWidth"), prel.css("borderRightWidth"), prel.css("borderBottomWidth"), prel.css("borderLeftWidth")];
-                               paddings = [prel.css("paddingTop"), prel.css("paddingRight"), prel.css("paddingBottom"), prel.css("paddingLeft")];
-
-                               for ( j = 0; j < borders.length; j++ ) {
-                                       this.borderDif[ j ] = ( parseInt( borders[ j ], 10 ) || 0 ) + ( parseInt( paddings[ j ], 10 ) || 0 );
-                               }
+                       // TODO: Seems like a bug to cache this.outerDimensions
+                       // considering that we are in a loop.
+                       if (!this.outerDimensions) {
+                               this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
                        }
 
                        prel.css({
-                               height: (element.height() - this.borderDif[0] - this.borderDif[2]) || 0,
-                               width: (element.width() - this.borderDif[1] - this.borderDif[3]) || 0
+                               height: (element.height() - this.outerDimensions.height) || 0,
+                               width: (element.width() - this.outerDimensions.width) || 0
                        });
 
                }
@@ -3324,7 +3721,7 @@ $.widget("ui.resizable", $.ui.mouse, {
                var el = this.element, o = this.options;
                this.elementOffset = el.offset();
 
-               if(this._helper) {
+               if (this._helper) {
 
                        this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
 
@@ -3332,8 +3729,8 @@ $.widget("ui.resizable", $.ui.mouse, {
                                width: this.element.outerWidth() - 1,
                                height: this.element.outerHeight() - 1,
                                position: "absolute",
-                               left: this.elementOffset.left +"px",
-                               top: this.elementOffset.top +"px",
+                               left: this.elementOffset.left + "px",
+                               top: this.elementOffset.top + "px",
                                zIndex: ++o.zIndex //TODO: Don't modify option
                        });
 
@@ -3363,21 +3760,25 @@ $.widget("ui.resizable", $.ui.mouse, {
                        return { height: this.originalSize.height + dy };
                },
                se: function(event, dx, dy) {
-                       return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+                       return $.extend(this._change.s.apply(this, arguments),
+                               this._change.e.apply(this, [ event, dx, dy ]));
                },
                sw: function(event, dx, dy) {
-                       return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+                       return $.extend(this._change.s.apply(this, arguments),
+                               this._change.w.apply(this, [ event, dx, dy ]));
                },
                ne: function(event, dx, dy) {
-                       return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [event, dx, dy]));
+                       return $.extend(this._change.n.apply(this, arguments),
+                               this._change.e.apply(this, [ event, dx, dy ]));
                },
                nw: function(event, dx, dy) {
-                       return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [event, dx, dy]));
+                       return $.extend(this._change.n.apply(this, arguments),
+                               this._change.w.apply(this, [ event, dx, dy ]));
                }
        },
 
        _propagate: function(n, event) {
-               $.ui.plugin.call(this, n, [event, this.ui()]);
+               $.ui.plugin.call(this, n, [ event, this.ui() ]);
                (n !== "resize" && this._trigger(n, event, this.ui()));
        },
 
@@ -3404,15 +3805,17 @@ $.widget("ui.resizable", $.ui.mouse, {
 $.ui.plugin.add("resizable", "animate", {
 
        stop: function( event ) {
-               var that = $(this).data("ui-resizable"),
+               var that = $(this).resizable( "instance" ),
                        o = that.options,
                        pr = that._proportionallyResizeElements,
                        ista = pr.length && (/textarea/i).test(pr[0].nodeName),
-                       soffseth = ista && $.ui.hasScroll(pr[0], "left") /* TODO - jump height */ ? 0 : that.sizeDiff.height,
+                       soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
                        soffsetw = ista ? 0 : that.sizeDiff.width,
                        style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
-                       left = (parseInt(that.element.css("left"), 10) + (that.position.left - that.originalPosition.left)) || null,
-                       top = (parseInt(that.element.css("top"), 10) + (that.position.top - that.originalPosition.top)) || null;
+                       left = (parseInt(that.element.css("left"), 10) +
+                               (that.position.left - that.originalPosition.left)) || null,
+                       top = (parseInt(that.element.css("top"), 10) +
+                               (that.position.top - that.originalPosition.top)) || null;
 
                that.element.animate(
                        $.extend(style, top && left ? { top: top, left: left } : {}), {
@@ -3442,138 +3845,193 @@ $.ui.plugin.add("resizable", "animate", {
 
 });
 
-$.ui.plugin.add("resizable", "containment", {
+$.ui.plugin.add( "resizable", "containment", {
 
        start: function() {
                var element, p, co, ch, cw, width, height,
-                       that = $(this).data("ui-resizable"),
+                       that = $( this ).resizable( "instance" ),
                        o = that.options,
                        el = that.element,
                        oc = o.containment,
-                       ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
+                       ce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
 
-               if (!ce) {
+               if ( !ce ) {
                        return;
                }
 
-               that.containerElement = $(ce);
+               that.containerElement = $( ce );
 
-               if (/document/.test(oc) || oc === document) {
-                       that.containerOffset = { left: 0, top: 0 };
-                       that.containerPosition = { left: 0, top: 0 };
+               if ( /document/.test( oc ) || oc === document ) {
+                       that.containerOffset = {
+                               left: 0,
+                               top: 0
+                       };
+                       that.containerPosition = {
+                               left: 0,
+                               top: 0
+                       };
 
                        that.parentData = {
-                               element: $(document), left: 0, top: 0,
-                               width: $(document).width(), height: $(document).height() || document.body.parentNode.scrollHeight
+                               element: $( document ),
+                               left: 0,
+                               top: 0,
+                               width: $( document ).width(),
+                               height: $( document ).height() || document.body.parentNode.scrollHeight
                        };
-               }
-
-               // i'm a node, so compute top, left, right, bottom
-               else {
-                       element = $(ce);
+               } else {
+                       element = $( ce );
                        p = [];
-                       $([ "Top", "Right", "Left", "Bottom" ]).each(function(i, name) { p[i] = num(element.css("padding" + name)); });
+                       $([ "Top", "Right", "Left", "Bottom" ]).each(function( i, name ) {
+                               p[ i ] = that._num( element.css( "padding" + name ) );
+                       });
 
                        that.containerOffset = element.offset();
                        that.containerPosition = element.position();
-                       that.containerSize = { height: (element.innerHeight() - p[3]), width: (element.innerWidth() - p[1]) };
+                       that.containerSize = {
+                               height: ( element.innerHeight() - p[ 3 ] ),
+                               width: ( element.innerWidth() - p[ 1 ] )
+                       };
 
                        co = that.containerOffset;
                        ch = that.containerSize.height;
                        cw = that.containerSize.width;
-                       width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw );
-                       height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
+                       width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+                       height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
 
                        that.parentData = {
-                               element: ce, left: co.left, top: co.top, width: width, height: height
+                               element: ce,
+                               left: co.left,
+                               top: co.top,
+                               width: width,
+                               height: height
                        };
                }
        },
 
        resize: function( event ) {
                var woset, hoset, isParent, isOffsetRelative,
-                       that = $(this).data("ui-resizable"),
+                       that = $( this ).resizable( "instance" ),
                        o = that.options,
-                       co = that.containerOffset, cp = that.position,
+                       co = that.containerOffset,
+                       cp = that.position,
                        pRatio = that._aspectRatio || event.shiftKey,
-                       cop = { top:0, left:0 }, ce = that.containerElement;
+                       cop = {
+                               top: 0,
+                               left: 0
+                       },
+                       ce = that.containerElement,
+                       continueResize = true;
 
-               if (ce[0] !== document && (/static/).test(ce.css("position"))) {
+               if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
                        cop = co;
                }
 
-               if (cp.left < (that._helper ? co.left : 0)) {
-                       that.size.width = that.size.width + (that._helper ? (that.position.left - co.left) : (that.position.left - cop.left));
-                       if (pRatio) {
+               if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+                       that.size.width = that.size.width +
+                               ( that._helper ?
+                                       ( that.position.left - co.left ) :
+                                       ( that.position.left - cop.left ) );
+
+                       if ( pRatio ) {
                                that.size.height = that.size.width / that.aspectRatio;
+                               continueResize = false;
                        }
                        that.position.left = o.helper ? co.left : 0;
                }
 
-               if (cp.top < (that._helper ? co.top : 0)) {
-                       that.size.height = that.size.height + (that._helper ? (that.position.top - co.top) : that.position.top);
-                       if (pRatio) {
+               if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+                       that.size.height = that.size.height +
+                               ( that._helper ?
+                                       ( that.position.top - co.top ) :
+                                       that.position.top );
+
+                       if ( pRatio ) {
                                that.size.width = that.size.height * that.aspectRatio;
+                               continueResize = false;
                        }
                        that.position.top = that._helper ? co.top : 0;
                }
 
-               that.offset.left = that.parentData.left+that.position.left;
-               that.offset.top = that.parentData.top+that.position.top;
+               isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+               isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
 
-               woset = Math.abs( (that._helper ? that.offset.left - cop.left : (that.offset.left - cop.left)) + that.sizeDiff.width );
-               hoset = Math.abs( (that._helper ? that.offset.top - cop.top : (that.offset.top - co.top)) + that.sizeDiff.height );
+               if ( isParent && isOffsetRelative ) {
+                       that.offset.left = that.parentData.left + that.position.left;
+                       that.offset.top = that.parentData.top + that.position.top;
+               } else {
+                       that.offset.left = that.element.offset().left;
+                       that.offset.top = that.element.offset().top;
+               }
 
-               isParent = that.containerElement.get(0) === that.element.parent().get(0);
-               isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+               woset = Math.abs( that.sizeDiff.width +
+                       (that._helper ?
+                               that.offset.left - cop.left :
+                               (that.offset.left - co.left)) );
 
-               if(isParent && isOffsetRelative) {
-                       woset -= that.parentData.left;
-               }
+               hoset = Math.abs( that.sizeDiff.height +
+                       (that._helper ?
+                               that.offset.top - cop.top :
+                               (that.offset.top - co.top)) );
 
-               if (woset + that.size.width >= that.parentData.width) {
+               if ( woset + that.size.width >= that.parentData.width ) {
                        that.size.width = that.parentData.width - woset;
-                       if (pRatio) {
+                       if ( pRatio ) {
                                that.size.height = that.size.width / that.aspectRatio;
+                               continueResize = false;
                        }
                }
 
-               if (hoset + that.size.height >= that.parentData.height) {
+               if ( hoset + that.size.height >= that.parentData.height ) {
                        that.size.height = that.parentData.height - hoset;
-                       if (pRatio) {
+                       if ( pRatio ) {
                                that.size.width = that.size.height * that.aspectRatio;
+                               continueResize = false;
                        }
                }
+
+               if ( !continueResize ) {
+                       that.position.left = that.prevPosition.left;
+                       that.position.top = that.prevPosition.top;
+                       that.size.width = that.prevSize.width;
+                       that.size.height = that.prevSize.height;
+               }
        },
 
-       stop: function(){
-               var that = $(this).data("ui-resizable"),
+       stop: function() {
+               var that = $( this ).resizable( "instance" ),
                        o = that.options,
                        co = that.containerOffset,
                        cop = that.containerPosition,
                        ce = that.containerElement,
-                       helper = $(that.helper),
+                       helper = $( that.helper ),
                        ho = helper.offset(),
                        w = helper.outerWidth() - that.sizeDiff.width,
                        h = helper.outerHeight() - that.sizeDiff.height;
 
-               if (that._helper && !o.animate && (/relative/).test(ce.css("position"))) {
-                       $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+               if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+                       $( this ).css({
+                               left: ho.left - cop.left - co.left,
+                               width: w,
+                               height: h
+                       });
                }
 
-               if (that._helper && !o.animate && (/static/).test(ce.css("position"))) {
-                       $(this).css({ left: ho.left - cop.left - co.left, width: w, height: h });
+               if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+                       $( this ).css({
+                               left: ho.left - cop.left - co.left,
+                               width: w,
+                               height: h
+                       });
                }
-
        }
 });
 
 $.ui.plugin.add("resizable", "alsoResize", {
 
-       start: function () {
-               var that = $(this).data("ui-resizable"),
+       start: function() {
+               var that = $(this).resizable( "instance" ),
                        o = that.options,
-                       _store = function (exp) {
+                       _store = function(exp) {
                                $(exp).each(function() {
                                        var el = $(this);
                                        el.data("ui-resizable-alsoresize", {
@@ -3584,30 +4042,42 @@ $.ui.plugin.add("resizable", "alsoResize", {
                        };
 
                if (typeof(o.alsoResize) === "object" && !o.alsoResize.parentNode) {
-                       if (o.alsoResize.length) { o.alsoResize = o.alsoResize[0]; _store(o.alsoResize); }
-                       else { $.each(o.alsoResize, function (exp) { _store(exp); }); }
-               }else{
+                       if (o.alsoResize.length) {
+                               o.alsoResize = o.alsoResize[0];
+                               _store(o.alsoResize);
+                       } else {
+                               $.each(o.alsoResize, function(exp) {
+                                       _store(exp);
+                               });
+                       }
+               } else {
                        _store(o.alsoResize);
                }
        },
 
-       resize: function (event, ui) {
-               var that = $(this).data("ui-resizable"),
+       resize: function(event, ui) {
+               var that = $(this).resizable( "instance" ),
                        o = that.options,
                        os = that.originalSize,
                        op = that.originalPosition,
                        delta = {
-                               height: (that.size.height - os.height) || 0, width: (that.size.width - os.width) || 0,
-                               top: (that.position.top - op.top) || 0, left: (that.position.left - op.left) || 0
+                               height: (that.size.height - os.height) || 0,
+                               width: (that.size.width - os.width) || 0,
+                               top: (that.position.top - op.top) || 0,
+                               left: (that.position.left - op.left) || 0
                        },
 
-                       _alsoResize = function (exp, c) {
+                       _alsoResize = function(exp, c) {
                                $(exp).each(function() {
                                        var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
-                                               css = c && c.length ? c : el.parents(ui.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
-
-                                       $.each(css, function (i, prop) {
-                                               var sum = (start[prop]||0) + (delta[prop]||0);
+                                               css = c && c.length ?
+                                                       c :
+                                                       el.parents(ui.originalElement[0]).length ?
+                                                               [ "width", "height" ] :
+                                                               [ "width", "height", "top", "left" ];
+
+                                       $.each(css, function(i, prop) {
+                                               var sum = (start[prop] || 0) + (delta[prop] || 0);
                                                if (sum && sum >= 0) {
                                                        style[prop] = sum || null;
                                                }
@@ -3618,13 +4088,15 @@ $.ui.plugin.add("resizable", "alsoResize", {
                        };
 
                if (typeof(o.alsoResize) === "object" && !o.alsoResize.nodeType) {
-                       $.each(o.alsoResize, function (exp, c) { _alsoResize(exp, c); });
-               }else{
+                       $.each(o.alsoResize, function(exp, c) {
+                               _alsoResize(exp, c);
+                       });
+               } else {
                        _alsoResize(o.alsoResize);
                }
        },
 
-       stop: function () {
+       stop: function() {
                $(this).removeData("resizable-alsoresize");
        }
 });
@@ -3633,11 +4105,20 @@ $.ui.plugin.add("resizable", "ghost", {
 
        start: function() {
 
-               var that = $(this).data("ui-resizable"), o = that.options, cs = that.size;
+               var that = $(this).resizable( "instance" ), o = that.options, cs = that.size;
 
                that.ghost = that.originalElement.clone();
                that.ghost
-                       .css({ opacity: 0.25, display: "block", position: "relative", height: cs.height, width: cs.width, margin: 0, left: 0, top: 0 })
+                       .css({
+                               opacity: 0.25,
+                               display: "block",
+                               position: "relative",
+                               height: cs.height,
+                               width: cs.width,
+                               margin: 0,
+                               left: 0,
+                               top: 0
+                       })
                        .addClass("ui-resizable-ghost")
                        .addClass(typeof o.ghost === "string" ? o.ghost : "");
 
@@ -3645,15 +4126,19 @@ $.ui.plugin.add("resizable", "ghost", {
 
        },
 
-       resize: function(){
-               var that = $(this).data("ui-resizable");
+       resize: function() {
+               var that = $(this).resizable( "instance" );
                if (that.ghost) {
-                       that.ghost.css({ position: "relative", height: that.size.height, width: that.size.width });
+                       that.ghost.css({
+                               position: "relative",
+                               height: that.size.height,
+                               width: that.size.width
+                       });
                }
        },
 
        stop: function() {
-               var that = $(this).data("ui-resizable");
+               var that = $(this).resizable( "instance" );
                if (that.ghost && that.helper) {
                        that.helper.get(0).removeChild(that.ghost.get(0));
                }
@@ -3664,15 +4149,16 @@ $.ui.plugin.add("resizable", "ghost", {
 $.ui.plugin.add("resizable", "grid", {
 
        resize: function() {
-               var that = $(this).data("ui-resizable"),
+               var outerDimensions,
+                       that = $(this).resizable( "instance" ),
                        o = that.options,
                        cs = that.size,
                        os = that.originalSize,
                        op = that.originalPosition,
                        a = that.axis,
-                       grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
-                       gridX = (grid[0]||1),
-                       gridY = (grid[1]||1),
+                       grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+                       gridX = (grid[0] || 1),
+                       gridY = (grid[1] || 1),
                        ox = Math.round((cs.width - os.width) / gridX) * gridX,
                        oy = Math.round((cs.height - os.height) / gridY) * gridY,
                        newWidth = os.width + ox,
@@ -3685,16 +4171,16 @@ $.ui.plugin.add("resizable", "grid", {
                o.grid = grid;
 
                if (isMinWidth) {
-                       newWidth = newWidth + gridX;
+                       newWidth += gridX;
                }
                if (isMinHeight) {
-                       newHeight = newHeight + gridY;
+                       newHeight += gridY;
                }
                if (isMaxWidth) {
-                       newWidth = newWidth - gridX;
+                       newWidth -= gridX;
                }
                if (isMaxHeight) {
-                       newHeight = newHeight - gridY;
+                       newHeight -= gridY;
                }
 
                if (/^(se|s|e)$/.test(a)) {
@@ -3709,20 +4195,48 @@ $.ui.plugin.add("resizable", "grid", {
                        that.size.height = newHeight;
                        that.position.left = op.left - ox;
                } else {
-                       that.size.width = newWidth;
-                       that.size.height = newHeight;
-                       that.position.top = op.top - oy;
-                       that.position.left = op.left - ox;
+                       if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+                               outerDimensions = that._getPaddingPlusBorderDimensions( this );
+                       }
+
+                       if ( newHeight - gridY > 0 ) {
+                               that.size.height = newHeight;
+                               that.position.top = op.top - oy;
+                       } else {
+                               newHeight = gridY - outerDimensions.height;
+                               that.size.height = newHeight;
+                               that.position.top = op.top + os.height - newHeight;
+                       }
+                       if ( newWidth - gridX > 0 ) {
+                               that.size.width = newWidth;
+                               that.position.left = op.left - ox;
+                       } else {
+                               newWidth = gridX - outerDimensions.width;
+                               that.size.width = newWidth;
+                               that.position.left = op.left + os.width - newWidth;
+                       }
                }
        }
 
 });
 
-})(jQuery);
-(function( $, undefined ) {
+var resizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Selectable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ */
+
 
-$.widget("ui.selectable", $.ui.mouse, {
-       version: "1.10.3",
+var selectable = $.widget("ui.selectable", $.ui.mouse, {
+       version: "1.11.3",
        options: {
                appendTo: "body",
                autoRefresh: true,
@@ -3789,7 +4303,7 @@ $.widget("ui.selectable", $.ui.mouse, {
                var that = this,
                        options = this.options;
 
-               this.opos = [event.pageX, event.pageY];
+               this.opos = [ event.pageX, event.pageY ];
 
                if (this.options.disabled) {
                        return;
@@ -3872,7 +4386,7 @@ $.widget("ui.selectable", $.ui.mouse, {
 
                if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
                if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
-               this.helper.css({left: x1, top: y1, width: x2-x1, height: y2-y1});
+               this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });
 
                this.selectees.each(function() {
                        var selectee = $.data(this, "selectable-item"),
@@ -3980,21 +4494,21 @@ $.widget("ui.selectable", $.ui.mouse, {
 
 });
 
-})(jQuery);
-(function( $, undefined ) {
-
-/*jshint loopfunc: true */
 
-function isOverAxis( x, reference, size ) {
-       return ( x > reference ) && ( x < ( reference + size ) );
-}
+/*!
+ * jQuery UI Sortable 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
 
-function isFloating(item) {
-       return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
-}
 
-$.widget("ui.sortable", $.ui.mouse, {
-       version: "1.10.3",
+var sortable = $.widget("ui.sortable", $.ui.mouse, {
+       version: "1.11.3",
        widgetEventPrefix: "sort",
        ready: false,
        options: {
@@ -4035,6 +4549,15 @@ $.widget("ui.sortable", $.ui.mouse, {
                stop: null,
                update: null
        },
+
+       _isOverAxis: function( x, reference, size ) {
+               return ( x >= reference ) && ( x < ( reference + size ) );
+       },
+
+       _isFloating: function( item ) {
+               return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+       },
+
        _create: function() {
 
                var o = this.options;
@@ -4045,7 +4568,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                this.refresh();
 
                //Let's determine if the items are being displayed horizontally
-               this.floating = this.items.length ? o.axis === "x" || isFloating(this.items[0].item) : false;
+               this.floating = this.items.length ? o.axis === "x" || this._isFloating(this.items[0].item) : false;
 
                //Let's determine the parent's offset
                this.offset = this.element.offset();
@@ -4053,14 +4576,35 @@ $.widget("ui.sortable", $.ui.mouse, {
                //Initialize mouse events for interaction
                this._mouseInit();
 
+               this._setHandleClassName();
+
                //We're ready to go
                this.ready = true;
 
        },
 
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "handle" ) {
+                       this._setHandleClassName();
+               }
+       },
+
+       _setHandleClassName: function() {
+               this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
+               $.each( this.items, function() {
+                       ( this.instance.options.handle ?
+                               this.item.find( this.instance.options.handle ) : this.item )
+                               .addClass( "ui-sortable-handle" );
+               });
+       },
+
        _destroy: function() {
                this.element
-                       .removeClass("ui-sortable ui-sortable-disabled");
+                       .removeClass( "ui-sortable ui-sortable-disabled" )
+                       .find( ".ui-sortable-handle" )
+                               .removeClass( "ui-sortable-handle" );
                this._mouseDestroy();
 
                for ( var i = this.items.length - 1; i >= 0; i-- ) {
@@ -4070,17 +4614,6 @@ $.widget("ui.sortable", $.ui.mouse, {
                return this;
        },
 
-       _setOption: function(key, value){
-               if ( key === "disabled" ) {
-                       this.options[ key ] = value;
-
-                       this.widget().toggleClass( "ui-sortable-disabled", !!value );
-               } else {
-                       // Don't call widget base _setOption for disable as it adds ui-state-disabled class
-                       $.Widget.prototype._setOption.apply(this, arguments);
-               }
-       },
-
        _mouseCapture: function(event, overrideHandle) {
                var currentItem = null,
                        validHandle = false,
@@ -4225,7 +4758,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                }
 
                //Prepare scrolling
-               if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+               if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
                        this.overflowOffset = this.scrollParent.offset();
                }
 
@@ -4277,7 +4810,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                //Do scrolling
                if(this.options.scroll) {
-                       if(this.scrollParent[0] !== document && this.scrollParent[0].tagName !== "HTML") {
+                       if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
 
                                if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
                                        this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
@@ -4293,16 +4826,16 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                        } else {
 
-                               if(event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
-                                       scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
-                               } else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
-                                       scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+                               if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+                                       scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+                               } else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+                                       scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
                                }
 
-                               if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
-                                       scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
-                               } else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
-                                       scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+                               if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+                                       scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+                               } else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+                                       scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
                                }
 
                        }
@@ -4335,12 +4868,12 @@ $.widget("ui.sortable", $.ui.mouse, {
                        }
 
                        // Only put the placeholder inside the current Container, skip all
-                       // items form other containers. This works because when moving
+                       // items from other containers. This works because when moving
                        // an item from one container to another the
                        // currentContainer is switched before the placeholder is moved.
                        //
-                       // Without this moving items in "sub-sortables" can cause the placeholder to jitter
-                       // beetween the outer and inner container.
+                       // Without this, moving items in "sub-sortables" can cause
+                       // the placeholder to jitter between the outer and inner container.
                        if (item.instance !== this.currentContainer) {
                                continue;
                        }
@@ -4401,10 +4934,10 @@ $.widget("ui.sortable", $.ui.mouse, {
                                animation = {};
 
                        if ( !axis || axis === "x" ) {
-                               animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft);
+                               animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
                        }
                        if ( !axis || axis === "y" ) {
-                               animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop);
+                               animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
                        }
                        this.reverting = true;
                        $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
@@ -4535,8 +5068,8 @@ $.widget("ui.sortable", $.ui.mouse, {
 
        _intersectsWithPointer: function(item) {
 
-               var isOverElementHeight = (this.options.axis === "x") || isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
-                       isOverElementWidth = (this.options.axis === "y") || isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+               var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+                       isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
                        isOverElement = isOverElementHeight && isOverElementWidth,
                        verticalDirection = this._getDragVerticalDirection(),
                        horizontalDirection = this._getDragHorizontalDirection();
@@ -4553,8 +5086,8 @@ $.widget("ui.sortable", $.ui.mouse, {
 
        _intersectsWithSides: function(item) {
 
-               var isOverBottomHalf = isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
-                       isOverRightHalf = isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+               var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+                       isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
                        verticalDirection = this._getDragVerticalDirection(),
                        horizontalDirection = this._getDragHorizontalDirection();
 
@@ -4578,6 +5111,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
        refresh: function(event) {
                this._refreshItems(event);
+               this._setHandleClassName();
                this.refreshPositions();
                return this;
        },
@@ -4596,7 +5130,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                if(connectWith && connected) {
                        for (i = connectWith.length - 1; i >= 0; i--){
-                               cur = $(connectWith[i]);
+                               cur = $(connectWith[i], this.document[0]);
                                for ( j = cur.length - 1; j >= 0; j--){
                                        inst = $.data(cur[j], this.widgetFullName);
                                        if(inst && inst !== this && !inst.options.disabled) {
@@ -4608,10 +5142,11 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
 
+               function addItems() {
+                       items.push( this );
+               }
                for (i = queries.length - 1; i >= 0; i--){
-                       queries[i][0].each(function() {
-                               items.push(this);
-                       });
+                       queries[i][0].each( addItems );
                }
 
                return $(items);
@@ -4645,7 +5180,7 @@ $.widget("ui.sortable", $.ui.mouse, {
 
                if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
                        for (i = connectWith.length - 1; i >= 0; i--){
-                               cur = $(connectWith[i]);
+                               cur = $(connectWith[i], this.document[0]);
                                for (j = cur.length - 1; j >= 0; j--){
                                        inst = $.data(cur[j], this.widgetFullName);
                                        if(inst && inst !== this && !inst.options.disabled) {
@@ -4712,7 +5247,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                                p = this.containers[i].element.offset();
                                this.containers[i].containerCache.left = p.left;
                                this.containers[i].containerCache.top = p.top;
-                               this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+                               this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
                                this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
                        }
                }
@@ -4778,7 +5313,7 @@ $.widget("ui.sortable", $.ui.mouse, {
        },
 
        _contactContainers: function(event) {
-               var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, base, cur, nearBottom, floating,
+               var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
                        innermostContainer = null,
                        innermostIndex = null;
 
@@ -4826,10 +5361,11 @@ $.widget("ui.sortable", $.ui.mouse, {
                        //When entering a new container, we will find the item with the least distance and append our item near it
                        dist = 10000;
                        itemWithLeastDistance = null;
-                       floating = innermostContainer.floating || isFloating(this.currentItem);
+                       floating = innermostContainer.floating || this._isFloating(this.currentItem);
                        posProperty = floating ? "left" : "top";
                        sizeProperty = floating ? "width" : "height";
-                       base = this.positionAbs[posProperty] + this.offset.click[posProperty];
+                       axis = floating ? "clientX" : "clientY";
+
                        for (j = this.items.length - 1; j >= 0; j--) {
                                if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
                                        continue;
@@ -4837,18 +5373,16 @@ $.widget("ui.sortable", $.ui.mouse, {
                                if(this.items[j].item[0] === this.currentItem[0]) {
                                        continue;
                                }
-                               if (floating && !isOverAxis(this.positionAbs.top + this.offset.click.top, this.items[j].top, this.items[j].height)) {
-                                       continue;
-                               }
+
                                cur = this.items[j].item.offset()[posProperty];
                                nearBottom = false;
-                               if(Math.abs(cur - base) > Math.abs(cur + this.items[j][sizeProperty] - base)){
+                               if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
                                        nearBottom = true;
-                                       cur += this.items[j][sizeProperty];
                                }
 
-                               if(Math.abs(cur - base) < dist) {
-                                       dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+                               if ( Math.abs( event[ axis ] - cur ) < dist ) {
+                                       dist = Math.abs( event[ axis ] - cur );
+                                       itemWithLeastDistance = this.items[ j ];
                                        this.direction = nearBottom ? "up": "down";
                                }
                        }
@@ -4859,6 +5393,10 @@ $.widget("ui.sortable", $.ui.mouse, {
                        }
 
                        if(this.currentContainer === this.containers[innermostIndex]) {
+                               if ( !this.currentContainer.containerCache.over ) {
+                                       this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+                                       this.currentContainer.containerCache.over = 1;
+                               }
                                return;
                        }
 
@@ -4934,14 +5472,14 @@ $.widget("ui.sortable", $.ui.mouse, {
                // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
                // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
                //    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-               if(this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+               if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
                        po.left += this.scrollParent.scrollLeft();
                        po.top += this.scrollParent.scrollTop();
                }
 
                // This needs to be actually done for all browsers, since pageX/pageY includes this information
                // with an ugly IE fix
-               if( this.offsetParent[0] === document.body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+               if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
                        po = { top: 0, left: 0 };
                }
 
@@ -4991,8 +5529,8 @@ $.widget("ui.sortable", $.ui.mouse, {
                        this.containment = [
                                0 - this.offset.relative.left - this.offset.parent.left,
                                0 - this.offset.relative.top - this.offset.parent.top,
-                               $(o.containment === "document" ? document : window).width() - this.helperProportions.width - this.margins.left,
-                               ($(o.containment === "document" ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+                               o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+                               (o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
                        ];
                }
 
@@ -5017,7 +5555,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                        pos = this.position;
                }
                var mod = d === "absolute" ? 1 : -1,
-                       scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+                       scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
                        scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
 
                return {
@@ -5043,13 +5581,13 @@ $.widget("ui.sortable", $.ui.mouse, {
                        o = this.options,
                        pageX = event.pageX,
                        pageY = event.pageY,
-                       scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+                       scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
 
                // This is another very weird special case that only happens for relative elements:
                // 1. If the css position is relative
                // 2. and the scroll parent is the document or similar to the offset parent
                // we have to refresh the relative offset during the scroll so there are no jumps
-               if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) {
+               if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
                        this.offset.relative = this._getRelativeOffset();
                }
 
@@ -5169,12 +5707,17 @@ $.widget("ui.sortable", $.ui.mouse, {
 
 
                //Post events to containers
+               function delayEvent( type, instance, container ) {
+                       return function( event ) {
+                               container._trigger( type, event, instance._uiHash( instance ) );
+                       };
+               }
                for (i = this.containers.length - 1; i >= 0; i--){
-                       if(!noPropagation) {
-                               delayedTriggers.push((function(c) { return function(event) { c._trigger("deactivate", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+                       if (!noPropagation) {
+                               delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
                        }
                        if(this.containers[i].containerCache.over) {
-                               delayedTriggers.push((function(c) { return function(event) { c._trigger("out", event, this._uiHash(this)); };  }).call(this, this.containers[i]));
+                               delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
                                this.containers[i].containerCache.over = 0;
                        }
                }
@@ -5192,18 +5735,6 @@ $.widget("ui.sortable", $.ui.mouse, {
                }
 
                this.dragging = false;
-               if(this.cancelHelperRemoval) {
-                       if(!noPropagation) {
-                               this._trigger("beforeStop", event, this._uiHash());
-                               for (i=0; i < delayedTriggers.length; i++) {
-                                       delayedTriggers[i].call(this, event);
-                               } //Trigger all delayed events
-                               this._trigger("stop", event, this._uiHash());
-                       }
-
-                       this.fromOutside = false;
-                       return false;
-               }
 
                if(!noPropagation) {
                        this._trigger("beforeStop", event, this._uiHash());
@@ -5212,10 +5743,12 @@ $.widget("ui.sortable", $.ui.mouse, {
                //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
                this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
 
-               if(this.helper[0] !== this.currentItem[0]) {
-                       this.helper.remove();
+               if ( !this.cancelHelperRemoval ) {
+                       if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+                               this.helper.remove();
+                       }
+                       this.helper = null;
                }
-               this.helper = null;
 
                if(!noPropagation) {
                        for (i=0; i < delayedTriggers.length; i++) {
@@ -5225,7 +5758,7 @@ $.widget("ui.sortable", $.ui.mouse, {
                }
 
                this.fromOutside = false;
-               return true;
+               return !this.cancelHelperRemoval;
 
        },
 
@@ -5250,20 +5783,21 @@ $.widget("ui.sortable", $.ui.mouse, {
 
 });
 
-})(jQuery);
-(function( $, undefined ) {
 
-var uid = 0,
-       hideProps = {},
-       showProps = {};
+/*!
+ * jQuery UI Accordion 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/accordion/
+ */
 
-hideProps.height = hideProps.paddingTop = hideProps.paddingBottom =
-       hideProps.borderTopWidth = hideProps.borderBottomWidth = "hide";
-showProps.height = showProps.paddingTop = showProps.paddingBottom =
-       showProps.borderTopWidth = showProps.borderBottomWidth = "show";
 
-$.widget( "ui.accordion", {
-       version: "1.10.3",
+var accordion = $.widget( "ui.accordion", {
+       version: "1.11.3",
        options: {
                active: 0,
                animate: {},
@@ -5281,6 +5815,22 @@ $.widget( "ui.accordion", {
                beforeActivate: null
        },
 
+       hideProps: {
+               borderTopWidth: "hide",
+               borderBottomWidth: "hide",
+               paddingTop: "hide",
+               paddingBottom: "hide",
+               height: "hide"
+       },
+
+       showProps: {
+               borderTopWidth: "show",
+               borderBottomWidth: "show",
+               paddingTop: "show",
+               paddingBottom: "show",
+               height: "show"
+       },
+
        _create: function() {
                var options = this.options;
                this.prevShow = this.prevHide = $();
@@ -5304,8 +5854,7 @@ $.widget( "ui.accordion", {
        _getCreateEventData: function() {
                return {
                        header: this.active,
-                       panel: !this.active.length ? $() : this.active.next(),
-                       content: !this.active.length ? $() : this.active.next()
+                       panel: !this.active.length ? $() : this.active.next()
                };
        },
 
@@ -5339,31 +5888,27 @@ $.widget( "ui.accordion", {
 
                // clean up headers
                this.headers
-                       .removeClass( "ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+                       .removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " +
+                               "ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
                        .removeAttr( "role" )
+                       .removeAttr( "aria-expanded" )
                        .removeAttr( "aria-selected" )
                        .removeAttr( "aria-controls" )
                        .removeAttr( "tabIndex" )
-                       .each(function() {
-                               if ( /^ui-accordion/.test( this.id ) ) {
-                                       this.removeAttribute( "id" );
-                               }
-                       });
+                       .removeUniqueId();
+
                this._destroyIcons();
 
                // clean up content panels
                contents = this.headers.next()
+                       .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " +
+                               "ui-accordion-content ui-accordion-content-active ui-state-disabled" )
                        .css( "display", "" )
                        .removeAttr( "role" )
-                       .removeAttr( "aria-expanded" )
                        .removeAttr( "aria-hidden" )
                        .removeAttr( "aria-labelledby" )
-                       .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled" )
-                       .each(function() {
-                               if ( /^ui-accordion/.test( this.id ) ) {
-                                       this.removeAttribute( "id" );
-                               }
-                       });
+                       .removeUniqueId();
+
                if ( this.options.heightStyle !== "content" ) {
                        contents.css( "height", "" );
                }
@@ -5400,13 +5945,15 @@ $.widget( "ui.accordion", {
                // #5332 - opacity doesn't cascade to positioned elements in IE
                // so we need to add the disabled class to the headers and panels
                if ( key === "disabled" ) {
+                       this.element
+                               .toggleClass( "ui-state-disabled", !!value )
+                               .attr( "aria-disabled", value );
                        this.headers.add( this.headers.next() )
                                .toggleClass( "ui-state-disabled", !!value );
                }
        },
 
        _keydown: function( event ) {
-               /*jshint maxcomplexity:15*/
                if ( event.altKey || event.ctrlKey ) {
                        return;
                }
@@ -5445,7 +5992,7 @@ $.widget( "ui.accordion", {
                }
        },
 
-       _panelKeyDown : function( event ) {
+       _panelKeyDown: function( event ) {
                if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
                        $( event.currentTarget ).prev().focus();
                }
@@ -5484,22 +6031,29 @@ $.widget( "ui.accordion", {
        },
 
        _processPanels: function() {
+               var prevHeaders = this.headers,
+                       prevPanels = this.panels;
+
                this.headers = this.element.find( this.options.header )
-                       .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" );
+                       .addClass( "ui-accordion-header ui-state-default ui-corner-all" );
 
-               this.headers.next()
+               this.panels = this.headers.next()
                        .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
-                       .filter(":not(.ui-accordion-content-active)")
+                       .filter( ":not(.ui-accordion-content-active)" )
                        .hide();
+
+               // Avoid memory leaks (#10056)
+               if ( prevPanels ) {
+                       this._off( prevHeaders.not( this.headers ) );
+                       this._off( prevPanels.not( this.panels ) );
+               }
        },
 
        _refresh: function() {
                var maxHeight,
                        options = this.options,
                        heightStyle = options.heightStyle,
-                       parent = this.element.parent(),
-                       accordionId = this.accordionId = "ui-accordion-" +
-                               (this.element.attr( "id" ) || ++uid);
+                       parent = this.element.parent();
 
                this.active = this._findActive( options.active )
                        .addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
@@ -5510,19 +6064,11 @@ $.widget( "ui.accordion", {
 
                this.headers
                        .attr( "role", "tab" )
-                       .each(function( i ) {
+                       .each(function() {
                                var header = $( this ),
-                                       headerId = header.attr( "id" ),
+                                       headerId = header.uniqueId().attr( "id" ),
                                        panel = header.next(),
-                                       panelId = panel.attr( "id" );
-                               if ( !headerId ) {
-                                       headerId = accordionId + "-header-" + i;
-                                       header.attr( "id", headerId );
-                               }
-                               if ( !panelId ) {
-                                       panelId = accordionId + "-panel-" + i;
-                                       panel.attr( "id", panelId );
-                               }
+                                       panelId = panel.uniqueId().attr( "id" );
                                header.attr( "aria-controls", panelId );
                                panel.attr( "aria-labelledby", headerId );
                        })
@@ -5533,11 +6079,11 @@ $.widget( "ui.accordion", {
                        .not( this.active )
                        .attr({
                                "aria-selected": "false",
+                               "aria-expanded": "false",
                                tabIndex: -1
                        })
                        .next()
                                .attr({
-                                       "aria-expanded": "false",
                                        "aria-hidden": "true"
                                })
                                .hide();
@@ -5548,11 +6094,11 @@ $.widget( "ui.accordion", {
                } else {
                        this.active.attr({
                                "aria-selected": "true",
+                               "aria-expanded": "true",
                                tabIndex: 0
                        })
                        .next()
                                .attr({
-                                       "aria-expanded": "true",
                                        "aria-hidden": "false"
                                });
                }
@@ -5620,7 +6166,7 @@ $.widget( "ui.accordion", {
                        keydown: "_keydown"
                };
                if ( event ) {
-                       $.each( event.split(" "), function( index, eventName ) {
+                       $.each( event.split( " " ), function( index, eventName ) {
                                events[ eventName ] = "_eventHandler";
                        });
                }
@@ -5707,30 +6253,33 @@ $.widget( "ui.accordion", {
                }
 
                toHide.attr({
-                       "aria-expanded": "false",
                        "aria-hidden": "true"
                });
-               toHide.prev().attr( "aria-selected", "false" );
+               toHide.prev().attr({
+                       "aria-selected": "false",
+                       "aria-expanded": "false"
+               });
                // if we're switching panels, remove the old header from the tab order
                // if we're opening from collapsed state, remove the previous header from the tab order
                // if we're collapsing, then keep the collapsing header in the tab order
                if ( toShow.length && toHide.length ) {
-                       toHide.prev().attr( "tabIndex", -1 );
+                       toHide.prev().attr({
+                               "tabIndex": -1,
+                               "aria-expanded": "false"
+                       });
                } else if ( toShow.length ) {
                        this.headers.filter(function() {
-                               return $( this ).attr( "tabIndex" ) === 0;
+                               return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
                        })
                        .attr( "tabIndex", -1 );
                }
 
                toShow
-                       .attr({
-                               "aria-expanded": "true",
-                               "aria-hidden": "false"
-                       })
+                       .attr( "aria-hidden", "false" )
                        .prev()
                                .attr({
                                        "aria-selected": "true",
+                                       "aria-expanded": "true",
                                        tabIndex: 0
                                });
        },
@@ -5758,14 +6307,14 @@ $.widget( "ui.accordion", {
                duration = duration || options.duration || animate.duration;
 
                if ( !toHide.length ) {
-                       return toShow.animate( showProps, duration, easing, complete );
+                       return toShow.animate( this.showProps, duration, easing, complete );
                }
                if ( !toShow.length ) {
-                       return toHide.animate( hideProps, duration, easing, complete );
+                       return toHide.animate( this.hideProps, duration, easing, complete );
                }
 
                total = toShow.show().outerHeight();
-               toHide.animate( hideProps, {
+               toHide.animate( this.hideProps, {
                        duration: duration,
                        easing: easing,
                        step: function( now, fx ) {
@@ -5774,7 +6323,7 @@ $.widget( "ui.accordion", {
                });
                toShow
                        .hide()
-                       .animate( showProps, {
+                       .animate( this.showProps, {
                                duration: duration,
                                easing: easing,
                                complete: complete,
@@ -5801,78 +6350,715 @@ $.widget( "ui.accordion", {
 
                // Work around for rendering bug in IE (#5421)
                if ( toHide.length ) {
-                       toHide.parent()[0].className = toHide.parent()[0].className;
+                       toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
                }
-
                this._trigger( "activate", null, data );
        }
 });
 
-})( jQuery );
-(function( $, undefined ) {
 
-// used to prevent race conditions with remote data sources
-var requestIndex = 0;
+/*!
+ * jQuery UI Menu 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ */
+
 
-$.widget( "ui.autocomplete", {
-       version: "1.10.3",
-       defaultElement: "<input>",
+var menu = $.widget( "ui.menu", {
+       version: "1.11.3",
+       defaultElement: "<ul>",
+       delay: 300,
        options: {
-               appendTo: null,
-               autoFocus: false,
-               delay: 300,
-               minLength: 1,
+               icons: {
+                       submenu: "ui-icon-carat-1-e"
+               },
+               items: "> *",
+               menus: "ul",
                position: {
-                       my: "left top",
-                       at: "left bottom",
-                       collision: "none"
+                       my: "left-1 top",
+                       at: "right top"
                },
-               source: null,
+               role: "menu",
 
                // callbacks
-               change: null,
-               close: null,
+               blur: null,
                focus: null,
-               open: null,
-               response: null,
-               search: null,
                select: null
        },
 
-       pending: 0,
-
        _create: function() {
-               // Some browsers only repeat keydown events, not keypress events,
-               // so we use the suppressKeyPress flag to determine if we've already
-               // handled the keydown event. #7269
-               // Unfortunately the code for & in keypress is the same as the up arrow,
-               // so we use the suppressKeyPressRepeat flag to avoid handling keypress
-               // events when we know the keydown event was used to modify the
-               // search term. #7799
-               var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
-                       nodeName = this.element[0].nodeName.toLowerCase(),
-                       isTextarea = nodeName === "textarea",
-                       isInput = nodeName === "input";
-
-               this.isMultiLine =
-                       // Textareas are always multi-line
-                       isTextarea ? true :
-                       // Inputs are always single-line, even if inside a contentEditable element
-                       // IE also treats inputs as contentEditable
-                       isInput ? false :
-                       // All other element types are determined by whether or not they're contentEditable
-                       this.element.prop( "isContentEditable" );
-
-               this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
-               this.isNewMenu = true;
+               this.activeMenu = this.element;
 
+               // Flag used to prevent firing of the click handler
+               // as the event bubbles up through nested menus
+               this.mouseHandled = false;
                this.element
-                       .addClass( "ui-autocomplete-input" )
-                       .attr( "autocomplete", "off" );
-
+                       .uniqueId()
+                       .addClass( "ui-menu ui-widget ui-widget-content" )
+                       .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+                       .attr({
+                               role: this.options.role,
+                               tabIndex: 0
+                       });
+
+               if ( this.options.disabled ) {
+                       this.element
+                               .addClass( "ui-state-disabled" )
+                               .attr( "aria-disabled", "true" );
+               }
+
+               this._on({
+                       // Prevent focus from sticking to links inside menu after clicking
+                       // them (focus should always stay on UL during navigation).
+                       "mousedown .ui-menu-item": function( event ) {
+                               event.preventDefault();
+                       },
+                       "click .ui-menu-item": function( event ) {
+                               var target = $( event.target );
+                               if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+                                       this.select( event );
+
+                                       // Only set the mouseHandled flag if the event will bubble, see #9469.
+                                       if ( !event.isPropagationStopped() ) {
+                                               this.mouseHandled = true;
+                                       }
+
+                                       // Open submenu on click
+                                       if ( target.has( ".ui-menu" ).length ) {
+                                               this.expand( event );
+                                       } else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+
+                                               // Redirect focus to the menu
+                                               this.element.trigger( "focus", [ true ] );
+
+                                               // If the active item is on the top level, let it stay active.
+                                               // Otherwise, blur the active item since it is no longer visible.
+                                               if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+                                                       clearTimeout( this.timer );
+                                               }
+                                       }
+                               }
+                       },
+                       "mouseenter .ui-menu-item": function( event ) {
+                               // Ignore mouse events while typeahead is active, see #10458.
+                               // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+                               // is over an item in the menu
+                               if ( this.previousFilter ) {
+                                       return;
+                               }
+                               var target = $( event.currentTarget );
+                               // Remove ui-state-active class from siblings of the newly focused menu item
+                               // to avoid a jump caused by adjacent elements both having a class with a border
+                               target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" );
+                               this.focus( event, target );
+                       },
+                       mouseleave: "collapseAll",
+                       "mouseleave .ui-menu": "collapseAll",
+                       focus: function( event, keepActiveItem ) {
+                               // If there's already an active item, keep it active
+                               // If not, activate the first item
+                               var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+                               if ( !keepActiveItem ) {
+                                       this.focus( event, item );
+                               }
+                       },
+                       blur: function( event ) {
+                               this._delay(function() {
+                                       if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+                                               this.collapseAll( event );
+                                       }
+                               });
+                       },
+                       keydown: "_keydown"
+               });
+
+               this.refresh();
+
+               // Clicks outside of a menu collapse any open menus
+               this._on( this.document, {
+                       click: function( event ) {
+                               if ( this._closeOnDocumentClick( event ) ) {
+                                       this.collapseAll( event );
+                               }
+
+                               // Reset the mouseHandled flag
+                               this.mouseHandled = false;
+                       }
+               });
+       },
+
+       _destroy: function() {
+               // Destroy (sub)menus
+               this.element
+                       .removeAttr( "aria-activedescendant" )
+                       .find( ".ui-menu" ).addBack()
+                               .removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
+                               .removeAttr( "role" )
+                               .removeAttr( "tabIndex" )
+                               .removeAttr( "aria-labelledby" )
+                               .removeAttr( "aria-expanded" )
+                               .removeAttr( "aria-hidden" )
+                               .removeAttr( "aria-disabled" )
+                               .removeUniqueId()
+                               .show();
+
+               // Destroy menu items
+               this.element.find( ".ui-menu-item" )
+                       .removeClass( "ui-menu-item" )
+                       .removeAttr( "role" )
+                       .removeAttr( "aria-disabled" )
+                       .removeUniqueId()
+                       .removeClass( "ui-state-hover" )
+                       .removeAttr( "tabIndex" )
+                       .removeAttr( "role" )
+                       .removeAttr( "aria-haspopup" )
+                       .children().each( function() {
+                               var elem = $( this );
+                               if ( elem.data( "ui-menu-submenu-carat" ) ) {
+                                       elem.remove();
+                               }
+                       });
+
+               // Destroy menu dividers
+               this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+       },
+
+       _keydown: function( event ) {
+               var match, prev, character, skip,
+                       preventDefault = true;
+
+               switch ( event.keyCode ) {
+               case $.ui.keyCode.PAGE_UP:
+                       this.previousPage( event );
+                       break;
+               case $.ui.keyCode.PAGE_DOWN:
+                       this.nextPage( event );
+                       break;
+               case $.ui.keyCode.HOME:
+                       this._move( "first", "first", event );
+                       break;
+               case $.ui.keyCode.END:
+                       this._move( "last", "last", event );
+                       break;
+               case $.ui.keyCode.UP:
+                       this.previous( event );
+                       break;
+               case $.ui.keyCode.DOWN:
+                       this.next( event );
+                       break;
+               case $.ui.keyCode.LEFT:
+                       this.collapse( event );
+                       break;
+               case $.ui.keyCode.RIGHT:
+                       if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+                               this.expand( event );
+                       }
+                       break;
+               case $.ui.keyCode.ENTER:
+               case $.ui.keyCode.SPACE:
+                       this._activate( event );
+                       break;
+               case $.ui.keyCode.ESCAPE:
+                       this.collapse( event );
+                       break;
+               default:
+                       preventDefault = false;
+                       prev = this.previousFilter || "";
+                       character = String.fromCharCode( event.keyCode );
+                       skip = false;
+
+                       clearTimeout( this.filterTimer );
+
+                       if ( character === prev ) {
+                               skip = true;
+                       } else {
+                               character = prev + character;
+                       }
+
+                       match = this._filterMenuItems( character );
+                       match = skip && match.index( this.active.next() ) !== -1 ?
+                               this.active.nextAll( ".ui-menu-item" ) :
+                               match;
+
+                       // If no matches on the current filter, reset to the last character pressed
+                       // to move down the menu to the first item that starts with that character
+                       if ( !match.length ) {
+                               character = String.fromCharCode( event.keyCode );
+                               match = this._filterMenuItems( character );
+                       }
+
+                       if ( match.length ) {
+                               this.focus( event, match );
+                               this.previousFilter = character;
+                               this.filterTimer = this._delay(function() {
+                                       delete this.previousFilter;
+                               }, 1000 );
+                       } else {
+                               delete this.previousFilter;
+                       }
+               }
+
+               if ( preventDefault ) {
+                       event.preventDefault();
+               }
+       },
+
+       _activate: function( event ) {
+               if ( !this.active.is( ".ui-state-disabled" ) ) {
+                       if ( this.active.is( "[aria-haspopup='true']" ) ) {
+                               this.expand( event );
+                       } else {
+                               this.select( event );
+                       }
+               }
+       },
+
+       refresh: function() {
+               var menus, items,
+                       that = this,
+                       icon = this.options.icons.submenu,
+                       submenus = this.element.find( this.options.menus );
+
+               this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
+
+               // Initialize nested menus
+               submenus.filter( ":not(.ui-menu)" )
+                       .addClass( "ui-menu ui-widget ui-widget-content ui-front" )
+                       .hide()
+                       .attr({
+                               role: this.options.role,
+                               "aria-hidden": "true",
+                               "aria-expanded": "false"
+                       })
+                       .each(function() {
+                               var menu = $( this ),
+                                       item = menu.parent(),
+                                       submenuCarat = $( "<span>" )
+                                               .addClass( "ui-menu-icon ui-icon " + icon )
+                                               .data( "ui-menu-submenu-carat", true );
+
+                               item
+                                       .attr( "aria-haspopup", "true" )
+                                       .prepend( submenuCarat );
+                               menu.attr( "aria-labelledby", item.attr( "id" ) );
+                       });
+
+               menus = submenus.add( this.element );
+               items = menus.find( this.options.items );
+
+               // Initialize menu-items containing spaces and/or dashes only as dividers
+               items.not( ".ui-menu-item" ).each(function() {
+                       var item = $( this );
+                       if ( that._isDivider( item ) ) {
+                               item.addClass( "ui-widget-content ui-menu-divider" );
+                       }
+               });
+
+               // Don't refresh list items that are already adapted
+               items.not( ".ui-menu-item, .ui-menu-divider" )
+                       .addClass( "ui-menu-item" )
+                       .uniqueId()
+                       .attr({
+                               tabIndex: -1,
+                               role: this._itemRole()
+                       });
+
+               // Add aria-disabled attribute to any disabled menu item
+               items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+               // If the active item has been removed, blur the menu
+               if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+                       this.blur();
+               }
+       },
+
+       _itemRole: function() {
+               return {
+                       menu: "menuitem",
+                       listbox: "option"
+               }[ this.options.role ];
+       },
+
+       _setOption: function( key, value ) {
+               if ( key === "icons" ) {
+                       this.element.find( ".ui-menu-icon" )
+                               .removeClass( this.options.icons.submenu )
+                               .addClass( value.submenu );
+               }
+               if ( key === "disabled" ) {
+                       this.element
+                               .toggleClass( "ui-state-disabled", !!value )
+                               .attr( "aria-disabled", value );
+               }
+               this._super( key, value );
+       },
+
+       focus: function( event, item ) {
+               var nested, focused;
+               this.blur( event, event && event.type === "focus" );
+
+               this._scrollIntoView( item );
+
+               this.active = item.first();
+               focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" );
+               // Only update aria-activedescendant if there's a role
+               // otherwise we assume focus is managed elsewhere
+               if ( this.options.role ) {
+                       this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+               }
+
+               // Highlight active parent menu item, if any
+               this.active
+                       .parent()
+                       .closest( ".ui-menu-item" )
+                       .addClass( "ui-state-active" );
+
+               if ( event && event.type === "keydown" ) {
+                       this._close();
+               } else {
+                       this.timer = this._delay(function() {
+                               this._close();
+                       }, this.delay );
+               }
+
+               nested = item.children( ".ui-menu" );
+               if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+                       this._startOpening(nested);
+               }
+               this.activeMenu = item.parent();
+
+               this._trigger( "focus", event, { item: item } );
+       },
+
+       _scrollIntoView: function( item ) {
+               var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+               if ( this._hasScroll() ) {
+                       borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+                       paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+                       offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+                       scroll = this.activeMenu.scrollTop();
+                       elementHeight = this.activeMenu.height();
+                       itemHeight = item.outerHeight();
+
+                       if ( offset < 0 ) {
+                               this.activeMenu.scrollTop( scroll + offset );
+                       } else if ( offset + itemHeight > elementHeight ) {
+                               this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+                       }
+               }
+       },
+
+       blur: function( event, fromFocus ) {
+               if ( !fromFocus ) {
+                       clearTimeout( this.timer );
+               }
+
+               if ( !this.active ) {
+                       return;
+               }
+
+               this.active.removeClass( "ui-state-focus" );
+               this.active = null;
+
+               this._trigger( "blur", event, { item: this.active } );
+       },
+
+       _startOpening: function( submenu ) {
+               clearTimeout( this.timer );
+
+               // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+               // shift in the submenu position when mousing over the carat icon
+               if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+                       return;
+               }
+
+               this.timer = this._delay(function() {
+                       this._close();
+                       this._open( submenu );
+               }, this.delay );
+       },
+
+       _open: function( submenu ) {
+               var position = $.extend({
+                       of: this.active
+               }, this.options.position );
+
+               clearTimeout( this.timer );
+               this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+                       .hide()
+                       .attr( "aria-hidden", "true" );
+
+               submenu
+                       .show()
+                       .removeAttr( "aria-hidden" )
+                       .attr( "aria-expanded", "true" )
+                       .position( position );
+       },
+
+       collapseAll: function( event, all ) {
+               clearTimeout( this.timer );
+               this.timer = this._delay(function() {
+                       // If we were passed an event, look for the submenu that contains the event
+                       var currentMenu = all ? this.element :
+                               $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+                       // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+                       if ( !currentMenu.length ) {
+                               currentMenu = this.element;
+                       }
+
+                       this._close( currentMenu );
+
+                       this.blur( event );
+                       this.activeMenu = currentMenu;
+               }, this.delay );
+       },
+
+       // With no arguments, closes the currently active menu - if nothing is active
+       // it closes all menus.  If passed an argument, it will search for menus BELOW
+       _close: function( startMenu ) {
+               if ( !startMenu ) {
+                       startMenu = this.active ? this.active.parent() : this.element;
+               }
+
+               startMenu
+                       .find( ".ui-menu" )
+                               .hide()
+                               .attr( "aria-hidden", "true" )
+                               .attr( "aria-expanded", "false" )
+                       .end()
+                       .find( ".ui-state-active" ).not( ".ui-state-focus" )
+                               .removeClass( "ui-state-active" );
+       },
+
+       _closeOnDocumentClick: function( event ) {
+               return !$( event.target ).closest( ".ui-menu" ).length;
+       },
+
+       _isDivider: function( item ) {
+
+               // Match hyphen, em dash, en dash
+               return !/[^\-\u2014\u2013\s]/.test( item.text() );
+       },
+
+       collapse: function( event ) {
+               var newItem = this.active &&
+                       this.active.parent().closest( ".ui-menu-item", this.element );
+               if ( newItem && newItem.length ) {
+                       this._close();
+                       this.focus( event, newItem );
+               }
+       },
+
+       expand: function( event ) {
+               var newItem = this.active &&
+                       this.active
+                               .children( ".ui-menu " )
+                               .find( this.options.items )
+                               .first();
+
+               if ( newItem && newItem.length ) {
+                       this._open( newItem.parent() );
+
+                       // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+                       this._delay(function() {
+                               this.focus( event, newItem );
+                       });
+               }
+       },
+
+       next: function( event ) {
+               this._move( "next", "first", event );
+       },
+
+       previous: function( event ) {
+               this._move( "prev", "last", event );
+       },
+
+       isFirstItem: function() {
+               return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+       },
+
+       isLastItem: function() {
+               return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+       },
+
+       _move: function( direction, filter, event ) {
+               var next;
+               if ( this.active ) {
+                       if ( direction === "first" || direction === "last" ) {
+                               next = this.active
+                                       [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+                                       .eq( -1 );
+                       } else {
+                               next = this.active
+                                       [ direction + "All" ]( ".ui-menu-item" )
+                                       .eq( 0 );
+                       }
+               }
+               if ( !next || !next.length || !this.active ) {
+                       next = this.activeMenu.find( this.options.items )[ filter ]();
+               }
+
+               this.focus( event, next );
+       },
+
+       nextPage: function( event ) {
+               var item, base, height;
+
+               if ( !this.active ) {
+                       this.next( event );
+                       return;
+               }
+               if ( this.isLastItem() ) {
+                       return;
+               }
+               if ( this._hasScroll() ) {
+                       base = this.active.offset().top;
+                       height = this.element.height();
+                       this.active.nextAll( ".ui-menu-item" ).each(function() {
+                               item = $( this );
+                               return item.offset().top - base - height < 0;
+                       });
+
+                       this.focus( event, item );
+               } else {
+                       this.focus( event, this.activeMenu.find( this.options.items )
+                               [ !this.active ? "first" : "last" ]() );
+               }
+       },
+
+       previousPage: function( event ) {
+               var item, base, height;
+               if ( !this.active ) {
+                       this.next( event );
+                       return;
+               }
+               if ( this.isFirstItem() ) {
+                       return;
+               }
+               if ( this._hasScroll() ) {
+                       base = this.active.offset().top;
+                       height = this.element.height();
+                       this.active.prevAll( ".ui-menu-item" ).each(function() {
+                               item = $( this );
+                               return item.offset().top - base + height > 0;
+                       });
+
+                       this.focus( event, item );
+               } else {
+                       this.focus( event, this.activeMenu.find( this.options.items ).first() );
+               }
+       },
+
+       _hasScroll: function() {
+               return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+       },
+
+       select: function( event ) {
+               // TODO: It should never be possible to not have an active item at this
+               // point, but the tests don't trigger mouseenter before click.
+               this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+               var ui = { item: this.active };
+               if ( !this.active.has( ".ui-menu" ).length ) {
+                       this.collapseAll( event, true );
+               }
+               this._trigger( "select", event, ui );
+       },
+
+       _filterMenuItems: function(character) {
+               var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+                       regex = new RegExp( "^" + escapedCharacter, "i" );
+
+               return this.activeMenu
+                       .find( this.options.items )
+
+                       // Only match on items, not dividers or other content (#10571)
+                       .filter( ".ui-menu-item" )
+                       .filter(function() {
+                               return regex.test( $.trim( $( this ).text() ) );
+                       });
+       }
+});
+
+
+/*!
+ * jQuery UI Autocomplete 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/autocomplete/
+ */
+
+
+$.widget( "ui.autocomplete", {
+       version: "1.11.3",
+       defaultElement: "<input>",
+       options: {
+               appendTo: null,
+               autoFocus: false,
+               delay: 300,
+               minLength: 1,
+               position: {
+                       my: "left top",
+                       at: "left bottom",
+                       collision: "none"
+               },
+               source: null,
+
+               // callbacks
+               change: null,
+               close: null,
+               focus: null,
+               open: null,
+               response: null,
+               search: null,
+               select: null
+       },
+
+       requestIndex: 0,
+       pending: 0,
+
+       _create: function() {
+               // Some browsers only repeat keydown events, not keypress events,
+               // so we use the suppressKeyPress flag to determine if we've already
+               // handled the keydown event. #7269
+               // Unfortunately the code for & in keypress is the same as the up arrow,
+               // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+               // events when we know the keydown event was used to modify the
+               // search term. #7799
+               var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+                       nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+                       isTextarea = nodeName === "textarea",
+                       isInput = nodeName === "input";
+
+               this.isMultiLine =
+                       // Textareas are always multi-line
+                       isTextarea ? true :
+                       // Inputs are always single-line, even if inside a contentEditable element
+                       // IE also treats inputs as contentEditable
+                       isInput ? false :
+                       // All other element types are determined by whether or not they're contentEditable
+                       this.element.prop( "isContentEditable" );
+
+               this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+               this.isNewMenu = true;
+
+               this.element
+                       .addClass( "ui-autocomplete-input" )
+                       .attr( "autocomplete", "off" );
+
                this._on( this.element, {
                        keydown: function( event ) {
-                               /*jshint maxcomplexity:15*/
                                if ( this.element.prop( "readOnly" ) ) {
                                        suppressKeyPress = true;
                                        suppressInput = true;
@@ -5884,7 +7070,7 @@ $.widget( "ui.autocomplete", {
                                suppressInput = false;
                                suppressKeyPressRepeat = false;
                                var keyCode = $.ui.keyCode;
-                               switch( event.keyCode ) {
+                               switch ( event.keyCode ) {
                                case keyCode.PAGE_UP:
                                        suppressKeyPress = true;
                                        this._move( "previousPage", event );
@@ -5902,7 +7088,6 @@ $.widget( "ui.autocomplete", {
                                        this._keyEvent( "next", event );
                                        break;
                                case keyCode.ENTER:
-                               case keyCode.NUMPAD_ENTER:
                                        // when menu is open and has focus
                                        if ( this.menu.active ) {
                                                // #6055 - Opera still allows the keypress to occur
@@ -5919,7 +7104,9 @@ $.widget( "ui.autocomplete", {
                                        break;
                                case keyCode.ESCAPE:
                                        if ( this.menu.element.is( ":visible" ) ) {
-                                               this._value( this.term );
+                                               if ( !this.isMultiLine ) {
+                                                       this._value( this.term );
+                                               }
                                                this.close( event );
                                                // Different browsers have different default behavior for escape
                                                // Single press can mean undo or clear
@@ -5948,7 +7135,7 @@ $.widget( "ui.autocomplete", {
 
                                // replicate some key handlers to allow them to repeat in Firefox and Opera
                                var keyCode = $.ui.keyCode;
-                               switch( event.keyCode ) {
+                               switch ( event.keyCode ) {
                                case keyCode.PAGE_UP:
                                        this._move( "previousPage", event );
                                        break;
@@ -5996,7 +7183,7 @@ $.widget( "ui.autocomplete", {
                                role: null
                        })
                        .hide()
-                       .data( "ui-menu" );
+                       .menu( "instance" );
 
                this._on( this.menu.element, {
                        mousedown: function( event ) {
@@ -6029,6 +7216,7 @@ $.widget( "ui.autocomplete", {
                                }
                        },
                        menufocus: function( event, ui ) {
+                               var label, item;
                                // support: Firefox
                                // Prevent accidental activation of menu items in Firefox (#7024 #9118)
                                if ( this.isNewMenu ) {
@@ -6044,19 +7232,19 @@ $.widget( "ui.autocomplete", {
                                        }
                                }
 
-                               var item = ui.item.data( "ui-autocomplete-item" );
+                               item = ui.item.data( "ui-autocomplete-item" );
                                if ( false !== this._trigger( "focus", event, { item: item } ) ) {
                                        // use value to match what will end up in the input, if it was a key event
                                        if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
                                                this._value( item.value );
                                        }
-                               } else {
-                                       // Normally the input is populated with the item's value as the
-                                       // menu is navigated, causing screen readers to notice a change and
-                                       // announce the item. Since the focus event was canceled, this doesn't
-                                       // happen, so we update the live region so that screen readers can
-                                       // still notice the change and announce it.
-                                       this.liveRegion.text( item.value );
+                               }
+
+                               // Announce the value in the liveRegion
+                               label = ui.item.attr( "aria-label" ) || item.value;
+                               if ( label && $.trim( label ).length ) {
+                                       this.liveRegion.children().hide();
+                                       $( "<div>" ).text( label ).appendTo( this.liveRegion );
                                }
                        },
                        menuselect: function( event, ui ) {
@@ -6064,7 +7252,7 @@ $.widget( "ui.autocomplete", {
                                        previous = this.previous;
 
                                // only trigger when focus was lost (click on menu)
-                               if ( this.element[0] !== this.document[0].activeElement ) {
+                               if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {
                                        this.element.focus();
                                        this.previous = previous;
                                        // #6109 - IE triggers two focus events and the second
@@ -6090,10 +7278,11 @@ $.widget( "ui.autocomplete", {
 
                this.liveRegion = $( "<span>", {
                                role: "status",
-                               "aria-live": "polite"
+                               "aria-live": "assertive",
+                               "aria-relevant": "additions"
                        })
                        .addClass( "ui-helper-hidden-accessible" )
-                       .insertBefore( this.element );
+                       .appendTo( this.document[ 0 ].body );
 
                // turning off autocomplete prevents the browser from remembering the
                // value when navigating through history, so we re-enable autocomplete
@@ -6136,12 +7325,12 @@ $.widget( "ui.autocomplete", {
                                this.document.find( element ).eq( 0 );
                }
 
-               if ( !element ) {
+               if ( !element || !element[ 0 ] ) {
                        element = this.element.closest( ".ui-front" );
                }
 
                if ( !element.length ) {
-                       element = this.document[0].body;
+                       element = this.document[ 0 ].body;
                }
 
                return element;
@@ -6150,7 +7339,7 @@ $.widget( "ui.autocomplete", {
        _initSource: function() {
                var array, url,
                        that = this;
-               if ( $.isArray(this.options.source) ) {
+               if ( $.isArray( this.options.source ) ) {
                        array = this.options.source;
                        this.source = function( request, response ) {
                                response( $.ui.autocomplete.filter( array, request.term ) );
@@ -6169,7 +7358,7 @@ $.widget( "ui.autocomplete", {
                                                response( data );
                                        },
                                        error: function() {
-                                               response( [] );
+                                               response([]);
                                        }
                                });
                        };
@@ -6181,8 +7370,13 @@ $.widget( "ui.autocomplete", {
        _searchTimeout: function( event ) {
                clearTimeout( this.searching );
                this.searching = this._delay(function() {
-                       // only search if the value has changed
-                       if ( this.term !== this._value() ) {
+
+                       // Search if the value has changed, or if the user retypes the same value (see #7434)
+                       var equalValues = this.term === this._value(),
+                               menuVisible = this.menu.element.is( ":visible" ),
+                               modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+                       if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
                                this.selectedItem = null;
                                this.search( null, event );
                        }
@@ -6215,19 +7409,18 @@ $.widget( "ui.autocomplete", {
        },
 
        _response: function() {
-               var that = this,
-                       index = ++requestIndex;
+               var index = ++this.requestIndex;
 
-               return function( content ) {
-                       if ( index === requestIndex ) {
-                               that.__response( content );
+               return $.proxy(function( content ) {
+                       if ( index === this.requestIndex ) {
+                               this.__response( content );
                        }
 
-                       that.pending--;
-                       if ( !that.pending ) {
-                               that.element.removeClass( "ui-autocomplete-loading" );
+                       this.pending--;
+                       if ( !this.pending ) {
+                               this.element.removeClass( "ui-autocomplete-loading" );
                        }
-               };
+               }, this );
        },
 
        __response: function( content ) {
@@ -6266,7 +7459,7 @@ $.widget( "ui.autocomplete", {
 
        _normalize: function( items ) {
                // assume all items have the right format when the first item is complete
-               if ( items.length && items[0].label && items[0].value ) {
+               if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
                        return items;
                }
                return $.map( items, function( item ) {
@@ -6276,10 +7469,10 @@ $.widget( "ui.autocomplete", {
                                        value: item
                                };
                        }
-                       return $.extend({
+                       return $.extend( {}, item, {
                                label: item.label || item.value,
                                value: item.value || item.label
-                       }, item );
+                       });
                });
        },
 
@@ -6294,7 +7487,7 @@ $.widget( "ui.autocomplete", {
                this._resizeMenu();
                ul.position( $.extend({
                        of: this.element
-               }, this.options.position ));
+               }, this.options.position ) );
 
                if ( this.options.autoFocus ) {
                        this.menu.next();
@@ -6323,9 +7516,7 @@ $.widget( "ui.autocomplete", {
        },
 
        _renderItem: function( ul, item ) {
-               return $( "<li>" )
-                       .append( $( "<a>" ).text( item.label ) )
-                       .appendTo( ul );
+               return $( "<li>" ).text( item.label ).appendTo( ul );
        },
 
        _move: function( direction, event ) {
@@ -6335,7 +7526,11 @@ $.widget( "ui.autocomplete", {
                }
                if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
                                this.menu.isLastItem() && /^next/.test( direction ) ) {
-                       this._value( this.term );
+
+                       if ( !this.isMultiLine ) {
+                               this._value( this.term );
+                       }
+
                        this.menu.blur();
                        return;
                }
@@ -6362,17 +7557,16 @@ $.widget( "ui.autocomplete", {
 
 $.extend( $.ui.autocomplete, {
        escapeRegex: function( value ) {
-               return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+               return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
        },
-       filter: function(array, term) {
-               var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
-               return $.grep( array, function(value) {
+       filter: function( array, term ) {
+               var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+               return $.grep( array, function( value ) {
                        return matcher.test( value.label || value.value || value );
                });
        }
 });
 
-
 // live region extension, adding a `messages` option
 // NOTE: This is an experimental API. We are still investigating
 // a full solution for string manipulation and internationalization.
@@ -6398,16 +7592,28 @@ $.widget( "ui.autocomplete", $.ui.autocomplete, {
                } else {
                        message = this.options.messages.noResults;
                }
-               this.liveRegion.text( message );
+               this.liveRegion.children().hide();
+               $( "<div>" ).text( message ).appendTo( this.liveRegion );
        }
 });
 
-}( jQuery ));
-(function( $, undefined ) {
+var autocomplete = $.ui.autocomplete;
+
 
-var lastActive, startXPos, startYPos, clickDragged,
+/*!
+ * jQuery UI Button 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/button/
+ */
+
+
+var lastActive,
        baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
-       stateClasses = "ui-state-hover ui-state-active ",
        typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
        formResetHandler = function() {
                var form = $( this );
@@ -6422,9 +7628,9 @@ var lastActive, startXPos, startYPos, clickDragged,
                if ( name ) {
                        name = name.replace( /'/g, "\\'" );
                        if ( form ) {
-                               radios = $( form ).find( "[name='" + name + "']" );
+                               radios = $( form ).find( "[name='" + name + "'][type=radio]" );
                        } else {
-                               radios = $( "[name='" + name + "']", radio.ownerDocument )
+                               radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
                                        .filter(function() {
                                                return !this.form;
                                        });
@@ -6434,7 +7640,7 @@ var lastActive, startXPos, startYPos, clickDragged,
        };
 
 $.widget( "ui.button", {
-       version: "1.10.3",
+       version: "1.11.3",
        defaultElement: "<button>",
        options: {
                disabled: null,
@@ -6462,8 +7668,7 @@ $.widget( "ui.button", {
                var that = this,
                        options = this.options,
                        toggleButton = this.type === "checkbox" || this.type === "radio",
-                       activeClass = !toggleButton ? "ui-state-active" : "",
-                       focusClass = "ui-state-focus";
+                       activeClass = !toggleButton ? "ui-state-active" : "";
 
                if ( options.label === null ) {
                        options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
@@ -6495,53 +7700,32 @@ $.widget( "ui.button", {
                                }
                        });
 
-               this.element
-                       .bind( "focus" + this.eventNamespace, function() {
-                               // no need to check disabled, focus won't be triggered anyway
-                               that.buttonElement.addClass( focusClass );
-                       })
-                       .bind( "blur" + this.eventNamespace, function() {
-                               that.buttonElement.removeClass( focusClass );
-                       });
+               // Can't use _focusable() because the element that receives focus
+               // and the element that gets the ui-state-focus class are different
+               this._on({
+                       focus: function() {
+                               this.buttonElement.addClass( "ui-state-focus" );
+                       },
+                       blur: function() {
+                               this.buttonElement.removeClass( "ui-state-focus" );
+                       }
+               });
 
                if ( toggleButton ) {
                        this.element.bind( "change" + this.eventNamespace, function() {
-                               if ( clickDragged ) {
-                                       return;
-                               }
                                that.refresh();
                        });
-                       // if mouse moves between mousedown and mouseup (drag) set clickDragged flag
-                       // prevents issue where button state changes but checkbox/radio checked state
-                       // does not in Firefox (see ticket #6970)
-                       this.buttonElement
-                               .bind( "mousedown" + this.eventNamespace, function( event ) {
-                                       if ( options.disabled ) {
-                                               return;
-                                       }
-                                       clickDragged = false;
-                                       startXPos = event.pageX;
-                                       startYPos = event.pageY;
-                               })
-                               .bind( "mouseup" + this.eventNamespace, function( event ) {
-                                       if ( options.disabled ) {
-                                               return;
-                                       }
-                                       if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
-                                               clickDragged = true;
-                                       }
-                       });
                }
 
                if ( this.type === "checkbox" ) {
                        this.buttonElement.bind( "click" + this.eventNamespace, function() {
-                               if ( options.disabled || clickDragged ) {
+                               if ( options.disabled ) {
                                        return false;
                                }
                        });
                } else if ( this.type === "radio" ) {
                        this.buttonElement.bind( "click" + this.eventNamespace, function() {
-                               if ( options.disabled || clickDragged ) {
+                               if ( options.disabled ) {
                                        return false;
                                }
                                $( this ).addClass( "ui-state-active" );
@@ -6598,9 +7782,6 @@ $.widget( "ui.button", {
                        }
                }
 
-               // TODO: pull out $.Widget's handling for the disabled option into
-               // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
-               // be overridden by individual plugins
                this._setOption( "disabled", options.disabled );
                this._resetButton();
        },
@@ -6651,7 +7832,7 @@ $.widget( "ui.button", {
                this.element
                        .removeClass( "ui-helper-hidden-accessible" );
                this.buttonElement
-                       .removeClass( baseClasses + " " + stateClasses + " " + typeClasses )
+                       .removeClass( baseClasses + " ui-state-active " + typeClasses )
                        .removeAttr( "role" )
                        .removeAttr( "aria-pressed" )
                        .html( this.buttonElement.find(".ui-button-text").html() );
@@ -6664,10 +7845,14 @@ $.widget( "ui.button", {
        _setOption: function( key, value ) {
                this._super( key, value );
                if ( key === "disabled" ) {
+                       this.widget().toggleClass( "ui-state-disabled", !!value );
+                       this.element.prop( "disabled", !!value );
                        if ( value ) {
-                               this.element.prop( "disabled", true );
-                       } else {
-                               this.element.prop( "disabled", false );
+                               if ( this.type === "checkbox" || this.type === "radio" ) {
+                                       this.buttonElement.removeClass( "ui-state-focus" );
+                               } else {
+                                       this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+                               }
                        }
                        return;
                }
@@ -6751,7 +7936,7 @@ $.widget( "ui.button", {
 });
 
 $.widget( "ui.buttonset", {
-       version: "1.10.3",
+       version: "1.11.3",
        options: {
                items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
        },
@@ -6773,15 +7958,17 @@ $.widget( "ui.buttonset", {
        },
 
        refresh: function() {
-               var rtl = this.element.css( "direction" ) === "rtl";
+               var rtl = this.element.css( "direction" ) === "rtl",
+                       allButtons = this.element.find( this.options.items ),
+                       existingButtons = allButtons.filter( ":ui-button" );
 
-               this.buttons = this.element.find( this.options.items )
-                       .filter( ":ui-button" )
-                               .button( "refresh" )
-                       .end()
-                       .not( ":ui-button" )
-                               .button()
-                       .end()
+               // Initialize new buttons
+               allButtons.not( ":ui-button" ).button();
+
+               // Refresh existing buttons
+               existingButtons.button( "refresh" );
+
+               this.buttons = allButtons
                        .map(function() {
                                return $( this ).button( "widget" )[ 0 ];
                        })
@@ -6807,14 +7994,47 @@ $.widget( "ui.buttonset", {
        }
 });
 
-}( jQuery ) );
-(function( $, undefined ) {
+var button = $.ui.button;
+
+
+/*!
+ * jQuery UI Datepicker 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/datepicker/
+ */
+
 
-$.extend($.ui, { datepicker: { version: "1.10.3" } });
+$.extend($.ui, { datepicker: { version: "1.11.3" } });
 
-var PROP_NAME = "datepicker",
-       instActive;
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+       var position, value;
+       while ( elem.length && elem[ 0 ] !== document ) {
+               // Ignore z-index if position is set to a value where z-index is ignored by the browser
+               // This makes behavior of this function consistent across browsers
+               // WebKit always returns auto if the element is positioned
+               position = elem.css( "position" );
+               if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+                       // IE returns 0 when zIndex is not specified
+                       // other browsers return a string
+                       // we ignore the case of nested elements with an explicit value of 0
+                       // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+                       value = parseInt( elem.css( "zIndex" ), 10 );
+                       if ( !isNaN( value ) && value !== 0 ) {
+                               return value;
+                       }
+               }
+               elem = elem.parent();
+       }
 
+       return 0;
+}
 /* Date picker manager.
    Use the singleton instance of this class, $.datepicker, to interact with the date picker.
    Settings for (groups of) date pickers are maintained in an instance object,
@@ -6905,7 +8125,9 @@ function Datepicker() {
                disabled: false // The initial disabled state
        };
        $.extend(this._defaults, this.regional[""]);
-       this.dpDiv = bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+       this.regional.en = $.extend( true, {}, this.regional[ "" ]);
+       this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+       this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
 }
 
 $.extend(Datepicker.prototype, {
@@ -6925,7 +8147,7 @@ $.extend(Datepicker.prototype, {
         * @return the manager object
         */
        setDefaults: function(settings) {
-               extendRemove(this._defaults, settings || {});
+               datepicker_extendRemove(this._defaults, settings || {});
                return this;
        },
 
@@ -6958,7 +8180,7 @@ $.extend(Datepicker.prototype, {
                        drawMonth: 0, drawYear: 0, // month being drawn
                        inline: inline, // is datepicker inline or not
                        dpDiv: (!inline ? this.dpDiv : // presentation div
-                       bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+                       datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
        },
 
        /* Attach the date picker to an input field. */
@@ -6973,7 +8195,7 @@ $.extend(Datepicker.prototype, {
                input.addClass(this.markerClassName).keydown(this._doKeyDown).
                        keypress(this._doKeyPress).keyup(this._doKeyUp);
                this._autoSize(inst);
-               $.data(target, PROP_NAME, inst);
+               $.data(target, "datepicker", inst);
                //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
                if( inst.settings.disabled ) {
                        this._disableDatepicker( target );
@@ -7063,7 +8285,7 @@ $.extend(Datepicker.prototype, {
                        return;
                }
                divSpan.addClass(this.markerClassName).append(inst.dpDiv);
-               $.data(target, PROP_NAME, inst);
+               $.data(target, "datepicker", inst);
                this._setDate(inst, this._getDefaultDate(inst), true);
                this._updateDatepicker(inst);
                this._updateAlternate(inst);
@@ -7099,9 +8321,9 @@ $.extend(Datepicker.prototype, {
                        $("body").append(this._dialogInput);
                        inst = this._dialogInst = this._newInst(this._dialogInput, false);
                        inst.settings = {};
-                       $.data(this._dialogInput[0], PROP_NAME, inst);
+                       $.data(this._dialogInput[0], "datepicker", inst);
                }
-               extendRemove(inst.settings, settings || {});
+               datepicker_extendRemove(inst.settings, settings || {});
                date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
                this._dialogInput.val(date);
 
@@ -7124,7 +8346,7 @@ $.extend(Datepicker.prototype, {
                if ($.blockUI) {
                        $.blockUI(this.dpDiv);
                }
-               $.data(this._dialogInput[0], PROP_NAME, inst);
+               $.data(this._dialogInput[0], "datepicker", inst);
                return this;
        },
 
@@ -7134,14 +8356,14 @@ $.extend(Datepicker.prototype, {
        _destroyDatepicker: function(target) {
                var nodeName,
                        $target = $(target),
-                       inst = $.data(target, PROP_NAME);
+                       inst = $.data(target, "datepicker");
 
                if (!$target.hasClass(this.markerClassName)) {
                        return;
                }
 
                nodeName = target.nodeName.toLowerCase();
-               $.removeData(target, PROP_NAME);
+               $.removeData(target, "datepicker");
                if (nodeName === "input") {
                        inst.append.remove();
                        inst.trigger.remove();
@@ -7153,6 +8375,10 @@ $.extend(Datepicker.prototype, {
                } else if (nodeName === "div" || nodeName === "span") {
                        $target.removeClass(this.markerClassName).empty();
                }
+
+               if ( datepicker_instActive === inst ) {
+                       datepicker_instActive = null;
+               }
        },
 
        /* Enable the date picker to a jQuery selection.
@@ -7161,7 +8387,7 @@ $.extend(Datepicker.prototype, {
        _enableDatepicker: function(target) {
                var nodeName, inline,
                        $target = $(target),
-                       inst = $.data(target, PROP_NAME);
+                       inst = $.data(target, "datepicker");
 
                if (!$target.hasClass(this.markerClassName)) {
                        return;
@@ -7189,7 +8415,7 @@ $.extend(Datepicker.prototype, {
        _disableDatepicker: function(target) {
                var nodeName, inline,
                        $target = $(target),
-                       inst = $.data(target, PROP_NAME);
+                       inst = $.data(target, "datepicker");
 
                if (!$target.hasClass(this.markerClassName)) {
                        return;
@@ -7235,7 +8461,7 @@ $.extend(Datepicker.prototype, {
         */
        _getInst: function(target) {
                try {
-                       return $.data(target, PROP_NAME);
+                       return $.data(target, "datepicker");
                }
                catch (err) {
                        throw "Missing instance data for this datepicker";
@@ -7275,7 +8501,7 @@ $.extend(Datepicker.prototype, {
                        date = this._getDateDatepicker(target, true);
                        minDate = this._getMinMaxDate(inst, "min");
                        maxDate = this._getMinMaxDate(inst, "max");
-                       extendRemove(inst.settings, settings);
+                       datepicker_extendRemove(inst.settings, settings);
                        // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
                        if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
                                inst.settings.minDate = this._formatDate(inst, minDate);
@@ -7503,7 +8729,7 @@ $.extend(Datepicker.prototype, {
                if(beforeShowSettings === false){
                        return;
                }
-               extendRemove(inst.settings, beforeShowSettings);
+               datepicker_extendRemove(inst.settings, beforeShowSettings);
 
                inst.lastVal = null;
                $.datepicker._lastInput = input;
@@ -7540,7 +8766,7 @@ $.extend(Datepicker.prototype, {
                if (!inst.inline) {
                        showAnim = $.datepicker._get(inst, "showAnim");
                        duration = $.datepicker._get(inst, "duration");
-                       inst.dpDiv.zIndex($(input).zIndex()+1);
+                       inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
                        $.datepicker._datepickerShowing = true;
 
                        if ( $.effects && $.effects.effect[ showAnim ] ) {
@@ -7560,15 +8786,19 @@ $.extend(Datepicker.prototype, {
        /* Generate the date picker content. */
        _updateDatepicker: function(inst) {
                this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
-               instActive = inst; // for delegate hover events
+               datepicker_instActive = inst; // for delegate hover events
                inst.dpDiv.empty().append(this._generateHTML(inst));
                this._attachHandlers(inst);
-               inst.dpDiv.find("." + this._dayOverClass + " a").mouseover();
 
                var origyearshtml,
                        numMonths = this._getNumberOfMonths(inst),
                        cols = numMonths[1],
-                       width = 17;
+                       width = 17,
+                       activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+               if ( activeCell.length > 0 ) {
+                       datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+               }
 
                inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
                if (cols > 1) {
@@ -7646,7 +8876,7 @@ $.extend(Datepicker.prototype, {
                var showAnim, duration, postProcess, onClose,
                        inst = this._curInst;
 
-               if (!inst || (input && inst !== $.data(input, PROP_NAME))) {
+               if (!inst || (input && inst !== $.data(input, "datepicker"))) {
                        return;
                }
 
@@ -7902,7 +9132,8 @@ $.extend(Datepicker.prototype, {
                                var isDoubled = lookAhead(match),
                                        size = (match === "@" ? 14 : (match === "!" ? 20 :
                                        (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
-                                       digits = new RegExp("^\\d{1," + size + "}"),
+                                       minSize = (match === "y" ? size : 1),
+                                       digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
                                        num = value.substring(iValue).match(digits);
                                if (!num) {
                                        throw "Missing number at position " + iValue;
@@ -8496,7 +9727,7 @@ $.extend(Datepicker.prototype, {
                                thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
                                for (dow = 0; dow < 7; dow++) { // days of the week
                                        day = (dow + firstDay) % 7;
-                                       thead += "<th" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+                                       thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
                                                "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
                                }
                                calender += thead + "</tr></thead><tbody>";
@@ -8750,9 +9981,9 @@ $.extend(Datepicker.prototype, {
 /*
  * Bind hover events for datepicker elements.
  * Done via delegate so the binding only occurs once in the lifetime of the parent div.
- * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
  */
-function bindHover(dpDiv) {
+function datepicker_bindHover(dpDiv) {
        var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
        return dpDiv.delegate(selector, "mouseout", function() {
                        $(this).removeClass("ui-state-hover");
@@ -8763,22 +9994,24 @@ function bindHover(dpDiv) {
                                $(this).removeClass("ui-datepicker-next-hover");
                        }
                })
-               .delegate(selector, "mouseover", function(){
-                       if (!$.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0])) {
-                               $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
-                               $(this).addClass("ui-state-hover");
-                               if (this.className.indexOf("ui-datepicker-prev") !== -1) {
-                                       $(this).addClass("ui-datepicker-prev-hover");
-                               }
-                               if (this.className.indexOf("ui-datepicker-next") !== -1) {
-                                       $(this).addClass("ui-datepicker-next-hover");
-                               }
-                       }
-               });
+               .delegate( selector, "mouseover", datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+       if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+               $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+               $(this).addClass("ui-state-hover");
+               if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+                       $(this).addClass("ui-datepicker-prev-hover");
+               }
+               if (this.className.indexOf("ui-datepicker-next") !== -1) {
+                       $(this).addClass("ui-datepicker-next-hover");
+               }
+       }
 }
 
 /* jQuery extend now ignores nulls! */
-function extendRemove(target, props) {
+function datepicker_extendRemove(target, props) {
        $.extend(target, props);
        for (var name in props) {
                if (props[name] == null) {
@@ -8830,35 +10063,31 @@ $.fn.datepicker = function(options){
 $.datepicker = new Datepicker(); // singleton instance
 $.datepicker.initialized = false;
 $.datepicker.uuid = new Date().getTime();
-$.datepicker.version = "1.10.3";
+$.datepicker.version = "1.11.3";
 
-})(jQuery);
-(function( $, undefined ) {
+var datepicker = $.datepicker;
 
-var sizeRelatedOptions = {
-               buttons: true,
-               height: true,
-               maxHeight: true,
-               maxWidth: true,
-               minHeight: true,
-               minWidth: true,
-               width: true
-       },
-       resizableRelatedOptions = {
-               maxHeight: true,
-               maxWidth: true,
-               minHeight: true,
-               minWidth: true
-       };
 
-$.widget( "ui.dialog", {
-       version: "1.10.3",
+/*!
+ * jQuery UI Dialog 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/dialog/
+ */
+
+
+var dialog = $.widget( "ui.dialog", {
+       version: "1.11.3",
        options: {
                appendTo: "body",
                autoOpen: true,
                buttons: [],
                closeOnEscape: true,
-               closeText: "close",
+               closeText: "Close",
                dialogClass: "",
                draggable: true,
                hide: null,
@@ -8899,27 +10128,44 @@ $.widget( "ui.dialog", {
                resizeStop: null
        },
 
+       sizeRelatedOptions: {
+               buttons: true,
+               height: true,
+               maxHeight: true,
+               maxWidth: true,
+               minHeight: true,
+               minWidth: true,
+               width: true
+       },
+
+       resizableRelatedOptions: {
+               maxHeight: true,
+               maxWidth: true,
+               minHeight: true,
+               minWidth: true
+       },
+
        _create: function() {
                this.originalCss = {
-                       display: this.element[0].style.display,
-                       width: this.element[0].style.width,
-                       minHeight: this.element[0].style.minHeight,
-                       maxHeight: this.element[0].style.maxHeight,
-                       height: this.element[0].style.height
+                       display: this.element[ 0 ].style.display,
+                       width: this.element[ 0 ].style.width,
+                       minHeight: this.element[ 0 ].style.minHeight,
+                       maxHeight: this.element[ 0 ].style.maxHeight,
+                       height: this.element[ 0 ].style.height
                };
                this.originalPosition = {
                        parent: this.element.parent(),
                        index: this.element.parent().children().index( this.element )
                };
-               this.originalTitle = this.element.attr("title");
+               this.originalTitle = this.element.attr( "title" );
                this.options.title = this.options.title || this.originalTitle;
 
                this._createWrapper();
 
                this.element
                        .show()
-                       .removeAttr("title")
-                       .addClass("ui-dialog-content ui-widget-content")
+                       .removeAttr( "title" )
+                       .addClass( "ui-dialog-content ui-widget-content" )
                        .appendTo( this.uiDialog );
 
                this._createTitlebar();
@@ -8933,6 +10179,8 @@ $.widget( "ui.dialog", {
                }
 
                this._isOpen = false;
+
+               this._trackFocus();
        },
 
        _init: function() {
@@ -8957,7 +10205,7 @@ $.widget( "ui.dialog", {
 
                this.element
                        .removeUniqueId()
-                       .removeClass("ui-dialog-content ui-widget-content")
+                       .removeClass( "ui-dialog-content ui-widget-content" )
                        .css( this.originalCss )
                        // Without detaching first, the following becomes really slow
                        .detach();
@@ -8970,7 +10218,7 @@ $.widget( "ui.dialog", {
 
                next = originalPosition.parent.children().eq( originalPosition.index );
                // Don't try to place the dialog next to itself (#8613)
-               if ( next.length && next[0] !== this.element[0] ) {
+               if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
                        next.before( this.element );
                } else {
                        originalPosition.parent.append( this.element );
@@ -8985,20 +10233,35 @@ $.widget( "ui.dialog", {
        enable: $.noop,
 
        close: function( event ) {
-               var that = this;
+               var activeElement,
+                       that = this;
 
                if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
                        return;
                }
 
                this._isOpen = false;
+               this._focusedElement = null;
                this._destroyOverlay();
+               this._untrackInstance();
+
+               if ( !this.opener.filter( ":focusable" ).focus().length ) {
 
-               if ( !this.opener.filter(":focusable").focus().length ) {
-                       // Hiding a focused element doesn't trigger blur in WebKit
-                       // so in case we have nothing to focus on, explicitly blur the active element
-                       // https://bugs.webkit.org/show_bug.cgi?id=47182
-                       $( this.document[0].activeElement ).blur();
+                       // support: IE9
+                       // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+                       try {
+                               activeElement = this.document[ 0 ].activeElement;
+
+                               // Support: IE9, IE10
+                               // If the <body> is blurred, IE will switch windows, see #4520
+                               if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
+
+                                       // Hiding a focused element doesn't trigger blur in WebKit
+                                       // so in case we have nothing to focus on, explicitly blur the active element
+                                       // https://bugs.webkit.org/show_bug.cgi?id=47182
+                                       $( activeElement ).blur();
+                               }
+                       } catch ( error ) {}
                }
 
                this._hide( this.uiDialog, this.options.hide, function() {
@@ -9015,7 +10278,17 @@ $.widget( "ui.dialog", {
        },
 
        _moveToTop: function( event, silent ) {
-               var moved = !!this.uiDialog.nextAll(":visible").insertBefore( this.uiDialog ).length;
+               var moved = false,
+                       zIndicies = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
+                               return +$( this ).css( "z-index" );
+                       }).get(),
+                       zIndexMax = Math.max.apply( null, zIndicies );
+
+               if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+                       this.uiDialog.css( "z-index", zIndexMax + 1 );
+                       moved = true;
+               }
+
                if ( moved && !silent ) {
                        this._trigger( "focus", event );
                }
@@ -9032,36 +10305,53 @@ $.widget( "ui.dialog", {
                }
 
                this._isOpen = true;
-               this.opener = $( this.document[0].activeElement );
+               this.opener = $( this.document[ 0 ].activeElement );
 
                this._size();
                this._position();
                this._createOverlay();
                this._moveToTop( null, true );
+
+               // Ensure the overlay is moved to the top with the dialog, but only when
+               // opening. The overlay shouldn't move after the dialog is open so that
+               // modeless dialogs opened after the modal dialog stack properly.
+               if ( this.overlay ) {
+                       this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+               }
+
                this._show( this.uiDialog, this.options.show, function() {
                        that._focusTabbable();
-                       that._trigger("focus");
+                       that._trigger( "focus" );
                });
 
-               this._trigger("open");
+               // Track the dialog immediately upon openening in case a focus event
+               // somehow occurs outside of the dialog before an element inside the
+               // dialog is focused (#10152)
+               this._makeFocusTarget();
+
+               this._trigger( "open" );
        },
 
        _focusTabbable: function() {
                // Set focus to the first match:
-               // 1. First element inside the dialog matching [autofocus]
-               // 2. Tabbable element inside the content element
-               // 3. Tabbable element inside the buttonpane
-               // 4. The close button
-               // 5. The dialog itself
-               var hasFocus = this.element.find("[autofocus]");
+               // 1. An element that was focused previously
+               // 2. First element inside the dialog matching [autofocus]
+               // 3. Tabbable element inside the content element
+               // 4. Tabbable element inside the buttonpane
+               // 5. The close button
+               // 6. The dialog itself
+               var hasFocus = this._focusedElement;
+               if ( !hasFocus ) {
+                       hasFocus = this.element.find( "[autofocus]" );
+               }
                if ( !hasFocus.length ) {
-                       hasFocus = this.element.find(":tabbable");
+                       hasFocus = this.element.find( ":tabbable" );
                }
                if ( !hasFocus.length ) {
-                       hasFocus = this.uiDialogButtonPane.find(":tabbable");
+                       hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
                }
                if ( !hasFocus.length ) {
-                       hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+                       hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
                }
                if ( !hasFocus.length ) {
                        hasFocus = this.uiDialog;
@@ -9108,18 +10398,22 @@ $.widget( "ui.dialog", {
                                }
 
                                // prevent tabbing out of dialogs
-                               if ( event.keyCode !== $.ui.keyCode.TAB ) {
+                               if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
                                        return;
                                }
-                               var tabbables = this.uiDialog.find(":tabbable"),
-                                       first = tabbables.filter(":first"),
-                                       last  = tabbables.filter(":last");
+                               var tabbables = this.uiDialog.find( ":tabbable" ),
+                                       first = tabbables.filter( ":first" ),
+                                       last = tabbables.filter( ":last" );
 
                                if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
-                                       first.focus( 1 );
+                                       this._delay(function() {
+                                               first.focus();
+                                       });
                                        event.preventDefault();
                                } else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
-                                       last.focus( 1 );
+                                       this._delay(function() {
+                                               last.focus();
+                                       });
                                        event.preventDefault();
                                }
                        },
@@ -9133,9 +10427,9 @@ $.widget( "ui.dialog", {
                // We assume that any existing aria-describedby attribute means
                // that the dialog content is marked up properly
                // otherwise we brute force the content as the description
-               if ( !this.element.find("[aria-describedby]").length ) {
+               if ( !this.element.find( "[aria-describedby]" ).length ) {
                        this.uiDialog.attr({
-                               "aria-describedby": this.element.uniqueId().attr("id")
+                               "aria-describedby": this.element.uniqueId().attr( "id" )
                        });
                }
        },
@@ -9143,22 +10437,25 @@ $.widget( "ui.dialog", {
        _createTitlebar: function() {
                var uiDialogTitle;
 
-               this.uiDialogTitlebar = $("<div>")
-                       .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+               this.uiDialogTitlebar = $( "<div>" )
+                       .addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" )
                        .prependTo( this.uiDialog );
                this._on( this.uiDialogTitlebar, {
                        mousedown: function( event ) {
                                // Don't prevent click on close button (#8838)
                                // Focusing a dialog that is partially scrolled out of view
                                // causes the browser to scroll it into view, preventing the click event
-                               if ( !$( event.target ).closest(".ui-dialog-titlebar-close") ) {
+                               if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
                                        // Dialog isn't getting focus when dragging (#8063)
                                        this.uiDialog.focus();
                                }
                        }
                });
 
-               this.uiDialogTitlebarClose = $("<button></button>")
+               // support: IE
+               // Use type="button" to prevent enter keypresses in textboxes from closing the
+               // dialog in IE (#9312)
+               this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
                        .button({
                                label: this.options.closeText,
                                icons: {
@@ -9166,7 +10463,7 @@ $.widget( "ui.dialog", {
                                },
                                text: false
                        })
-                       .addClass("ui-dialog-titlebar-close")
+                       .addClass( "ui-dialog-titlebar-close" )
                        .appendTo( this.uiDialogTitlebar );
                this._on( this.uiDialogTitlebarClose, {
                        click: function( event ) {
@@ -9175,30 +10472,30 @@ $.widget( "ui.dialog", {
                        }
                });
 
-               uiDialogTitle = $("<span>")
+               uiDialogTitle = $( "<span>" )
                        .uniqueId()
-                       .addClass("ui-dialog-title")
+                       .addClass( "ui-dialog-title" )
                        .prependTo( this.uiDialogTitlebar );
                this._title( uiDialogTitle );
 
                this.uiDialog.attr({
-                       "aria-labelledby": uiDialogTitle.attr("id")
+                       "aria-labelledby": uiDialogTitle.attr( "id" )
                });
        },
 
        _title: function( title ) {
                if ( !this.options.title ) {
-                       title.html("&#160;");
+                       title.html( "&#160;" );
                }
                title.text( this.options.title );
        },
 
        _createButtonPane: function() {
-               this.uiDialogButtonPane = $("<div>")
-                       .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+               this.uiDialogButtonPane = $( "<div>" )
+                       .addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
 
-               this.uiButtonSet = $("<div>")
-                       .addClass("ui-dialog-buttonset")
+               this.uiButtonSet = $( "<div>" )
+                       .addClass( "ui-dialog-buttonset" )
                        .appendTo( this.uiDialogButtonPane );
 
                this._createButtons();
@@ -9213,7 +10510,7 @@ $.widget( "ui.dialog", {
                this.uiButtonSet.empty();
 
                if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
-                       this.uiDialog.removeClass("ui-dialog-buttons");
+                       this.uiDialog.removeClass( "ui-dialog-buttons" );
                        return;
                }
 
@@ -9227,7 +10524,7 @@ $.widget( "ui.dialog", {
                        // Change the context for the click callback to be the main element
                        click = props.click;
                        props.click = function() {
-                               click.apply( that.element[0], arguments );
+                               click.apply( that.element[ 0 ], arguments );
                        };
                        buttonOptions = {
                                icons: props.icons,
@@ -9239,7 +10536,7 @@ $.widget( "ui.dialog", {
                                .button( buttonOptions )
                                .appendTo( that.uiButtonSet );
                });
-               this.uiDialog.addClass("ui-dialog-buttons");
+               this.uiDialog.addClass( "ui-dialog-buttons" );
                this.uiDialogButtonPane.appendTo( this.uiDialog );
        },
 
@@ -9259,7 +10556,7 @@ $.widget( "ui.dialog", {
                        handle: ".ui-dialog-titlebar",
                        containment: "document",
                        start: function( event, ui ) {
-                               $( this ).addClass("ui-dialog-dragging");
+                               $( this ).addClass( "ui-dialog-dragging" );
                                that._blockFrames();
                                that._trigger( "dragStart", event, filteredUi( ui ) );
                        },
@@ -9267,11 +10564,16 @@ $.widget( "ui.dialog", {
                                that._trigger( "drag", event, filteredUi( ui ) );
                        },
                        stop: function( event, ui ) {
-                               options.position = [
-                                       ui.position.left - that.document.scrollLeft(),
-                                       ui.position.top - that.document.scrollTop()
-                               ];
-                               $( this ).removeClass("ui-dialog-dragging");
+                               var left = ui.offset.left - that.document.scrollLeft(),
+                                       top = ui.offset.top - that.document.scrollTop();
+
+                               options.position = {
+                                       my: "left top",
+                                       at: "left" + (left >= 0 ? "+" : "") + left + " " +
+                                               "top" + (top >= 0 ? "+" : "") + top,
+                                       of: that.window
+                               };
+                               $( this ).removeClass( "ui-dialog-dragging" );
                                that._unblockFrames();
                                that._trigger( "dragStop", event, filteredUi( ui ) );
                        }
@@ -9308,7 +10610,7 @@ $.widget( "ui.dialog", {
                        minHeight: this._minHeight(),
                        handles: resizeHandles,
                        start: function( event, ui ) {
-                               $( this ).addClass("ui-dialog-resizing");
+                               $( this ).addClass( "ui-dialog-resizing" );
                                that._blockFrames();
                                that._trigger( "resizeStart", event, filteredUi( ui ) );
                        },
@@ -9316,9 +10618,19 @@ $.widget( "ui.dialog", {
                                that._trigger( "resize", event, filteredUi( ui ) );
                        },
                        stop: function( event, ui ) {
-                               options.height = $( this ).height();
-                               options.width = $( this ).width();
-                               $( this ).removeClass("ui-dialog-resizing");
+                               var offset = that.uiDialog.offset(),
+                                       left = offset.left - that.document.scrollLeft(),
+                                       top = offset.top - that.document.scrollTop();
+
+                               options.height = that.uiDialog.height();
+                               options.width = that.uiDialog.width();
+                               options.position = {
+                                       my: "left top",
+                                       at: "left" + (left >= 0 ? "+" : "") + left + " " +
+                                               "top" + (top >= 0 ? "+" : "") + top,
+                                       of: that.window
+                               };
+                               $( this ).removeClass( "ui-dialog-resizing" );
                                that._unblockFrames();
                                that._trigger( "resizeStop", event, filteredUi( ui ) );
                        }
@@ -9326,6 +10638,37 @@ $.widget( "ui.dialog", {
                .css( "position", position );
        },
 
+       _trackFocus: function() {
+               this._on( this.widget(), {
+                       focusin: function( event ) {
+                               this._makeFocusTarget();
+                               this._focusedElement = $( event.target );
+                       }
+               });
+       },
+
+       _makeFocusTarget: function() {
+               this._untrackInstance();
+               this._trackingInstances().unshift( this );
+       },
+
+       _untrackInstance: function() {
+               var instances = this._trackingInstances(),
+                       exists = $.inArray( this, instances );
+               if ( exists !== -1 ) {
+                       instances.splice( exists, 1 );
+               }
+       },
+
+       _trackingInstances: function() {
+               var instances = this.document.data( "ui-dialog-instances" );
+               if ( !instances ) {
+                       instances = [];
+                       this.document.data( "ui-dialog-instances", instances );
+               }
+               return instances;
+       },
+
        _minHeight: function() {
                var options = this.options;
 
@@ -9336,7 +10679,7 @@ $.widget( "ui.dialog", {
 
        _position: function() {
                // Need to show the dialog to get the actual offset in the position plugin
-               var isVisible = this.uiDialog.is(":visible");
+               var isVisible = this.uiDialog.is( ":visible" );
                if ( !isVisible ) {
                        this.uiDialog.show();
                }
@@ -9354,10 +10697,10 @@ $.widget( "ui.dialog", {
                $.each( options, function( key, value ) {
                        that._setOption( key, value );
 
-                       if ( key in sizeRelatedOptions ) {
+                       if ( key in that.sizeRelatedOptions ) {
                                resize = true;
                        }
-                       if ( key in resizableRelatedOptions ) {
+                       if ( key in that.resizableRelatedOptions ) {
                                resizableOptions[ key ] = value;
                        }
                });
@@ -9366,13 +10709,12 @@ $.widget( "ui.dialog", {
                        this._size();
                        this._position();
                }
-               if ( this.uiDialog.is(":data(ui-resizable)") ) {
+               if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
                        this.uiDialog.resizable( "option", resizableOptions );
                }
        },
 
        _setOption: function( key, value ) {
-               /*jshint maxcomplexity:15*/
                var isDraggable, isResizable,
                        uiDialog = this.uiDialog;
 
@@ -9404,9 +10746,9 @@ $.widget( "ui.dialog", {
                }
 
                if ( key === "draggable" ) {
-                       isDraggable = uiDialog.is(":data(ui-draggable)");
+                       isDraggable = uiDialog.is( ":data(ui-draggable)" );
                        if ( isDraggable && !value ) {
-                               uiDialog.draggable("destroy");
+                               uiDialog.draggable( "destroy" );
                        }
 
                        if ( !isDraggable && value ) {
@@ -9420,9 +10762,9 @@ $.widget( "ui.dialog", {
 
                if ( key === "resizable" ) {
                        // currently resizable, becoming non-resizable
-                       isResizable = uiDialog.is(":data(ui-resizable)");
+                       isResizable = uiDialog.is( ":data(ui-resizable)" );
                        if ( isResizable && !value ) {
-                               uiDialog.resizable("destroy");
+                               uiDialog.resizable( "destroy" );
                        }
 
                        // currently resizable, changing handles
@@ -9437,7 +10779,7 @@ $.widget( "ui.dialog", {
                }
 
                if ( key === "title" ) {
-                       this._title( this.uiDialogTitlebar.find(".ui-dialog-title") );
+                       this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
                }
        },
 
@@ -9481,7 +10823,7 @@ $.widget( "ui.dialog", {
                        this.element.height( Math.max( 0, options.height - nonContentHeight ) );
                }
 
-               if (this.uiDialog.is(":data(ui-resizable)") ) {
+               if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
                        this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
                }
        },
@@ -9509,13 +10851,13 @@ $.widget( "ui.dialog", {
        },
 
        _allowInteraction: function( event ) {
-               if ( $( event.target ).closest(".ui-dialog").length ) {
+               if ( $( event.target ).closest( ".ui-dialog" ).length ) {
                        return true;
                }
 
                // TODO: Remove hack when datepicker implements
                // the .ui-front logic (#8989)
-               return !!$( event.target ).closest(".ui-datepicker").length;
+               return !!$( event.target ).closest( ".ui-datepicker" ).length;
        },
 
        _createOverlay: function() {
@@ -9523,33 +10865,40 @@ $.widget( "ui.dialog", {
                        return;
                }
 
-               var that = this,
-                       widgetFullName = this.widgetFullName;
-               if ( !$.ui.dialog.overlayInstances ) {
-                       // Prevent use of anchors and inputs.
-                       // We use a delay in case the overlay is created from an
-                       // event that we're going to be cancelling. (#2804)
-                       this._delay(function() {
-                               // Handle .dialog().dialog("close") (#4065)
-                               if ( $.ui.dialog.overlayInstances ) {
-                                       this.document.bind( "focusin.dialog", function( event ) {
-                                               if ( !that._allowInteraction( event ) ) {
-                                                       event.preventDefault();
-                                                       $(".ui-dialog:visible:last .ui-dialog-content")
-                                                               .data( widgetFullName )._focusTabbable();
-                                               }
-                                       });
+               // We use a delay in case the overlay is created from an
+               // event that we're going to be cancelling (#2804)
+               var isOpening = true;
+               this._delay(function() {
+                       isOpening = false;
+               });
+
+               if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+                       // Prevent use of anchors and inputs
+                       // Using _on() for an event handler shared across many instances is
+                       // safe because the dialogs stack and must be closed in reverse order
+                       this._on( this.document, {
+                               focusin: function( event ) {
+                                       if ( isOpening ) {
+                                               return;
+                                       }
+
+                                       if ( !this._allowInteraction( event ) ) {
+                                               event.preventDefault();
+                                               this._trackingInstances()[ 0 ]._focusTabbable();
+                                       }
                                }
                        });
                }
 
-               this.overlay = $("<div>")
-                       .addClass("ui-widget-overlay ui-front")
+               this.overlay = $( "<div>" )
+                       .addClass( "ui-widget-overlay ui-front" )
                        .appendTo( this._appendTo() );
                this._on( this.overlay, {
                        mousedown: "_keepFocus"
                });
-               $.ui.dialog.overlayInstances++;
+               this.document.data( "ui-dialog-overlays",
+                       (this.document.data( "ui-dialog-overlays" ) || 0) + 1 );
        },
 
        _destroyOverlay: function() {
@@ -9558,815 +10907,781 @@ $.widget( "ui.dialog", {
                }
 
                if ( this.overlay ) {
-                       $.ui.dialog.overlayInstances--;
+                       var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
 
-                       if ( !$.ui.dialog.overlayInstances ) {
-                               this.document.unbind( "focusin.dialog" );
+                       if ( !overlays ) {
+                               this.document
+                                       .unbind( "focusin" )
+                                       .removeData( "ui-dialog-overlays" );
+                       } else {
+                               this.document.data( "ui-dialog-overlays", overlays );
                        }
+
                        this.overlay.remove();
                        this.overlay = null;
                }
        }
 });
 
-$.ui.dialog.overlayInstances = 0;
-
-// DEPRECATED
-if ( $.uiBackCompat !== false ) {
-       // position option with array notation
-       // just override with old implementation
-       $.widget( "ui.dialog", $.ui.dialog, {
-               _position: function() {
-                       var position = this.options.position,
-                               myAt = [],
-                               offset = [ 0, 0 ],
-                               isVisible;
-
-                       if ( position ) {
-                               if ( typeof position === "string" || (typeof position === "object" && "0" in position ) ) {
-                                       myAt = position.split ? position.split(" ") : [ position[0], position[1] ];
-                                       if ( myAt.length === 1 ) {
-                                               myAt[1] = myAt[0];
-                                       }
-
-                                       $.each( [ "left", "top" ], function( i, offsetPosition ) {
-                                               if ( +myAt[ i ] === myAt[ i ] ) {
-                                                       offset[ i ] = myAt[ i ];
-                                                       myAt[ i ] = offsetPosition;
-                                               }
-                                       });
-
-                                       position = {
-                                               my: myAt[0] + (offset[0] < 0 ? offset[0] : "+" + offset[0]) + " " +
-                                                       myAt[1] + (offset[1] < 0 ? offset[1] : "+" + offset[1]),
-                                               at: myAt.join(" ")
-                                       };
-                               }
-
-                               position = $.extend( {}, $.ui.dialog.prototype.options.position, position );
-                       } else {
-                               position = $.ui.dialog.prototype.options.position;
-                       }
 
-                       // need to show the dialog to get the actual offset in the position plugin
-                       isVisible = this.uiDialog.is(":visible");
-                       if ( !isVisible ) {
-                               this.uiDialog.show();
-                       }
-                       this.uiDialog.position( position );
-                       if ( !isVisible ) {
-                               this.uiDialog.hide();
-                       }
-               }
-       });
-}
+/*!
+ * jQuery UI Progressbar 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/progressbar/
+ */
 
-}( jQuery ) );
-(function( $, undefined ) {
 
-$.widget( "ui.menu", {
-       version: "1.10.3",
-       defaultElement: "<ul>",
-       delay: 300,
+var progressbar = $.widget( "ui.progressbar", {
+       version: "1.11.3",
        options: {
-               icons: {
-                       submenu: "ui-icon-carat-1-e"
-               },
-               menus: "ul",
-               position: {
-                       my: "left top",
-                       at: "right top"
-               },
-               role: "menu",
+               max: 100,
+               value: 0,
 
-               // callbacks
-               blur: null,
-               focus: null,
-               select: null
+               change: null,
+               complete: null
        },
 
+       min: 0,
+
        _create: function() {
-               this.activeMenu = this.element;
-               // flag used to prevent firing of the click handler
-               // as the event bubbles up through nested menus
-               this.mouseHandled = false;
+               // Constrain initial value
+               this.oldValue = this.options.value = this._constrainedValue();
+
                this.element
-                       .uniqueId()
-                       .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
-                       .toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+                       .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
                        .attr({
-                               role: this.options.role,
-                               tabIndex: 0
-                       })
-                       // need to catch all clicks on disabled menu
-                       // not possible through _on
-                       .bind( "click" + this.eventNamespace, $.proxy(function( event ) {
-                               if ( this.options.disabled ) {
-                                       event.preventDefault();
-                               }
-                       }, this ));
+                               // Only set static values, aria-valuenow and aria-valuemax are
+                               // set inside _refreshValue()
+                               role: "progressbar",
+                               "aria-valuemin": this.min
+                       });
 
-               if ( this.options.disabled ) {
-                       this.element
-                               .addClass( "ui-state-disabled" )
-                               .attr( "aria-disabled", "true" );
-               }
+               this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+                       .appendTo( this.element );
 
-               this._on({
-                       // Prevent focus from sticking to links inside menu after clicking
-                       // them (focus should always stay on UL during navigation).
-                       "mousedown .ui-menu-item > a": function( event ) {
-                               event.preventDefault();
-                       },
-                       "click .ui-state-disabled > a": function( event ) {
-                               event.preventDefault();
-                       },
-                       "click .ui-menu-item:has(a)": function( event ) {
-                               var target = $( event.target ).closest( ".ui-menu-item" );
-                               if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
-                                       this.mouseHandled = true;
+               this._refreshValue();
+       },
 
-                                       this.select( event );
-                                       // Open submenu on click
-                                       if ( target.has( ".ui-menu" ).length ) {
-                                               this.expand( event );
-                                       } else if ( !this.element.is( ":focus" ) ) {
-                                               // Redirect focus to the menu
-                                               this.element.trigger( "focus", [ true ] );
+       _destroy: function() {
+               this.element
+                       .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+                       .removeAttr( "role" )
+                       .removeAttr( "aria-valuemin" )
+                       .removeAttr( "aria-valuemax" )
+                       .removeAttr( "aria-valuenow" );
 
-                                               // If the active item is on the top level, let it stay active.
-                                               // Otherwise, blur the active item since it is no longer visible.
-                                               if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
-                                                       clearTimeout( this.timer );
-                                               }
-                                       }
-                               }
-                       },
-                       "mouseenter .ui-menu-item": function( event ) {
-                               var target = $( event.currentTarget );
-                               // Remove ui-state-active class from siblings of the newly focused menu item
-                               // to avoid a jump caused by adjacent elements both having a class with a border
-                               target.siblings().children( ".ui-state-active" ).removeClass( "ui-state-active" );
-                               this.focus( event, target );
-                       },
-                       mouseleave: "collapseAll",
-                       "mouseleave .ui-menu": "collapseAll",
-                       focus: function( event, keepActiveItem ) {
-                               // If there's already an active item, keep it active
-                               // If not, activate the first item
-                               var item = this.active || this.element.children( ".ui-menu-item" ).eq( 0 );
+               this.valueDiv.remove();
+       },
 
-                               if ( !keepActiveItem ) {
-                                       this.focus( event, item );
-                               }
-                       },
-                       blur: function( event ) {
-                               this._delay(function() {
-                                       if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
-                                               this.collapseAll( event );
-                                       }
-                               });
-                       },
-                       keydown: "_keydown"
-               });
+       value: function( newValue ) {
+               if ( newValue === undefined ) {
+                       return this.options.value;
+               }
 
-               this.refresh();
+               this.options.value = this._constrainedValue( newValue );
+               this._refreshValue();
+       },
 
-               // Clicks outside of a menu collapse any open menus
-               this._on( this.document, {
-                       click: function( event ) {
-                               if ( !$( event.target ).closest( ".ui-menu" ).length ) {
-                                       this.collapseAll( event );
-                               }
+       _constrainedValue: function( newValue ) {
+               if ( newValue === undefined ) {
+                       newValue = this.options.value;
+               }
 
-                               // Reset the mouseHandled flag
-                               this.mouseHandled = false;
-                       }
-               });
+               this.indeterminate = newValue === false;
+
+               // sanitize value
+               if ( typeof newValue !== "number" ) {
+                       newValue = 0;
+               }
+
+               return this.indeterminate ? false :
+                       Math.min( this.options.max, Math.max( this.min, newValue ) );
        },
 
-       _destroy: function() {
-               // Destroy (sub)menus
-               this.element
-                       .removeAttr( "aria-activedescendant" )
-                       .find( ".ui-menu" ).addBack()
-                               .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
-                               .removeAttr( "role" )
-                               .removeAttr( "tabIndex" )
-                               .removeAttr( "aria-labelledby" )
-                               .removeAttr( "aria-expanded" )
-                               .removeAttr( "aria-hidden" )
-                               .removeAttr( "aria-disabled" )
-                               .removeUniqueId()
-                               .show();
+       _setOptions: function( options ) {
+               // Ensure "value" option is set after other values (like max)
+               var value = options.value;
+               delete options.value;
 
-               // Destroy menu items
-               this.element.find( ".ui-menu-item" )
-                       .removeClass( "ui-menu-item" )
-                       .removeAttr( "role" )
-                       .removeAttr( "aria-disabled" )
-                       .children( "a" )
-                               .removeUniqueId()
-                               .removeClass( "ui-corner-all ui-state-hover" )
-                               .removeAttr( "tabIndex" )
-                               .removeAttr( "role" )
-                               .removeAttr( "aria-haspopup" )
-                               .children().each( function() {
-                                       var elem = $( this );
-                                       if ( elem.data( "ui-menu-submenu-carat" ) ) {
-                                               elem.remove();
-                                       }
-                               });
+               this._super( options );
 
-               // Destroy menu dividers
-               this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+               this.options.value = this._constrainedValue( value );
+               this._refreshValue();
        },
 
-       _keydown: function( event ) {
-               /*jshint maxcomplexity:20*/
-               var match, prev, character, skip, regex,
-                       preventDefault = true;
-
-               function escape( value ) {
-                       return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+       _setOption: function( key, value ) {
+               if ( key === "max" ) {
+                       // Don't allow a max less than min
+                       value = Math.max( this.min, value );
+               }
+               if ( key === "disabled" ) {
+                       this.element
+                               .toggleClass( "ui-state-disabled", !!value )
+                               .attr( "aria-disabled", value );
                }
+               this._super( key, value );
+       },
 
-               switch ( event.keyCode ) {
-               case $.ui.keyCode.PAGE_UP:
-                       this.previousPage( event );
-                       break;
-               case $.ui.keyCode.PAGE_DOWN:
-                       this.nextPage( event );
-                       break;
-               case $.ui.keyCode.HOME:
-                       this._move( "first", "first", event );
-                       break;
-               case $.ui.keyCode.END:
-                       this._move( "last", "last", event );
-                       break;
-               case $.ui.keyCode.UP:
-                       this.previous( event );
-                       break;
-               case $.ui.keyCode.DOWN:
-                       this.next( event );
-                       break;
-               case $.ui.keyCode.LEFT:
-                       this.collapse( event );
-                       break;
-               case $.ui.keyCode.RIGHT:
-                       if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
-                               this.expand( event );
-                       }
-                       break;
-               case $.ui.keyCode.ENTER:
-               case $.ui.keyCode.SPACE:
-                       this._activate( event );
-                       break;
-               case $.ui.keyCode.ESCAPE:
-                       this.collapse( event );
-                       break;
-               default:
-                       preventDefault = false;
-                       prev = this.previousFilter || "";
-                       character = String.fromCharCode( event.keyCode );
-                       skip = false;
+       _percentage: function() {
+               return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+       },
 
-                       clearTimeout( this.filterTimer );
+       _refreshValue: function() {
+               var value = this.options.value,
+                       percentage = this._percentage();
 
-                       if ( character === prev ) {
-                               skip = true;
-                       } else {
-                               character = prev + character;
-                       }
+               this.valueDiv
+                       .toggle( this.indeterminate || value > this.min )
+                       .toggleClass( "ui-corner-right", value === this.options.max )
+                       .width( percentage.toFixed(0) + "%" );
 
-                       regex = new RegExp( "^" + escape( character ), "i" );
-                       match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
-                               return regex.test( $( this ).children( "a" ).text() );
-                       });
-                       match = skip && match.index( this.active.next() ) !== -1 ?
-                               this.active.nextAll( ".ui-menu-item" ) :
-                               match;
+               this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
 
-                       // If no matches on the current filter, reset to the last character pressed
-                       // to move down the menu to the first item that starts with that character
-                       if ( !match.length ) {
-                               character = String.fromCharCode( event.keyCode );
-                               regex = new RegExp( "^" + escape( character ), "i" );
-                               match = this.activeMenu.children( ".ui-menu-item" ).filter(function() {
-                                       return regex.test( $( this ).children( "a" ).text() );
-                               });
+               if ( this.indeterminate ) {
+                       this.element.removeAttr( "aria-valuenow" );
+                       if ( !this.overlayDiv ) {
+                               this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
                        }
-
-                       if ( match.length ) {
-                               this.focus( event, match );
-                               if ( match.length > 1 ) {
-                                       this.previousFilter = character;
-                                       this.filterTimer = this._delay(function() {
-                                               delete this.previousFilter;
-                                       }, 1000 );
-                               } else {
-                                       delete this.previousFilter;
-                               }
-                       } else {
-                               delete this.previousFilter;
+               } else {
+                       this.element.attr({
+                               "aria-valuemax": this.options.max,
+                               "aria-valuenow": value
+                       });
+                       if ( this.overlayDiv ) {
+                               this.overlayDiv.remove();
+                               this.overlayDiv = null;
                        }
                }
 
-               if ( preventDefault ) {
-                       event.preventDefault();
+               if ( this.oldValue !== value ) {
+                       this.oldValue = value;
+                       this._trigger( "change" );
                }
+               if ( value === this.options.max ) {
+                       this._trigger( "complete" );
+               }
+       }
+});
+
+
+/*!
+ * jQuery UI Selectmenu 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+var selectmenu = $.widget( "ui.selectmenu", {
+       version: "1.11.3",
+       defaultElement: "<select>",
+       options: {
+               appendTo: null,
+               disabled: null,
+               icons: {
+                       button: "ui-icon-triangle-1-s"
+               },
+               position: {
+                       my: "left top",
+                       at: "left bottom",
+                       collision: "none"
+               },
+               width: null,
+
+               // callbacks
+               change: null,
+               close: null,
+               focus: null,
+               open: null,
+               select: null
        },
 
-       _activate: function( event ) {
-               if ( !this.active.is( ".ui-state-disabled" ) ) {
-                       if ( this.active.children( "a[aria-haspopup='true']" ).length ) {
-                               this.expand( event );
-                       } else {
-                               this.select( event );
-                       }
+       _create: function() {
+               var selectmenuId = this.element.uniqueId().attr( "id" );
+               this.ids = {
+                       element: selectmenuId,
+                       button: selectmenuId + "-button",
+                       menu: selectmenuId + "-menu"
+               };
+
+               this._drawButton();
+               this._drawMenu();
+
+               if ( this.options.disabled ) {
+                       this.disable();
                }
        },
 
-       refresh: function() {
-               var menus,
-                       icon = this.options.icons.submenu,
-                       submenus = this.element.find( this.options.menus );
+       _drawButton: function() {
+               var that = this;
 
-               // Initialize nested menus
-               submenus.filter( ":not(.ui-menu)" )
-                       .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
-                       .hide()
-                       .attr({
-                               role: this.options.role,
-                               "aria-hidden": "true",
-                               "aria-expanded": "false"
-                       })
-                       .each(function() {
-                               var menu = $( this ),
-                                       item = menu.prev( "a" ),
-                                       submenuCarat = $( "<span>" )
-                                               .addClass( "ui-menu-icon ui-icon " + icon )
-                                               .data( "ui-menu-submenu-carat", true );
+               // Associate existing label with the new button
+               this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
+               this._on( this.label, {
+                       click: function( event ) {
+                               this.button.focus();
+                               event.preventDefault();
+                       }
+               });
 
-                               item
-                                       .attr( "aria-haspopup", "true" )
-                                       .prepend( submenuCarat );
-                               menu.attr( "aria-labelledby", item.attr( "id" ) );
-                       });
+               // Hide original select element
+               this.element.hide();
 
-               menus = submenus.add( this.element );
+               // Create button
+               this.button = $( "<span>", {
+                       "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+                       tabindex: this.options.disabled ? -1 : 0,
+                       id: this.ids.button,
+                       role: "combobox",
+                       "aria-expanded": "false",
+                       "aria-autocomplete": "list",
+                       "aria-owns": this.ids.menu,
+                       "aria-haspopup": "true"
+               })
+                       .insertAfter( this.element );
 
-               // Don't refresh list items that are already adapted
-               menus.children( ":not(.ui-menu-item):has(a)" )
-                       .addClass( "ui-menu-item" )
-                       .attr( "role", "presentation" )
-                       .children( "a" )
-                               .uniqueId()
-                               .addClass( "ui-corner-all" )
-                               .attr({
-                                       tabIndex: -1,
-                                       role: this._itemRole()
-                               });
+               $( "<span>", {
+                       "class": "ui-icon " + this.options.icons.button
+               })
+                       .prependTo( this.button );
 
-               // Initialize unlinked menu-items containing spaces and/or dashes only as dividers
-               menus.children( ":not(.ui-menu-item)" ).each(function() {
-                       var item = $( this );
-                       // hyphen, em dash, en dash
-                       if ( !/[^\-\u2014\u2013\s]/.test( item.text() ) ) {
-                               item.addClass( "ui-widget-content ui-menu-divider" );
+               this.buttonText = $( "<span>", {
+                       "class": "ui-selectmenu-text"
+               })
+                       .appendTo( this.button );
+
+               this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
+               this._resizeButton();
+
+               this._on( this.button, this._buttonEvents );
+               this.button.one( "focusin", function() {
+
+                       // Delay rendering the menu items until the button receives focus.
+                       // The menu may have already been rendered via a programmatic open.
+                       if ( !that.menuItems ) {
+                               that._refreshMenu();
                        }
                });
+               this._hoverable( this.button );
+               this._focusable( this.button );
+       },
 
-               // Add aria-disabled attribute to any disabled menu item
-               menus.children( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+       _drawMenu: function() {
+               var that = this;
 
-               // If the active item has been removed, blur the menu
-               if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
-                       this.blur();
-               }
-       },
+               // Create menu
+               this.menu = $( "<ul>", {
+                       "aria-hidden": "true",
+                       "aria-labelledby": this.ids.button,
+                       id: this.ids.menu
+               });
 
-       _itemRole: function() {
-               return {
-                       menu: "menuitem",
-                       listbox: "option"
-               }[ this.options.role ];
-       },
+               // Wrap menu
+               this.menuWrap = $( "<div>", {
+                       "class": "ui-selectmenu-menu ui-front"
+               })
+                       .append( this.menu )
+                       .appendTo( this._appendTo() );
 
-       _setOption: function( key, value ) {
-               if ( key === "icons" ) {
-                       this.element.find( ".ui-menu-icon" )
-                               .removeClass( this.options.icons.submenu )
-                               .addClass( value.submenu );
-               }
-               this._super( key, value );
-       },
+               // Initialize menu widget
+               this.menuInstance = this.menu
+                       .menu({
+                               role: "listbox",
+                               select: function( event, ui ) {
+                                       event.preventDefault();
 
-       focus: function( event, item ) {
-               var nested, focused;
-               this.blur( event, event && event.type === "focus" );
+                                       // support: IE8
+                                       // If the item was selected via a click, the text selection
+                                       // will be destroyed in IE
+                                       that._setSelection();
 
-               this._scrollIntoView( item );
+                                       that._select( ui.item.data( "ui-selectmenu-item" ), event );
+                               },
+                               focus: function( event, ui ) {
+                                       var item = ui.item.data( "ui-selectmenu-item" );
+
+                                       // Prevent inital focus from firing and check if its a newly focused item
+                                       if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+                                               that._trigger( "focus", event, { item: item } );
+                                               if ( !that.isOpen ) {
+                                                       that._select( item, event );
+                                               }
+                                       }
+                                       that.focusIndex = item.index;
 
-               this.active = item.first();
-               focused = this.active.children( "a" ).addClass( "ui-state-focus" );
-               // Only update aria-activedescendant if there's a role
-               // otherwise we assume focus is managed elsewhere
-               if ( this.options.role ) {
-                       this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
-               }
+                                       that.button.attr( "aria-activedescendant",
+                                               that.menuItems.eq( item.index ).attr( "id" ) );
+                               }
+                       })
+                       .menu( "instance" );
 
-               // Highlight active parent menu item, if any
-               this.active
-                       .parent()
-                       .closest( ".ui-menu-item" )
-                       .children( "a:first" )
-                       .addClass( "ui-state-active" );
+               // Adjust menu styles to dropdown
+               this.menu
+                       .addClass( "ui-corner-bottom" )
+                       .removeClass( "ui-corner-all" );
 
-               if ( event && event.type === "keydown" ) {
-                       this._close();
-               } else {
-                       this.timer = this._delay(function() {
-                               this._close();
-                       }, this.delay );
-               }
+               // Don't close the menu on mouseleave
+               this.menuInstance._off( this.menu, "mouseleave" );
 
-               nested = item.children( ".ui-menu" );
-               if ( nested.length && ( /^mouse/.test( event.type ) ) ) {
-                       this._startOpening(nested);
-               }
-               this.activeMenu = item.parent();
+               // Cancel the menu's collapseAll on document click
+               this.menuInstance._closeOnDocumentClick = function() {
+                       return false;
+               };
 
-               this._trigger( "focus", event, { item: item } );
+               // Selects often contain empty items, but never contain dividers
+               this.menuInstance._isDivider = function() {
+                       return false;
+               };
        },
 
-       _scrollIntoView: function( item ) {
-               var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
-               if ( this._hasScroll() ) {
-                       borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
-                       paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
-                       offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
-                       scroll = this.activeMenu.scrollTop();
-                       elementHeight = this.activeMenu.height();
-                       itemHeight = item.height();
+       refresh: function() {
+               this._refreshMenu();
+               this._setText( this.buttonText, this._getSelectedItem().text() );
+               if ( !this.options.width ) {
+                       this._resizeButton();
+               }
+       },
 
-                       if ( offset < 0 ) {
-                               this.activeMenu.scrollTop( scroll + offset );
-                       } else if ( offset + itemHeight > elementHeight ) {
-                               this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
-                       }
+       _refreshMenu: function() {
+               this.menu.empty();
+
+               var item,
+                       options = this.element.find( "option" );
+
+               if ( !options.length ) {
+                       return;
                }
+
+               this._parseOptions( options );
+               this._renderMenu( this.menu, this.items );
+
+               this.menuInstance.refresh();
+               this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" );
+
+               item = this._getSelectedItem();
+
+               // Update the menu to have the correct item focused
+               this.menuInstance.focus( null, item );
+               this._setAria( item.data( "ui-selectmenu-item" ) );
+
+               // Set disabled state
+               this._setOption( "disabled", this.element.prop( "disabled" ) );
        },
 
-       blur: function( event, fromFocus ) {
-               if ( !fromFocus ) {
-                       clearTimeout( this.timer );
+       open: function( event ) {
+               if ( this.options.disabled ) {
+                       return;
                }
 
-               if ( !this.active ) {
-                       return;
+               // If this is the first time the menu is being opened, render the items
+               if ( !this.menuItems ) {
+                       this._refreshMenu();
+               } else {
+
+                       // Menu clears focus on close, reset focus to selected item
+                       this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" );
+                       this.menuInstance.focus( null, this._getSelectedItem() );
                }
 
-               this.active.children( "a" ).removeClass( "ui-state-focus" );
-               this.active = null;
+               this.isOpen = true;
+               this._toggleAttr();
+               this._resizeMenu();
+               this._position();
 
-               this._trigger( "blur", event, { item: this.active } );
+               this._on( this.document, this._documentClick );
+
+               this._trigger( "open", event );
        },
 
-       _startOpening: function( submenu ) {
-               clearTimeout( this.timer );
+       _position: function() {
+               this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+       },
 
-               // Don't open if already open fixes a Firefox bug that caused a .5 pixel
-               // shift in the submenu position when mousing over the carat icon
-               if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+       close: function( event ) {
+               if ( !this.isOpen ) {
                        return;
                }
 
-               this.timer = this._delay(function() {
-                       this._close();
-                       this._open( submenu );
-               }, this.delay );
-       },
+               this.isOpen = false;
+               this._toggleAttr();
 
-       _open: function( submenu ) {
-               var position = $.extend({
-                       of: this.active
-               }, this.options.position );
+               this.range = null;
+               this._off( this.document );
 
-               clearTimeout( this.timer );
-               this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
-                       .hide()
-                       .attr( "aria-hidden", "true" );
+               this._trigger( "close", event );
+       },
 
-               submenu
-                       .show()
-                       .removeAttr( "aria-hidden" )
-                       .attr( "aria-expanded", "true" )
-                       .position( position );
+       widget: function() {
+               return this.button;
        },
 
-       collapseAll: function( event, all ) {
-               clearTimeout( this.timer );
-               this.timer = this._delay(function() {
-                       // If we were passed an event, look for the submenu that contains the event
-                       var currentMenu = all ? this.element :
-                               $( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+       menuWidget: function() {
+               return this.menu;
+       },
 
-                       // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
-                       if ( !currentMenu.length ) {
-                               currentMenu = this.element;
+       _renderMenu: function( ul, items ) {
+               var that = this,
+                       currentOptgroup = "";
+
+               $.each( items, function( index, item ) {
+                       if ( item.optgroup !== currentOptgroup ) {
+                               $( "<li>", {
+                                       "class": "ui-selectmenu-optgroup ui-menu-divider" +
+                                               ( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+                                                       " ui-state-disabled" :
+                                                       "" ),
+                                       text: item.optgroup
+                               })
+                                       .appendTo( ul );
+
+                               currentOptgroup = item.optgroup;
                        }
 
-                       this._close( currentMenu );
+                       that._renderItemData( ul, item );
+               });
+       },
 
-                       this.blur( event );
-                       this.activeMenu = currentMenu;
-               }, this.delay );
+       _renderItemData: function( ul, item ) {
+               return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
        },
 
-       // With no arguments, closes the currently active menu - if nothing is active
-       // it closes all menus.  If passed an argument, it will search for menus BELOW
-       _close: function( startMenu ) {
-               if ( !startMenu ) {
-                       startMenu = this.active ? this.active.parent() : this.element;
+       _renderItem: function( ul, item ) {
+               var li = $( "<li>" );
+
+               if ( item.disabled ) {
+                       li.addClass( "ui-state-disabled" );
                }
+               this._setText( li, item.label );
 
-               startMenu
-                       .find( ".ui-menu" )
-                               .hide()
-                               .attr( "aria-hidden", "true" )
-                               .attr( "aria-expanded", "false" )
-                       .end()
-                       .find( "a.ui-state-active" )
-                               .removeClass( "ui-state-active" );
+               return li.appendTo( ul );
        },
 
-       collapse: function( event ) {
-               var newItem = this.active &&
-                       this.active.parent().closest( ".ui-menu-item", this.element );
-               if ( newItem && newItem.length ) {
-                       this._close();
-                       this.focus( event, newItem );
+       _setText: function( element, value ) {
+               if ( value ) {
+                       element.text( value );
+               } else {
+                       element.html( "&#160;" );
                }
        },
 
-       expand: function( event ) {
-               var newItem = this.active &&
-                       this.active
-                               .children( ".ui-menu " )
-                               .children( ".ui-menu-item" )
-                               .first();
-
-               if ( newItem && newItem.length ) {
-                       this._open( newItem.parent() );
+       _move: function( direction, event ) {
+               var item, next,
+                       filter = ".ui-menu-item";
 
-                       // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
-                       this._delay(function() {
-                               this.focus( event, newItem );
-                       });
+               if ( this.isOpen ) {
+                       item = this.menuItems.eq( this.focusIndex );
+               } else {
+                       item = this.menuItems.eq( this.element[ 0 ].selectedIndex );
+                       filter += ":not(.ui-state-disabled)";
                }
-       },
-
-       next: function( event ) {
-               this._move( "next", "first", event );
-       },
 
-       previous: function( event ) {
-               this._move( "prev", "last", event );
-       },
+               if ( direction === "first" || direction === "last" ) {
+                       next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+               } else {
+                       next = item[ direction + "All" ]( filter ).eq( 0 );
+               }
 
-       isFirstItem: function() {
-               return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+               if ( next.length ) {
+                       this.menuInstance.focus( event, next );
+               }
        },
 
-       isLastItem: function() {
-               return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+       _getSelectedItem: function() {
+               return this.menuItems.eq( this.element[ 0 ].selectedIndex );
        },
 
-       _move: function( direction, filter, event ) {
-               var next;
-               if ( this.active ) {
-                       if ( direction === "first" || direction === "last" ) {
-                               next = this.active
-                                       [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
-                                       .eq( -1 );
-                       } else {
-                               next = this.active
-                                       [ direction + "All" ]( ".ui-menu-item" )
-                                       .eq( 0 );
-                       }
-               }
-               if ( !next || !next.length || !this.active ) {
-                       next = this.activeMenu.children( ".ui-menu-item" )[ filter ]();
-               }
-
-               this.focus( event, next );
+       _toggle: function( event ) {
+               this[ this.isOpen ? "close" : "open" ]( event );
        },
 
-       nextPage: function( event ) {
-               var item, base, height;
+       _setSelection: function() {
+               var selection;
 
-               if ( !this.active ) {
-                       this.next( event );
-                       return;
-               }
-               if ( this.isLastItem() ) {
+               if ( !this.range ) {
                        return;
                }
-               if ( this._hasScroll() ) {
-                       base = this.active.offset().top;
-                       height = this.element.height();
-                       this.active.nextAll( ".ui-menu-item" ).each(function() {
-                               item = $( this );
-                               return item.offset().top - base - height < 0;
-                       });
 
-                       this.focus( event, item );
+               if ( window.getSelection ) {
+                       selection = window.getSelection();
+                       selection.removeAllRanges();
+                       selection.addRange( this.range );
+
+               // support: IE8
                } else {
-                       this.focus( event, this.activeMenu.children( ".ui-menu-item" )
-                               [ !this.active ? "first" : "last" ]() );
+                       this.range.select();
                }
+
+               // support: IE
+               // Setting the text selection kills the button focus in IE, but
+               // restoring the focus doesn't kill the selection.
+               this.button.focus();
        },
 
-       previousPage: function( event ) {
-               var item, base, height;
-               if ( !this.active ) {
-                       this.next( event );
-                       return;
-               }
-               if ( this.isFirstItem() ) {
-                       return;
-               }
-               if ( this._hasScroll() ) {
-                       base = this.active.offset().top;
-                       height = this.element.height();
-                       this.active.prevAll( ".ui-menu-item" ).each(function() {
-                               item = $( this );
-                               return item.offset().top - base + height > 0;
-                       });
+       _documentClick: {
+               mousedown: function( event ) {
+                       if ( !this.isOpen ) {
+                               return;
+                       }
 
-                       this.focus( event, item );
-               } else {
-                       this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
+                       if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) {
+                               this.close( event );
+                       }
                }
        },
 
-       _hasScroll: function() {
-               return this.element.outerHeight() < this.element.prop( "scrollHeight" );
-       },
+       _buttonEvents: {
 
-       select: function( event ) {
-               // TODO: It should never be possible to not have an active item at this
-               // point, but the tests don't trigger mouseenter before click.
-               this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
-               var ui = { item: this.active };
-               if ( !this.active.has( ".ui-menu" ).length ) {
-                       this.collapseAll( event, true );
-               }
-               this._trigger( "select", event, ui );
-       }
-});
+               // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+               mousedown: function() {
+                       var selection;
 
-}( jQuery ));
-(function( $, undefined ) {
+                       if ( window.getSelection ) {
+                               selection = window.getSelection();
+                               if ( selection.rangeCount ) {
+                                       this.range = selection.getRangeAt( 0 );
+                               }
 
-$.widget( "ui.progressbar", {
-       version: "1.10.3",
-       options: {
-               max: 100,
-               value: 0,
+                       // support: IE8
+                       } else {
+                               this.range = document.selection.createRange();
+                       }
+               },
 
-               change: null,
-               complete: null
-       },
+               click: function( event ) {
+                       this._setSelection();
+                       this._toggle( event );
+               },
 
-       min: 0,
+               keydown: function( event ) {
+                       var preventDefault = true;
+                       switch ( event.keyCode ) {
+                               case $.ui.keyCode.TAB:
+                               case $.ui.keyCode.ESCAPE:
+                                       this.close( event );
+                                       preventDefault = false;
+                                       break;
+                               case $.ui.keyCode.ENTER:
+                                       if ( this.isOpen ) {
+                                               this._selectFocusedItem( event );
+                                       }
+                                       break;
+                               case $.ui.keyCode.UP:
+                                       if ( event.altKey ) {
+                                               this._toggle( event );
+                                       } else {
+                                               this._move( "prev", event );
+                                       }
+                                       break;
+                               case $.ui.keyCode.DOWN:
+                                       if ( event.altKey ) {
+                                               this._toggle( event );
+                                       } else {
+                                               this._move( "next", event );
+                                       }
+                                       break;
+                               case $.ui.keyCode.SPACE:
+                                       if ( this.isOpen ) {
+                                               this._selectFocusedItem( event );
+                                       } else {
+                                               this._toggle( event );
+                                       }
+                                       break;
+                               case $.ui.keyCode.LEFT:
+                                       this._move( "prev", event );
+                                       break;
+                               case $.ui.keyCode.RIGHT:
+                                       this._move( "next", event );
+                                       break;
+                               case $.ui.keyCode.HOME:
+                               case $.ui.keyCode.PAGE_UP:
+                                       this._move( "first", event );
+                                       break;
+                               case $.ui.keyCode.END:
+                               case $.ui.keyCode.PAGE_DOWN:
+                                       this._move( "last", event );
+                                       break;
+                               default:
+                                       this.menu.trigger( event );
+                                       preventDefault = false;
+                       }
 
-       _create: function() {
-               // Constrain initial value
-               this.oldValue = this.options.value = this._constrainedValue();
+                       if ( preventDefault ) {
+                               event.preventDefault();
+                       }
+               }
+       },
 
-               this.element
-                       .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
-                       .attr({
-                               // Only set static values, aria-valuenow and aria-valuemax are
-                               // set inside _refreshValue()
-                               role: "progressbar",
-                               "aria-valuemin": this.min
-                       });
+       _selectFocusedItem: function( event ) {
+               var item = this.menuItems.eq( this.focusIndex );
+               if ( !item.hasClass( "ui-state-disabled" ) ) {
+                       this._select( item.data( "ui-selectmenu-item" ), event );
+               }
+       },
 
-               this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
-                       .appendTo( this.element );
+       _select: function( item, event ) {
+               var oldIndex = this.element[ 0 ].selectedIndex;
 
-               this._refreshValue();
+               // Change native select element
+               this.element[ 0 ].selectedIndex = item.index;
+               this._setText( this.buttonText, item.label );
+               this._setAria( item );
+               this._trigger( "select", event, { item: item } );
+
+               if ( item.index !== oldIndex ) {
+                       this._trigger( "change", event, { item: item } );
+               }
+
+               this.close( event );
        },
 
-       _destroy: function() {
-               this.element
-                       .removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
-                       .removeAttr( "role" )
-                       .removeAttr( "aria-valuemin" )
-                       .removeAttr( "aria-valuemax" )
-                       .removeAttr( "aria-valuenow" );
+       _setAria: function( item ) {
+               var id = this.menuItems.eq( item.index ).attr( "id" );
 
-               this.valueDiv.remove();
+               this.button.attr({
+                       "aria-labelledby": id,
+                       "aria-activedescendant": id
+               });
+               this.menu.attr( "aria-activedescendant", id );
        },
 
-       value: function( newValue ) {
-               if ( newValue === undefined ) {
-                       return this.options.value;
+       _setOption: function( key, value ) {
+               if ( key === "icons" ) {
+                       this.button.find( "span.ui-icon" )
+                               .removeClass( this.options.icons.button )
+                               .addClass( value.button );
                }
 
-               this.options.value = this._constrainedValue( newValue );
-               this._refreshValue();
-       },
+               this._super( key, value );
 
-       _constrainedValue: function( newValue ) {
-               if ( newValue === undefined ) {
-                       newValue = this.options.value;
+               if ( key === "appendTo" ) {
+                       this.menuWrap.appendTo( this._appendTo() );
                }
 
-               this.indeterminate = newValue === false;
+               if ( key === "disabled" ) {
+                       this.menuInstance.option( "disabled", value );
+                       this.button
+                               .toggleClass( "ui-state-disabled", value )
+                               .attr( "aria-disabled", value );
 
-               // sanitize value
-               if ( typeof newValue !== "number" ) {
-                       newValue = 0;
+                       this.element.prop( "disabled", value );
+                       if ( value ) {
+                               this.button.attr( "tabindex", -1 );
+                               this.close();
+                       } else {
+                               this.button.attr( "tabindex", 0 );
+                       }
                }
 
-               return this.indeterminate ? false :
-                       Math.min( this.options.max, Math.max( this.min, newValue ) );
+               if ( key === "width" ) {
+                       this._resizeButton();
+               }
        },
 
-       _setOptions: function( options ) {
-               // Ensure "value" option is set after other values (like max)
-               var value = options.value;
-               delete options.value;
+       _appendTo: function() {
+               var element = this.options.appendTo;
 
-               this._super( options );
+               if ( element ) {
+                       element = element.jquery || element.nodeType ?
+                               $( element ) :
+                               this.document.find( element ).eq( 0 );
+               }
 
-               this.options.value = this._constrainedValue( value );
-               this._refreshValue();
-       },
+               if ( !element || !element[ 0 ] ) {
+                       element = this.element.closest( ".ui-front" );
+               }
 
-       _setOption: function( key, value ) {
-               if ( key === "max" ) {
-                       // Don't allow a max less than min
-                       value = Math.max( this.min, value );
+               if ( !element.length ) {
+                       element = this.document[ 0 ].body;
                }
 
-               this._super( key, value );
+               return element;
        },
 
-       _percentage: function() {
-               return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+       _toggleAttr: function() {
+               this.button
+                       .toggleClass( "ui-corner-top", this.isOpen )
+                       .toggleClass( "ui-corner-all", !this.isOpen )
+                       .attr( "aria-expanded", this.isOpen );
+               this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
+               this.menu.attr( "aria-hidden", !this.isOpen );
        },
 
-       _refreshValue: function() {
-               var value = this.options.value,
-                       percentage = this._percentage();
+       _resizeButton: function() {
+               var width = this.options.width;
 
-               this.valueDiv
-                       .toggle( this.indeterminate || value > this.min )
-                       .toggleClass( "ui-corner-right", value === this.options.max )
-                       .width( percentage.toFixed(0) + "%" );
+               if ( !width ) {
+                       width = this.element.show().outerWidth();
+                       this.element.hide();
+               }
 
-               this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+               this.button.outerWidth( width );
+       },
 
-               if ( this.indeterminate ) {
-                       this.element.removeAttr( "aria-valuenow" );
-                       if ( !this.overlayDiv ) {
-                               this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
-                       }
-               } else {
-                       this.element.attr({
-                               "aria-valuemax": this.options.max,
-                               "aria-valuenow": value
+       _resizeMenu: function() {
+               this.menu.outerWidth( Math.max(
+                       this.button.outerWidth(),
+
+                       // support: IE10
+                       // IE10 wraps long text (possibly a rounding bug)
+                       // so we add 1px to avoid the wrapping
+                       this.menu.width( "" ).outerWidth() + 1
+               ) );
+       },
+
+       _getCreateOptions: function() {
+               return { disabled: this.element.prop( "disabled" ) };
+       },
+
+       _parseOptions: function( options ) {
+               var data = [];
+               options.each(function( index, item ) {
+                       var option = $( item ),
+                               optgroup = option.parent( "optgroup" );
+                       data.push({
+                               element: option,
+                               index: index,
+                               value: option.val(),
+                               label: option.text(),
+                               optgroup: optgroup.attr( "label" ) || "",
+                               disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
                        });
-                       if ( this.overlayDiv ) {
-                               this.overlayDiv.remove();
-                               this.overlayDiv = null;
-                       }
-               }
+               });
+               this.items = data;
+       },
 
-               if ( this.oldValue !== value ) {
-                       this.oldValue = value;
-                       this._trigger( "change" );
-               }
-               if ( value === this.options.max ) {
-                       this._trigger( "complete" );
-               }
+       _destroy: function() {
+               this.menuWrap.remove();
+               this.button.remove();
+               this.element.show();
+               this.element.removeUniqueId();
+               this.label.attr( "for", this.ids.element );
        }
 });
 
-})( jQuery );
-(function( $, undefined ) {
 
-// number of pages in a slider
-// (how many times can you page up/down to go through the whole range)
-var numPages = 5;
+/*!
+ * jQuery UI Slider 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ */
+
 
-$.widget( "ui.slider", $.ui.mouse, {
-       version: "1.10.3",
+var slider = $.widget( "ui.slider", $.ui.mouse, {
+       version: "1.11.3",
        widgetEventPrefix: "slide",
 
        options: {
@@ -10387,6 +11702,10 @@ $.widget( "ui.slider", $.ui.mouse, {
                stop: null
        },
 
+       // number of pages in a slider
+       // (how many times can you page up/down to go through the whole range)
+       numPages: 5,
+
        _create: function() {
                this._keySliding = false;
                this._mouseSliding = false;
@@ -10394,6 +11713,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                this._handleIndex = null;
                this._detectOrientation();
                this._mouseInit();
+               this._calculateNewMax();
 
                this.element
                        .addClass( "ui-slider" +
@@ -10419,7 +11739,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                var i, handleCount,
                        options = this.options,
                        existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
-                       handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
+                       handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
                        handles = [];
 
                handleCount = ( options.values && options.values.length ) || 1;
@@ -10477,21 +11797,25 @@ $.widget( "ui.slider", $.ui.mouse, {
                        this.range.addClass( classes +
                                ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
                } else {
-                       this.range = $([]);
+                       if ( this.range ) {
+                               this.range.remove();
+                       }
+                       this.range = null;
                }
        },
 
        _setupEvents: function() {
-               var elements = this.handles.add( this.range ).filter( "a" );
-               this._off( elements );
-               this._on( elements, this._handleEvents );
-               this._hoverable( elements );
-               this._focusable( elements );
+               this._off( this.handles );
+               this._on( this.handles, this._handleEvents );
+               this._hoverable( this.handles );
+               this._focusable( this.handles );
        },
 
        _destroy: function() {
                this.handles.remove();
-               this.range.remove();
+               if ( this.range ) {
+                       this.range.remove();
+               }
 
                this.element
                        .removeClass( "ui-slider" +
@@ -10663,7 +11987,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                                } );
                                otherVal = this.values( index ? 0 : 1 );
                                if ( allowed !== false ) {
-                                       this.values( index, newVal, true );
+                                       this.values( index, newVal );
                                }
                        }
                } else {
@@ -10764,7 +12088,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                                this.options.value = this._values( 0 );
                                this.options.values = null;
                        } else if ( value === "max" ) {
-                               this.options.value = this._values( this.options.values.length-1 );
+                               this.options.value = this._values( this.options.values.length - 1 );
                                this.options.values = null;
                        }
                }
@@ -10773,7 +12097,11 @@ $.widget( "ui.slider", $.ui.mouse, {
                        valsLength = this.options.values.length;
                }
 
-               $.Widget.prototype._setOption.apply( this, arguments );
+               if ( key === "disabled" ) {
+                       this.element.toggleClass( "ui-state-disabled", !!value );
+               }
+
+               this._super( key, value );
 
                switch ( key ) {
                        case "orientation":
@@ -10782,6 +12110,9 @@ $.widget( "ui.slider", $.ui.mouse, {
                                        .removeClass( "ui-slider-horizontal ui-slider-vertical" )
                                        .addClass( "ui-slider-" + this.orientation );
                                this._refreshValue();
+
+                               // Reset positioning from previous orientation
+                               this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
                                break;
                        case "value":
                                this._animateOff = true;
@@ -10797,9 +12128,11 @@ $.widget( "ui.slider", $.ui.mouse, {
                                }
                                this._animateOff = false;
                                break;
+                       case "step":
                        case "min":
                        case "max":
                                this._animateOff = true;
+                               this._calculateNewMax();
                                this._refreshValue();
                                this._animateOff = false;
                                break;
@@ -10837,7 +12170,7 @@ $.widget( "ui.slider", $.ui.mouse, {
                        // .slice() creates a copy of the array
                        // this copy gets trimmed by min and max and then returned
                        vals = this.options.values.slice();
-                       for ( i = 0; i < vals.length; i+= 1) {
+                       for ( i = 0; i < vals.length; i += 1) {
                                vals[ i ] = this._trimAlignValue( vals[ i ] );
                        }
 
@@ -10868,12 +12201,35 @@ $.widget( "ui.slider", $.ui.mouse, {
                return parseFloat( alignValue.toFixed(5) );
        },
 
+       _calculateNewMax: function() {
+               var max = this.options.max,
+                       min = this._valueMin(),
+                       step = this.options.step,
+                       aboveMin = Math.floor( ( max - min ) / step ) * step;
+               max = aboveMin + min;
+               this.max = parseFloat( max.toFixed( this._precision() ) );
+       },
+
+       _precision: function() {
+               var precision = this._precisionOf( this.options.step );
+               if ( this.options.min !== null ) {
+                       precision = Math.max( precision, this._precisionOf( this.options.min ) );
+               }
+               return precision;
+       },
+
+       _precisionOf: function( num ) {
+               var str = num.toString(),
+                       decimal = str.indexOf( "." );
+               return decimal === -1 ? 0 : str.length - decimal - 1;
+       },
+
        _valueMin: function() {
                return this.options.min;
        },
 
        _valueMax: function() {
-               return this.options.max;
+               return this.max;
        },
 
        _refreshValue: function() {
@@ -10935,7 +12291,6 @@ $.widget( "ui.slider", $.ui.mouse, {
 
        _handleEvents: {
                keydown: function( event ) {
-                       /*jshint maxcomplexity:25*/
                        var allowed, curVal, newVal, step,
                                index = $( event.target ).data( "ui-slider-handle-index" );
 
@@ -10975,10 +12330,13 @@ $.widget( "ui.slider", $.ui.mouse, {
                                        newVal = this._valueMax();
                                        break;
                                case $.ui.keyCode.PAGE_UP:
-                                       newVal = this._trimAlignValue( curVal + ( (this._valueMax() - this._valueMin()) / numPages ) );
+                                       newVal = this._trimAlignValue(
+                                               curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+                                       );
                                        break;
                                case $.ui.keyCode.PAGE_DOWN:
-                                       newVal = this._trimAlignValue( curVal - ( (this._valueMax() - this._valueMin()) / numPages ) );
+                                       newVal = this._trimAlignValue(
+                                               curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );
                                        break;
                                case $.ui.keyCode.UP:
                                case $.ui.keyCode.RIGHT:
@@ -10998,9 +12356,6 @@ $.widget( "ui.slider", $.ui.mouse, {
 
                        this._slide( event, index, newVal );
                },
-               click: function( event ) {
-                       event.preventDefault();
-               },
                keyup: function( event ) {
                        var index = $( event.target ).data( "ui-slider-handle-index" );
 
@@ -11012,13 +12367,22 @@ $.widget( "ui.slider", $.ui.mouse, {
                        }
                }
        }
-
 });
 
-}(jQuery));
-(function( $ ) {
 
-function modifier( fn ) {
+/*!
+ * jQuery UI Spinner 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ */
+
+
+function spinner_modifier( fn ) {
        return function() {
                var previous = this.element.val();
                fn.apply( this, arguments );
@@ -11029,8 +12393,8 @@ function modifier( fn ) {
        };
 }
 
-$.widget( "ui.spinner", {
-       version: "1.10.3",
+var spinner = $.widget( "ui.spinner", {
+       version: "1.11.3",
        defaultElement: "<input>",
        widgetEventPrefix: "spin",
        options: {
@@ -11058,8 +12422,12 @@ $.widget( "ui.spinner", {
                this._setOption( "min", this.options.min );
                this._setOption( "step", this.options.step );
 
-               // format the value, but don't constrain
-               this._value( this.element.val(), true );
+               // Only format if there is a value, prevents the field from being marked
+               // as invalid in Firefox, see #9573.
+               if ( this.value() !== "" ) {
+                       // Format the value, but don't constrain.
+                       this._value( this.element.val(), true );
+               }
 
                this._draw();
                this._on( this._events );
@@ -11300,7 +12668,7 @@ $.widget( "ui.spinner", {
                if ( incremental ) {
                        return $.isFunction( incremental ) ?
                                incremental( i ) :
-                               Math.floor( i*i*i/50000 - i*i/500 + 17*i/200 + 1 );
+                               Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
                }
 
                return 1;
@@ -11384,19 +12752,14 @@ $.widget( "ui.spinner", {
                this._super( key, value );
 
                if ( key === "disabled" ) {
-                       if ( value ) {
-                               this.element.prop( "disabled", true );
-                               this.buttons.button( "disable" );
-                       } else {
-                               this.element.prop( "disabled", false );
-                               this.buttons.button( "enable" );
-                       }
+                       this.widget().toggleClass( "ui-state-disabled", !!value );
+                       this.element.prop( "disabled", !!value );
+                       this.buttons.button( value ? "disable" : "enable" );
                }
        },
 
-       _setOptions: modifier(function( options ) {
+       _setOptions: spinner_modifier(function( options ) {
                this._super( options );
-               this._value( this.element.val() );
        }),
 
        _parse: function( val ) {
@@ -11425,6 +12788,18 @@ $.widget( "ui.spinner", {
                });
        },
 
+       isValid: function() {
+               var value = this.value();
+
+               // null is invalid
+               if ( value === null ) {
+                       return false;
+               }
+
+               // if value gets adjusted, it's invalid
+               return value === this._adjustValue( value );
+       },
+
        // update the value without triggering change
        _value: function( value, allowAny ) {
                var parsed;
@@ -11453,7 +12828,7 @@ $.widget( "ui.spinner", {
                this.uiSpinner.replaceWith( this.element );
        },
 
-       stepUp: modifier(function( steps ) {
+       stepUp: spinner_modifier(function( steps ) {
                this._stepUp( steps );
        }),
        _stepUp: function( steps ) {
@@ -11463,7 +12838,7 @@ $.widget( "ui.spinner", {
                }
        },
 
-       stepDown: modifier(function( steps ) {
+       stepDown: spinner_modifier(function( steps ) {
                this._stepDown( steps );
        }),
        _stepDown: function( steps ) {
@@ -11473,11 +12848,11 @@ $.widget( "ui.spinner", {
                }
        },
 
-       pageUp: modifier(function( pages ) {
+       pageUp: spinner_modifier(function( pages ) {
                this._stepUp( (pages || 1) * this.options.page );
        }),
 
-       pageDown: modifier(function( pages ) {
+       pageDown: spinner_modifier(function( pages ) {
                this._stepDown( (pages || 1) * this.options.page );
        }),
 
@@ -11485,7 +12860,7 @@ $.widget( "ui.spinner", {
                if ( !arguments.length ) {
                        return this._parse( this.element.val() );
                }
-               modifier( this._value ).call( this, newVal );
+               spinner_modifier( this._value ).call( this, newVal );
        },
 
        widget: function() {
@@ -11493,24 +12868,21 @@ $.widget( "ui.spinner", {
        }
 });
 
-}( jQuery ) );
-(function( $, undefined ) {
 
-var tabId = 0,
-       rhash = /#.*$/;
-
-function getNextTabId() {
-       return ++tabId;
-}
+/*!
+ * jQuery UI Tabs 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tabs/
+ */
 
-function isLocal( anchor ) {
-       return anchor.hash.length > 1 &&
-               decodeURIComponent( anchor.href.replace( rhash, "" ) ) ===
-                       decodeURIComponent( location.href.replace( rhash, "" ) );
-}
 
-$.widget( "ui.tabs", {
-       version: "1.10.3",
+var tabs = $.widget( "ui.tabs", {
+       version: "1.11.3",
        delay: 300,
        options: {
                active: null,
@@ -11527,6 +12899,31 @@ $.widget( "ui.tabs", {
                load: null
        },
 
+       _isLocal: (function() {
+               var rhash = /#.*$/;
+
+               return function( anchor ) {
+                       var anchorUrl, locationUrl;
+
+                       // support: IE7
+                       // IE7 doesn't normalize the href property when set via script (#9317)
+                       anchor = anchor.cloneNode( false );
+
+                       anchorUrl = anchor.href.replace( rhash, "" );
+                       locationUrl = location.href.replace( rhash, "" );
+
+                       // decoding may throw an error if the URL isn't UTF-8 (#9518)
+                       try {
+                               anchorUrl = decodeURIComponent( anchorUrl );
+                       } catch ( error ) {}
+                       try {
+                               locationUrl = decodeURIComponent( locationUrl );
+                       } catch ( error ) {}
+
+                       return anchor.hash.length > 1 && anchorUrl === locationUrl;
+               };
+       })(),
+
        _create: function() {
                var that = this,
                        options = this.options;
@@ -11535,24 +12932,7 @@ $.widget( "ui.tabs", {
 
                this.element
                        .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
-                       .toggleClass( "ui-tabs-collapsible", options.collapsible )
-                       // Prevent users from focusing disabled tabs via click
-                       .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) {
-                               if ( $( this ).is( ".ui-state-disabled" ) ) {
-                                       event.preventDefault();
-                               }
-                       })
-                       // support: IE <9
-                       // Preventing the default action in mousedown doesn't prevent IE
-                       // from focusing the element, so if the anchor gets focused, blur.
-                       // We don't have to worry about focusing the previously focused
-                       // element since clicking on a non-focusable element should focus
-                       // the body anyway.
-                       .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
-                               if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
-                                       this.blur();
-                               }
-                       });
+                       .toggleClass( "ui-tabs-collapsible", options.collapsible );
 
                this._processTabs();
                options.active = this._initialActive();
@@ -11632,7 +13012,6 @@ $.widget( "ui.tabs", {
        },
 
        _tabKeydown: function( event ) {
-               /*jshint maxcomplexity:15*/
                var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
                        selectedIndex = this.tabs.index( focusedTab ),
                        goingForward = true;
@@ -11679,8 +13058,9 @@ $.widget( "ui.tabs", {
                clearTimeout( this.activating );
                selectedIndex = this._focusNextTab( selectedIndex, goingForward );
 
-               // Navigating with control key will prevent automatic activation
-               if ( !event.ctrlKey ) {
+               // Navigating with control/command key will prevent automatic activation
+               if ( !event.ctrlKey && !event.metaKey ) {
+
                        // Update aria-selected immediately so that AT think the tab is already selected.
                        // Otherwise AT may confuse the user by stating that they need to activate the tab,
                        // but the tab will already be activated by the time the announcement finishes.
@@ -11775,10 +13155,6 @@ $.widget( "ui.tabs", {
                }
        },
 
-       _tabId: function( tab ) {
-               return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId();
-       },
-
        _sanitizeSelector: function( hash ) {
                return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
        },
@@ -11825,12 +13201,12 @@ $.widget( "ui.tabs", {
 
                this.tabs.not( this.active ).attr({
                        "aria-selected": "false",
+                       "aria-expanded": "false",
                        tabIndex: -1
                });
                this.panels.not( this._getPanelForTab( this.active ) )
                        .hide()
                        .attr({
-                               "aria-expanded": "false",
                                "aria-hidden": "true"
                        });
 
@@ -11842,23 +13218,45 @@ $.widget( "ui.tabs", {
                                .addClass( "ui-tabs-active ui-state-active" )
                                .attr({
                                        "aria-selected": "true",
+                                       "aria-expanded": "true",
                                        tabIndex: 0
                                });
                        this._getPanelForTab( this.active )
                                .show()
                                .attr({
-                                       "aria-expanded": "true",
                                        "aria-hidden": "false"
                                });
                }
        },
 
        _processTabs: function() {
-               var that = this;
+               var that = this,
+                       prevTabs = this.tabs,
+                       prevAnchors = this.anchors,
+                       prevPanels = this.panels;
 
                this.tablist = this._getList()
                        .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
-                       .attr( "role", "tablist" );
+                       .attr( "role", "tablist" )
+
+                       // Prevent users from focusing disabled tabs via click
+                       .delegate( "> li", "mousedown" + this.eventNamespace, function( event ) {
+                               if ( $( this ).is( ".ui-state-disabled" ) ) {
+                                       event.preventDefault();
+                               }
+                       })
+
+                       // support: IE <9
+                       // Preventing the default action in mousedown doesn't prevent IE
+                       // from focusing the element, so if the anchor gets focused, blur.
+                       // We don't have to worry about focusing the previously focused
+                       // element since clicking on a non-focusable element should focus
+                       // the body anyway.
+                       .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+                               if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+                                       this.blur();
+                               }
+                       });
 
                this.tabs = this.tablist.find( "> li:has(a[href])" )
                        .addClass( "ui-state-default ui-corner-top" )
@@ -11885,12 +13283,15 @@ $.widget( "ui.tabs", {
                                originalAriaControls = tab.attr( "aria-controls" );
 
                        // inline tab
-                       if ( isLocal( anchor ) ) {
+                       if ( that._isLocal( anchor ) ) {
                                selector = anchor.hash;
+                               panelId = selector.substring( 1 );
                                panel = that.element.find( that._sanitizeSelector( selector ) );
                        // remote tab
                        } else {
-                               panelId = that._tabId( tab );
+                               // If the tab doesn't already have aria-controls,
+                               // generate an id by using a throw-away element
+                               panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
                                selector = "#" + panelId;
                                panel = that.element.find( selector );
                                if ( !panel.length ) {
@@ -11907,7 +13308,7 @@ $.widget( "ui.tabs", {
                                tab.data( "ui-tabs-aria-controls", originalAriaControls );
                        }
                        tab.attr({
-                               "aria-controls": selector.substring( 1 ),
+                               "aria-controls": panelId,
                                "aria-labelledby": anchorId
                        });
                        panel.attr( "aria-labelledby", anchorId );
@@ -11916,11 +13317,18 @@ $.widget( "ui.tabs", {
                this.panels
                        .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
                        .attr( "role", "tabpanel" );
+
+               // Avoid memory leaks (#10056)
+               if ( prevTabs ) {
+                       this._off( prevTabs.not( this.tabs ) );
+                       this._off( prevAnchors.not( this.anchors ) );
+                       this._off( prevPanels.not( this.panels ) );
+               }
        },
 
        // allow overriding how to find the list for rare usage scenarios (#7715)
        _getList: function() {
-               return this.element.find( "ol,ul" ).eq( 0 );
+               return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
        },
 
        _createPanel: function( id ) {
@@ -11956,11 +13364,7 @@ $.widget( "ui.tabs", {
        },
 
        _setupEvents: function( event ) {
-               var events = {
-                       click: function( event ) {
-                               event.preventDefault();
-                       }
-               };
+               var events = {};
                if ( event ) {
                        $.each( event.split(" "), function( index, eventName ) {
                                events[ eventName ] = "_eventHandler";
@@ -11968,6 +13372,12 @@ $.widget( "ui.tabs", {
                }
 
                this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+               // Always prevent the default action, even when disabled
+               this._on( true, this.anchors, {
+                       click: function( event ) {
+                               event.preventDefault();
+                       }
+               });
                this._on( this.anchors, events );
                this._on( this.tabs, { keydown: "_tabKeydown" } );
                this._on( this.panels, { keydown: "_panelKeydown" } );
@@ -12094,11 +13504,11 @@ $.widget( "ui.tabs", {
                        show();
                }
 
-               toHide.attr({
-                       "aria-expanded": "false",
-                       "aria-hidden": "true"
+               toHide.attr( "aria-hidden", "true" );
+               eventData.oldTab.attr({
+                       "aria-selected": "false",
+                       "aria-expanded": "false"
                });
-               eventData.oldTab.attr( "aria-selected", "false" );
                // If we're switching tabs, remove the old tab from the tab order.
                // If we're opening from collapsed state, remove the previous tab from the tab order.
                // If we're collapsing, then keep the collapsing tab in the tab order.
@@ -12111,12 +13521,10 @@ $.widget( "ui.tabs", {
                        .attr( "tabIndex", -1 );
                }
 
-               toShow.attr({
-                       "aria-expanded": "true",
-                       "aria-hidden": "false"
-               });
+               toShow.attr( "aria-hidden", "false" );
                eventData.newTab.attr({
                        "aria-selected": "true",
+                       "aria-expanded": "true",
                        tabIndex: 0
                });
        },
@@ -12173,6 +13581,8 @@ $.widget( "ui.tabs", {
                        .removeAttr( "tabIndex" )
                        .removeUniqueId();
 
+               this.tablist.unbind( this.eventNamespace );
+
                this.tabs.add( this.panels ).each(function() {
                        if ( $.data( this, "ui-tabs-destroy" ) ) {
                                $( this ).remove();
@@ -12267,7 +13677,7 @@ $.widget( "ui.tabs", {
                        };
 
                // not remote
-               if ( isLocal( anchor[ 0 ] ) ) {
+               if ( this._isLocal( anchor[ 0 ] ) ) {
                        return;
                }
 
@@ -12314,7 +13724,7 @@ $.widget( "ui.tabs", {
                        url: anchor.attr( "href" ),
                        beforeSend: function( jqXHR, settings ) {
                                return that._trigger( "beforeLoad", event,
-                                       $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) );
+                                       $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
                        }
                };
        },
@@ -12325,38 +13735,21 @@ $.widget( "ui.tabs", {
        }
 });
 
-})( jQuery );
-(function( $ ) {
-
-var increments = 0;
-
-function addDescribedBy( elem, id ) {
-       var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
-       describedby.push( id );
-       elem
-               .data( "ui-tooltip-id", id )
-               .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
-}
 
-function removeDescribedBy( elem ) {
-       var id = elem.data( "ui-tooltip-id" ),
-               describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
-               index = $.inArray( id, describedby );
-       if ( index !== -1 ) {
-               describedby.splice( index, 1 );
-       }
+/*!
+ * jQuery UI Tooltip 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ */
 
-       elem.removeData( "ui-tooltip-id" );
-       describedby = $.trim( describedby.join( " " ) );
-       if ( describedby ) {
-               elem.attr( "aria-describedby", describedby );
-       } else {
-               elem.removeAttr( "aria-describedby" );
-       }
-}
 
-$.widget( "ui.tooltip", {
-       version: "1.10.3",
+var tooltip = $.widget( "ui.tooltip", {
+       version: "1.11.3",
        options: {
                content: function() {
                        // support: IE<9, Opera in jQuery <1.7
@@ -12382,6 +13775,32 @@ $.widget( "ui.tooltip", {
                open: null
        },
 
+       _addDescribedBy: function( elem, id ) {
+               var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+               describedby.push( id );
+               elem
+                       .data( "ui-tooltip-id", id )
+                       .attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+       },
+
+       _removeDescribedBy: function( elem ) {
+               var id = elem.data( "ui-tooltip-id" ),
+                       describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+                       index = $.inArray( id, describedby );
+
+               if ( index !== -1 ) {
+                       describedby.splice( index, 1 );
+               }
+
+               elem.removeData( "ui-tooltip-id" );
+               describedby = $.trim( describedby.join( " " ) );
+               if ( describedby ) {
+                       elem.attr( "aria-describedby", describedby );
+               } else {
+                       elem.removeAttr( "aria-describedby" );
+               }
+       },
+
        _create: function() {
                this._on({
                        mouseover: "open",
@@ -12390,12 +13809,23 @@ $.widget( "ui.tooltip", {
 
                // IDs of generated tooltips, needed for destroy
                this.tooltips = {};
+
                // IDs of parent tooltips where we removed the title attribute
                this.parents = {};
 
                if ( this.options.disabled ) {
                        this._disable();
                }
+
+               // Append the aria-live region so tooltips announce correctly
+               this.liveRegion = $( "<div>" )
+                       .attr({
+                               role: "log",
+                               "aria-live": "assertive",
+                               "aria-relevant": "additions"
+                       })
+                       .addClass( "ui-helper-hidden-accessible" )
+                       .appendTo( this.document[ 0 ].body );
        },
 
        _setOption: function( key, value ) {
@@ -12411,8 +13841,8 @@ $.widget( "ui.tooltip", {
                this._super( key, value );
 
                if ( key === "content" ) {
-                       $.each( this.tooltips, function( id, element ) {
-                               that._updateContent( element );
+                       $.each( this.tooltips, function( id, tooltipData ) {
+                               that._updateContent( tooltipData.element );
                        });
                }
        },
@@ -12421,9 +13851,9 @@ $.widget( "ui.tooltip", {
                var that = this;
 
                // close open tooltips
-               $.each( this.tooltips, function( id, element ) {
+               $.each( this.tooltips, function( id, tooltipData ) {
                        var event = $.Event( "blur" );
-                       event.target = event.currentTarget = element[0];
+                       event.target = event.currentTarget = tooltipData.element[ 0 ];
                        that.close( event, true );
                });
 
@@ -12433,7 +13863,7 @@ $.widget( "ui.tooltip", {
                        if ( element.is( "[title]" ) ) {
                                element
                                        .data( "ui-tooltip-title", element.attr( "title" ) )
-                                       .attr( "title", "" );
+                                       .removeAttr( "title" );
                        }
                });
        },
@@ -12525,7 +13955,7 @@ $.widget( "ui.tooltip", {
        },
 
        _open: function( event, target, content ) {
-               var tooltip, events, delayedShow,
+               var tooltipData, tooltip, events, delayedShow, a11yContent,
                        positionOption = $.extend( {}, this.options.position );
 
                if ( !content ) {
@@ -12534,9 +13964,9 @@ $.widget( "ui.tooltip", {
 
                // Content can be updated multiple times. If the tooltip already
                // exists, then just update the content and bail.
-               tooltip = this._find( target );
-               if ( tooltip.length ) {
-                       tooltip.find( ".ui-tooltip-content" ).html( content );
+               tooltipData = this._find( target );
+               if ( tooltipData ) {
+                       tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
                        return;
                }
 
@@ -12555,10 +13985,23 @@ $.widget( "ui.tooltip", {
                        }
                }
 
-               tooltip = this._tooltip( target );
-               addDescribedBy( target, tooltip.attr( "id" ) );
+               tooltipData = this._tooltip( target );
+               tooltip = tooltipData.tooltip;
+               this._addDescribedBy( target, tooltip.attr( "id" ) );
                tooltip.find( ".ui-tooltip-content" ).html( content );
 
+               // Support: Voiceover on OS X, JAWS on IE <= 9
+               // JAWS announces deletions even when aria-relevant="additions"
+               // Voiceover will sometimes re-read the entire log region's contents from the beginning
+               this.liveRegion.children().hide();
+               if ( content.clone ) {
+                       a11yContent = content.clone();
+                       a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
+               } else {
+                       a11yContent = content;
+               }
+               $( "<div>" ).html( a11yContent ).appendTo( this.liveRegion );
+
                function position( event ) {
                        positionOption.of = event;
                        if ( tooltip.is( ":hidden" ) ) {
@@ -12602,11 +14045,17 @@ $.widget( "ui.tooltip", {
                                        fakeEvent.currentTarget = target[0];
                                        this.close( fakeEvent, true );
                                }
-                       },
-                       remove: function() {
-                               this._removeTooltip( tooltip );
                        }
                };
+
+               // Only bind remove handler for delegated targets. Non-delegated
+               // tooltips will handle this in destroy.
+               if ( target[ 0 ] !== this.element[ 0 ] ) {
+                       events.remove = function() {
+                               this._removeTooltip( tooltip );
+                       };
+               }
+
                if ( !event || event.type === "mouseover" ) {
                        events.mouseleave = "close";
                }
@@ -12617,13 +14066,21 @@ $.widget( "ui.tooltip", {
        },
 
        close: function( event ) {
-               var that = this,
+               var tooltip,
+                       that = this,
                        target = $( event ? event.currentTarget : this.element ),
-                       tooltip = this._find( target );
+                       tooltipData = this._find( target );
+
+               // The tooltip may already be closed
+               if ( !tooltipData ) {
+                       return;
+               }
+
+               tooltip = tooltipData.tooltip;
 
                // disabling closes the tooltip, so we need to track when we're closing
                // to avoid an infinite loop in case the tooltip becomes disabled on close
-               if ( this.closing ) {
+               if ( tooltipData.closing ) {
                        return;
                }
 
@@ -12631,12 +14088,14 @@ $.widget( "ui.tooltip", {
                clearInterval( this.delayedShow );
 
                // only set title if we had one before (see comment in _open())
-               if ( target.data( "ui-tooltip-title" ) ) {
+               // If the title attribute has changed since open(), don't restore
+               if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
                        target.attr( "title", target.data( "ui-tooltip-title" ) );
                }
 
-               removeDescribedBy( target );
+               this._removeDescribedBy( target );
 
+               tooltipData.hiding = true;
                tooltip.stop( true );
                this._hide( tooltip, this.options.hide, function() {
                        that._removeTooltip( $( this ) );
@@ -12644,8 +14103,9 @@ $.widget( "ui.tooltip", {
 
                target.removeData( "ui-tooltip-open" );
                this._off( target, "mouseleave focusout keyup" );
+
                // Remove 'remove' binding only on delegated targets
-               if ( target[0] !== this.element[0] ) {
+               if ( target[ 0 ] !== this.element[ 0 ] ) {
                        this._off( target, "remove" );
                }
                this._off( this.document, "mousemove" );
@@ -12657,31 +14117,35 @@ $.widget( "ui.tooltip", {
                        });
                }
 
-               this.closing = true;
+               tooltipData.closing = true;
                this._trigger( "close", event, { tooltip: tooltip } );
-               this.closing = false;
+               if ( !tooltipData.hiding ) {
+                       tooltipData.closing = false;
+               }
        },
 
        _tooltip: function( element ) {
-               var id = "ui-tooltip-" + increments++,
-                       tooltip = $( "<div>" )
-                               .attr({
-                                       id: id,
-                                       role: "tooltip"
-                               })
+               var tooltip = $( "<div>" )
+                               .attr( "role", "tooltip" )
                                .addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
-                                       ( this.options.tooltipClass || "" ) );
+                                       ( this.options.tooltipClass || "" ) ),
+                       id = tooltip.uniqueId().attr( "id" );
+
                $( "<div>" )
                        .addClass( "ui-tooltip-content" )
                        .appendTo( tooltip );
+
                tooltip.appendTo( this.document[0].body );
-               this.tooltips[ id ] = element;
-               return tooltip;
+
+               return this.tooltips[ id ] = {
+                       element: element,
+                       tooltip: tooltip
+               };
        },
 
        _find: function( target ) {
                var id = target.data( "ui-tooltip-id" );
-               return id ? $( "#" + id ) : $();
+               return id ? this.tooltips[ id ] : null;
        },
 
        _removeTooltip: function( tooltip ) {
@@ -12693,10 +14157,11 @@ $.widget( "ui.tooltip", {
                var that = this;
 
                // close open tooltips
-               $.each( this.tooltips, function( id, element ) {
+               $.each( this.tooltips, function( id, tooltipData ) {
                        // Delegate to close method to handle common cleanup
-                       var event = $.Event( "blur" );
-                       event.target = event.currentTarget = element[0];
+                       var event = $.Event( "blur" ),
+                               element = tooltipData.element;
+                       event.target = event.currentTarget = element[ 0 ];
                        that.close( event, true );
 
                        // Remove immediately; destroying an open tooltip doesn't use the
@@ -12705,17 +14170,35 @@ $.widget( "ui.tooltip", {
 
                        // Restore the title
                        if ( element.data( "ui-tooltip-title" ) ) {
-                               element.attr( "title", element.data( "ui-tooltip-title" ) );
+                               // If the title attribute has changed since open(), don't restore
+                               if ( !element.attr( "title" ) ) {
+                                       element.attr( "title", element.data( "ui-tooltip-title" ) );
+                               }
                                element.removeData( "ui-tooltip-title" );
                        }
                });
+               this.liveRegion.remove();
        }
 });
 
-}( jQuery ) );
-(function($, undefined) {
 
-var dataSpace = "ui-effects-";
+/*!
+ * jQuery UI Effects 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/effects-core/
+ */
+
+
+var dataSpace = "ui-effects-",
+
+       // Create a local jQuery because jQuery Color relies on it and the
+       // global may not exist with AMD and a custom build (#10199)
+       jQuery = $;
 
 $.effects = {
        effect: {}
@@ -12725,7 +14208,7 @@ $.effects = {
  * jQuery Color Animations v2.1.2
  * https://github.com/jquery/jquery-color
  *
- * Copyright 2013 jQuery Foundation and other contributors
+ * Copyright 2014 jQuery Foundation and other contributors
  * Released under the MIT license.
  * http://jquery.org/license
  *
@@ -12738,7 +14221,7 @@ $.effects = {
        // plusequals test for += 100 -= 100
        rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
        // a set of RE's that can match strings and generate color tuples.
-       stringParsers = [{
+       stringParsers = [ {
                        re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
                        parse: function( execResult ) {
                                return [
@@ -12789,7 +14272,7 @@ $.effects = {
                                        execResult[ 4 ]
                                ];
                        }
-               }],
+               } ],
 
        // jQuery.Color( )
        color = jQuery.Color = function( color, green, blue, alpha ) {
@@ -13148,18 +14631,18 @@ color.fn.parse.prototype = color.fn;
 function hue2rgb( p, q, h ) {
        h = ( h + 1 ) % 1;
        if ( h * 6 < 1 ) {
-               return p + (q - p) * h * 6;
+               return p + ( q - p ) * h * 6;
        }
        if ( h * 2 < 1) {
                return q;
        }
        if ( h * 3 < 2 ) {
-               return p + (q - p) * ((2/3) - h) * 6;
+               return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
        }
        return p;
 }
 
-spaces.hsla.to = function ( rgba ) {
+spaces.hsla.to = function( rgba ) {
        if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
                return [ null, null, null, rgba[ 3 ] ];
        }
@@ -13196,7 +14679,7 @@ spaces.hsla.to = function ( rgba ) {
        return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
 };
 
-spaces.hsla.from = function ( hsla ) {
+spaces.hsla.from = function( hsla ) {
        if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
                return [ null, null, null, hsla[ 3 ] ];
        }
@@ -13215,7 +14698,6 @@ spaces.hsla.from = function ( hsla ) {
        ];
 };
 
-
 each( spaces, function( spaceName, space ) {
        var props = space.props,
                cache = space.cache,
@@ -13325,7 +14807,7 @@ color.hook = function( hook ) {
                                }
                                try {
                                        elem.style[ hook ] = value;
-                               } catch( e ) {
+                               } catch ( e ) {
                                        // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
                                }
                        }
@@ -13385,7 +14867,6 @@ colors = jQuery.Color.names = {
 
 })( jQuery );
 
-
 /******************************************************************************/
 /****************************** CLASS ANIMATIONS ******************************/
 /******************************************************************************/
@@ -13440,7 +14921,6 @@ function getElementStyles( elem ) {
        return styles;
 }
 
-
 function styleDifference( oldStyle, newStyle ) {
        var diff = {},
                name, value;
@@ -13598,11 +15078,11 @@ $.fn.extend({
 (function() {
 
 $.extend( $.effects, {
-       version: "1.10.3",
+       version: "1.11.3",
 
        // Saves a set of properties in a data storage
        save: function( element, set ) {
-               for( var i=0; i < set.length; i++ ) {
+               for ( var i = 0; i < set.length; i++ ) {
                        if ( set[ i ] !== null ) {
                                element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
                        }
@@ -13612,7 +15092,7 @@ $.extend( $.effects, {
        // Restores a set of previously saved properties from a data storage
        restore: function( element, set ) {
                var val, i;
-               for( i=0; i < set.length; i++ ) {
+               for ( i = 0; i < set.length; i++ ) {
                        if ( set[ i ] !== null ) {
                                val = element.data( dataSpace + set[ i ] );
                                // support: jQuery 1.6.2
@@ -13692,7 +15172,7 @@ $.extend( $.effects, {
                // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
                try {
                        active.id;
-               } catch( e ) {
+               } catch ( e ) {
                        active = document.body;
                }
 
@@ -13745,7 +15225,6 @@ $.extend( $.effects, {
                        }
                }
 
-
                return element;
        },
 
@@ -13955,10 +15434,10 @@ $.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
 });
 
 $.extend( baseEasings, {
-       Sine: function ( p ) {
+       Sine: function( p ) {
                return 1 - Math.cos( p * Math.PI / 2 );
        },
-       Circ: function ( p ) {
+       Circ: function( p ) {
                return 1 - Math.sqrt( 1 - p * p );
        },
        Elastic: function( p ) {
@@ -13968,7 +15447,7 @@ $.extend( baseEasings, {
        Back: function( p ) {
                return p * p * ( 3 * p - 2 );
        },
-       Bounce: function ( p ) {
+       Bounce: function( p ) {
                var pow2,
                        bounce = 4;
 
@@ -13991,15 +15470,26 @@ $.each( baseEasings, function( name, easeIn ) {
 
 })();
 
-})(jQuery);
-(function( $, undefined ) {
+var effect = $.effects;
+
 
-var rvertical = /up|down|vertical/,
-       rpositivemotion = /up|left|vertical|horizontal/;
+/*!
+ * jQuery UI Effects Blind 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/blind-effect/
+ */
 
-$.effects.effect.blind = function( o, done ) {
+
+var effectBlind = $.effects.effect.blind = function( o, done ) {
        // Create element
        var el = $( this ),
+               rvertical = /up|down|vertical/,
+               rpositivemotion = /up|left|vertical|horizontal/,
                props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
                mode = $.effects.setMode( el, o.mode || "hide" ),
                direction = o.direction || "up",
@@ -14038,7 +15528,7 @@ $.effects.effect.blind = function( o, done ) {
        // start at 0 if we are showing
        if ( show ) {
                wrapper.css( ref, 0 );
-               if ( ! motion ) {
+               if ( !motion ) {
                        wrapper.css( ref2, margin + distance );
                }
        }
@@ -14057,13 +15547,22 @@ $.effects.effect.blind = function( o, done ) {
                        done();
                }
        });
-
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.bounce = function( o, done ) {
+/*!
+ * jQuery UI Effects Bounce 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/bounce-effect/
+ */
+
+
+var effectBounce = $.effects.effect.bounce = function( o, done ) {
        var el = $( this ),
                props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
 
@@ -14160,10 +15659,20 @@ $.effects.effect.bounce = function( o, done ) {
 
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.clip = function( o, done ) {
+/*!
+ * jQuery UI Effects Clip 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/clip-effect/
+ */
+
+
+var effectClip = $.effects.effect.clip = function( o, done ) {
        // Create element
        var el = $( this ),
                props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
@@ -14214,10 +15723,20 @@ $.effects.effect.clip = function( o, done ) {
 
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.drop = function( o, done ) {
+/*!
+ * jQuery UI Effects Drop 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/drop-effect/
+ */
+
+
+var effectDrop = $.effects.effect.drop = function( o, done ) {
 
        var el = $( this ),
                props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
@@ -14236,7 +15755,7 @@ $.effects.effect.drop = function( o, done ) {
        el.show();
        $.effects.createWrapper( el );
 
-       distance = o.distance || el[ ref === "top" ? "outerHeight": "outerWidth" ]( true ) / 2;
+       distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
 
        if ( show ) {
                el
@@ -14266,10 +15785,20 @@ $.effects.effect.drop = function( o, done ) {
        });
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.explode = function( o, done ) {
+/*!
+ * jQuery UI Effects Explode 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/explode-effect/
+ */
+
+
+var effectExplode = $.effects.effect.explode = function( o, done ) {
 
        var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
                cells = rows,
@@ -14297,11 +15826,11 @@ $.effects.effect.explode = function( o, done ) {
        }
 
        // clone the element for each row and cell.
-       for( i = 0; i < rows ; i++ ) { // ===>
+       for ( i = 0; i < rows ; i++ ) { // ===>
                top = offset.top + i * height;
                my = i - ( rows - 1 ) / 2 ;
 
-               for( j = 0; j < cells ; j++ ) { // |||
+               for ( j = 0; j < cells ; j++ ) { // |||
                        left = offset.left + j * width;
                        mx = j - ( cells - 1 ) / 2 ;
 
@@ -14350,10 +15879,20 @@ $.effects.effect.explode = function( o, done ) {
        }
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.fade = function( o, done ) {
+/*!
+ * jQuery UI Effects Fade 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fade-effect/
+ */
+
+
+var effectFade = $.effects.effect.fade = function( o, done ) {
        var el = $( this ),
                mode = $.effects.setMode( el, o.mode || "toggle" );
 
@@ -14367,10 +15906,20 @@ $.effects.effect.fade = function( o, done ) {
        });
 };
 
-})( jQuery );
-(function( $, undefined ) {
 
-$.effects.effect.fold = function( o, done ) {
+/*!
+ * jQuery UI Effects Fold 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fold-effect/
+ */
+
+
+var effectFold = $.effects.effect.fold = function( o, done ) {
 
        // Create element
        var el = $( this ),
@@ -14430,192 +15979,67 @@ $.effects.effect.fold = function( o, done ) {
 
 };
 
-})(jQuery);
-(function( $, undefined ) {
-
-$.effects.effect.highlight = function( o, done ) {
-       var elem = $( this ),
-               props = [ "backgroundImage", "backgroundColor", "opacity" ],
-               mode = $.effects.setMode( elem, o.mode || "show" ),
-               animation = {
-                       backgroundColor: elem.css( "backgroundColor" )
-               };
-
-       if (mode === "hide") {
-               animation.opacity = 0;
-       }
-
-       $.effects.save( elem, props );
-
-       elem
-               .show()
-               .css({
-                       backgroundImage: "none",
-                       backgroundColor: o.color || "#ffff99"
-               })
-               .animate( animation, {
-                       queue: false,
-                       duration: o.duration,
-                       easing: o.easing,
-                       complete: function() {
-                               if ( mode === "hide" ) {
-                                       elem.hide();
-                               }
-                               $.effects.restore( elem, props );
-                               done();
-                       }
-               });
-};
-
-})(jQuery);
-(function( $, undefined ) {
-
-$.effects.effect.pulsate = function( o, done ) {
-       var elem = $( this ),
-               mode = $.effects.setMode( elem, o.mode || "show" ),
-               show = mode === "show",
-               hide = mode === "hide",
-               showhide = ( show || mode === "hide" ),
-
-               // showing or hiding leaves of the "last" animation
-               anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
-               duration = o.duration / anims,
-               animateTo = 0,
-               queue = elem.queue(),
-               queuelen = queue.length,
-               i;
-
-       if ( show || !elem.is(":visible")) {
-               elem.css( "opacity", 0 ).show();
-               animateTo = 1;
-       }
-
-       // anims - 1 opacity "toggles"
-       for ( i = 1; i < anims; i++ ) {
-               elem.animate({
-                       opacity: animateTo
-               }, duration, o.easing );
-               animateTo = 1 - animateTo;
-       }
-
-       elem.animate({
-               opacity: animateTo
-       }, duration, o.easing);
-
-       elem.queue(function() {
-               if ( hide ) {
-                       elem.hide();
-               }
-               done();
-       });
-
-       // We just queued up "anims" animations, we need to put them next in the queue
-       if ( queuelen > 1 ) {
-               queue.splice.apply( queue,
-                       [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
-       }
-       elem.dequeue();
-};
-
-})(jQuery);
-(function( $, undefined ) {
-
-$.effects.effect.puff = function( o, done ) {
-       var elem = $( this ),
-               mode = $.effects.setMode( elem, o.mode || "hide" ),
-               hide = mode === "hide",
-               percent = parseInt( o.percent, 10 ) || 150,
-               factor = percent / 100,
-               original = {
-                       height: elem.height(),
-                       width: elem.width(),
-                       outerHeight: elem.outerHeight(),
-                       outerWidth: elem.outerWidth()
-               };
-
-       $.extend( o, {
-               effect: "scale",
-               queue: false,
-               fade: true,
-               mode: mode,
-               complete: done,
-               percent: hide ? percent : 100,
-               from: hide ?
-                       original :
-                       {
-                               height: original.height * factor,
-                               width: original.width * factor,
-                               outerHeight: original.outerHeight * factor,
-                               outerWidth: original.outerWidth * factor
-                       }
-       });
-
-       elem.effect( o );
-};
-
-$.effects.effect.scale = function( o, done ) {
-
-       // Create element
-       var el = $( this ),
-               options = $.extend( true, {}, o ),
-               mode = $.effects.setMode( el, o.mode || "effect" ),
-               percent = parseInt( o.percent, 10 ) ||
-                       ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
-               direction = o.direction || "both",
-               origin = o.origin,
-               original = {
-                       height: el.height(),
-                       width: el.width(),
-                       outerHeight: el.outerHeight(),
-                       outerWidth: el.outerWidth()
-               },
-               factor = {
-                       y: direction !== "horizontal" ? (percent / 100) : 1,
-                       x: direction !== "vertical" ? (percent / 100) : 1
-               };
 
-       // We are going to pass this effect to the size effect:
-       options.effect = "size";
-       options.queue = false;
-       options.complete = done;
+/*!
+ * jQuery UI Effects Highlight 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/highlight-effect/
+ */
 
-       // Set default origin and restore for show/hide
-       if ( mode !== "effect" ) {
-               options.origin = origin || ["middle","center"];
-               options.restore = true;
-       }
 
-       options.from = o.from || ( mode === "show" ? {
-               height: 0,
-               width: 0,
-               outerHeight: 0,
-               outerWidth: 0
-       } : original );
-       options.to = {
-               height: original.height * factor.y,
-               width: original.width * factor.x,
-               outerHeight: original.outerHeight * factor.y,
-               outerWidth: original.outerWidth * factor.x
-       };
+var effectHighlight = $.effects.effect.highlight = function( o, done ) {
+       var elem = $( this ),
+               props = [ "backgroundImage", "backgroundColor", "opacity" ],
+               mode = $.effects.setMode( elem, o.mode || "show" ),
+               animation = {
+                       backgroundColor: elem.css( "backgroundColor" )
+               };
 
-       // Fade option to support puff
-       if ( options.fade ) {
-               if ( mode === "show" ) {
-                       options.from.opacity = 0;
-                       options.to.opacity = 1;
-               }
-               if ( mode === "hide" ) {
-                       options.from.opacity = 1;
-                       options.to.opacity = 0;
-               }
+       if (mode === "hide") {
+               animation.opacity = 0;
        }
 
-       // Animate
-       el.effect( options );
+       $.effects.save( elem, props );
 
+       elem
+               .show()
+               .css({
+                       backgroundImage: "none",
+                       backgroundColor: o.color || "#ffff99"
+               })
+               .animate( animation, {
+                       queue: false,
+                       duration: o.duration,
+                       easing: o.easing,
+                       complete: function() {
+                               if ( mode === "hide" ) {
+                                       elem.hide();
+                               }
+                               $.effects.restore( elem, props );
+                               done();
+                       }
+               });
 };
 
-$.effects.effect.size = function( o, done ) {
+
+/*!
+ * jQuery UI Effects Size 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/size-effect/
+ */
+
+
+var effectSize = $.effects.effect.size = function( o, done ) {
 
        // Create element
        var original, baseline, factor,
@@ -14727,7 +16151,7 @@ $.effects.effect.size = function( o, done ) {
                hProps = hProps.concat([ "marginLeft", "marginRight" ]);
                props2 = props0.concat(vProps).concat(hProps);
 
-               el.find( "*[width]" ).each( function(){
+               el.find( "*[width]" ).each( function() {
                        var child = $( this ),
                                c_original = {
                                        height: child.height(),
@@ -14785,7 +16209,7 @@ $.effects.effect.size = function( o, done ) {
                        if ( el.to.opacity === 0 ) {
                                el.css( "opacity", el.from.opacity );
                        }
-                       if( mode === "hide" ) {
+                       if ( mode === "hide" ) {
                                el.hide();
                        }
                        $.effects.restore( el, props );
@@ -14822,10 +16246,201 @@ $.effects.effect.size = function( o, done ) {
 
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.shake = function( o, done ) {
+/*!
+ * jQuery UI Effects Scale 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/scale-effect/
+ */
+
+
+var effectScale = $.effects.effect.scale = function( o, done ) {
+
+       // Create element
+       var el = $( this ),
+               options = $.extend( true, {}, o ),
+               mode = $.effects.setMode( el, o.mode || "effect" ),
+               percent = parseInt( o.percent, 10 ) ||
+                       ( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+               direction = o.direction || "both",
+               origin = o.origin,
+               original = {
+                       height: el.height(),
+                       width: el.width(),
+                       outerHeight: el.outerHeight(),
+                       outerWidth: el.outerWidth()
+               },
+               factor = {
+                       y: direction !== "horizontal" ? (percent / 100) : 1,
+                       x: direction !== "vertical" ? (percent / 100) : 1
+               };
+
+       // We are going to pass this effect to the size effect:
+       options.effect = "size";
+       options.queue = false;
+       options.complete = done;
+
+       // Set default origin and restore for show/hide
+       if ( mode !== "effect" ) {
+               options.origin = origin || [ "middle", "center" ];
+               options.restore = true;
+       }
+
+       options.from = o.from || ( mode === "show" ? {
+               height: 0,
+               width: 0,
+               outerHeight: 0,
+               outerWidth: 0
+       } : original );
+       options.to = {
+               height: original.height * factor.y,
+               width: original.width * factor.x,
+               outerHeight: original.outerHeight * factor.y,
+               outerWidth: original.outerWidth * factor.x
+       };
+
+       // Fade option to support puff
+       if ( options.fade ) {
+               if ( mode === "show" ) {
+                       options.from.opacity = 0;
+                       options.to.opacity = 1;
+               }
+               if ( mode === "hide" ) {
+                       options.from.opacity = 1;
+                       options.to.opacity = 0;
+               }
+       }
+
+       // Animate
+       el.effect( options );
+
+};
+
+
+/*!
+ * jQuery UI Effects Puff 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/puff-effect/
+ */
+
+
+var effectPuff = $.effects.effect.puff = function( o, done ) {
+       var elem = $( this ),
+               mode = $.effects.setMode( elem, o.mode || "hide" ),
+               hide = mode === "hide",
+               percent = parseInt( o.percent, 10 ) || 150,
+               factor = percent / 100,
+               original = {
+                       height: elem.height(),
+                       width: elem.width(),
+                       outerHeight: elem.outerHeight(),
+                       outerWidth: elem.outerWidth()
+               };
+
+       $.extend( o, {
+               effect: "scale",
+               queue: false,
+               fade: true,
+               mode: mode,
+               complete: done,
+               percent: hide ? percent : 100,
+               from: hide ?
+                       original :
+                       {
+                               height: original.height * factor,
+                               width: original.width * factor,
+                               outerHeight: original.outerHeight * factor,
+                               outerWidth: original.outerWidth * factor
+                       }
+       });
+
+       elem.effect( o );
+};
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/pulsate-effect/
+ */
+
+
+var effectPulsate = $.effects.effect.pulsate = function( o, done ) {
+       var elem = $( this ),
+               mode = $.effects.setMode( elem, o.mode || "show" ),
+               show = mode === "show",
+               hide = mode === "hide",
+               showhide = ( show || mode === "hide" ),
+
+               // showing or hiding leaves of the "last" animation
+               anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+               duration = o.duration / anims,
+               animateTo = 0,
+               queue = elem.queue(),
+               queuelen = queue.length,
+               i;
+
+       if ( show || !elem.is(":visible")) {
+               elem.css( "opacity", 0 ).show();
+               animateTo = 1;
+       }
+
+       // anims - 1 opacity "toggles"
+       for ( i = 1; i < anims; i++ ) {
+               elem.animate({
+                       opacity: animateTo
+               }, duration, o.easing );
+               animateTo = 1 - animateTo;
+       }
+
+       elem.animate({
+               opacity: animateTo
+       }, duration, o.easing);
+
+       elem.queue(function() {
+               if ( hide ) {
+                       elem.hide();
+               }
+               done();
+       });
+
+       // We just queued up "anims" animations, we need to put them next in the queue
+       if ( queuelen > 1 ) {
+               queue.splice.apply( queue,
+                       [ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+       }
+       elem.dequeue();
+};
+
+
+/*!
+ * jQuery UI Effects Shake 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/shake-effect/
+ */
+
+
+var effectShake = $.effects.effect.shake = function( o, done ) {
 
        var el = $( this ),
                props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
@@ -14834,7 +16449,7 @@ $.effects.effect.shake = function( o, done ) {
                distance = o.distance || 20,
                times = o.times || 3,
                anims = times * 2 + 1,
-               speed = Math.round(o.duration/anims),
+               speed = Math.round( o.duration / anims ),
                ref = (direction === "up" || direction === "down") ? "top" : "left",
                positiveMotion = (direction === "up" || direction === "left"),
                animation = {},
@@ -14883,10 +16498,20 @@ $.effects.effect.shake = function( o, done ) {
 
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.slide = function( o, done ) {
+/*!
+ * jQuery UI Effects Slide 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slide-effect/
+ */
+
+
+var effectSlide = $.effects.effect.slide = function( o, done ) {
 
        // Create element
        var el = $( this ),
@@ -14934,10 +16559,20 @@ $.effects.effect.slide = function( o, done ) {
        });
 };
 
-})(jQuery);
-(function( $, undefined ) {
 
-$.effects.effect.transfer = function( o, done ) {
+/*!
+ * jQuery UI Effects Transfer 1.11.3
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/transfer-effect/
+ */
+
+
+var effectTransfer = $.effects.effect.transfer = function( o, done ) {
        var elem = $( this ),
                target = $( o.to ),
                targetFixed = target.css( "position" ) === "fixed",
@@ -14946,8 +16581,8 @@ $.effects.effect.transfer = function( o, done ) {
                fixLeft = targetFixed ? body.scrollLeft() : 0,
                endPosition = target.offset(),
                animation = {
-                       top: endPosition.top - fixTop ,
-                       left: endPosition.left - fixLeft ,
+                       top: endPosition.top - fixTop,
+                       left: endPosition.left - fixLeft,
                        height: target.innerHeight(),
                        width: target.innerWidth()
                },
@@ -14956,8 +16591,8 @@ $.effects.effect.transfer = function( o, done ) {
                        .appendTo( document.body )
                        .addClass( o.className )
                        .css({
-                               top: startPosition.top - fixTop ,
-                               left: startPosition.left - fixLeft ,
+                               top: startPosition.top - fixTop,
+                               left: startPosition.left - fixLeft,
                                height: elem.innerHeight(),
                                width: elem.innerWidth(),
                                position: targetFixed ? "fixed" : "absolute"
@@ -14968,4 +16603,6 @@ $.effects.effect.transfer = function( o, done ) {
                        });
 };
 
-})(jQuery);
+
+
+}));
\ No newline at end of file