From 388072c279cfb2b86931cd10013a60e9bba7ea3a Mon Sep 17 00:00:00 2001
From: Chris Gross <gross.364@osu.edu>
Date: Mon, 26 Oct 2015 14:18:41 -0400
Subject: [PATCH] daily build

---
 profiles/wcm_base/CHANGELOG.txt               |    7 +
 .../ctools}/PATCHES.txt                       |    2 +-
 .../relationships/entity_from_field.inc       |    2 +-
 .../wcm_base/modules/contrib/date/.gitignore  |    4 +
 .../contrib/date/date.devel_generate.inc      |   12 +-
 .../modules/contrib/date/date.field.inc       |   35 +-
 .../wcm_base/modules/contrib/date/date.info   |    8 +-
 .../modules/contrib/date/date.install         |   26 +-
 .../wcm_base/modules/contrib/date/date.js     |    4 +-
 .../modules/contrib/date/date.migrate.inc     |   16 +-
 .../wcm_base/modules/contrib/date/date.module |  114 +-
 .../wcm_base/modules/contrib/date/date.theme  |   89 +-
 .../modules/contrib/date/date_admin.inc       |   68 +-
 .../date/date_all_day/date_all_day.info       |    6 +-
 .../date/date_all_day/date_all_day.module     |  114 +-
 .../modules/contrib/date/date_api/date.css    |   14 +-
 .../contrib/date/date_api/date_api.admin.inc  |  212 +-
 .../contrib/date/date_api/date_api.info       |    6 +-
 .../contrib/date/date_api/date_api.install    |    7 +-
 .../contrib/date/date_api/date_api.module     |  286 +-
 .../date/date_api/date_api_elements.inc       |   75 +-
 .../contrib/date/date_api/date_api_ical.inc   |   88 +-
 .../contrib/date/date_api/date_api_sql.inc    |  105 +-
 .../contrib/date/date_api/theme/theme.inc     |    9 +-
 .../date/date_context/date_context.info       |    6 +-
 .../date/date_context/date_context.module     |   10 +-
 .../plugins/date_context_date_condition.inc   |   36 +-
 .../modules/contrib/date/date_elements.inc    |   53 +-
 .../date/date_migrate/date_migrate.info       |    6 +-
 .../date_migrate_example.info                 |    6 +-
 .../date_migrate_example.migrate.inc          |   42 +-
 .../contrib/date/date_popup/date_popup.info   |    6 +-
 .../date/date_popup/date_popup.install        |    2 +
 .../contrib/date/date_popup/date_popup.js     |  111 +-
 .../contrib/date/date_popup/date_popup.module |  293 +-
 .../date/date_popup/jquery.timeentry.pack.js  |    9 +-
 .../modules/contrib/date/date_repeat.inc      |    3 +-
 .../contrib/date/date_repeat/date_repeat.info |    6 +-
 .../date/date_repeat/date_repeat.install      |   18 -
 .../date/date_repeat/date_repeat.module       |  104 +-
 .../date/date_repeat/date_repeat_calc.inc     |   93 +-
 .../date/date_repeat/date_repeat_form.inc     |  311 +-
 .../date_repeat_field.devel_generate.inc      |   17 +-
 .../date_repeat_field/date_repeat_field.info  |    6 +-
 .../date_repeat_field.module                  |   69 +-
 .../date_tools/date_tools.change_type.inc     |   19 +-
 .../contrib/date/date_tools/date_tools.info   |    6 +-
 .../contrib/date/date_tools/date_tools.module |    9 +-
 .../date/date_tools/date_tools.wizard.inc     |   59 +-
 .../contrib/date/date_views/date_views.info   |    6 +-
 .../date/date_views/date_views.install        |   24 +
 .../contrib/date/date_views/date_views.module |  128 +-
 .../date_plugin_display_attachment.inc        |    3 +-
 .../date_views/includes/date_views.views.inc  |   40 +-
 .../includes/date_views_argument_handler.inc  |    5 +-
 .../date_views_argument_handler_simple.inc    |  110 +-
 .../date_views/includes/date_views_fields.inc |   20 +-
 .../includes/date_views_filter_handler.inc    |    8 +-
 .../date_views_filter_handler_simple.inc      |   14 +-
 .../includes/date_views_plugin_pager.inc      |  231 +-
 .../date_views/theme/date-views-pager.tpl.php |   14 +-
 .../contrib/date/date_views/theme/theme.inc   |   73 +-
 .../modules/contrib/date/tests/date_api.test  |   30 +-
 .../contrib/date/tests/date_field.test        |  119 +-
 .../contrib/date/tests/date_timezone.test     |  105 +
 .../contrib/date/tests/date_views_pager.test  |  129 +
 .../contrib/date/tests/date_views_popup.test  |  106 +
 .../{date => jquery_update}/PATCHES.txt       |    2 +-
 .../contrib/jquery_update/jquery_update.info  |    6 +-
 .../replace/misc/1.9/overlay-parent.js        |    8 +
 .../ui/external/globalize.culture.de-DE.js    |   81 -
 .../ui/external/globalize.culture.ja-JP.js    |  100 -
 .../replace/ui/external/globalize.js          | 1573 ------
 .../ui/external/jquery.bgiframe-2.1.2.js      |   39 -
 .../replace/ui/external/jquery.metadata.js    |  122 -
 .../replace/ui/external/jquery.mousewheel.js  |  101 -
 .../replace/ui/external/jshint.js             | 4835 -----------------
 .../replace/ui/external/qunit.css             |  244 -
 .../replace/ui/external/qunit.js              | 2152 --------
 .../replace/ui/ui/jquery.ui.accordion.js      |    2 +-
 .../ui/ui/minified/jquery.ui.accordion.min.js |    2 +-
 .../contrib/simplified_menu_admin/LICENSE.txt |  601 +-
 .../contrib/simplified_menu_admin/PATCHES.txt |    4 -
 .../simplified_menu_admin.info                |    6 +-
 .../contrib/wysiwyg/editors/ckeditor.inc      |   73 +-
 .../contrib/wysiwyg/editors/fckeditor.inc     |   54 +-
 .../wysiwyg/editors/js/ckeditor-3.0.js        |  105 +-
 .../wysiwyg/editors/js/fckeditor-2.6.js       |   38 +-
 .../wysiwyg/editors/js/fckeditor.config.js    |   20 +-
 .../contrib/wysiwyg/editors/js/openwysiwyg.js |    4 +
 .../contrib/wysiwyg/editors/js/tinymce-3.js   |   44 +-
 .../wysiwyg/editors/js/whizzywig-56.js        |   10 +-
 .../wysiwyg/editors/js/whizzywig-60.js        |   19 +-
 .../contrib/wysiwyg/editors/js/whizzywig.js   |   10 +-
 .../modules/contrib/wysiwyg/editors/js/yui.js |   74 +-
 .../contrib/wysiwyg/editors/jwysiwyg.inc      |   10 +-
 .../contrib/wysiwyg/editors/markitup.inc      |    4 +-
 .../contrib/wysiwyg/editors/nicedit.inc       |    4 +-
 .../contrib/wysiwyg/editors/openwysiwyg.inc   |    4 +-
 .../contrib/wysiwyg/editors/tinymce.inc       |   69 +-
 .../contrib/wysiwyg/editors/whizzywig.inc     |   12 +-
 .../contrib/wysiwyg/editors/wymeditor.inc     |    4 +-
 .../modules/contrib/wysiwyg/editors/yui.inc   |   39 +-
 .../contrib/wysiwyg/tests/wysiwyg_test.info   |    6 +-
 .../modules/contrib/wysiwyg/wysiwyg.api.php   |    6 +-
 .../modules/contrib/wysiwyg/wysiwyg.info      |    6 +-
 .../modules/contrib/wysiwyg/wysiwyg.js        |  573 +-
 .../modules/contrib/wysiwyg/wysiwyg.module    |  131 +-
 .../ocio_featured_slideshow.context.inc       |    2 +-
 ...ured_slideshow.features.field_instance.inc |   30 +-
 .../panopoly/panopoly_admin/CHANGELOG.txt     |    7 +
 .../panopoly_admin/panopoly_admin.info        |    6 +-
 .../panopoly_admin/panopoly_admin.make        |    5 +-
 .../panopoly_admin/panopoly_admin.module      |    4 +-
 .../panopoly/panopoly_core/CHANGELOG.txt      |   11 +
 .../panopoly/panopoly_core/panopoly_core.info |    6 +-
 .../panopoly/panopoly_core/panopoly_core.make |    5 +-
 .../panopoly/panopoly_magic/CHANGELOG.txt     |    4 +
 .../panopoly_magic/panopoly_magic.info        |    6 +-
 .../panopoly/panopoly_pages/CHANGELOG.txt     |    4 +
 .../panopoly_pages/panopoly_pages.info        |    6 +-
 .../panopoly/panopoly_search/CHANGELOG.txt    |    5 +
 .../panopoly_search.features.inc              |    4 +-
 .../panopoly_search/panopoly_search.info      |    7 +-
 .../panopoly_search/panopoly_search.install   |   21 +
 .../panopoly_search.pages_default.inc         |    4 +-
 .../panopoly_search.strongarm.inc             |    7 +
 .../content_types/search_box/search_box.inc   |    2 +-
 .../panopoly/panopoly_test/CHANGELOG.txt      |    4 +
 .../panopoly/panopoly_test/panopoly_test.info |    6 +-
 .../panopoly_test/tests/behat.travis.yml      |   20 -
 .../steps/panopoly_test_panels.behat.inc      |    5 +-
 .../panopoly/panopoly_theme/CHANGELOG.txt     |    5 +
 .../panopoly_theme/js/panopoly-accordion.js   |   20 +-
 .../panopoly_theme/panopoly_theme.info        |    6 +-
 .../styles/accordion/panopoly_accordion.inc   |   47 +-
 .../panopoly/panopoly_widgets/CHANGELOG.txt   |    4 +
 .../panopoly_widgets/panopoly_widgets.info    |    6 +-
 .../ocio-full/ocio-full-layout.tpl.php        |    3 +
 .../layouts/ocio-full/ocio-full.layout.inc    |    3 +-
 .../wcm_base/themes/ocio_omega_1/ocio_1.info  |    1 +
 .../ocio-default/ocio-default-layout.tpl.php  |   63 -
 .../ocio-default/ocio-default.layout.inc      |   24 -
 .../libraries/ocio-default/preview.png        |  Bin 2900 -> 0 bytes
 .../wcm_base/themes/ocio_omega_2/ocio_2.info  |    1 +
 profiles/wcm_base/wcm_base.make               |   24 +-
 146 files changed, 4081 insertions(+), 11278 deletions(-)
 rename profiles/wcm_base/modules/{panopoly/panopoly_widgets => contrib/ctools}/PATCHES.txt (61%)
 create mode 100644 profiles/wcm_base/modules/contrib/date/.gitignore
 mode change 100644 => 100755 profiles/wcm_base/modules/contrib/date/date.theme
 create mode 100644 profiles/wcm_base/modules/contrib/date/tests/date_views_pager.test
 create mode 100644 profiles/wcm_base/modules/contrib/date/tests/date_views_popup.test
 rename profiles/wcm_base/modules/contrib/{date => jquery_update}/PATCHES.txt (64%)
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.de-DE.js
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.ja-JP.js
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.js
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.metadata.js
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.mousewheel.js
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jshint.js
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.css
 delete mode 100644 profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.js
 delete mode 100644 profiles/wcm_base/modules/contrib/simplified_menu_admin/PATCHES.txt
 delete mode 100644 profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.travis.yml
 delete mode 100644 profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default-layout.tpl.php
 delete mode 100644 profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default.layout.inc
 delete mode 100644 profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/preview.png

diff --git a/profiles/wcm_base/CHANGELOG.txt b/profiles/wcm_base/CHANGELOG.txt
index 0ef5e909..a92657af 100644
--- a/profiles/wcm_base/CHANGELOG.txt
+++ b/profiles/wcm_base/CHANGELOG.txt
@@ -1,3 +1,10 @@
+WCM Base 7.x-1.x, 2015-10-26
+----------------------------
+- jQuery Update: Patched to size all accordion items independently.
+- Panopoly: Updated to 1.28
+- OCIO Omega Base: Standardized pre-footer in all themes.
+- OCIO Featured Slideshow: Render slideshow above panelizer content.
+
 WCM Base 7.x-1.x, 2015-10-22
 ----------------------------
 - OCIO Landing Page: Added create, delete and move permissions for Landing Page panes.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/PATCHES.txt b/profiles/wcm_base/modules/contrib/ctools/PATCHES.txt
similarity index 61%
rename from profiles/wcm_base/modules/panopoly/panopoly_widgets/PATCHES.txt
rename to profiles/wcm_base/modules/contrib/ctools/PATCHES.txt
index 08a2fb8c..e374fadc 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/PATCHES.txt
+++ b/profiles/wcm_base/modules/contrib/ctools/PATCHES.txt
@@ -1,4 +1,4 @@
 The following patches have been applied to this project:
-- http://drupal.org/files/issues/panopoly_widgets-media-browser-tabs-2528248-1.patch
+- https://www.drupal.org/files/issues/ctools-readd_access_callback_params-2209775-24.patch
 
 This file was automatically generated by Drush Make (http://drupal.org/project/drush).
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/ctools/plugins/relationships/entity_from_field.inc b/profiles/wcm_base/modules/contrib/ctools/plugins/relationships/entity_from_field.inc
index fdffc41c..a7f65919 100644
--- a/profiles/wcm_base/modules/contrib/ctools/plugins/relationships/entity_from_field.inc
+++ b/profiles/wcm_base/modules/contrib/ctools/plugins/relationships/entity_from_field.inc
@@ -185,7 +185,7 @@ function ctools_entity_from_field_context($context, $conf) {
         $loaded_to_entity = array_shift($loaded_to_entity);
 
         // Pass current user account and entity type to access callback.
-        if (isset($to_entity_info['access callback']) && function_exists($to_entity_info['access callback']) && !call_user_func($to_entity_info['access callback'], 'view', $loaded_to_entity)) {
+        if (isset($to_entity_info['access callback']) && function_exists($to_entity_info['access callback']) && !call_user_func($to_entity_info['access callback'], 'view', $loaded_to_entity, $account, $to_entity)) {
           return ctools_context_create_empty('entity:' . $to_entity, NULL);
         }
         else {
diff --git a/profiles/wcm_base/modules/contrib/date/.gitignore b/profiles/wcm_base/modules/contrib/date/.gitignore
new file mode 100644
index 00000000..a0238825
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/date/.gitignore
@@ -0,0 +1,4 @@
+*.patch
+*.diff
+.idea/
+.idea/*
diff --git a/profiles/wcm_base/modules/contrib/date/date.devel_generate.inc b/profiles/wcm_base/modules/contrib/date/date.devel_generate.inc
index 47de0847..6c61e23c 100644
--- a/profiles/wcm_base/modules/contrib/date/date.devel_generate.inc
+++ b/profiles/wcm_base/modules/contrib/date/date.devel_generate.inc
@@ -15,8 +15,14 @@ function date_devel_generate($entity, $field, $instance, $bundle) {
   $entity_field = array();
   if (isset($instance['widget']['settings']['year_range'])) {
     $split = explode(':', $instance['widget']['settings']['year_range']);
-    $back = str_replace('-', '', $split[0]);
-    $forward = str_replace('+', '', $split[1]);
+    // Determine how much to go back and forward depending on whether a relative
+    // number of years (with - or + sign) or an absolute year is given.
+    $back = strpos($split[0], '-') === 0
+      ? str_replace('-', '', $split[0])
+      : date_format(date_now(), 'Y') - $split[0];
+    $forward = strpos($split[1], '+') === 0
+      ? str_replace('+', '', $split[1])
+      : $split[1] - date_format(date_now(), 'Y');
   }
   else {
     $back = 2;
@@ -61,9 +67,11 @@ function date_devel_generate($entity, $field, $instance, $bundle) {
     case 'date':
       $format = DATE_FORMAT_ISO;
       break;
+
     case 'datestamp':
       $format = DATE_FORMAT_UNIX;
       break;
+
     case 'datetime':
       $format = DATE_FORMAT_DATETIME;
       break;
diff --git a/profiles/wcm_base/modules/contrib/date/date.field.inc b/profiles/wcm_base/modules/contrib/date/date.field.inc
index 46ea317b..fa311224 100644
--- a/profiles/wcm_base/modules/contrib/date/date.field.inc
+++ b/profiles/wcm_base/modules/contrib/date/date.field.inc
@@ -19,6 +19,7 @@ function date_field_formatter_info() {
         'multiple_from' => '',
         'multiple_to' => '',
         'fromto' => 'both',
+        'show_remaining_days' => FALSE,
       ),
     ),
     'format_interval' => array(
@@ -48,6 +49,7 @@ function date_field_formatter_settings_form($field, $instance, $view_mode, $form
     case 'format_interval':
       $form = date_interval_formatter_settings_form($field, $instance, $view_mode, $form, $form_state);
       break;
+
     default:
       $form = date_default_formatter_settings_form($field, $instance, $view_mode, $form, $form_state);
       break;
@@ -72,6 +74,7 @@ function date_field_formatter_settings_summary($field, $instance, $view_mode) {
     case 'format_interval':
       $summary = date_interval_formatter_settings_summary($field, $instance, $view_mode);
       break;
+
     default:
       $summary = date_default_formatter_settings_summary($field, $instance, $view_mode);
       break;
@@ -169,11 +172,16 @@ function date_field_formatter_view($entity_type, $entity, $field, $instance, $la
             $element[$delta] = array('#markup' => $item['value']);
           }
           else {
-            $element[$delta] = array('#markup' => t('!start-date to !end-date', array('!start-date' => $item['value'], '!end-date' => $item['value2'])));
+            $element[$delta] = array(
+              '#markup' => t('!start-date to !end-date', array(
+                '!start-date' => $item['value'],
+                '!end-date' => $item['value2']
+              )));
           }
         }
       }
       break;
+
     case 'format_interval':
       foreach ($items as $delta => $item) {
         if (!empty($entity->date_id) && !in_array($delta, $selected_deltas)) {
@@ -188,6 +196,7 @@ function date_field_formatter_view($entity_type, $entity, $field, $instance, $la
         }
       }
       break;
+
     default:
       foreach ($items as $delta => $item) {
         if (!empty($entity->date_id) && !in_array($delta, $selected_deltas)) {
@@ -198,6 +207,7 @@ function date_field_formatter_view($entity_type, $entity, $field, $instance, $la
           $variables['item'] = $item;
           $variables['dates'] = date_formatter_process($formatter, $entity_type, $entity, $field, $instance, $langcode, $item, $display);
           $variables['attributes'] = !empty($rdf_mapping) ? rdf_rdfa_attributes($rdf_mapping, $item['value']) : array();
+          $variables['show_remaining_days'] = $display['settings']['show_remaining_days'];
           $output = theme('date_display_combination', $variables);
           if (!empty($output)) {
             $element[$delta] = array('#markup' => $output);
@@ -231,10 +241,11 @@ function date_field_is_empty($item, $field) {
  * Implements hook_field_info().
  */
 function date_field_info() {
+  $granularity = array('year', 'month', 'day', 'hour', 'minute');
   $settings = array(
     'settings' => array(
       'todate' => '',
-      'granularity' => drupal_map_assoc(array('year', 'month', 'day', 'hour', 'minute')),
+      'granularity' => drupal_map_assoc($granularity),
       'tz_handling' => 'site',
       'timezone_db' => 'UTC',
     ),
@@ -250,26 +261,26 @@ function date_field_info() {
   );
   return array(
     'datetime' => array(
-      'label' => 'Date',
+      'label' => t('Date'),
       'description' => t('Store a date in the database as a datetime field, recommended for complete dates and times that may need timezone conversion.'),
       'default_widget' => 'date_select',
       'default_formatter' => 'date_default',
       'default_token_formatter' => 'date_plain',
-      ) + $settings,
+    ) + $settings,
     'date' => array(
-      'label' => 'Date (ISO format)',
+      'label' => t('Date (ISO format)'),
       'description' => t('Store a date in the database as an ISO date, recommended for historical or partial dates.'),
       'default_widget' => 'date_select',
       'default_formatter' => 'date_default',
       'default_token_formatter' => 'date_plain',
-      ) + $settings,
+    ) + $settings,
     'datestamp' => array(
-      'label' => 'Date (Unix timestamp)',
+      'label' => t('Date (Unix timestamp)'),
       'description' => t('Store a date in the database as a timestamp, deprecated format to support legacy data.'),
       'default_widget' => 'date_select',
       'default_formatter' => 'date_default',
       'default_token_formatter' => 'date_plain',
-      ) + $settings,
+    ) + $settings,
   );
 }
 
@@ -294,18 +305,18 @@ function date_field_widget_info() {
 
   $info = array(
     'date_select' => array(
-      'label' =>  t('Select list'),
+      'label' => t('Select list'),
       'field types' => array('date', 'datestamp', 'datetime'),
     ) + $settings,
     'date_text' => array(
-      'label' =>  t('Text field'),
+      'label' => t('Text field'),
       'field types' => array('date', 'datestamp', 'datetime'),
-     ) + $settings,
+    ) + $settings,
   );
 
   if (module_exists('date_popup')) {
     $info['date_popup'] = array(
-      'label' =>  t('Pop-up calendar'),
+      'label' => t('Pop-up calendar'),
       'field types' => array('date', 'datestamp', 'datetime'),
     ) + $settings;
   }
diff --git a/profiles/wcm_base/modules/contrib/date/date.info b/profiles/wcm_base/modules/contrib/date/date.info
index a1731de0..c6fdde55 100644
--- a/profiles/wcm_base/modules/contrib/date/date.info
+++ b/profiles/wcm_base/modules/contrib/date/date.info
@@ -11,10 +11,12 @@ files[] = tests/date_field.test
 files[] = tests/date_migrate.test
 files[] = tests/date_validation.test
 files[] = tests/date_timezone.test
+files[] = tests/date_views_pager.test
+files[] = tests/date_views_popup.test
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date.install b/profiles/wcm_base/modules/contrib/date/date.install
index 23fb07eb..9a9b6d35 100644
--- a/profiles/wcm_base/modules/contrib/date/date.install
+++ b/profiles/wcm_base/modules/contrib/date/date.install
@@ -19,6 +19,7 @@ function date_field_schema($field) {
         'views' => TRUE,
       );
       break;
+
     case 'datetime':
       $db_columns['value'] = array(
         'type' => 'datetime',
@@ -31,6 +32,7 @@ function date_field_schema($field) {
         'views' => TRUE,
       );
       break;
+
     default:
       $db_columns['value'] = array(
         'type' => 'varchar',
@@ -66,7 +68,12 @@ function date_field_schema($field) {
       'views' => FALSE,
     );
     if (!empty($field['settings']['todate'])) {
-      $db_columns['offset2'] = array('type' => 'int', 'not null' => FALSE, 'sortable' => TRUE, 'views' => FALSE);
+      $db_columns['offset2'] = array(
+        'type' => 'int',
+        'not null' => FALSE,
+        'sortable' => TRUE,
+        'views' => FALSE
+      );
     }
   }
   if (isset($field['settings']['repeat']) && $field['settings']['repeat'] == 1) {
@@ -88,8 +95,9 @@ function date_update_last_removed() {
 }
 
 /**
- * Get rid of the individual formatters for each format type,
- * these are now settings in the default formatter.
+ * Get rid of the individual formatters for each format type.
+ *
+ * These are now settings in the default formatter.
  */
 function date_update_7000() {
   $instances = field_info_instances();
@@ -115,8 +123,9 @@ function date_update_7000() {
 }
 
 /**
- * Get rid of the separate widgets for repeating dates. The code now handles
- * repeating dates correctly using the regular widgets.
+ * Get rid of the separate widgets for repeating dates.
+ *
+ * The code now handles repeating dates correctly using the regular widgets.
  */
 function date_update_7001() {
   $query = db_select('field_config_instance', 'fci', array('fetch' => PDO::FETCH_ASSOC));
@@ -127,7 +136,11 @@ function date_update_7001() {
 
   foreach ($results as $record) {
     $instance = unserialize($record['data']);
-    if (in_array($instance['widget']['type'], array('date_popup_repeat', 'date_text_repeat', 'date_select_repeat'))) {
+    if (in_array($instance['widget']['type'], array(
+        'date_popup_repeat',
+        'date_text_repeat',
+        'date_select_repeat'
+      ))) {
       $instance['widget']['type'] = str_replace('_repeat', '', $instance['widget']['type']);
       db_update('field_config_instance')
         ->fields(array(
@@ -191,4 +204,3 @@ function date_update_7004() {
   field_cache_clear();
   drupal_set_message(t('Date text widgets have been updated to use an increment of 1.'));
 }
-
diff --git a/profiles/wcm_base/modules/contrib/date/date.js b/profiles/wcm_base/modules/contrib/date/date.js
index 2e60175f..b58d3be6 100644
--- a/profiles/wcm_base/modules/contrib/date/date.js
+++ b/profiles/wcm_base/modules/contrib/date/date.js
@@ -27,7 +27,7 @@ Drupal.date.EndDateHandler = function (widget) {
   this.$widget = $(widget);
   this.$start = this.$widget.find('.form-type-date-select[class$=value]');
   this.$end = this.$widget.find('.form-type-date-select[class$=value2]');
-  if (this.$end.length == 0) {
+  if (this.$end.length === 0) {
     return;
   }
   this.initializeSelects();
@@ -68,7 +68,7 @@ Drupal.date.EndDateHandler.prototype.endDateIsBlank = function () {
   var id;
   for (id in this.selects) {
     if (this.selects.hasOwnProperty(id)) {
-      if (this.selects[id].end.val() != '') {
+      if (this.selects[id].end.val() !== '') {
         return false;
       }
     }
diff --git a/profiles/wcm_base/modules/contrib/date/date.migrate.inc b/profiles/wcm_base/modules/contrib/date/date.migrate.inc
index 095c789e..ad2a5681 100644
--- a/profiles/wcm_base/modules/contrib/date/date.migrate.inc
+++ b/profiles/wcm_base/modules/contrib/date/date.migrate.inc
@@ -40,7 +40,7 @@ class DateMigrateFieldHandler extends MigrateFieldHandler {
    * @return array
    *   An array of the defined variables in this scope.
    */
-  static function arguments($timezone = 'UTC', $timezone_db = 'UTC', $rrule = NULL, $language = NULL) {
+  public static function arguments($timezone = 'UTC', $timezone_db = 'UTC', $rrule = NULL, $language = NULL) {
     return get_defined_vars();
   }
 
@@ -129,6 +129,7 @@ class DateMigrateFieldHandler extends MigrateFieldHandler {
       // timestamp for 'now'.
       if (empty($from)) {
         $return[$language][$delta]['value'] = NULL;
+        $return[$language][$delta]['timezone'] = NULL;
         if (!empty($field_info['settings']['todate'])) {
           $return[$language][$delta]['value2'] = NULL;
         }
@@ -151,6 +152,7 @@ class DateMigrateFieldHandler extends MigrateFieldHandler {
         case 'datestamp':
           // Already done.
           break;
+
         case 'datetime':
           // YYYY-MM-DD HH:MM:SS.
           $from = format_date($from, 'custom', 'Y-m-d H:i:s', $timezone);
@@ -158,6 +160,7 @@ class DateMigrateFieldHandler extends MigrateFieldHandler {
             $to = format_date($to, 'custom', 'Y-m-d H:i:s', $timezone);
           }
           break;
+
         case 'date':
           // ISO date: YYYY-MM-DDTHH:MM:SS.
           $from = format_date($from, 'custom', 'Y-m-d\TH:i:s', $timezone);
@@ -165,6 +168,7 @@ class DateMigrateFieldHandler extends MigrateFieldHandler {
             $to = format_date($to, 'custom', 'Y-m-d\TH:i:s', $timezone);
           }
           break;
+
         default:
           break;
       }
@@ -173,12 +177,17 @@ class DateMigrateFieldHandler extends MigrateFieldHandler {
       // created.
       if (function_exists('date_repeat_build_dates') && !empty($field_info['settings']['repeat']) && $rrule) {
         include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'date_api') . '/date_api_ical.inc';
-        $item = array('value' => $from, 'value2' => $to, 'timezone' => $timezone);
+        $item = array(
+          'value' => $from,
+          'value2' => $to,
+          'timezone' => $timezone,
+        );
         // Can be de-uglified when http://drupal.org/node/1159404 is committed.
         $return[$language] = date_repeat_build_dates(NULL, date_ical_parse_rrule($field_info, $rrule), $field_info, $item);
       }
       else {
         $return[$language][$delta]['value'] = $from;
+        $return[$language][$delta]['timezone'] = $timezone;
         if (!empty($to)) {
           $return[$language][$delta]['value2'] = $to;
         }
@@ -190,6 +199,9 @@ class DateMigrateFieldHandler extends MigrateFieldHandler {
     return $return;
   }
 
+  /**
+   * {@inheritdoc}
+   */
   public function fields($migration = NULL) {
     return array(
       'timezone' => t('Timezone'),
diff --git a/profiles/wcm_base/modules/contrib/date/date.module b/profiles/wcm_base/modules/contrib/date/date.module
index 91c0b65a..6f849dfa 100644
--- a/profiles/wcm_base/modules/contrib/date/date.module
+++ b/profiles/wcm_base/modules/contrib/date/date.module
@@ -1,8 +1,10 @@
 <?php
+
 /**
  * @file
  * Defines date/time field types.
  */
+
 module_load_include('theme', 'date', 'date');
 module_load_include('inc', 'date', 'date.field');
 module_load_include('inc', 'date', 'date_elements');
@@ -15,6 +17,7 @@ function date_get_entity_bundle($entity_type, $entity) {
     case 'field_collection_item':
       $bundle = $entity->field_name;
       break;
+
     default:
       $bundle = field_extract_bundle($entity_type, $entity);
       break;
@@ -40,13 +43,20 @@ function date_default_format($type) {
  * Wrapper function around each of the widget types for creating a date object.
  */
 function date_input_date($field, $instance, $element, $input) {
+  // Trim extra spacing off user input of text fields.
+  if (isset($input['date'])) {
+    $input['date'] = trim($input['date']);
+  }
+
   switch ($instance['widget']['type']) {
     case 'date_text':
       $function = 'date_text_input_date';
       break;
+
     case 'date_popup':
       $function = 'date_popup_input_date';
       break;
+
     default:
       $function = 'date_select_input_date';
   }
@@ -66,6 +76,7 @@ function date_theme() {
   );
   $themes = array(
     'date_combo' => $base + array('render element' => 'element'),
+    'date_form_element' => $base + array('render element' => 'element'),
     'date_text_parts' => $base + array('render element' => 'element'),
     'date' => $base + array('render element' => 'element'),
     'date_display_single' => $base + array(
@@ -97,7 +108,13 @@ function date_theme() {
         'add_rdf' => NULL,
         'microdata' => NULL,
         'add_microdata' => NULL,
-    )),
+      ),
+    ),
+    'date_display_remaining' => $base + array(
+      'variables' => array(
+        'remaining_days' => NULL,
+      ),
+    ),
     'date_display_combination' => $base + array(
       'variables' => array(
         'entity_type' => NULL,
@@ -130,7 +147,7 @@ function date_theme() {
         'attributes' => array(),
         'rdf_mapping' => NULL,
         'add_rdf' => NULL,
-       ),
+      ),
     ),
   );
 
@@ -209,8 +226,10 @@ function date_formatter_process($formatter, $entity_type, $entity, $field, $inst
   $settings = $display['settings'];
   $field_name = $field['field_name'];
   $format = date_formatter_format($formatter, $settings, $granularity, $langcode);
-  $timezone = isset($item['timezone']) ? $item['timezone'] : '';
-  $timezone = date_get_timezone($field['settings']['tz_handling'], $timezone);
+  if (!isset($field['settings']['tz_handling']) || $field['settings']['tz_handling'] !== 'utc') {
+    $timezone = isset($item['timezone']) ? $item['timezone'] : '';
+    $timezone = date_get_timezone($field['settings']['tz_handling'], $timezone);
+  }
   $timezone_db = date_get_timezone_db($field['settings']['tz_handling']);
   $db_format = date_type_format($field['type']);
   $process = date_process_values($field);
@@ -246,10 +265,10 @@ function date_formatter_process($formatter, $entity_type, $entity, $field, $inst
       $dates[$processed]['formatted_iso'] = date_format_date($date, 'custom', 'c');
       if (is_object($date)) {
         if ($format == 'format_interval') {
-           $dates[$processed]['interval'] = date_format_interval($date);
+          $dates[$processed]['interval'] = date_format_interval($date);
         }
         elseif ($format == 'format_calendar_day') {
-           $dates[$processed]['calendar_day'] = date_format_calendar_day($date);
+          $dates[$processed]['calendar_day'] = date_format_calendar_day($date);
         }
         elseif ($format == 'U' || $format == 'r' || $format == 'c') {
           $dates[$processed]['formatted'] = date_format_date($date, 'custom', $format);
@@ -258,10 +277,11 @@ function date_formatter_process($formatter, $entity_type, $entity, $field, $inst
           $dates[$processed]['formatted_timezone'] = '';
         }
         elseif (!empty($format)) {
-          $dates[$processed]['formatted'] = date_format_date($date, 'custom', $format);
-          $dates[$processed]['formatted_date'] = date_format_date($date, 'custom', date_limit_format($format, array('year', 'month', 'day')));
-          $dates[$processed]['formatted_time'] = date_format_date($date, 'custom', date_limit_format($format, array('hour', 'minute', 'second')));
-          $dates[$processed]['formatted_timezone'] = date_format_date($date, 'custom', date_limit_format($format, array('timezone')));
+          $formats = _get_custom_date_format($date, $format);
+          $dates[$processed]['formatted'] = $formats['formatted'];
+          $dates[$processed]['formatted_date'] = $formats['date'];
+          $dates[$processed]['formatted_time'] = $formats['time'];
+          $dates[$processed]['formatted_timezone'] = $formats['zone'];
         }
       }
     }
@@ -288,6 +308,30 @@ function date_formatter_process($formatter, $entity_type, $entity, $field, $inst
   return $dates;
 }
 
+/**
+ * Get a custom date format.
+ */
+function _get_custom_date_format($date, $format) {
+  $custom = array();
+  $custom['granularities'] = array(
+    'date' => array('year', 'month', 'day'),
+    'time' => array('hour', 'minute', 'second'),
+    'zone' => array('timezone'),
+  );
+  $custom['limits'] = array(
+    'date' => date_limit_format($format, $custom['granularities']['date']),
+    'time' => date_limit_format($format, $custom['granularities']['time']),
+    'zone' => date_limit_format($format, $custom['granularities']['zone']),
+  );
+
+  return array(
+    'formatted' => date_format_date($date, 'custom', $format),
+    'date'      => date_format_date($date, 'custom', $custom['limits']['date']),
+    'time'      => date_format_date($date, 'custom', $custom['limits']['time']),
+    'zone'      => date_format_date($date, 'custom', $custom['limits']['zone']),
+  );
+}
+
 /**
  * Retrieves the granularity for a field.
  *
@@ -301,14 +345,14 @@ function date_formatter_process($formatter, $entity_type, $entity, $field, $inst
  */
 function date_granularity($field) {
   if (!is_array($field) || !is_array($field['settings']['granularity'])) {
-    $field['settings']['granularity'] = drupal_map_assoc(array('year', 'month', 'day'));
+    $granularity = drupal_map_assoc(array('year', 'month', 'day'));
+    $field['settings']['granularity'] = $granularity;
   }
   return array_values(array_filter($field['settings']['granularity']));
 }
 
 /**
- * Helper function to create an array of the date values in a
- * field that need to be processed.
+ * Helper function to create an array of the date values in a field that need to be processed.
  */
 function date_process_values($field) {
   return $field['settings']['todate'] ? array('value', 'value2') : array('value');
@@ -394,10 +438,10 @@ function date_formatter_format($formatter, $settings, $granularity = array(), $l
   switch ($formatter) {
     case 'format_interval':
       return 'format_interval';
-      break;
+
     case 'date_plain':
       return 'date_plain';
-      break;
+
     default:
       $format = date_format_type_format($format_type, $langcode);
       break;
@@ -410,6 +454,7 @@ function date_formatter_format($formatter, $settings, $granularity = array(), $l
 
 /**
  * Helper function to get the right format for a format type.
+ *
  * Checks for locale-based format first.
  */
 function date_format_type_format($format_type, $langcode = NULL) {
@@ -432,27 +477,30 @@ function date_format_type_format($format_type, $langcode = NULL) {
         case 'short':
           $default = 'm/d/Y - H:i';
           break;
+
         case 'long':
           $default = 'l, F j, Y - H:i';
           break;
+
         // If it's not one of the core date types and isn't stored in the
         // database, we'll fall back on using the same default format as the
         // 'medium' type.
         case 'medium':
         default:
           // @todo: If a non-core module provides a date type and does not
-          //   variable_set() a default for it, the default assumed here may
-          //   not be correct (since the default format used by 'medium' may
-          //   not even be one of the allowed formats for the date type in
-          //   question). To fix this properly, we should really call
-          //   system_get_date_formats($format_type) and take the first
-          //   format from that list as the default. However, this function
-          //   is called often (on many different page requests), so calling
-          //   system_get_date_formats() from here would be a performance hit
-          //   since that function writes several records to the database
-          //   during each page request that calls it.
+          // variable_set() a default for it, the default assumed here may
+          // not be correct (since the default format used by 'medium' may
+          // not even be one of the allowed formats for the date type in
+          // question). To fix this properly, we should really call
+          // system_get_date_formats($format_type) and take the first
+          // format from that list as the default. However, this function
+          // is called often (on many different page requests), so calling
+          // system_get_date_formats() from here would be a performance hit
+          // since that function writes several records to the database
+          // during each page request that calls it.
           $default = 'D, m/d/Y - H:i';
           break;
+
       }
       $format = variable_get('date_format_' . $format_type, $default);
     }
@@ -506,7 +554,7 @@ function date_prepare_entity($formatter, $entity_type, $entity, $field, $instanc
         elseif ((!empty($max_count) && is_numeric($max_count) && $count >= $max_count) ||
           (!empty($value['value'])  && $value['value'] < $start) ||
           (!empty($value['value2']) && $value['value2'] > $end)) {
-            unset($entity->{$field_name}[$langcode][$delta]);
+          unset($entity->{$field_name}[$langcode][$delta]);
         }
         else {
           $count++;
@@ -647,7 +695,7 @@ function date_entity_metadata_field_setter(&$entity, $name, $value, $langcode, $
 }
 
 /**
- * Auto creation callback for fields which contain two date values in one
+ * Auto creation callback for fields which contain two date values in one.
  */
 function date_entity_metadata_struct_create($name, $property_info) {
   return array(
@@ -658,10 +706,10 @@ function date_entity_metadata_struct_create($name, $property_info) {
 
 /**
  * Callback for setting an individual field value if a to-date may be there too.
+ *
  * Based on entity_property_verbatim_set().
  *
- * The passed in unix timestamp (UTC) is converted to the right value and
- * format dependent on the field.
+ * The passed in unix timestamp (UTC) is converted to the right value and format dependent on the field.
  *
  * $name is either 'value' or 'value2'.
  */
@@ -683,9 +731,9 @@ function date_entity_metadata_struct_setter(&$item, $name, $value, $langcode, $t
 }
 
 /**
- * Duplicate functionality of what is now date_all_day_field() in
- * the Date All Day module. Copy left here to avoid breaking other
- * modules that use this function.
+ * Duplicate functionality of what is now date_all_day_field() in the Date All Day module.
+ *
+ * Copy left here to avoid breaking other modules that use this function.
  *
  * DEPRECATED!, will be removed at some time in the future.
  */
@@ -759,7 +807,7 @@ function date_field_widget_properties_alter(&$widget, $context) {
     $entity = $context['entity'];
     $info = entity_get_info($entity_type);
     $id = $info['entity keys']['id'];
-    $widget['is_new']= FALSE;
+    $widget['is_new'] = FALSE;
     if (empty($entity->$id)) {
       $widget['is_new'] = TRUE;
     }
diff --git a/profiles/wcm_base/modules/contrib/date/date.theme b/profiles/wcm_base/modules/contrib/date/date.theme
old mode 100644
new mode 100755
index a1f7d939..5cec8b42
--- a/profiles/wcm_base/modules/contrib/date/date.theme
+++ b/profiles/wcm_base/modules/contrib/date/date.theme
@@ -77,6 +77,7 @@ function theme_date_display_combination($variables) {
   $microdata   = $variables['microdata'];
   $add_microdata = $variables['add_microdata'];
   $precision   = date_granularity_precision($field['settings']['granularity']);
+  $show_remaining_days = $variables['show_remaining_days'];
 
   $output = '';
 
@@ -121,10 +122,12 @@ function theme_date_display_combination($variables) {
       $date1 = $dates['value']['formatted'];
       $date2 = $date1;
       break;
+
     case 'value2':
       $date2 = $dates['value2']['formatted'];
       $date1 = $date2;
       break;
+
     default:
       $date1 = $dates['value']['formatted'];
       $date2 = $dates['value2']['formatted'];
@@ -151,6 +154,20 @@ function theme_date_display_combination($variables) {
     $has_time_string = FALSE;
   }
 
+  // Check remaining days.
+  $show_remaining_days = '';
+  if (!empty($variables['show_remaining_days'])) {
+    $remaining_days = floor((strtotime($variables['dates']['value']['formatted_iso'])
+    - strtotime('now')) / (24 * 3600));
+
+    // Show remaining days only for future events.
+    if ($remaining_days >= 0) {
+      $show_remaining_days = theme('date_display_remaining', array(
+        'remaining_days' => $remaining_days,
+      ));
+    }
+  }
+
   // No date values, display nothing.
   if (empty($date1) && empty($date2)) {
     $output .= '';
@@ -167,6 +184,7 @@ function theme_date_display_combination($variables) {
       'microdata' => $microdata,
       'add_microdata' => $add_microdata,
       'dates' => $dates,
+      'show_remaining_days' => $show_remaining_days,
     ));
   }
   // Same day, different times, don't repeat the date but show both Start and
@@ -186,6 +204,7 @@ function theme_date_display_combination($variables) {
       'microdata' => $microdata,
       'add_microdata' => $add_microdata,
       'dates' => $dates,
+      'show_remaining_days' => $show_remaining_days,
     ));
     $replaced = str_replace($time1, $time, $date1);
     $output .= theme('date_display_single', array(
@@ -209,6 +228,7 @@ function theme_date_display_combination($variables) {
       'microdata' => $microdata,
       'add_microdata' => $add_microdata,
       'dates' => $dates,
+      'show_remaining_days' => $show_remaining_days,
     ));
   }
 
@@ -236,12 +256,12 @@ function template_preprocess_date_display_single(&$variables) {
     // Because the Entity API integration for Date has a variable data
     // structure depending on whether there is an end value, the attributes
     // could be attached to the field or to the value property.
-    if(!empty($variables['microdata']['#attributes']['itemprop'])) {
+    if (!empty($variables['microdata']['#attributes']['itemprop'])) {
       $variables['microdata']['value']['#attributes'] = $variables['microdata']['#attributes'];
     }
 
     // Add the machine readable time using the content attribute.
-    if(!empty($variables['microdata']['value']['#attributes'])) {
+    if (!empty($variables['microdata']['value']['#attributes'])) {
       $variables['microdata']['value']['#attributes']['content'] = $variables['dates']['value']['formatted_iso'];
     }
     else {
@@ -257,6 +277,7 @@ function theme_date_display_single($variables) {
   $date = $variables['date'];
   $timezone = $variables['timezone'];
   $attributes = $variables['attributes'];
+  $show_remaining_days = isset($variables['show_remaining_days']) ? $variables['show_remaining_days'] : '';
 
   // Wrap the result with the attributes.
   $output = '<span class="date-display-single"' . drupal_attributes($attributes) . '>' . $date . $timezone . '</span>';
@@ -265,7 +286,8 @@ function theme_date_display_single($variables) {
     $output .= '<meta' . drupal_attributes($variables['microdata']['value']['#attributes']) . '/>';
   }
 
-  return $output;
+  // Add remaining message and return.
+  return $output . $show_remaining_days;
 }
 
 /**
@@ -314,6 +336,7 @@ function theme_date_display_range($variables) {
   $timezone = $variables['timezone'];
   $attributes_start = $variables['attributes_start'];
   $attributes_end = $variables['attributes_end'];
+  $show_remaining_days = $variables['show_remaining_days'];
 
   $start_date = '<span class="date-display-start"' . drupal_attributes($attributes_start) . '>' . $date1 . '</span>';
   $end_date = '<span class="date-display-end"' . drupal_attributes($attributes_end) . '>' . $date2 . $timezone . '</span>';
@@ -326,10 +349,13 @@ function theme_date_display_range($variables) {
   }
 
   // Wrap the result with the attributes.
-  return t('!start-date to !end-date', array(
+  $output = '<div class="date-display-range">' . t('!start-date to !end-date', array(
     '!start-date' => $start_date,
     '!end-date' => $end_date,
-  ));
+  )) . '</div>';
+
+  // Add remaining message and return.
+  return $output . $show_remaining_days;
 }
 
 /**
@@ -375,7 +401,7 @@ function theme_date_combo($variables) {
     '#title' => field_filter_xss(t($element['#title'])) . ' ' . ($element['#delta'] > 0 ? intval($element['#delta'] + 1) : ''),
     '#value' => '',
     '#description' => !empty($element['#fieldset_description']) ? $element['#fieldset_description'] : '',
-    '#attributes' => array(),
+    '#attributes' => array('class' => array('date-combo')),
     '#children' => $element['#children'],
   );
   // Add marker to required date fields.
@@ -396,7 +422,11 @@ function theme_date_text_parts($variables) {
       $rows[] = drupal_render($element[$key]);
     }
     else {
-      $rows[] = array($part, drupal_render($element[$key][0]), drupal_render($element[$key][1]));
+      $rows[] = array(
+        $part,
+        drupal_render($element[$key][0]),
+        drupal_render($element[$key][1]),
+      );
     }
   }
   if ($element['year']['#type'] == 'hidden') {
@@ -408,4 +438,49 @@ function theme_date_text_parts($variables) {
   }
 }
 
+/**
+ * Render a date combo as a form element.
+ */
+function theme_date_form_element($variables) {
+  $element = &$variables['element'];
+
+  // Detect whether element is multiline.
+  $count = preg_match_all('`<(?:div|span)\b[^>]* class="[^"]*\b(?:date-no-float|date-clear)\b`', $element['#children'], $matches, PREG_OFFSET_CAPTURE);
+  $multiline = FALSE;
+  if ($count > 1) {
+    $multiline = TRUE;
+  }
+  elseif ($count) {
+    $before = substr($element['#children'], 0, $matches[0][0][1]);
+    if (preg_match('`<(?:div|span)\b[^>]* class="[^"]*\bdate-float\b`', $before)) {
+      $multiline = TRUE;
+    }
+  }
+
+  // Detect if there is more than one subfield.
+  $count = count(explode('<label', $element['#children'])) - 1;
+  if ($count == 1) {
+    $element['#title_display'] = 'none';
+  }
+
+  // Wrap children with a div and add an extra class if element is multiline.
+  $element['#children'] = '<div class="date-form-element-content'. ($multiline ? ' date-form-element-content-multiline' : '') .'">'. $element['#children'] .'</div>';
+
+  return theme('form_element', $variables);
+}
+
+/**
+ * Returns HTML for remaining message.
+ */
+function theme_date_display_remaining($variables) {
+  $remaining_days = $variables['remaining_days'];
+  $output = '';
+  $show_remaining_text = t('The upcoming date less then 1 day.');
+  if ($remaining_days) {
+    $show_remaining_text = format_plural($remaining_days, 'To event remaining 1 day', 'To event remaining @count days');
+  }
+
+  return '<div class="date-display-remaining"><span class="date-display-remaining">' . $show_remaining_text . '</span></div>';
+}
+
 /** @} End of addtogroup themeable */
diff --git a/profiles/wcm_base/modules/contrib/date/date_admin.inc b/profiles/wcm_base/modules/contrib/date/date_admin.inc
index 0e32fc5a..13da42ef 100644
--- a/profiles/wcm_base/modules/contrib/date/date_admin.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_admin.inc
@@ -74,6 +74,12 @@ function date_default_formatter_settings_form($field, $instance, $view_mode, $fo
     '#description' => t('Identify specific start and/or end dates in the format YYYY-MM-DDTHH:MM:SS, or leave blank for all available dates.'),
   );
 
+  $form['show_remaining_days'] = array(
+    '#title' => t('Show remaining days'),
+    '#type' => 'checkbox',
+    '#default_value' => $settings['show_remaining_days'],
+    '#weight' => 0,
+  );
   return $form;
 }
 
@@ -127,9 +133,11 @@ function date_default_formatter_settings_summary($field, $instance, $view_mode)
     case 'date_plain':
       $format = t('Plain');
       break;
+
     case 'format_interval':
       $format = t('Interval');
       break;
+
     default:
       if (!empty($format_types[$settings['format_type']])) {
         $format = $format_types[$settings['format_type']];
@@ -148,7 +156,9 @@ function date_default_formatter_settings_summary($field, $instance, $view_mode)
       'value' => t('Display Start date only'),
       'value2' => t('Display End date only'),
     );
-    $summary[] = $options[$settings['fromto']];
+    if (isset($options[$settings['fromto']])) {
+      $summary[] = $options[$settings['fromto']];
+    }
   }
 
   if (array_key_exists('multiple_number', $settings) && !empty($field['cardinality'])) {
@@ -159,6 +169,10 @@ function date_default_formatter_settings_summary($field, $instance, $view_mode)
     ));
   }
 
+  if (array_key_exists('show_remaining_days', $settings)) {
+    $summary[] = t('Show remaining days: @value', array('@value' => ($settings['show_remaining_days'] ? 'yes' : 'no')));
+  }
+
   return $summary;
 }
 
@@ -191,7 +205,11 @@ function _date_field_instance_settings_form($field, $instance) {
     '#type' => 'select',
     '#title' => t('Default date'),
     '#default_value' => $settings['default_value'],
-    '#options' => array('blank' => t('No default value'), 'now' => t('Now'), 'strtotime' => t('Relative')),
+    '#options' => array(
+      'blank'     => t('No default value'),
+      'now'       => t('Now'),
+      'strtotime' => t('Relative'),
+    ),
     '#weight' => 1,
     '#fieldset' => 'default_values',
   );
@@ -204,8 +222,11 @@ function _date_field_instance_settings_form($field, $instance) {
     '#default_value' => $settings['default_value_code'],
     '#states' => array(
       'visible' => array(
-        ':input[name="instance[settings][default_value]"]' => array('value' => 'strtotime')),
+        ':input[name="instance[settings][default_value]"]' => array(
+          'value' => 'strtotime',
+        ),
       ),
+    ),
     '#weight' => 1.1,
     '#fieldset' => 'default_values',
   );
@@ -213,7 +234,12 @@ function _date_field_instance_settings_form($field, $instance) {
     '#type' => !empty($field['settings']['todate']) ? 'select' : 'hidden',
     '#title' => t('Default end date'),
     '#default_value' => $settings['default_value2'],
-    '#options' => array('same' => t('Same as Default date'), 'blank' => t('No default value'), 'now' => t('Now'), 'strtotime' => t('Relative')),
+    '#options' => array(
+      'same'      => t('Same as Default date'),
+      'blank'     => t('No default value'),
+      'now'       => t('Now'),
+      'strtotime' => t('Relative'),
+    ),
     '#weight' => 2,
     '#fieldset' => 'default_values',
   );
@@ -224,8 +250,11 @@ function _date_field_instance_settings_form($field, $instance) {
     '#default_value' => $settings['default_value_code2'],
     '#states' => array(
       'visible' => array(
-        ':input[name="instance[settings][default_value2]"]' => array('value' => 'strtotime')),
+        ':input[name="instance[settings][default_value2]"]' => array(
+          'value' => 'strtotime',
+        ),
       ),
+    ),
     '#weight' => 2.1,
     '#fieldset' => 'default_values',
   );
@@ -284,6 +313,7 @@ function _date_field_widget_settings_form($field, $instance) {
     $formats = drupal_map_assoc($formats);
   }
   $now = date_example_date();
+  $options['site-wide'] = t('Short date format: @date', array('@date' => date_format_date($now, 'short')));
   foreach ($formats as $f) {
     $options[$f] = date_format_date($now, 'custom', $f);
   }
@@ -369,11 +399,18 @@ function _date_field_widget_settings_form($field, $instance) {
     '#weight' => 9,
   );
   if (in_array($widget['type'], array('date_select'))) {
-    $options = array('above' => t('Above'), 'within' => t('Within'), 'none' => t('None'));
+    $options = array(
+      'above' => t('Above'),
+      'within' => t('Within'),
+      'none' => t('None'),
+    );
     $description = t("The location of date part labels, like 'Year', 'Month', or 'Day' . 'Above' displays the label as titles above each date part. 'Within' inserts the label as the first option in the select list and in blank textfields. 'None' doesn't visually label any of the date parts. Theme functions like 'date_part_label_year' and 'date_part_label_month' control label text.");
   }
   else {
-    $options = array('above' => t('Above'), 'none' => t('None'));
+    $options = array(
+      'above' => t('Above'),
+      'none' => t('None'),
+    );
     $description = t("The location of date part labels, like 'Year', 'Month', or 'Day' . 'Above' displays the label as titles above each date part. 'None' doesn't visually label any of the date parts. Theme functions like 'date_part_label_year' and 'date_part_label_month' control label text.");
   }
   $form['advanced']['label_position'] = array(
@@ -403,6 +440,13 @@ function _date_field_widget_settings_form($field, $instance) {
     }
   }
 
+  $form['advanced']['no_fieldset'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Render as a regular field'),
+    '#default_value' => !empty($settings['no_fieldset']),
+    '#description' => t('Whether to render this field as a regular field instead of a fieldset. The date field elements are wrapped in a fieldset by default, and may not display well without it.'),
+  );
+
   $context = array(
     'field' => $field,
     'instance' => $instance,
@@ -470,7 +514,9 @@ function _date_field_settings_form($field, $instance, $has_data) {
     '#title' => t('Date attributes to collect'),
     '#default_value' => $granularity,
     '#options' => $options,
-    '#attributes' => array('class' => array('container-inline')),
+    '#attributes' => array(
+      'class' => array('container-inline'),
+    ),
     '#description' => $description,
     'year' => $checkbox_year,
   );
@@ -528,7 +574,9 @@ function _date_field_settings_form($field, $instance, $has_data) {
     '#weight' => 11,
     '#states' => array(
       'visible' => array(
-        'input[name="field[settings][cache_enabled]"]' => array('checked' => TRUE),
+        'input[name="field[settings][cache_enabled]"]' => array(
+          'checked' => TRUE,
+        ),
       ),
     ),
   );
@@ -600,7 +648,7 @@ function date_timezone_handling_options() {
     'site' => t("Site's time zone"),
     'date' => t("Date's time zone"),
     'user' => t("User's time zone"),
-    'utc' => 'UTC',
+    'utc'  => 'UTC',
     'none' => t('No time zone conversion'),
   );
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.info b/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.info
index 8eeb7325..df773e41 100644
--- a/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.info
+++ b/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.info
@@ -5,9 +5,9 @@ dependencies[] = date
 package = Date/Time
 core = 7.x
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.module b/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.module
index 93fc61ba..e79bc944 100644
--- a/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.module
+++ b/profiles/wcm_base/modules/contrib/date/date_all_day/date_all_day.module
@@ -31,11 +31,11 @@ function date_all_day_theme() {
         'format' => NULL,
         'entity_type' => NULL,
         'entity' => NULL,
-        'view' => NULL
-      )
+        'view' => NULL,
+      ),
     ),
     'date_all_day_label' => array(
-       'variables' => array()
+      'variables' => array(),
     ),
   );
 
@@ -91,14 +91,29 @@ function date_all_day_date_formatter_dates_alter(&$dates, $context) {
 /**
  * Adjust start/end date format to account for 'all day' .
  *
- * @param array $field, the field definition for this date field.
- * @param string $which, which value to return, 'date1' or 'date2' .
- * @param object $date1, a date/time object for the 'start' date.
- * @param object $date2, a date/time object for the 'end' date.
- * @param string $format
- * @param object $entity, the node this date comes from (may be incomplete, always contains nid).
- * @param object $view, the view this node comes from, if applicable.
- * @return formatted date.
+ * @params array $field
+ *   The field definition for this date field.
+ *
+ * @params string $which
+ *   Which value to return, 'date1' or 'date2'.
+ *
+ * @params object $date1
+ *   A date/time object for the 'start' date.
+ *
+ * @params object $date2
+ *   A date/time object for the 'end' date.
+ *
+ * @params string $format
+ *   A date/time format
+ *
+ * @params object $entity
+ *   The node this date comes from (may be incomplete, always contains nid).
+ *
+ * @params object $view
+ *   The view this node comes from, if applicable.
+ *
+ * @return string
+ *   Formatted date.
  */
 function theme_date_all_day($vars) {
   $field    = $vars['field'];
@@ -135,23 +150,32 @@ function theme_date_all_day($vars) {
   }
 
   return trim(date_format_date($$which, 'custom', $format) . $suffix);
-
 }
 
 /**
  * Theme the way an 'all day' label will look.
  */
 function theme_date_all_day_label() {
-  return '(' . t('All day', array(), array('context' => 'datetime')) .')';
+  return '(' . t('All day', array(), array('context' => 'datetime')) . ')';
 }
 
 /**
  * Determine if a Start/End date combination qualify as 'All day'.
  *
- * @param array $field, the field definition for this date field.
- * @param object $date1, a date/time object for the 'Start' date.
- * @param object $date2, a date/time object for the 'End' date.
- * @return TRUE or FALSE.
+ * @param array $field
+ *   The field definition for this date field.
+ *
+ * @param array $instance
+ *   The field instance for this date field.
+ *
+ * @param object $date1
+ *   A date/time object for the 'Start' date.
+ *
+ * @param object $date2
+ *   A date/time object for the 'End' date.
+ *
+ * @return bool
+ *   TRUE or FALSE.
  */
 function date_all_day_field($field, $instance, $date1, $date2 = NULL) {
   if (empty($date1) || !is_object($date1)) {
@@ -167,7 +191,6 @@ function date_all_day_field($field, $instance, $date1, $date2 = NULL) {
   $granularity = date_granularity_precision($field['settings']['granularity']);
   $increment = isset($instance['widget']['settings']['increment']) ? $instance['widget']['settings']['increment'] : 1;
   return date_is_all_day(date_format($date1, DATE_FORMAT_DATETIME), date_format($date2, DATE_FORMAT_DATETIME), $granularity, $increment);
-
 }
 
 /**
@@ -222,7 +245,8 @@ function date_all_day_date_combo_process_alter(&$element, &$form_state, $context
 function date_all_day_date_text_process_alter(&$element, &$form_state, $context) {
   $all_day_id = !empty($element['#date_all_day_id']) ? $element['#date_all_day_id'] : '';
   if ($all_day_id != '') {
-    // All Day handling on text dates works only if the user leaves the time out of the input value.
+    // All Day handling on text dates works only
+    // if the user leaves the time out of the input value.
     // There is no element to hide or show.
   }
 }
@@ -234,10 +258,11 @@ function date_all_day_date_text_process_alter(&$element, &$form_state, $context)
  */
 function date_all_day_date_select_process_alter(&$element, &$form_state, $context) {
 
-  // Hide or show this element in reaction to the all_day status for this element.
+  // Hide or show this element in reaction
+  // to the all_day status for this element.
   $all_day_id = !empty($element['#date_all_day_id']) ? $element['#date_all_day_id'] : '';
   if ($all_day_id != '') {
-    foreach(array('hour', 'minute', 'second', 'ampm') as $field) {
+    foreach (array('hour', 'minute', 'second', 'ampm') as $field) {
       if (array_key_exists($field, $element)) {
         $element[$field]['#states'] = array(
           'visible' => array(
@@ -255,7 +280,8 @@ function date_all_day_date_select_process_alter(&$element, &$form_state, $contex
  */
 function date_all_day_date_popup_process_alter(&$element, &$form_state, $context) {
 
-  // Hide or show this element in reaction to the all_day status for this element.
+  // Hide or show this element in reaction to
+  // the all_day status for this element.
   $all_day_id = !empty($element['#date_all_day_id']) ? $element['#date_all_day_id'] : '';
   if ($all_day_id != '' && array_key_exists('time', $element)) {
     $element['time']['#states'] = array(
@@ -272,7 +298,8 @@ function date_all_day_date_popup_process_alter(&$element, &$form_state, $context
  * of the date_select validation gets fired.
  */
 function date_all_day_date_text_pre_validate_alter(&$element, &$form_state, &$input) {
-  // Let Date module massage the format for all day values so they will pass validation.
+  // Let Date module massage the format for all day
+  // values so they will pass validation.
   // The All day flag, if used, actually exists on the parent element.
   date_all_day_value($element, $form_state);
 }
@@ -284,7 +311,8 @@ function date_all_day_date_text_pre_validate_alter(&$element, &$form_state, &$in
  * of the date_select validation gets fired.
  */
 function date_all_day_date_select_pre_validate_alter(&$element, &$form_state, &$input) {
-  // Let Date module massage the format for all day values so they will pass validation.
+  // Let Date module massage the format for all
+  // day values so they will pass validation.
   // The All day flag, if used, actually exists on the parent element.
   date_all_day_value($element, $form_state);
 }
@@ -296,13 +324,16 @@ function date_all_day_date_select_pre_validate_alter(&$element, &$form_state, &$
  * of the date_popup validation gets fired.
  */
 function date_all_day_date_popup_pre_validate_alter(&$element, &$form_state, &$input) {
-  // Let Date module massage the format for all day values so they will pass validation.
+  // Let Date module massage the format for all
+  // day values so they will pass validation.
   // The All day flag, if used, actually exists on the parent element.
   date_all_day_value($element, $form_state);
 }
 
 /**
- * A helper function to check if the all day flag is set on the parent of an
+ * A helper function date_all_day_value().
+ *
+ * To check if the all day flag is set on the parent of an
  * element, and adjust the date_format accordingly so the missing time will
  * not cause validation errors.
  */
@@ -332,7 +363,8 @@ function date_all_day_date_combo_pre_validate_alter(&$element, &$form_state, $co
     $field = $context['field'];
 
     // If we have an all day flag on this date and the time is empty,
-    // change the format to match the input value so we don't get validation errors.
+    // change the format to match the input value
+    // so we don't get validation errors.
     $element['#date_is_all_day'] = TRUE;
     $element['value']['#date_format'] = date_part_format('date', $element['value']['#date_format']);
     if (!empty($field['settings']['todate'])) {
@@ -344,29 +376,29 @@ function date_all_day_date_combo_pre_validate_alter(&$element, &$form_state, $co
 /**
  * Implements hook_date_combo_validate_date_start_alter().
  *
- * This hook lets us alter the local date objects created by the date_combo validation
- * before they are converted back to the database timezone and stored.
+ * This hook lets us alter the local date objects
+ * created by the date_combo validation before they are
+ * converted back to the database timezone and stored.
  */
 function date_all_day_date_combo_validate_date_start_alter(&$date, &$form_state, $context) {
-
-   // If this is an 'All day' value, set the time to midnight.
-   if (!empty($context['element']['#date_is_all_day'])) {
-     $date->setTime(0, 0, 0);
-   }
+  // If this is an 'All day' value, set the time to midnight.
+  if (!empty($context['element']['#date_is_all_day'])) {
+    $date->setTime(0, 0, 0);
+  }
 }
 
 /**
  * Implements hook_date_combo_validate_date_end_alter().
  *
- * This hook lets us alter the local date objects created by the date_combo validation
- * before they are converted back to the database timezone and stored.
+ * This hook lets us alter the local date objects
+ * created by the date_combo validation before
+ * they are converted back to the database timezone and stored.
  */
 function date_all_day_date_combo_validate_date_end_alter(&$date, &$form_state, $context) {
-
-   // If this is an 'All day' value, set the time to midnight.
-   if (!empty($context['element']['#date_is_all_day'])) {
-     $date->setTime(0, 0, 0);
-   }
+  // If this is an 'All day' value, set the time to midnight.
+  if (!empty($context['element']['#date_is_all_day'])) {
+    $date->setTime(0, 0, 0);
+  }
 }
 
 /**
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date.css b/profiles/wcm_base/modules/contrib/date/date_api/date.css
index 9b72ecdb..e47a2ae2 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date.css
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date.css
@@ -15,9 +15,11 @@
 .container-inline-date > .form-item {
   display: inline-block;
   margin-right: 0.5em; /* LTR */
-  margin-bottom: 10px;
   vertical-align: top;
 }
+fieldset.date-combo .container-inline-date > .form-item {
+  margin-bottom: 10px;
+}
 .container-inline-date .form-item .form-item {
   float: left; /* LTR */
 }
@@ -52,9 +54,11 @@
 
 /* The exposed Views form doesn't need some of these styles */
 .container-inline-date .date-padding {
-  padding: 10px;
   float: left;
 }
+fieldset.date-combo .container-inline-date .date-padding {
+  padding: 10px;
+}
 .views-exposed-form .container-inline-date .date-padding {
   padding: 0;
 }
@@ -116,7 +120,7 @@ span.date-display-end {
 }
 
 /* Add space between the date and time portions of the date_select widget. */
-.form-type-date-select .form-type-select[class$=hour] {
+.form-type-date-select .form-type-select[class*=hour] {
   margin-left: .75em; /* LTR */
 }
 
@@ -173,6 +177,10 @@ div.date-calendar-day span.year {
   padding: 2px;
 }
 
+.date-form-element-content-multiline {
+  padding: 10px;
+  border: 1px solid #CCC;
+}
 /* Admin styling */
 .form-item.form-item-instance-widget-settings-input-format-custom,
 .form-item.form-item-field-settings-enddate-required {
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date_api.admin.inc b/profiles/wcm_base/modules/contrib/date/date_api/date_api.admin.inc
index 966b1a42..3c706aeb 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date_api.admin.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date_api.admin.inc
@@ -10,112 +10,112 @@
  */
 function _date_timezone_replacement($old) {
   $replace = array(
-  'Brazil/Acre' => 'America/Rio_Branco',
-  'Brazil/DeNoronha' => 'America/Noronha',
-  'Brazil/East' => 'America/Recife',
-  'Brazil/West' => 'America/Manaus',
-  'Canada/Atlantic' => 'America/Halifax',
-  'Canada/Central' => 'America/Winnipeg',
-  'Canada/East-Saskatchewan' => 'America/Regina',
-  'Canada/Eastern' => 'America/Toronto',
-  'Canada/Mountain' => 'America/Edmonton',
-  'Canada/Newfoundland' => 'America/St_Johns',
-  'Canada/Pacific' => 'America/Vancouver',
-  'Canada/Saskatchewan' => 'America/Regina',
-  'Canada/Yukon' => 'America/Whitehorse',
-  'CET' => 'Europe/Berlin',
-  'Chile/Continental' => 'America/Santiago',
-  'Chile/EasterIsland' => 'Pacific/Easter',
-  'CST6CDT' => 'America/Chicago',
-  'Cuba' => 'America/Havana',
-  'EET' => 'Europe/Bucharest',
-  'Egypt' => 'Africa/Cairo',
-  'Eire' => 'Europe/Belfast',
-  'EST' => 'America/New_York',
-  'EST5EDT' => 'America/New_York',
-  'GB' => 'Europe/London',
-  'GB-Eire' => 'Europe/Belfast',
-  'Etc/GMT' => 'UTC',
-  'Etc/GMT+0' => 'UTC',
-  'Etc/GMT+1' => 'UTC',
-  'Etc/GMT+10' => 'UTC',
-  'Etc/GMT+11' => 'UTC',
-  'Etc/GMT+12' => 'UTC',
-  'Etc/GMT+2' => 'UTC',
-  'Etc/GMT+3' => 'UTC',
-  'Etc/GMT+4' => 'UTC',
-  'Etc/GMT+5' => 'UTC',
-  'Etc/GMT+6' => 'UTC',
-  'Etc/GMT+7' => 'UTC',
-  'Etc/GMT+8' => 'UTC',
-  'Etc/GMT+9' => 'UTC',
-  'Etc/GMT-0' => 'UTC',
-  'Etc/GMT-1' => 'UTC',
-  'Etc/GMT-10' => 'UTC',
-  'Etc/GMT-11' => 'UTC',
-  'Etc/GMT-12' => 'UTC',
-  'Etc/GMT-13' => 'UTC',
-  'Etc/GMT-14' => 'UTC',
-  'Etc/GMT-2' => 'UTC',
-  'Etc/GMT-3' => 'UTC',
-  'Etc/GMT-4' => 'UTC',
-  'Etc/GMT-5' => 'UTC',
-  'Etc/GMT-6' => 'UTC',
-  'Etc/GMT-7' => 'UTC',
-  'Etc/GMT-8' => 'UTC',
-  'Etc/GMT-9' => 'UTC',
-  'Etc/GMT0' => 'UTC',
-  'Etc/Greenwich' => 'UTC',
-  'Etc/UCT' => 'UTC',
-  'Etc/Universal' => 'UTC',
-  'Etc/UTC' => 'UTC',
-  'Etc/Zulu' => 'UTC',
-  'Factory' => 'UTC',
-  'GMT' => 'UTC',
-  'GMT+0' => 'UTC',
-  'GMT-0' => 'UTC',
-  'GMT0' => 'UTC',
-  'Hongkong' => 'Asia/Hong_Kong',
-  'HST' => 'Pacific/Honolulu',
-  'Iceland' => 'Atlantic/Reykjavik',
-  'Iran' => 'Asia/Tehran',
-  'Israel' => 'Asia/Tel_Aviv',
-  'Jamaica' => 'America/Jamaica',
-  'Japan' => 'Asia/Tokyo',
-  'Kwajalein' => 'Pacific/Kwajalein',
-  'Libya' => 'Africa/Tunis',
-  'MET' => 'Europe/Budapest',
-  'Mexico/BajaNorte' => 'America/Tijuana',
-  'Mexico/BajaSur' => 'America/Mazatlan',
-  'Mexico/General' => 'America/Mexico_City',
-  'MST' => 'America/Boise',
-  'MST7MDT' => 'America/Boise',
-  'Navajo' => 'America/Phoenix',
-  'NZ' => 'Pacific/Auckland',
-  'NZ-CHAT' => 'Pacific/Chatham',
-  'Poland' => 'Europe/Warsaw',
-  'Portugal' => 'Europe/Lisbon',
-  'PRC' => 'Asia/Chongqing',
-  'PST8PDT' => 'America/Los_Angeles',
-  'ROC' => 'Asia/Taipei',
-  'ROK' => 'Asia/Seoul',
-  'Singapore' => 'Asia/Singapore',
-  'Turkey' => 'Europe/Istanbul',
-  'US/Alaska' => 'America/Anchorage',
-  'US/Aleutian' => 'America/Adak',
-  'US/Arizona' => 'America/Phoenix',
-  'US/Central' => 'America/Chicago',
-  'US/East-Indiana' => 'America/Indianapolis',
-  'US/Eastern' => 'America/New_York',
-  'US/Hawaii' => 'Pacific/Honolulu',
-  'US/Indiana-Starke' => 'America/Indiana/Knox',
-  'US/Michigan' => 'America/Detroit',
-  'US/Mountain' => 'America/Boise',
-  'US/Pacific' => 'America/Los_Angeles',
-  'US/Pacific-New' => 'America/Los_Angeles',
-  'US/Samoa' => 'Pacific/Samoa',
-  'W-SU' => 'Europe/Moscow',
-  'WET' => 'Europe/Paris',
+    'Brazil/Acre' => 'America/Rio_Branco',
+    'Brazil/DeNoronha' => 'America/Noronha',
+    'Brazil/East' => 'America/Recife',
+    'Brazil/West' => 'America/Manaus',
+    'Canada/Atlantic' => 'America/Halifax',
+    'Canada/Central' => 'America/Winnipeg',
+    'Canada/East-Saskatchewan' => 'America/Regina',
+    'Canada/Eastern' => 'America/Toronto',
+    'Canada/Mountain' => 'America/Edmonton',
+    'Canada/Newfoundland' => 'America/St_Johns',
+    'Canada/Pacific' => 'America/Vancouver',
+    'Canada/Saskatchewan' => 'America/Regina',
+    'Canada/Yukon' => 'America/Whitehorse',
+    'CET' => 'Europe/Berlin',
+    'Chile/Continental' => 'America/Santiago',
+    'Chile/EasterIsland' => 'Pacific/Easter',
+    'CST6CDT' => 'America/Chicago',
+    'Cuba' => 'America/Havana',
+    'EET' => 'Europe/Bucharest',
+    'Egypt' => 'Africa/Cairo',
+    'Eire' => 'Europe/Belfast',
+    'EST' => 'America/New_York',
+    'EST5EDT' => 'America/New_York',
+    'GB' => 'Europe/London',
+    'GB-Eire' => 'Europe/Belfast',
+    'Etc/GMT' => 'UTC',
+    'Etc/GMT+0' => 'UTC',
+    'Etc/GMT+1' => 'UTC',
+    'Etc/GMT+10' => 'UTC',
+    'Etc/GMT+11' => 'UTC',
+    'Etc/GMT+12' => 'UTC',
+    'Etc/GMT+2' => 'UTC',
+    'Etc/GMT+3' => 'UTC',
+    'Etc/GMT+4' => 'UTC',
+    'Etc/GMT+5' => 'UTC',
+    'Etc/GMT+6' => 'UTC',
+    'Etc/GMT+7' => 'UTC',
+    'Etc/GMT+8' => 'UTC',
+    'Etc/GMT+9' => 'UTC',
+    'Etc/GMT-0' => 'UTC',
+    'Etc/GMT-1' => 'UTC',
+    'Etc/GMT-10' => 'UTC',
+    'Etc/GMT-11' => 'UTC',
+    'Etc/GMT-12' => 'UTC',
+    'Etc/GMT-13' => 'UTC',
+    'Etc/GMT-14' => 'UTC',
+    'Etc/GMT-2' => 'UTC',
+    'Etc/GMT-3' => 'UTC',
+    'Etc/GMT-4' => 'UTC',
+    'Etc/GMT-5' => 'UTC',
+    'Etc/GMT-6' => 'UTC',
+    'Etc/GMT-7' => 'UTC',
+    'Etc/GMT-8' => 'UTC',
+    'Etc/GMT-9' => 'UTC',
+    'Etc/GMT0' => 'UTC',
+    'Etc/Greenwich' => 'UTC',
+    'Etc/UCT' => 'UTC',
+    'Etc/Universal' => 'UTC',
+    'Etc/UTC' => 'UTC',
+    'Etc/Zulu' => 'UTC',
+    'Factory' => 'UTC',
+    'GMT' => 'UTC',
+    'GMT+0' => 'UTC',
+    'GMT-0' => 'UTC',
+    'GMT0' => 'UTC',
+    'Hongkong' => 'Asia/Hong_Kong',
+    'HST' => 'Pacific/Honolulu',
+    'Iceland' => 'Atlantic/Reykjavik',
+    'Iran' => 'Asia/Tehran',
+    'Israel' => 'Asia/Tel_Aviv',
+    'Jamaica' => 'America/Jamaica',
+    'Japan' => 'Asia/Tokyo',
+    'Kwajalein' => 'Pacific/Kwajalein',
+    'Libya' => 'Africa/Tunis',
+    'MET' => 'Europe/Budapest',
+    'Mexico/BajaNorte' => 'America/Tijuana',
+    'Mexico/BajaSur' => 'America/Mazatlan',
+    'Mexico/General' => 'America/Mexico_City',
+    'MST' => 'America/Boise',
+    'MST7MDT' => 'America/Boise',
+    'Navajo' => 'America/Phoenix',
+    'NZ' => 'Pacific/Auckland',
+    'NZ-CHAT' => 'Pacific/Chatham',
+    'Poland' => 'Europe/Warsaw',
+    'Portugal' => 'Europe/Lisbon',
+    'PRC' => 'Asia/Chongqing',
+    'PST8PDT' => 'America/Los_Angeles',
+    'ROC' => 'Asia/Taipei',
+    'ROK' => 'Asia/Seoul',
+    'Singapore' => 'Asia/Singapore',
+    'Turkey' => 'Europe/Istanbul',
+    'US/Alaska' => 'America/Anchorage',
+    'US/Aleutian' => 'America/Adak',
+    'US/Arizona' => 'America/Phoenix',
+    'US/Central' => 'America/Chicago',
+    'US/East-Indiana' => 'America/Indianapolis',
+    'US/Eastern' => 'America/New_York',
+    'US/Hawaii' => 'Pacific/Honolulu',
+    'US/Indiana-Starke' => 'America/Indiana/Knox',
+    'US/Michigan' => 'America/Detroit',
+    'US/Mountain' => 'America/Boise',
+    'US/Pacific' => 'America/Los_Angeles',
+    'US/Pacific-New' => 'America/Los_Angeles',
+    'US/Samoa' => 'Pacific/Samoa',
+    'W-SU' => 'Europe/Moscow',
+    'WET' => 'Europe/Paris',
   );
   if (array_key_exists($old, $replace)) {
     return $replace[$old];
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date_api.info b/profiles/wcm_base/modules/contrib/date/date_api/date_api.info
index 3ca86e65..40fbb056 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date_api.info
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date_api.info
@@ -9,9 +9,9 @@ stylesheets[all][] = date.css
 files[] = date_api.module
 files[] = date_api_sql.inc
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date_api.install b/profiles/wcm_base/modules/contrib/date/date_api/date_api.install
index ce5b746d..d5a68bbd 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date_api.install
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date_api.install
@@ -96,7 +96,7 @@ function date_api_uninstall() {
     'date_php_min_year',
     'date_db_tz_support',
     'date_api_use_iso8601',
-    );
+  );
   foreach ($variables as $variable) {
     variable_del($variable);
   }
@@ -118,8 +118,9 @@ function date_api_update_last_removed() {
 }
 
 /**
- * Move old date format data to new date format tables, and delete the old
- * tables. Insert only values that don't already exist in the new tables, in
+ * Move old date format to new date format tables,and delete the old tables.
+ *
+ * Insert only values that don't already exist in the new tables, in
  * case new version of those custom values have already been created.
  */
 function date_api_update_7000() {
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date_api.module b/profiles/wcm_base/modules/contrib/date/date_api/date_api.module
index b1be6e5f..2a973ccf 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date_api.module
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date_api.module
@@ -59,16 +59,16 @@ function date_help($path, $arg) {
       }
 
       if (module_exists('date_tools')) {
-        $output .= '<h3>Date Tools</h3>' . t('Dates and calendars can be complicated to set up. The !date_wizard makes it easy to create a simple date content type and with a date field. ', array('!date_wizard' => l(t('Date wizard'), 'admin/config/date/tools/date_wizard')));
+        $output .= '<h3>Date Tools</h3>' . t('Dates and calendars can be complicated to set up. The !date_wizard makes it easy to create a simple date content type and with a date field.', array('!date_wizard' => l(t('Date wizard'), 'admin/config/date/tools/date_wizard')));
       }
       else {
-        $output .= '<h3>Date Tools</h3>' . t('Dates and calendars can be complicated to set up. If you enable the Date Tools module, it provides a Date Wizard that makes it easy to create a simple date content type with a date field. ');
+        $output .= '<h3>Date Tools</h3>' . t('Dates and calendars can be complicated to set up. If you enable the Date Tools module, it provides a Date Wizard that makes it easy to create a simple date content type with a date field.');
       }
 
       $output .= '<h2>More Information</h2><p>' . t('Complete documentation for the Date and Date API modules is available at <a href="@link">http://drupal.org/node/92460</a>.', array('@link' => 'http://drupal.org/node/262062')) . '</p>';
 
       return $output;
-      break;
+
   }
 }
 
@@ -101,7 +101,7 @@ function date_api_status() {
   $value = variable_get('date_format_medium');
   if (isset($value)) {
     $now = date_now();
-    $success_messages[] = $t('The medium date format type has been set to to @value. You may find it helpful to add new format types like Date, Time, Month, or Year, with appropriate formats, at <a href="@regional_date_time">Date and time</a> settings.', array('@value' => $now->format($value), '@regional_date_time' => url('admin/config/regional/date-time')));
+    $success_messages[] = $t('The medium date format type has been set to @value. You may find it helpful to add new format types like Date, Time, Month, or Year, with appropriate formats, at <a href="@regional_date_time">Date and time</a> settings.', array('@value' => $now->format($value), '@regional_date_time' => url('admin/config/regional/date-time')));
   }
   else {
     $error_messages[] = $t('The Date API requires that you set up the <a href="@regional_date_time">system date formats</a> to function correctly.', array('@regional_date_time' => url('admin/config/regional/date-time')));
@@ -143,7 +143,15 @@ function date_api_menu() {
 class DateObject extends DateTime {
   public $granularity = array();
   public $errors = array();
-  protected static $allgranularity = array('year', 'month', 'day', 'hour', 'minute', 'second', 'timezone');
+  protected static $allgranularity = array(
+    'year',
+    'month',
+    'day',
+    'hour',
+    'minute',
+    'second',
+    'timezone'
+  );
   private $serializedTime;
   private $serializedTimezone;
 
@@ -402,7 +410,7 @@ class DateObject extends DateTime {
    *   A single date part.
    */
   public function removeGranularity($g) {
-    if ($key = array_search($g, $this->granularity)) {
+    if (($key = array_search($g, $this->granularity)) !== FALSE) {
       unset($this->granularity[$key]);
     }
   }
@@ -458,23 +466,35 @@ class DateObject extends DateTime {
     $true = $this->hasGranularity() && (!$granularity || $flexible || $this->hasGranularity($granularity));
     if (!$true && $granularity) {
       foreach ((array) $granularity as $part) {
-        if (!$this->hasGranularity($part) && in_array($part, array('second', 'minute', 'hour', 'day', 'month', 'year'))) {
+        if (!$this->hasGranularity($part) && in_array($part, array(
+          'second',
+          'minute',
+          'hour',
+          'day',
+          'month',
+          'year')
+        )) {
           switch ($part) {
             case 'second':
               $this->errors[$part] = t('The second is missing.');
               break;
+
             case 'minute':
               $this->errors[$part] = t('The minute is missing.');
               break;
+
             case 'hour':
               $this->errors[$part] = t('The hour is missing.');
               break;
+
             case 'day':
               $this->errors[$part] = t('The day is missing.');
               break;
+
             case 'month':
               $this->errors[$part] = t('The month is missing.');
               break;
+
             case 'year':
               $this->errors[$part] = t('The year is missing.');
               break;
@@ -537,7 +557,14 @@ class DateObject extends DateTime {
     $temp = date_parse($time);
     // Special case for 'now'.
     if ($time == 'now') {
-      $this->granularity = array('year', 'month', 'day', 'hour', 'minute', 'second');
+      $this->granularity = array(
+        'year',
+        'month',
+        'day',
+        'hour',
+        'minute',
+        'second',
+      );
     }
     else {
       // This PHP date_parse() method currently doesn't have resolution down to
@@ -600,7 +627,14 @@ class DateObject extends DateTime {
       return FALSE;
     }
     $this->granularity = array();
-    $final_date = array('hour' => 0, 'minute' => 0, 'second' => 0, 'month' => 1, 'day' => 1, 'year' => 0);
+    $final_date = array(
+      'hour' => 0,
+      'minute' => 0,
+      'second' => 0,
+      'month' => 1,
+      'day' => 1,
+      'year' => 0,
+    );
     foreach ($letters as $i => $letter) {
       $value = $values[$i];
       switch ($letter) {
@@ -609,21 +643,25 @@ class DateObject extends DateTime {
           $final_date['day'] = intval($value);
           $this->addGranularity('day');
           break;
+
         case 'n':
         case 'm':
           $final_date['month'] = intval($value);
           $this->addGranularity('month');
           break;
+
         case 'F':
           $array_month_long = array_flip(date_month_names());
           $final_date['month'] = array_key_exists($value, $array_month_long) ? $array_month_long[$value] : -1;
           $this->addGranularity('month');
           break;
+
         case 'M':
           $array_month = array_flip(date_month_names_abbr());
           $final_date['month'] = array_key_exists($value, $array_month) ? $array_month[$value] : -1;
           $this->addGranularity('month');
           break;
+
         case 'Y':
           $final_date['year'] = $value;
           $this->addGranularity('year');
@@ -631,16 +669,19 @@ class DateObject extends DateTime {
             $this->errors['year'] = t('The year is invalid. Please check that entry includes four digits.');
           }
           break;
+
         case 'y':
           $year = $value;
           // If no century, we add the current one ("06" => "2006").
           $final_date['year'] = str_pad($year, 4, substr(date("Y"), 0, 2), STR_PAD_LEFT);
           $this->addGranularity('year');
           break;
+
         case 'a':
         case 'A':
           $ampm = strtolower($value);
           break;
+
         case 'g':
         case 'h':
         case 'G':
@@ -648,14 +689,17 @@ class DateObject extends DateTime {
           $final_date['hour'] = intval($value);
           $this->addGranularity('hour');
           break;
+
         case 'i':
           $final_date['minute'] = intval($value);
           $this->addGranularity('minute');
           break;
+
         case 's':
           $final_date['second'] = intval($value);
           $this->addGranularity('second');
           break;
+
         case 'U':
           parent::__construct($value, $tz ? $tz : new DateTimeZone("UTC"));
           $this->addGranularity('year');
@@ -665,7 +709,7 @@ class DateObject extends DateTime {
           $this->addGranularity('minute');
           $this->addGranularity('second');
           return $this;
-          break;
+
       }
     }
     if (isset($ampm) && $ampm == 'pm' && $final_date['hour'] < 12) {
@@ -758,10 +802,24 @@ class DateObject extends DateTime {
     // date or we will get date slippage, i.e. a value of 2011-00-00 will get
     // interpreted as November of 2010 by PHP.
     if ($full) {
-      $arr += array('year' => 0, 'month' => 1, 'day' => 1, 'hour' => 0, 'minute' => 0, 'second' => 0);
+      $arr += array(
+        'year' => 0,
+        'month' => 1,
+        'day' => 1,
+        'hour' => 0,
+        'minute' => 0,
+        'second' => 0,
+      );
     }
     else {
-      $arr += array('year' => '', 'month' => '', 'day' => '', 'hour' => '', 'minute' => '', 'second' => '');
+      $arr += array(
+        'year' => '',
+        'month' => '',
+        'day' => '',
+        'hour' => '',
+        'minute' => '',
+        'second' => '',
+      );
     }
     $datetime = '';
     if ($arr['year'] !== '') {
@@ -839,28 +897,27 @@ class DateObject extends DateTime {
       case 'year':
         $fallback = $now->format('Y');
         return !is_int($value) || empty($value) || $value < variable_get('date_min_year', 1) || $value > variable_get('date_max_year', 4000) ? $fallback : $value;
-        break;
+
       case 'month':
         $fallback = $default == 'first' ? 1 : $now->format('n');
         return !is_int($value) || empty($value) || $value <= 0 || $value > 12 ? $fallback : $value;
-        break;
+
       case 'day':
         $fallback = $default == 'first' ? 1 : $now->format('j');
         $max_day = isset($year) && isset($month) ? date_days_in_month($year, $month) : 31;
         return !is_int($value) || empty($value) || $value <= 0 || $value > $max_day ? $fallback : $value;
-        break;
+
       case 'hour':
         $fallback = $default == 'first' ? 0 : $now->format('G');
         return !is_int($value) || $value < 0 || $value > 23 ? $fallback : $value;
-        break;
+
       case 'minute':
         $fallback = $default == 'first' ? 0 : $now->format('i');
         return !is_int($value) || $value < 0 || $value > 59 ? $fallback : $value;
-        break;
+
       case 'second':
         $fallback = $default == 'first' ? 0 : $now->format('s');
         return !is_int($value) || $value < 0 || $value > 59 ? $fallback : $value;
-        break;
     }
   }
 
@@ -898,18 +955,23 @@ class DateObject extends DateTime {
           case 'year':
             $errors['year'] = t('The year is invalid.');
             break;
+
           case 'month':
             $errors['month'] = t('The month is invalid.');
             break;
+
           case 'day':
             $errors['day'] = t('The day is invalid.');
             break;
+
           case 'hour':
             $errors['hour'] = t('The hour is invalid.');
             break;
+
           case 'minute':
             $errors['minute'] = t('The minute is invalid.');
             break;
+
           case 'second':
             $errors['second'] = t('The second is invalid.');
             break;
@@ -929,7 +991,7 @@ class DateObject extends DateTime {
    *   The stop date.
    * @param string $measure
    *   (optional) A granularity date part. Defaults to 'seconds'.
-   * @param boolean $absolute
+   * @param bool $absolute
    *   (optional) Indicate whether the absolute value of the difference should
    *   be returned or if the sign should be retained. Defaults to TRUE.
    */
@@ -955,10 +1017,13 @@ class DateObject extends DateTime {
         // The easy cases first.
         case 'seconds':
           return $diff;
+
         case 'minutes':
           return $diff / 60;
+
         case 'hours':
           return $diff / 3600;
+
         case 'years':
           return $year_diff;
 
@@ -1013,7 +1078,7 @@ class DateObject extends DateTime {
           $sign = ($year_diff < 0) ? -1 : 1;
 
           for ($i = 1; $i <= abs($year_diff); $i++) {
-            date_modify($date1, (($sign > 0) ? '+': '-').'1 year');
+            date_modify($date1, (($sign > 0) ? '+' : '-') . '1 year');
             $week_diff += (date_iso_weeks_in_year($date1) * $sign);
           }
           return $week_diff;
@@ -1060,10 +1125,13 @@ function date_type_format($type) {
   switch ($type) {
     case DATE_ISO:
       return DATE_FORMAT_ISO;
+
     case DATE_UNIX:
       return DATE_FORMAT_UNIX;
+
     case DATE_DATETIME:
       return DATE_FORMAT_DATETIME;
+
     case DATE_ICAL:
       return DATE_FORMAT_ICAL;
   }
@@ -1119,7 +1187,7 @@ function date_month_names($required = FALSE) {
 }
 
 /**
- * Constructs a translated array of month name abbreviations
+ * Constructs a translated array of month name abbreviations.
  *
  * @param bool $required
  *   (optional) If FALSE, the returned array will include a blank value.
@@ -1211,9 +1279,11 @@ function date_week_days_abbr($required = FALSE, $refresh = TRUE, $length = 3) {
     case 1:
       $context = 'day_abbr1';
       break;
+
     case 2:
       $context = 'day_abbr2';
       break;
+
     default:
       $context = '';
       break;
@@ -1248,10 +1318,10 @@ function date_week_days_ordered($weekdays) {
 /**
  * Constructs an array of years.
  *
- * @param int $min
- *   The minimum year in the array.
- * @param int $max
- *   The maximum year in the array.
+ * @param int $start
+ *   The start year in the array.
+ * @param int $end
+ *   The end year in the array.
  * @param bool $required
  *   (optional) If FALSE, the returned array will include a blank value.
  *   Defaults to FALSE.
@@ -1259,16 +1329,16 @@ function date_week_days_ordered($weekdays) {
  * @return array
  *   An array of years in the selected range.
  */
-function date_years($min = 0, $max = 0, $required = FALSE) {
+function date_years($start = 0, $end = 0, $required = FALSE) {
   // Ensure $min and $max are valid values.
-  if (empty($min)) {
-    $min = intval(date('Y', REQUEST_TIME) - 3);
+  if (empty($start)) {
+    $start = intval(date('Y', REQUEST_TIME) - 3);
   }
-  if (empty($max)) {
-    $max = intval(date('Y', REQUEST_TIME) + 3);
+  if (empty($end)) {
+    $end = intval(date('Y', REQUEST_TIME) + 3);
   }
   $none = array(0 => '');
-  return !$required ? $none + drupal_map_assoc(range($min, $max)) : drupal_map_assoc(range($min, $max));
+  return !$required ? $none + drupal_map_assoc(range($start, $end)) : drupal_map_assoc(range($start, $end));
 }
 
 /**
@@ -1474,7 +1544,14 @@ function date_granularity_names() {
  *   An array of date parts.
  */
 function date_granularity_sorted($granularity) {
-  return array_intersect(array('year', 'month', 'day', 'hour', 'minute', 'second'), $granularity);
+  return array_intersect(array(
+    'year',
+    'month',
+    'day',
+    'hour',
+    'minute',
+    'second',
+  ), $granularity);
 }
 
 /**
@@ -1492,14 +1569,19 @@ function date_granularity_array_from_precision($precision) {
   switch ($precision) {
     case 'year':
       return array_slice($granularity_array, -6, 1);
+
     case 'month':
       return array_slice($granularity_array, -6, 2);
+
     case 'day':
       return array_slice($granularity_array, -6, 3);
+
     case 'hour':
       return array_slice($granularity_array, -6, 4);
+
     case 'minute':
       return array_slice($granularity_array, -6, 5);
+
     default:
       return $granularity_array;
   }
@@ -1533,14 +1615,19 @@ function date_granularity_format($granularity) {
   switch ($granularity) {
     case 'year':
       return substr($format, 0, 1);
+
     case 'month':
       return substr($format, 0, 3);
+
     case 'day':
       return substr($format, 0, 5);
+
     case 'hour';
       return substr($format, 0, 7);
+
     case 'minute':
       return substr($format, 0, 9);
+
     default:
       return $format;
   }
@@ -1657,40 +1744,51 @@ function date_format_date($date, $type = 'medium', $format = '', $langcode = NUL
       case 'l':
         $datestring .= t($date->format('l'), array(), array('context' => '', 'langcode' => $langcode));
         break;
+
       case 'D':
         $datestring .= t($date->format('D'), array(), array('context' => '', 'langcode' => $langcode));
         break;
+
       case 'F':
         $datestring .= t($date->format('F'), array(), array('context' => 'Long month name', 'langcode' => $langcode));
         break;
+
       case 'M':
         $datestring .= t($date->format('M'), array(), array('langcode' => $langcode));
         break;
+
       case 'A':
       case 'a':
         $datestring .= t($date->format($c), array(), array('context' => 'ampm', 'langcode' => $langcode));
         break;
+
       // The timezone name translations can use t().
       case 'e':
       case 'T':
         $datestring .= t($date->format($c));
         break;
+
       // Remaining date parts need no translation.
       case 'O':
         $datestring .= sprintf('%s%02d%02d', (date_offset_get($date) < 0 ? '-' : '+'), abs(date_offset_get($date) / 3600), abs(date_offset_get($date) % 3600) / 60);
         break;
+
       case 'P':
         $datestring .= sprintf('%s%02d:%02d', (date_offset_get($date) < 0 ? '-' : '+'), abs(date_offset_get($date) / 3600), abs(date_offset_get($date) % 3600) / 60);
         break;
+
       case 'Z':
         $datestring .= date_offset_get($date);
         break;
+
       case '\\':
         $datestring .= $format[++$i];
         break;
+
       case 'r':
-        $datestring .= date_format_date($date, 'custom', 'D, d M Y H:i:s O', $langcode);
+        $datestring .= date_format_date($date, 'custom', 'D, d M Y H:i:s O', 'en');
         break;
+
       default:
         if (strpos('BdcgGhHiIjLmnNosStTuUwWYyz', $c) !== FALSE) {
           $datestring .= $date->format($c);
@@ -1739,8 +1837,8 @@ function date_format_interval($date, $granularity = 2, $display_ago = TRUE) {
  *   (optional) Optionally force time to a specific timezone, defaults to user
  *   timezone, if set, otherwise site timezone. Defaults to NULL.
  *
- * @param boolean $reset [optional]
- *  Static cache reset
+ * @param bool $reset
+ *   (optional) Static cache reset.
  *
  * @return object
  *   The current time as a date object.
@@ -1831,7 +1929,7 @@ function date_days_in_month($year, $month) {
  * @param mixed $date
  *   (optional) The current date object, or a date string. Defaults to NULL.
  *
- * @return integer
+ * @return int
  *   The number of days in the year.
  */
 function date_days_in_year($date = NULL) {
@@ -1860,7 +1958,7 @@ function date_days_in_year($date = NULL) {
  * @param mixed $date
  *   (optional) The current date object, or a date string. Defaults to NULL.
  *
- * @return integer
+ * @return int
  *   The number of ISO weeks in a year.
  */
 function date_iso_weeks_in_year($date = NULL) {
@@ -1952,7 +2050,7 @@ function date_week_range($week, $year) {
 
   // Move forwards to the last day of the week.
   $max_date = clone($min_date);
-  date_modify($max_date, '+7 days');
+  date_modify($max_date, '+6 days');
 
   if (date_format($min_date, 'Y') != $year) {
     $min_date = new DateObject($year . '-01-01 00:00:00');
@@ -1986,7 +2084,7 @@ function date_iso_week_range($week, $year) {
 
   // Move forwards to the last day of the week.
   $max_date = clone($min_date);
-  date_modify($max_date, '+7 days');
+  date_modify($max_date, '+6 days');
   return array($min_date, $max_date);
 }
 
@@ -2094,7 +2192,8 @@ function date_has_time($granularity) {
   if (!is_array($granularity)) {
     $granularity = array();
   }
-  return (bool) count(array_intersect($granularity, array('hour', 'minute', 'second')));
+  $options = array('hour', 'minute', 'second');
+  return (bool) count(array_intersect($granularity, $options));
 }
 
 /**
@@ -2110,7 +2209,8 @@ function date_has_date($granularity) {
   if (!is_array($granularity)) {
     $granularity = array();
   }
-  return (bool) count(array_intersect($granularity, array('year', 'month', 'day')));
+  $options = array('year', 'month', 'day');
+  return (bool) count(array_intersect($granularity, $options));
 }
 
 /**
@@ -2128,8 +2228,10 @@ function date_part_format($part, $format) {
   switch ($part) {
     case 'date':
       return date_limit_format($format, array('year', 'month', 'day'));
+
     case 'time':
       return date_limit_format($format, array('hour', 'minute', 'second'));
+
     default:
       return date_limit_format($format, array($part));
   }
@@ -2157,7 +2259,7 @@ function date_limit_format($format, $granularity) {
     $drupal_static_fast['formats'] = &drupal_static(__FUNCTION__);
   }
   $formats = &$drupal_static_fast['formats'];
-  $format_granularity_cid = $format .'|'. implode(',', $granularity);
+  $format_granularity_cid = $format . '|' . implode(',', $granularity);
   if (isset($formats[$format_granularity_cid])) {
     return $formats[$format_granularity_cid];
   }
@@ -2191,21 +2293,27 @@ function date_limit_format($format, $granularity) {
       case 'year':
         $regex[] = '([\-/\.,:]?\s?(?<!\\\\)[Yy])';
         break;
+
       case 'day':
         $regex[] = '([\-/\.,:]?\s?(?<!\\\\)[l|D|d|dS|j|jS|N|w|W|z]{1,2})';
         break;
+
       case 'month':
         $regex[] = '([\-/\.,:]?\s?(?<!\\\\)[FMmn])';
         break;
+
       case 'hour':
         $regex[] = '([\-/\.,:]?\s?(?<!\\\\)[HhGg])';
         break;
+
       case 'minute':
         $regex[] = '([\-/\.,:]?\s?(?<!\\\\)[i])';
         break;
+
       case 'second':
         $regex[] = '([\-/\.,:]?\s?(?<!\\\\)[s])';
         break;
+
       case 'timezone':
         $regex[] = '([\-/\.,:]?\s?(?<!\\\\)[TOZPe])';
         break;
@@ -2278,25 +2386,30 @@ function date_format_order($format) {
       case 'j':
         $order[] = 'day';
         break;
+
       case 'F':
       case 'M':
       case 'm':
       case 'n':
         $order[] = 'month';
         break;
+
       case 'Y':
       case 'y':
         $order[] = 'year';
         break;
+
       case 'g':
       case 'G':
       case 'h':
       case 'H':
         $order[] = 'hour';
         break;
+
       case 'i':
         $order[] = 'minute';
         break;
+
       case 's':
         $order[] = 'second';
         break;
@@ -2315,7 +2428,16 @@ function date_format_order($format) {
  *   A reduced set of granularitiy elements.
  */
 function date_nongranularity($granularity) {
-  return array_diff(array('year', 'month', 'day', 'hour', 'minute', 'second', 'timezone'), (array) $granularity);
+  $options = array(
+    'year',
+    'month',
+    'day',
+    'hour',
+    'minute',
+    'second',
+    'timezone',
+  );
+  return array_diff($options, (array) $granularity);
 }
 
 /**
@@ -2335,7 +2457,11 @@ function date_api_theme($existing, $type, $theme, $path) {
     'path' => "$path/theme",
   );
   return array(
-    'date_nav_title' => $base + array('variables' => array('granularity' => NULL, 'view' => NULL, 'link' => NULL, 'format' => NULL)),
+    'date_nav_title' => $base + array(
+      'variables' => array(
+        'granularity' => NULL, 'view' => NULL, 'link' => NULL, 'format' => NULL
+      ),
+    ),
     'date_timezone' => $base + array('render element' => 'element'),
     'date_select' => $base + array('render element' => 'element'),
     'date_text' => $base + array('render element' => 'element'),
@@ -2355,7 +2481,11 @@ function date_api_theme($existing, $type, $theme, $path) {
     'date_part_label_time' => $base + array('variables' => array('date_part' => NULL, 'element' => NULL)),
     'date_views_filter_form' => $base + array('template' => 'date-views-filter-form', 'render element' => 'form'),
     'date_calendar_day' => $base + array('variables' => array('date' => NULL)),
-    'date_time_ago' => $base + array('variables' => array('start_date' => NULL, 'end_date' => NULL, 'interval' => NULL)),
+    'date_time_ago' => $base + array(
+      'variables' => array(
+        'start_date' => NULL, 'end_date' => NULL, 'interval' => NULL
+      ),
+    ),
   );
 }
 
@@ -2375,9 +2505,11 @@ function date_get_timezone($handling, $timezone = '') {
     case 'date':
       $timezone = !empty($timezone) ? $timezone : date_default_timezone();
       break;
+
     case 'utc':
       $timezone = 'UTC';
       break;
+
     default:
       $timezone = date_default_timezone();
   }
@@ -2404,6 +2536,7 @@ function date_get_timezone_db($handling, $timezone = NULL) {
       // These handling modes all convert to UTC before storing in the DB.
       $timezone = 'UTC';
       break;
+
     case ('date'):
       if ($timezone == NULL) {
         // This shouldn't happen, since it's meaning is undefined. But we need
@@ -2411,6 +2544,7 @@ function date_get_timezone_db($handling, $timezone = NULL) {
         $timezone = date_default_timezone();
       }
       break;
+
     case ('none'):
     default:
       $timezone = date_default_timezone();
@@ -2465,12 +2599,12 @@ function date_order() {
  *   TRUE if the date range is valid, FALSE otherwise.
  */
 function date_range_valid($string) {
-  $matches = preg_match('@^(\-[0-9]+|[0-9]{4}):([\+|\-][0-9]+|[0-9]{4})$@', $string);
+  $matches = preg_match('@^([\+\-][0-9]+|[0-9]{4}):([\+\-][0-9]+|[0-9]{4})$@', $string);
   return $matches < 1 ? FALSE : TRUE;
 }
 
 /**
- * Splits a string like -3:+3 or 2001:2010 into an array of min and max years.
+ * Splits a string like -3:+3 or 2001:2010 into an array of start and end years.
  *
  * Center the range around the current year, if any, but expand it far
  * enough so it will pick up the year value in the field in case
@@ -2482,45 +2616,44 @@ function date_range_valid($string) {
  *   (optional) A date object. Defaults to NULL.
  *
  * @return array
- *   A numerically indexed array, containing a minimum and maximum year.
+ *   A numerically indexed array, containing a start and end year.
  */
 function date_range_years($string, $date = NULL) {
   $this_year = date_format(date_now(), 'Y');
-  list($min_year, $max_year) = explode(':', $string);
+  list($start_year, $end_year) = explode(':', $string);
 
   // Valid patterns would be -5:+5, 0:+1, 2008:2010.
-  $plus_pattern = '@[\+|\-][0-9]{1,4}@';
+  $plus_pattern = '@[\+\-][0-9]{1,4}@';
   $year_pattern = '@^[0-9]{4}@';
-  if (!preg_match($year_pattern, $min_year, $matches)) {
-    if (preg_match($plus_pattern, $min_year, $matches)) {
-      $min_year = $this_year + $matches[0];
+  if (!preg_match($year_pattern, $start_year, $matches)) {
+    if (preg_match($plus_pattern, $start_year, $matches)) {
+      $start_year = $this_year + $matches[0];
     }
     else {
-      $min_year = $this_year;
+      $start_year = $this_year;
     }
   }
-  if (!preg_match($year_pattern, $max_year, $matches)) {
-    if (preg_match($plus_pattern, $max_year, $matches)) {
-      $max_year = $this_year + $matches[0];
+  if (!preg_match($year_pattern, $end_year, $matches)) {
+    if (preg_match($plus_pattern, $end_year, $matches)) {
+      $end_year = $this_year + $matches[0];
     }
     else {
-      $max_year = $this_year;
+      $end_year = $this_year;
     }
   }
-  // We expect the $min year to be less than the $max year.
-  // Some custom values for -99:+99 might not obey that.
-  if ($min_year > $max_year) {
-    $temp = $max_year;
-    $max_year = $min_year;
-    $min_year = $temp;
-  }
   // If there is a current value, stretch the range to include it.
   $value_year = is_object($date) ? $date->format('Y') : '';
   if (!empty($value_year)) {
-    $min_year = min($value_year, $min_year);
-    $max_year = max($value_year, $max_year);
+    if ($start_year <= $end_year) {
+      $start_year = min($value_year, $start_year);
+      $end_year = max($value_year, $end_year);
+    }
+    else {
+      $start_year = max($value_year, $start_year);
+      $end_year = min($value_year, $end_year);
+    }
   }
-  return array($min_year, $max_year);
+  return array($start_year, $end_year);
 }
 
 /**
@@ -2680,6 +2813,7 @@ function date_is_all_day($string1, $string2, $granularity = 'second', $increment
         || ($hour2 == 23 && in_array($min2, array($max_minutes, 59)) && in_array($sec2, array($max_seconds, 59)))
         || ($hour1 == 0 && $hour2 == 0 && $min1 == 0 && $min2 == 0 && $sec1 == 0 && $sec2 == 0);
       break;
+
     case 'minute':
       $min_match = $time1 == '00:00:00'
         || ($hour1 == 0 && $min1 == 0);
@@ -2687,6 +2821,7 @@ function date_is_all_day($string1, $string2, $granularity = 'second', $increment
         || ($hour2 == 23 && in_array($min2, array($max_minutes, 59)))
         || ($hour1 == 0 && $hour2 == 0 && $min1 == 0 && $min2 == 0);
       break;
+
     case 'hour':
       $min_match = $time1 == '00:00:00'
         || ($hour1 == 0);
@@ -2694,6 +2829,7 @@ function date_is_all_day($string1, $string2, $granularity = 'second', $increment
         || ($hour2 == 23)
         || ($hour1 == 0 && $hour2 == 0);
       break;
+
     default:
       $min_match = TRUE;
       $max_match = FALSE;
@@ -2754,15 +2890,21 @@ function date_is_date($date) {
 }
 
 /**
- * This function will replace ISO values that have the pattern 9999-00-00T00:00:00
- * with a pattern like 9999-01-01T00:00:00, to match the behavior of non-ISO
- * dates and ensure that date objects created from this value contain a valid month
- * and day. Without this fix, the ISO date '2020-00-00T00:00:00' would be created as
+ * Replace specific ISO values using patterns.
+ *
+ * Function will replace ISO values that have the pattern 9999-00-00T00:00:00
+ * with a pattern like 9999-01-01T00:00:00, to match the behavior of non-ISO dates
+ * and ensure that date objects created from this value contain a valid month
+ * and day.
+ * Without this fix, the ISO date '2020-00-00T00:00:00' would be created as
  * November 30, 2019 (the previous day in the previous month).
  *
  * @param string $iso_string
  *   An ISO string that needs to be made into a complete, valid date.
  *
+ * @return mixed|string
+ *   replaced value, or incoming value.
+ *
  * @TODO Expand on this to work with all sorts of partial ISO dates.
  */
 function date_make_iso_valid($iso_string) {
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date_api_elements.inc b/profiles/wcm_base/modules/contrib/date/date_api/date_api_elements.inc
index 57e41615..fc91205c 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date_api_elements.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date_api_elements.inc
@@ -116,15 +116,19 @@ function date_default_date($element) {
       case 16:
         $format = 'Y-m-d H:i';
         break;
+
       case 13:
         $format = 'Y-m-d H';
         break;
+
       case 10:
         $format = 'Y-m-d';
         break;
+
       case 7:
         $format = 'Y-m';
         break;
+
       case 4:
         $format = 'Y';
         break;
@@ -170,7 +174,7 @@ function date_year_range_element_process($element, &$form_state, $form) {
   $element['#attached']['js'][] = drupal_get_path('module', 'date_api') . '/date_year_range.js';
 
   $context = array(
-   'form' => $form,
+    'form' => $form,
   );
   drupal_alter('date_year_range_process', $element, $form_state, $context);
 
@@ -256,7 +260,7 @@ function date_timezone_element_process($element, &$form_state, $form) {
   }
 
   $context = array(
-   'form' => $form,
+    'form' => $form,
   );
   drupal_alter('date_timezone_process', $element, $form_state, $context);
 
@@ -264,7 +268,7 @@ function date_timezone_element_process($element, &$form_state, $form) {
 }
 
 /**
- *  Validation for timezone input
+ * Validation for timezone input.
  *
  *  Move the timezone value from the nested field back to the original field.
  */
@@ -307,7 +311,6 @@ function date_text_element_value_callback($element, $input = FALSE, &$form_state
  *
  * The exact parts displayed in the field are those in #date_granularity.
  * The display of each part comes from #date_format.
- *
  */
 function date_text_element_process($element, &$form_state, $form) {
   if (date_hidden_element($element)) {
@@ -323,9 +326,18 @@ function date_text_element_process($element, &$form_state, $form) {
   $now = date_example_date();
   $element['date']['#title'] = t('Date');
   $element['date']['#title_display'] = 'invisible';
-  $element['date']['#description'] = ' ' . t('Format: @date', array('@date' => date_format_date(date_example_date(), 'custom', $element['#date_format'])));
+  $element['date']['#description'] = ' ' . t('Format: @date', array(
+    '@date' => date_format_date(date_example_date(), 'custom', $element['#date_format']
+  )));
   $element['date']['#ajax'] = !empty($element['#ajax']) ? $element['#ajax'] : FALSE;
 
+  // Make changes if instance is set to be rendered as a regular field.
+  if (!empty($element['#instance']['widget']['settings']['no_fieldset']) && $element['#field']['cardinality'] == 1) {
+    $element['date']['#title'] = check_plain($element['#instance']['label']);
+    $element['date']['#title_display'] = $element['#title_display'];
+    $element['date']['#required'] = $element['#required'];
+  }
+
   // Keep the system from creating an error message for the sub-element.
   // We'll set our own message on the parent element.
   // $element['date']['#required'] = $element['#required'];
@@ -341,7 +353,7 @@ function date_text_element_process($element, &$form_state, $form) {
   }
 
   $context = array(
-   'form' => $form,
+    'form' => $form,
   );
   drupal_alter('date_text_process', $element, $form_state, $context);
 
@@ -349,12 +361,11 @@ function date_text_element_process($element, &$form_state, $form) {
 }
 
 /**
- *  Validation for text input.
+ * Validation for text input.
  *
  * When used as a Views widget, the validation step always gets triggered,
  * even with no form submission. Before form submission $element['#value']
  * contains a string, after submission it contains an array.
- *
  */
 function date_text_validate($element, &$form_state) {
   if (date_hidden_element($element)) {
@@ -367,6 +378,11 @@ function date_text_validate($element, &$form_state) {
   $input_exists = NULL;
   $input = drupal_array_get_nested_value($form_state['values'], $element['#parents'], $input_exists);
 
+  // Trim extra spacing off user input of text fields.
+  if (isset($input['date'])) {
+    $input['date'] = trim($input['date']);
+  }
+
   drupal_alter('date_text_pre_validate', $element, $form_state, $input);
 
   $label = !empty($element['#date_title']) ? $element['#date_title'] : (!empty($element['#title']) ? $element['#title'] : '');
@@ -421,7 +437,14 @@ function date_text_input_date($element, $input) {
  * Element value callback for date_select element.
  */
 function date_select_element_value_callback($element, $input = FALSE, &$form_state = array()) {
-  $return = array('year' => '', 'month' => '', 'day' => '', 'hour' => '', 'minute' => '', 'second' => '');
+  $return = array(
+    'year' => '',
+    'month' => '',
+    'day' => '',
+    'hour' => '',
+    'minute' => '',
+    'second' => '',
+  );
   $date = NULL;
   if ($input !== FALSE) {
     $return = $input;
@@ -431,7 +454,14 @@ function date_select_element_value_callback($element, $input = FALSE, &$form_sta
     $date = date_default_date($element);
   }
   $granularity = date_format_order($element['#date_format']);
-  $formats = array('year' => 'Y', 'month' => 'n', 'day' => 'j', 'hour' => 'H', 'minute' => 'i', 'second' => 's');
+  $formats = array(
+    'year' => 'Y',
+    'month' => 'n',
+    'day' => 'j',
+    'hour' => 'H',
+    'minute' => 'i',
+    'second' => 's',
+  );
   foreach ($granularity as $field) {
     if ($field != 'timezone') {
       $return[$field] = date_is_date($date) ? $date->format($formats[$field]) : '';
@@ -449,7 +479,6 @@ function date_select_element_value_callback($element, $input = FALSE, &$form_sta
  *
  * The exact parts displayed in the field are those in #date_granularity.
  * The display of each part comes from ['#date_settings']['format'].
- *
  */
 function date_select_element_process($element, &$form_state, $form) {
   if (date_hidden_element($element)) {
@@ -473,7 +502,14 @@ function date_select_element_process($element, &$form_state, $form) {
 
   // Store a hidden value for all date parts not in the current display.
   $granularity = date_format_order($element['#date_format']);
-  $formats = array('year' => 'Y', 'month' => 'n', 'day' => 'j', 'hour' => 'H', 'minute' => 'i', 'second' => 's');
+  $formats = array(
+    'year' => 'Y',
+    'month' => 'n',
+    'day' => 'j',
+    'hour' => 'H',
+    'minute' => 'i',
+    'second' => 's',
+  );
   foreach (date_nongranularity($granularity) as $field) {
     if ($field != 'timezone') {
       $element[$field] = array(
@@ -490,7 +526,7 @@ function date_select_element_process($element, &$form_state, $form) {
   }
 
   $context = array(
-   'form' => $form,
+    'form' => $form,
   );
   drupal_alter('date_select_process', $element, $form_state, $context);
 
@@ -521,7 +557,7 @@ function date_parts_element($element, $date, $format) {
   $sub_element = array('#granularity' => $granularity);
   $order = array_flip($granularity);
 
-  $hours_format  = strpos(strtolower($element['#date_format']), 'a') ? 'g': 'G';
+  $hours_format  = strpos(strtolower($element['#date_format']), 'a') ? 'g' : 'G';
   $month_function  = strpos($element['#date_format'], 'F') !== FALSE ? 'date_month_names' : 'date_month_names_abbr';
   $count = 0;
   $increment = min(intval($element['#date_increment']), 1);
@@ -539,26 +575,29 @@ function date_parts_element($element, $date, $format) {
     switch ($field) {
       case 'year':
         $range = date_range_years($element['#date_year_range'], $date);
-        $min_year = $range[0];
-        $max_year = $range[1];
+        $start_year = $range[0];
+        $end_year = $range[1];
 
         $sub_element[$field]['#default_value'] = is_object($date) ? $date->format('Y') : '';
         if ($part_type == 'select') {
-          $sub_element[$field]['#options'] = drupal_map_assoc(date_years($min_year, $max_year, $part_required));
+          $sub_element[$field]['#options'] = drupal_map_assoc(date_years($start_year, $end_year, $part_required));
         }
         break;
+
       case 'month':
         $sub_element[$field]['#default_value'] = is_object($date) ? $date->format('n') : '';
         if ($part_type == 'select') {
           $sub_element[$field]['#options'] = $month_function($part_required);
         }
         break;
+
       case 'day':
         $sub_element[$field]['#default_value'] = is_object($date) ? $date->format('j') : '';
         if ($part_type == 'select') {
           $sub_element[$field]['#options'] = drupal_map_assoc(date_days($part_required));
         }
         break;
+
       case 'hour':
         $sub_element[$field]['#default_value'] = is_object($date) ? $date->format($hours_format) : '';
         if ($part_type == 'select') {
@@ -566,6 +605,7 @@ function date_parts_element($element, $date, $format) {
         }
         $sub_element[$field]['#prefix'] = theme('date_part_hour_prefix', $element);
         break;
+
       case 'minute':
         $sub_element[$field]['#default_value'] = is_object($date) ? $date->format('i') : '';
         if ($part_type == 'select') {
@@ -573,6 +613,7 @@ function date_parts_element($element, $date, $format) {
         }
         $sub_element[$field]['#prefix'] = theme('date_part_minsec_prefix', $element);
         break;
+
       case 'second':
         $sub_element[$field]['#default_value'] = is_object($date) ? $date->format('s') : '';
         if ($part_type == 'select') {
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date_api_ical.inc b/profiles/wcm_base/modules/contrib/date/date_api/date_api_ical.inc
index 2ca484e7..4911298c 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date_api_ical.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date_api_ical.inc
@@ -181,6 +181,7 @@ function date_ical_parse($icaldatafolded = array()) {
               $parent[array_pop($parents)][] = array_pop($subgroups);
             }
             break;
+
           // Add the timezones in with their index their TZID.
           case 'VTIMEZONE':
             $subgroup = end($subgroups);
@@ -196,6 +197,7 @@ function date_ical_parse($icaldatafolded = array()) {
             array_pop($subgroups);
             array_pop($parents);
             break;
+
           // Do some fun stuff with durations and all_day events and then append
           // to parent.
           case 'VEVENT':
@@ -222,9 +224,9 @@ function date_ical_parse($icaldatafolded = array()) {
             // assumes the end date is inclusive.
             if (!empty($subgroup['DTEND']) && (!empty($subgroup['DTEND']['all_day']))) {
               // Make the end date one day earlier.
-              $date = new DateObject ($subgroup['DTEND']['datetime'] . ' 00:00:00', $subgroup['DTEND']['tz']);
+              $date = new DateObject($subgroup['DTEND']['datetime'] . ' 00:00:00', $subgroup['DTEND']['tz']);
               date_modify($date, '-1 day');
-              $subgroup['DTEND']['datetime'] = date_format($date,  'Y-m-d');
+              $subgroup['DTEND']['datetime'] = date_format($date, 'Y-m-d');
             }
             // If a start datetime is defined AND there is no definition for
             // the end datetime THEN make the end datetime equal the start
@@ -239,7 +241,7 @@ function date_ical_parse($icaldatafolded = array()) {
             if (!empty($subgroup['DTSTART']['all_day'])) {
               $subgroup['all_day'] = TRUE;
             }
-            // Add this element to the parent as an array under the
+            // Add this element to the parent as an array under the.
             prev($subgroups);
             $parent = &$subgroups[key($subgroups)];
 
@@ -264,12 +266,13 @@ function date_ical_parse($icaldatafolded = array()) {
       $field = !empty($matches[2]) ? $matches[2] : '';
       $data = !empty($matches[3]) ? $matches[3] : '';
       $parse_result = '';
+
       switch ($name) {
         // Keep blank lines out of the results.
         case '':
           break;
 
-          // Lots of properties have date values that must be parsed out.
+        // Lots of properties have date values that must be parsed out.
         case 'CREATED':
         case 'LAST-MODIFIED':
         case 'DTSTART':
@@ -317,9 +320,9 @@ function date_ical_parse($icaldatafolded = array()) {
           $parse_result = date_ical_parse_location($field, $data);
           break;
 
-          // For all other properties, just store the property and the value.
-          // This can be expanded on in the future if other properties should
-          // be given special treatment.
+        // For all other properties, just store the property and the value.
+        // This can be expanded on in the future if other properties should
+        // be given special treatment.
         default:
           $parse_result = $data;
           break;
@@ -360,7 +363,7 @@ function date_ical_parse($icaldatafolded = array()) {
  *                      has no timezone; the ical specs say no timezone
  *                      conversion should be done if no timezone info is
  *                      supplied
- *  @todo
+ * @todo
  *   Another option for dates is the format PROPERTY;VALUE=PERIOD:XXXX. The
  *   period may include a duration, or a date and a duration, or two dates, so
  *   would have to be split into parts and run through date_ical_parse_date()
@@ -401,6 +404,7 @@ function date_ical_parse_date($field, $data) {
         // Date.
         $datetime = date_pad($regs[1]) . '-' . date_pad($regs[2]) . '-' . date_pad($regs[3]);
         break;
+
       case 'DATE-TIME':
         preg_match(DATE_REGEX_ICAL_DATETIME, $data, $regs);
         // Date.
@@ -519,12 +523,12 @@ function date_ical_parse_duration(&$subgroup, $field = 'DURATION') {
   $data  = $items['DATA'];
   preg_match('/^P(\d{1,4}[Y])?(\d{1,2}[M])?(\d{1,2}[W])?(\d{1,2}[D])?([T]{0,1})?(\d{1,2}[H])?(\d{1,2}[M])?(\d{1,2}[S])?/', $data, $duration);
   $items['year'] = isset($duration[1]) ? str_replace('Y', '', $duration[1]) : '';
-  $items['month'] = isset($duration[2]) ?str_replace('M', '', $duration[2]) : '';
-  $items['week'] = isset($duration[3]) ?str_replace('W', '', $duration[3]) : '';
-  $items['day'] = isset($duration[4]) ?str_replace('D', '', $duration[4]) : '';
-  $items['hour'] = isset($duration[6]) ?str_replace('H', '', $duration[6]) : '';
-  $items['minute'] = isset($duration[7]) ?str_replace('M', '', $duration[7]) : '';
-  $items['second'] = isset($duration[8]) ?str_replace('S', '', $duration[8]) : '';
+  $items['month'] = isset($duration[2]) ? str_replace('M', '', $duration[2]) : '';
+  $items['week'] = isset($duration[3]) ? str_replace('W', '', $duration[3]) : '';
+  $items['day'] = isset($duration[4]) ? str_replace('D', '', $duration[4]) : '';
+  $items['hour'] = isset($duration[6]) ? str_replace('H', '', $duration[6]) : '';
+  $items['minute'] = isset($duration[7]) ? str_replace('M', '', $duration[7]) : '';
+  $items['second'] = isset($duration[8]) ? str_replace('S', '', $duration[8]) : '';
   $start_date = array_key_exists('DTSTART', $subgroup) ? $subgroup['DTSTART']['datetime'] : date_format(date_now(), DATE_FORMAT_ISO);
   $timezone = array_key_exists('DTSTART', $subgroup) ? $subgroup['DTSTART']['tz'] : variable_get('date_default_timezone');
   if (empty($timezone)) {
@@ -542,7 +546,7 @@ function date_ical_parse_duration(&$subgroup, $field = 'DURATION') {
     'datetime' => date_format($date2, DATE_FORMAT_DATETIME),
     'all_day' => isset($subgroup['DTSTART']['all_day']) ? $subgroup['DTSTART']['all_day'] : 0,
     'tz' => $timezone,
-    );
+  );
   $duration = date_format($date2, 'U') - date_format($date, 'U');
   $subgroup['DURATION'] = array('DATA' => $data, 'DURATION' => $duration);
 }
@@ -631,7 +635,6 @@ function date_ical_date($ical_date, $to_tz = FALSE) {
  *
  * @return string
  *   Escaped text
- *
  */
 function date_ical_escape_text($text) {
   $text = drupal_html_to_text($text);
@@ -693,14 +696,14 @@ function date_ical_escape_text($text) {
  *     )
  */
 function date_api_ical_build_rrule($form_values) {
-  $RRULE = '';
+  $rrule = '';
   if (empty($form_values) || !is_array($form_values)) {
-    return $RRULE;
+    return $rrule;
   }
 
   // Grab the RRULE data and put them into iCal RRULE format.
-  $RRULE .= 'RRULE:FREQ=' . (!array_key_exists('FREQ', $form_values) ? 'DAILY' : $form_values['FREQ']);
-  $RRULE .= ';INTERVAL=' . (!array_key_exists('INTERVAL', $form_values) ? 1 : $form_values['INTERVAL']);
+  $rrule .= 'RRULE:FREQ=' . (!array_key_exists('FREQ', $form_values) ? 'DAILY' : $form_values['FREQ']);
+  $rrule .= ';INTERVAL=' . (!array_key_exists('INTERVAL', $form_values) ? 1 : $form_values['INTERVAL']);
 
   // Unset the empty 'All' values.
   if (array_key_exists('BYDAY', $form_values) && is_array($form_values['BYDAY'])) {
@@ -713,14 +716,14 @@ function date_api_ical_build_rrule($form_values) {
     unset($form_values['BYMONTHDAY']['']);
   }
 
-  if (array_key_exists('BYDAY', $form_values) && is_array($form_values['BYDAY']) && $BYDAY = implode(",", $form_values['BYDAY'])) {
-    $RRULE .= ';BYDAY=' . $BYDAY;
+  if (array_key_exists('BYDAY', $form_values) && is_array($form_values['BYDAY']) && $byday = implode(",", $form_values['BYDAY'])) {
+    $rrule .= ';BYDAY=' . $byday;
   }
-  if (array_key_exists('BYMONTH', $form_values) && is_array($form_values['BYMONTH']) && $BYMONTH = implode(",", $form_values['BYMONTH'])) {
-    $RRULE .= ';BYMONTH=' . $BYMONTH;
+  if (array_key_exists('BYMONTH', $form_values) && is_array($form_values['BYMONTH']) && $bymonth = implode(",", $form_values['BYMONTH'])) {
+    $rrule .= ';BYMONTH=' . $bymonth;
   }
-  if (array_key_exists('BYMONTHDAY', $form_values) && is_array($form_values['BYMONTHDAY']) && $BYMONTHDAY = implode(",", $form_values['BYMONTHDAY'])) {
-    $RRULE .= ';BYMONTHDAY=' . $BYMONTHDAY;
+  if (array_key_exists('BYMONTHDAY', $form_values) && is_array($form_values['BYMONTHDAY']) && $bymonthday = implode(",", $form_values['BYMONTHDAY'])) {
+    $rrule .= ';BYMONTHDAY=' . $bymonthday;
   }
   // The UNTIL date is supposed to always be expressed in UTC.
   // The input date values may already have been converted to a date object on a
@@ -731,8 +734,17 @@ function date_api_ical_build_rrule($form_values) {
     if (!is_object($form_values['UNTIL']['datetime'])) {
       // If this is a date without time, give it time.
       if (strlen($form_values['UNTIL']['datetime']) < 11) {
+        $granularity_options = drupal_map_assoc(array(
+          'year',
+          'month',
+          'day',
+          'hour',
+          'minute',
+          'second',
+        ));
+
         $form_values['UNTIL']['datetime'] .= ' 23:59:59';
-        $form_values['UNTIL']['granularity'] = serialize(drupal_map_assoc(array('year', 'month', 'day', 'hour', 'minute', 'second')));
+        $form_values['UNTIL']['granularity'] = serialize($granularity_options);
         $form_values['UNTIL']['all_day'] = FALSE;
       }
       $until = date_ical_date($form_values['UNTIL'], 'UTC');
@@ -740,21 +752,21 @@ function date_api_ical_build_rrule($form_values) {
     else {
       $until = $form_values['UNTIL']['datetime'];
     }
-    $RRULE .= ';UNTIL=' . date_format($until, DATE_FORMAT_ICAL) . 'Z';
+    $rrule .= ';UNTIL=' . date_format($until, DATE_FORMAT_ICAL) . 'Z';
   }
   // Our form doesn't allow a value for COUNT, but it may be needed by
   // modules using the API, so add it to the rule.
   if (array_key_exists('COUNT', $form_values)) {
-    $RRULE .= ';COUNT=' . $form_values['COUNT'];
+    $rrule .= ';COUNT=' . $form_values['COUNT'];
   }
 
   // iCal rules presume the week starts on Monday unless otherwise specified,
   // so we'll specify it.
   if (array_key_exists('WKST', $form_values)) {
-    $RRULE .= ';WKST=' . $form_values['WKST'];
+    $rrule .= ';WKST=' . $form_values['WKST'];
   }
   else {
-    $RRULE .= ';WKST=' . date_repeat_dow2day(variable_get('date_first_day', 0));
+    $rrule .= ';WKST=' . date_repeat_dow2day(variable_get('date_first_day', 0));
   }
 
   // Exceptions dates go last, on their own line.
@@ -765,7 +777,7 @@ function date_api_ical_build_rrule($form_values) {
     foreach ($form_values['EXDATE'] as $value) {
       if (!empty($value['datetime'])) {
         $date = !is_object($value['datetime']) ? date_ical_date($value, 'UTC') : $value['datetime'];
-        $ex_date = !empty($date) ? date_format($date, DATE_FORMAT_ICAL) . 'Z': '';
+        $ex_date = !empty($date) ? date_format($date, DATE_FORMAT_ICAL) . 'Z' : '';
         if (!empty($ex_date)) {
           $ex_dates[] = $ex_date;
         }
@@ -773,11 +785,11 @@ function date_api_ical_build_rrule($form_values) {
     }
     if (!empty($ex_dates)) {
       sort($ex_dates);
-      $RRULE .= chr(13) . chr(10) . 'EXDATE:' . implode(',', $ex_dates);
+      $rrule .= chr(13) . chr(10) . 'EXDATE:' . implode(',', $ex_dates);
     }
   }
   elseif (!empty($form_values['EXDATE'])) {
-    $RRULE .= chr(13) . chr(10) . 'EXDATE:' . $form_values['EXDATE'];
+    $rrule .= chr(13) . chr(10) . 'EXDATE:' . $form_values['EXDATE'];
   }
 
   // Exceptions dates go last, on their own line.
@@ -785,19 +797,19 @@ function date_api_ical_build_rrule($form_values) {
     $ex_dates = array();
     foreach ($form_values['RDATE'] as $value) {
       $date = !is_object($value['datetime']) ? date_ical_date($value, 'UTC') : $value['datetime'];
-      $ex_date = !empty($date) ? date_format($date, DATE_FORMAT_ICAL) . 'Z': '';
+      $ex_date = !empty($date) ? date_format($date, DATE_FORMAT_ICAL) . 'Z' : '';
       if (!empty($ex_date)) {
         $ex_dates[] = $ex_date;
       }
     }
     if (!empty($ex_dates)) {
       sort($ex_dates);
-      $RRULE .= chr(13) . chr(10) . 'RDATE:' . implode(',', $ex_dates);
+      $rrule .= chr(13) . chr(10) . 'RDATE:' . implode(',', $ex_dates);
     }
   }
   elseif (!empty($form_values['RDATE'])) {
-    $RRULE .= chr(13) . chr(10) . 'RDATE:' . $form_values['RDATE'];
+    $rrule .= chr(13) . chr(10) . 'RDATE:' . $form_values['RDATE'];
   }
 
-  return $RRULE;
+  return $rrule;
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/date_api_sql.inc b/profiles/wcm_base/modules/contrib/date/date_api/date_api_sql.inc
index e02f0507..a95ca4ef 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/date_api_sql.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_api/date_api_sql.inc
@@ -23,13 +23,14 @@ function date_sql_concat($array) {
   switch (Database::getConnection()->databaseType()) {
     case 'mysql':
       return "CONCAT(" . implode(",", $array) . ")";
+
     case 'pgsql':
       return implode(" || ", $array);
   }
 }
 
 /**
- * Helper function to do cross-database NULL replacements
+ * Helper function to do cross-database NULL replacements.
  *
  * @param array $array
  *   An array of values to test for NULL values.
@@ -61,6 +62,7 @@ function date_sql_pad($str, $size = 2, $pad = '0', $side = 'l') {
   switch ($side) {
     case 'r':
       return "RPAD($str, $size, '$pad')";
+
     default:
       return "LPAD($str, $size, '$pad')";
   }
@@ -69,6 +71,7 @@ function date_sql_pad($str, $size = 2, $pad = '0', $side = 'l') {
 /**
  * A class to manipulate date SQL.
  */
+// @codingStandardsIgnoreStart
 class date_sql_handler {
   var $db_type = NULL;
   var $date_type = DATE_DATETIME;
@@ -86,7 +89,7 @@ class date_sql_handler {
   /**
    * The object constuctor.
    */
-  function __construct($date_type = DATE_DATETIME, $local_timezone = NULL, $offset = '+00:00') {
+  public function __construct($date_type = DATE_DATETIME, $local_timezone = NULL, $offset = '+00:00') {
     $this->db_type = Database::getConnection()->databaseType();
     $this->date_type = $date_type;
     $this->db_timezone = 'UTC';
@@ -97,7 +100,7 @@ class date_sql_handler {
   /**
    * See if the db has timezone name support.
    */
-  function db_tz_support($reset = FALSE) {
+  public function db_tz_support($reset = FALSE) {
     $has_support = variable_get('date_db_tz_support', -1);
     if ($has_support == -1 || $reset) {
       $has_support = FALSE;
@@ -108,6 +111,7 @@ class date_sql_handler {
             $has_support = TRUE;
           }
           break;
+
         case 'pgsql':
           $test = db_query("SELECT '2008-02-15 12:00:00 UTC' AT TIME ZONE 'US/Central'")->fetchField();
           if ($test == '2008-02-15 06:00:00') {
@@ -136,7 +140,7 @@ class date_sql_handler {
    *   set a fixed offset, not a timezone, so any value other than
    *   '+00:00' should be used with caution.
    */
-  function set_db_timezone($offset = '+00:00') {
+  public function set_db_timezone($offset = '+00:00') {
     static $already_set = FALSE;
     $type = Database::getConnection()->databaseType();
     if (!$already_set) {
@@ -144,9 +148,11 @@ class date_sql_handler {
         case 'mysql':
           db_query("SET @@session.time_zone = '$offset'");
           break;
+
         case 'pgsql':
           db_query("SET TIME ZONE INTERVAL '$offset' HOUR TO MINUTE");
           break;
+
         case 'sqlsrv':
           // Issue #1201342, This is the wrong way to set the timezone, this
           // still needs to be fixed. In the meantime, commenting this out makes
@@ -161,7 +167,7 @@ class date_sql_handler {
   /**
    * Return timezone offset for the date being processed.
    */
-  function get_offset($comp_date = NULL) {
+  public function get_offset($comp_date = NULL) {
     if (!empty($this->db_timezone) && !empty($this->local_timezone)) {
       if ($this->db_timezone != $this->local_timezone) {
         if (empty($comp_date)) {
@@ -199,47 +205,57 @@ class date_sql_handler {
           case DATE_UNIX:
             $field = "FROM_UNIXTIME($field)";
             break;
+
           case DATE_ISO:
             $field = "STR_TO_DATE($field, '%Y-%m-%dT%T')";
             break;
+
           case DATE_DATETIME:
             break;
         }
         break;
+
       case 'pgsql':
         switch ($this->date_type) {
           case DATE_UNIX:
             $field = "$field::ABSTIME";
             break;
+
           case DATE_ISO:
             $field = "TO_DATE($field, 'FMYYYY-FMMM-FMDDTFMHH24:FMMI:FMSS')";
             break;
+
           case DATE_DATETIME:
             break;
         }
         break;
+
       case 'sqlite':
         switch ($this->date_type) {
           case DATE_UNIX:
             $field = "datetime($field, 'unixepoch')";
             break;
+
           case DATE_ISO:
           case DATE_DATETIME:
             $field = "datetime($field)";
             break;
         }
         break;
+
       case 'sqlsrv':
         switch ($this->date_type) {
           case DATE_UNIX:
             $field = "DATEADD(s, $field, '19700101 00:00:00:000')";
             break;
+
           case DATE_ISO:
           case DATE_DATETIME:
             $field = "CAST($field as smalldatetime)";
             break;
         }
         break;
+
       break;
     }
     // Adjust the resulting value to the right timezone/offset.
@@ -254,10 +270,13 @@ class date_sql_handler {
       switch ($this->db_type) {
         case 'mysql':
           return "ADDTIME($field, SEC_TO_TIME($offset))";
+
         case 'pgsql':
-          return "($field + INTERVAL '$offset SECONDS')";;
+          return "($field + INTERVAL '$offset SECONDS')";
+
         case 'sqlite':
           return "datetime($field, '$offset seconds')";
+
         case 'sqlsrv':
           return "DATEADD(second, $offset, $field)";
       }
@@ -285,6 +304,7 @@ class date_sql_handler {
         switch ($direction) {
           case 'ADD':
             return "DATE_ADD($field, INTERVAL $count $granularity)";
+
           case 'SUB':
             return "DATE_SUB($field, INTERVAL $count $granularity)";
         }
@@ -294,6 +314,7 @@ class date_sql_handler {
         switch ($direction) {
           case 'ADD':
             return "($field + INTERVAL '$count $granularity')";
+
           case 'SUB':
             return "($field - INTERVAL '$count $granularity')";
         }
@@ -302,6 +323,7 @@ class date_sql_handler {
         switch ($direction) {
           case 'ADD':
             return "datetime($field, '+$count $granularity')";
+
           case 'SUB':
             return "datetime($field, '-$count $granularity')";
         }
@@ -352,6 +374,7 @@ class date_sql_handler {
       switch ($this->db_type) {
         case 'mysql':
           return "CONVERT_TZ($field, $db_zone, $localzone)";
+
         case 'pgsql':
           // WITH TIME ZONE assumes the date is using the system
           // timezone, which should have been set to UTC.
@@ -395,6 +418,7 @@ class date_sql_handler {
         );
         $format = strtr($format, $replace);
         return "DATE_FORMAT($field, '$format')";
+
       case 'pgsql':
         $replace = array(
           'Y' => 'YYYY',
@@ -421,6 +445,7 @@ class date_sql_handler {
         );
         $format = strtr($format, $replace);
         return "TO_CHAR($field, '$format')";
+
       case 'sqlite':
         $replace = array(
           // 4 digit year number.
@@ -460,6 +485,7 @@ class date_sql_handler {
         );
         $format = strtr($format, $replace);
         return "strftime('$format', $field)";
+
       case 'sqlsrv':
         $replace = array(
           // 4 digit year number.
@@ -528,18 +554,25 @@ class date_sql_handler {
     switch (strtoupper($extract_type)) {
       case 'DATE':
         return $field;
+
       case 'YEAR':
         return "EXTRACT(YEAR FROM($field))";
+
       case 'MONTH':
         return "EXTRACT(MONTH FROM($field))";
+
       case 'DAY':
         return "EXTRACT(DAY FROM($field))";
+
       case 'HOUR':
         return "EXTRACT(HOUR FROM($field))";
+
       case 'MINUTE':
         return "EXTRACT(MINUTE FROM($field))";
+
       case 'SECOND':
         return "EXTRACT(SECOND FROM($field))";
+
       // ISO week number for date.
       case 'WEEK':
         switch ($this->db_type) {
@@ -547,6 +580,7 @@ class date_sql_handler {
             // WEEK using arg 3 in MySQl should return the same value as
             // Postgres EXTRACT.
             return "WEEK($field, 3)";
+
           case 'pgsql':
             return "EXTRACT(WEEK FROM($field))";
         }
@@ -556,6 +590,7 @@ class date_sql_handler {
             // MySQL returns 1 for Sunday through 7 for Saturday, PHP date
             // functions and Postgres use 0 for Sunday and 6 for Saturday.
             return "INTEGER(DAYOFWEEK($field) - 1)";
+
           case 'pgsql':
             return "EXTRACT(DOW FROM($field))";
         }
@@ -563,6 +598,7 @@ class date_sql_handler {
         switch ($this->db_type) {
           case 'mysql':
             return "DAYOFYEAR($field)";
+
           case 'pgsql':
             return "EXTRACT(DOY FROM($field))";
         }
@@ -775,8 +811,7 @@ class date_sql_handler {
   }
 
   /**
-   * Create a complete datetime value out of an
-   * incomplete array of selected values.
+   * Create a complete date/time value out of an incomplete array of values.
    *
    * For example, array('year' => 2008, 'month' => 05) will fill
    * in the day, hour, minute and second with the earliest possible
@@ -795,9 +830,11 @@ class date_sql_handler {
         case 'empty_min':
         case 'min':
           return date_format($dates[0], 'Y-m-d H:i:s');
+
         case 'empty_max':
         case 'max':
           return date_format($dates[1], 'Y-m-d H:i:s');
+
         default:
           return;
       }
@@ -840,7 +877,7 @@ class date_sql_handler {
   }
 
   /**
-   *  A function to test the validity of various date parts
+   * A function to test the validity of various date parts.
    */
   function part_is_valid($value, $type) {
     if (!preg_match('/^[0-9]*$/', $value)) {
@@ -856,16 +893,19 @@ class date_sql_handler {
           return FALSE;
         }
         break;
+
       case 'month':
         if ($value < 0 || $value > 12) {
           return FALSE;
         }
         break;
+
       case 'day':
         if ($value < 0 || $value > 31) {
           return FALSE;
         }
         break;
+
       case 'week':
         if ($value < 0 || $value > 53) {
           return FALSE;
@@ -890,26 +930,36 @@ class date_sql_handler {
         $formats['display'] = 'Y';
         $formats['sql'] = 'Y';
         break;
+
       case 'month':
         $formats['display'] = date_limit_format($short, array('year', 'month'));
         $formats['sql'] = 'Y-m';
         break;
+
       case 'day':
-        $formats['display'] = date_limit_format($short, array('year', 'month', 'day'));
+        $args = array('year', 'month', 'day');
+        $formats['display'] = date_limit_format($short, $args);
         $formats['sql'] = 'Y-m-d';
         break;
+
       case 'hour':
-        $formats['display'] = date_limit_format($short, array('year', 'month', 'day', 'hour'));
+        $args = array('year', 'month', 'day', 'hour');
+        $formats['display'] = date_limit_format($short, $args);
         $formats['sql'] = 'Y-m-d\TH';
         break;
+
       case 'minute':
-        $formats['display'] = date_limit_format($short, array('year', 'month', 'day', 'hour', 'minute'));
+        $args = array('year', 'month', 'day', 'hour', 'minute');
+        $formats['display'] = date_limit_format($short, $args);
         $formats['sql'] = 'Y-m-d\TH:i';
         break;
+
       case 'second':
-        $formats['display'] = date_limit_format($short, array('year', 'month', 'day', 'hour', 'minute', 'second'));
+        $args = array('year', 'month', 'day', 'hour', 'minute', 'second');
+        $formats['display'] = date_limit_format($short, $args);
         $formats['sql'] = 'Y-m-d\TH:i:s';
         break;
+
       case 'week':
         $formats['display'] = 'F j Y (W)';
         $formats['sql'] = 'Y-\WW';
@@ -927,7 +977,7 @@ class date_sql_handler {
       '#type' => 'radios',
       '#default_value' => $granularity,
       '#options' => $this->date_parts(),
-      );
+    );
     return $form;
   }
 
@@ -1030,7 +1080,6 @@ class date_sql_handler {
     $direction = $results[1];
     $count = $results[2];
     $item = $results[3];
-
     $replace = array(
       'now' => '@',
       '+' => 'P',
@@ -1051,14 +1100,27 @@ class date_sql_handler {
       'second' => 'S',
       '  ' => '',
       ' ' => '',
-      );
-    $prefix = in_array($item, array('hours', 'hour', 'minutes', 'minute', 'seconds', 'second')) ? 'T' : '';
-    return $prefix . strtr($direction, $replace) . $count . strtr($item, $replace);
+    );
+    $args = array('hours', 'hour', 'minutes', 'minute', 'seconds', 'second');
+    if (in_array($item, $args)) {
+      $prefix = 'T';
+    }
+    else {
+      $prefix = '';
+    }
+    $return = $prefix;
+    $return .= strtr($direction, $replace);
+    $return .= $count;
+    $return .= strtr($item, $replace);
+
+    return $return;
   }
 
   /**
-   * Use the parsed values from the ISO argument to determine the
-   * granularity of this period.
+   * Granularity arguments handler.
+   *
+   * Use the parsed values from the ISO argument
+   * to determine the granularity of this period.
    */
   function arg_granularity($arg) {
     $granularity = '';
@@ -1137,8 +1199,9 @@ class date_sql_handler {
       }
       return array($min_date, $max_date);
     }
-     // Intercept invalid info and fall back to the current date.
+    // Intercept invalid info and fall back to the current date.
     $now = date_now();
     return array($now, $now);
   }
 }
+// @codingStandardsIgnoreEnd
diff --git a/profiles/wcm_base/modules/contrib/date/date_api/theme/theme.inc b/profiles/wcm_base/modules/contrib/date/date_api/theme/theme.inc
index 032e3e93..a6aef230 100644
--- a/profiles/wcm_base/modules/contrib/date/date_api/theme/theme.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_api/theme/theme.inc
@@ -206,24 +206,31 @@ function theme_date_time_ago($variables) {
   $now = date_format(date_now(), DATE_FORMAT_UNIX);
   $start = date_format($start_date, DATE_FORMAT_UNIX);
 
-  // will be positive for a datetime in the past (ago), and negative for a datetime in the future (hence)
+  // Will be positive for a datetime in the past (ago), and negative for a datetime in the future (hence).
   $time_diff = $now - $start;
 
   // Uses the same options used by Views format_interval.
   switch ($display) {
     case 'raw time ago':
       return format_interval($time_diff, $interval);
+
     case 'time ago':
       return t('%time ago', array('%time' => format_interval($time_diff, $interval)));
+
     case 'raw time hence':
       return format_interval(-$time_diff, $interval);
+
     case 'time hence':
       return t('%time hence', array('%time' => format_interval(-$time_diff, $interval)));
+
     case 'raw time span':
       return ($time_diff < 0 ? '-' : '') . format_interval(abs($time_diff), $interval);
+
     case 'inverse time span':
       return ($time_diff > 0 ? '-' : '') . format_interval(abs($time_diff), $interval);
+
     case 'time span':
       return t(($time_diff < 0 ? '%time hence' : '%time ago'), array('%time' => format_interval(abs($time_diff), $interval)));
+
   }
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_context/date_context.info b/profiles/wcm_base/modules/contrib/date/date_context/date_context.info
index 1d8a551d..c521dd26 100644
--- a/profiles/wcm_base/modules/contrib/date/date_context/date_context.info
+++ b/profiles/wcm_base/modules/contrib/date/date_context/date_context.info
@@ -8,9 +8,9 @@ dependencies[] = context
 
 files[] = date_context.module
 files[] = plugins/date_context_date_condition.inc
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_context/date_context.module b/profiles/wcm_base/modules/contrib/date/date_context/date_context.module
index 44e975ac..9b568e15 100644
--- a/profiles/wcm_base/modules/contrib/date/date_context/date_context.module
+++ b/profiles/wcm_base/modules/contrib/date/date_context/date_context.module
@@ -1,5 +1,8 @@
 <?php
 /**
+ * @file
+ * Add an option to set/not set the context on forms vs views.
+ *
  * @TODO
  *
  * Currently only implemented for nodes. Need to add $plugin->execute()
@@ -8,8 +11,6 @@
  * Cache the date processing, perhaps cache the formatted, timezone-adjusted
  * date strings for each entity (would have to be cached differently for each
  * timezone, based on the tz_handling method for the date).
- *
- * Add an option to set/not set the context on forms vs views.
  */
 
 /**
@@ -22,7 +23,7 @@ function date_context_context_node_condition_alter($node, $op) {
 }
 
 /**
- * Implements hook_context_plugins()
+ * Implements hook_context_plugins().
  */
 function date_context_context_plugins() {
   $plugins = array();
@@ -38,7 +39,7 @@ function date_context_context_plugins() {
 }
 
 /**
- * Implements hook_context_registry()
+ * Implements hook_context_registry().
  */
 function date_context_context_registry() {
   return array(
@@ -51,4 +52,3 @@ function date_context_context_registry() {
     ),
   );
 }
-
diff --git a/profiles/wcm_base/modules/contrib/date/date_context/plugins/date_context_date_condition.inc b/profiles/wcm_base/modules/contrib/date/date_context/plugins/date_context_date_condition.inc
index 573b0354..97c18b47 100644
--- a/profiles/wcm_base/modules/contrib/date/date_context/plugins/date_context_date_condition.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_context/plugins/date_context_date_condition.inc
@@ -1,10 +1,20 @@
 <?php
 
+/**
+ * @file
+ * Context date condition plugin.
+ */
+
 /**
  * Expose term views/term forms by vocabulary as a context condition.
  */
+// @codingStandardsIgnoreStart
 class date_context_date_condition extends context_condition_node {
-  function condition_values() {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function condition_values() {
     $values = array();
     $fields = field_info_fields();
     foreach ($fields as $field_name => $field) {
@@ -15,10 +25,13 @@ class date_context_date_condition extends context_condition_node {
     return $values;
   }
 
-  function options_form($context) {
+  /**
+   * {@inheritdoc}
+   */
+  public function options_form($context) {
     $defaults = $this->fetch_from_context($context, 'options');
     $options = array(
-      '<' =>  t('Is less than'),
+      '<' => t('Is less than'),
       '<=' => t('Is less than or equal to'),
       '>=' => t('Is greater than or equal to'),
       '>' => t('Is greater than'),
@@ -27,6 +40,8 @@ class date_context_date_condition extends context_condition_node {
       'empty' => t('Is empty'),
       'not empty' => t('Is not Empty'),
     );
+    $dependency_options = array('<', '<=', '>', '>=', '=', '!=');
+
     $form['operation'] = array(
       '#title' => t('Operation'),
       '#type' => 'select',
@@ -41,12 +56,15 @@ class date_context_date_condition extends context_condition_node {
       '#description' => t("The value the field should contain to meet the condition. This can either be an absolute date in ISO format (YYYY-MM-DDTHH:MM:SS) or a relative string like '12AM today'. Examples: 2011-12-31T00:00:00, now, now +1 day, 12AM today, Monday next week. <a href=\"@relative_format\">More examples of relative date formats in the PHP documentation</a>.", array('@relative_format' => 'http://www.php.net/manual/en/datetime.formats.relative.php')),
       '#default_value' => isset($defaults['value']) ? $defaults['value'] : '',
       '#process' => array('ctools_dependent_process'),
-      '#dependency' => array('edit-conditions-plugins-date-context-date-condition-options-operation' => array('<', '<=', '>', '>=', '=', '!=')),
+      '#dependency' => array('edit-conditions-plugins-date-context-date-condition-options-operation' => $dependency_options),
     );
     return $form;
   }
 
-  function execute($entity, $op) {
+  /**
+   * {@inheritdoc}
+   */
+  public function execute($entity, $op) {
     if (in_array($op, array('view', 'form'))) {
       foreach ($this->get_contexts() as $context) {
         $options = $this->fetch_from_context($context, 'options');
@@ -91,32 +109,37 @@ class date_context_date_condition extends context_condition_node {
               str_replace('now', 'today', $options['value']);
               $date = date_create($options['value'], date_default_timezone_object());
               $compdate = $date->format(DATE_FORMAT_DATETIME);
-              switch($options['operation']) {
+              switch ($options['operation']) {
                 case '=':
                   if ($date2 >= $compdate && $date1 <= $compdate) {
                     $this->condition_met($context, $field_name);
                   }
                   break;
+
                 case '>':
                   if ($date1 > $compdate) {
                     $this->condition_met($context, $field_name);
                   }
                   break;
+
                 case '>=':
                   if ($date1 >= $compdate) {
                     $this->condition_met($context, $field_name);
                   }
                   break;
+
                 case '<':
                   if ($date2 < $compdate) {
                     $this->condition_met($context, $field_name);
                   }
                   break;
+
                 case '<=':
                   if ($date2 <= $compdate) {
                     $this->condition_met($context, $field_name);
                   }
                   break;
+
                 case '!=':
                   if ($date1 < $compdate || $date2 > $compdate) {
                     $this->condition_met($context, $field_name);
@@ -130,3 +153,4 @@ class date_context_date_condition extends context_condition_node {
     }
   }
 }
+// @codingStandardsIgnoreEnd
diff --git a/profiles/wcm_base/modules/contrib/date/date_elements.inc b/profiles/wcm_base/modules/contrib/date/date_elements.inc
index 6908d967..83697153 100644
--- a/profiles/wcm_base/modules/contrib/date/date_elements.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_elements.inc
@@ -40,7 +40,6 @@
  *
  * - In the field's submission processing, the new date values, which are in
  *   the local timezone, are converted back to their UTC values and stored.
- *
  */
 function date_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $base) {
 
@@ -87,7 +86,7 @@ function date_field_widget_form(&$form, &$form_state, $field, $instance, $langco
   }
 
   module_load_include('inc', 'date_api', 'date_api_elements');
-  $timezone = date_get_timezone($field['settings']['tz_handling'], isset($items[0]['timezone']) ? $items[0]['timezone'] : date_default_timezone());
+  $timezone = date_get_timezone($field['settings']['tz_handling'], isset($items[$delta]['timezone']) ? $items[$delta]['timezone'] : date_default_timezone());
 
   // TODO see if there's a way to keep the timezone element from ever being
   // nested as array('timezone' => 'timezone' => value)). After struggling
@@ -122,7 +121,13 @@ function date_field_widget_form(&$form, &$form_state, $field, $instance, $langco
       '#weight' => $instance['widget']['weight'] + 1,
       '#attributes' => array('class' => array('date-no-float')),
       '#date_label_position' => $instance['widget']['settings']['label_position'],
-      );
+    );
+  }
+
+  // Make changes if instance is set to be rendered as a regular field.
+  if (!empty($instance['widget']['settings']['no_fieldset'])) {
+   $element['#title'] = check_plain($instance['label']);
+   $element['#theme_wrappers'] = ($field['cardinality'] == 1) ? array('date_form_element') : array();
   }
 
   return $element;
@@ -148,6 +153,7 @@ function date_local_date($item, $timezone, $field, $instance, $part = 'value') {
   // @TODO Figure out how to replace date_fuzzy_datetime() function.
   // Special case for ISO dates to create a valid date object for formatting.
   // Is this still needed?
+  // @codingStandardsIgnoreStart
   /*
   if ($field['type'] == DATE_ISO) {
     $value = date_fuzzy_datetime($value);
@@ -157,6 +163,7 @@ function date_local_date($item, $timezone, $field, $instance, $part = 'value') {
     $value = date_convert($value, $field['type'], DATE_DATETIME, $db_timezone);
   }
   */
+  // @codingStandardsIgnoreEnd
 
   $date = new DateObject($value, date_get_timezone_db($field['settings']['tz_handling']));
   $date->limitGranularity($field['settings']['granularity']);
@@ -193,8 +200,7 @@ function date_default_value($field, $instance, $langcode) {
 }
 
 /**
- * Helper function for the date default value callback to set
- * either 'value' or 'value2' to its default value.
+ * Helper function for the date default value callback to set either 'value' or 'value2' to its default value.
  */
 function date_default_value_part($item, $field, $instance, $langcode, $part = 'value') {
   $timezone = date_get_timezone($field['settings']['tz_handling']);
@@ -241,7 +247,6 @@ function date_default_value_part($item, $field, $instance, $langcode, $part = 'v
  * Process an individual date element.
  */
 function date_combo_element_process($element, &$form_state, $form) {
-    
   if (date_hidden_element($element)) {
     // A hidden value for a new entity that had its end date set to blank
     // will not get processed later to populate the end date, so set it here.
@@ -296,6 +301,7 @@ function date_combo_element_process($element, &$form_state, $form) {
   // Blank out the end date for optional end dates that match the start date,
   // except when this is a new node that has default values that should be honored.
   if (!$date_is_default && $field['settings']['todate'] != 'required'
+  && is_array($element['#default_value'])
   && !empty($element['#default_value'][$to_field])
   && $element['#default_value'][$to_field] == $element['#default_value'][$from_field]) {
     unset($element['#default_value'][$to_field]);
@@ -329,9 +335,9 @@ function date_combo_element_process($element, &$form_state, $form) {
     '#date_increment'   => $instance['widget']['settings']['increment'],
     '#date_year_range'  => $instance['widget']['settings']['year_range'],
     '#date_label_position' => $instance['widget']['settings']['label_position'],
-    );
+  );
 
-  $description =  !empty($element['#description']) ? t($element['#description']) : '';
+  $description = !empty($element['#description']) ? t($element['#description']) : '';
   unset($element['#description']);
 
   // Give this element the right type, using a Date API
@@ -347,11 +353,13 @@ function date_combo_element_process($element, &$form_state, $form) {
       $element['#attached']['js'][] = drupal_get_path('module', 'date') . '/date.js';
       $element[$from_field]['#ajax'] = !empty($element['#ajax']) ? $element['#ajax'] : FALSE;
       break;
+
     case 'date_popup':
       $element[$from_field]['#type'] = 'date_popup';
       $element[$from_field]['#theme_wrappers'] = array('date_popup');
       $element[$from_field]['#ajax'] = !empty($element['#ajax']) ? $element['#ajax'] : FALSE;
       break;
+
     default:
       $element[$from_field]['#type'] = 'date_text';
       $element[$from_field]['#theme_wrappers'] = array('date_text');
@@ -380,8 +388,11 @@ function date_combo_element_process($element, &$form_state, $form) {
     if ($field['settings']['todate'] == 'optional') {
       $element[$to_field]['#states'] = array(
         'visible' => array(
-          'input[name="' . $show_id . '"]' => array('checked' => TRUE),
-      ));
+          'input[name="' . $show_id . '"]' => array(
+            'checked' => TRUE,
+          ),
+        ),
+      );
     }
   }
   else {
@@ -404,16 +415,27 @@ function date_combo_element_process($element, &$form_state, $form) {
     $element[$from_field]['#date_title'] = t('@field_name', array('@field_name' => $instance['label']));
   }
 
+  // Make changes if instance is set to be rendered as a regular field.
+  if (!empty($instance['widget']['settings']['no_fieldset'])) {
+    unset($element[$from_field]['#description']);
+    if (!empty($field['settings']['todate']) && isset($element['#description'])) {
+      $element['#description'] .= '<span class="js-hide"> ' . t("Empty 'End date' values will use the 'Start date' values.") . '</span>';
+    }
+  }
+
   $context = array(
-   'field' => $field,
-   'instance' => $instance,
-   'form' => $form,
+    'field'     => $field,
+    'instance'  => $instance,
+    'form'      => $form,
   );
   drupal_alter('date_combo_process', $element, $form_state, $context);
 
   return $element;
 }
 
+/**
+ * Empty a date element.
+ */
 function date_element_empty($element, &$form_state) {
   $item = array();
   $item['value'] = NULL;
@@ -428,6 +450,7 @@ function date_element_empty($element, &$form_state) {
 
 /**
  * Validate and update a combo element.
+ *
  * Don't try this if there were errors before reaching this point.
  */
 function date_combo_validate($element, &$form_state) {
@@ -444,6 +467,10 @@ function date_combo_validate($element, &$form_state) {
   $delta = $element['#delta'];
   $langcode = $element['#language'];
 
+  // Related issue: https://drupal.org/node/2279831.
+  if (!is_array($element['#field_parents'])) {
+    $element['#field_parents'] = array();
+  }
   $form_values = drupal_array_get_nested_value($form_state['values'], $element['#field_parents']);
   $form_input = drupal_array_get_nested_value($form_state['input'], $element['#field_parents']);
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate.info b/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate.info
index 69012711..b3a6bba6 100644
--- a/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate.info
+++ b/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate.info
@@ -4,9 +4,9 @@ core = 7.x
 package = Date/Time
 hidden = TRUE
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.info b/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.info
index 7223b763..6d79df40 100644
--- a/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.info
+++ b/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.info
@@ -20,9 +20,9 @@ package = "Features"
 project = "date_migrate_example"
 version = "7.x-2.0"
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc b/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc
index e11dea66..216e1c54 100644
--- a/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_migrate/date_migrate_example/date_migrate_example.migrate.inc
@@ -47,8 +47,8 @@ class DateExampleMigration extends XMLMigration {
     $xml_folder = drupal_get_path('module', 'date_migrate_example');
     $items_url = $xml_folder . '/date_migrate_example.xml';
     $item_xpath = '/source_data/item';
-    $item_ID_xpath = 'id';
-    $items_class = new MigrateItemsXML($items_url, $item_xpath, $item_ID_xpath);
+    $item_id_xpath = 'id';
+    $items_class = new MigrateItemsXML($items_url, $item_xpath, $item_id_xpath);
     $this->source = new MigrateSourceMultiItems($items_class, $fields);
     $this->destination = new MigrateDestinationNode('date_migrate_example');
 
@@ -78,7 +78,7 @@ class DateExampleMigration extends XMLMigration {
     $this->addFieldMapping('field_datestamp_range:to', 'datestamp_range_to');
 
     // You can specify a timezone to be applied to all values going into the
-    // field (Tokyo is UTC+9, no DST)
+    // field (Tokyo is UTC+9, no DST).
     $this->addFieldMapping('field_datetime', 'datetime')
       ->xpath('datetime');
     $this->addFieldMapping('field_datetime:timezone')
@@ -107,25 +107,25 @@ class DateExampleMigration extends XMLMigration {
     // The date range field can have multiple values.
     $current_row->date_range_from = array();
     foreach ($current_row->xml->date_range as $range) {
-      $current_row->date_range_from[] = (string)$range->from[0];
-      $current_row->date_range_to[] = (string)$range->to[0];
+      $current_row->date_range_from[] = (string) $range->from[0];
+      $current_row->date_range_to[] = (string) $range->to[0];
     }
 
-    $current_row->datestamp_range_from =
-      (string) $current_row->xml->datestamp_range->from[0];
-    $current_row->datestamp_range_to =
-      (string) $current_row->xml->datestamp_range->to[0];
-
-    $current_row->datetime_range_from =
-      (string) $current_row->xml->datetime_range->from[0];
-    $current_row->datetime_range_to =
-      (string) $current_row->xml->datetime_range->to[0];
-    $current_row->datetime_range_timezone =
-      (string) $current_row->xml->datetime_range->timezone[0];
-
-    $current_row->date_repeat =
-      (string) $current_row->xml->date_repeat->date[0];
-    $current_row->date_repeat_rrule =
-      (string) $current_row->xml->date_repeat->rule[0];
+    $current_row->datestamp_range_from
+      = (string) $current_row->xml->datestamp_range->from[0];
+    $current_row->datestamp_range_to
+      = (string) $current_row->xml->datestamp_range->to[0];
+
+    $current_row->datetime_range_from
+      = (string) $current_row->xml->datetime_range->from[0];
+    $current_row->datetime_range_to
+      = (string) $current_row->xml->datetime_range->to[0];
+    $current_row->datetime_range_timezone
+      = (string) $current_row->xml->datetime_range->timezone[0];
+
+    $current_row->date_repeat
+      = (string) $current_row->xml->date_repeat->date[0];
+    $current_row->date_repeat_rrule
+      = (string) $current_row->xml->date_repeat->rule[0];
   }
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.info b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.info
index 271e1c68..500c7ffb 100644
--- a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.info
+++ b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.info
@@ -7,9 +7,9 @@ configure = admin/config/date/date_popup
 
 stylesheets[all][] = themes/datepicker.1.7.css
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.install b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.install
index 790a514a..e13a4f5a 100644
--- a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.install
+++ b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.install
@@ -5,6 +5,7 @@
  * Install, update and uninstall functions for the Date Popup module.
  */
 
+// @codingStandardsIgnoreStart
 /**
  * Implements hook_install().
  */
@@ -17,6 +18,7 @@ function date_popup_install() {
 function date_popup_uninstall() {
 
 }
+// @codingStandardsIgnoreEnd
 
 /**
  * Implements hook_enable().
diff --git a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.js b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.js
index 1847f84f..bbf25e2d 100644
--- a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.js
+++ b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.js
@@ -1,62 +1,65 @@
 /**
  * Attaches the calendar behavior to all required fields
  */
-(function ($) {
-Drupal.behaviors.date_popup = {
-  attach: function (context) {
-  for (var id in Drupal.settings.datePopup) {
-    $('#'+ id).bind('focus', Drupal.settings.datePopup[id], function(e) {
-      if (!$(this).hasClass('date-popup-init')) {
-        var datePopup = e.data;
-        // Explicitely filter the methods we accept.
-        switch (datePopup.func) {
-          case 'datepicker':
-            $(this)
-              .datepicker(datePopup.settings)
-              .addClass('date-popup-init')
-            $(this).click(function(){
-              $(this).focus();
-            });
-            break;
+(function($) {
+  function makeFocusHandler(e) {
+    if (!$(this).hasClass('date-popup-init')) {
+      var datePopup = e.data;
+      // Explicitely filter the methods we accept.
+      switch (datePopup.func) {
+        case 'datepicker':
+          $(this)
+            .datepicker(datePopup.settings)
+            .addClass('date-popup-init');
+          $(this).click(function(){
+            $(this).focus();
+          });
+          break;
 
-          case 'timeEntry':
-            $(this)
-              .timeEntry(datePopup.settings)
-              .addClass('date-popup-init')
-            $(this).click(function(){
-              $(this).focus();
-            });
-            break;
-          case 'timepicker':
-            // Translate the PHP date format into the style the timepicker uses.
-            datePopup.settings.timeFormat = datePopup.settings.timeFormat
-              // 12-hour, leading zero,
-              .replace('h', 'hh')
-              // 12-hour, no leading zero.
-              .replace('g', 'h')
-              // 24-hour, leading zero.
-              .replace('H', 'HH')
-              // 24-hour, no leading zero.
-              .replace('G', 'H')
-              // AM/PM.
-              .replace('A', 'p')
-              // Minutes with leading zero.
-              .replace('i', 'mm')
-              // Seconds with leading zero.
-              .replace('s', 'ss');
+        case 'timeEntry':
+          $(this)
+            .timeEntry(datePopup.settings)
+            .addClass('date-popup-init');
+          $(this).click(function(){
+            $(this).focus();
+          });
+          break;
 
-            datePopup.settings.startTime = new Date(datePopup.settings.startTime);
-            $(this)
-              .timepicker(datePopup.settings)
-              .addClass('date-popup-init');
-            $(this).click(function(){
-              $(this).focus();
-            });
-            break;
-        }
+        case 'timepicker':
+          // Translate the PHP date format into the style the timepicker uses.
+          datePopup.settings.timeFormat = datePopup.settings.timeFormat
+            // 12-hour, leading zero,
+            .replace('h', 'hh')
+            // 12-hour, no leading zero.
+            .replace('g', 'h')
+            // 24-hour, leading zero.
+            .replace('H', 'HH')
+            // 24-hour, no leading zero.
+            .replace('G', 'H')
+            // AM/PM.
+            .replace('A', 'p')
+            // Minutes with leading zero.
+            .replace('i', 'mm')
+            // Seconds with leading zero.
+            .replace('s', 'ss');
+
+          datePopup.settings.startTime = new Date(datePopup.settings.startTime);
+          $(this)
+            .timepicker(datePopup.settings)
+            .addClass('date-popup-init');
+          $(this).click(function(){
+            $(this).focus();
+          });
+          break;
       }
-    });
-  }
+    }
   }
-};
+
+  Drupal.behaviors.date_popup = {
+    attach: function (context) {
+      for (var id in Drupal.settings.datePopup) {
+        $('#'+ id).bind('focus', Drupal.settings.datePopup[id], makeFocusHandler);
+      }
+    }
+  };
 })(jQuery);
diff --git a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.module b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.module
index a2d0ebb1..e91cc8a7 100644
--- a/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.module
+++ b/profiles/wcm_base/modules/contrib/date/date_popup/date_popup.module
@@ -16,7 +16,6 @@
  * If no time elements are included in the format string, only the date
  * textfield will be created. If no date elements are included in the format
  * string, only the time textfield, will be created.
- *
  */
 
 /**
@@ -44,7 +43,7 @@ function date_popup_add() {
 /**
  * Get the location of the Willington Vega timepicker library.
  *
- * @return
+ * @return string
  *   The location of the library, or FALSE if the library isn't installed.
  */
 function date_popup_get_wvega_path() {
@@ -94,9 +93,11 @@ function date_popup_library() {
 }
 
 /**
- * Create a unique CSS id name and output a single inline JS block for
- * each startup function to call and settings array to pass it.  This
- * used to create a unique CSS class for each unique combination of
+ * Create a unique CSS id name and output a single inline JS block.
+ *
+ * For each startup function to call and settings array to pass it.
+ *
+ * This used to create a unique CSS class for each unique combination of
  * function and settings, but using classes requires a DOM traversal
  * and is much slower than an id lookup.  The new approach returns to
  * requiring a duplicate copy of the settings/code for every element
@@ -104,17 +105,20 @@ function date_popup_library() {
  * putting the ids for each unique function/settings combo into
  * Drupal.settings and searching for each listed id.
  *
- * @param $pfx
+ * @param string $id
  *   The CSS class prefix to search the DOM for.
  *   TODO : unused ?
- * @param $func
- *   The jQuery function to invoke on each DOM element containing the
- * returned CSS class.
- * @param $settings
+ *
+ * @param string $func
+ *   The jQuery function to invoke on each DOM element
+ *   containing the returned CSS class.
+ *
+ * @param array $settings
  *   The settings array to pass to the jQuery function.
+ *
  * @returns
- *   The CSS id to assign to the element that should have
- * $func($settings) invoked on it.
+ *   The CSS id to assign to the element that should have $func($settings)
+ *   invoked on it.
  */
 function date_popup_js_settings_id($id, $func, $settings) {
   static $js_added = FALSE;
@@ -123,14 +127,15 @@ function date_popup_js_settings_id($id, $func, $settings) {
   // Make sure popup date selector grid is in correct year.
   if (!empty($settings['yearRange'])) {
     $parts = explode(':', $settings['yearRange']);
-    // Set the default date to 0 or the lowest bound if the date ranges do not include the current year
-    // Necessary for the datepicker to render and select dates correctly
-    $defaultDate = ($parts[0] > 0 || 0 > $parts[1]) ? $parts[0] : 0;
-    $settings += array('defaultDate' => (string) $defaultDate . 'y');
+    // Set the default date to 0 or the lowest bound if
+    // the date ranges do not include the current year.
+    // Necessary for the datepicker to render and select dates correctly.
+    $default_date = ($parts[0] > 0 || 0 > $parts[1]) ? $parts[0] : 0;
+    $settings += array('defaultDate' => (string) $default_date . 'y');
   }
 
   if (!$js_added) {
-    drupal_add_js(drupal_get_path('module', 'date_popup') .'/date_popup.js');
+    drupal_add_js(drupal_get_path('module', 'date_popup') . '/date_popup.js');
     $js_added = TRUE;
   }
 
@@ -140,29 +145,35 @@ function date_popup_js_settings_id($id, $func, $settings) {
     $id_count[$id] = 0;
   }
 
-// It looks like we need the additional id_count for this to
-// work correctly when there are multiple values.
-//  $return_id = "$id-$func-popup";
-  $return_id = "$id-$func-popup-". $id_count[$id]++;
+  // It looks like we need the additional id_count for this to
+  // work correctly when there are multiple values.
+  // $return_id = "$id-$func-popup";
+  $return_id = "$id-$func-popup-" . $id_count[$id]++;
   $js_settings['datePopup'][$return_id] = array(
     'func' => $func,
-    'settings' => $settings
+    'settings' => $settings,
   );
   drupal_add_js($js_settings, 'setting');
   return $return_id;
 }
 
+/**
+ * Date popup theme handler.
+ */
 function date_popup_theme() {
   return array(
-    'date_popup' => array('render element' => 'element'),
-    );
+    'date_popup' => array(
+      'render element' => 'element',
+    ),
+  );
 }
 
 /**
  * Implements hook_element_info().
  *
  * Set the #type to date_popup and fill the element #default_value with
- * a date adjusted to the proper local timezone in datetime format (YYYY-MM-DD HH:MM:SS).
+ * a date adjusted to the proper local timezone in datetime format
+ * (YYYY-MM-DD HH:MM:SS).
  *
  * The element will create two textfields, one for the date and one for the
  * time. The date textfield will include a jQuery popup calendar date picker,
@@ -218,20 +229,32 @@ function date_popup_element_info() {
   return $type;
 }
 
+/**
+ * Date popup date granularity.
+ */
 function date_popup_date_granularity($element) {
   $granularity = date_format_order($element['#date_format']);
   return array_intersect($granularity, array('month', 'day', 'year'));
 }
 
+/**
+ * Date popup time granularity.
+ */
 function date_popup_time_granularity($element) {
   $granularity = date_format_order($element['#date_format']);
   return array_intersect($granularity, array('hour', 'minute', 'second'));
 }
 
+/**
+ * Date popup date format.
+ */
 function date_popup_date_format($element) {
   return (date_limit_format($element['#date_format'], date_popup_date_granularity($element)));
 }
 
+/**
+ * Date popup time format.
+ */
 function date_popup_time_format($element) {
   return date_popup_format_to_popup_time(date_limit_format($element['#date_format'], date_popup_time_granularity($element)), $element['#timepicker']);
 }
@@ -239,6 +262,7 @@ function date_popup_time_format($element) {
 /**
  * Element value callback for date_popup element.
  */
+// @codingStandardsIgnoreStart
 function date_popup_element_value_callback($element, $input = FALSE, &$form_state) {
   $granularity = date_format_order($element['#date_format']);
   $has_time = date_has_time($granularity);
@@ -266,9 +290,11 @@ function date_popup_element_value_callback($element, $input = FALSE, &$form_stat
   return $return;
 
 }
+// @codingStandardsIgnoreEnd
 
 /**
  * Javascript popup element processing.
+ *
  * Add popup attributes to $element.
  */
 function date_popup_element_process($element, &$form_state, $form) {
@@ -284,7 +310,9 @@ function date_popup_element_process($element, &$form_state, $form) {
 
   if (!empty($element['#ajax'])) {
     $element['#ajax'] += array(
-      'trigger_as' => array('name' =>$element['#name']),
+      'trigger_as' => array(
+        'name' => $element['#name'],
+      ),
       'event' => 'change',
     );
   }
@@ -292,6 +320,18 @@ function date_popup_element_process($element, &$form_state, $form) {
   $element['date'] = date_popup_process_date_part($element);
   $element['time'] = date_popup_process_time_part($element);
 
+  // Make changes if instance is set to be rendered as a regular field.
+  if (!empty($element['#instance']['widget']['settings']['no_fieldset']) && $element['#field']['cardinality'] == 1) {
+    if (!empty($element['date']) && empty($element['time'])) {
+      $element['date']['#title'] = check_plain($element['#instance']['label']);
+      $element['date']['#required'] = $element['#required'];
+    }
+    elseif (empty($element['date']) && !empty($element['time'])) {
+      $element['time']['#title'] = check_plain($element['#instance']['label']);
+      $element['time']['#required'] = $element['#required'];
+    }
+  }
+
   if (isset($element['#element_validate'])) {
     array_push($element['#element_validate'], 'date_popup_validate');
   }
@@ -300,7 +340,7 @@ function date_popup_element_process($element, &$form_state, $form) {
   }
 
   $context = array(
-   'form' => $form,
+    'form' => $form,
   );
   drupal_alter('date_popup_process', $element, $form_state, $context);
 
@@ -313,13 +353,22 @@ function date_popup_element_process($element, &$form_state, $form) {
 function date_popup_process_date_part(&$element) {
   $granularity = date_format_order($element['#date_format']);
   $date_granularity = date_popup_date_granularity($element);
-  if (empty($date_granularity)) return array();
+  if (empty($date_granularity)) {
+    return array();
+  }
 
   // The datepicker can't handle zero or negative values like 0:+1
   // even though the Date API can handle them, so rework the value
   // we pass to the datepicker to use defaults it can accept (such as +0:+1)
   // date_range_string() adds the necessary +/- signs to the range string.
   $this_year = date_format(date_now(), 'Y');
+  // When used as a Views exposed filter widget, $element['#value'] contains an array instead an string.
+  // Fill the 'date' string in this case.
+  $mock = NULL;
+  $callback_values = date_popup_element_value_callback($element, FALSE, $mock);
+  if (!isset($element['#value']['date']) && isset($callback_values['date'])) {
+    $element['#value']['date'] = $callback_values['date'];
+  }
   $date = '';
   if (!empty($element['#value']['date'])) {
     $date = new DateObject($element['#value']['date'], $element['#date_timezone'], date_popup_date_format($element));
@@ -336,8 +385,9 @@ function date_popup_process_date_part(&$element) {
     'closeAtTop' => FALSE,
     'speed' => 'immediate',
     'firstDay' => intval(variable_get('date_first_day', 0)),
-    //'buttonImage' => base_path() . drupal_get_path('module', 'date_api') ."/images/calendar.png",
-    //'buttonImageOnly' => TRUE,
+    // 'buttonImage' => base_path()
+    // . drupal_get_path('module', 'date_api') ."/images/calendar.png",
+    // 'buttonImageOnly' => TRUE,
     'dateFormat' => date_popup_format_to_popup(date_popup_date_format($element), 'datepicker'),
     'yearRange' => $year_range,
     // Custom setting, will be expanded in Drupal.behaviors.date_popup()
@@ -347,26 +397,33 @@ function date_popup_process_date_part(&$element) {
   // Create a unique id for each set of custom settings.
   $id = date_popup_js_settings_id($element['#id'], 'datepicker', $settings);
 
-  // Manually build this element and set the value - this will prevent corrupting
-  // the parent value
+  // Manually build this element and set the value -
+  // this will prevent corrupting the parent value.
   $parents = array_merge($element['#parents'], array('date'));
   $sub_element = array(
     '#type' => 'textfield',
     '#title' => theme('date_part_label_date', array('part_type' => 'date', 'element' => $element)),
     '#title_display' => $element['#date_label_position'] == 'above' ? 'before' : 'invisible',
-    '#default_value' => $element['#value']['date'],
+    '#default_value' => date_format_date($date, 'custom', date_popup_date_format($element)),
     '#id' => $id,
     '#input' => FALSE,
     '#size' => !empty($element['#size']) ? $element['#size'] : 20,
     '#maxlength' => !empty($element['#maxlength']) ? $element['#maxlength'] : 30,
     '#attributes' => $element['#attributes'],
     '#parents' => $parents,
-    '#name' => array_shift($parents) . '['. implode('][', $parents) .']',
+    '#name' => array_shift($parents) . '[' . implode('][', $parents) . ']',
     '#ajax' => !empty($element['#ajax']) ? $element['#ajax'] : FALSE,
   );
   $sub_element['#value'] = $sub_element['#default_value'];
-  // TODO, figure out exactly when we want this description. In many places it is not desired.
-  $sub_element['#description'] = ' '. t('E.g., @date', array('@date' => date_format_date(date_example_date(), 'custom', date_popup_date_format($element))));
+  // TODO, figure out exactly when we want this description.
+  // In many places it is not desired.
+  $sub_element['#description'] = ' ' . t('E.g., @date', array(
+      '@date' => date_format_date(
+        date_example_date(),
+        'custom',
+        date_popup_date_format($element)
+        ),
+      ));
 
   return $sub_element;
 }
@@ -377,7 +434,17 @@ function date_popup_process_date_part(&$element) {
 function date_popup_process_time_part(&$element) {
   $granularity = date_format_order($element['#date_format']);
   $has_time = date_has_time($granularity);
-  if (empty($has_time)) return array();
+  if (empty($has_time)) {
+    return array();
+  }
+
+  // When used as a Views exposed filter widget, $element['#value'] contains an array instead an string.
+  // Fill the 'time' string in this case.
+  $mock = NULL;
+  $callback_values = date_popup_element_value_callback($element, FALSE, $mock);
+  if (!isset($element['#value']['time']) && isset($callback_values['time'])) {
+    $element['#value']['time'] = $callback_values['time'];
+  }
 
   switch ($element['#timepicker']) {
     case 'default':
@@ -385,10 +452,14 @@ function date_popup_process_time_part(&$element) {
       $settings = array(
         'show24Hours' => strpos($element['#date_format'], 'H') !== FALSE ? TRUE : FALSE,
         'showSeconds' => (in_array('second', $granularity) ? TRUE : FALSE),
-        'timeSteps' => array(1, intval($element['#date_increment']), (in_array('second', $granularity) ? $element['#date_increment'] : 0)),
+        'timeSteps' => array(
+          1,
+          intval($element['#date_increment']),
+          (in_array('second', $granularity) ? $element['#date_increment'] : 0),
+        ),
         'spinnerImage' => '',
         'fromTo' => isset($fromto),
-        );
+      );
       if (strpos($element['#date_format'], 'a') !== FALSE) {
         // Then we are using lowercase am/pm.
         $settings['ampmNames'] = array('am', 'pm');
@@ -397,9 +468,11 @@ function date_popup_process_time_part(&$element) {
         $settings['ampmPrefix'] = ' ';
       }
       break;
+
     case 'wvega':
       $func = 'timepicker';
-      $time_granularity = array_intersect($granularity, array('hour', 'minute', 'second'));
+      $grans = array('hour', 'minute', 'second');
+      $time_granularity = array_intersect($granularity, $grans);
       $format = date_popup_format_to_popup_time(date_limit_format($element['#date_format'], $time_granularity), 'wvega');
       // The first value in the dropdown list should be the same as the element
       // default_value, but it needs to be in JS format (i.e. milliseconds since
@@ -414,6 +487,7 @@ function date_popup_process_time_part(&$element) {
         'scrollbar' => TRUE,
       );
       break;
+
     default:
       $func = '';
       $settings = array();
@@ -423,8 +497,8 @@ function date_popup_process_time_part(&$element) {
   // Create a unique id for each set of custom settings.
   $id = date_popup_js_settings_id($element['#id'], $func, $settings);
 
-  // Manually build this element and set the value - this will prevent corrupting
-  // the parent value
+  // Manually build this element and set the value -
+  // this will prevent corrupting the parent value.
   $parents = array_merge($element['#parents'], array('time'));
   $sub_element = array(
     '#type' => 'textfield',
@@ -436,16 +510,22 @@ function date_popup_process_time_part(&$element) {
     '#maxlength' => 10,
     '#attributes' => $element['#attributes'],
     '#parents' => $parents,
-    '#name' => array_shift($parents) . '['. implode('][', $parents) .']',
+    '#name' => array_shift($parents) . '[' . implode('][', $parents) . ']',
     '#ajax' => !empty($element['#ajax']) ? $element['#ajax'] : FALSE,
   );
 
   $sub_element['#value'] = $sub_element['#default_value'];
 
-  // TODO, figure out exactly when we want this description. In many places it is not desired.
+  // TODO, figure out exactly when we want this description.
+  // In many places it is not desired.
   $example_date = date_now();
   date_increment_round($example_date, $element['#date_increment']);
-  $sub_element['#description'] = t('E.g., @date', array('@date' => date_format_date($example_date, 'custom', date_popup_time_format($element))));
+  $sub_element['#description'] = t('E.g., @date', array(
+    '@date' => date_format_date(
+      $example_date,
+      'custom',
+      date_popup_time_format($element)
+    )));
 
   return ($sub_element);
 }
@@ -456,7 +536,6 @@ function date_popup_process_time_part(&$element) {
  * When used as a Views widget, the validation step always gets triggered,
  * even with no form submission. Before form submission $element['#value']
  * contains a string, after submission it contains an array.
- *
  */
 function date_popup_validate($element, &$form_state) {
 
@@ -473,6 +552,11 @@ function date_popup_validate($element, &$form_state) {
 
   $input_exists = NULL;
   $input = drupal_array_get_nested_value($form_state['values'], $element['#parents'], $input_exists);
+  // If the date is a string, it is not considered valid and can cause problems
+  // later on, so just exit out now.
+  if (is_string($input)) {
+    return;
+  }
 
   drupal_alter('date_popup_pre_validate', $element, $form_state, $input);
 
@@ -481,9 +565,15 @@ function date_popup_validate($element, &$form_state) {
   $time_granularity = date_popup_time_granularity($element);
   $has_time = date_has_time($granularity);
 
-  $label = !empty($element['#date_title']) ? $element['#date_title'] : (!empty($element['#title']) ? $element['#title'] : '');
-  $label = t($label);
-
+  // @codingStandardsIgnoreStart
+  $label = '';
+  if (!empty($element['#date_title'])) {
+    $label = t($element['#date_title']);
+  }
+  elseif (!empty($element['#title'])) {
+    $label = t($element['#title']);
+  }
+  // @codingStandardsIgnoreEnd
   $date = date_popup_input_date($element, $input);
 
   // If the date has errors, display them.
@@ -517,7 +607,7 @@ function date_popup_validate($element, &$form_state) {
 /**
  * Helper function for extracting a date value out of user input.
  *
- * @param autocomplete
+ * @param bool $auto_complete
  *   Should we add a time value to complete the date if there is no time?
  *   Useful anytime the time value is optional.
  */
@@ -532,8 +622,8 @@ function date_popup_input_date($element, $input, $auto_complete = FALSE) {
 
   $format = date_popup_date_format($element);
   $format .= $has_time ? ' ' . date_popup_time_format($element) : '';
-  $datetime = $input['date'];
-  $datetime .= $has_time ? ' ' . $input['time'] : '';
+  $datetime = trim($input['date']);
+  $datetime .= $has_time ? ' ' . trim($input['time']) : '';
   $date = new DateObject($datetime, $element['#date_timezone'], $format);
   if (is_object($date)) {
     $date->limitGranularity($granularity);
@@ -552,7 +642,7 @@ function date_popup_time_formats($with_seconds = FALSE) {
   return array(
     'H:i:s',
     'h:i:sA',
-    );
+  );
 }
 
 /**
@@ -561,8 +651,17 @@ function date_popup_time_formats($with_seconds = FALSE) {
  * TODO Remove any formats not supported by the widget, if any.
  */
 function date_popup_formats() {
-  $formats = str_replace('i', 'i:s', array_keys(system_get_date_formats('short')));
+  // Load short date formats.
+  $formats = system_get_date_formats('short');
+
+  // Load custom date formats.
+  if ($formats_custom = system_get_date_formats('custom')) {
+    $formats = array_merge($formats, $formats_custom);
+  }
+
+  $formats = str_replace('i', 'i:s', array_keys($formats));
   $formats = drupal_map_assoc($formats);
+
   return $formats;
 }
 
@@ -570,7 +669,8 @@ function date_popup_formats() {
  * Recreate a date format string so it has the values popup expects.
  *
  * @param string $format
- *   a normal date format string, like Y-m-d
+ *   A normal date format string, like Y-m-d
+ *
  * @return string
  *   A format string in popup format, like YMD-, for the
  *   earlier 'calendar' version, or m/d/Y for the later 'datepicker'
@@ -588,15 +688,34 @@ function date_popup_format_to_popup($format) {
  * Recreate a time format string so it has the values popup expects.
  *
  * @param string $format
- *   a normal time format string, like h:i (a)
+ *   A normal time format string, like h:i (a)
+ *
  * @return string
- *   a format string that the popup can accept like h:i a
+ *   A format string that the popup can accept like h:i a
  */
 function date_popup_format_to_popup_time($format, $timepicker = NULL) {
   if (empty($format)) {
     $format = 'H:i';
   }
-  $format = str_replace(array('/', '-', ' .', ',', 'F', 'M', 'l', 'z', 'w', 'W', 'd', 'j', 'm', 'n', 'y', 'Y'), '', $format);
+  $symbols = array(
+    '/',
+    '-',
+    ' .',
+    ',',
+    'F',
+    'M',
+    'l',
+    'z',
+    'w',
+    'W',
+    'd',
+    'j',
+    'm',
+    'n',
+    'y',
+    'Y',
+  );
+  $format = str_replace($symbols, '', $format);
   $format = strtr($format, date_popup_timepicker_format_replacements($timepicker));
   return $format;
 }
@@ -605,9 +724,10 @@ function date_popup_format_to_popup_time($format, $timepicker = NULL) {
  * Reconstruct popup format string into normal format string.
  *
  * @param string $format
- *   a string in popup format, like YMD-
+ *   A string in popup format, like YMD-
+ *
  * @return string
- *   a normal date format string, like Y-m-d
+ *   A normal date format string, like Y-m-d
  */
 function date_popup_popup_to_format($format) {
   $replace = array_flip(date_popup_datepicker_format_replacements());
@@ -621,22 +741,21 @@ function date_popup_popup_to_format($format) {
  * This function returns a map of format replacements required to change any
  * input format into one that the given timepicker can support.
  *
- * @param $timepicker
+ * @param string $timepicker
  *   The time entry plugin being used: either 'wvega' or 'default'.
- * @return
+ *
+ * @return array
  *   A map of replacements.
  */
 function date_popup_timepicker_format_replacements($timepicker = 'default') {
   switch ($timepicker) {
     case 'wvega':
-      return array(
-        'a' => 'A', // The wvega timepicker only supports uppercase AM/PM.
-      );
+      // The wvega timepicker only supports uppercase AM/PM.
+      return array('a' => 'A');
+
     default:
-      return array(
-        'G' => 'H', // The default timeEntry plugin requires leading zeros.
-        'g' => 'h',
-        );
+      // The default timeEntry plugin requires leading zeros.
+      return array('G' => 'H', 'g' => 'h');
   }
 }
 
@@ -645,16 +764,16 @@ function date_popup_timepicker_format_replacements($timepicker = 'default') {
  */
 function date_popup_datepicker_format_replacements() {
   return array(
-  'd' => 'dd',
-  'j' => 'd',
-  'l' => 'DD',
-  'D' => 'D',
-  'm' => 'mm',
-  'n' => 'm',
-  'F' => 'MM',
-  'M' => 'M',
-  'Y' => 'yy',
-  'y' => 'y',
+    'd' => 'dd',
+    'j' => 'd',
+    'l' => 'DD',
+    'D' => 'D',
+    'm' => 'mm',
+    'n' => 'm',
+    'F' => 'MM',
+    'M' => 'M',
+    'Y' => 'yy',
+    'y' => 'y',
   );
 }
 
@@ -667,16 +786,18 @@ function theme_date_popup($vars) {
   $element = $vars['element'];
   $attributes = !empty($element['#wrapper_attributes']) ? $element['#wrapper_attributes'] : array('class' => array());
   $attributes['class'][] = 'container-inline-date';
-  // If there is no description, the floating date elements need some extra padding below them.
+  // If there is no description, the floating date
+  // elements need some extra padding below them.
   $wrapper_attributes = array('class' => array('date-padding'));
   if (empty($element['date']['#description'])) {
     $wrapper_attributes['class'][] = 'clearfix';
   }
-  // Add an wrapper to mimic the way a single value field works, for ease in using #states.
+  // Add an wrapper to mimic the way a single value field works,
+  // for ease in using #states.
   if (isset($element['#children'])) {
-    $element['#children'] = '<div id="' . $element['#id'] . '" ' . drupal_attributes($wrapper_attributes) .'>' . $element['#children'] . '</div>';
+    $element['#children'] = '<div id="' . $element['#id'] . '" ' . drupal_attributes($wrapper_attributes) . '>' . $element['#children'] . '</div>';
   }
-  return '<div ' . drupal_attributes($attributes) .'>' . theme('form_element', $element) . '</div>';
+  return '<div ' . drupal_attributes($attributes) . '>' . theme('form_element', $element) . '</div>';
 }
 
 /**
@@ -707,8 +828,8 @@ function date_popup_settings() {
     '#type' => 'select',
     '#options' => array(
       'default' => t('Use default jQuery timepicker'),
-      'wvega' => t('Use dropdown timepicker'),
-      'none' => t('Manual time entry, no jQuery timepicker')
+      'wvega'   => t('Use dropdown timepicker'),
+      'none'    => t('Manual time entry, no jQuery timepicker'),
     ),
     '#title' => t('Timepicker'),
     '#default_value' => variable_get('date_popup_timepicker', $preferred_timepicker),
@@ -734,7 +855,7 @@ function date_popup_settings() {
 }
 EOM;
 
-  $form['#suffix'] = t('<p>The Date Popup calendar includes some css for IE6 that breaks css validation. Since IE 6 is now superceded by IE 7, 8, and 9, the special css for IE 6 has been removed from the regular css used by the Date Popup. If you find you need that css after all, you can add it back in your theme. Look at the way the Garland theme adds special IE-only css in in its page.tpl.php file. The css you need is:</p>') .'<blockquote><PRE>' . $css .'</PRE></blockquote>';
+  $form['#suffix'] = t('<p>The Date Popup calendar includes some css for IE6 that breaks css validation. Since IE 6 is now superceded by IE 7, 8, and 9, the special css for IE 6 has been removed from the regular css used by the Date Popup. If you find you need that css after all, you can add it back in your theme. Look at the way the Garland theme adds special IE-only css in in its page.tpl.php file. The css you need is:</p>') . '<blockquote><PRE>' . $css . '</PRE></blockquote>';
 
   return system_settings_form($form);
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_popup/jquery.timeentry.pack.js b/profiles/wcm_base/modules/contrib/date/date_popup/jquery.timeentry.pack.js
index e26c64bf..658e7e49 100644
--- a/profiles/wcm_base/modules/contrib/date/date_popup/jquery.timeentry.pack.js
+++ b/profiles/wcm_base/modules/contrib/date/date_popup/jquery.timeentry.pack.js
@@ -1,7 +1,8 @@
 /* http://keith-wood.name/timeEntry.html
-   Time entry for jQuery v1.4.8.
+   Time entry for jQuery v1.5.2.
    Written by Keith Wood (kbwood{at}iinet.com.au) June 2007.
-   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
-   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
+   Licensed under the MIT (https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt) license.
    Please attribute the author if you use it. */
-eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(r($){r 1n(){p.Y=[];p.26=[];p.26[\'\']={1c:B,1d:\':\',1o:\'\',Z:[\'3J\',\'3K\'],2C:[\'3L\',\'3M 2D\',\'3N 2D\',\'3O\',\'3P\']};p.1B={2E:\'\',1C:B,27:[1,1,1],2F:0,2G:L,2H:v,2I:v,2J:v,2K:\'3Q.3R\',1p:[20,20,8],2L:\'\',1D:[40,40,16],2M:B,28:[3S,3T],2N:v,2O:v};$.1q(p.1B,p.26[\'\'])}7 m=\'o\';$.1q(1n.2P,{1e:\'3U\',3V:r(a){1E(p.1B,a||{});u p},2Q:r(b,c){7 d=$(b);q(d.2R(p.1e)){u}7 e={};e.1r=$.1q({},c);e.E=0;e.13=0;e.14=0;e.x=0;e.w=$(b);$.y(b,m,e);7 f=p.t(e,\'2K\');7 g=p.t(e,\'3W\');7 h=p.t(e,\'1p\');7 i=p.t(e,\'2E\');7 j=(!f?v:$(\'<15 1F="3X" 2S="3Y: 3Z-41; \'+\'29: 2T(\\\'\'+f+\'\\\') 0 0 2U-2V; \'+\'2a: \'+h[0]+\'O; 2W: \'+h[1]+\'O;\'+($.K.2X&&$.K.42<\'1.9\'?\' 2Y-U: \'+h[0]+\'O; 2Y-43: \'+(h[1]-18)+\'O;\':\'\')+\'"></15>\'));d.44(\'<15 1F="45"></15>\').2Z(i?\'<15 1F="47">\'+i+\'</15>\':\'\').2Z(j||\'\');d.49(p.1e).17(\'2b.o\',p.2c).17(\'4a.o\',p.30).17(\'4b.o\',p.31).17(\'4c.o\',p.32).17(\'4d.o\',p.33);q($.K.2X){d.17(\'w.o\',r(a){$.o.1f(e)})}q($.K.2d){d.17(\'4e.o\',r(a){1G(r(){$.o.1f(e)},1)})}q(p.t(e,\'2G\')&&$.1H.2e){d.2e(p.34)}q(j){j.3a(p.2f).2g(p.1I).4f(p.3b).2h(p.1I).3c(p.2i)}},4g:r(a){p.2j(a,B)},4h:r(a){p.2j(a,L)},2j:r(b,c){7 d=$.y(b,m);q(!d){u}b.3d=c;q(b.2k&&b.2k.1J.1g()==\'15\'){$.o.1K(d,b.2k,(c?5:-1))}$.o.Y=$.3e($.o.Y,r(a){u(a==b?v:a)});q(c){$.o.Y.4i(b)}},1s:r(a){u $.3f(a,p.Y)>-1},4j:r(a,b,c){7 d=$.y(a,m);q(d){q(1h b==\'1L\'){7 e=b;b={};b[e]=c}7 f=p.1i(d);1E(d.1r,b||{});q(f){p.19(d,F J(0,0,0,f[0],f[1],f[2]))}}$.y(a,m,d)},4k:r(b){$w=$(b);q(!$w.2R(p.1e)){u}$w.4l(p.1e).4m(\'.o\');q($.1H.2e){$w.4n()}p.Y=$.3e(p.Y,r(a){u(a==b?v:a)});$w.4o().4p($w);$.4q(b,m)},4r:r(a,b){7 c=$.y(a,m);q(c){p.19(c,b?(1h b==\'4s\'?F J(b.2l()):b):v)}},3g:r(a){7 b=$.y(a,m);7 c=(b?p.1i(b):v);u(!c?v:F J(0,0,0,c[0],c[1],c[2]))},4t:r(a){7 b=$.y(a,m);7 c=(b?p.1i(b):v);u(!c?0:(c[0]*4u+c[1]*2m+c[2])*3h)},2c:r(a){7 b=(a.1J&&a.1J.1g()==\'w\'?a:p);q($.o.P==b||$.o.1s(b)){$.o.1M=B;u}7 c=$.y(b,m);$.o.1M=L;$.o.P=b;$.o.1j=v;7 d=$.o.t(c,\'2N\');1E(c.1r,(d?d.1N(b,[b]):{}));$.y(b,m,c);$.o.1f(c);1G(r(){$.o.1a(c)},10)},30:r(a){$.o.1j=$.o.P;$.o.P=v},31:r(b){7 c=b.1k;7 d=$.y(c,m);q(!$.o.1M){7 e=$.o.t(d,\'1d\').G+2;d.x=0;q(c.3i!=v){1O(7 f=0;f<=I.1l(1,d.V,d.D);f++){7 g=(f!=d.D?(f*e)+2:(d.D*e)+$.o.t(d,\'1o\').G+$.o.t(d,\'Z\')[0].G);d.x=f;q(c.3i<g){C}}}N q(c.1P){7 h=$(b.3j);7 i=c.1P();7 j=r(a){u{4v:2,4w:4,4x:6}[a]||a};7 k=b.3k+1t.2n.1u-(h.1Q().U+Q(j(h.1v(\'4y-U-2a\')),10))-i.2o;1O(7 f=0;f<=I.1l(1,d.V,d.D);f++){7 g=(f!=d.D?(f*e)+2:(d.D*e)+$.o.t(d,\'1o\').G+$.o.t(d,\'Z\')[0].G);i.4z();i.3l(\'2p\',g);d.x=f;q(k<i.4A){C}}}}$.y(c,m,d);$.o.1a(d);$.o.1M=B},32:r(a){q(a.2q>=48){u L}7 b=$.y(a.1k,m);2r(a.2q){A 9:u(a.4B?$.o.W(b,-1,L):$.o.W(b,+1,L));A 35:q(a.3m){$.o.1R(b,\'\')}N{b.x=I.1l(1,b.V,b.D);$.o.R(b,0)}C;A 36:q(a.3m){$.o.19(b)}N{b.x=0;$.o.R(b,0)}C;A 37:$.o.W(b,-1,B);C;A 38:$.o.R(b,+1);C;A 39:$.o.W(b,+1,B);C;A 40:$.o.R(b,-1);C;A 46:$.o.1R(b,\'\');C}u B},33:r(a){7 b=4C.4D(a.3n==4E?a.2q:a.3n);q(b<\' \'){u L}7 c=$.y(a.1k,m);$.o.3o(c,b);u B},34:r(a,b){q($.o.1s(a.1k)){u}b=($.K.3p?-b/I.1S(b):($.K.2s?b/I.1S(b):b));7 c=$.y(a.1k,m);c.w.2b();q(!c.w.T()){$.o.1f(c)}$.o.R(c,b);a.4F()},3b:r(b){7 c=$.o.1b(b);7 d=$.y($.o.1m(c),m);7 e=$.o.t(d,\'2L\');q(e){d.1T=L;7 f=$(c).1Q();7 g=v;$(c).3q().2t(r(){7 a=$(p);q(a.1v(\'1w\')==\'4G\'||a.1v(\'1w\')==\'3r\'){g=a.1Q()}u!g});7 h=$.o.t(d,\'1p\');7 i=$.o.t(d,\'1D\');$(\'<3s 1F="4H" 2S="1w: 3r; U: \'+(f.U-(i[0]-h[0])/2-(g?g.U:0))+\'O; 1x: \'+(f.1x-(i[1]-h[1])/2-(g?g.1x:0))+\'O; 2a: \'+i[0]+\'O; 2W: \'+i[1]+\'O; 29: 4I 2T(\'+e+\') 2U-2V 2u 2u; z-4J: 10;"></3s>\').3a($.o.2f).2g($.o.1I).2h($.o.3t).3c($.o.2i).4K(c)}},1m:r(a){u $(a).4L(\'.\'+$.o.1e)[0]},2i:r(a){7 b=$.o.1b(a);7 c=$.y($.o.1m(b),m);b.4M=$.o.t(c,\'2C\')[$.o.2v(c,a)]},2f:r(a){7 b=$.o.1b(a);7 c=$.o.1m(b);q($.o.1s(c)){u}q(c==$.o.1j){$.o.P=c;$.o.1j=v}7 d=$.y(c,m);$.o.2c(c);7 e=$.o.2v(d,a);$.o.1K(d,b,e);$.o.2w(d,e);$.o.X=v;$.o.1U=L;7 f=$.o.t(d,\'28\');q(e>=3&&f[0]){$.o.X=1G(r(){$.o.2x(d,e)},f[0]);$(b).3u(\'2h\',$.o.2y).3u(\'2g\',$.o.2y)}},2w:r(a,b){q(!a.w.T()){$.o.1f(a)}2r(b){A 0:p.19(a);C;A 1:p.W(a,-1,B);C;A 2:p.W(a,+1,B);C;A 3:p.R(a,+1);C;A 4:p.R(a,-1);C}},2x:r(a,b){q(!$.o.X){u}$.o.P=$.o.1j;p.2w(a,b);p.X=1G(r(){$.o.2x(a,b)},p.t(a,\'28\')[1])},2y:r(a){4N($.o.X);$.o.X=v},3t:r(a){$.o.X=v;7 b=$.o.1b(a);7 c=$.o.1m(b);7 d=$.y(c,m);$(b).4O();d.1T=B},1I:r(a){$.o.X=v;7 b=$.o.1b(a);7 c=$.o.1m(b);7 d=$.y(c,m);q(!$.o.1s(c)){$.o.1K(d,b,-1)}q($.o.1U){$.o.P=$.o.1j}q($.o.P&&$.o.1U){$.o.1a(d)}$.o.1U=B},1b:r(a){u a.1k||a.3j},2v:r(a,b){7 c=p.1b(b);7 d=($.K.3p||$.K.2s?$.o.3v(c):$(c).1Q());7 e=($.K.2s?$.o.3w(c):[1t.2n.1u||1t.3x.1u,1t.2n.1V||1t.3x.1V]);7 f=p.t(a,\'2M\');7 g=(f?3y:b.3k+e[0]-d.U-($.K.2d?2:0));7 h=b.4P+e[1]-d.1x-($.K.2d?2:0);7 i=p.t(a,(a.1T?\'1D\':\'1p\'));7 j=(f?3y:i[0]-1-g);7 k=i[1]-1-h;q(i[2]>0&&I.1S(g-j)<=i[2]&&I.1S(h-k)<=i[2]){u 0}7 l=I.3z(g,h,j,k);u(l==g?1:(l==j?2:(l==h?3:4)))},1K:r(a,b,c){$(b).1v(\'29-1w\',\'-\'+((c+1)*p.t(a,(a.1T?\'1D\':\'1p\'))[0])+\'O 2u\')},3v:r(a){7 b=1W=0;q(a.3A){b=a.2o;1W=a.3B;2z(a=a.3A){7 c=b;b+=a.2o;q(b<0){b=c}1W+=a.3B}}u{U:b,1x:1W}},3w:r(a){7 b=B;$(a).3q().2t(r(){b|=$(p).1v(\'1w\')==\'4Q\'});q(b){u[0,0]}7 c=a.1u;7 d=a.1V;2z(a=a.4R){c+=a.1u||0;d+=a.1V||0}u[c,d]},t:r(a,b){u(a.1r[b]!=v?a.1r[b]:$.o.1B[b])},1f:r(a){7 b=p.1i(a);7 c=p.t(a,\'1C\');q(b){a.E=b[0];a.13=b[1];a.14=b[2]}N{7 d=p.1y(a);a.E=d[0];a.13=d[1];a.14=(c?d[2]:0)}a.V=(c?2:-1);a.D=(p.t(a,\'1c\')?-1:(c?3:2));a.1X=\'\';a.x=I.1l(0,I.3z(I.1l(1,a.V,a.D),p.t(a,\'2F\')));q(a.w.T()!=\'\'){p.2A(a)}},1i:r(a,b){b=b||a.w.T();7 c=p.t(a,\'1d\');7 d=b.4S(c);q(c==\'\'&&b!=\'\'){d[0]=b.1z(0,2);d[1]=b.1z(2,4);d[2]=b.1z(4,6)}7 e=p.t(a,\'Z\');7 f=p.t(a,\'1c\');q(d.G>=2){7 g=!f&&(b.3C(e[0])>-1);7 h=!f&&(b.3C(e[1])>-1);7 i=Q(d[0],10);i=(2B(i)?0:i);i=((g||h)&&i==12?0:i)+(h?12:0);7 j=Q(d[1],10);j=(2B(j)?0:j);7 k=(d.G>=3?Q(d[2],10):0);k=(2B(k)||!p.t(a,\'1C\')?0:k);u p.1y(a,[i,j,k])}u v},1y:r(a,b){7 c=(b!=v);q(!c){7 d=p.1A(a,p.t(a,\'2H\'))||F J();b=[d.1Y(),d.1Z(),d.21()]}7 e=B;7 f=p.t(a,\'27\');1O(7 i=0;i<f.G;i++){q(e){b[i]=0}N q(f[i]>1){b[i]=I.4T(b[i]/f[i])*f[i];e=L}}u b},2A:r(a){7 b=p.t(a,\'1c\');7 c=p.t(a,\'1d\');7 d=(p.22(b?a.E:((a.E+11)%12)+1)+c+p.22(a.13)+(p.t(a,\'1C\')?c+p.22(a.14):\'\')+(b?\'\':p.t(a,\'1o\')+p.t(a,\'Z\')[(a.E<12?0:1)]));p.1R(a,d);p.1a(a)},1a:r(a){7 b=a.w[0];q(a.w.4U(\':4V\')||$.o.P!=b){u}7 c=p.t(a,\'1d\');7 d=c.G+2;7 e=(a.x!=a.D?(a.x*d):(a.D*d)-c.G+p.t(a,\'1o\').G);7 f=e+(a.x!=a.D?2:p.t(a,\'Z\')[0].G);q(b.3D){b.3D(e,f)}N q(b.1P){7 g=b.1P();g.4W(\'2p\',e);g.3l(\'2p\',f-a.w.T().G);g.4X()}q(!b.3d){b.2b()}},22:r(a){u(a<10?\'0\':\'\')+a},1R:r(a,b){q(b!=a.w.T()){a.w.T(b).4Y(\'4Z\')}},W:r(a,b,c){7 d=(a.w.T()==\'\'||a.x==(b==-1?0:I.1l(1,a.V,a.D)));q(!d){a.x+=b}p.1a(a);a.1X=\'\';$.y(a.w[0],m,a);u(d&&c)},R:r(a,b){q(a.w.T()==\'\'){b=0}7 c=p.t(a,\'27\');p.19(a,F J(0,0,0,a.E+(a.x==0?b*c[0]:0)+(a.x==a.D?b*12:0),a.13+(a.x==1?b*c[1]:0),a.14+(a.x==a.V?b*c[2]:0)))},19:r(a,b){b=p.1A(a,b);7 c=p.1y(a,b?[b.1Y(),b.1Z(),b.21()]:v);b=F J(0,0,0,c[0],c[1],c[2]);7 b=p.25(b);7 d=p.25(p.1A(a,p.t(a,\'2I\')));7 e=p.25(p.1A(a,p.t(a,\'2J\')));b=(d&&b<d?d:(e&&b>e?e:b));7 f=p.t(a,\'2O\');q(f){b=f.1N(a.w[0],[p.3g(a.w[0]),b,d,e])}a.E=b.1Y();a.13=b.1Z();a.14=b.21();p.2A(a);$.y(a.w[0],m,a)},25:r(a){q(!a){u v}a.50(51);a.52(0);a.53(0);u a},1A:r(i,j){7 k=r(a){7 b=F J();b.54(b.2l()+a*3h);u b};7 l=r(a){7 b=$.o.1i(i,a);7 c=F J();7 d=(b?b[0]:c.1Y());7 e=(b?b[1]:c.1Z());7 f=(b?b[2]:c.21());q(!b){7 g=/([+-]?[0-9]+)\\s*(s|S|m|M|h|H)?/g;7 h=g.3E(a);2z(h){2r(h[2]||\'s\'){A\'s\':A\'S\':f+=Q(h[1],10);C;A\'m\':A\'M\':e+=Q(h[1],10);C;A\'h\':A\'H\':d+=Q(h[1],10);C}h=g.3E(a)}}c=F J(0,0,10,d,e,f,0);q(/^!/.55(a)){q(c.3F()>10){c=F J(0,0,10,23,59,59)}N q(c.3F()<10){c=F J(0,0,10,0,0,0)}}u c};u(j?(1h j==\'1L\'?l(j):(1h j==\'56\'?k(j):j)):v)},3o:r(a,b){q(b==p.t(a,\'1d\')){p.W(a,+1,B)}N q(b>=\'0\'&&b<=\'9\'){7 c=Q(b,10);7 d=Q(a.1X+b,10);7 e=p.t(a,\'1c\');7 f=(a.x!=0?a.E:(e?(d<24?d:c):(d>=1&&d<=12?d:(c>0?c:a.E))%12+(a.E>=12?12:0)));7 g=(a.x!=1?a.13:(d<2m?d:c));7 h=(a.x!=a.V?a.14:(d<2m?d:c));7 i=p.1y(a,[f,g,h]);p.19(a,F J(0,0,0,i[0],i[1],i[2]));a.1X=b}N q(!p.t(a,\'1c\')){b=b.1g();7 j=p.t(a,\'Z\');q((b==j[0].1z(0,1).1g()&&a.E>=12)||(b==j[1].1z(0,1).1g()&&a.E<12)){7 k=a.x;a.x=a.D;p.R(a,+1);a.x=k;p.1a(a)}}}});r 1E(a,b){$.1q(a,b);1O(7 c 57 b){q(b[c]==v){a[c]=v}}u a}7 n=[\'58\',\'2l\',\'5a\'];$.1H.o=r(c){7 d=5b.2P.5c.5d(5e,1);q(1h c==\'1L\'&&$.3f(c,n)>-1){u $.o[\'3G\'+c+\'1n\'].1N($.o,[p[0]].3H(d))}u p.2t(r(){7 a=p.1J.1g();q(a==\'w\'){q(1h c==\'1L\'){$.o[\'3G\'+c+\'1n\'].1N($.o,[p].3H(d))}N{7 b=($.1H.3I?$(p).3I():{});$.o.2Q(p,$.1q(b,c))}}})};$.o=F 1n()})(5f);',62,326,'|||||||var|||||||||||||||||timeEntry|this|if|function||_get|return|null|input|_field|data||case|false|break|_ampmField|_selectedHour|new|length||Math|Date|browser|true||else|px|_lastInput|parseInt|_adjustField||val|left|_secondField|_changeField|_timer|_disabledInputs|ampmNames||||_selectedMinute|_selectedSecond|span||bind||_setTime|_showField|_getSpinnerTarget|show24Hours|separator|markerClassName|_parseTime|toLowerCase|typeof|_extractTime|_blurredInput|target|max|_getInput|TimeEntry|ampmPrefix|spinnerSize|extend|options|_isDisabledTimeEntry|document|scrollLeft|css|position|top|_constrainTime|substring|_determineTime|_defaults|showSeconds|spinnerBigSize|extendRemove|class|setTimeout|fn|_endSpinner|nodeName|_changeSpinner|string|_focussed|apply|for|createTextRange|offset|_setValue|abs|_expanded|_handlingSpinner|scrollTop|curTop|_lastChr|getHours|getMinutes||getSeconds|_formatNumber|||_normaliseTime|regional|timeSteps|spinnerRepeat|background|width|focus|_doFocus|msie|mousewheel|_handleSpinner|mouseup|mouseout|_describeSpinner|_enableDisable|nextSibling|getTime|60|documentElement|offsetLeft|character|keyCode|switch|safari|each|0px|_getSpinnerRegion|_actionSpinner|_repeatSpinner|_releaseSpinner|while|_showTime|isNaN|spinnerTexts|field|appendText|initialField|useMouseWheel|defaultTime|minTime|maxTime|spinnerImage|spinnerBigImage|spinnerIncDecOnly|beforeShow|beforeSetTime|prototype|_connectTimeEntry|hasClass|style|url|no|repeat|height|mozilla|padding|after|_doBlur|_doClick|_doKeyDown|_doKeyPress|_doMouseWheel||||||mousedown|_expandSpinner|mousemove|disabled|map|inArray|_getTimeTimeEntry|1000|selectionStart|srcElement|clientX|moveEnd|ctrlKey|charCode|_handleKeyPress|opera|parents|absolute|div|_endExpand|one|_findPos|_findScroll|body|99|min|offsetParent|offsetTop|indexOf|setSelectionRange|exec|getDate|_|concat|metadata|AM|PM|Now|Previous|Next|Increment|Decrement|spinnerDefault|png|500|250|hasTimeEntry|setDefaults|spinnerText|timeEntry_control|display|inline||block|version|bottom|wrap|timeEntry_wrap||timeEntry_append||addClass|blur|click|keydown|keypress|paste|mouseover|_enableTimeEntry|_disableTimeEntry|push|_changeTimeEntry|_destroyTimeEntry|removeClass|unbind|unmousewheel|parent|replaceWith|removeData|_setTimeTimeEntry|object|_getOffsetTimeEntry|3600|thin|medium|thick|border|collapse|boundingWidth|shiftKey|String|fromCharCode|undefined|preventDefault|relative|timeEntry_expand|transparent|index|insertAfter|siblings|title|clearTimeout|remove|clientY|fixed|parentNode|split|round|is|hidden|moveStart|select|trigger|change|setFullYear|1900|setMonth|setDate|setTime|test|number|in|getOffset||isDisabled|Array|slice|call|arguments|jQuery'.split('|'),0,{}))
\ No newline at end of file
+/* jshint ignore:start */
+(function($){function TimeEntry(){this._disabledInputs=[];this.regional=[];this.regional['']={show24Hours:false,separator:':',ampmPrefix:'',ampmNames:['AM','PM'],spinnerTexts:['Now','Previous field','Next field','Increment','Decrement']};this._defaults={appendText:'',showSeconds:false,timeSteps:[1,1,1],initialField:0,noSeparatorEntry:false,useMouseWheel:true,defaultTime:null,minTime:null,maxTime:null,spinnerImage:'spinnerDefault.png',spinnerSize:[20,20,8],spinnerBigImage:'',spinnerBigSize:[40,40,16],spinnerIncDecOnly:false,spinnerRepeat:[500,250],beforeShow:null,beforeSetTime:null};$.extend(this._defaults,this.regional[''])}$.extend(TimeEntry.prototype,{markerClassName:'hasTimeEntry',propertyName:'timeEntry',_appendClass:'timeEntry_append',_controlClass:'timeEntry_control',_expandClass:'timeEntry_expand',setDefaults:function(a){$.extend(this._defaults,a||{});return this},_attachPlugin:function(b,c){var d=$(b);if(d.hasClass(this.markerClassName)){return}var e={options:$.extend({},this._defaults,c),input:d,_field:0,_selectedHour:0,_selectedMinute:0,_selectedSecond:0};d.data(this.propertyName,e).addClass(this.markerClassName).bind('focus.'+this.propertyName,this._doFocus).bind('blur.'+this.propertyName,this._doBlur).bind('click.'+this.propertyName,this._doClick).bind('keydown.'+this.propertyName,this._doKeyDown).bind('keypress.'+this.propertyName,this._doKeyPress).bind('paste.'+this.propertyName,function(a){setTimeout(function(){n._parseTime(e)},1)});this._optionPlugin(b,c)},_optionPlugin:function(a,b,c){a=$(a);var d=a.data(this.propertyName);if(!b||(typeof b=='string'&&c==null)){var e=b;b=(d||{}).options;return(b&&e?b[e]:b)}if(!a.hasClass(this.markerClassName)){return}b=b||{};if(typeof b=='string'){var e=b;b={};b[e]=c}var f=this._extractTime(d);$.extend(d.options,b);d._field=0;if(f){this._setTime(d,new Date(0,0,0,f[0],f[1],f[2]))}a.next('span.'+this._appendClass).remove();a.parent().find('span.'+this._controlClass).remove();if($.fn.mousewheel){a.unmousewheel()}var g=(!d.options.spinnerImage?null:$('<span class="'+this._controlClass+'" style="display: inline-block; '+'background: url(\''+d.options.spinnerImage+'\') 0 0 no-repeat; width: '+d.options.spinnerSize[0]+'px; height: '+d.options.spinnerSize[1]+'px;"></span>'));a.after(d.options.appendText?'<span class="'+this._appendClass+'">'+d.options.appendText+'</span>':'').after(g||'');if(d.options.useMouseWheel&&$.fn.mousewheel){a.mousewheel(this._doMouseWheel)}if(g){g.mousedown(this._handleSpinner).mouseup(this._endSpinner).mouseover(this._expandSpinner).mouseout(this._endSpinner).mousemove(this._describeSpinner)}},_enablePlugin:function(a){this._enableDisable(a,false)},_disablePlugin:function(a){this._enableDisable(a,true)},_enableDisable:function(b,c){var d=$.data(b,this.propertyName);if(!d){return}b.disabled=c;if(b.nextSibling&&b.nextSibling.nodeName.toLowerCase()=='span'){n._changeSpinner(d,b.nextSibling,(c?5:-1))}n._disabledInputs=$.map(n._disabledInputs,function(a){return(a==b?null:a)});if(c){n._disabledInputs.push(b)}},_isDisabledPlugin:function(a){return $.inArray(a,this._disabledInputs)>-1},_destroyPlugin:function(b){b=$(b);if(!b.hasClass(this.markerClassName)){return}b.removeClass(this.markerClassName).removeData(this.propertyName).unbind('.'+this.propertyName);if($.fn.mousewheel){b.unmousewheel()}this._disabledInputs=$.map(this._disabledInputs,function(a){return(a==b[0]?null:a)});b.siblings('.'+this._appendClass+',.'+this._controlClass).remove()},_setTimePlugin:function(a,b){var c=$.data(a,this.propertyName);if(c){if(b===null||b===''){c.input.val('')}else{this._setTime(c,b?(typeof b=='object'?new Date(b.getTime()):b):null)}}},_getTimePlugin:function(a){var b=$.data(a,this.propertyName);var c=(b?this._extractTime(b):null);return(!c?null:new Date(0,0,0,c[0],c[1],c[2]))},_getOffsetPlugin:function(a){var b=$.data(a,this.propertyName);var c=(b?this._extractTime(b):null);return(!c?0:(c[0]*3600+c[1]*60+c[2])*1000)},_doFocus:function(a){var b=(a.nodeName&&a.nodeName.toLowerCase()=='input'?a:this);if(n._lastInput==b||n._isDisabledPlugin(b)){n._focussed=false;return}var c=$.data(b,n.propertyName);n._focussed=true;n._lastInput=b;n._blurredInput=null;$.extend(c.options,($.isFunction(c.options.beforeShow)?c.options.beforeShow.apply(b,[b]):{}));n._parseTime(c);setTimeout(function(){n._showField(c)},10)},_doBlur:function(a){n._blurredInput=n._lastInput;n._lastInput=null},_doClick:function(b){var c=b.target;var d=$.data(c,n.propertyName);var e=d._field;if(!n._focussed){var f=d.options.separator.length+2;d._field=0;if(c.selectionStart!=null){for(var g=0;g<=Math.max(1,d._secondField,d._ampmField);g++){var h=(g!=d._ampmField?(g*f)+2:(d._ampmField*f)+d.options.ampmPrefix.length+d.options.ampmNames[0].length);d._field=g;if(c.selectionStart<h){break}}}else if(c.createTextRange){var i=$(b.srcElement);var j=c.createTextRange();var k=function(a){return{thin:2,medium:4,thick:6}[a]||a};var l=b.clientX+document.documentElement.scrollLeft-(i.offset().left+parseInt(k(i.css('border-left-width')),10))-j.offsetLeft;for(var g=0;g<=Math.max(1,d._secondField,d._ampmField);g++){var h=(g!=d._ampmField?(g*f)+2:(d._ampmField*f)+d.options.ampmPrefix.length+d.options.ampmNames[0].length);j.collapse();j.moveEnd('character',h);d._field=g;if(l<j.boundingWidth){break}}}}if(e!=d._field){d._lastChr=''}n._showField(d);n._focussed=false},_doKeyDown:function(a){if(a.keyCode>=48){return true}var b=$.data(a.target,n.propertyName);switch(a.keyCode){case 9:return(a.shiftKey?n._changeField(b,-1,true):n._changeField(b,+1,true));case 35:if(a.ctrlKey){n._setValue(b,'')}else{b._field=Math.max(1,b._secondField,b._ampmField);n._adjustField(b,0)}break;case 36:if(a.ctrlKey){n._setTime(b)}else{b._field=0;n._adjustField(b,0)}break;case 37:n._changeField(b,-1,false);break;case 38:n._adjustField(b,+1);break;case 39:n._changeField(b,+1,false);break;case 40:n._adjustField(b,-1);break;case 46:n._setValue(b,'');break;default:return true}return false},_doKeyPress:function(a){var b=String.fromCharCode(a.charCode==undefined?a.keyCode:a.charCode);if(b<' '){return true}var c=$.data(a.target,n.propertyName);n._handleKeyPress(c,b);return false},_doMouseWheel:function(a,b){if(n._isDisabledPlugin(a.target)){return}var c=$.data(a.target,n.propertyName);c.input.focus();if(!c.input.val()){n._parseTime(c)}n._adjustField(c,b);a.preventDefault()},_expandSpinner:function(b){var c=n._getSpinnerTarget(b);var d=$.data(n._getInput(c),n.propertyName);if(n._isDisabledPlugin(d.input[0])){return}if(d.options.spinnerBigImage){d._expanded=true;var e=$(c).offset();var f=null;$(c).parents().each(function(){var a=$(this);if(a.css('position')=='relative'||a.css('position')=='absolute'){f=a.offset()}return!f});$('<div class="'+n._expandClass+'" style="position: absolute; left: '+(e.left-(d.options.spinnerBigSize[0]-d.options.spinnerSize[0])/2-(f?f.left:0))+'px; top: '+(e.top-(d.options.spinnerBigSize[1]-d.options.spinnerSize[1])/2-(f?f.top:0))+'px; width: '+d.options.spinnerBigSize[0]+'px; height: '+d.options.spinnerBigSize[1]+'px; background: transparent url('+d.options.spinnerBigImage+') no-repeat 0px 0px; z-index: 10;"></div>').mousedown(n._handleSpinner).mouseup(n._endSpinner).mouseout(n._endExpand).mousemove(n._describeSpinner).insertAfter(c)}},_getInput:function(a){return $(a).siblings('.'+n.markerClassName)[0]},_describeSpinner:function(a){var b=n._getSpinnerTarget(a);var c=$.data(n._getInput(b),n.propertyName);b.title=c.options.spinnerTexts[n._getSpinnerRegion(c,a)]},_handleSpinner:function(a){var b=n._getSpinnerTarget(a);var c=n._getInput(b);if(n._isDisabledPlugin(c)){return}if(c==n._blurredInput){n._lastInput=c;n._blurredInput=null}var d=$.data(c,n.propertyName);n._doFocus(c);var e=n._getSpinnerRegion(d,a);n._changeSpinner(d,b,e);n._actionSpinner(d,e);n._timer=null;n._handlingSpinner=true;if(e>=3&&d.options.spinnerRepeat[0]){n._timer=setTimeout(function(){n._repeatSpinner(d,e)},d.options.spinnerRepeat[0]);$(b).one('mouseout',n._releaseSpinner).one('mouseup',n._releaseSpinner)}},_actionSpinner:function(a,b){if(!a.input.val()){n._parseTime(a)}switch(b){case 0:this._setTime(a);break;case 1:this._changeField(a,-1,false);break;case 2:this._changeField(a,+1,false);break;case 3:this._adjustField(a,+1);break;case 4:this._adjustField(a,-1);break}},_repeatSpinner:function(a,b){if(!n._timer){return}n._lastInput=n._blurredInput;this._actionSpinner(a,b);this._timer=setTimeout(function(){n._repeatSpinner(a,b)},a.options.spinnerRepeat[1])},_releaseSpinner:function(a){clearTimeout(n._timer);n._timer=null},_endExpand:function(a){n._timer=null;var b=n._getSpinnerTarget(a);var c=n._getInput(b);var d=$.data(c,n.propertyName);$(b).remove();d._expanded=false},_endSpinner:function(a){n._timer=null;var b=n._getSpinnerTarget(a);var c=n._getInput(b);var d=$.data(c,n.propertyName);if(!n._isDisabledPlugin(c)){n._changeSpinner(d,b,-1)}if(n._handlingSpinner){n._lastInput=n._blurredInput}if(n._lastInput&&n._handlingSpinner){n._showField(d)}n._handlingSpinner=false},_getSpinnerTarget:function(a){return a.target||a.srcElement},_getSpinnerRegion:function(a,b){var c=this._getSpinnerTarget(b);var d=$(c).offset();var e=[document.documentElement.scrollLeft||document.body.scrollLeft,document.documentElement.scrollTop||document.body.scrollTop];var f=(a.options.spinnerIncDecOnly?99:b.clientX+e[0]-d.left);var g=b.clientY+e[1]-d.top;var h=a.options[a._expanded?'spinnerBigSize':'spinnerSize'];var i=(a.options.spinnerIncDecOnly?99:h[0]-1-f);var j=h[1]-1-g;if(h[2]>0&&Math.abs(f-i)<=h[2]&&Math.abs(g-j)<=h[2]){return 0}var k=Math.min(f,g,i,j);return(k==f?1:(k==i?2:(k==g?3:4)))},_changeSpinner:function(a,b,c){$(b).css('background-position','-'+((c+1)*a.options[a._expanded?'spinnerBigSize':'spinnerSize'][0])+'px 0px')},_parseTime:function(a){var b=this._extractTime(a);if(b){a._selectedHour=b[0];a._selectedMinute=b[1];a._selectedSecond=b[2]}else{var c=this._constrainTime(a);a._selectedHour=c[0];a._selectedMinute=c[1];a._selectedSecond=(a.options.showSeconds?c[2]:0)}a._secondField=(a.options.showSeconds?2:-1);a._ampmField=(a.options.show24Hours?-1:(a.options.showSeconds?3:2));a._lastChr='';a._field=Math.max(0,Math.min(Math.max(1,a._secondField,a._ampmField),a.options.initialField));if(a.input.val()!=''){this._showTime(a)}},_extractTime:function(a,b){b=b||a.input.val();var c=b.split(a.options.separator);if(a.options.separator==''&&b!=''){c[0]=b.substring(0,2);c[1]=b.substring(2,4);c[2]=b.substring(4,6)}if(c.length>=2){var d=!a.options.show24Hours&&(b.indexOf(a.options.ampmNames[0])>-1);var e=!a.options.show24Hours&&(b.indexOf(a.options.ampmNames[1])>-1);var f=parseInt(c[0],10);f=(isNaN(f)?0:f);f=((d||e)&&f==12?0:f)+(e?12:0);var g=parseInt(c[1],10);g=(isNaN(g)?0:g);var h=(c.length>=3?parseInt(c[2],10):0);h=(isNaN(h)||!a.options.showSeconds?0:h);return this._constrainTime(a,[f,g,h])}return null},_constrainTime:function(a,b){var c=(b!=null);if(!c){var d=this._determineTime(a.options.defaultTime,a)||new Date();b=[d.getHours(),d.getMinutes(),d.getSeconds()]}var e=false;for(var i=0;i<a.options.timeSteps.length;i++){if(e){b[i]=0}else if(a.options.timeSteps[i]>1){b[i]=Math.round(b[i]/a.options.timeSteps[i])*a.options.timeSteps[i];e=true}}return b},_showTime:function(a){var b=(this._formatNumber(a.options.show24Hours?a._selectedHour:((a._selectedHour+11)%12)+1)+a.options.separator+this._formatNumber(a._selectedMinute)+(a.options.showSeconds?a.options.separator+this._formatNumber(a._selectedSecond):'')+(a.options.show24Hours?'':a.options.ampmPrefix+a.options.ampmNames[(a._selectedHour<12?0:1)]));this._setValue(a,b);this._showField(a)},_showField:function(a){var b=a.input[0];if(a.input.is(':hidden')||n._lastInput!=b){return}var c=a.options.separator.length+2;var d=(a._field!=a._ampmField?(a._field*c):(a._ampmField*c)-a.options.separator.length+a.options.ampmPrefix.length);var e=d+(a._field!=a._ampmField?2:a.options.ampmNames[0].length);if(b.setSelectionRange){b.setSelectionRange(d,e)}else if(b.createTextRange){var f=b.createTextRange();f.moveStart('character',d);f.moveEnd('character',e-a.input.val().length);f.select()}if(!b.disabled){b.focus()}},_formatNumber:function(a){return(a<10?'0':'')+a},_setValue:function(a,b){if(b!=a.input.val()){a.input.val(b).trigger('change')}},_changeField:function(a,b,c){var d=(a.input.val()==''||a._field==(b==-1?0:Math.max(1,a._secondField,a._ampmField)));if(!d){a._field+=b}this._showField(a);a._lastChr='';return(d&&c)},_adjustField:function(a,b){if(a.input.val()==''){b=0}this._setTime(a,new Date(0,0,0,a._selectedHour+(a._field==0?b*a.options.timeSteps[0]:0)+(a._field==a._ampmField?b*12:0),a._selectedMinute+(a._field==1?b*a.options.timeSteps[1]:0),a._selectedSecond+(a._field==a._secondField?b*a.options.timeSteps[2]:0)))},_setTime:function(a,b){b=this._determineTime(b,a);var c=this._constrainTime(a,b?[b.getHours(),b.getMinutes(),b.getSeconds()]:null);b=new Date(0,0,0,c[0],c[1],c[2]);var b=this._normaliseTime(b);var d=this._normaliseTime(this._determineTime(a.options.minTime,a));var e=this._normaliseTime(this._determineTime(a.options.maxTime,a));if(d&&e&&d>e){if(b<d&&b>e){b=(Math.abs(b-d)<Math.abs(b-e)?d:e)}}else{b=(d&&b<d?d:(e&&b>e?e:b))}if($.isFunction(a.options.beforeSetTime)){b=a.options.beforeSetTime.apply(a.input[0],[this._getTimePlugin(a.input[0]),b,d,e])}a._selectedHour=b.getHours();a._selectedMinute=b.getMinutes();a._selectedSecond=b.getSeconds();this._showTime(a)},_determineTime:function(i,j){var k=function(a){var b=new Date();b.setTime(b.getTime()+a*1000);return b};var l=function(a){var b=n._extractTime(j,a);var c=new Date();var d=(b?b[0]:c.getHours());var e=(b?b[1]:c.getMinutes());var f=(b?b[2]:c.getSeconds());if(!b){var g=/([+-]?[0-9]+)\s*(s|S|m|M|h|H)?/g;var h=g.exec(a);while(h){switch(h[2]||'s'){case's':case'S':f+=parseInt(h[1],10);break;case'm':case'M':e+=parseInt(h[1],10);break;case'h':case'H':d+=parseInt(h[1],10);break}h=g.exec(a)}}c=new Date(0,0,10,d,e,f,0);if(/^!/.test(a)){if(c.getDate()>10){c=new Date(0,0,10,23,59,59)}else if(c.getDate()<10){c=new Date(0,0,10,0,0,0)}}return c};return(i?(typeof i=='string'?l(i):(typeof i=='number'?k(i):i)):null)},_normaliseTime:function(a){if(!a){return null}a.setFullYear(1900);a.setMonth(0);a.setDate(0);return a},_handleKeyPress:function(a,b){if(b==a.options.separator){this._changeField(a,+1,false)}else if(b>='0'&&b<='9'){var c=parseInt(b,10);var d=parseInt(a._lastChr+b,10);var e=(a._field!=0?a._selectedHour:(a.options.show24Hours?(d<24?d:c):(d>=1&&d<=12?d:(c>0?c:a._selectedHour))%12+(a._selectedHour>=12?12:0)));var f=(a._field!=1?a._selectedMinute:(d<60?d:c));var g=(a._field!=a._secondField?a._selectedSecond:(d<60?d:c));var h=this._constrainTime(a,[e,f,g]);this._setTime(a,new Date(0,0,0,h[0],h[1],h[2]));if(a.options.noSeparatorEntry&&a._lastChr){this._changeField(a,+1,false)}else{a._lastChr=b}}else if(!a.options.show24Hours){b=b.toLowerCase();if((b==a.options.ampmNames[0].substring(0,1).toLowerCase()&&a._selectedHour>=12)||(b==a.options.ampmNames[1].substring(0,1).toLowerCase()&&a._selectedHour<12)){var i=a._field;a._field=a._ampmField;this._adjustField(a,+1);a._field=i;this._showField(a)}}}});var m=['getOffset','getTime','isDisabled'];function isNotChained(a,b){if(a=='option'&&(b.length==0||(b.length==1&&typeof b[0]=='string'))){return true}return $.inArray(a,m)>-1}$.fn.timeEntry=function(b){var c=Array.prototype.slice.call(arguments,1);if(isNotChained(b,c)){return n['_'+b+'Plugin'].apply(n,[this[0]].concat(c))}return this.each(function(){if(typeof b=='string'){if(!n['_'+b+'Plugin']){throw'Unknown command: '+b;}n['_'+b+'Plugin'].apply(n,[this].concat(c))}else{var a=($.fn.metadata?$(this).metadata():{});n._attachPlugin(this,$.extend({},a,b||{}))}})};var n=$.timeEntry=new TimeEntry()})(jQuery);
+/* jshint ignore:end */
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat.inc b/profiles/wcm_base/modules/contrib/date/date_repeat.inc
index 2df03dc8..046d8aee 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat.inc
@@ -2,5 +2,6 @@
 /**
  * @file
  * Empty file to avoid fatal error if it doesn't exist.
+ *
  * Formerly the Date Repeat field code.
- */
\ No newline at end of file
+ */
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.info b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.info
index 695a2fd9..b6afcd47 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.info
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.info
@@ -7,9 +7,9 @@ php = 5.2
 files[] = tests/date_repeat.test
 files[] = tests/date_repeat_form.test
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.install b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.install
index 65c3adbb..52039630 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.install
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.install
@@ -12,21 +12,3 @@ function date_repeat_install() {
   // Make sure this module loads after date_api.
   db_query("UPDATE {system} SET weight = 1 WHERE name = 'date_repeat'");
 }
-
-/**
- * Implements hook_uninstall().
- */
-function date_repeat_uninstall() {
-}
-
-/**
- * Implements hook_enable().
- */
-function date_repeat_enable() {
-}
-
-/**
- * Implements hook_disable().
- */
-function date_repeat_disable() {
-}
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.module b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.module
index d742dc88..61d971ba 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.module
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat.module
@@ -1,7 +1,6 @@
 <?php
 /**
  * @file
- *
  * This module creates a form element that allows users to select
  * repeat rules for a date, and reworks the result into an iCal
  * RRULE string that can be stored in the database.
@@ -11,8 +10,8 @@
  *
  * Other modules can use this API to add self-validating form elements
  * to their dates, and identify dates that meet the RRULE criteria.
- *
  */
+
 /**
  * Implements hook_element_info().
  */
@@ -35,6 +34,9 @@ function date_repeat_element_info() {
   return $type;
 }
 
+/**
+ * Implements hook_theme().
+ */
 function date_repeat_theme() {
   return array(
     'date_repeat_current_exceptions' => array('render element' => 'element'),
@@ -55,6 +57,9 @@ function date_repeat_freq_options() {
   );
 }
 
+/**
+ * Helper function for interval options.
+ */
 function date_repeat_interval_options() {
   $options = range(0, 366);
   unset($options[0]);
@@ -92,9 +97,11 @@ function date_repeat_dow_day_options_abbr($translated = TRUE, $length = 3) {
     case 1:
       $context = 'day_abbr1';
       break;
+
     case 2:
       $context = 'day_abbr2';
       break;
+
     default:
       $context = '';
       break;
@@ -105,16 +112,28 @@ function date_repeat_dow_day_options_abbr($translated = TRUE, $length = 3) {
   return $return;
 }
 
+/**
+ * Helper function for weekdays translated.
+ */
 function date_repeat_dow_day_untranslated() {
   static $date_repeat_weekdays;
   if (empty($date_repeat_weekdays)) {
-    $date_repeat_weekdays = array('SU' => 'Sunday', 'MO' => 'Monday', 'TU' => 'Tuesday',
-      'WE' => 'Wednesday', 'TH' => 'Thursday', 'FR' => 'Friday',
-      'SA' => 'Saturday');
+    $date_repeat_weekdays = array(
+      'SU' => 'Sunday',
+      'MO' => 'Monday',
+      'TU' => 'Tuesday',
+      'WE' => 'Wednesday',
+      'TH' => 'Thursday',
+      'FR' => 'Friday',
+      'SA' => 'Saturday'
+    );
   }
   return $date_repeat_weekdays;
 }
 
+/**
+ * Helper function for weekdays order.
+ */
 function date_repeat_dow_day_options_ordered($weekdays) {
   $day_keys = array_keys($weekdays);
   $day_values = array_values($weekdays);
@@ -164,8 +183,7 @@ function date_repeat_dow2day($dow) {
 }
 
 /**
- * Shift the array of iCal day names into the right order
- * for a specific week start day.
+ * Shift the array of iCal day names into the right order for a specific week start day.
  */
 function date_repeat_days_ordered($week_start_day) {
   $days = array_flip(array_keys(date_repeat_dow_day_options(FALSE)));
@@ -212,18 +230,21 @@ function date_repeat_rrule_description($rrule, $format = 'D M d Y') {
     '!except' => '',
     '!additional' => '',
     '!week_starts_on' => '',
-    );
+  );
   $interval = date_repeat_interval_options();
   switch ($rrule['FREQ']) {
     case 'WEEKLY':
       $description['!interval'] = format_plural($rrule['INTERVAL'], 'every week', 'every @count weeks') . ' ';
       break;
+
     case 'MONTHLY':
       $description['!interval'] = format_plural($rrule['INTERVAL'], 'every month', 'every @count months') . ' ';
       break;
+
     case 'YEARLY':
       $description['!interval'] = format_plural($rrule['INTERVAL'], 'every year', 'every @count years') . ' ';
       break;
+
     default:
       $description['!interval'] = format_plural($rrule['INTERVAL'], 'every day', 'every @count days') . ' ';
       break;
@@ -240,26 +261,41 @@ function date_repeat_rrule_description($rrule, $format = 'D M d Y') {
       if (!empty($count)) {
         // See if there is a 'pretty' option for this count, i.e. +1 => First.
         $order = array_key_exists($count, $counts) ? strtolower($counts[$count]) : $count;
-        $results[] = trim(t('!repeats_every_interval on the !date_order !day_of_week', array('!repeats_every_interval ' => '', '!date_order' => $order, '!day_of_week' => $days[$day])));
+        $results[] = trim(t('!repeats_every_interval on the !date_order !day_of_week',
+        array(
+          '!repeats_every_interval ' => '',
+          '!date_order' => $order,
+          '!day_of_week' => $days[$day]
+        )));
       }
       else {
-        $results[] = trim(t('!repeats_every_interval every !day_of_week', array('!repeats_every_interval ' => '', '!day_of_week' => $days[$day])));
+        $results[] = trim(t('!repeats_every_interval every !day_of_week',
+        array('!repeats_every_interval ' => '', '!day_of_week' => $days[$day])));
       }
     }
     $description['!byday'] = implode(' ' . t('and') . ' ', $results);
   }
   if (!empty($rrule['BYMONTH'])) {
-    if (sizeof($rrule['BYMONTH']) < 12) {
+    if (count($rrule['BYMONTH']) < 12) {
       $results = array();
       $months = date_month_names();
       foreach ($rrule['BYMONTH'] as $month) {
         $results[] = $months[$month];
       }
       if (!empty($rrule['BYMONTHDAY'])) {
-        $description['!bymonth'] = trim(t('!repeats_every_interval on the !month_days of !month_names', array('!repeats_every_interval ' => '', '!month_days' => implode(', ', $rrule['BYMONTHDAY']), '!month_names' => implode(', ', $results))));
+        $description['!bymonth'] = trim(t('!repeats_every_interval on the !month_days of !month_names',
+        array(
+          '!repeats_every_interval ' => '',
+          '!month_days' => implode(', ', $rrule['BYMONTHDAY']),
+          '!month_names' => implode(', ', $results)
+        )));
       }
       else {
-        $description['!bymonth'] = trim(t('!repeats_every_interval on !month_names', array('!repeats_every_interval ' => '', '!month_names' => implode(', ', $results))));
+        $description['!bymonth'] = trim(t('!repeats_every_interval on !month_names',
+        array(
+          '!repeats_every_interval ' => '',
+          '!month_names' => implode(', ', $results)
+        )));
       }
     }
   }
@@ -267,12 +303,17 @@ function date_repeat_rrule_description($rrule, $format = 'D M d Y') {
     $rrule['INTERVAL'] = 1;
   }
   if (!empty($rrule['COUNT'])) {
-    $description['!count'] = trim(t('!repeats_every_interval !count times', array('!repeats_every_interval ' => '', '!count' => $rrule['COUNT'])));
+    $description['!count'] = trim(t('!repeats_every_interval !count times',
+    array('!repeats_every_interval ' => '', '!count' => $rrule['COUNT'])));
   }
   if (!empty($rrule['UNTIL'])) {
     $until = date_ical_date($rrule['UNTIL'], 'UTC');
     date_timezone_set($until, date_default_timezone_object());
-    $description['!until'] = trim(t('!repeats_every_interval until !until_date', array('!repeats_every_interval ' => '', '!until_date' => date_format_date($until, 'custom', $format))));
+    $description['!until'] = trim(t('!repeats_every_interval until !until_date',
+    array(
+      '!repeats_every_interval ' => '',
+      '!until_date' => date_format_date($until, 'custom', $format)
+    )));
   }
   if ($exceptions) {
     $values = array();
@@ -281,11 +322,16 @@ function date_repeat_rrule_description($rrule, $format = 'D M d Y') {
       date_timezone_set($except, date_default_timezone_object());
       $values[] = date_format_date($except, 'custom', $format);
     }
-    $description['!except'] = trim(t('!repeats_every_interval except !except_dates', array('!repeats_every_interval ' => '', '!except_dates' => implode(', ', $values))));
+    $description['!except'] = trim(t('!repeats_every_interval except !except_dates',
+    array(
+      '!repeats_every_interval ' => '',
+      '!except_dates' => implode(', ', $values)
+    )));
   }
   if (!empty($rrule['WKST'])) {
     $day_names = date_repeat_dow_day_options();
-    $description['!week_starts_on'] = trim(t('!repeats_every_interval where the week start on !day_of_week', array('!repeats_every_interval ' => '', '!day_of_week' => $day_names[trim($rrule['WKST'])])));
+    $description['!week_starts_on'] = trim(t('!repeats_every_interval where the week start on !day_of_week',
+    array('!repeats_every_interval ' => '', '!day_of_week' => $day_names[trim($rrule['WKST'])])));
   }
   if ($additions) {
     $values = array();
@@ -294,9 +340,15 @@ function date_repeat_rrule_description($rrule, $format = 'D M d Y') {
       date_timezone_set($add, date_default_timezone_object());
       $values[] = date_format_date($add, 'custom', $format);
     }
-    $description['!additional'] = trim(t('Also includes !additional_dates.', array('!additional_dates' => implode(', ', $values))));
+    $description['!additional'] = trim(t('Also includes !additional_dates.',
+    array('!additional_dates' => implode(', ', $values))));
   }
-  return t('Repeats !interval !bymonth !byday !count !until !except. !additional', $description);
+  $output = t('Repeats !interval !bymonth !byday !count !until !except. !additional', $description);
+  // Removes double whitespaces from Repeat tile.
+  $output = preg_replace('/\s+/', ' ', $output);
+  // Removes whitespace before full stop ".", at the end of the title.
+  $output = str_replace(' .', '.', $output);
+  return $output;
 }
 
 /**
@@ -310,17 +362,17 @@ function date_repeat_split_rrule($rrule) {
   $additions = array();
   foreach ($parts as $part) {
     if (strstr($part, 'RRULE')) {
-      $RRULE = str_replace('RRULE:', '', $part);
-      $rrule = (array) date_ical_parse_rrule('RRULE:', $RRULE);
+      $cleanded_part = str_replace('RRULE:', '', $part);
+      $rrule = (array) date_ical_parse_rrule('RRULE:', $cleanded_part);
     }
     elseif (strstr($part, 'EXDATE')) {
-      $EXDATE = str_replace('EXDATE:', '', $part);
-      $exceptions = (array) date_ical_parse_exceptions('EXDATE:', $EXDATE);
+      $exdate = str_replace('EXDATE:', '', $part);
+      $exceptions = (array) date_ical_parse_exceptions('EXDATE:', $exdate);
       unset($exceptions['DATA']);
     }
     elseif (strstr($part, 'RDATE')) {
-      $RDATE = str_replace('RDATE:', '', $part);
-      $additions = (array) date_ical_parse_exceptions('RDATE:', $RDATE);
+      $rdate = str_replace('RDATE:', '', $part);
+      $additions = (array) date_ical_parse_exceptions('RDATE:', $rdate);
       unset($additions['DATA']);
     }
   }
@@ -372,7 +424,7 @@ function date_repeat_form_element_radios_process($element) {
         '#title_display' => 'invisible',
         '#return_value' => $key,
         '#default_value' => isset($element['#default_value']) ?
-          $element['#default_value'] : NULL,
+        $element['#default_value'] : NULL,
         '#attributes' => $element['#attributes'],
         '#parents' => $element['#parents'],
         '#id' => drupal_html_id('edit-' . implode('-', $parents_for_id)),
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_calc.inc b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_calc.inc
index 4ff3c4a5..d840df62 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_calc.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_calc.inc
@@ -53,9 +53,11 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
   // Create a date object for the start and end dates.
   $start_date = new DateObject($start, $timezone);
 
-  // Versions of PHP greater than PHP 5.3.5 require that we set an explicit time when
-  // using date_modify() or the time may not match the original value. Adding this
-  // modifier gives us the same results in both older and newer versions of PHP.
+  // Versions of PHP greater than PHP 5.3.5 require
+  // that we set an explicit time when using date_modify()
+  // or the time may not match the original value.
+  // Adding this modifier gives us the same results in both older
+  // and newer versions of PHP.
   $modify_time = ' ' . $start_date->format('g:ia');
 
   // If the rule has an UNTIL, see if that is earlier than the end date.
@@ -91,27 +93,32 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
   }
 
   // Make sure DAILY frequency isn't used in places it won't work;
-  if (!empty($rrule['BYMONTHDAY']) && !in_array($rrule['FREQ'], array('MONTHLY', 'YEARLY'))) {
+  if (!empty($rrule['BYMONTHDAY']) &&
+    !in_array($rrule['FREQ'], array('MONTHLY', 'YEARLY'))) {
     $rrule['FREQ'] = 'MONTHLY';
   }
-  elseif (!empty($rrule['BYDAY']) && !in_array($rrule['FREQ'], array('MONTHLY', 'WEEKLY', 'YEARLY'))) {
+  elseif (!empty($rrule['BYDAY'])
+    && !in_array($rrule['FREQ'], array('MONTHLY', 'WEEKLY', 'YEARLY'))) {
     $rrule['FREQ'] = 'WEEKLY';
-   }
+  }
 
   // Find the time period to jump forward between dates.
   switch ($rrule['FREQ']) {
-   case 'DAILY':
-     $jump = $interval . ' days';
-     break;
-   case 'WEEKLY':
-     $jump = $interval . ' weeks';
-     break;
-   case 'MONTHLY':
-     $jump = $interval . ' months';
-     break;
-   case 'YEARLY':
-     $jump = $interval . ' years';
-     break;
+    case 'DAILY':
+      $jump = $interval . ' days';
+      break;
+
+    case 'WEEKLY':
+      $jump = $interval . ' weeks';
+      break;
+
+    case 'MONTHLY':
+      $jump = $interval . ' months';
+      break;
+
+    case 'YEARLY':
+      $jump = $interval . ' years';
+      break;
   }
   $rrule = date_repeat_adjust_rrule($rrule, $start_date);
 
@@ -135,7 +142,7 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
         $direction_days[$day] = array(
           'direction' => !empty($regs[1]) ? $regs[1] : '+',
           'direction_count' => $regs[2],
-          );
+        );
       }
     }
     while (!$finished) {
@@ -198,8 +205,9 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
 
   else {
 
-    // More complex searches for day names and criteria like '-1SU' or '2TU,2TH',
-    // require that we interate through the whole time period checking each BYDAY.
+    // More complex searches for day names and criteria
+    // like '-1SU' or '2TU,2TH', require that we interate through
+    // the whole time period checking each BYDAY.
 
     // Create helper array to pull day names out of iCal day strings.
     $day_names = date_repeat_dow_day_options(FALSE);
@@ -303,7 +311,8 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
     // period, then jumping ahead to the next week, month, or year,
     // an INTERVAL at a time.
 
-    if (!empty($week_days) && in_array($rrule['FREQ'], array('MONTHLY', 'WEEKLY', 'YEARLY'))) {
+    if (!empty($week_days) &&
+      in_array($rrule['FREQ'], array('MONTHLY', 'WEEKLY', 'YEARLY'))) {
       $finished = FALSE;
       $current_day = clone($start_date);
       $format = $rrule['FREQ'] == 'YEARLY' ? 'Y' : 'n';
@@ -322,8 +331,9 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
           $moved = FALSE;
           foreach ($week_days as $delta => $day) {
             // Find the next occurence of each day in this week, only add it
-            // if we are still in the current month or year. The date_repeat_add_dates
-            // function is insufficient to test whether to include this date
+            // if we are still in the current month or year.
+            // The date_repeat_add_dates function is insufficient
+            // to test whether to include this date
             // if we are using a rule like 'every other month', so we must
             // explicitly test it here.
 
@@ -370,10 +380,12 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
             date_modify($current_day, '+1 ' . $week_start_day . $modify_time);
             date_modify($current_day, '-1 week' . $modify_time);
             break;
+
           case 'MONTHLY':
             date_modify($current_day, '-' . (date_format($current_day, 'j') - 1) . ' days' . $modify_time);
             date_modify($current_day, '-1 month' . $modify_time);
             break;
+
           case 'YEARLY':
             date_modify($current_day, '-' . date_format($current_day, 'z') . ' days' . $modify_time);
             date_modify($current_day, '-1 year' . $modify_time);
@@ -387,7 +399,7 @@ function _date_repeat_calc($rrule, $start, $end, $exceptions, $timezone, $additi
     }
   }
 
-  // add additional dates
+  // Add additional dates.
   foreach ($additions as $addition) {
     $date = new dateObject($addition . ' ' . $start_date->format('H:i:s'), $timezone);
     $days[] = date_format($date, DATE_FORMAT_DATETIME);
@@ -426,8 +438,8 @@ function date_repeat_adjust_rrule($rrule, $start_date) {
   // position rules make no sense in other periods and just add complexity.
 
   elseif (!empty($rrule['BYDAY']) && !in_array($rrule['FREQ'], array('MONTHLY', 'YEARLY'))) {
-    foreach ($rrule['BYDAY'] as $delta => $BYDAY) {
-      $rrule['BYDAY'][$delta] = substr($BYDAY, -2);
+    foreach ($rrule['BYDAY'] as $delta => $by_day) {
+      $rrule['BYDAY'][$delta] = substr($by_day, -2);
     }
   }
 
@@ -442,7 +454,7 @@ function date_repeat_adjust_rrule($rrule, $start_date) {
  * and that it meets other criteria in the RRULE.
  */
 function date_repeat_add_dates(&$days, $current_day, $start_date, $end_date, $exceptions, $rrule) {
-  if (isset($rrule['COUNT']) && sizeof($days) >= $rrule['COUNT']) {
+  if (isset($rrule['COUNT']) && count($days) >= $rrule['COUNT']) {
     return FALSE;
   }
   $formatted = date_format($current_day, DATE_FORMAT_DATETIME);
@@ -456,13 +468,14 @@ function date_repeat_add_dates(&$days, $current_day, $start_date, $end_date, $ex
     return FALSE;
   }
   if (!empty($rrule['BYDAY'])) {
-    $BYDAYS = $rrule['BYDAY'];
-    foreach ($BYDAYS as $delta => $BYDAY) {
-      $BYDAYS[$delta] = substr($BYDAY, -2);
+    $by_days = $rrule['BYDAY'];
+    foreach ($by_days as $delta => $by_day) {
+      $by_days[$delta] = substr($by_day, -2);
     }
-    if (!in_array(date_repeat_dow2day(date_format($current_day, 'w')), $BYDAYS)) {
+    if (!in_array(date_repeat_dow2day(date_format($current_day, 'w')), $by_days)) {
       return FALSE;
-    }}
+    }
+  }
   if (!empty($rrule['BYYEAR']) && !in_array(date_format($current_day, 'Y'), $rrule['BYYEAR'])) {
     return FALSE;
   }
@@ -472,17 +485,17 @@ function date_repeat_add_dates(&$days, $current_day, $start_date, $end_date, $ex
   if (!empty($rrule['BYMONTHDAY'])) {
     // Test month days, but only if there are no negative numbers.
     $test = TRUE;
-    $BYMONTHDAYS = array();
+    $by_month_days = array();
     foreach ($rrule['BYMONTHDAY'] as $day) {
       if ($day > 0) {
-        $BYMONTHDAYS[] = $day;
+        $by_month_days[] = $day;
       }
       else {
         $test = FALSE;
         break;
       }
     }
-    if ($test && !empty($BYMONTHDAYS) && !in_array(date_format($current_day, 'j'), $BYMONTHDAYS)) {
+    if ($test && !empty($by_month_days) && !in_array(date_format($current_day, 'j'), $by_month_days)) {
       return FALSE;
     }
   }
@@ -499,7 +512,7 @@ function date_repeat_add_dates(&$days, $current_day, $start_date, $end_date, $ex
  * Stop when $current_day is greater than $end_date or $count is reached.
  */
 function date_repeat_is_finished($current_day, $days, $count, $end_date) {
-  if (($count && sizeof($days) >= $count)
+  if (($count && count($days) >= $count)
   || (!empty($end_date) && date_format($current_day, 'U') > date_format($end_date, 'U'))) {
     return TRUE;
   }
@@ -517,7 +530,7 @@ function date_repeat_is_finished($current_day, $days, $count, $end_date) {
  *   If $day is empty, will set to the number of days from the
  *   beginning or end of the month.
  */
-function date_repeat_set_month_day($date_in, $day, $count = 1, $direction = '+', $timezone = 'UTC', $modify_time) {
+function date_repeat_set_month_day($date_in, $day, $count = 1, $direction = '+', $timezone = 'UTC', $modify_time = '') {
   if (is_object($date_in)) {
     $current_month = date_format($date_in, 'n');
 
@@ -567,7 +580,7 @@ function date_repeat_set_month_day($date_in, $day, $count = 1, $direction = '+',
  *   If $day is empty, will set to the number of days from the
  *   beginning or end of the year.
  */
-function date_repeat_set_year_day($date_in, $month, $day, $count = 1, $direction = '+', $timezone = 'UTC', $modify_time) {
+function date_repeat_set_year_day($date_in, $month, $day, $count = 1, $direction = '+', $timezone = 'UTC', $modify_time = '') {
   if (is_object($date_in)) {
     $current_year = date_format($date_in, 'Y');
 
@@ -620,4 +633,4 @@ function date_repeat_set_year_day($date_in, $month, $day, $count = 1, $direction
     }
   }
   return $date_in;
-}
\ No newline at end of file
+}
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_form.inc b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_form.inc
index db7a79bc..33525956 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_form.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat/date_repeat_form.inc
@@ -30,13 +30,16 @@
  * BYSETPOS
  *   Seldom used anywhere, so no reason to complicated the code.
  */
+
 /**
  * Generate the repeat setting form.
  */
 function _date_repeat_rrule_process($element, &$form_state, $form) {
 
-  // If the RRULE field is not visible to the user, needs no processing or validation.
-  // The Date field module is not adding this element to forms if the field is hidden,
+  // If the RRULE field is not visible to the user,
+  // needs no processing or validation.
+  // The Date field module is not adding this element to forms
+  // if the field is hidden,
   // this test is just in case some other module attempts to do so.
 
   if (date_hidden_element($element)) {
@@ -67,16 +70,16 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
   $timezone = !empty($element['#date_timezone']) ? $element['#date_timezone'] : date_default_timezone();
   $merged_values = date_repeat_merge($rrule, $element);
 
-  $UNTIL = '';
+  $until = '';
   if (!empty($merged_values['UNTIL']['datetime'])) {
     $until_date = new DateObject($merged_values['UNTIL']['datetime'], $merged_values['UNTIL']['tz']);
     date_timezone_set($until_date, timezone_open($timezone));
-    $UNTIL = date_format($until_date, DATE_FORMAT_DATETIME);
+    $until = date_format($until_date, DATE_FORMAT_DATETIME);
   }
 
-  $COUNT = '';
+  $count = '';
   if (!empty($merged_values['COUNT'])) {
-    $COUNT = $merged_values['COUNT'];
+    $count = $merged_values['COUNT'];
   }
 
   $element['FREQ'] = array(
@@ -137,7 +140,7 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
   );
 
   list($prefix, $suffix) = explode('@interval', t('Every @interval days', array(), array('context' => 'Date repeat')));
-  $DAILY_INTERVAL = array(
+  $daily_interval = array(
     '#type' => 'textfield',
     '#title' => t('Repeats', array(), array('context' => 'Date repeat')),
     '#title_display' => 'invisible',
@@ -210,32 +213,34 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
     '#suffix' => '</div>',
   );
 
-  $DAILY_radios_default = 'INTERVAL';
+  $daily_radios_default = 'INTERVAL';
   if (isset($rrule['FREQ']) && $rrule['FREQ'] === 'DAILY' && !empty($rrule['BYDAY'])) {
     switch (count($rrule['BYDAY'])) {
       case 2:
-        $DAILY_radios_default = 'every_tu_th';
+        $daily_radios_default = 'every_tu_th';
         break;
+
       case 3:
-        $DAILY_radios_default = 'every_mo_we_fr';
+        $daily_radios_default = 'every_mo_we_fr';
         break;
+
       case 5:
-        $DAILY_radios_default = 'every_weekday';
+        $daily_radios_default = 'every_weekday';
         break;
     }
   }
 
-  $DAILY_every_weekday = array(
+  $daily_every_weekday = array(
     '#type' => 'item',
     '#markup' => '<div>' . t('Every weekday', array(), array('context' => 'Date repeat')) . '</div>',
   );
 
-  $DAILY_mo_we_fr = array(
+  $daily_mo_we_fr = array(
     '#type' => 'item',
     '#markup' => '<div>' . t('Every Mon, Wed, Fri', array(), array('context' => 'Date repeat')) . '</div>',
   );
 
-  $DAILY_tu_th = array(
+  $daily_tu_th = array(
     '#type' => 'item',
     '#markup' => '<div>' . t('Every Tue, Thu', array(), array('context' => 'Date repeat')) . '</div>',
   );
@@ -251,17 +256,17 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
         ":input[name=\"{$element['#name']}[FREQ]\"]" => array('value' => 'DAILY'),
       ),
     ),
-    '#default_value' => $DAILY_radios_default,
+    '#default_value' => $daily_radios_default,
     '#options' => array(
       'INTERVAL' => t('interval'),
       'every_weekday' => t('every weekday'),
       'every_mo_we_fr' => t('monday wednesday friday'),
       'every_tu_th' => t('tuesday thursday'),
     ),
-    'INTERVAL_child' => $DAILY_INTERVAL,
-    'every_weekday_child' => $DAILY_every_weekday,
-    'mo_we_fr_child' => $DAILY_mo_we_fr,
-    'tu_th_child' => $DAILY_tu_th,
+    'INTERVAL_child' => $daily_interval,
+    'every_weekday_child' => $daily_every_weekday,
+    'mo_we_fr_child' => $daily_mo_we_fr,
+    'tu_th_child' => $daily_tu_th,
     '#div_classes' => array(
       'container-inline interval',
       'container-inline weekday',
@@ -270,18 +275,18 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
     ),
   );
 
-  $MONTHLY_day_month_default = 'BYMONTHDAY_BYMONTH';
+  $monthly_day_month_default = 'BYMONTHDAY_BYMONTH';
   if (isset($rrule['FREQ']) && $rrule['FREQ'] === 'MONTHLY' && !empty($rrule['BYDAY'])) {
-    $MONTHLY_day_month_default = 'BYDAY_BYMONTH';
+    $monthly_day_month_default = 'BYDAY_BYMONTH';
   }
 
-  $MONTHLY_on_day_BYMONTHDAY_of_BYMONTH = array(
+  $monthly_on_day_bymonthday_of_bymonth = array(
     '#type' => 'container',
     '#tree' => TRUE,
   );
 
   list($bymonthday_title, $bymonthday_suffix) = explode('@bymonthday', t('On day @bymonthday of', array(), array('context' => 'Date repeat')));
-  $MONTHLY_on_day_BYMONTHDAY_of_BYMONTH['BYMONTHDAY'] = array(
+  $monthly_on_day_bymonthday_of_bymonth['BYMONTHDAY'] = array(
     '#type' => 'select',
     '#title' => $bymonthday_title,
     '#default_value' => !empty($rrule['BYMONTHDAY']) && $rrule['FREQ'] === 'MONTHLY' ? $rrule['BYMONTHDAY'] : '',
@@ -292,11 +297,11 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
     '#field_suffix' => $bymonthday_suffix,
   );
 
-  $MONTHLY_on_day_BYMONTHDAY_of_BYMONTH['BYMONTH'] = array(
+  $monthly_on_day_bymonthday_of_bymonth['BYMONTH'] = array(
     '#type' => 'checkboxes',
     '#title' => t('Bymonth', array(), array('context' => 'Date repeat')),
     '#title_display' => 'invisible',
-    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'MONTHLY' && $MONTHLY_day_month_default === 'BYMONTHDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
+    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'MONTHLY' && $monthly_day_month_default === 'BYMONTHDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
     '#options' => date_month_names_abbr(TRUE),
     '#attributes' => array('class' => array('container-inline')),
     '#multiple' => TRUE,
@@ -304,45 +309,45 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
     '#suffix' => '</div>',
   );
 
-  $MONTHLY_on_the_BYDAY_of_BYMONTH = array(
+  $monthly_on_the_byday_of_bymonth = array(
     '#type' => 'container',
     '#tree' => TRUE,
   );
 
-  $MONTHLY_BYDAY_COUNT = '';
-  $MONTHLY_BYDAY_DAY = '';
+  $monthly_byday_count = '';
+  $monthly_byday_day = '';
   if (isset($rrule['BYDAY']) && !empty($rrule['BYDAY']) && $rrule['FREQ'] === 'MONTHLY') {
-    $MONTHLY_BYDAY_COUNT = substr($rrule['BYDAY'][0], 0, -2);
-    $MONTHLY_BYDAY_DAY = substr($rrule['BYDAY'][0], -2);;
+    $monthly_byday_count = substr($rrule['BYDAY'][0], 0, -2);
+    $monthly_byday_day = substr($rrule['BYDAY'][0], -2);;
   }
 
   list($byday_count_title, $byday_day_title) = explode('@byday', t('On the @byday of', array(), array('context' => 'Date repeat')));
-  $MONTHLY_on_the_BYDAY_of_BYMONTH['BYDAY_COUNT'] = array(
+  $monthly_on_the_byday_of_bymonth['BYDAY_COUNT'] = array(
     '#type' => 'select',
     '#title' => $byday_count_title,
-    '#default_value' => !empty($MONTHLY_BYDAY_COUNT) ? $MONTHLY_BYDAY_COUNT : '',
+    '#default_value' => !empty($monthly_byday_count) ? $monthly_byday_count : '',
     '#options' => date_order_translated(),
     '#multiple' => FALSE,
     '#prefix' => '<div class="date-repeat-input byday-count">',
     '#suffix' => '</div>',
   );
 
-  $MONTHLY_on_the_BYDAY_of_BYMONTH['BYDAY_DAY'] = array(
+  $monthly_on_the_byday_of_bymonth['BYDAY_DAY'] = array(
     '#type' => 'select',
     '#title' => $byday_day_title,
     '#title_display' => 'after',
-    '#default_value' => !empty($MONTHLY_BYDAY_DAY) ? $MONTHLY_BYDAY_DAY : '',
+    '#default_value' => !empty($monthly_byday_day) ? $monthly_byday_day : '',
     '#options' => date_repeat_dow_day_options(TRUE),
     '#multiple' => FALSE,
     '#prefix' => '<div class="date-repeat-input byday-day">',
     '#suffix' => '</div>',
   );
 
-  $MONTHLY_on_the_BYDAY_of_BYMONTH['BYMONTH'] = array(
+  $monthly_on_the_byday_of_bymonth['BYMONTH'] = array(
     '#type' => 'checkboxes',
     '#title' => t('Bymonth', array(), array('context' => 'Date repeat')),
     '#title_display' => 'invisible',
-    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'MONTHLY' && $MONTHLY_day_month_default === 'BYDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
+    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'MONTHLY' && $monthly_day_month_default === 'BYDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
     '#options' => date_month_names_abbr(TRUE),
     '#attributes' => array('class' => array('container-inline')),
     '#multiple' => TRUE,
@@ -361,31 +366,31 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
       ),
     ),
     '#attributes' => array('class' => array('date-repeat-radios clearfix')),
-    '#default_value' => $MONTHLY_day_month_default,
+    '#default_value' => $monthly_day_month_default,
     '#options' => array(
       'BYMONTHDAY_BYMONTH' => t('On day ... of ...'),
       'BYDAY_BYMONTH' => t('On the ... of ...'),
     ),
-    'BYMONTHDAY_BYMONTH_child' => $MONTHLY_on_day_BYMONTHDAY_of_BYMONTH,
-    'BYDAY_BYMONTH_child' => $MONTHLY_on_the_BYDAY_of_BYMONTH,
+    'BYMONTHDAY_BYMONTH_child' => $monthly_on_day_bymonthday_of_bymonth,
+    'BYDAY_BYMONTH_child' => $monthly_on_the_byday_of_bymonth,
     '#div_classes' => array(
       'date-repeat-radios-item date-clear clearfix bymonthday-bymonth',
       'date-repeat-radios-item date-clear clearfix byday-bymonth',
     ),
   );
 
-  $YEARLY_day_month_default = 'BYMONTHDAY_BYMONTH';
+  $yearly_day_month_default = 'BYMONTHDAY_BYMONTH';
   if (isset($rrule['FREQ']) && $rrule['FREQ'] === 'YEARLY' && !empty($rrule['BYDAY'])) {
-    $YEARLY_day_month_default = 'BYDAY_BYMONTH';
+    $yearly_day_month_default = 'BYDAY_BYMONTH';
   }
 
-  $YEARLY_on_day_BYMONTHDAY_of_BYMONTH = array(
+  $yearly_on_day_bymonthday_of_bymonth = array(
     '#type' => 'container',
     '#tree' => TRUE,
   );
 
   list($bymonthday_title, $bymonthday_suffix) = explode('@bymonthday', t('On day @bymonthday of', array(), array('context' => 'Date repeat')));
-  $YEARLY_on_day_BYMONTHDAY_of_BYMONTH['BYMONTHDAY'] = array(
+  $yearly_on_day_bymonthday_of_bymonth['BYMONTHDAY'] = array(
     '#type' => 'select',
     '#title' => $bymonthday_title,
     '#default_value' => !empty($rrule['BYMONTHDAY']) && $rrule['FREQ'] === 'YEARLY' ? $rrule['BYMONTHDAY'] : '',
@@ -396,11 +401,11 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
     '#field_suffix' => $bymonthday_suffix,
   );
 
-  $YEARLY_on_day_BYMONTHDAY_of_BYMONTH['BYMONTH'] = array(
+  $yearly_on_day_bymonthday_of_bymonth['BYMONTH'] = array(
     '#type' => 'checkboxes',
     '#title' => t('Bymonth', array(), array('context' => 'Date repeat')),
     '#title_display' => 'invisible',
-    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'YEARLY' && $YEARLY_day_month_default === 'BYMONTHDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
+    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'YEARLY' && $yearly_day_month_default === 'BYMONTHDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
     '#options' => date_month_names_abbr(TRUE),
     '#attributes' => array('class' => array('container-inline')),
     '#multiple' => TRUE,
@@ -408,45 +413,45 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
     '#suffix' => '</div>',
   );
 
-  $YEARLY_on_the_BYDAY_of_BYMONTH = array(
+  $yearly_on_the_byday_of_bymonth = array(
     '#type' => 'container',
     '#tree' => TRUE,
   );
 
-  $YEARLY_BYDAY_COUNT = '';
-  $YEARLY_BYDAY_DAY = '';
+  $yearly_byday_count = '';
+  $yearly_byday_day = '';
   if (isset($rrule['BYDAY']) && !empty($rrule['BYDAY']) && $rrule['FREQ'] === 'YEARLY') {
-    $YEARLY_BYDAY_COUNT = substr($rrule['BYDAY'][0], 0, -2);
-    $YEARLY_BYDAY_DAY = substr($rrule['BYDAY'][0], -2);;
+    $yearly_byday_count = substr($rrule['BYDAY'][0], 0, -2);
+    $yearly_byday_day = substr($rrule['BYDAY'][0], -2);;
   }
 
   list($byday_count_title, $byday_day_title) = explode('@byday', t('On the @byday of', array(), array('context' => 'Date repeat')));
-  $YEARLY_on_the_BYDAY_of_BYMONTH['BYDAY_COUNT'] = array(
+  $yearly_on_the_byday_of_bymonth['BYDAY_COUNT'] = array(
     '#type' => 'select',
     '#title' => $byday_count_title,
-    '#default_value' => !empty($YEARLY_BYDAY_COUNT) ? $YEARLY_BYDAY_COUNT : '',
+    '#default_value' => !empty($yearly_byday_count) ? $yearly_byday_count : '',
     '#options' => date_order_translated(),
     '#multiple' => FALSE,
     '#prefix' => '<div class="date-repeat-input byday-count">',
     '#suffix' => '</div>',
   );
 
-  $YEARLY_on_the_BYDAY_of_BYMONTH['BYDAY_DAY'] = array(
+  $yearly_on_the_byday_of_bymonth['BYDAY_DAY'] = array(
     '#type' => 'select',
     '#title' => $byday_day_title,
     '#title_display' => 'after',
-    '#default_value' => !empty($YEARLY_BYDAY_DAY) ? $YEARLY_BYDAY_DAY : '',
+    '#default_value' => !empty($yearly_byday_day) ? $yearly_byday_day : '',
     '#options' => date_repeat_dow_day_options(TRUE),
     '#multiple' => FALSE,
     '#prefix' => '<div class="date-repeat-input byday-day">',
     '#suffix' => '</div>',
   );
 
-  $YEARLY_on_the_BYDAY_of_BYMONTH['BYMONTH'] = array(
+  $yearly_on_the_byday_of_bymonth['BYMONTH'] = array(
     '#type' => 'checkboxes',
     '#title' => t('Bymonth', array(), array('context' => 'Date repeat')),
     '#title_display' => 'invisible',
-    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'YEARLY' && $YEARLY_day_month_default === 'BYDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
+    '#default_value' => !empty($rrule['BYMONTH']) && $rrule['FREQ'] === 'YEARLY' && $yearly_day_month_default === 'BYDAY_BYMONTH' ? $rrule['BYMONTH'] : array(),
     '#options' => date_month_names_abbr(TRUE),
     '#attributes' => array('class' => array('container-inline')),
     '#multiple' => TRUE,
@@ -465,13 +470,13 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
       ),
     ),
     '#attributes' => array('class' => array('date-repeat-radios clearfix')),
-    '#default_value' => $YEARLY_day_month_default,
+    '#default_value' => $yearly_day_month_default,
     '#options' => array(
       'BYMONTHDAY_BYMONTH' => t('On day ... of ...'),
       'BYDAY_BYMONTH' => t('On the ... of ...'),
     ),
-    'BYMONTHDAY_BYMONTH_child' => $YEARLY_on_day_BYMONTHDAY_of_BYMONTH,
-    'BYDAY_BYMONTH_child' => $YEARLY_on_the_BYDAY_of_BYMONTH,
+    'BYMONTHDAY_BYMONTH_child' => $yearly_on_day_bymonthday_of_bymonth,
+    'BYDAY_BYMONTH_child' => $yearly_on_the_byday_of_bymonth,
     '#div_classes' => array(
       'date-repeat-radios-item date-clear clearfix bymonthday-bymonth',
       'date-repeat-radios-item date-clear clearfix byday-bymonth',
@@ -482,7 +487,7 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
   $count_form_element = array(
     '#type' => 'textfield',
     '#title' => t('Count', array(), array('context' => 'Date repeat')),
-    '#default_value' => $COUNT,
+    '#default_value' => $count,
     '#element_validate' => array('element_validate_integer_positive'),
     '#attributes' => array('placeholder' => array('#')),
     '#prefix' => $prefix,
@@ -499,21 +504,26 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
       '#type' => $element['#date_repeat_widget'],
       '#title' => t('Until', array(), array('context' => 'Date repeat')),
       '#title_display' => 'invisible',
-      '#default_value' => $UNTIL,
-      '#date_format' => !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d',
+      '#default_value' => $until,
+      '#date_format' => !empty($element['#date_format']) ?
+      date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d',
       '#date_timezone' => $timezone,
       '#date_text_parts'  => !empty($element['#date_text_parts']) ? $element['#date_text_parts'] : array(),
       '#date_year_range'  => !empty($element['#date_year_range']) ? $element['#date_year_range'] : '-3:+3',
-      '#date_label_position' => !empty($element['#date_label_position']) ? $element['#date_label_position'] : 'within',
+      '#date_label_position' => !empty($element['#date_label_position']) ?
+      $element['#date_label_position'] : 'within',
       '#date_flexible' => 0,
     ),
     'tz' => array('#type' => 'hidden', '#value' => $element['#date_timezone']),
     'all_day' => array('#type' => 'hidden', '#value' => 1),
-    'granularity' => array('#type' => 'hidden', '#value' => serialize(array('year', 'month', 'day'))),
+    'granularity' => array(
+      '#type' => 'hidden',
+      '#value' => serialize(array('year', 'month', 'day')),
+    ),
   );
 
   $range_of_repeat_default = 'COUNT';
-  if (!empty($UNTIL)) {
+  if (!empty($until)) {
     $range_of_repeat_default = 'UNTIL';
   }
   $element['range_of_repeat'] = array(
@@ -528,7 +538,7 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
         ":input[name=\"{$element['#name']}[FREQ]\"]" => array('value' => 'NONE'),
       ),
     ),
-    '#default_value' =>  $range_of_repeat_default,
+    '#default_value' => $range_of_repeat_default,
     '#options' => array(
       'COUNT' => t('Count'),
       'UNTIL' => t('Until'),
@@ -544,7 +554,8 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
   $parents = $element['#array_parents'];
   $instance = implode('-', $parents);
 
-  // Make sure this will work right either in the normal form or in an ajax callback from the 'Add more' button.
+  // Make sure this will work right either in the normal
+  // form or in an ajax callback from the 'Add more' button.
   if (empty($form_state['num_exceptions'][$instance])) {
     $form_state['num_exceptions'][$instance] = count($exceptions);
   }
@@ -576,33 +587,48 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
       ),
     ),
   );
-  for ($i = 0; $i < max($form_state['num_exceptions'][$instance], 1) ; $i++) {
-    $EXCEPT = '';
+  for ($i = 0; $i < max($form_state['num_exceptions'][$instance], 1); $i++) {
+    $except = '';
     if (!empty($exceptions[$i]['datetime'])) {
       $ex_date = new DateObject($exceptions[$i]['datetime'], $exceptions[$i]['tz']);
       date_timezone_set($ex_date, timezone_open($timezone));
-      $EXCEPT = date_format($ex_date, DATE_FORMAT_DATETIME);
+      $except = date_format($ex_date, DATE_FORMAT_DATETIME);
+    }
+    $date_format = 'Y-m-d';
+    if (!empty($element['#date_format'])) {
+      $grans = array('year', 'month', 'day');
+      $date_format = date_limit_format($element['#date_format'], $grans);
     }
     $element['exceptions']['EXDATE'][$i] = array(
       '#tree' => TRUE,
       'datetime' => array(
         '#name' => 'exceptions|' . $instance,
         '#type' => $element['#date_repeat_widget'],
-        '#default_value' => $EXCEPT,
-        '#date_timezone' => !empty($element['#date_timezone']) ? $element['#date_timezone'] : date_default_timezone(),
-        '#date_format' => !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d',
+        '#default_value' => $except,
+        '#date_timezone' => !empty($element['#date_timezone']) ?
+        $element['#date_timezone'] : date_default_timezone(),
+        '#date_format' => $date_format,
         '#date_text_parts'  => !empty($element['#date_text_parts']) ? $element['#date_text_parts'] : array(),
         '#date_year_range'  => !empty($element['#date_year_range']) ? $element['#date_year_range'] : '-3:+3',
         '#date_label_position' => !empty($element['#date_label_position']) ? $element['#date_label_position'] : 'within',
         '#date_flexible' => 0,
-        ),
-      'tz' => array('#type' => 'hidden', '#value' => $element['#date_timezone']),
-      'all_day' => array('#type' => 'hidden', '#value' => 1),
-      'granularity' => array('#type' => 'hidden', '#value' => serialize(array('year', 'month', 'day'))),
-      );
+      ),
+      'tz' => array(
+        '#type' => 'hidden',
+        '#value' => $element['#date_timezone'],
+      ),
+      'all_day' => array(
+        '#type' => 'hidden',
+        '#value' => 1,
+      ),
+      'granularity' => array(
+        '#type' => 'hidden',
+        '#value' => serialize(array('year', 'month', 'day')),
+      ),
+    );
   }
 
-  // collect additions in the same way as exceptions - implements RDATE.
+  // Collect additions in the same way as exceptions - implements RDATE.
   if (empty($form_state['num_additions'][$instance])) {
     $form_state['num_additions'][$instance] = count($additions);
   }
@@ -634,30 +660,45 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
       ),
     ),
   );
-  for ($i = 0; $i < max($form_state['num_additions'][$instance], 1) ; $i++) {
-    $RDATE = '';
+  for ($i = 0; $i < max($form_state['num_additions'][$instance], 1); $i++) {
+    $r_date = '';
     if (!empty($additions[$i]['datetime'])) {
       $rdate = new DateObject($additions[$i]['datetime'], $additions[$i]['tz']);
       date_timezone_set($rdate, timezone_open($timezone));
-      $RDATE = date_format($rdate, DATE_FORMAT_DATETIME);
+      $r_date = date_format($rdate, DATE_FORMAT_DATETIME);
+    }
+    $date_format = 'Y-m-d';
+    if (!empty($element['#date_format'])) {
+      $grans = array('year', 'month', 'day');
+      $date_format = date_limit_format($element['#date_format'], $grans);
     }
     $element['additions']['RDATE'][$i] = array(
       '#tree' => TRUE,
       'datetime' => array(
         '#type' => $element['#date_repeat_widget'],
         '#name' => 'additions|' . $instance,
-        '#default_value' => $RDATE,
-        '#date_timezone' => !empty($element['#date_timezone']) ? $element['#date_timezone'] : date_default_timezone(),
-        '#date_format' => !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d',
+        '#default_value' => $r_date,
+        '#date_timezone' => !empty($element['#date_timezone']) ?
+        $element['#date_timezone'] : date_default_timezone(),
+        '#date_format' => $date_format,
         '#date_text_parts'  => !empty($element['#date_text_parts']) ? $element['#date_text_parts'] : array(),
         '#date_year_range'  => !empty($element['#date_year_range']) ? $element['#date_year_range'] : '-3:+3',
         '#date_label_position' => !empty($element['#date_label_position']) ? $element['#date_label_position'] : 'within',
         '#date_flexible' => 0,
-        ),
-      'tz' => array('#type' => 'hidden', '#value' => $element['#date_timezone']),
-      'all_day' => array('#type' => 'hidden', '#value' => 1),
-      'granularity' => array('#type' => 'hidden', '#value' => serialize(array('year', 'month', 'day'))),
-      );
+      ),
+      'tz' => array(
+        '#type' => 'hidden',
+        '#value' => $element['#date_timezone'],
+      ),
+      'all_day' => array(
+        '#type' => 'hidden',
+        '#value' => 1,
+      ),
+      'granularity' => array(
+        '#type' => 'hidden',
+        '#value' => serialize(array('year', 'month', 'day')),
+      ),
+    );
   }
 
   $element['exceptions']['exceptions_add'] = array(
@@ -687,6 +728,9 @@ function _date_repeat_rrule_process($element, &$form_state, $form) {
   return $element;
 }
 
+/**
+ * Add callback to date repeat.
+ */
 function date_repeat_add_exception_callback($form, &$form_state) {
   $parents = $form_state['triggering_element']['#array_parents'];
   $button_key = array_pop($parents);
@@ -694,6 +738,9 @@ function date_repeat_add_exception_callback($form, &$form_state) {
   return $element;
 }
 
+/**
+ * Add addition callback to date repeat.
+ */
 function date_repeat_add_addition_callback($form, &$form_state) {
   $parents = $form_state['triggering_element']['#array_parents'];
   $button_key = array_pop($parents);
@@ -701,6 +748,9 @@ function date_repeat_add_addition_callback($form, &$form_state) {
   return $element;
 }
 
+/**
+ * Add exception to date repeat.
+ */
 function date_repeat_add_exception($form, &$form_state) {
   $parents = $form_state['triggering_element']['#array_parents'];
   $instance = implode('-', array_slice($parents, 0, count($parents) - 2));
@@ -708,6 +758,9 @@ function date_repeat_add_exception($form, &$form_state) {
   $form_state['rebuild'] = TRUE;
 }
 
+/**
+ * Add addition to date repeat.
+ */
 function date_repeat_add_addition($form, &$form_state) {
   $parents = $form_state['triggering_element']['#array_parents'];
   $instance = implode('-', array_slice($parents, 0, count($parents) - 2));
@@ -723,8 +776,14 @@ function date_repeat_merge($form_values, $element) {
     return $form_values;
   }
   if (array_key_exists('exceptions', $form_values) || array_key_exists('additions', $form_values)) {
-    if (!array_key_exists('exceptions', $form_values)) $form_values['exceptions'] = array();
-    if (!array_key_exists('additions', $form_values)) $form_values['additions'] = array();
+    if (!array_key_exists('exceptions', $form_values)) {
+      $form_values['exceptions'] = array();
+    }
+
+    if (!array_key_exists('additions', $form_values)) {
+      $form_values['additions'] = array();
+    }
+
     $form_values = array_merge($form_values, (array) $form_values['exceptions'], (array) $form_values['additions']);
     unset($form_values['exceptions']);
     unset($form_values['additions']);
@@ -738,18 +797,22 @@ function date_repeat_merge($form_values, $element) {
             case 'INTERVAL':
               $form_values['INTERVAL'] = $form_values['daily']['INTERVAL_child'];
               break;
+
             case 'every_weekday':
               $form_values['BYDAY'] = array('MO', 'TU', 'WE', 'TH', 'FR');
               break;
+
             case 'every_mo_we_fr':
               $form_values['BYDAY'] = array('MO', 'WE', 'FR');
               break;
+
             case 'every_tu_th':
               $form_values['BYDAY'] = array('TU', 'TH');
               break;
           }
         }
         break;
+
       case 'WEEKLY':
         if (array_key_exists('weekly', $form_values)) {
           $form_values = array_merge($form_values, (array) $form_values['weekly']);
@@ -758,12 +821,14 @@ function date_repeat_merge($form_values, $element) {
           }
         }
         break;
+
       case 'MONTHLY':
         if (array_key_exists('monthly', $form_values)) {
           switch ($form_values['monthly']['day_month']) {
             case 'BYMONTHDAY_BYMONTH':
               $form_values['monthly'] = array_merge($form_values['monthly'], (array) $form_values['monthly']['BYMONTHDAY_BYMONTH_child']);
               break;
+
             case 'BYDAY_BYMONTH':
               $form_values['monthly']['BYDAY_BYMONTH_child']['BYDAY'] = $form_values['monthly']['BYDAY_BYMONTH_child']['BYDAY_COUNT'] . $form_values['monthly']['BYDAY_BYMONTH_child']['BYDAY_DAY'];
               $form_values['monthly'] = array_merge($form_values['monthly'], (array) $form_values['monthly']['BYDAY_BYMONTH_child']);
@@ -783,12 +848,14 @@ function date_repeat_merge($form_values, $element) {
           }
         }
         break;
+
       case 'YEARLY':
         if (array_key_exists('yearly', $form_values)) {
           switch ($form_values['yearly']['day_month']) {
             case 'BYMONTHDAY_BYMONTH':
               $form_values['yearly'] = array_merge($form_values['yearly'], (array) $form_values['yearly']['BYMONTHDAY_BYMONTH_child']);
               break;
+
             case 'BYDAY_BYMONTH':
               $form_values['yearly']['BYDAY_BYMONTH_child']['BYDAY'] = $form_values['yearly']['BYDAY_BYMONTH_child']['BYDAY_COUNT'] . $form_values['yearly']['BYDAY_BYMONTH_child']['BYDAY_DAY'];
               $form_values['yearly'] = array_merge($form_values['yearly'], (array) $form_values['yearly']['BYDAY_BYMONTH_child']);
@@ -808,6 +875,7 @@ function date_repeat_merge($form_values, $element) {
           }
         }
         break;
+
       default:
         break;
     }
@@ -823,6 +891,7 @@ function date_repeat_merge($form_values, $element) {
       case 'COUNT':
         $form_values['COUNT'] = $form_values['count_child'];
         break;
+
       case 'UNTIL':
         $form_values['UNTIL'] = $form_values['until_child'];
         break;
@@ -832,14 +901,23 @@ function date_repeat_merge($form_values, $element) {
   unset($form_values['count_child']);
   unset($form_values['until_child']);
 
-  if (array_key_exists('BYDAY', $form_values) && is_array($form_values['BYDAY'])) unset($form_values['BYDAY']['']);
-  if (array_key_exists('BYMONTH', $form_values) && is_array($form_values['BYMONTH'])) unset($form_values['BYMONTH']['']);
-  if (array_key_exists('BYMONTHDAY', $form_values) && is_array($form_values['BYMONTHDAY'])) unset($form_values['BYMONTHDAY']['']);
+  if (array_key_exists('BYDAY', $form_values) && is_array($form_values['BYDAY'])) {
+    unset($form_values['BYDAY']['']);
+  }
+
+  if (array_key_exists('BYMONTH', $form_values) && is_array($form_values['BYMONTH'])) {
+    unset($form_values['BYMONTH']['']);
+  }
+
+  if (array_key_exists('BYMONTHDAY', $form_values) && is_array($form_values['BYMONTHDAY'])) {
+    unset($form_values['BYMONTHDAY']['']);
+  }
 
   if (array_key_exists('UNTIL', $form_values) && is_array($form_values['UNTIL']['datetime'])) {
     $function = $element['#date_repeat_widget'] . '_input_date';
     $until_element = $element;
-    $until_element['#date_format'] = !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d';
+    $until_element['#date_format'] = !empty($element['#date_format']) ?
+    date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d';
     $date = $function($until_element, $form_values['UNTIL']['datetime']);
     $form_values['UNTIL']['datetime'] = is_object($date) ? $date->format(DATE_FORMAT_DATETIME) : '';
   }
@@ -849,9 +927,14 @@ function date_repeat_merge($form_values, $element) {
   if (array_key_exists('EXDATE', $form_values) && is_array($form_values['EXDATE'])) {
     $function = $element['#date_repeat_widget'] . '_input_date';
     $exdate_element = $element;
+    $date_format = 'Y-m-d';
+    if (!empty($element['#date_format'])) {
+      $grans = array('year', 'month', 'day');
+      $date_format = date_limit_format($element['#date_format'], $grans);
+    }
     foreach ($form_values['EXDATE'] as $delta => $value) {
       if (is_array($value['datetime'])) {
-        $exdate_element['#date_format'] = !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d';
+        $exdate_element['#date_format'] = $date_format;
         $date = $function($exdate_element, $form_values['EXDATE'][$delta]['datetime']);
         $form_values['EXDATE'][$delta]['datetime'] = is_object($date) ? $date->format(DATE_FORMAT_DATETIME) : '';
       }
@@ -864,9 +947,14 @@ function date_repeat_merge($form_values, $element) {
   if (array_key_exists('RDATE', $form_values) && is_array($form_values['RDATE'])) {
     $function = $element['#date_repeat_widget'] . '_input_date';
     $rdate_element = $element;
+    $date_format = 'Y-m-d';
+    if (!empty($element['#date_format'])) {
+      $grans = array('year', 'month', 'day');
+      $date_format = date_limit_format($element['#date_format'], $grans);
+    }
     foreach ($form_values['RDATE'] as $delta => $value) {
       if (is_array($value['datetime'])) {
-        $rdate_element['#date_format'] = !empty($element['#date_format']) ? date_limit_format($element['#date_format'], array('year', 'month', 'day')) : 'Y-m-d';
+        $rdate_element['#date_format'] = $date_format;
         $date = $function($rdate_element, $form_values['RDATE'][$delta]['datetime']);
         $form_values['RDATE'][$delta]['datetime'] = is_object($date) ? $date->format(DATE_FORMAT_DATETIME) : '';
       }
@@ -910,7 +998,7 @@ function date_repeat_rrule_validate($element, &$form_state) {
 }
 
 /**
- * Theme the exception list as a table so the buttons line up
+ * Theme the exception list as a table so the buttons line up.
  */
 function theme_date_repeat_current_exceptions($vars) {
   $rows = $vars['rows'];
@@ -920,11 +1008,14 @@ function theme_date_repeat_current_exceptions($vars) {
       $rows_info[] = array(drupal_render($value['action']), drupal_render($value['display']));
     }
   }
-  return theme('table', array('header' => array(t('Delete'), t('Current exceptions')), 'rows' => $rows_info));
+  return theme('table', array(
+    'header' => array(t('Delete'), t('Current exceptions')),
+    'rows' => $rows_info)
+  );
 }
 
- /**
- * Theme the exception list as a table so the buttons line up
+/**
+ * Theme the exception list as a table so the buttons line up.
  */
 function theme_date_repeat_current_additions($rows = array()) {
   $rows_info = array();
@@ -933,7 +1024,10 @@ function theme_date_repeat_current_additions($rows = array()) {
       $rows_info[] = array(drupal_render($value['action']), drupal_render($value['display']));
     }
   }
-  return theme('table', array('header' => array(t('Delete'), t('Current additions')), 'rows' => $rows_info));
+  return theme('table', array(
+    'header' => array(t('Delete'), t('Current additions')),
+    'rows' => $rows_info)
+  );
 }
 
 /**
@@ -943,7 +1037,13 @@ function theme_date_repeat_rrule($vars) {
   $element = $vars['element'];
   $id = drupal_html_id('repeat-settings-fieldset');
   $parents = $element['#parents'];
-  $selector = "{$parents[0]}[{$parents[1]}][{$parents[2]}][show_repeat_settings]";
+
+  $selector = $parents[0];
+  for ($i = 1; $i < count($parents) - 1; $i++) {
+    $selector .= '[' . $parents[$i] . ']';
+  }
+  $selector .= '[show_repeat_settings]';
+
   $fieldset = array(
     '#type' => 'item',
     '#title' => t('Repeat settings'),
@@ -960,6 +1060,9 @@ function theme_date_repeat_rrule($vars) {
   return drupal_render($fieldset);
 }
 
+/**
+ * Filter non zero values.
+ */
 function date_repeat_filter_non_zero_value($value) {
   return $value !== 0;
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.devel_generate.inc b/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.devel_generate.inc
index 3880e8b4..51c3708b 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.devel_generate.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.devel_generate.inc
@@ -1,5 +1,5 @@
 <?php
-/*
+/**
  * @file
  * Handling of devel generate functionality for repeating dates.
  */
@@ -42,9 +42,11 @@ function date_repeat_field_date_field_insert(&$items, $context) {
     case 'date':
       $format = DATE_FORMAT_ISO;
       break;
+
     case 'datestamp':
       $format = DATE_FORMAT_UNIX;
       break;
+
     case 'datetime':
       $format = DATE_FORMAT_DATETIME;
       break;
@@ -78,6 +80,7 @@ function date_repeat_field_date_field_insert(&$items, $context) {
       }
       $form_values['BYMONTHDAY'] = array($mo);
       break;
+
     case 2:
       $mo = mt_rand(1, 12);
       $options = array('YEARLY', 'MONTHLY');
@@ -90,6 +93,7 @@ function date_repeat_field_date_field_insert(&$items, $context) {
       }
       $form_values['BYMONTH'] = array($mo);
       break;
+
     default:
       $dows = array_keys(date_content_repeat_dow_options());
       $day = date_content_generate_key($dows);
@@ -108,16 +112,18 @@ function date_repeat_field_date_field_insert(&$items, $context) {
     case 'YEARLY':
       $period = 'year';
       break;
+
     case 'MONTHLY':
       $period = 'month';
       break;
+
     case 'WEEKLY':
       $period = 'week';
       break;
+
     default:
       $period = 'day';
       break;
-
   }
 
   $form_values['UNTIL'] = array();
@@ -126,12 +132,15 @@ function date_repeat_field_date_field_insert(&$items, $context) {
   $rrule = date_api_ical_build_rrule($form_values);
   $items[0]['rrule'] = $rrule;
 
-  $values = date_repeat_build_dates($rrule, $form_values, $field, $item);
+  $values = date_repeat_build_dates($field, $item, $rrule, $form_values);
 
   $items += $values;
 
 }
 
+/**
+ * Generate a random content keys.
+ */
 function date_content_generate_key($array) {
   $keys = array_keys($array);
   $min = array_shift($keys);
@@ -155,4 +164,4 @@ function date_content_repeat_dow_options() {
     }
   }
   return $options;
-}
\ No newline at end of file
+}
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.info b/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.info
index 20e95df8..31c99af5 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.info
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.info
@@ -7,9 +7,9 @@ stylesheets[all][] = date_repeat_field.css
 package = Date/Time
 core = 7.x
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.module b/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.module
index 9e5c8c12..d4d4c902 100644
--- a/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.module
+++ b/profiles/wcm_base/modules/contrib/date/date_repeat_field/date_repeat_field.module
@@ -77,13 +77,13 @@ function date_repeat_field_menu() {
           $path = field_collection_field_get_path($field);
           $count = count(explode('/', $path));
           $items[$path . '/%field_collection_item/repeats'] = array(
-           'title' => 'Repeats',
-           'page callback' => 'date_repeat_field_page',
-           'page arguments' => array($entity_type, $count),
-           'access callback' => 'date_repeat_field_show',
-           'access arguments' => array($entity_type, $count),
-           'type' => MENU_LOCAL_TASK,
-           'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
+            'title' => 'Repeats',
+            'page callback' => 'date_repeat_field_page',
+            'page arguments' => array($entity_type, $count),
+            'access callback' => 'date_repeat_field_show',
+            'access arguments' => array($entity_type, $count),
+            'type' => MENU_LOCAL_TASK,
+            'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
           );
         }
       }
@@ -91,13 +91,13 @@ function date_repeat_field_menu() {
     else {
       $path = $entity_type . '/%' . $entity_type;
       $items[$path . '/repeats'] = array(
-       'title' => 'Repeats',
-       'page callback' => 'date_repeat_field_page',
-       'page arguments' => array($entity_type, 1),
-       'access callback' => 'date_repeat_field_show',
-       'access arguments' => array($entity_type, 1),
-       'type' => MENU_LOCAL_TASK,
-       'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
+        'title' => 'Repeats',
+        'page callback' => 'date_repeat_field_page',
+        'page arguments' => array($entity_type, 1),
+        'access callback' => 'date_repeat_field_show',
+        'access arguments' => array($entity_type, 1),
+        'type' => MENU_LOCAL_TASK,
+        'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
       );
     }
   }
@@ -108,10 +108,12 @@ function date_repeat_field_menu() {
  * Implements hook_permission().
  */
 function date_repeat_field_permission() {
-  return array('view date repeats' => array(
-    'title' => t('View Repeating Dates'),
-    'description' => t('Allow user to see a page with all the times a date repeats.'),
-  ));
+  return array(
+    'view date repeats' => array(
+      'title' => t('View Repeating Dates'),
+      'description' => t('Allow user to see a page with all the times a date repeats.'),
+    ),
+  );
 }
 
 /**
@@ -195,6 +197,9 @@ function date_repeat_field_bundles() {
   return $values;
 }
 
+/**
+ * Check field is repeat.
+ */
 function date_is_repeat_field($field, $instance = NULL) {
   if (is_string($field)) {
     $field = field_info_field($field);
@@ -215,7 +220,7 @@ function date_is_repeat_field($field, $instance = NULL) {
   }
 }
 
-/*
+/**
  * Implements hook_date_field_insert_alter().
  */
 function date_repeat_field_date_field_insert_alter(&$items, $context) {
@@ -239,7 +244,7 @@ function date_repeat_field_date_field_insert_alter(&$items, $context) {
   }
 }
 
-/*
+/**
  * Implements hook_date_field_update_alter().
  */
 function date_repeat_field_date_field_update_alter(&$items, $context) {
@@ -279,6 +284,13 @@ function date_repeat_field_field_widget_form_alter(&$element, &$form_state, $con
         '#suffix' => '</div>',
         '#default_value' => isset($items[$delta]['rrule']) && !empty($items[$delta]['rrule']) ? 1 : 0,
       );
+
+      // Make changes if instance is set to be rendered as a regular field.
+      if (!empty($instance['widget']['settings']['no_fieldset'])) {
+        $element['#title'] = check_plain($instance['label']);
+        $element['#description'] = field_filter_xss($instance['description']);
+        $element['#theme_wrappers'] = array('date_form_element');
+      }
     }
   }
 }
@@ -340,13 +352,14 @@ function date_repeat_field_widget_validate($element, &$form_state) {
   // The RRULE has already been created by this point, so go back
   // to the posted values to see if this was filled out.
   $error_field_base = implode('][', $element['#parents']);
-  $error_field_until =  $error_field_base . '][rrule][until_child][datetime][';
+  $error_field_until = $error_field_base . '][rrule][until_child][datetime][';
   if (!empty($item['rrule']) && $rrule_values['range_of_repeat'] === 'UNTIL' && empty($rrule_values['UNTIL']['datetime'])) {
     switch ($instance['widget']['type']) {
       case 'date_text':
       case 'date_popup':
         form_set_error($error_field_until . 'date', t("Missing value in 'Range of repeat'. (UNTIL).", array(), array('context' => 'Date repeat')));
         break;
+
       case 'date_select':
         form_set_error($error_field_until . 'year', t("Missing value in 'Range of repeat': Year (UNTIL)", array(), array('context' => 'Date repeat')));
         form_set_error($error_field_until . 'month', t("Missing value in 'Range of repeat': Month (UNTIL)", array(), array('context' => 'Date repeat')));
@@ -382,8 +395,9 @@ function date_repeat_field_widget_validate($element, &$form_state) {
     // We only collect a date for UNTIL, but we need it to be inclusive,
     // so force it to a full datetime element at the last possible second of the day.
     if (!empty($rrule_values['UNTIL'])) {
+      $gran = array('year', 'month', 'day', 'hour', 'minute', 'second');
       $rrule_values['UNTIL']['datetime'] .= ' 23:59:59';
-      $rrule_values['UNTIL']['granularity'] = serialize(drupal_map_assoc(array('year', 'month', 'day', 'hour', 'minute', 'second')));
+      $rrule_values['UNTIL']['granularity'] = serialize(drupal_map_assoc($gran));
       $rrule_values['UNTIL']['all_day'] = 0;
     }
     $value = date_repeat_build_dates($rrule, $rrule_values, $field, $item);
@@ -418,9 +432,10 @@ function date_repeat_after_build(&$element, &$form_state) {
  * Pass in either the RRULE or the $form_values array for the RRULE,
  * whichever is missing will be created when needed.
  */
+// @codingStandardsIgnoreStart
 function date_repeat_build_dates($rrule = NULL, $rrule_values = NULL, $field, $item) {
-
-  include_once(DRUPAL_ROOT . '/' . drupal_get_path('module', 'date_api') . '/date_api_ical.inc');
+// @codingStandardsIgnoreEnd
+  include_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'date_api') . '/date_api_ical.inc';
   $field_name = $field['field_name'];
 
   if (empty($rrule)) {
@@ -497,8 +512,9 @@ function date_repeat_build_dates($rrule = NULL, $rrule_values = NULL, $field, $i
       'offset2' => date_offset_get($date_end),
       'timezone' => $timezone,
       'rrule' => $rrule,
-      );
+    );
   }
+
   return $value;
 }
 
@@ -681,9 +697,8 @@ function date_repeat_field_date_field_widget_settings_form_alter(&$form, $contex
       '#title' => t('Repeat display', array(), array('context' => 'Date repeat')),
       '#description' => t("Should the repeat options form start out expanded or collapsed? Set to 'Collapsed' to make those options less obtrusive.", array(), array('context' => 'Date repeat')),
       '#fieldset' => 'date_format',
-      );
+    );
   }
-
 }
 
 /**
diff --git a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.change_type.inc b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.change_type.inc
index cad2cafd..041c5dea 100644
--- a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.change_type.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.change_type.inc
@@ -28,10 +28,14 @@ function date_tools_change_type_form() {
   // Get the available date fields.
   foreach ($fields as $field_name => $field) {
     if ($field['type'] == 'date' || $field['type'] == 'datestamp' || $field['type'] == 'datetime') {
-      $date_options[$labels[$field['type']]][$field_name] = t('Field @label (@field_name)', array('@label' => $field['widget']['label'], '@field_name' => $field_name, '@type' => $labels[$field['type']]));
+      $date_options[$labels[$field['type']]][$field_name] = t('Field @label (@field_name)', array(
+        '@label' => $field['widget']['label'],
+        '@field_name' => $field_name,
+        '@type' => $labels[$field['type']]
+      ));
     }
   }
-  if (sizeof($date_options) < 1) {
+  if (count($date_options) < 1) {
     drupal_set_message(t('There are no date fields in this database.'));
     return $form;
   }
@@ -142,26 +146,31 @@ function date_tools_change_type_form_submit($form, &$form_state) {
           case 'datestamp':
             $new_columns[] = $date_handler->sql_format('U', $db_field) . ' AS ' . $info['column'];
             break;
+
           case 'datetime':
             $new_columns[] = $date_handler->sql_format('Y-m-d H:i:s', $db_field) . ' AS ' . $info['column'];
             break;
         }
         break;
+
       case 'datestamp':
         switch ($new_type) {
           case 'date':
             $new_columns[] = $date_handler->sql_format('Y-m-d/TH:i:s', $db_field) . ' AS ' . $info['column'];
             break;
+
           case 'datetime':
             $new_columns[] = $date_handler->sql_format('Y-m-d H:i:s', $db_field) . ' AS ' . $info['column'];
             break;
         }
         break;
+
       case 'datetime':
         switch ($new_type) {
           case 'date':
             $new_columns[] = $date_handler->sql_format('Y-m-d/TH:i:s', $db_field) . ' AS ' . $info['column'];
             break;
+
           case 'datestamp':
             $new_columns[] = $date_handler->sql_format('U', $db_field) . ' AS ' . $info['column'];
             break;
@@ -178,5 +187,9 @@ function date_tools_change_type_form_submit($form, &$form_state) {
   db_query($sql);
   db_query("DROP TABLE {" . $temp_table . "}");
 
-  drupal_set_message(t('The field @field_name has been changed from @old_type to @new_type.', array('@field_name' => $field['widget']['label'], '@old_type' => $labels[$old_type], '@new_type' => $labels[$new_type])));
+  drupal_set_message(t('The field @field_name has been changed from @old_type to @new_type.', array(
+    '@field_name' => $field['widget']['label'],
+    '@old_type' => $labels[$old_type],
+    '@new_type' => $labels[$new_type]
+  )));
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.info b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.info
index dbcff7d9..3ec02859 100644
--- a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.info
+++ b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.info
@@ -6,9 +6,9 @@ core = 7.x
 configure = admin/config/date/tools
 files[] = tests/date_tools.test
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.module b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.module
index a7ac5f1e..997808df 100644
--- a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.module
+++ b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.module
@@ -31,7 +31,7 @@ function date_tools_help($section, $arg) {
  */
 function date_tools_permission() {
   return array(
-    'administer date tools' =>  array(
+    'administer date tools' => array(
       'title' => t('Administer date tools'),
     ),
   );
@@ -68,6 +68,7 @@ function date_tools_menu() {
     'file' => 'date_tools.wizard.inc',
   );
 
+  // @codingStandardsIgnoreStart
   /**
   $items['admin/config/date/tools/change'] = array(
     'title'    => 'Change type',
@@ -79,18 +80,18 @@ function date_tools_menu() {
     'file' => 'date_tools.change_type.inc',
   );
   */
+  // @codingStandardsIgnoreEnd
 
   return $items;
 }
 
 /**
- *  Main Date Tools page
+ * Main Date Tools page.
  */
 function date_tools_page() {
   $content = '';
 
-  $content .= t('Dates and calendars can be complicated to set up. The !date_wizard makes it easy to create a simple date content type and related calendar. ', array('!date_wizard' => l(t('Date wizard'), 'admin/config/date/tools/date_wizard')));
-
+  $content .= t('Dates and calendars can be complicated to set up. The !date_wizard makes it easy to create a simple date content type and related calendar.', array('!date_wizard' => l(t('Date wizard'), 'admin/config/date/tools/date_wizard')));
 
   return $content;
 }
diff --git a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.wizard.inc b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.wizard.inc
index 14bc2759..94a130a4 100644
--- a/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.wizard.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_tools/date_tools.wizard.inc
@@ -6,6 +6,8 @@
  */
 
 /**
+ * Implements hook_form().
+ *
  * @todo.
  */
 function date_tools_wizard_form() {
@@ -59,7 +61,10 @@ function date_tools_wizard_form() {
   $form['field']['repeat'] = array(
     '#type' => 'select',
     '#default_value' => 0,
-    '#options' => array(0 => t('No'), 1 => t('Yes')),
+    '#options' => array(
+      0 => t('No'),
+      1 => t('Yes'),
+    ),
     '#title' => t('Show repeating date options'),
     '#access' => module_exists('date_repeat_field'),
   );
@@ -72,7 +77,11 @@ function date_tools_wizard_form() {
   $form['field']['advanced']['todate'] = array(
     '#type' => 'select',
     '#default_value' => 'optional',
-    '#options' => array('' => t('Never'), 'optional' => t('Optional'), 'required' => t('Required')),
+    '#options' => array(
+      '' => t('Never'),
+      'optional' => t('Optional'),
+      'required' => t('Required'),
+    ),
     '#title' => t('End Date'),
     '#description' => t("Display a matching second date field as a 'End date'."),
   );
@@ -106,7 +115,10 @@ function date_tools_wizard_form() {
   $form['calendar'] = array(
     '#type' => 'select',
     '#default_value' => module_exists('calendar'),
-    '#options' => array(0 => t('No'), 1 => t('Yes')),
+    '#options' => array(
+      0 => t('No'),
+      1 => t('Yes'),
+    ),
     '#title' => t('Create a calendar for this date field'),
     '#access' => module_exists('calendar'),
   );
@@ -119,13 +131,26 @@ function date_tools_wizard_form() {
 }
 
 /**
+ * Form validate.
+ *
  * @todo.
  */
 function date_tools_wizard_form_validate(&$form, &$form_state) {
   $bundle = $form_state['values']['bundle'];
   $field_name = 'field_' . $form_state['values']['field_name'];
-  $existing_type = db_query("SELECT type FROM {node_type} WHERE type=:bundle", array(':bundle' => $bundle))->fetchField();
-  $existing_instance = db_query("SELECT field_name FROM {field_config_instance} WHERE field_name=:field_name AND bundle=:bundle AND entity_type=:entity_type", array(':field_name' => $field_name, ':bundle' => $bundle, ':entity_type' => 'node'))->fetchField();
+
+  $args = array(
+    ':field_name' => $field_name,
+    ':bundle' => $bundle,
+    ':entity_type' => 'node',
+  );
+
+  $query = "SELECT type FROM {node_type} WHERE type=:bundle";
+  $existing_type = db_query($query, array(':bundle' => $args[':bundle']))->fetchField();
+
+  $query = "SELECT field_name FROM {field_config_instance} WHERE field_name=:field_name AND bundle=:bundle AND entity_type=:entity_type";
+  $existing_instance = db_query($query, $args)->fetchField();
+
   if ($existing_type) {
     drupal_set_message(t('This content type name already exists, adding new field to existing content type.'));
   }
@@ -147,6 +172,8 @@ function date_tools_wizard_form_validate(&$form, &$form_state) {
 }
 
 /**
+ * Form submit.
+ *
  * @todo.
  */
 function date_tools_wizard_form_submit(&$form, &$form_state) {
@@ -161,6 +188,8 @@ function date_tools_wizard_form_submit(&$form, &$form_state) {
 }
 
 /**
+ * Wizard build.
+ *
  * @todo.
  */
 function date_tools_wizard_build($form_values) {
@@ -201,7 +230,7 @@ function date_tools_wizard_build($form_values) {
       'timezone_db' => date_get_timezone_db($tz_handling),
       'repeat' => $repeat,
       'todate' => !empty($todate) ? $todate : 'optional',
-      ),
+    ),
   );
   $instance = array(
     'entity_type' => 'node',
@@ -275,6 +304,8 @@ function date_tools_wizard_build($form_values) {
 }
 
 /**
+ * Includes handler.
+ *
  * @todo.
  */
 function date_tools_wizard_include() {
@@ -285,6 +316,8 @@ function date_tools_wizard_include() {
 }
 
 /**
+ * Implements hook_field_types().
+ *
  * @todo.
  */
 function date_tools_wizard_field_types() {
@@ -296,6 +329,7 @@ function date_tools_wizard_field_types() {
 }
 
 /**
+ * Implements hook_widget_types().
  * @todo.
  */
 function date_tools_wizard_widget_types() {
@@ -309,6 +343,8 @@ function date_tools_wizard_widget_types() {
 }
 
 /**
+ * Tz handler.
+ *
  * @todo.
  */
 function date_tools_wizard_tz_handling() {
@@ -317,6 +353,8 @@ function date_tools_wizard_tz_handling() {
 }
 
 /**
+ * Create date tools wizard content type.
+ *
  * @todo.
  */
 function date_tools_wizard_create_content_type($name, $bundle, $description, $type_settings = array()) {
@@ -332,8 +370,7 @@ function date_tools_wizard_create_content_type($name, $bundle, $description, $ty
     'body_label' => 'Body',
     'min_word_count' => '0',
     'help' => '',
-    'node_options' =>
-    array(
+    'node_options' => array(
       'status' => 1,
       'promote' => 1,
       'sticky' => 0,
@@ -374,8 +411,10 @@ function date_tools_wizard_create_content_type($name, $bundle, $description, $ty
       'weight' => -4,
       'module' => 'text',
     ),
-    'settings' => array('display_summary' => TRUE),
-     'display' => array(
+    'settings' => array(
+      'display_summary' => TRUE,
+    ),
+    'display' => array(
       'default' => array(
         'label' => 'hidden',
         'type' => 'text_default',
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/date_views.info b/profiles/wcm_base/modules/contrib/date/date_views/date_views.info
index 0f2d7ec3..663efd35 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/date_views.info
+++ b/profiles/wcm_base/modules/contrib/date/date_views/date_views.info
@@ -12,9 +12,9 @@ files[] = includes/date_views_filter_handler_simple.inc
 files[] = includes/date_views.views.inc
 files[] = includes/date_views_plugin_pager.inc
 
-; Information added by Drupal.org packaging script on 2014-07-29
-version = "7.x-2.8"
+; Information added by Drupal.org packaging script on 2015-09-08
+version = "7.x-2.9"
 core = "7.x"
 project = "date"
-datestamp = "1406653438"
+datestamp = "1441727353"
 
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/date_views.install b/profiles/wcm_base/modules/contrib/date/date_views/date_views.install
index c9697b2d..e1d2e3ef 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/date_views.install
+++ b/profiles/wcm_base/modules/contrib/date/date_views/date_views.install
@@ -28,3 +28,27 @@ function date_views_uninstall() {
   variable_del('date_views_week_format_with_year');
   variable_del('date_views_week_format_without_year');
 }
+
+/**
+ * Set default date views variables.
+ */
+function date_views_update_7200() {
+  if (!variable_get('date_views_month_format_with_year', FALSE)) {
+    variable_set('date_views_month_format_with_year', 'F Y');
+  }
+  if (!variable_get('date_views_month_format_without_year', FALSE)) {
+    variable_set('date_views_month_format_without_year', 'F');
+  }
+  if (!variable_get('date_views_day_format_with_year', FALSE)) {
+    variable_set('date_views_day_format_with_year', 'l, F j, Y');
+  }
+  if (!variable_get('date_views_day_format_without_year', FALSE)) {
+    variable_set('date_views_day_format_without_year', 'l, F j');
+  }
+  if (!variable_get('date_views_week_format_with_year', FALSE)) {
+    variable_set('date_views_week_format_with_year', 'F j, Y');
+  }
+  if (!variable_get('date_views_week_format_without_year', FALSE)) {
+    variable_set('date_views_week_format_without_year', 'F j');
+  }
+}
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/date_views.module b/profiles/wcm_base/modules/contrib/date/date_views/date_views.module
index 044bc9f5..c050e56e 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/date_views.module
+++ b/profiles/wcm_base/modules/contrib/date/date_views/date_views.module
@@ -1,5 +1,9 @@
 <?php
 
+/**
+ * @file
+ * Date Views module.
+ */
 
 /**
  * Implements hook_menu().
@@ -86,13 +90,30 @@ function date_views_theme() {
     'file' => 'theme.inc',
     'path' => "$path/theme",
   );
-  return array(
-    'date_nav_title' => $base + array('variables' => array('granularity' => NULL, 'view' => NULL, 'link' => NULL, 'format' => NULL)),
-    'date_views_filter_form' => $base + array('template' => 'date-views-filter-form', 'render element' => 'form'),
-    'date_calendar_day' => $base + array('variables' => array('date' => NULL)),
 
+  return array(
+    'date_nav_title' => $base + array(
+      'variables' => array(
+        'granularity' => NULL,
+        'view' => NULL,
+        'link' => NULL,
+        'format' => NULL,
+      ),
+    ),
+    'date_views_filter_form' => $base + array(
+      'template' => 'date-views-filter-form',
+      'render element' => 'form',
+    ),
+    'date_calendar_day' => $base + array(
+      'variables' => array(
+        'date' => NULL,
+      ),
+    ),
     'date_views_pager' => $base + array(
-      'variables' => array('plugin' => NULL, 'input' => NULL),
+      'variables' => array(
+        'plugin' => NULL,
+        'input' => NULL,
+      ),
       // Register a pattern so that it can work like all views templates.
       'pattern' => 'date_views_pager__',
       'template' => 'date-views-pager',
@@ -100,6 +121,9 @@ function date_views_theme() {
   );
 }
 
+/**
+ * Implements hook_views_api().
+ */
 function date_views_views_api() {
   return array(
     'api' => 3,
@@ -119,7 +143,7 @@ function date_views_views_fetch_fields($base, $type) {
 }
 
 /**
- *  Identify all potential date/timestamp fields and cache the data.
+ * Identify all potential date/timestamp fields and cache the data.
  */
 function date_views_fields($base = 'node', $reset = FALSE) {
   static $fields = array();
@@ -141,8 +165,8 @@ function date_views_fields($base = 'node', $reset = FALSE) {
 
 /**
  * Implements hook_date_views_entities().
- * Map extra Views tables to the entity that holds its date fields,
- * needed for Views tables other than the primary tables identified in entity_info().
+ *
+ * Map extra Views tables to the entity that holds its date fields, needed for Views tables other than the primary tables identified in entity_info().
  */
 function date_views_date_views_extra_tables() {
   return array(
@@ -151,14 +175,13 @@ function date_views_date_views_extra_tables() {
 }
 
 /**
- * Helper function to map entity types to the Views base table they use,
- * to make it easier to infer the entity type from a base table.
+ * Helper function to map entity types to the Views base table they use, to make it easier to infer the entity type from a base table.
+ *
+ * Views has a new handler called views_handler_field_entity() that loads entities.
  *
- * Views has a new handler called views_handler_field_entity() that loads
- * entities, and you can use something like the following to get the
- * entity type from a view, but not all our base tables contain the
- * entity information we need, (i.e. revisions) so it won't work here
- * and we resort to creating information from entity_get_info().
+ * And you can use something like the following to get the entity type from a view, but not all our base tables contain the entity information we need, (i.e. revisions).
+ *
+ * So it won't work here and we resort to creating information from entity_get_info().
  *
  *   // A method to get the entity type for a base table.
  *   $table_data = views_fetch_data($base_table);
@@ -193,11 +216,7 @@ function date_views_base_tables() {
 /**
  * Implements hook_date_views_fields().
  *
- * All modules that create custom fields that use the
- * 'views_handler_field_date' handler can provide
- * additional information here about the type of
- * date they create so the date can be used by
- * the Date API views date argument and date filter.
+ * All modules that create custom fields that use the 'views_handler_field_date' handler can provide additional information here about the type of date they create so the date can be used by the Date API views date argument and date filter.
  */
 function date_views_date_views_fields($field) {
   $values = array(
@@ -263,12 +282,15 @@ function date_pager_url($view, $date_type = NULL, $date_arg = NULL, $force_view_
       case 'year':
         $args[$pos] = date_pad($view->date_info->year, 4);
         break;
+
       case 'week':
         $args[$pos] = date_pad($view->date_info->year, 4) . '-W' . date_pad($view->date_info->week);
         break;
+
       case 'day':
         $args[$pos] = date_pad($view->date_info->year, 4) . '-' . date_pad($view->date_info->month) . '-' . date_pad($view->date_info->day);
         break;
+
       default:
         $args[$pos] = date_pad($view->date_info->year, 4) . '-' . date_pad($view->date_info->month);
         break;
@@ -298,9 +320,14 @@ function date_pager_url($view, $date_type = NULL, $date_arg = NULL, $force_view_
   // if they use exposed filters.
   return url($view->get_url($args), array(
     'query' => date_views_querystring($view),
-    'absolute' => $absolute));
+    'absolute' => $absolute,
+    )
+  );
 }
 
+/**
+ * Identifier of a date block.
+ */
 function date_block_identifier($view) {
   if (!empty($view->block_identifier)) {
     return $view->block_identifier;
@@ -311,12 +338,9 @@ function date_block_identifier($view) {
 /**
  * Implements hook_field_views_data_alter().
  *
- * Create a Views field for each date column we care about
- * to supplement the generic 'entity_id' and 'revision_id'
- * fields that are automatically created.
+ * Create a Views field for each date column we care about to supplement the generic 'entity_id' and 'revision_id' fields that are automatically created.
  *
- * Also use friendlier labels to distinguish the start date
- * and end date in listings (for fields that use both).
+ * Also use friendlier labels to distinguish the start date and end date in listings (for fields that use both).
  */
 function date_views_field_views_data_alter(&$result, $field, $module) {
   if ($module == 'date') {
@@ -336,8 +360,8 @@ function date_views_field_views_data_alter(&$result, $field, $module) {
           $result[$table][$column]['field']['is date'] = TRUE;
           // Not sure yet if we still need a custom field handler in D7 now that custom formatters are available.
           // Might still need it to handle grouping of multiple value dates.
-          //$result[$table][$column]['field']['handler'] = 'date_handler_field_date';
-          //$result[$table][$column]['field']['add fields to query'] = TRUE;
+          // $result[$table][$column]['field']['handler'] = 'date_handler_field_date';
+          // $result[$table][$column]['field']['add fields to query'] = TRUE;
         }
 
         // For filters, arguments, and sorts, determine if this column is for
@@ -395,12 +419,25 @@ function date_views_field_views_data_alter(&$result, $field, $module) {
               // translatable string. This is a hack to get it to appear right
               // before 'end date' in the listing (i.e., in a non-alphabetical,
               // but more user friendly, order).
-              $result[$table][$column]['title'] = t('@label -  start date (!name)', array('@label' => $label, '!name' => $field['field_name']));
-              $result[$table][$column]['title short'] = t('@label -  start date', array('@label' => $label));
+              $result[$table][$column]['title'] = t('@label -  start date (!name)', array(
+                '@label' => $label,
+                '!name' => $field['field_name'],
+              ));
+              $result[$table][$column]['title short'] = t('@label -  start date', array(
+                '@label' => $label,
+              ));
               break;
+
             case 'value2':
-              $result[$table][$column]['title'] = t('@label - end date (!name:!column)', array('@label' => $label, '!name' => $field['field_name'], '!column' => $this_column));
-              $result[$table][$column]['title short'] = t('@label - end date:!column', array('@label' => $label, '!column' => $this_column));
+              $result[$table][$column]['title'] = t('@label - end date (!name:!column)', array(
+                '@label' => $label,
+                '!name' => $field['field_name'],
+                '!column' => $this_column,
+              ));
+              $result[$table][$column]['title short'] = t('@label - end date:!column', array(
+                '@label' => $label,
+                '!column' => $this_column,
+              ));
               break;
           }
         }
@@ -421,18 +458,15 @@ function date_views_form_views_ui_edit_form_alter(&$form, &$form_state, $form_id
 }
 
 /**
- * The instanceof function makes this work for any handler that was derived
- * from 'views_handler_filter_date' or 'views_handler_argument_date',
- * which includes core date fields like the node updated field.
+ * The instanceof function makes this work for any handler that was derived from 'views_handler_filter_date' or 'views_handler_argument_date', which includes core date fields like the node updated field.
  *
- * The test for $handler->min_date tells us that this is an argument that
- * not only is derived from the views date handler but also has been processed
- * by the Date Views filter or argument code.
-*/
+ * The test for $handler->min_date tells us that this is an argument that not only is derived from the views date handler but also has been processed by the Date Views filter or argument code.
+ */
 function date_views_handler_is_date($handler, $type = 'argument') {
   switch ($type) {
     case 'filter':
       return $handler instanceof views_handler_filter_date && !empty($handler->min_date);
+
     case 'argument':
       return $handler instanceof views_handler_argument_date && !empty($handler->min_date);
   }
@@ -441,8 +475,8 @@ function date_views_handler_is_date($handler, $type = 'argument') {
 
 /**
  * Validation hook for exposed filters that use the select widget.
- * This is to ensure the the user completes all parts of the date
- * not just some parts. Only needed for the select widget.
+ *
+ * This is to ensure the the user completes all parts of the date not just some parts. Only needed for the select widget.
  */
 function date_views_select_validate(&$form, &$form_state) {
   // If there are no values just return.
@@ -453,7 +487,7 @@ function date_views_select_validate(&$form, &$form_state) {
   $filled = array();
   $value = drupal_array_get_nested_value($form_state['input'], $form['#parents']);
   foreach ($granularity as $part) {
-    if (!empty($value['value'][$part])) {
+    if (isset($value['value']) && is_numeric($value['value'][$part])) {
       $filled[] = $part;
     }
   }
@@ -464,18 +498,23 @@ function date_views_select_validate(&$form, &$form_state) {
         case 'year':
           form_error($form['value'][$part], t('Please choose a year.'), $form_state);
           break;
+
         case 'month':
           form_error($form['value'][$part], t('Please choose a month.'), $form_state);
           break;
+
         case 'day':
           form_error($form['value'][$part], t('Please choose a day.'), $form_state);
           break;
+
         case 'hour':
           form_error($form['value'][$part], t('Please choose an hour.'), $form_state);
           break;
+
         case 'minute':
           form_error($form['value'][$part], t('Please choose a minute.'), $form_state);
           break;
+
         case 'second':
           form_error($form['value'][$part], t('Please choose a second.'), $form_state);
           break;
@@ -487,8 +526,7 @@ function date_views_select_validate(&$form, &$form_state) {
 /**
  * Implements hook_date_formatter_view_alter().
  *
- * If we are displaying a date from a view, see if we have information about
- * which multiple value to display. If so, set the date_id in the entity.
+ * If we are displaying a date from a view, see if we have information about which multiple value to display. If so, set the date_id in the entity.
  */
 function date_views_date_formatter_pre_view_alter(&$entity, &$variables) {
   // Some views have no row index.
@@ -501,4 +539,4 @@ function date_views_date_formatter_pre_view_alter(&$entity, &$variables) {
       $entity->date_id = 'date.' . $date_item->$date_id . '.' . $field['field_name'] . '.' . $date_item->$date_delta . '.0';
     }
   }
-}
\ No newline at end of file
+}
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_plugin_display_attachment.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_plugin_display_attachment.inc
index 94371f76..779f4d1f 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_plugin_display_attachment.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_plugin_display_attachment.inc
@@ -1,6 +1,7 @@
 <?php
+
 /**
  * @file
  * Empty file to avoid fatal error if it doesn't exist.
  * Formerly the attachment for the Date Browser.
- */
\ No newline at end of file
+ */
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views.views.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views.views.inc
index b236d2e0..f226def6 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views.views.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views.views.inc
@@ -27,8 +27,9 @@
  *   links by date, requires the date argument and uses the current
  *   date argument default to set a starting point for the view.
  */
+
 /**
- * Implements hook_views_plugins
+ * Implements hook_views_plugins().
  */
 function date_views_views_plugins() {
   $path = drupal_get_path('module', 'date_views');
@@ -36,7 +37,8 @@ function date_views_views_plugins() {
   module_load_include('inc', 'date_views', 'theme/theme');
 
   return array(
-    'module' => 'date_views', // This just tells our themes are elsewhere.
+    // This just tells our themes are elsewhere.
+    'module' => 'date_views',
     'display' => array(
       // Display plugin for date navigation.
       'date_nav' => array(
@@ -83,7 +85,7 @@ function date_views_views_plugins() {
 }
 
 /**
- * Implements hook_views_data()
+ * Implements hook_views_data().
  */
 function date_views_views_data() {
   $data = array();
@@ -95,12 +97,12 @@ function date_views_views_data() {
     $data[$base_table]['date_argument'] = array(
       'group' => t('Date'),
       'title' => t('Date (!base_table)', array('!base_table' => $base_table)),
-      'help' => t('Filter any Views !base_table date field by a date argument, using any common ISO date/period format (i.e. YYYY, YYYY-MM, YYYY-MM-DD, YYYY-W99, YYYY-MM-DD--P3M, P90D, etc). ', array('!base_table' => $base_table)),
+      'help' => t('Filter any Views !base_table date field by a date argument, using any common ISO date/period format (i.e. YYYY, YYYY-MM, YYYY-MM-DD, YYYY-W99, YYYY-MM-DD--P3M, P90D, etc).', array('!base_table' => $base_table)),
       'argument' => array(
         'handler' => 'date_views_argument_handler',
         'empty field name' => t('Undated'),
         'is date' => TRUE,
-        //'skip base' => $base_table,
+        // 'skip base' => $base_table,
       ),
     );
     // The flexible date filter.
@@ -112,7 +114,7 @@ function date_views_views_data() {
         'handler' => 'date_views_filter_handler',
         'empty field name' => t('Undated'),
         'is date' => TRUE,
-        //'skip base' => $base_table,
+        // 'skip base' => $base_table,
       ),
     );
   }
@@ -140,8 +142,9 @@ function date_views_views_data_alter(&$data) {
 }
 
 /**
- * Central function for setting up the right timezone values
- * in the SQL date handler.
+ * Central function for setting up the right timezone values.
+ *
+ * In the SQL date handler.
  *
  * The date handler will use this information to decide if the
  * database value needs a timezone conversion.
@@ -152,30 +155,45 @@ function date_views_views_data_alter(&$data) {
  */
 function date_views_set_timezone(&$date_handler, &$view, $field) {
   switch ($field['tz_handling']) {
-    case 'date' :
+    case 'date':
       $date_handler->db_timezone = 'UTC';
       $date_handler->local_timezone_field = $field['timezone_field'];
       $date_handler->offset_field = $field['offset_field'];
       break;
+
     case 'none':
       $date_handler->db_timezone = date_default_timezone();
       $date_handler->local_timezone = date_default_timezone();
       break;
+
     case 'utc':
       $date_handler->db_timezone = 'UTC';
       $date_handler->local_timezone = 'UTC';
       break;
-    default :
+
+    default:
       $date_handler->db_timezone = 'UTC';
       $date_handler->local_timezone = date_default_timezone();
       break;
   }
 }
 
+/**
+ * Helper function to generate a query string.
+ *
+ * @param object $view
+ *   A View object.
+ *
+ * @param array $extra_params
+ *   An extra parameters.
+ *
+ * @return null/string
+ *   Return a query or NULL.
+ */
 function date_views_querystring($view, $extra_params = array()) {
   $query_params = array_merge($_GET, $extra_params);
   // Allow NULL params to be removed from the query string.
-  foreach ($extra_params AS $key => $value) {
+  foreach ($extra_params as $key => $value) {
     if (!isset($value)) {
       unset($query_params[$key]);
     }
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler.inc
index 61aeafc1..20eedff0 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler.inc
@@ -3,12 +3,14 @@
  * @file
  * Date API views argument handler.
  * This argument combines multiple date arguments into a single argument
- * where all fields are controlled by the same date and can be combined with either AND or OR.
+ * where all fields are controlled by the same date and can be combined
+ * with either AND or OR.
  */
 
 /**
  * Date API argument handler.
  */
+// @codingStandardsIgnoreStart
 class date_views_argument_handler extends date_views_argument_handler_simple {
 
   /**
@@ -198,3 +200,4 @@ class date_views_argument_handler extends date_views_argument_handler_simple {
   }
 
 }
+// @codingStandardsIgnoreEnd
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler_simple.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler_simple.inc
index 35f88e00..2839b959 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler_simple.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_argument_handler_simple.inc
@@ -7,11 +7,13 @@
 /**
  * Date API argument handler.
  */
+// @codingStandardsIgnoreStart
 class date_views_argument_handler_simple extends views_handler_argument_date {
 
   /**
-   * Get granularity and use it to create the formula and a format
-   * for the results.
+   * Get granularity.
+   *
+   * Use it to create the formula and a format for the results.
    */
   function init(&$view, &$options) {
     parent::init($view, $options);
@@ -29,12 +31,14 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
       $this->date_handler->local_timezone = date_get_timezone($field['settings']['tz_handling']);
     }
     $this->date_handler->granularity = $this->options['granularity'];
-    // This value needs to be initialized so it exists even if the query doesn't run.
+    // This value needs to be initialized so
+    // it exists even if the query doesn't run.
     $this->date_handler->placeholders = array();
 
     $this->format = $this->date_handler->views_formats($this->date_handler->granularity, 'display');
     $this->sql_format = $this->date_handler->views_formats($this->date_handler->granularity, 'sql');
-    // $this->arg_format is the format the parent date handler will use to create a default argument.
+    // $this->arg_format is the format the parent date
+    // handler will use to create a default argument.
     $this->arg_format = $this->format();
 
     // Identify the base table for this field.
@@ -43,6 +47,9 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
 
   }
 
+  /**
+   * {@inheritdoc}
+   */
   function format() {
     if (!empty($this->options['granularity'])) {
       return $this->date_handler->views_formats($this->options['granularity']);
@@ -53,8 +60,9 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
   }
 
   /**
-   * Set the empty argument value to the current date,
-   * formatted appropriately for this argument.
+   * Set the empty argument value to the current date.
+   *
+   * Formatted appropriately for this argument.
    */
   function get_default_argument($raw = FALSE) {
     $is_default = FALSE;
@@ -85,6 +93,7 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
     $options = parent::option_definition();
     $options['year_range'] = array('default' => '-3:+3');
     $options['granularity'] = array('default' => 'month');
+    $options['granularity_reset'] = array('default' => FALSE);
     $options['default_argument_type']['default'] = 'date';
     $options['add_delta'] = array('default' => '');
     $options['use_fromto'] = array('default' => '');
@@ -116,7 +125,9 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
       '#attributes' => array('class' => array('dependent-options')),
       '#states' => array(
         'visible' => array(
-          ':input[name="options[default_action]"]' => array('value' => 'summary')
+          ':input[name="options[default_action]"]' => array(
+            'value' => 'summary',
+          ),
         ),
       ),
     );
@@ -129,23 +140,37 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
       '#attributes' => array('class' => array('dependent-options')),
       '#states' => array(
         'visible' => array(
-          ':input[name="options[title_format]"]' => array('value' => 'custom')
+          ':input[name="options[title_format]"]' => array(
+            'value' => 'custom',
+          ),
         ),
       ),
     );
 
+    // Get default granularity options
     $options = $this->date_handler->date_parts();
-    unset($options['second'], $options['minute']);
-    $options += array('week' => t('Week', array(), array('context' => 'datetime')));
+    // Add the 'week' option.
+    $options += array(
+      'week' => t('Week', array(), array(
+        'context' => 'datetime',
+      )),
+    );
+
     $form['granularity'] = array(
       '#title' => t('Granularity'),
       '#type' => 'radios',
       '#options' => $options,
       '#default_value' => $this->options['granularity'],
-      '#multiple' => TRUE,
       '#description' => t("Select the type of date value to be used in defaults, summaries, and navigation. For example, a granularity of 'month' will set the default date to the current month, summarize by month in summary views, and link to the next and previous month when using date navigation."),
     );
 
+    $form['granularity_reset'] = array(
+      '#title' => t('Use granularity from argument value'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->options['granularity_reset'],
+      '#description' => t("If the granularity of argument value is different from selected, use it from argument value."),
+    );
+
     $form['year_range'] = array(
       '#title' => t('Date year range'),
       '#type' => 'textfield',
@@ -172,16 +197,18 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
       '#default_value' => $this->options['add_delta'],
       '#options' => array('' => t('No'), 'yes' => t('Yes')),
       '#description' => t('Add an identifier to the view to show which multiple value date fields meet the filter criteria. Note: This option may introduce duplicate values into the view. Required when using multiple value fields in a Calendar or any time you want the node view of multiple value dates to display only the values that match the view filters.'),
-      // Only let mere mortals tweak this setting for multi-value fields
+      // Only let mere mortals tweak this setting for multi-value fields.
       '#access' => $access,
     );
-
   }
 
+  /**
+   * {@inheritdoc}
+   */
   function options_validate(&$form, &$form_state) {
     // It is very important to call the parent function here:
     parent::options_validate($form, $form_state);
-    if (!preg_match('/^(?:\-[0-9]{1,4}|[0-9]{4}):(?:[\+|\-][0-9]{1,4}|[0-9]{4})$/', $form_state['values']['options']['year_range'])) {
+    if (!preg_match('/^(?:\-[0-9]{1,4}|[0-9]{4}):(?:[\+\-][0-9]{1,4}|[0-9]{4})$/', $form_state['values']['options']['year_range'])) {
       form_error($form['year_range'], t('Date year range must be in the format -9:+9, 2005:2010, -9:2010, or 2005:+9'));
     }
   }
@@ -209,14 +236,15 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
     $format = !empty($this->options['title_format_custom']) && !empty($this->options['title_format_custom']) ? $this->options['title_format_custom'] : $this->date_handler->views_formats($this->options['granularity'], 'display');
     $range = $this->date_handler->arg_range($this->argument);
     return date_format_date($range[0], 'custom', $format);
- }
+  }
 
   /**
-   * Provide the argument to use to link from the summary to the next level;
-   * this will be called once per row of a summary, and used as part of
+   * Provide the argument to use to link from the summary to the next level.
+   *
+   * This will be called once per row of a summary, and used as part of
    * $view->get_url().
    *
-   * @param $data
+   * @param object $data
    *   The query results for the row.
    */
   function summary_argument($data) {
@@ -234,10 +262,11 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
    */
   function summary_query() {
 
-    // @TODO The summary values are computed by the database. Unless the database has
-    // built-in timezone handling it will use a fixed offset, which will not be
-    // right for all dates. The only way I can see to make this work right is to
-    // store the offset for each date in the database so it can be added to the base
+    // @TODO The summary values are computed by the database.
+    // Unless the database has built-in timezone handling it will use
+    // a fixed offset, which will not be right for all dates.
+    // The only way I can see to make this work right is to store the offset
+    // for each date in the database so it can be added to the base
     // date value before the database formats the result. Because this is a huge
     // architectural change, it won't go in until we start a new branch.
     $this->formula = $this->date_handler->sql_format($this->sql_format, $this->date_handler->sql_field("***table***.$this->real_field"));
@@ -245,7 +274,8 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
     // Now that our table is secure, get our formula.
     $formula = $this->get_formula();
 
-    // Add the field, give it an alias that does NOT match the actual field name or grouping won't work right.
+    // Add the field, give it an alias that does NOT match the actual
+    // field name or grouping won't work right.
     $this->base_alias = $this->name_alias = $this->query->add_field(NULL, $formula, $this->field . '_summary');
     $this->query->set_count_field(NULL, $formula, $this->field);
 
@@ -254,20 +284,22 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
 
   /**
    * Inject a test for valid date range before the regular query.
+   *
    * Override the parent query to be able to control the $group.
    */
   function query($group_by = FALSE) {
 
-    // @TODO Not doing anything with $group_by yet, need to figure out what has to be done.
+    // @TODO Not doing anything with $group_by yet,
+    // need to figure out what has to be done.
 
     if ($this->date_forbid()) {
       return;
     }
 
     // See if we need to reset granularity based on an argument value.
-    // Make sure we don't try to reset to some bogus value if someone has typed in an unexpected argument.
-    $granularity = $this->date_handler->arg_granularity($this->argument);
-    if (!empty($granularity)) {
+    // Make sure we don't try to reset to some bogus value if someone has
+    // typed in an unexpected argument.
+    if ($this->options['granularity_reset'] && $granularity = $this->date_handler->arg_granularity($this->argument)) {
       $this->date_handler->granularity = $granularity;
       $this->format = $this->date_handler->views_formats($this->date_handler->granularity, 'display');
       $this->sql_format = $this->date_handler->views_formats($this->date_handler->granularity, 'sql');
@@ -276,7 +308,8 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
     $this->ensure_my_table();
     $group = !empty($this->options['date_group']) ? $this->options['date_group'] : 0;
 
-    // If requested, add the delta field to the view so we can later find the value that matched our query.
+    // If requested, add the delta field to the view so
+    // we can later find the value that matched our query.
     if (!empty($this->options['add_delta']) && (substr($this->real_field, -6) == '_value' || substr($this->real_field, -7) == '_value2')) {
       $this->query->add_field($this->table_alias, 'delta');
       $real_field_name = str_replace(array('_value', '_value2'), '', $this->real_field);
@@ -291,7 +324,8 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
     $view_max_placeholder = $this->placeholder();
     $this->date_handler->placeholders = array($view_min_placeholder => $view_min, $view_max_placeholder => $view_max);
 
-    // Are we comparing this field only or the Start/End date range to the view criteria?
+    // Are we comparing this field only or the Start/End date range
+    // to the view criteria?
     if (!empty($this->options['use_fromto'])) {
 
       // The simple case, match the field to the view range.
@@ -302,10 +336,14 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
     }
     else {
 
-      // Look for the intersection of the range of the date field with the range of the view.
-      // Get the Start/End values for this field. Retrieve using the original table name.
-      // Swap the current table name (adjusted for relationships) into the query.
-      // @TODO We may be able to use Views substitutions here, investigate that later.
+      // Look for the intersection of the range
+      // of the date field with the range of the view.
+      // Get the Start/End values for this field.
+      // Retrieve using the original table name.
+      // Swap the current table name (adjusted for relationships)
+      // into the query.
+      // @TODO We may be able to use Views substitutions here,
+      // investigate that later.
       $fields = date_views_fields($this->base_table);
       $fields = $fields['name'];
       $fromto = $fields[$this->original_table . '.' . $this->real_field]['fromto'];
@@ -321,7 +359,10 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
   }
 
   /**
-   * Add a callback to determine if we have moved outside the valid date range for this argument.
+   * Add a callback.
+   *
+   * To determine if we have moved outside
+   * the valid date range for this argument.
    */
   function date_forbid() {
     if (empty($this->argument)) {
@@ -343,3 +384,4 @@ class date_views_argument_handler_simple extends views_handler_argument_date {
   }
 
 }
+// @codingStandardsIgnoreEnd
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_fields.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_fields.inc
index a002b088..d497ef60 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_fields.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_fields.inc
@@ -5,13 +5,11 @@
  */
 
 /**
- *  Identify all potential date/timestamp fields.
+ * Identify all potential date/timestamp fields.
  *
- *  @return
- *    array with fieldname, type, and table.
- *  @see
- *    date_views_date_views_fields() which implements
- *    the hook_date_views_fields() for the core date fields.
+ * @return array
+ *   An array with fieldname, type, and table.
+ * @see date_views_date_views_fields()
  */
 function _date_views_fields($base = 'node') {
 
@@ -60,7 +58,7 @@ function _date_views_fields($base = 'node') {
     $handler = views_get_handler($table_name, $field_name, 'filter');
     $handler_name = $handler->definition['handler'];
 
-    // We don't care about anything but date handlers
+    // We don't care about anything but date handlers.
     if (empty($handler->definition['is date'])) {
       continue;
     }
@@ -72,14 +70,17 @@ function _date_views_fields($base = 'node') {
       $field = field_info_field($handler->definition['field_name']);
       $is_field = TRUE;
       switch ($field['type']) {
-       case 'date':
+        case 'date':
           $sql_type = DATE_ISO;
           break;
+
         case 'datestamp':
           break;
+
         case 'datetime':
           $sql_type = DATE_DATETIME;
           break;
+
         default:
           // If this is not a date field, nothing more to do.
           continue;
@@ -88,7 +89,8 @@ function _date_views_fields($base = 'node') {
       $revision = in_array($base, array('node_revision')) ? FIELD_LOAD_REVISION : FIELD_LOAD_CURRENT;
       $db_info = date_api_database_info($field, $revision);
       $name = $table_name . "." . $field_name;
-      $granularity = !empty($field['granularity']) ? $field['granularity'] : array('year', 'month', 'day', 'hour', 'minute', 'second');
+      $grans = array('year', 'month', 'day', 'hour', 'minute', 'second');
+      $granularity = !empty($field['granularity']) ? $field['granularity'] : $grans;
 
       $fromto = array(
         $table_name . '.' . $db_info['columns'][$table_name]['value'],
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler.inc
index 0cfc7fcc..f761dfa0 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler.inc
@@ -3,9 +3,11 @@
  * @file
  * A flexible, configurable date filter.
  * This filter combines multiple date filters into a single filter
- * where all fields are controlled by the same date and can be combined with either AND or OR.
+ * where all fields are controlled by the same date and can be combined
+ * with either AND or OR.
  */
 
+// @codingStandardsIgnoreStart
 class date_views_filter_handler extends date_views_filter_handler_simple {
   function init(&$view, &$options) {
     parent::init($view, $options);
@@ -64,6 +66,9 @@ class date_views_filter_handler extends date_views_filter_handler_simple {
       if ($field['table_name'] != $this->table || !empty($this->relationship)) {
         $this->related_table_alias = $this->query->ensure_table($field['table_name'], $this->relationship);
       }
+      else {
+        $this->related_table_alias = null;
+      }
       $table_alias = !empty($this->related_table_alias) ? $this->related_table_alias : $field['table_name'];
       $field_name = $table_alias . '.' . $field['field_name'];
 
@@ -179,3 +184,4 @@ class date_views_filter_handler extends date_views_filter_handler_simple {
     }
   }
 }
+// @codingStandardsIgnoreEnd
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler_simple.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler_simple.inc
index d41f30b6..4fa4c409 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler_simple.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_filter_handler_simple.inc
@@ -1,9 +1,11 @@
 <?php
 /**
  * @file
- * A standard Views filter for a single date field, using Date API form selectors and sql handling.
+ * A standard Views filter for a single date field,
+ * using Date API form selectors and sql handling.
  */
 
+// @codingStandardsIgnoreStart
 class date_views_filter_handler_simple extends views_handler_filter_date {
   var $date_handler = NULL;
   var $offset = NULL;
@@ -263,7 +265,7 @@ class date_views_filter_handler_simple extends views_handler_filter_date {
   }
 
   function extra_options_validate($form, &$form_state) {
-    if (!preg_match('/^(?:\-[0-9]{1,4}|[0-9]{4}):(?:[\+|\-][0-9]{1,4}|[0-9]{4})$/', $form_state['values']['options']['year_range'])) {
+    if (!preg_match('/^(?:[\+\-][0-9]{1,4}|[0-9]{4}):(?:[\+\-][0-9]{1,4}|[0-9]{4})$/', $form_state['values']['options']['year_range'])) {
       form_error($form['year_range'], t('Date year range must be in the format -9:+9, 2005:2010, -9:2010, or 2005:+9'));
     }
   }
@@ -332,7 +334,7 @@ class date_views_filter_handler_simple extends views_handler_filter_date {
    * @return
    *   The form date part element for this instance.
    */
-  function date_parts_form($form_state, $prefix, $source, $which, $operator_values, $identifier, $relative_id) {
+  function date_parts_form(&$form_state, $prefix, $source, $which, $operator_values, $identifier, $relative_id) {
     module_load_include('inc', 'date_api', 'date_api_elements');
     switch ($prefix) {
       case 'min':
@@ -379,7 +381,10 @@ class date_views_filter_handler_simple extends views_handler_filter_date {
         $form[$prefix]['#dependency'] = array($source => $operator_values);
       }
       if (!isset($form_state['input'][$identifier][$prefix])) {
-        $form_state['input'][$identifier][$prefix] = $this->value[$prefix];
+        // Ensure these exist.
+        foreach ($granularity as $key) {
+          $form_state['input'][$identifier][$prefix][$key] = NULL;
+        }
       }
     }
     else {
@@ -530,3 +535,4 @@ class date_views_filter_handler_simple extends views_handler_filter_date {
   }
 
 }
+// @codingStandardsIgnoreEnd
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_plugin_pager.inc b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_plugin_pager.inc
index f9594a72..5caca4e5 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_plugin_pager.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/includes/date_views_plugin_pager.inc
@@ -2,50 +2,74 @@
 /**
  * @file
  * Date pager.
- * Works with a Date argument, the argument filters the view and the pager provides back/next navigation.
+ * Works with a Date argument, the argument filters
+ * the view and the pager provides back/next navigation.
  *
  * USER NOTES:
  *
  * To use this, add a pager to a view, and choose the option to 'Page by date'.
  * There are several settings:
- * - The pager id: Set an id to be used as the identifier in the url for pager values, defaults to 'date'.
- * - Pager position: Choose whether to display the date pager above, below, or both above and below the content.
- * - Link format: Choose whether the pager links will be in the simple 'calendar/2011-12' format or the
- *   more complex 'calendar/?date=2011-12' pager format. The second one is more likely to work correctly
- *   if the pager is used in blocks and panels.
+ * - The pager id: Set an id to be used as the identifier
+ *    in the url for pager values, defaults to 'date'.
+ * - Pager position: Choose whether to display the date
+ *    pager above, below, or both above and below the content.
+ * - Link format: Choose whether the pager links will be in t
+ *    he simple 'calendar/2011-12' format or the
+ *    more complex 'calendar/?date=2011-12' pager format.
+ *    The second one is more likely to work correctly
+ *    if the pager is used in blocks and panels.
  *
- * The pager works in combination with a Date argument and it will use the date fields and granularity
- * set in that argument to create its back/next links. If the view has no Date argument, the pager can
- * do nothing. The argument can either be a 'Date' argument that lets you select one or more date fields
- * in the argument, or the simple 'Content' argument for an individual date field. It must be an
+ * The pager works in combination with a Date argument
+ * and it will use the date fields and granularity
+ * set in that argument to create its back/next links.
+ * If the view has no Date argument, the pager can
+ * do nothing. The argument can either be a 'Date' argument
+ * that lets you select one or more date fields
+ * in the argument, or the simple 'Content' argument for an
+ * individual date field. It must be an
  * argument that uses the date argument handler.
  *
  * DEVELOPER NOTES
  *
- * The pager could technically create a query of its own rather than depending on the date argument to
- * set the query, but it has only a limited set of tools to work with because it is a plugin, not a handler:
- * it has no knowledge about relationships, it cannot use the ensure_my_table() function,
- * plugins are not even invoked in pre_query(), so can't do anything there.
+ * The pager could technically create a query of its own rather
+ * than depending on the date argument to
+ * set the query, but it has only a limited set of tools to work
+ * with because it is a plugin, not a handler:
+ * it has no knowledge about relationships, it cannot use the
+ * ensure_my_table() function, plugins are not even invoked in pre_query(),
+ * so can't do anything there.
  *
- * My conclusion was that the date pager simply is not powerful enough to create its own queries for
- * date fields, which require very complex queries. Instead, we can combine this with a date argument and
- * let the argument create the query and let the pager just provide the back/next links. If there is no
+ * My conclusion was that the date pager simply
+ * is not powerful enough to create its own queries for
+ * date fields, which require very complex queries.
+ * Instead, we can combine this with a date argument and
+ * let the argument create the query and let the pager
+ * just provide the back/next links. If there is no
  * date argument, the pager will do nothing.
  *
- * There are still other problems. The pager is not even initialized until after all the handlers
- * have created their queries, so it has no chance to alter values ahead of that. And the argument
- * has no knowledge of the pager, so it can't check for pager values before the query is created.
+ * There are still other problems. The pager is not even
+ * initialized until after all the handlers
+ * have created their queries, so it has no chance
+ * to alter values ahead of that. And the argument
+ * has no knowledge of the pager, so it can't check
+ * for pager values before the query is created.
  *
- * The solution used here is to let the argument create the original query. The pager query
- * runs after that, so the pager checks to see if there is a pager value that needs to be used in the query.
- * The date argument has identified the placeholders it used in the query. So if a change is needed,
- * we can swap the pager value into the query created by the date argument and adjust the
- * $view->date_info values set by the argument accordingly so the theme will pick up the new information.
+ * The solution used here is to let the argument create
+ * the original query. The pager query
+ * runs after that, so the pager checks to see
+ * if there is a pager value that needs to be used in the query.
+ * The date argument has identified the placeholders
+ * it used in the query. So if a change is needed,
+ * we can swap the pager value into the query created
+ * by the date argument and adjust the
+ * $view->date_info values set by the argument accordingly
+ * so the theme will pick up the new information.
  */
 
 /**
  * Example plugin to handle paging by month.
  */
+// @codingStandardsIgnoreStart
 class date_views_plugin_pager extends views_plugin_pager {
 
   /**
@@ -79,6 +103,7 @@ class date_views_plugin_pager extends views_plugin_pager {
     $options['link_format'] = array('default' => 'pager');
     $options['date_argument'] = array('default' => 'Unknown');
     $options['granularity'] = array('default' => 'Unknown');
+    $options['skip_empty_pages'] = array('default' => FALSE);
     return $options;
   }
 
@@ -110,6 +135,12 @@ class date_views_plugin_pager extends views_plugin_pager {
       '#default_value' => $this->options['link_format'],
       '#required' => TRUE,
     );
+    $form['skip_empty_pages'] = array(
+      '#title' => t('Skip empty pages'),
+      '#type' => 'checkbox',
+      '#description' => t('When selected, the pager will not display pages with no result for the given date. This causes a slight performance degradation because two additional queries need to be executed.'),
+      '#default_value' => $this->options['skip_empty_pages'],
+    );
     $form['date_argument']['#type'] = 'hidden';
     $form['date_argument']['#value'] = $this->options['date_argument'];
     $form['granularity']['#type'] = 'hidden';
@@ -150,13 +181,7 @@ class date_views_plugin_pager extends views_plugin_pager {
 
         // Reset values set by argument if pager requires it.
         if (!empty($value)) {
-          $argument->argument = $value;
-          $argument->date_range = $argument->date_handler->arg_range($value);
-          $argument->min_date = $argument->date_range[0];
-          $argument->max_date = $argument->date_range[1];
-          // $argument->is_default works correctly for normal arguments, but does not
-          // work correctly if we are swapping in a new value from the pager.
-          $argument->is_default = FALSE;
+          $this->set_argument_value($argument, $value);
         }
 
         // The pager value might move us into a forbidden range, so test it.
@@ -164,13 +189,102 @@ class date_views_plugin_pager extends views_plugin_pager {
           $this->view->build_info['fail'] = TRUE;
           return;
         }
-
-        if (empty($this->view->date_info)) $this->view->date_info = new stdClass();
+        // Write date_info to store information to be used
+        // in the theming functions.
+        if (empty($this->view->date_info)) {
+          $this->view->date_info = new stdClass();
+        }
         $this->view->date_info->granularity = $argument->date_handler->granularity;
         $format = $this->view->date_info->granularity == 'week' ? DATE_FORMAT_DATETIME : $argument->sql_format;
         $this->view->date_info->placeholders = isset($argument->placeholders) ? $argument->placeholders : $argument->date_handler->placeholders;
         $this->view->date_info->date_arg = $argument->argument;
         $this->view->date_info->date_arg_pos = $i;
+        $this->view->date_info->limit = $argument->limit;
+        $this->view->date_info->url = $this->view->get_url();
+        $this->view->date_info->pager_id = $this->options['date_id'];
+        $this->view->date_info->date_pager_position = $this->options['pager_position'];
+        $this->view->date_info->date_pager_format = $this->options['link_format'];
+        $this->view->date_info->skip_empty_pages = $this->options['skip_empty_pages'] == 1;
+        // Execute two additional queries to find
+        // the previous and next page with values.
+        if ($this->view->date_info->skip_empty_pages) {
+          $q = clone $argument->query;
+          $field = $argument->table_alias . '.' . $argument->real_field;
+          $fieldsql = $date_handler->sql_field($field);
+          $fieldsql = $date_handler->sql_format($format, $fieldsql);
+          $q->clear_fields();
+          $q->orderby = array();
+          $q->set_distinct(TRUE, TRUE);
+          // Date limits of this argument.
+          $datelimits = $argument->date_handler->arg_range($argument->limit[0] . '--' . $argument->limit[1]);
+          // Find the first two dates between the minimum date
+          // and the upper bound of the current value.
+          $q->add_orderby(NULL, $fieldsql, 'DESC', 'date');
+          $this->set_argument_placeholders($this->view->date_info->placeholders, $datelimits[0], $argument->max_date, $q, $format);
+
+          $compiledquery = $q->query();
+          $compiledquery->range(0, 2);
+          $results = $compiledquery->execute()->fetchCol(0);
+
+          $prevdate = array_shift($results);
+          $prevdatealt = array_shift($results);
+          // Find the first two dates between the lower bound
+          // of the current value and the maximum date.
+          $q->add_orderby(NULL, $fieldsql, 'ASC', 'date');
+          $this->set_argument_placeholders($this->view->date_info->placeholders, $argument->min_date, $datelimits[1], $q, $format);
+
+          $compiledquery = $q->query();
+          $compiledquery->range(0, 2);
+          $results = $compiledquery->execute()->fetchCol(0);
+
+          $nextdate = array_shift($results);
+          $nextdatealt = array_shift($results);
+
+          // Set the default value of the query to $prevfirst or $nextfirst
+          // when there is no value and $prevsecond or $nextsecond is set.
+          if (empty($value)) {
+            // @Todo find out which of $prevdate or $nextdate is closest to the
+            // default argument date value and choose that one.
+            if ($prevdate && $prevdatealt) {
+              $this->set_argument_value($argument, $prevdate);
+              $value = $prevdate;
+              $prevdate = $prevdatealt;
+              // If the first next date is the same as the first previous date,
+              // move to the following next date.
+              if ($value == $nextdate) {
+                $nextdate = $nextdatealt;
+                $nextdatealt = NULL;
+              }
+            }
+            elseif ($nextdate && $nextdatealt) {
+              $this->set_argument_value($argument, $nextdate);
+              $value = $nextdate;
+              $nextdate = $nextdatealt;
+              // If the first previous date is the same as the first next date,
+              // move to the following previous date.
+              if ($value == $prevdate) {
+                $prevdate = $prevdatealt;
+                $prevdatealt = NULL;
+              }
+            }
+          }
+          else {
+            // $prevdate and $nextdate are the same as $value, so move to
+            // the next values.
+            $prevdate = $prevdatealt;
+            $nextdate = $nextdatealt;
+          }
+
+          $this->view->date_info->prev_date = $prevdate ? new DateObject($prevdate, NULL, $format) : NULL;
+          $this->view->date_info->next_date = $nextdate ? new DateObject($nextdate, NULL, $format) : NULL;
+        }
+        else {
+          $this->view->date_info->prev_date = clone($argument->min_date);
+          date_modify($this->view->date_info->prev_date, '-1 ' . $argument->date_handler->granularity);
+          $this->view->date_info->next_date = clone($argument->max_date);
+          date_modify($this->view->date_info->next_date, '+1 ' . $argument->date_handler->granularity);
+        }
+        // Write the date_info properties that depend on the current value.
         $this->view->date_info->year = date_format($argument->min_date, 'Y');
         $this->view->date_info->month = date_format($argument->min_date, 'n');;
         $this->view->date_info->day = date_format($argument->min_date, 'j');
@@ -178,11 +292,6 @@ class date_views_plugin_pager extends views_plugin_pager {
         $this->view->date_info->date_range = $argument->date_range;
         $this->view->date_info->min_date = $argument->min_date;
         $this->view->date_info->max_date = $argument->max_date;
-        $this->view->date_info->limit = $argument->limit;
-        $this->view->date_info->url = $this->view->get_url();
-        $this->view->date_info->pager_id = $this->options['date_id'];
-        $this->view->date_info->date_pager_position = $this->options['pager_position'];
-        $this->view->date_info->date_pager_format = $this->options['link_format'];
       }
       $i++;
     }
@@ -191,20 +300,33 @@ class date_views_plugin_pager extends views_plugin_pager {
     // If there is pager input and the argument has set the placeholders,
     // swap the pager value in for the placeholder set by the argument.
     if (!empty($value) && !empty($this->view->date_info->placeholders)) {
-      $placeholders = $this->view->date_info->placeholders;
-      $count = count($placeholders);
-      foreach ($this->view->query->where as $group => $data) {
-        foreach ($data['conditions'] as $delta => $condition) {
-          if (array_key_exists('value', $condition) && is_array($condition['value'])) {
-            foreach ($condition['value'] as $placeholder => $placeholder_value) {
-              if (array_key_exists($placeholder, $placeholders)) {
-                // If we didn't get a match, this is a > $min < $max query that uses the view
-                // min and max dates as placeholders.
-                $date = ($count == 2) ? $this->view->date_info->min_date : $this->view->date_info->max_date;
-                $next_placeholder = array_shift($placeholders);
-                $this->view->query->where[$group]['conditions'][$delta]['value'][$placeholder] = $date->format($format);
-                $count--;
-              }
+      $this->set_argument_placeholders($this->view->date_info->placeholders, $this->view->date_info->min_date, $this->view->date_info->max_date, $this->view->query, $format);
+    }
+  }
+
+  function set_argument_value($argument, $value) {
+    $argument->argument = $value;
+    $argument->date_range = $argument->date_handler->arg_range($value);
+    $argument->min_date = $argument->date_range[0];
+    $argument->max_date = $argument->date_range[1];
+    // $argument->is_default works correctly for normal arguments, but does not
+    // work correctly if we are swapping in a new value from the pager.
+    $argument->is_default = FALSE;
+  }
+
+  function set_argument_placeholders($placeholders, $mindate, $maxdate, $query, $format) {
+    $count = count($placeholders);
+    foreach ($query->where as $group => $data) {
+      foreach ($data['conditions'] as $delta => $condition) {
+        if (array_key_exists('value', $condition) && is_array($condition['value'])) {
+          foreach ($condition['value'] as $placeholder => $placeholder_value) {
+            if (array_key_exists($placeholder, $placeholders)) {
+              // If we didn't get a match, this is a > $min < $max query that uses the view
+              // min and max dates as placeholders.
+              $date = ($count == 2) ? $mindate : $maxdate;
+              $next_placeholder = array_shift($placeholders);
+              $query->where[$group]['conditions'][$delta]['value'][$placeholder] = $date->format($format);
+              $count--;
             }
           }
         }
@@ -230,4 +352,5 @@ class date_views_plugin_pager extends views_plugin_pager {
     $pager_theme = views_theme_functions('date_views_pager', $this->view, $this->display);
     return theme($pager_theme, array('plugin' => $this, 'input' => $input));
   }
-}
\ No newline at end of file
+}
+// @codingStandardsIgnoreEnd
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/theme/date-views-pager.tpl.php b/profiles/wcm_base/modules/contrib/date/date_views/theme/date-views-pager.tpl.php
index b12c2e1c..ac8cfb4e 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/theme/date-views-pager.tpl.php
+++ b/profiles/wcm_base/modules/contrib/date/date_views/theme/date-views-pager.tpl.php
@@ -27,8 +27,10 @@
  *   be used in the l() function, including rel=nofollow.
  */
 ?>
-<?php if (!empty($pager_prefix)) print $pager_prefix; ?>
-<div class="date-nav-wrapper clearfix<?php if (!empty($extra_classes)) print $extra_classes; ?>">
+<?php if (!empty($pager_prefix)) : ?>
+<?php print $pager_prefix; ?>
+<?php endif; ?>
+<div class="date-nav-wrapper clearfix<?php if (!empty($extra_classes)): print $extra_classes; endif; ?>">
   <div class="date-nav item-list">
     <div class="date-heading">
       <h3><?php print $nav_title ?></h3>
@@ -36,7 +38,11 @@
     <ul class="pager">
     <?php if (!empty($prev_url)) : ?>
       <li class="date-prev">
-        <?php print l('&laquo;' . ($mini ? '' : ' ' . t('Prev', array(), array('context' => 'date_nav'))), $prev_url, $prev_options); ?>
+        <?php
+        $text = '&laquo;';
+        $text .= $mini ? '' : ' ' . t('Prev', array(), array('context' => 'date_nav'));
+        print l(t($text), $prev_url, $prev_options);
+        ?>
       </li>
     <?php endif; ?>
     <?php if (!empty($next_url)) : ?>
@@ -46,4 +52,4 @@
     <?php endif; ?>
     </ul>
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/profiles/wcm_base/modules/contrib/date/date_views/theme/theme.inc b/profiles/wcm_base/modules/contrib/date/date_views/theme/theme.inc
index cb01e327..9e7debc7 100644
--- a/profiles/wcm_base/modules/contrib/date/date_views/theme/theme.inc
+++ b/profiles/wcm_base/modules/contrib/date/date_views/theme/theme.inc
@@ -4,6 +4,7 @@
  * @file
  * Theme files for Date Pager.
  */
+
 /**
  * Jump in and move the pager.
  */
@@ -15,9 +16,11 @@ function date_views_preprocess_views_view(&$vars) {
         $vars['header'] .= $vars['pager'];
         $vars['pager'] = '';
         break;
+
       case 'both':
         $vars['header'] .= $vars['pager'];
         break;
+
       default:
         // Already on the bottom.
     }
@@ -66,28 +69,37 @@ function template_preprocess_date_views_pager(&$vars) {
   }
 
   if (empty($date_info->hide_nav)) {
-    $prev_date = clone($min_date);
-    date_modify($prev_date, '-1 ' . $granularity);
-    $next_date = clone($min_date);
-    date_modify($next_date, '+1 ' . $granularity);
-    $format = array('year' => 'Y', 'month' => 'Y-m', 'day' => 'Y-m-d');
-    switch ($granularity) {
-      case 'week':
-        $next_week = date_week(date_format($next_date, 'Y-m-d'));
-        $prev_week = date_week(date_format($prev_date, 'Y-m-d'));
-        $next_arg = date_format($next_date, 'o-\W') . date_pad($next_week);
-        $prev_arg = date_format($prev_date, 'o-\W') . date_pad($prev_week);
-        break;
-      default:
-        $next_arg = date_format($next_date, $format[$granularity]);
-        $prev_arg = date_format($prev_date, $format[$granularity]);
+    $prev_date = $date_info->prev_date;
+    $next_date = $date_info->next_date;
+
+    $format = array('year' => 'Y', 'month' => 'Y-m', 'day' => 'Y-m-d', 'hour' => 'Y-m-d\TH');
+    if (!empty($prev_date)) {
+      switch ($granularity) {
+        case 'week':
+          $prev_week = date_week(date_format($prev_date, 'Y-m-d'));
+          $prev_arg = date_format($prev_date, 'Y-\W') . date_pad($prev_week);
+          break;
+        default:
+          $prev_arg = date_format($prev_date, $format[$granularity]);
+      }
+      $prev_path = str_replace($date_info->date_arg, $prev_arg, $date_info->url);
+      $prev_args[$pos] = $prev_arg;
+      $vars['prev_url'] = date_pager_url($view, NULL, $prev_arg);
     }
-    $next_path = str_replace($date_info->date_arg, $next_arg, $date_info->url);
-    $prev_path = str_replace($date_info->date_arg, $prev_arg, $date_info->url);
-    $next_args[$pos] = $next_arg;
-    $prev_args[$pos] = $prev_arg;
-    $vars['next_url'] = date_pager_url($view, NULL, $next_arg);
-    $vars['prev_url'] = date_pager_url($view, NULL, $prev_arg);
+    if (!empty($next_date)) {
+      switch ($granularity) {
+        case 'week':
+          $next_week = date_week(date_format($next_date, 'Y-m-d'));
+          $next_arg = date_format($next_date, 'Y-\W') . date_pad($next_week);
+          break;
+        default:
+          $next_arg = date_format($next_date, $format[$granularity]);
+      }
+      $next_path = str_replace($date_info->date_arg, $next_arg, $date_info->url);
+      $next_args[$pos] = $next_arg;
+      $vars['next_url'] = date_pager_url($view, NULL, $next_arg);
+    }
+
     $vars['next_options'] = $vars['prev_options'] = array();
   }
   else {
@@ -117,14 +129,17 @@ function template_preprocess_date_views_pager(&$vars) {
       $prev_title = t('Navigate to previous year');
       $next_title = t('Navigate to next year');
       break;
+
     case 'month':
       $prev_title = t('Navigate to previous month');
       $next_title = t('Navigate to next month');
       break;
+
     case 'week':
       $prev_title = t('Navigate to previous week');
       $next_title = t('Navigate to next week');
       break;
+
     case 'day':
       $prev_title = t('Navigate to previous day');
       $next_title = t('Navigate to next day');
@@ -157,9 +172,10 @@ function template_preprocess_date_views_pager(&$vars) {
 }
 
 /**
- * Theme the calendar title
+ * Theme the calendar title.
  */
 function theme_date_nav_title($params) {
+  $title  = '';
   $granularity = $params['granularity'];
   $view = $params['view'];
   $date_info = $view->date_info;
@@ -172,19 +188,28 @@ function theme_date_nav_title($params) {
       $title = $date_info->year;
       $date_arg = $date_info->year;
       break;
+
     case 'month':
       $format = !empty($format) ? $format : (empty($date_info->mini) ? $format_with_year : $format_without_year);
       $title = date_format_date($date_info->min_date, 'custom', $format);
       $date_arg = $date_info->year . '-' . date_pad($date_info->month);
       break;
+
     case 'day':
       $format = !empty($format) ? $format : (empty($date_info->mini) ? $format_with_year : $format_without_year);
       $title = date_format_date($date_info->min_date, 'custom', $format);
-      $date_arg = $date_info->year . '-' . date_pad($date_info->month) . '-' . date_pad($date_info->day);
+      $date_arg = $date_info->year;
+      $date_arg .= '-';
+      $date_arg .= date_pad($date_info->month);
+      $date_arg .= '-';
+      $date_arg .= date_pad($date_info->day);
       break;
+
     case 'week':
       $format = !empty($format) ? $format : (empty($date_info->mini) ? $format_with_year : $format_without_year);
-      $title = t('Week of @date', array('@date' => date_format_date($date_info->min_date, 'custom', $format)));
+      $title = t('Week of @date', array(
+        '@date' => date_format_date($date_info->min_date, 'custom', $format),
+      ));
       $date_arg = $date_info->year . '-W' . date_pad($date_info->week);
       break;
   }
diff --git a/profiles/wcm_base/modules/contrib/date/tests/date_api.test b/profiles/wcm_base/modules/contrib/date/tests/date_api.test
index f50020c1..0924ebaa 100644
--- a/profiles/wcm_base/modules/contrib/date/tests/date_api.test
+++ b/profiles/wcm_base/modules/contrib/date/tests/date_api.test
@@ -132,11 +132,11 @@ class DateAPITestCase extends DrupalWebTestCase {
     // Test week range with calendar weeks.
     variable_set('date_first_day', 0);
     variable_set('date_api_use_iso8601', FALSE);
-    $expected = '2008-01-27 to 2008-02-03';
+    $expected = '2008-01-27 to 2008-02-02';
     $result = date_week_range(5, 2008);
     $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
     $this->assertEqual($expected, $value, "Test calendar date_week_range(5, 2008): should be $expected, found $value.");
-    $expected = '2009-01-25 to 2009-02-01';
+    $expected = '2009-01-25 to 2009-01-31';
     $result = date_week_range(5, 2009);
     $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
     $this->assertEqual($expected, $value, "Test calendar date_week_range(5, 2009): should be $expected, found $value.");
@@ -144,11 +144,11 @@ class DateAPITestCase extends DrupalWebTestCase {
     // And now with ISO weeks.
     variable_set('date_first_day', 1);
     variable_set('date_api_use_iso8601', TRUE);
-    $expected = '2008-01-28 to 2008-02-04';
+    $expected = '2008-01-28 to 2008-02-03';
     $result = date_week_range(5, 2008);
     $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
     $this->assertEqual($expected, $value, "Test ISO date_week_range(5, 2008): should be $expected, found $value.");
-    $expected = '2009-01-26 to 2009-02-02';
+    $expected = '2009-01-26 to 2009-02-01';
     $result = date_week_range(5, 2009);
     $value = $result[0]->format(DATE_FORMAT_DATE) . ' to ' . $result[1]->format(DATE_FORMAT_DATE);
     $this->assertEqual($expected, $value, "Test ISO date_week_range(5, 2009): should be $expected, found $value.");
@@ -396,6 +396,28 @@ class DateAPITestCase extends DrupalWebTestCase {
     $date = new dateObject($input, $timezone, $format);
     $this->assertNotEqual(count($date->errors), 0, '23 abc 2012 should be an invalid date');
 
+    // Test Granularity.
+    $input = '2005-06-01 10:30:45';
+    $timezone = NULL;
+    $format = 'Y-m-d H:i:s';
+
+    $date = new dateObject($input, $timezone, $format);
+    $date->removeGranularity('hour');
+    $date->removeGranularity('second');
+    $date->removeGranularity('minute');
+
+    $value = $date->format($format);
+    $expected = '2005-06-01';
+    $this->assertEqual($expected, $value, "The date with removed granularity should be $expected, found $value.");
+
+    $date->addGranularity('hour');
+    $date->addGranularity('second');
+    $date->addGranularity('minute');
+
+    $value = $date->format($format);
+    $expected = '2005-06-01 10:30:45';
+
+    $this->assertEqual($expected, $value, "The date with added granularity should be $expected, found $value.");
   }
 
   /**
diff --git a/profiles/wcm_base/modules/contrib/date/tests/date_field.test b/profiles/wcm_base/modules/contrib/date/tests/date_field.test
index b2a45a0d..2dd3f051 100644
--- a/profiles/wcm_base/modules/contrib/date/tests/date_field.test
+++ b/profiles/wcm_base/modules/contrib/date/tests/date_field.test
@@ -52,7 +52,7 @@ abstract class DateFieldBasic extends DrupalWebTestCase {
     $repeat = !empty($repeat) ? $repeat : 0;
     $todate = !empty($todate) ? $todate : 'optional';
     $widget_type = !empty($widget_type) ? $widget_type : 'date_select';
-    $tz_handling = !empty($tz_handing) ? $tz_handling : 'site';
+    $tz_handling = !empty($tz_handling) ? $tz_handling : 'site';
     $granularity = !empty($granularity) ? $granularity : array('year', 'month', 'day', 'hour', 'minute');
     $year_range = !empty($year_range) ? $year_range : '2010:+1';
     $input_format = !empty($input_format) ? $input_format : date_default_format($widget_type);
@@ -151,6 +151,123 @@ abstract class DateFieldBasic extends DrupalWebTestCase {
 
   }
 
+  /**
+   * Creates a date field from an array of settings values.
+   *
+   * All values have defaults, only need to specify values that need to be
+   * different.
+   */
+  protected function createMultiDateField($values = array()) {
+    extract($values);
+
+    $field_name = !empty($field_name) ? $field_name : 'field_test';
+    $entity_type = !empty($entity_type) ? $entity_type : 'node';
+    $bundle = !empty($bundle) ? $bundle : 'story';
+    $label = !empty($label) ? $label : 'Test';
+    $field_type = !empty($field_type) ? $field_type : 'datetime';
+    $repeat = !empty($repeat) ? $repeat : 0;
+    $todate = !empty($todate) ? $todate : 'optional';
+    $widget_type = !empty($widget_type) ? $widget_type : 'date_select';
+    $this->verbose(!empty($tz_handling));
+    $tz_handling = !empty($tz_handling) ? $tz_handling : 'site';
+    $granularity = !empty($granularity) ? $granularity : array('year', 'month', 'day', 'hour', 'minute');
+    $year_range = !empty($year_range) ? $year_range : '2010:+1';
+    $input_format = !empty($input_format) ? $input_format : date_default_format($widget_type);
+    $input_format_custom = !empty($input_format_custom) ? $input_format_custom : '';
+    $text_parts = !empty($text_parts) ? $text_parts : array();
+    $increment = !empty($increment) ? $increment : 15;
+    $default_value = !empty($default_value) ? $default_value : 'now';
+    $default_value2 = !empty($default_value2) ? $default_value2 : 'blank';
+    $default_format = !empty($default_format) ? $default_format : 'long';
+    $cache_enabled = !empty($cache_enabled);
+    $cache_count = !empty($cache_count) ? $cache_count : 4;
+    $cardinality = !empty($cardinality) ? $cardinality : 1;
+
+    $field = array(
+      'field_name' => $field_name,
+      'type' => $field_type,
+      'cardinality' => $cardinality,
+      'settings' => array(
+        'granularity' => $granularity,
+        'tz_handling' => $tz_handling,
+        'timezone_db' => date_get_timezone_db($tz_handling),
+        'repeat' => $repeat,
+        'todate' => $todate,
+        'cache_enabled' => $cache_enabled,
+        'cache_count' => $cache_count,
+      ),
+    );
+    $instance = array(
+      'entity_type' => $entity_type,
+      'field_name' => $field_name,
+      'label' => $label,
+      'bundle' => $bundle,
+      // Move the date right below the title.
+      'weight' => -4,
+      'widget' => array(
+        'type' => $widget_type,
+        // Increment for minutes and seconds, can be 1, 5, 10, 15, or 30.
+        'settings' => array(
+          'increment' => $increment,
+          // The number of years to go back and forward in drop-down year
+          // selectors.
+          'year_range' => $year_range,
+          'input_format' => $input_format,
+          'input_format_custom' => $input_format_custom,
+          'text_parts' => $text_parts,
+          'label_position' => 'above',
+          'repeat_collapsed' => 0,
+        ),
+        'weight' => -4,
+      ),
+      'settings' => array(
+        'default_value' => $default_value,
+        'default_value2' => $default_value2,
+      ),
+    );
+
+    $instance['display'] = array(
+      'default' => array(
+        'label' => 'above',
+        'type' => 'date_default',
+        'settings' => array(
+          'format_type' => $default_format,
+          'show_repeat_rule' => 'show',
+          'multiple_number' => '',
+          'multiple_from' => '',
+          'multiple_to' => '',
+          'fromto' => 'both',
+        ),
+        'module' => 'date',
+        'weight' => 0 ,
+      ),
+      'teaser' => array(
+        'label' => 'above',
+        'type' => 'date_default',
+        'weight' => 0,
+        'settings' => array(
+          'format_type' => $default_format,
+          'show_repeat_rule' => 'show',
+          'multiple_number' => '',
+          'multiple_from' => '',
+          'multiple_to' => '',
+          'fromto' => 'both',
+        ),
+        'module' => 'date',
+      ),
+    );
+
+    $field = field_create_field($field);
+    $instance = field_create_instance($instance);
+
+    field_info_cache_clear(TRUE);
+    field_cache_clear(TRUE);
+
+    // Look at how the field got configured.
+    $this->drupalGet("admin/structure/types/manage/$bundle/fields/$field_name");
+    $this->drupalGet("admin/structure/types/manage/$bundle/display");
+  }
+
   /**
    * @todo.
    */
diff --git a/profiles/wcm_base/modules/contrib/date/tests/date_timezone.test b/profiles/wcm_base/modules/contrib/date/tests/date_timezone.test
index ddbdcef9..54d882fd 100644
--- a/profiles/wcm_base/modules/contrib/date/tests/date_timezone.test
+++ b/profiles/wcm_base/modules/contrib/date/tests/date_timezone.test
@@ -50,6 +50,111 @@ class DateTimezoneTestCase extends DateFieldBasic {
     }
   }
 
+  /**
+   * Validates timezone handling with a multi-value date field.
+   */
+  public function testMultiUserTimezone() {
+    // Create date fields with combinations of various types and granularity
+    // using the "Date's Timezone" strategy.
+    $field_type = 'datetime';
+    $tz_handling = 'date';
+    $max_granularity = 'minute';
+
+    // Create date field
+    $field_name = "field_test";
+    $label = 'Test';
+    $options = array(
+      'label' => $label,
+      'widget_type' => 'date_text',
+      'field_name' => $field_name,
+      'field_type' => $field_type,
+      'input_format' => 'custom',
+      'input_format_custom' => 'm/d/Y - H:i:s T',
+      'cardinality' => 3,
+      'tz_handling' => $tz_handling,
+    );
+    $this->createMultiDateField($options);
+
+    // Submit a date field form with multiple values
+    $this->dateMultiValueForm($field_name, $field_type, $max_granularity, $tz_handling);
+
+
+    $this->deleteDateField($label);
+  }
+
+  /**
+   * Tests the submission of a date field's widget form when using unlimited
+   * cardinality
+   */
+  public function dateMultiValueForm($field_name, $field_type, $max_granularity, $tz_handling) {
+    variable_set('date_format_long', 'D, m/d/Y - H:i:s T');
+
+    $edit = array();
+    $should_be = array();
+    $edit['title'] = $this->randomName(8);
+    $timezones = array('America/Chicago', 'America/Los_Angeles', 'America/New_York');
+
+    switch ($max_granularity) {
+      case 'hour':
+        $edit[$field_name . '[und][0][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][0][timezone][timezone]'] = 'America/Chicago';
+        $should_be[0] = 'Thu, 10/07/2010 - 10 CDT';
+
+        $edit[$field_name . '[und][1][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][1][timezone][timezone]'] = 'America/Los_Angeles';
+        $should_be[1] = 'Thu, 10/07/2010 - 10 PDT';
+
+        $edit[$field_name . '[und][2][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][2][timezone][timezone]'] = 'America/New_York';
+        $should_be[2] = 'Thu, 10/07/2010 - 10 EDT';
+
+        break;
+      case 'minute':
+        $edit[$field_name . '[und][0][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][0][timezone][timezone]'] = 'America/Chicago';
+        $should_be[0] = 'Thu, 10/07/2010 - 10:30 CDT';
+
+        $edit[$field_name . '[und][1][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][1][timezone][timezone]'] = 'America/Los_Angeles';
+        $should_be[1] = 'Thu, 10/07/2010 - 10:30 PDT';
+
+        $edit[$field_name . '[und][2][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][2][timezone][timezone]'] = 'America/New_York';
+        $should_be[2] = 'Thu, 10/07/2010 - 10:30 EDT';
+
+        break;
+      case 'second':
+        $edit[$field_name . '[und][0][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][0][timezone][timezone]'] = 'America/Chicago';
+        $should_be[0] = 'Thu, 10/07/2010 - 10:30:30 CDT';
+
+        $edit[$field_name . '[und][1][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][1][timezone][timezone]'] = 'America/Los_Angeles';
+        $should_be[1] = 'Thu, 10/07/2010 - 10:30:30 PDT';
+
+        $edit[$field_name . '[und][2][value][date]'] = '10/07/2010 - 10:30';
+        $edit[$field_name . '[und][2][timezone][timezone]'] = 'America/New_York';
+        $should_be[2] = 'Thu, 10/07/2010 - 10:30:30 EDT';
+        break;
+    }
+
+    $this->drupalPost('node/add/story', $edit, t('Save'));
+    $this->assertText($edit['title'], "Node has been created");
+
+    foreach ($should_be as $assertion) {
+      $this->assertText($assertion, "Found the correct date for a $field_type field using $max_granularity granularity with $tz_handling timezone handling.");
+    }
+
+    // Goto the edit page and save the node again.
+    $node = $this->drupalGetNodeByTitle($edit['title']);
+    $this->drupalGet('node/' . $node->nid . '/edit');
+
+    // Re-assert the proper date timezones.
+    foreach ($timezones as $key => $timezone) {
+      $this->assertOptionSelected('edit-field-test-und-' . $key . '-timezone-timezone', $timezone, "Found the correct timezone $timezone for a $field_type field using $max_granularity granularity with $tz_handling timezone handling.");
+    }
+  }
+
   /**
    * @todo.
    */
diff --git a/profiles/wcm_base/modules/contrib/date/tests/date_views_pager.test b/profiles/wcm_base/modules/contrib/date/tests/date_views_pager.test
new file mode 100644
index 00000000..4f5dd97d
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/date/tests/date_views_pager.test
@@ -0,0 +1,129 @@
+<?php
+
+/**
+ * @file
+ * Views date pager test.
+ */
+
+class ViewsPagerTestCase extends DrupalWebTestCase {
+  /**
+   * Test info.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Date views pager skipping test',
+      'description' => "Views date pager, option to skip empty pages test",
+      'group' => 'Date',
+    );
+  }
+
+  /**
+   * Test setup actions.
+   */
+  public function setUp() {
+    // Load the 'date_views', 'views', 'views_ui', 'ctools' modules.
+    parent::setUp('date_views', 'views', 'views_ui', 'ctools');
+    // Set required permissions.
+    $permissions = array('administer views', 'administer site configuration');
+    // Create admin user and login.
+    $admin_user = $this->drupalCreateUser($permissions);
+    $this->drupalLogin($admin_user);
+
+    // Create a new view for test.
+    $view = new view();
+    $view->name = 'test_date_pager';
+    $view->description = '';
+    $view->tag = 'default';
+    $view->base_table = 'node';
+    $view->human_name = 'test_date_pager';
+    $view->core = 7;
+    $view->api_version = '3.0';
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Master */
+    $handler = $view->new_display('default', 'Master', 'default');
+    $handler->display->display_options['title'] = 'test_date_pager';
+    $handler->display->display_options['use_more_always'] = FALSE;
+    $handler->display->display_options['access']['type'] = 'perm';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['query']['type'] = 'views_query';
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'date_views_pager';
+    $handler->display->display_options['pager']['options']['skip_empty_pages'] = 1;
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'node';
+    /* Field: Content: Title */
+    $handler->display->display_options['fields']['title']['id'] = 'title';
+    $handler->display->display_options['fields']['title']['table'] = 'node';
+    $handler->display->display_options['fields']['title']['field'] = 'title';
+    $handler->display->display_options['fields']['title']['label'] = '';
+    $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
+    $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
+    /* Sort criterion: Content: Post date */
+    $handler->display->display_options['sorts']['created']['id'] = 'created';
+    $handler->display->display_options['sorts']['created']['table'] = 'node';
+    $handler->display->display_options['sorts']['created']['field'] = 'created';
+    $handler->display->display_options['sorts']['created']['order'] = 'DESC';
+    /* Contextual filter: Date: Date (node) */
+    $handler->display->display_options['arguments']['date_argument']['id'] = 'date_argument';
+    $handler->display->display_options['arguments']['date_argument']['table'] = 'node';
+    $handler->display->display_options['arguments']['date_argument']['field'] = 'date_argument';
+    $handler->display->display_options['arguments']['date_argument']['default_action'] = 'default';
+    $handler->display->display_options['arguments']['date_argument']['default_argument_type'] = 'date';
+    $handler->display->display_options['arguments']['date_argument']['summary']['format'] = 'default_summary';
+    $handler->display->display_options['arguments']['date_argument']['granularity'] = 'hour';
+    $handler->display->display_options['arguments']['date_argument']['date_fields'] = array(
+      'node.created' => 'node.created',
+    );
+    /* Filter criterion: Content: Published */
+    $handler->display->display_options['filters']['status']['id'] = 'status';
+    $handler->display->display_options['filters']['status']['table'] = 'node';
+    $handler->display->display_options['filters']['status']['field'] = 'status';
+    $handler->display->display_options['filters']['status']['value'] = 1;
+    $handler->display->display_options['filters']['status']['group'] = 1;
+    $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
+
+    /* Display: Page */
+    $handler = $view->new_display('page', 'Page', 'page_1');
+    $handler->display->display_options['path'] = 'test_date_pager';
+
+    $view->save();
+  }
+
+  /**
+   * Test pager skipping.
+   */
+  public function testPagerSkipping() {
+    // Go to view admin page.
+    $this->drupalGet('admin/structure/views/view/display/test_date_pager/edit');
+    // Go to pager options.
+    $this->drupalGet('admin/structure/views/nojs/display/test_date_pager/default/pager_options');
+    // Check if "Skip empty pages" text - exist.
+    $this->assertText('Skip empty pages');
+    // Check if field and it's value is correct.
+    $this->assertFieldByName('pager_options[skip_empty_pages]', '1');
+    // Go back to view admin page.
+    $this->drupalGet('admin/structure/views/view/display/test_date_pager/edit');
+    // Check if pager on empty page are gone.
+    $this->assertNoText('« Prev', 'Previous pager does not exist');
+    $this->assertNoText('Next »', 'Next pager does not exist');
+  }
+
+  /**
+   * Test the view page has no PHP warnings.
+   */
+  public function testPagerWarning() {
+    $this->drupalCreateNode(array('type' => 'blog'));
+    // Set pager to skip empty pages.
+    $edit = array(
+      'pager_options[skip_empty_pages]' => FALSE,
+    );
+    $this->drupalPost('admin/structure/views/nojs/display/test_date_pager/default/pager_options', $edit, t('Apply'));
+    // Save the view.
+    $this->drupalPost('admin/structure/views/view/test_date_pager/edit', array(), t('Save'));
+
+    // Visit view page. This will throw error, if any PHP warnings or errors.
+    $this->drupalGet('test_date_pager');
+  }
+
+}
diff --git a/profiles/wcm_base/modules/contrib/date/tests/date_views_popup.test b/profiles/wcm_base/modules/contrib/date/tests/date_views_popup.test
new file mode 100644
index 00000000..e3d4306d
--- /dev/null
+++ b/profiles/wcm_base/modules/contrib/date/tests/date_views_popup.test
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * @file
+ * Tests date popup in Views
+ */
+
+class DateViewsPopupTestCase extends DateFieldBasic {
+  /**
+   * Test info.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Date Views - Popup Test',
+      'description' => 'Tests date popup in Views',
+      'group' => 'Date',
+    );
+  }
+
+  /**
+   * Test setup actions.
+   */
+  public function setUp() {
+    parent::setUp();
+    // Load the 'date_popup', 'date_views', 'views', 'views_ui', 'ctools' modules.
+    $modules = array('date_popup', 'date_views', 'views', 'views_ui', 'ctools');
+    $success = module_enable($modules, TRUE);
+    $this->assertTrue($success, t('Enabled modules: %modules', array('%modules' => implode(', ', $modules))));
+
+    // Reset/rebuild all data structures after enabling the modules.
+    $this->resetAll();
+
+    // Create a date field.
+    $field_name = "field_test_date_popup";
+    $label = 'Test';
+    $options = array(
+      'label' => 'Test',
+      'widget_type' => 'date_popup',
+      'field_name' => $field_name,
+      'field_type' => 'datetime',
+      'input_format' => 'm/d/Y - H:i',
+    );
+    $this->createDateField($options);
+
+    // Set required permissions.
+    $permissions = array('administer views', 'administer site configuration');
+    // Create admin user and login.
+    $admin_user = $this->drupalCreateUser($permissions);
+    $this->drupalLogin($admin_user);
+
+    // Create the view.
+    $view = new view();
+    $view->name = 'test_date_popup';
+    $view->description = '';
+    $view->tag = 'default';
+    $view->base_table = 'node';
+    $view->human_name = 'Test date_popup';
+    $view->core = 7;
+    $view->api_version = '3.0';
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Master */
+    $handler = $view->new_display('default', 'Master', 'default');
+    $handler->display->display_options['title'] = 'test_date_popup_page';
+    $handler->display->display_options['use_more_always'] = FALSE;
+    $handler->display->display_options['access']['type'] = 'perm';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['query']['type'] = 'views_query';
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'none';
+    $handler->display->display_options['pager']['options']['offset'] = '0';
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'node';
+    /* Field: Content: Title */
+    $handler->display->display_options['fields']['title']['id'] = 'title';
+    $handler->display->display_options['fields']['title']['table'] = 'node';
+    $handler->display->display_options['fields']['title']['field'] = 'title';
+    $handler->display->display_options['fields']['title']['label'] = '';
+    $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
+    $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
+    /* Filter criterion: Content: test_date_popup (field_test_date_popup) */
+    $handler->display->display_options['filters']['field_test_date_popup_value']['id'] = 'field_test_date_popup_value';
+    $handler->display->display_options['filters']['field_test_date_popup_value']['table'] = 'field_data_field_test_date_popup';
+    $handler->display->display_options['filters']['field_test_date_popup_value']['field'] = 'field_test_date_popup_value';
+    $handler->display->display_options['filters']['field_test_date_popup_value']['exposed'] = TRUE;
+    $handler->display->display_options['filters']['field_test_date_popup_value']['expose']['operator_id'] = 'field_test_date_popup_value_op';
+    $handler->display->display_options['filters']['field_test_date_popup_value']['expose']['label'] = 'test_date_popup (field_test_date_popup)';
+    $handler->display->display_options['filters']['field_test_date_popup_value']['expose']['operator'] = 'field_test_date_popup_value_op';
+    $handler->display->display_options['filters']['field_test_date_popup_value']['expose']['identifier'] = 'field_test_date_popup_value';
+    $handler->display->display_options['filters']['field_test_date_popup_value']['form_type'] = 'date_popup';
+
+    /* Display: Page */
+    $handler = $view->new_display('page', 'Page', 'page');
+    $handler->display->display_options['path'] = 'test-date-popup';
+
+    $view->save();
+  }
+
+  /**
+   * Test date popup.
+   */
+  public function testDatePopup() {
+    // Go to view page.
+    $this->drupalGet('test-date-popup');
+  }
+}
diff --git a/profiles/wcm_base/modules/contrib/date/PATCHES.txt b/profiles/wcm_base/modules/contrib/jquery_update/PATCHES.txt
similarity index 64%
rename from profiles/wcm_base/modules/contrib/date/PATCHES.txt
rename to profiles/wcm_base/modules/contrib/jquery_update/PATCHES.txt
index cfee51c9..f6dfcf6a 100644
--- a/profiles/wcm_base/modules/contrib/date/PATCHES.txt
+++ b/profiles/wcm_base/modules/contrib/jquery_update/PATCHES.txt
@@ -1,4 +1,4 @@
 The following patches have been applied to this project:
-- http://drupal.org/files/issues/date-title_date_formats-2294973-70.patch
+- http://drupal.org/files/issues/jquery_update-autoheight_fix-2241973-7.patch
 
 This file was automatically generated by Drush Make (http://drupal.org/project/drush).
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/jquery_update.info b/profiles/wcm_base/modules/contrib/jquery_update/jquery_update.info
index 9eeb140c..81c86a73 100644
--- a/profiles/wcm_base/modules/contrib/jquery_update/jquery_update.info
+++ b/profiles/wcm_base/modules/contrib/jquery_update/jquery_update.info
@@ -7,9 +7,9 @@ files[] = jquery_update.install
 
 configure = admin/config/development/jquery_update
 
-; Information added by Drupal.org packaging script on 2015-06-17
-version = "7.x-2.6"
+; Information added by Drupal.org packaging script on 2015-10-20
+version = "7.x-2.7"
 core = "7.x"
 project = "jquery_update"
-datestamp = "1434549783"
+datestamp = "1445379855"
 
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.js
index fcb5d12e..5c4932fe 100644
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.js
+++ b/profiles/wcm_base/modules/contrib/jquery_update/replace/misc/1.9/overlay-parent.js
@@ -384,6 +384,8 @@ Drupal.overlay.isAdminLink = function (url) {
 /**
  * Determine whether a link is external to the site.
  *
+ * Deprecated. Use Drupal.urlIsLocal() instead.
+ *
  * @param url
  *   The URL to be tested.
  *
@@ -391,6 +393,12 @@ Drupal.overlay.isAdminLink = function (url) {
  *   TRUE if the URL is external to the site, FALSE otherwise.
  */
 Drupal.overlay.isExternalLink = function (url) {
+
+  // Drupal.urlIsLocal() was added in Drupal 7.39.
+  if (typeof Drupal.urlIsLocal === 'function') {
+    return !Drupal.urlIsLocal(url);
+  }
+
   var re = RegExp('^((f|ht)tps?:)?//(?!' + window.location.host + ')');
   return re.test(url);
 };
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.de-DE.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.de-DE.js
deleted file mode 100644
index 5466bd75..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.de-DE.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Globalize Culture de-DE
- *
- * http://github.com/jquery/globalize
- *
- * Copyright Software Freedom Conservancy, Inc.
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * This file was generated by the Globalize Culture Generator
- * Translation: bugs found in this file need to be fixed in the generator
- */
-
-(function( window, undefined ) {
-
-var Globalize;
-
-if ( typeof require !== "undefined"
-	&& typeof exports !== "undefined"
-	&& typeof module !== "undefined" ) {
-	// Assume CommonJS
-	Globalize = require( "globalize" );
-} else {
-	// Global variable
-	Globalize = window.Globalize;
-}
-
-Globalize.addCultureInfo( "de-DE", "default", {
-	name: "de-DE",
-	englishName: "German (Germany)",
-	nativeName: "Deutsch (Deutschland)",
-	language: "de",
-	numberFormat: {
-		",": ".",
-		".": ",",
-		NaN: "n. def.",
-		negativeInfinity: "-unendlich",
-		positiveInfinity: "+unendlich",
-		percent: {
-			pattern: ["-n%","n%"],
-			",": ".",
-			".": ","
-		},
-		currency: {
-			pattern: ["-n $","n $"],
-			",": ".",
-			".": ",",
-			symbol: "€"
-		}
-	},
-	calendars: {
-		standard: {
-			"/": ".",
-			firstDay: 1,
-			days: {
-				names: ["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],
-				namesAbbr: ["So","Mo","Di","Mi","Do","Fr","Sa"],
-				namesShort: ["So","Mo","Di","Mi","Do","Fr","Sa"]
-			},
-			months: {
-				names: ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember",""],
-				namesAbbr: ["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez",""]
-			},
-			AM: null,
-			PM: null,
-			eras: [{"name":"n. Chr.","start":null,"offset":0}],
-			patterns: {
-				d: "dd.MM.yyyy",
-				D: "dddd, d. MMMM yyyy",
-				t: "HH:mm",
-				T: "HH:mm:ss",
-				f: "dddd, d. MMMM yyyy HH:mm",
-				F: "dddd, d. MMMM yyyy HH:mm:ss",
-				M: "dd MMMM",
-				Y: "MMMM yyyy"
-			}
-		}
-	}
-});
-
-}( this ));
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.ja-JP.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.ja-JP.js
deleted file mode 100644
index a9469d70..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.culture.ja-JP.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Globalize Culture ja-JP
- *
- * http://github.com/jquery/globalize
- *
- * Copyright Software Freedom Conservancy, Inc.
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * This file was generated by the Globalize Culture Generator
- * Translation: bugs found in this file need to be fixed in the generator
- */
-
-(function( window, undefined ) {
-
-var Globalize;
-
-if ( typeof require !== "undefined"
-	&& typeof exports !== "undefined"
-	&& typeof module !== "undefined" ) {
-	// Assume CommonJS
-	Globalize = require( "globalize" );
-} else {
-	// Global variable
-	Globalize = window.Globalize;
-}
-
-Globalize.addCultureInfo( "ja-JP", "default", {
-	name: "ja-JP",
-	englishName: "Japanese (Japan)",
-	nativeName: "日本語 (日本)",
-	language: "ja",
-	numberFormat: {
-		NaN: "NaN (非数値)",
-		negativeInfinity: "-∞",
-		positiveInfinity: "+∞",
-		percent: {
-			pattern: ["-n%","n%"]
-		},
-		currency: {
-			pattern: ["-$n","$n"],
-			decimals: 0,
-			symbol: "¥"
-		}
-	},
-	calendars: {
-		standard: {
-			days: {
-				names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
-				namesAbbr: ["日","月","火","水","木","金","土"],
-				namesShort: ["日","月","火","水","木","金","土"]
-			},
-			months: {
-				names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""],
-				namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""]
-			},
-			AM: ["午前","午前","午前"],
-			PM: ["午後","午後","午後"],
-			eras: [{"name":"西暦","start":null,"offset":0}],
-			patterns: {
-				d: "yyyy/MM/dd",
-				D: "yyyy'年'M'月'd'日'",
-				t: "H:mm",
-				T: "H:mm:ss",
-				f: "yyyy'年'M'月'd'日' H:mm",
-				F: "yyyy'年'M'月'd'日' H:mm:ss",
-				M: "M'月'd'日'",
-				Y: "yyyy'年'M'月'"
-			}
-		},
-		Japanese: {
-			name: "Japanese",
-			days: {
-				names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],
-				namesAbbr: ["日","月","火","水","木","金","土"],
-				namesShort: ["日","月","火","水","木","金","土"]
-			},
-			months: {
-				names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""],
-				namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""]
-			},
-			AM: ["午前","午前","午前"],
-			PM: ["午後","午後","午後"],
-			eras: [{"name":"平成","start":null,"offset":1867},{"name":"昭和","start":-1812153600000,"offset":1911},{"name":"大正","start":-1357603200000,"offset":1925},{"name":"明治","start":60022080000,"offset":1988}],
-			twoDigitYearMax: 99,
-			patterns: {
-				d: "gg y/M/d",
-				D: "gg y'年'M'月'd'日'",
-				t: "H:mm",
-				T: "H:mm:ss",
-				f: "gg y'年'M'月'd'日' H:mm",
-				F: "gg y'年'M'月'd'日' H:mm:ss",
-				M: "M'月'd'日'",
-				Y: "gg y'年'M'月'"
-			}
-		}
-	}
-});
-
-}( this ));
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.js
deleted file mode 100644
index ebaca174..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/globalize.js
+++ /dev/null
@@ -1,1573 +0,0 @@
-/*!
- * Globalize
- *
- * http://github.com/jquery/globalize
- *
- * Copyright Software Freedom Conservancy, Inc.
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- */
-
-(function( window, undefined ) {
-
-var Globalize,
-	// private variables
-	regexHex,
-	regexInfinity,
-	regexParseFloat,
-	regexTrim,
-	// private JavaScript utility functions
-	arrayIndexOf,
-	endsWith,
-	extend,
-	isArray,
-	isFunction,
-	isObject,
-	startsWith,
-	trim,
-	truncate,
-	zeroPad,
-	// private Globalization utility functions
-	appendPreOrPostMatch,
-	expandFormat,
-	formatDate,
-	formatNumber,
-	getTokenRegExp,
-	getEra,
-	getEraYear,
-	parseExact,
-	parseNegativePattern;
-
-// Global variable (Globalize) or CommonJS module (globalize)
-Globalize = function( cultureSelector ) {
-	return new Globalize.prototype.init( cultureSelector );
-};
-
-if ( typeof require !== "undefined"
-	&& typeof exports !== "undefined"
-	&& typeof module !== "undefined" ) {
-	// Assume CommonJS
-	module.exports = Globalize;
-} else {
-	// Export as global variable
-	window.Globalize = Globalize;
-}
-
-Globalize.cultures = {};
-
-Globalize.prototype = {
-	constructor: Globalize,
-	init: function( cultureSelector ) {
-		this.cultures = Globalize.cultures;
-		this.cultureSelector = cultureSelector;
-
-		return this;
-	}
-};
-Globalize.prototype.init.prototype = Globalize.prototype;
-
-// 1.	 When defining a culture, all fields are required except the ones stated as optional.
-// 2.	 Each culture should have a ".calendars" object with at least one calendar named "standard"
-//		 which serves as the default calendar in use by that culture.
-// 3.	 Each culture should have a ".calendar" object which is the current calendar being used,
-//		 it may be dynamically changed at any time to one of the calendars in ".calendars".
-Globalize.cultures[ "default" ] = {
-	// A unique name for the culture in the form <language code>-<country/region code>
-	name: "en",
-	// the name of the culture in the english language
-	englishName: "English",
-	// the name of the culture in its own language
-	nativeName: "English",
-	// whether the culture uses right-to-left text
-	isRTL: false,
-	// "language" is used for so-called "specific" cultures.
-	// For example, the culture "es-CL" means "Spanish, in Chili".
-	// It represents the Spanish-speaking culture as it is in Chili,
-	// which might have different formatting rules or even translations
-	// than Spanish in Spain. A "neutral" culture is one that is not
-	// specific to a region. For example, the culture "es" is the generic
-	// Spanish culture, which may be a more generalized version of the language
-	// that may or may not be what a specific culture expects.
-	// For a specific culture like "es-CL", the "language" field refers to the
-	// neutral, generic culture information for the language it is using.
-	// This is not always a simple matter of the string before the dash.
-	// For example, the "zh-Hans" culture is netural (Simplified Chinese).
-	// And the "zh-SG" culture is Simplified Chinese in Singapore, whose lanugage
-	// field is "zh-CHS", not "zh".
-	// This field should be used to navigate from a specific culture to it's
-	// more general, neutral culture. If a culture is already as general as it
-	// can get, the language may refer to itself.
-	language: "en",
-	// numberFormat defines general number formatting rules, like the digits in
-	// each grouping, the group separator, and how negative numbers are displayed.
-	numberFormat: {
-		// [negativePattern]
-		// Note, numberFormat.pattern has no "positivePattern" unlike percent and currency,
-		// but is still defined as an array for consistency with them.
-		//   negativePattern: one of "(n)|-n|- n|n-|n -"
-		pattern: [ "-n" ],
-		// number of decimal places normally shown
-		decimals: 2,
-		// string that separates number groups, as in 1,000,000
-		",": ",",
-		// string that separates a number from the fractional portion, as in 1.99
-		".": ".",
-		// array of numbers indicating the size of each number group.
-		// TODO: more detailed description and example
-		groupSizes: [ 3 ],
-		// symbol used for positive numbers
-		"+": "+",
-		// symbol used for negative numbers
-		"-": "-",
-		// symbol used for NaN (Not-A-Number)
-		NaN: "NaN",
-		// symbol used for Negative Infinity
-		negativeInfinity: "-Infinity",
-		// symbol used for Positive Infinity
-		positiveInfinity: "Infinity",
-		percent: {
-			// [negativePattern, positivePattern]
-			//   negativePattern: one of "-n %|-n%|-%n|%-n|%n-|n-%|n%-|-% n|n %-|% n-|% -n|n- %"
-			//   positivePattern: one of "n %|n%|%n|% n"
-			pattern: [ "-n %", "n %" ],
-			// number of decimal places normally shown
-			decimals: 2,
-			// array of numbers indicating the size of each number group.
-			// TODO: more detailed description and example
-			groupSizes: [ 3 ],
-			// string that separates number groups, as in 1,000,000
-			",": ",",
-			// string that separates a number from the fractional portion, as in 1.99
-			".": ".",
-			// symbol used to represent a percentage
-			symbol: "%"
-		},
-		currency: {
-			// [negativePattern, positivePattern]
-			//   negativePattern: one of "($n)|-$n|$-n|$n-|(n$)|-n$|n-$|n$-|-n $|-$ n|n $-|$ n-|$ -n|n- $|($ n)|(n $)"
-			//   positivePattern: one of "$n|n$|$ n|n $"
-			pattern: [ "($n)", "$n" ],
-			// number of decimal places normally shown
-			decimals: 2,
-			// array of numbers indicating the size of each number group.
-			// TODO: more detailed description and example
-			groupSizes: [ 3 ],
-			// string that separates number groups, as in 1,000,000
-			",": ",",
-			// string that separates a number from the fractional portion, as in 1.99
-			".": ".",
-			// symbol used to represent currency
-			symbol: "$"
-		}
-	},
-	// calendars defines all the possible calendars used by this culture.
-	// There should be at least one defined with name "standard", and is the default
-	// calendar used by the culture.
-	// A calendar contains information about how dates are formatted, information about
-	// the calendar's eras, a standard set of the date formats,
-	// translations for day and month names, and if the calendar is not based on the Gregorian
-	// calendar, conversion functions to and from the Gregorian calendar.
-	calendars: {
-		standard: {
-			// name that identifies the type of calendar this is
-			name: "Gregorian_USEnglish",
-			// separator of parts of a date (e.g. "/" in 11/05/1955)
-			"/": "/",
-			// separator of parts of a time (e.g. ":" in 05:44 PM)
-			":": ":",
-			// the first day of the week (0 = Sunday, 1 = Monday, etc)
-			firstDay: 0,
-			days: {
-				// full day names
-				names: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
-				// abbreviated day names
-				namesAbbr: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
-				// shortest day names
-				namesShort: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]
-			},
-			months: {
-				// full month names (13 months for lunar calendards -- 13th month should be "" if not lunar)
-				names: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" ],
-				// abbreviated month names
-				namesAbbr: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" ]
-			},
-			// AM and PM designators in one of these forms:
-			// The usual view, and the upper and lower case versions
-			//   [ standard, lowercase, uppercase ]
-			// The culture does not use AM or PM (likely all standard date formats use 24 hour time)
-			//   null
-			AM: [ "AM", "am", "AM" ],
-			PM: [ "PM", "pm", "PM" ],
-			eras: [
-				// eras in reverse chronological order.
-				// name: the name of the era in this culture (e.g. A.D., C.E.)
-				// start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era.
-				// offset: offset in years from gregorian calendar
-				{
-					"name": "A.D.",
-					"start": null,
-					"offset": 0
-				}
-			],
-			// when a two digit year is given, it will never be parsed as a four digit
-			// year greater than this year (in the appropriate era for the culture)
-			// Set it as a full year (e.g. 2029) or use an offset format starting from
-			// the current year: "+19" would correspond to 2029 if the current year 2010.
-			twoDigitYearMax: 2029,
-			// set of predefined date and time patterns used by the culture
-			// these represent the format someone in this culture would expect
-			// to see given the portions of the date that are shown.
-			patterns: {
-				// short date pattern
-				d: "M/d/yyyy",
-				// long date pattern
-				D: "dddd, MMMM dd, yyyy",
-				// short time pattern
-				t: "h:mm tt",
-				// long time pattern
-				T: "h:mm:ss tt",
-				// long date, short time pattern
-				f: "dddd, MMMM dd, yyyy h:mm tt",
-				// long date, long time pattern
-				F: "dddd, MMMM dd, yyyy h:mm:ss tt",
-				// month/day pattern
-				M: "MMMM dd",
-				// month/year pattern
-				Y: "yyyy MMMM",
-				// S is a sortable format that does not vary by culture
-				S: "yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss"
-			}
-			// optional fields for each calendar:
-			/*
-			monthsGenitive:
-				Same as months but used when the day preceeds the month.
-				Omit if the culture has no genitive distinction in month names.
-				For an explaination of genitive months, see http://blogs.msdn.com/michkap/archive/2004/12/25/332259.aspx
-			convert:
-				Allows for the support of non-gregorian based calendars. This convert object is used to
-				to convert a date to and from a gregorian calendar date to handle parsing and formatting.
-				The two functions:
-					fromGregorian( date )
-						Given the date as a parameter, return an array with parts [ year, month, day ]
-						corresponding to the non-gregorian based year, month, and day for the calendar.
-					toGregorian( year, month, day )
-						Given the non-gregorian year, month, and day, return a new Date() object
-						set to the corresponding date in the gregorian calendar.
-			*/
-		}
-	},
-	// For localized strings
-	messages: {}
-};
-
-Globalize.cultures[ "default" ].calendar = Globalize.cultures[ "default" ].calendars.standard;
-
-Globalize.cultures[ "en" ] = Globalize.cultures[ "default" ];
-
-Globalize.cultureSelector = "en";
-
-//
-// private variables
-//
-
-regexHex = /^0x[a-f0-9]+$/i;
-regexInfinity = /^[+-]?infinity$/i;
-regexParseFloat = /^[+-]?\d*\.?\d*(e[+-]?\d+)?$/;
-regexTrim = /^\s+|\s+$/g;
-
-//
-// private JavaScript utility functions
-//
-
-arrayIndexOf = function( array, item ) {
-	if ( array.indexOf ) {
-		return array.indexOf( item );
-	}
-	for ( var i = 0, length = array.length; i < length; i++ ) {
-		if ( array[i] === item ) {
-			return i;
-		}
-	}
-	return -1;
-};
-
-endsWith = function( value, pattern ) {
-	return value.substr( value.length - pattern.length ) === pattern;
-};
-
-extend = function( deep ) {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !isFunction(target) ) {
-		target = {};
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( isObject(copy) || (copyIsArray = isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && isArray(src) ? src : [];
-
-					} else {
-						clone = src && isObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-isArray = Array.isArray || function( obj ) {
-	return Object.prototype.toString.call( obj ) === "[object Array]";
-};
-
-isFunction = function( obj ) {
-	return Object.prototype.toString.call( obj ) === "[object Function]"
-}
-
-isObject = function( obj ) {
-	return Object.prototype.toString.call( obj ) === "[object Object]";
-};
-
-startsWith = function( value, pattern ) {
-	return value.indexOf( pattern ) === 0;
-};
-
-trim = function( value ) {
-	return ( value + "" ).replace( regexTrim, "" );
-};
-
-truncate = function( value ) {
-	return value | 0;
-};
-
-zeroPad = function( str, count, left ) {
-	var l;
-	for ( l = str.length; l < count; l += 1 ) {
-		str = ( left ? ("0" + str) : (str + "0") );
-	}
-	return str;
-};
-
-//
-// private Globalization utility functions
-//
-
-appendPreOrPostMatch = function( preMatch, strings ) {
-	// appends pre- and post- token match strings while removing escaped characters.
-	// Returns a single quote count which is used to determine if the token occurs
-	// in a string literal.
-	var quoteCount = 0,
-		escaped = false;
-	for ( var i = 0, il = preMatch.length; i < il; i++ ) {
-		var c = preMatch.charAt( i );
-		switch ( c ) {
-			case "\'":
-				if ( escaped ) {
-					strings.push( "\'" );
-				}
-				else {
-					quoteCount++;
-				}
-				escaped = false;
-				break;
-			case "\\":
-				if ( escaped ) {
-					strings.push( "\\" );
-				}
-				escaped = !escaped;
-				break;
-			default:
-				strings.push( c );
-				escaped = false;
-				break;
-		}
-	}
-	return quoteCount;
-};
-
-expandFormat = function( cal, format ) {
-	// expands unspecified or single character date formats into the full pattern.
-	format = format || "F";
-	var pattern,
-		patterns = cal.patterns,
-		len = format.length;
-	if ( len === 1 ) {
-		pattern = patterns[ format ];
-		if ( !pattern ) {
-			throw "Invalid date format string \'" + format + "\'.";
-		}
-		format = pattern;
-	}
-	else if ( len === 2 && format.charAt(0) === "%" ) {
-		// %X escape format -- intended as a custom format string that is only one character, not a built-in format.
-		format = format.charAt( 1 );
-	}
-	return format;
-};
-
-formatDate = function( value, format, culture ) {
-	var cal = culture.calendar,
-		convert = cal.convert;
-
-	if ( !format || !format.length || format === "i" ) {
-		var ret;
-		if ( culture && culture.name.length ) {
-			if ( convert ) {
-				// non-gregorian calendar, so we cannot use built-in toLocaleString()
-				ret = formatDate( value, cal.patterns.F, culture );
-			}
-			else {
-				var eraDate = new Date( value.getTime() ),
-					era = getEra( value, cal.eras );
-				eraDate.setFullYear( getEraYear(value, cal, era) );
-				ret = eraDate.toLocaleString();
-			}
-		}
-		else {
-			ret = value.toString();
-		}
-		return ret;
-	}
-
-	var eras = cal.eras,
-		sortable = format === "s";
-	format = expandFormat( cal, format );
-
-	// Start with an empty string
-	ret = [];
-	var hour,
-		zeros = [ "0", "00", "000" ],
-		foundDay,
-		checkedDay,
-		dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g,
-		quoteCount = 0,
-		tokenRegExp = getTokenRegExp(),
-		converted;
-
-	function padZeros( num, c ) {
-		var r, s = num + "";
-		if ( c > 1 && s.length < c ) {
-			r = ( zeros[c - 2] + s);
-			return r.substr( r.length - c, c );
-		}
-		else {
-			r = s;
-		}
-		return r;
-	}
-
-	function hasDay() {
-		if ( foundDay || checkedDay ) {
-			return foundDay;
-		}
-		foundDay = dayPartRegExp.test( format );
-		checkedDay = true;
-		return foundDay;
-	}
-
-	function getPart( date, part ) {
-		if ( converted ) {
-			return converted[ part ];
-		}
-		switch ( part ) {
-			case 0: return date.getFullYear();
-			case 1: return date.getMonth();
-			case 2: return date.getDate();
-		}
-	}
-
-	if ( !sortable && convert ) {
-		converted = convert.fromGregorian( value );
-	}
-
-	for ( ; ; ) {
-		// Save the current index
-		var index = tokenRegExp.lastIndex,
-			// Look for the next pattern
-			ar = tokenRegExp.exec( format );
-
-		// Append the text before the pattern (or the end of the string if not found)
-		var preMatch = format.slice( index, ar ? ar.index : format.length );
-		quoteCount += appendPreOrPostMatch( preMatch, ret );
-
-		if ( !ar ) {
-			break;
-		}
-
-		// do not replace any matches that occur inside a string literal.
-		if ( quoteCount % 2 ) {
-			ret.push( ar[0] );
-			continue;
-		}
-
-		var current = ar[ 0 ],
-			clength = current.length;
-
-		switch ( current ) {
-			case "ddd":
-				//Day of the week, as a three-letter abbreviation
-			case "dddd":
-				// Day of the week, using the full name
-				var names = ( clength === 3 ) ? cal.days.namesAbbr : cal.days.names;
-				ret.push( names[value.getDay()] );
-				break;
-			case "d":
-				// Day of month, without leading zero for single-digit days
-			case "dd":
-				// Day of month, with leading zero for single-digit days
-				foundDay = true;
-				ret.push(
-					padZeros( getPart(value, 2), clength )
-				);
-				break;
-			case "MMM":
-				// Month, as a three-letter abbreviation
-			case "MMMM":
-				// Month, using the full name
-				var part = getPart( value, 1 );
-				ret.push(
-					( cal.monthsGenitive && hasDay() )
-					?
-					cal.monthsGenitive[ clength === 3 ? "namesAbbr" : "names" ][ part ]
-					:
-					cal.months[ clength === 3 ? "namesAbbr" : "names" ][ part ]
-				);
-				break;
-			case "M":
-				// Month, as digits, with no leading zero for single-digit months
-			case "MM":
-				// Month, as digits, with leading zero for single-digit months
-				ret.push(
-					padZeros( getPart(value, 1) + 1, clength )
-				);
-				break;
-			case "y":
-				// Year, as two digits, but with no leading zero for years less than 10
-			case "yy":
-				// Year, as two digits, with leading zero for years less than 10
-			case "yyyy":
-				// Year represented by four full digits
-				part = converted ? converted[ 0 ] : getEraYear( value, cal, getEra(value, eras), sortable );
-				if ( clength < 4 ) {
-					part = part % 100;
-				}
-				ret.push(
-					padZeros( part, clength )
-				);
-				break;
-			case "h":
-				// Hours with no leading zero for single-digit hours, using 12-hour clock
-			case "hh":
-				// Hours with leading zero for single-digit hours, using 12-hour clock
-				hour = value.getHours() % 12;
-				if ( hour === 0 ) hour = 12;
-				ret.push(
-					padZeros( hour, clength )
-				);
-				break;
-			case "H":
-				// Hours with no leading zero for single-digit hours, using 24-hour clock
-			case "HH":
-				// Hours with leading zero for single-digit hours, using 24-hour clock
-				ret.push(
-					padZeros( value.getHours(), clength )
-				);
-				break;
-			case "m":
-				// Minutes with no leading zero for single-digit minutes
-			case "mm":
-				// Minutes with leading zero for single-digit minutes
-				ret.push(
-					padZeros( value.getMinutes(), clength )
-				);
-				break;
-			case "s":
-				// Seconds with no leading zero for single-digit seconds
-			case "ss":
-				// Seconds with leading zero for single-digit seconds
-				ret.push(
-					padZeros( value.getSeconds(), clength )
-				);
-				break;
-			case "t":
-				// One character am/pm indicator ("a" or "p")
-			case "tt":
-				// Multicharacter am/pm indicator
-				part = value.getHours() < 12 ? ( cal.AM ? cal.AM[0] : " " ) : ( cal.PM ? cal.PM[0] : " " );
-				ret.push( clength === 1 ? part.charAt(0) : part );
-				break;
-			case "f":
-				// Deciseconds
-			case "ff":
-				// Centiseconds
-			case "fff":
-				// Milliseconds
-				ret.push(
-					padZeros( value.getMilliseconds(), 3 ).substr( 0, clength )
-				);
-				break;
-			case "z":
-				// Time zone offset, no leading zero
-			case "zz":
-				// Time zone offset with leading zero
-				hour = value.getTimezoneOffset() / 60;
-				ret.push(
-					( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), clength )
-				);
-				break;
-			case "zzz":
-				// Time zone offset with leading zero
-				hour = value.getTimezoneOffset() / 60;
-				ret.push(
-					( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), 2 )
-					// Hard coded ":" separator, rather than using cal.TimeSeparator
-					// Repeated here for consistency, plus ":" was already assumed in date parsing.
-					+ ":" + padZeros( Math.abs(value.getTimezoneOffset() % 60), 2 )
-				);
-				break;
-			case "g":
-			case "gg":
-				if ( cal.eras ) {
-					ret.push(
-						cal.eras[ getEra(value, eras) ].name
-					);
-				}
-				break;
-		case "/":
-			ret.push( cal["/"] );
-			break;
-		default:
-			throw "Invalid date format pattern \'" + current + "\'.";
-			break;
-		}
-	}
-	return ret.join( "" );
-};
-
-// formatNumber
-(function() {
-	var expandNumber;
-
-	expandNumber = function( number, precision, formatInfo ) {
-		var groupSizes = formatInfo.groupSizes,
-			curSize = groupSizes[ 0 ],
-			curGroupIndex = 1,
-			factor = Math.pow( 10, precision ),
-			rounded = Math.round( number * factor ) / factor;
-
-		if ( !isFinite(rounded) ) {
-			rounded = number;
-		}
-		number = rounded;
-
-		var numberString = number+"",
-			right = "",
-			split = numberString.split( /e/i ),
-			exponent = split.length > 1 ? parseInt( split[1], 10 ) : 0;
-		numberString = split[ 0 ];
-		split = numberString.split( "." );
-		numberString = split[ 0 ];
-		right = split.length > 1 ? split[ 1 ] : "";
-
-		var l;
-		if ( exponent > 0 ) {
-			right = zeroPad( right, exponent, false );
-			numberString += right.slice( 0, exponent );
-			right = right.substr( exponent );
-		}
-		else if ( exponent < 0 ) {
-			exponent = -exponent;
-			numberString = zeroPad( numberString, exponent + 1 );
-			right = numberString.slice( -exponent, numberString.length ) + right;
-			numberString = numberString.slice( 0, -exponent );
-		}
-
-		if ( precision > 0 ) {
-			right = formatInfo[ "." ] +
-				( (right.length > precision) ? right.slice(0, precision) : zeroPad(right, precision) );
-		}
-		else {
-			right = "";
-		}
-
-		var stringIndex = numberString.length - 1,
-			sep = formatInfo[ "," ],
-			ret = "";
-
-		while ( stringIndex >= 0 ) {
-			if ( curSize === 0 || curSize > stringIndex ) {
-				return numberString.slice( 0, stringIndex + 1 ) + ( ret.length ? (sep + ret + right) : right );
-			}
-			ret = numberString.slice( stringIndex - curSize + 1, stringIndex + 1 ) + ( ret.length ? (sep + ret) : "" );
-
-			stringIndex -= curSize;
-
-			if ( curGroupIndex < groupSizes.length ) {
-				curSize = groupSizes[ curGroupIndex ];
-				curGroupIndex++;
-			}
-		}
-
-		return numberString.slice( 0, stringIndex + 1 ) + sep + ret + right;
-	};
-
-	formatNumber = function( value, format, culture ) {
-		if ( !isFinite(value) ) {
-			if ( value === Infinity ) {
-				return culture.numberFormat.positiveInfinity;
-			}
-			if ( value === -Infinity ) {
-				return culture.numberFormat.negativeInfinity;
-			}
-			return culture.numberFormat.NaN;
-		}
-		if ( !format || format === "i" ) {
-			return culture.name.length ? value.toLocaleString() : value.toString();
-		}
-		format = format || "D";
-
-		var nf = culture.numberFormat,
-			number = Math.abs( value ),
-			precision = -1,
-			pattern;
-		if ( format.length > 1 ) precision = parseInt( format.slice(1), 10 );
-
-		var current = format.charAt( 0 ).toUpperCase(),
-			formatInfo;
-
-		switch ( current ) {
-			case "D":
-				pattern = "n";
-				number = truncate( number );
-				if ( precision !== -1 ) {
-					number = zeroPad( "" + number, precision, true );
-				}
-				if ( value < 0 ) number = "-" + number;
-				break;
-			case "N":
-				formatInfo = nf;
-				// fall through
-			case "C":
-				formatInfo = formatInfo || nf.currency;
-				// fall through
-			case "P":
-				formatInfo = formatInfo || nf.percent;
-				pattern = value < 0 ? formatInfo.pattern[ 0 ] : ( formatInfo.pattern[1] || "n" );
-				if ( precision === -1 ) precision = formatInfo.decimals;
-				number = expandNumber( number * (current === "P" ? 100 : 1), precision, formatInfo );
-				break;
-			default:
-				throw "Bad number format specifier: " + current;
-		}
-
-		var patternParts = /n|\$|-|%/g,
-			ret = "";
-		for ( ; ; ) {
-			var index = patternParts.lastIndex,
-				ar = patternParts.exec( pattern );
-
-			ret += pattern.slice( index, ar ? ar.index : pattern.length );
-
-			if ( !ar ) {
-				break;
-			}
-
-			switch ( ar[0] ) {
-				case "n":
-					ret += number;
-					break;
-				case "$":
-					ret += nf.currency.symbol;
-					break;
-				case "-":
-					// don't make 0 negative
-					if ( /[1-9]/.test(number) ) {
-						ret += nf[ "-" ];
-					}
-					break;
-				case "%":
-					ret += nf.percent.symbol;
-					break;
-			}
-		}
-
-		return ret;
-	};
-
-}());
-
-getTokenRegExp = function() {
-	// regular expression for matching date and time tokens in format strings.
-	return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g;
-};
-
-getEra = function( date, eras ) {
-	if ( !eras ) return 0;
-	var start, ticks = date.getTime();
-	for ( var i = 0, l = eras.length; i < l; i++ ) {
-		start = eras[ i ].start;
-		if ( start === null || ticks >= start ) {
-			return i;
-		}
-	}
-	return 0;
-};
-
-getEraYear = function( date, cal, era, sortable ) {
-	var year = date.getFullYear();
-	if ( !sortable && cal.eras ) {
-		// convert normal gregorian year to era-shifted gregorian
-		// year by subtracting the era offset
-		year -= cal.eras[ era ].offset;
-	}
-	return year;
-};
-
-// parseExact
-(function() {
-	var expandYear,
-		getDayIndex,
-		getMonthIndex,
-		getParseRegExp,
-		outOfRange,
-		toUpper,
-		toUpperArray;
-
-	expandYear = function( cal, year ) {
-		// expands 2-digit year into 4 digits.
-		var now = new Date(),
-			era = getEra( now );
-		if ( year < 100 ) {
-			var twoDigitYearMax = cal.twoDigitYearMax;
-			twoDigitYearMax = typeof twoDigitYearMax === "string" ? new Date().getFullYear() % 100 + parseInt( twoDigitYearMax, 10 ) : twoDigitYearMax;
-			var curr = getEraYear( now, cal, era );
-			year += curr - ( curr % 100 );
-			if ( year > twoDigitYearMax ) {
-				year -= 100;
-			}
-		}
-		return year;
-	};
-
-	getDayIndex = function	( cal, value, abbr ) {
-		var ret,
-			days = cal.days,
-			upperDays = cal._upperDays;
-		if ( !upperDays ) {
-			cal._upperDays = upperDays = [
-				toUpperArray( days.names ),
-				toUpperArray( days.namesAbbr ),
-				toUpperArray( days.namesShort )
-			];
-		}
-		value = toUpper( value );
-		if ( abbr ) {
-			ret = arrayIndexOf( upperDays[1], value );
-			if ( ret === -1 ) {
-				ret = arrayIndexOf( upperDays[2], value );
-			}
-		}
-		else {
-			ret = arrayIndexOf( upperDays[0], value );
-		}
-		return ret;
-	};
-
-	getMonthIndex = function( cal, value, abbr ) {
-		var months = cal.months,
-			monthsGen = cal.monthsGenitive || cal.months,
-			upperMonths = cal._upperMonths,
-			upperMonthsGen = cal._upperMonthsGen;
-		if ( !upperMonths ) {
-			cal._upperMonths = upperMonths = [
-				toUpperArray( months.names ),
-				toUpperArray( months.namesAbbr )
-			];
-			cal._upperMonthsGen = upperMonthsGen = [
-				toUpperArray( monthsGen.names ),
-				toUpperArray( monthsGen.namesAbbr )
-			];
-		}
-		value = toUpper( value );
-		var i = arrayIndexOf( abbr ? upperMonths[1] : upperMonths[0], value );
-		if ( i < 0 ) {
-			i = arrayIndexOf( abbr ? upperMonthsGen[1] : upperMonthsGen[0], value );
-		}
-		return i;
-	};
-
-	getParseRegExp = function( cal, format ) {
-		// converts a format string into a regular expression with groups that
-		// can be used to extract date fields from a date string.
-		// check for a cached parse regex.
-		var re = cal._parseRegExp;
-		if ( !re ) {
-			cal._parseRegExp = re = {};
-		}
-		else {
-			var reFormat = re[ format ];
-			if ( reFormat ) {
-				return reFormat;
-			}
-		}
-
-		// expand single digit formats, then escape regular expression characters.
-		var expFormat = expandFormat( cal, format ).replace( /([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1" ),
-			regexp = [ "^" ],
-			groups = [],
-			index = 0,
-			quoteCount = 0,
-			tokenRegExp = getTokenRegExp(),
-			match;
-
-		// iterate through each date token found.
-		while ( (match = tokenRegExp.exec(expFormat)) !== null ) {
-			var preMatch = expFormat.slice( index, match.index );
-			index = tokenRegExp.lastIndex;
-
-			// don't replace any matches that occur inside a string literal.
-			quoteCount += appendPreOrPostMatch( preMatch, regexp );
-			if ( quoteCount % 2 ) {
-				regexp.push( match[0] );
-				continue;
-			}
-
-			// add a regex group for the token.
-			var m = match[ 0 ],
-				len = m.length,
-				add;
-			switch ( m ) {
-				case "dddd": case "ddd":
-				case "MMMM": case "MMM":
-				case "gg": case "g":
-					add = "(\\D+)";
-					break;
-				case "tt": case "t":
-					add = "(\\D*)";
-					break;
-				case "yyyy":
-				case "fff":
-				case "ff":
-				case "f":
-					add = "(\\d{" + len + "})";
-					break;
-				case "dd": case "d":
-				case "MM": case "M":
-				case "yy": case "y":
-				case "HH": case "H":
-				case "hh": case "h":
-				case "mm": case "m":
-				case "ss": case "s":
-					add = "(\\d\\d?)";
-					break;
-				case "zzz":
-					add = "([+-]?\\d\\d?:\\d{2})";
-					break;
-				case "zz": case "z":
-					add = "([+-]?\\d\\d?)";
-					break;
-				case "/":
-					add = "(\\" + cal[ "/" ] + ")";
-					break;
-				default:
-					throw "Invalid date format pattern \'" + m + "\'.";
-					break;
-			}
-			if ( add ) {
-				regexp.push( add );
-			}
-			groups.push( match[0] );
-		}
-		appendPreOrPostMatch( expFormat.slice(index), regexp );
-		regexp.push( "$" );
-
-		// allow whitespace to differ when matching formats.
-		var regexpStr = regexp.join( "" ).replace( /\s+/g, "\\s+" ),
-			parseRegExp = { "regExp": regexpStr, "groups": groups };
-
-		// cache the regex for this format.
-		return re[ format ] = parseRegExp;
-	};
-
-	outOfRange = function( value, low, high ) {
-		return value < low || value > high;
-	};
-
-	toUpper = function( value ) {
-		// "he-IL" has non-breaking space in weekday names.
-		return value.split( "\u00A0" ).join( " " ).toUpperCase();
-	};
-
-	toUpperArray = function( arr ) {
-		var results = [];
-		for ( var i = 0, l = arr.length; i < l; i++ ) {
-			results[ i ] = toUpper( arr[i] );
-		}
-		return results;
-	};
-
-	parseExact = function( value, format, culture ) {
-		// try to parse the date string by matching against the format string
-		// while using the specified culture for date field names.
-		value = trim( value );
-		var cal = culture.calendar,
-			// convert date formats into regular expressions with groupings.
-			// use the regexp to determine the input format and extract the date fields.
-			parseInfo = getParseRegExp( cal, format ),
-			match = new RegExp( parseInfo.regExp ).exec( value );
-		if ( match === null ) {
-			return null;
-		}
-		// found a date format that matches the input.
-		var groups = parseInfo.groups,
-			era = null, year = null, month = null, date = null, weekDay = null,
-			hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null,
-			pmHour = false;
-		// iterate the format groups to extract and set the date fields.
-		for ( var j = 0, jl = groups.length; j < jl; j++ ) {
-			var matchGroup = match[ j + 1 ];
-			if ( matchGroup ) {
-				var current = groups[ j ],
-					clength = current.length,
-					matchInt = parseInt( matchGroup, 10 );
-				switch ( current ) {
-					case "dd": case "d":
-						// Day of month.
-						date = matchInt;
-						// check that date is generally in valid range, also checking overflow below.
-						if ( outOfRange(date, 1, 31) ) return null;
-						break;
-					case "MMM": case "MMMM":
-						month = getMonthIndex( cal, matchGroup, clength === 3 );
-						if ( outOfRange(month, 0, 11) ) return null;
-						break;
-					case "M": case "MM":
-						// Month.
-						month = matchInt - 1;
-						if ( outOfRange(month, 0, 11) ) return null;
-						break;
-					case "y": case "yy":
-					case "yyyy":
-						year = clength < 4 ? expandYear( cal, matchInt ) : matchInt;
-						if ( outOfRange(year, 0, 9999) ) return null;
-						break;
-					case "h": case "hh":
-						// Hours (12-hour clock).
-						hour = matchInt;
-						if ( hour === 12 ) hour = 0;
-						if ( outOfRange(hour, 0, 11) ) return null;
-						break;
-					case "H": case "HH":
-						// Hours (24-hour clock).
-						hour = matchInt;
-						if ( outOfRange(hour, 0, 23) ) return null;
-						break;
-					case "m": case "mm":
-						// Minutes.
-						min = matchInt;
-						if ( outOfRange(min, 0, 59) ) return null;
-						break;
-					case "s": case "ss":
-						// Seconds.
-						sec = matchInt;
-						if ( outOfRange(sec, 0, 59) ) return null;
-						break;
-					case "tt": case "t":
-						// AM/PM designator.
-						// see if it is standard, upper, or lower case PM. If not, ensure it is at least one of
-						// the AM tokens. If not, fail the parse for this format.
-						pmHour = cal.PM && ( matchGroup === cal.PM[0] || matchGroup === cal.PM[1] || matchGroup === cal.PM[2] );
-						if (
-							!pmHour && (
-								!cal.AM || ( matchGroup !== cal.AM[0] && matchGroup !== cal.AM[1] && matchGroup !== cal.AM[2] )
-							)
-						) return null;
-						break;
-					case "f":
-						// Deciseconds.
-					case "ff":
-						// Centiseconds.
-					case "fff":
-						// Milliseconds.
-						msec = matchInt * Math.pow( 10, 3 - clength );
-						if ( outOfRange(msec, 0, 999) ) return null;
-						break;
-					case "ddd":
-						// Day of week.
-					case "dddd":
-						// Day of week.
-						weekDay = getDayIndex( cal, matchGroup, clength === 3 );
-						if ( outOfRange(weekDay, 0, 6) ) return null;
-						break;
-					case "zzz":
-						// Time zone offset in +/- hours:min.
-						var offsets = matchGroup.split( /:/ );
-						if ( offsets.length !== 2 ) return null;
-						hourOffset = parseInt( offsets[0], 10 );
-						if ( outOfRange(hourOffset, -12, 13) ) return null;
-						var minOffset = parseInt( offsets[1], 10 );
-						if ( outOfRange(minOffset, 0, 59) ) return null;
-						tzMinOffset = ( hourOffset * 60 ) + ( startsWith(matchGroup, "-") ? -minOffset : minOffset );
-						break;
-					case "z": case "zz":
-						// Time zone offset in +/- hours.
-						hourOffset = matchInt;
-						if ( outOfRange(hourOffset, -12, 13) ) return null;
-						tzMinOffset = hourOffset * 60;
-						break;
-					case "g": case "gg":
-						var eraName = matchGroup;
-						if ( !eraName || !cal.eras ) return null;
-						eraName = trim( eraName.toLowerCase() );
-						for ( var i = 0, l = cal.eras.length; i < l; i++ ) {
-							if ( eraName === cal.eras[i].name.toLowerCase() ) {
-								era = i;
-								break;
-							}
-						}
-						// could not find an era with that name
-						if ( era === null ) return null;
-						break;
-				}
-			}
-		}
-		var result = new Date(), defaultYear, convert = cal.convert;
-		defaultYear = convert ? convert.fromGregorian( result )[ 0 ] : result.getFullYear();
-		if ( year === null ) {
-			year = defaultYear;
-		}
-		else if ( cal.eras ) {
-			// year must be shifted to normal gregorian year
-			// but not if year was not specified, its already normal gregorian
-			// per the main if clause above.
-			year += cal.eras[( era || 0 )].offset;
-		}
-		// set default day and month to 1 and January, so if unspecified, these are the defaults
-		// instead of the current day/month.
-		if ( month === null ) {
-			month = 0;
-		}
-		if ( date === null ) {
-			date = 1;
-		}
-		// now have year, month, and date, but in the culture's calendar.
-		// convert to gregorian if necessary
-		if ( convert ) {
-			result = convert.toGregorian( year, month, date );
-			// conversion failed, must be an invalid match
-			if ( result === null ) return null;
-		}
-		else {
-			// have to set year, month and date together to avoid overflow based on current date.
-			result.setFullYear( year, month, date );
-			// check to see if date overflowed for specified month (only checked 1-31 above).
-			if ( result.getDate() !== date ) return null;
-			// invalid day of week.
-			if ( weekDay !== null && result.getDay() !== weekDay ) {
-				return null;
-			}
-		}
-		// if pm designator token was found make sure the hours fit the 24-hour clock.
-		if ( pmHour && hour < 12 ) {
-			hour += 12;
-		}
-		result.setHours( hour, min, sec, msec );
-		if ( tzMinOffset !== null ) {
-			// adjust timezone to utc before applying local offset.
-			var adjustedMin = result.getMinutes() - ( tzMinOffset + result.getTimezoneOffset() );
-			// Safari limits hours and minutes to the range of -127 to 127.	 We need to use setHours
-			// to ensure both these fields will not exceed this range.	adjustedMin will range
-			// somewhere between -1440 and 1500, so we only need to split this into hours.
-			result.setHours( result.getHours() + parseInt(adjustedMin / 60, 10), adjustedMin % 60 );
-		}
-		return result;
-	};
-}());
-
-parseNegativePattern = function( value, nf, negativePattern ) {
-	var neg = nf[ "-" ],
-		pos = nf[ "+" ],
-		ret;
-	switch ( negativePattern ) {
-		case "n -":
-			neg = " " + neg;
-			pos = " " + pos;
-			// fall through
-		case "n-":
-			if ( endsWith(value, neg) ) {
-				ret = [ "-", value.substr(0, value.length - neg.length) ];
-			}
-			else if ( endsWith(value, pos) ) {
-				ret = [ "+", value.substr(0, value.length - pos.length) ];
-			}
-			break;
-		case "- n":
-			neg += " ";
-			pos += " ";
-			// fall through
-		case "-n":
-			if ( startsWith(value, neg) ) {
-				ret = [ "-", value.substr(neg.length) ];
-			}
-			else if ( startsWith(value, pos) ) {
-				ret = [ "+", value.substr(pos.length) ];
-			}
-			break;
-		case "(n)":
-			if ( startsWith(value, "(") && endsWith(value, ")") ) {
-				ret = [ "-", value.substr(1, value.length - 2) ];
-			}
-			break;
-	}
-	return ret || [ "", value ];
-};
-
-//
-// public instance functions
-//
-
-Globalize.prototype.findClosestCulture = function( cultureSelector ) {
-	return Globalize.findClosestCulture.call( this, cultureSelector );
-};
-
-Globalize.prototype.format = function( value, format, cultureSelector ) {
-	return Globalize.format.call( this, value, format, cultureSelector );
-};
-
-Globalize.prototype.localize = function( key, cultureSelector ) {
-	return Globalize.localize.call( this, key, cultureSelector );
-};
-
-Globalize.prototype.parseInt = function( value, radix, cultureSelector ) {
-	return Globalize.parseInt.call( this, value, radix, cultureSelector );
-};
-
-Globalize.prototype.parseFloat = function( value, radix, cultureSelector ) {
-	return Globalize.parseFloat.call( this, value, radix, cultureSelector );
-};
-
-Globalize.prototype.culture = function( cultureSelector ) {
-	return Globalize.culture.call( this, cultureSelector );
-};
-
-//
-// public singleton functions
-//
-
-Globalize.addCultureInfo = function( cultureName, baseCultureName, info ) {
-
-	var base = {},
-		isNew = false;
-
-	if ( typeof cultureName !== "string" ) {
-		// cultureName argument is optional string. If not specified, assume info is first
-		// and only argument. Specified info deep-extends current culture.
-		info = cultureName;
-		cultureName = this.culture().name;
-		base = this.cultures[ cultureName ];
-	} else if ( typeof baseCultureName !== "string" ) {
-		// baseCultureName argument is optional string. If not specified, assume info is second
-		// argument. Specified info deep-extends specified culture.
-		// If specified culture does not exist, create by deep-extending default
-		info = baseCultureName;
-		isNew = ( this.cultures[ cultureName ] == null );
-		base = this.cultures[ cultureName ] || this.cultures[ "default" ];
-	} else {
-		// cultureName and baseCultureName specified. Assume a new culture is being created
-		// by deep-extending an specified base culture
-		isNew = true;
-		base = this.cultures[ baseCultureName ];
-	}
-
-	this.cultures[ cultureName ] = extend(true, {},
-		base,
-		info
-	);
-	// Make the standard calendar the current culture if it's a new culture
-	if ( isNew ) {
-		this.cultures[ cultureName ].calendar = this.cultures[ cultureName ].calendars.standard;
-	}
-};
-
-Globalize.findClosestCulture = function( name ) {
-	var match;
-	if ( !name ) {
-		return this.cultures[ this.cultureSelector ] || this.cultures[ "default" ];
-	}
-	if ( typeof name === "string" ) {
-		name = name.split( "," );
-	}
-	if ( isArray(name) ) {
-		var lang,
-			cultures = this.cultures,
-			list = name,
-			i, l = list.length,
-			prioritized = [];
-		for ( i = 0; i < l; i++ ) {
-			name = trim( list[i] );
-			var pri, parts = name.split( ";" );
-			lang = trim( parts[0] );
-			if ( parts.length === 1 ) {
-				pri = 1;
-			}
-			else {
-				name = trim( parts[1] );
-				if ( name.indexOf("q=") === 0 ) {
-					name = name.substr( 2 );
-					pri = parseFloat( name );
-					pri = isNaN( pri ) ? 0 : pri;
-				}
-				else {
-					pri = 1;
-				}
-			}
-			prioritized.push({ lang: lang, pri: pri });
-		}
-		prioritized.sort(function( a, b ) {
-			return a.pri < b.pri ? 1 : -1;
-		});
-
-		// exact match
-		for ( i = 0; i < l; i++ ) {
-			lang = prioritized[ i ].lang;
-			match = cultures[ lang ];
-			if ( match ) {
-				return match;
-			}
-		}
-
-		// neutral language match
-		for ( i = 0; i < l; i++ ) {
-			lang = prioritized[ i ].lang;
-			do {
-				var index = lang.lastIndexOf( "-" );
-				if ( index === -1 ) {
-					break;
-				}
-				// strip off the last part. e.g. en-US => en
-				lang = lang.substr( 0, index );
-				match = cultures[ lang ];
-				if ( match ) {
-					return match;
-				}
-			}
-			while ( 1 );
-		}
-
-		// last resort: match first culture using that language
-		for ( i = 0; i < l; i++ ) {
-			lang = prioritized[ i ].lang;
-			for ( var cultureKey in cultures ) {
-				var culture = cultures[ cultureKey ];
-				if ( culture.language == lang ) {
-					return culture;
-				}
-			}
-		}
-	}
-	else if ( typeof name === "object" ) {
-		return name;
-	}
-	return match || null;
-};
-
-Globalize.format = function( value, format, cultureSelector ) {
-	culture = this.findClosestCulture( cultureSelector );
-	if ( value instanceof Date ) {
-		value = formatDate( value, format, culture );
-	}
-	else if ( typeof value === "number" ) {
-		value = formatNumber( value, format, culture );
-	}
-	return value;
-};
-
-Globalize.localize = function( key, cultureSelector ) {
-	return this.findClosestCulture( cultureSelector ).messages[ key ] ||
-		this.cultures[ "default" ].messages[ key ];
-};
-
-Globalize.parseDate = function( value, formats, culture ) {
-	culture = this.findClosestCulture( culture );
-
-	var date, prop, patterns;
-	if ( formats ) {
-		if ( typeof formats === "string" ) {
-			formats = [ formats ];
-		}
-		if ( formats.length ) {
-			for ( var i = 0, l = formats.length; i < l; i++ ) {
-				var format = formats[ i ];
-				if ( format ) {
-					date = parseExact( value, format, culture );
-					if ( date ) {
-						break;
-					}
-				}
-			}
-		}
-	} else {
-		patterns = culture.calendar.patterns;
-		for ( prop in patterns ) {
-			date = parseExact( value, patterns[prop], culture );
-			if ( date ) {
-				break;
-			}
-		}
-	}
-
-	return date || null;
-};
-
-Globalize.parseInt = function( value, radix, cultureSelector ) {
-	return truncate( Globalize.parseFloat(value, radix, cultureSelector) );
-};
-
-Globalize.parseFloat = function( value, radix, cultureSelector ) {
-	// radix argument is optional
-	if ( typeof radix !== "number" ) {
-		cultureSelector = radix;
-		radix = 10;
-	}
-
-	var culture = this.findClosestCulture( cultureSelector );
-	var ret = NaN,
-		nf = culture.numberFormat;
-
-	if ( value.indexOf(culture.numberFormat.currency.symbol) > -1 ) {
-		// remove currency symbol
-		value = value.replace( culture.numberFormat.currency.symbol, "" );
-		// replace decimal seperator
-		value = value.replace( culture.numberFormat.currency["."], culture.numberFormat["."] );
-	}
-
-	// trim leading and trailing whitespace
-	value = trim( value );
-
-	// allow infinity or hexidecimal
-	if ( regexInfinity.test(value) ) {
-		ret = parseFloat( value );
-	}
-	else if ( !radix && regexHex.test(value) ) {
-		ret = parseInt( value, 16 );
-	}
-	else {
-
-		// determine sign and number
-		var signInfo = parseNegativePattern( value, nf, nf.pattern[0] ),
-			sign = signInfo[ 0 ],
-			num = signInfo[ 1 ];
-
-		// #44 - try parsing as "(n)"
-		if ( sign === "" && nf.pattern[0] !== "(n)" ) {
-			signInfo = parseNegativePattern( value, nf, "(n)" );
-			sign = signInfo[ 0 ];
-			num = signInfo[ 1 ];
-		}
-
-		// try parsing as "-n"
-		if ( sign === "" && nf.pattern[0] !== "-n" ) {
-			signInfo = parseNegativePattern( value, nf, "-n" );
-			sign = signInfo[ 0 ];
-			num = signInfo[ 1 ];
-		}
-
-		sign = sign || "+";
-
-		// determine exponent and number
-		var exponent,
-			intAndFraction,
-			exponentPos = num.indexOf( "e" );
-		if ( exponentPos < 0 ) exponentPos = num.indexOf( "E" );
-		if ( exponentPos < 0 ) {
-			intAndFraction = num;
-			exponent = null;
-		}
-		else {
-			intAndFraction = num.substr( 0, exponentPos );
-			exponent = num.substr( exponentPos + 1 );
-		}
-		// determine decimal position
-		var integer,
-			fraction,
-			decSep = nf[ "." ],
-			decimalPos = intAndFraction.indexOf( decSep );
-		if ( decimalPos < 0 ) {
-			integer = intAndFraction;
-			fraction = null;
-		}
-		else {
-			integer = intAndFraction.substr( 0, decimalPos );
-			fraction = intAndFraction.substr( decimalPos + decSep.length );
-		}
-		// handle groups (e.g. 1,000,000)
-		var groupSep = nf[ "," ];
-		integer = integer.split( groupSep ).join( "" );
-		var altGroupSep = groupSep.replace( /\u00A0/g, " " );
-		if ( groupSep !== altGroupSep ) {
-			integer = integer.split( altGroupSep ).join( "" );
-		}
-		// build a natively parsable number string
-		var p = sign + integer;
-		if ( fraction !== null ) {
-			p += "." + fraction;
-		}
-		if ( exponent !== null ) {
-			// exponent itself may have a number patternd
-			var expSignInfo = parseNegativePattern( exponent, nf, "-n" );
-			p += "e" + ( expSignInfo[0] || "+" ) + expSignInfo[ 1 ];
-		}
-		if ( regexParseFloat.test(p) ) {
-			ret = parseFloat( p );
-		}
-	}
-	return ret;
-};
-
-Globalize.culture = function( cultureSelector ) {
-	// setter
-	if ( typeof cultureSelector !== "undefined" ) {
-		this.cultureSelector = cultureSelector;
-	}
-	// getter
-	return this.findClosestCulture( cultureSelector ) || this.culture[ "default" ];
-};
-
-}( this ));
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js
deleted file mode 100644
index 5cd38bb1..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.bgiframe-2.1.2.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
- * Licensed under the MIT License (LICENSE.txt).
- *
- * Version 2.1.2
- */
-
-(function($){
-
-$.fn.bgiframe = ($.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(s) {
-    s = $.extend({
-        top     : 'auto', // auto == .currentStyle.borderTopWidth
-        left    : 'auto', // auto == .currentStyle.borderLeftWidth
-        width   : 'auto', // auto == offsetWidth
-        height  : 'auto', // auto == offsetHeight
-        opacity : true,
-        src     : 'javascript:false;'
-    }, s);
-    var html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
-                   'style="display:block;position:absolute;z-index:-1;'+
-                       (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
-                       'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
-                       'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
-                       'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
-                       'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
-                '"/>';
-    return this.each(function() {
-        if ( $(this).children('iframe.bgiframe').length === 0 )
-            this.insertBefore( document.createElement(html), this.firstChild );
-    });
-} : function() { return this; });
-
-// old alias
-$.fn.bgIframe = $.fn.bgiframe;
-
-function prop(n) {
-    return n && n.constructor === Number ? n + 'px' : n;
-}
-
-})(jQuery);
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.metadata.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.metadata.js
deleted file mode 100644
index ad8bfba4..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.metadata.js
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Metadata - jQuery plugin for parsing metadata from elements
- *
- * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan
- *
- * Dual licensed under the MIT and GPL licenses:
- *   http://www.opensource.org/licenses/mit-license.php
- *   http://www.gnu.org/licenses/gpl.html
- *
- * Revision: $Id: jquery.metadata.js 4187 2007-12-16 17:15:27Z joern.zaefferer $
- *
- */
-
-/**
- * Sets the type of metadata to use. Metadata is encoded in JSON, and each property
- * in the JSON will become a property of the element itself.
- *
- * There are three supported types of metadata storage:
- *
- *   attr:  Inside an attribute. The name parameter indicates *which* attribute.
- *          
- *   class: Inside the class attribute, wrapped in curly braces: { }
- *   
- *   elem:  Inside a child element (e.g. a script tag). The
- *          name parameter indicates *which* element.
- *          
- * The metadata for an element is loaded the first time the element is accessed via jQuery.
- *
- * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements
- * matched by expr, then redefine the metadata type and run another $(expr) for other elements.
- * 
- * @name $.metadata.setType
- *
- * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p>
- * @before $.metadata.setType("class")
- * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
- * @desc Reads metadata from the class attribute
- * 
- * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p>
- * @before $.metadata.setType("attr", "data")
- * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
- * @desc Reads metadata from a "data" attribute
- * 
- * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p>
- * @before $.metadata.setType("elem", "script")
- * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
- * @desc Reads metadata from a nested script element
- * 
- * @param String type The encoding type
- * @param String name The name of the attribute to be used to get metadata (optional)
- * @cat Plugins/Metadata
- * @descr Sets the type of encoding to be used when loading metadata for the first time
- * @type undefined
- * @see metadata()
- */
-
-(function($) {
-
-$.extend({
-	metadata : {
-		defaults : {
-			type: 'class',
-			name: 'metadata',
-			cre: /({.*})/,
-			single: 'metadata'
-		},
-		setType: function( type, name ){
-			this.defaults.type = type;
-			this.defaults.name = name;
-		},
-		get: function( elem, opts ){
-			var settings = $.extend({},this.defaults,opts);
-			// check for empty string in single property
-			if ( !settings.single.length ) settings.single = 'metadata';
-			
-			var data = $.data(elem, settings.single);
-			// returned cached data if it already exists
-			if ( data ) return data;
-			
-			data = "{}";
-			
-			if ( settings.type == "class" ) {
-				var m = settings.cre.exec( elem.className );
-				if ( m )
-					data = m[1];
-			} else if ( settings.type == "elem" ) {
-				if( !elem.getElementsByTagName )
-					return undefined;
-				var e = elem.getElementsByTagName(settings.name);
-				if ( e.length )
-					data = $.trim(e[0].innerHTML);
-			} else if ( elem.getAttribute != undefined ) {
-				var attr = elem.getAttribute( settings.name );
-				if ( attr )
-					data = attr;
-			}
-			
-			if ( data.indexOf( '{' ) <0 )
-			data = "{" + data + "}";
-			
-			data = eval("(" + data + ")");
-			
-			$.data( elem, settings.single, data );
-			return data;
-		}
-	}
-});
-
-/**
- * Returns the metadata object for the first member of the jQuery object.
- *
- * @name metadata
- * @descr Returns element's metadata object
- * @param Object opts An object contianing settings to override the defaults
- * @type jQuery
- * @cat Plugins/Metadata
- */
-$.fn.metadata = function( opts ){
-	return $.metadata.get( this[0], opts );
-};
-
-})(jQuery);
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.mousewheel.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.mousewheel.js
deleted file mode 100644
index 8c603041..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jquery.mousewheel.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
- * Licensed under the MIT License (LICENSE.txt).
- *
- * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
- * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
- * Thanks to: Seamus Leahy for adding deltaX and deltaY
- *
- * Version: 3.1.0
- *
- * Requires: 1.2.2+
- */
-
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
-        define(['jquery'], factory);
-    } else {
-        // Browser globals
-        factory(jQuery);
-    }
-}(function ($) {
-
-    var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll'];
-    var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
-    var lowestDelta, lowestDeltaXY;
-
-    if ($.event.fixHooks) {
-        for ( var i=toFix.length; i; ) {
-            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
-        }
-    }
-
-    $.event.special.mousewheel = {
-        setup: function() {
-            if ( this.addEventListener ) {
-                for ( var i=toBind.length; i; ) {
-                    this.addEventListener( toBind[--i], handler, false );
-                }
-            } else {
-                this.onmousewheel = handler;
-            }
-        },
-
-        teardown: function() {
-            if ( this.removeEventListener ) {
-                for ( var i=toBind.length; i; ) {
-                    this.removeEventListener( toBind[--i], handler, false );
-                }
-            } else {
-                this.onmousewheel = null;
-            }
-        }
-    };
-
-    $.fn.extend({
-        mousewheel: function(fn) {
-            return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
-        },
-
-        unmousewheel: function(fn) {
-            return this.unbind("mousewheel", fn);
-        }
-    });
-
-
-    function handler(event) {
-        var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0;
-        event = $.event.fix(orgEvent);
-        event.type = "mousewheel";
-
-        // Old school scrollwheel delta
-        if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta;  }
-        if ( orgEvent.detail     ) { delta = orgEvent.detail * -1; }
-
-        // New school wheel delta (wheel event)
-        if ( orgEvent.deltaY ) {
-            deltaY = orgEvent.deltaY * -1;
-            delta  = deltaY;
-        }
-        if ( orgEvent.deltaX ) {
-            deltaX = orgEvent.deltaX;
-            delta  = deltaX * -1;
-        }
-
-        // Webkit
-        if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY;      }
-        if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
-
-        absDelta = Math.abs(delta);
-        if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
-
-        absDeltaXY = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
-        if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
-
-        // Add event and delta to the front of the arguments
-        args.unshift(event, Math.floor(delta/lowestDelta), Math.floor(deltaX/lowestDeltaXY), Math.floor(deltaY/lowestDeltaXY));
-
-        return ($.event.dispatch || $.event.handle).apply(this, args);
-    }
-
-}));
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jshint.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jshint.js
deleted file mode 100644
index 8f06d9be..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/jshint.js
+++ /dev/null
@@ -1,4835 +0,0 @@
-/*!
- * JSHint, by JSHint Community.
- *
- * This file (and this file only) is licensed under the same slightly modified
- * MIT license that JSLint is. It stops evil-doers everywhere.
- *
- * JSHint is a derivative work of JSLint:
- *
- *   Copyright (c) 2002 Douglas Crockford  (www.JSLint.com)
- *
- *   Permission is hereby granted, free of charge, to any person obtaining
- *   a copy of this software and associated documentation files (the "Software"),
- *   to deal in the Software without restriction, including without limitation
- *   the rights to use, copy, modify, merge, publish, distribute, sublicense,
- *   and/or sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following conditions:
- *
- *   The above copyright notice and this permission notice shall be included
- *   in all copies or substantial portions of the Software.
- *
- *   The Software shall be used for Good, not Evil.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- *   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- *   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- *   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- *   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- *   DEALINGS IN THE SOFTWARE.
- *
- */
-
-/*
- JSHINT is a global function. It takes two parameters.
-
-     var myResult = JSHINT(source, option);
-
- The first parameter is either a string or an array of strings. If it is a
- string, it will be split on '\n' or '\r'. If it is an array of strings, it
- is assumed that each string represents one line. The source can be a
- JavaScript text or a JSON text.
-
- The second parameter is an optional object of options which control the
- operation of JSHINT. Most of the options are booleans: They are all
- optional and have a default value of false. One of the options, predef,
- can be an array of names, which will be used to declare global variables,
- or an object whose keys are used as global names, with a boolean value
- that determines if they are assignable.
-
- If it checks out, JSHINT returns true. Otherwise, it returns false.
-
- If false, you can inspect JSHINT.errors to find out the problems.
- JSHINT.errors is an array of objects containing these members:
-
- {
-     line      : The line (relative to 1) at which the lint was found
-     character : The character (relative to 1) at which the lint was found
-     reason    : The problem
-     evidence  : The text line in which the problem occurred
-     raw       : The raw message before the details were inserted
-     a         : The first detail
-     b         : The second detail
-     c         : The third detail
-     d         : The fourth detail
- }
-
- If a fatal error was found, a null will be the last element of the
- JSHINT.errors array.
-
- You can request a data structure which contains JSHint's results.
-
-     var myData = JSHINT.data();
-
- It returns a structure with this form:
-
- {
-     errors: [
-         {
-             line: NUMBER,
-             character: NUMBER,
-             reason: STRING,
-             evidence: STRING
-         }
-     ],
-     functions: [
-         name: STRING,
-         line: NUMBER,
-         character: NUMBER,
-         last: NUMBER,
-         lastcharacter: NUMBER,
-         param: [
-             STRING
-         ],
-         closure: [
-             STRING
-         ],
-         var: [
-             STRING
-         ],
-         exception: [
-             STRING
-         ],
-         outer: [
-             STRING
-         ],
-         unused: [
-             STRING
-         ],
-         global: [
-             STRING
-         ],
-         label: [
-             STRING
-         ]
-     ],
-     globals: [
-         STRING
-     ],
-     member: {
-         STRING: NUMBER
-     },
-     unused: [
-         {
-             name: STRING,
-             line: NUMBER
-         }
-     ],
-     implieds: [
-         {
-             name: STRING,
-             line: NUMBER
-         }
-     ],
-     urls: [
-         STRING
-     ],
-     json: BOOLEAN
- }
-
- Empty arrays will not be included.
-
-*/
-
-/*jshint
- evil: true, nomen: false, onevar: false, regexp: false, strict: true, boss: true,
- undef: true, maxlen: 100, indent: 4, quotmark: double, unused: true
-*/
-
-/*members "\b", "\t", "\n", "\f", "\r", "!=", "!==", "\"", "%", "(begin)",
- "(breakage)", "(character)", "(context)", "(error)", "(explicitNewcap)", "(global)",
- "(identifier)", "(last)", "(lastcharacter)", "(line)", "(loopage)", "(metrics)",
- "(name)", "(onevar)", "(params)", "(scope)", "(statement)", "(verb)", "(tokens)", "(catch)",
- "*", "+", "++", "-", "--", "\/", "<", "<=", "==",
- "===", ">", ">=", $, $$, $A, $F, $H, $R, $break, $continue, $w, Abstract, Ajax,
- __filename, __dirname, ActiveXObject, Array, ArrayBuffer, ArrayBufferView, Audio,
- Autocompleter, Asset, Boolean, Builder, Buffer, Browser, Blob, COM, CScript, Canvas,
- CustomAnimation, Class, Control, ComplexityCount, Chain, Color, Cookie, Core, DataView, Date,
- Debug, Draggable, Draggables, Droppables, Document, DomReady, DOMEvent, DOMReady, DOMParser,
- Drag, E, Enumerator, Enumerable, Element, Elements, Error, Effect, EvalError, Event,
- Events, FadeAnimation, Field, Flash, Float32Array, Float64Array, Form,
- FormField, Frame, FormData, Function, Fx, GetObject, Group, Hash, HotKey,
- HTMLElement, HTMLAnchorElement, HTMLBaseElement, HTMLBlockquoteElement,
- HTMLBodyElement, HTMLBRElement, HTMLButtonElement, HTMLCanvasElement, HTMLDirectoryElement,
- HTMLDivElement, HTMLDListElement, HTMLFieldSetElement,
- HTMLFontElement, HTMLFormElement, HTMLFrameElement, HTMLFrameSetElement,
- HTMLHeadElement, HTMLHeadingElement, HTMLHRElement, HTMLHtmlElement,
- HTMLIFrameElement, HTMLImageElement, HTMLInputElement, HTMLIsIndexElement,
- HTMLLabelElement, HTMLLayerElement, HTMLLegendElement, HTMLLIElement,
- HTMLLinkElement, HTMLMapElement, HTMLMenuElement, HTMLMetaElement,
- HTMLModElement, HTMLObjectElement, HTMLOListElement, HTMLOptGroupElement,
- HTMLOptionElement, HTMLParagraphElement, HTMLParamElement, HTMLPreElement,
- HTMLQuoteElement, HTMLScriptElement, HTMLSelectElement, HTMLStyleElement,
- HtmlTable, HTMLTableCaptionElement, HTMLTableCellElement, HTMLTableColElement,
- HTMLTableElement, HTMLTableRowElement, HTMLTableSectionElement,
- HTMLTextAreaElement, HTMLTitleElement, HTMLUListElement, HTMLVideoElement,
- Iframe, IframeShim, Image, importScripts, Int16Array, Int32Array, Int8Array,
- Insertion, InputValidator, JSON, Keyboard, Locale, LN10, LN2, LOG10E, LOG2E,
- MAX_VALUE, MIN_VALUE, Map, Mask, Math, MenuItem, MessageChannel, MessageEvent, MessagePort,
- MoveAnimation, MooTools, MutationObserver, NaN, Native, NEGATIVE_INFINITY, Node, NodeFilter,
- Number, Object, ObjectRange,
- Option, Options, OverText, PI, POSITIVE_INFINITY, PeriodicalExecuter, Point, Position, Prototype,
- RangeError, Rectangle, ReferenceError, RegExp, ResizeAnimation, Request, RotateAnimation, Set,
- SQRT1_2, SQRT2, ScrollBar, ScriptEngine, ScriptEngineBuildVersion,
- ScriptEngineMajorVersion, ScriptEngineMinorVersion, Scriptaculous, Scroller,
- Slick, Slider, Selector, SharedWorker, String, Style, SyntaxError, Sortable, Sortables,
- SortableObserver, Sound, Spinner, System, Swiff, Text, TextArea, Template,
- Timer, Tips, Type, TypeError, Toggle, Try, "use strict", unescape, URI, URIError, URL,
- VBArray, WeakMap, WSH, WScript, XDomainRequest, Web, Window, XMLDOM, XMLHttpRequest, XMLSerializer,
- XPathEvaluator, XPathException, XPathExpression, XPathNamespace, XPathNSResolver, XPathResult,
- "\\", a, abs, addEventListener, address, alert, apply, applicationCache, arguments, arity,
- asi, atob, b, basic, basicToken, bitwise, blacklist, block, blur, boolOptions, boss,
- browser, btoa, c, call, callee, caller, camelcase, cases, charAt, charCodeAt, character,
- clearInterval, clearTimeout, close, closed, closure, comment, complexityCount, condition,
- confirm, console, constructor, content, couch, create, css, curly, d, data, datalist, dd, debug,
- decodeURI, decodeURIComponent, defaultStatus, defineClass, deserialize, devel, document,
- dojo, dijit, dojox, define, else, emit, encodeURI, encodeURIComponent, elem,
- eqeq, eqeqeq, eqnull, errors, es5, escape, esnext, eval, event, evidence, evil,
- ex, exception, exec, exps, expr, exports, FileReader, first, floor, focus, forEach,
- forin, fragment, frames, from, fromCharCode, fud, funcscope, funct, function, functions,
- g, gc, getComputedStyle, getRow, getter, getterToken, GLOBAL, global, globals, globalstrict,
- hasOwnProperty, help, history, i, id, identifier, immed, implieds, importPackage, include,
- indent, indexOf, init, ins, internals, instanceOf, isAlpha, isApplicationRunning, isArray,
- isDigit, isFinite, isNaN, iterator, java, join, jshint,
- JSHINT, json, jquery, jQuery, keys, label, labelled, last, lastcharacter, lastsemic, laxbreak,
- laxcomma, latedef, lbp, led, left, length, line, load, loadClass, localStorage, location,
- log, loopfunc, m, match, max, maxcomplexity, maxdepth, maxerr, maxlen, maxstatements, maxparams,
- member, message, meta, module, moveBy, moveTo, mootools, multistr, name, navigator, new, newcap,
- nestedBlockDepth, noarg, node, noempty, nomen, nonew, nonstandard, nud, onbeforeunload, onblur,
- onerror, onevar, onecase, onfocus, onload, onresize, onunload, open, openDatabase, openURL,
- opener, opera, options, outer, param, parent, parseFloat, parseInt, passfail, plusplus,
- postMessage, pop, predef, print, process, prompt, proto, prototype, prototypejs, provides, push,
- quit, quotmark, range, raw, reach, reason, regexp, readFile, readUrl, regexdash,
- removeEventListener, replace, report, require, reserved, resizeBy, resizeTo, resolvePath,
- resumeUpdates, respond, rhino, right, runCommand, scroll, scope, screen, scripturl, scrollBy,
- scrollTo, scrollbar, search, seal, self, send, serialize, sessionStorage, setInterval, setTimeout,
- setter, setterToken, shift, slice, smarttabs, sort, spawn, split, statement, statementCount, stack,
- status, start, strict, sub, substr, supernew, shadow, supplant, sum, sync, test, toLowerCase,
- toString, toUpperCase, toint32, token, tokens, top, trailing, type, typeOf, Uint16Array,
- Uint32Array, Uint8Array, undef, undefs, unused, urls, validthis, value, valueOf, var, vars,
- version, verifyMaxParametersPerFunction, verifyMaxStatementsPerFunction,
- verifyMaxComplexityPerFunction, verifyMaxNestedBlockDepthPerFunction, WebSocket, withstmt, white,
- window, windows, Worker, worker, wsh, yui, YUI, Y, YUI_config*/
-
-/*global exports: false */
-
-// We build the application inside a function so that we produce only a single
-// global variable. That function will be invoked immediately, and its return
-// value is the JSHINT function itself.
-
-var JSHINT = (function () {
-    "use strict";
-
-    var anonname,       // The guessed name for anonymous functions.
-
-// These are operators that should not be used with the ! operator.
-
-        bang = {
-            "<"  : true,
-            "<=" : true,
-            "==" : true,
-            "===": true,
-            "!==": true,
-            "!=" : true,
-            ">"  : true,
-            ">=" : true,
-            "+"  : true,
-            "-"  : true,
-            "*"  : true,
-            "/"  : true,
-            "%"  : true
-        },
-
-        // These are the JSHint boolean options.
-        boolOptions = {
-            asi         : true, // if automatic semicolon insertion should be tolerated
-            bitwise     : true, // if bitwise operators should not be allowed
-            boss        : true, // if advanced usage of assignments should be allowed
-            browser     : true, // if the standard browser globals should be predefined
-            camelcase   : true, // if identifiers should be required in camel case
-            couch       : true, // if CouchDB globals should be predefined
-            curly       : true, // if curly braces around all blocks should be required
-            debug       : true, // if debugger statements should be allowed
-            devel       : true, // if logging globals should be predefined (console,
-                                // alert, etc.)
-            dojo        : true, // if Dojo Toolkit globals should be predefined
-            eqeqeq      : true, // if === should be required
-            eqnull      : true, // if == null comparisons should be tolerated
-            es5         : true, // if ES5 syntax should be allowed
-            esnext      : true, // if es.next specific syntax should be allowed
-            evil        : true, // if eval should be allowed
-            expr        : true, // if ExpressionStatement should be allowed as Programs
-            forin       : true, // if for in statements must filter
-            funcscope   : true, // if only function scope should be used for scope tests
-            globalstrict: true, // if global "use strict"; should be allowed (also
-                                // enables 'strict')
-            immed       : true, // if immediate invocations must be wrapped in parens
-            iterator    : true, // if the `__iterator__` property should be allowed
-            jquery      : true, // if jQuery globals should be predefined
-            lastsemic   : true, // if semicolons may be ommitted for the trailing
-                                // statements inside of a one-line blocks.
-            latedef     : true, // if the use before definition should not be tolerated
-            laxbreak    : true, // if line breaks should not be checked
-            laxcomma    : true, // if line breaks should not be checked around commas
-            loopfunc    : true, // if functions should be allowed to be defined within
-                                // loops
-            mootools    : true, // if MooTools globals should be predefined
-            multistr    : true, // allow multiline strings
-            newcap      : true, // if constructor names must be capitalized
-            noarg       : true, // if arguments.caller and arguments.callee should be
-                                // disallowed
-            node        : true, // if the Node.js environment globals should be
-                                // predefined
-            noempty     : true, // if empty blocks should be disallowed
-            nonew       : true, // if using `new` for side-effects should be disallowed
-            nonstandard : true, // if non-standard (but widely adopted) globals should
-                                // be predefined
-            nomen       : true, // if names should be checked
-            onevar      : true, // if only one var statement per function should be
-                                // allowed
-            onecase     : true, // if one case switch statements should be allowed
-            passfail    : true, // if the scan should stop on first error
-            plusplus    : true, // if increment/decrement should not be allowed
-            proto       : true, // if the `__proto__` property should be allowed
-            prototypejs : true, // if Prototype and Scriptaculous globals should be
-                                // predefined
-            regexdash   : true, // if unescaped first/last dash (-) inside brackets
-                                // should be tolerated
-            regexp      : true, // if the . should not be allowed in regexp literals
-            rhino       : true, // if the Rhino environment globals should be predefined
-            undef       : true, // if variables should be declared before used
-            unused      : true, // if variables should be always used
-            scripturl   : true, // if script-targeted URLs should be tolerated
-            shadow      : true, // if variable shadowing should be tolerated
-            smarttabs   : true, // if smarttabs should be tolerated
-                                // (http://www.emacswiki.org/emacs/SmartTabs)
-            strict      : true, // require the "use strict"; pragma
-            sub         : true, // if all forms of subscript notation are tolerated
-            supernew    : true, // if `new function () { ... };` and `new Object;`
-                                // should be tolerated
-            trailing    : true, // if trailing whitespace rules apply
-            validthis   : true, // if 'this' inside a non-constructor function is valid.
-                                // This is a function scoped option only.
-            withstmt    : true, // if with statements should be allowed
-            white       : true, // if strict whitespace rules apply
-            worker      : true, // if Web Worker script symbols should be allowed
-            wsh         : true, // if the Windows Scripting Host environment globals
-                                // should be predefined
-            yui         : true  // YUI variables should be predefined
-        },
-
-        // These are the JSHint options that can take any value
-        // (we use this object to detect invalid options)
-        valOptions = {
-            maxlen       : false,
-            indent       : false,
-            maxerr       : false,
-            predef       : false,
-            quotmark     : false, //'single'|'double'|true
-            scope        : false,
-            maxstatements: false, // {int} max statements per function
-            maxdepth     : false, // {int} max nested block depth per function
-            maxparams    : false, // {int} max params per function
-            maxcomplexity: false  // {int} max cyclomatic complexity per function
-        },
-
-        // These are JSHint boolean options which are shared with JSLint
-        // where the definition in JSHint is opposite JSLint
-        invertedOptions = {
-            bitwise     : true,
-            forin       : true,
-            newcap      : true,
-            nomen       : true,
-            plusplus    : true,
-            regexp      : true,
-            undef       : true,
-            white       : true,
-
-            // Inverted and renamed, use JSHint name here
-            eqeqeq      : true,
-            onevar      : true
-        },
-
-        // These are JSHint boolean options which are shared with JSLint
-        // where the name has been changed but the effect is unchanged
-        renamedOptions = {
-            eqeq        : "eqeqeq",
-            vars        : "onevar",
-            windows     : "wsh"
-        },
-
-
-        // browser contains a set of global names which are commonly provided by a
-        // web browser environment.
-        browser = {
-            ArrayBuffer              :  false,
-            ArrayBufferView          :  false,
-            Audio                    :  false,
-            Blob                     :  false,
-            addEventListener         :  false,
-            applicationCache         :  false,
-            atob                     :  false,
-            blur                     :  false,
-            btoa                     :  false,
-            clearInterval            :  false,
-            clearTimeout             :  false,
-            close                    :  false,
-            closed                   :  false,
-            DataView                 :  false,
-            DOMParser                :  false,
-            defaultStatus            :  false,
-            document                 :  false,
-            event                    :  false,
-            FileReader               :  false,
-            Float32Array             :  false,
-            Float64Array             :  false,
-            FormData                 :  false,
-            focus                    :  false,
-            frames                   :  false,
-            getComputedStyle         :  false,
-            HTMLElement              :  false,
-            HTMLAnchorElement        :  false,
-            HTMLBaseElement          :  false,
-            HTMLBlockquoteElement    :  false,
-            HTMLBodyElement          :  false,
-            HTMLBRElement            :  false,
-            HTMLButtonElement        :  false,
-            HTMLCanvasElement        :  false,
-            HTMLDirectoryElement     :  false,
-            HTMLDivElement           :  false,
-            HTMLDListElement         :  false,
-            HTMLFieldSetElement      :  false,
-            HTMLFontElement          :  false,
-            HTMLFormElement          :  false,
-            HTMLFrameElement         :  false,
-            HTMLFrameSetElement      :  false,
-            HTMLHeadElement          :  false,
-            HTMLHeadingElement       :  false,
-            HTMLHRElement            :  false,
-            HTMLHtmlElement          :  false,
-            HTMLIFrameElement        :  false,
-            HTMLImageElement         :  false,
-            HTMLInputElement         :  false,
-            HTMLIsIndexElement       :  false,
-            HTMLLabelElement         :  false,
-            HTMLLayerElement         :  false,
-            HTMLLegendElement        :  false,
-            HTMLLIElement            :  false,
-            HTMLLinkElement          :  false,
-            HTMLMapElement           :  false,
-            HTMLMenuElement          :  false,
-            HTMLMetaElement          :  false,
-            HTMLModElement           :  false,
-            HTMLObjectElement        :  false,
-            HTMLOListElement         :  false,
-            HTMLOptGroupElement      :  false,
-            HTMLOptionElement        :  false,
-            HTMLParagraphElement     :  false,
-            HTMLParamElement         :  false,
-            HTMLPreElement           :  false,
-            HTMLQuoteElement         :  false,
-            HTMLScriptElement        :  false,
-            HTMLSelectElement        :  false,
-            HTMLStyleElement         :  false,
-            HTMLTableCaptionElement  :  false,
-            HTMLTableCellElement     :  false,
-            HTMLTableColElement      :  false,
-            HTMLTableElement         :  false,
-            HTMLTableRowElement      :  false,
-            HTMLTableSectionElement  :  false,
-            HTMLTextAreaElement      :  false,
-            HTMLTitleElement         :  false,
-            HTMLUListElement         :  false,
-            HTMLVideoElement         :  false,
-            history                  :  false,
-            Int16Array               :  false,
-            Int32Array               :  false,
-            Int8Array                :  false,
-            Image                    :  false,
-            length                   :  false,
-            localStorage             :  false,
-            location                 :  false,
-            MessageChannel           :  false,
-            MessageEvent             :  false,
-            MessagePort              :  false,
-            moveBy                   :  false,
-            moveTo                   :  false,
-            MutationObserver         :  false,
-            name                     :  false,
-            Node                     :  false,
-            NodeFilter               :  false,
-            navigator                :  false,
-            onbeforeunload           :  true,
-            onblur                   :  true,
-            onerror                  :  true,
-            onfocus                  :  true,
-            onload                   :  true,
-            onresize                 :  true,
-            onunload                 :  true,
-            open                     :  false,
-            openDatabase             :  false,
-            opener                   :  false,
-            Option                   :  false,
-            parent                   :  false,
-            print                    :  false,
-            removeEventListener      :  false,
-            resizeBy                 :  false,
-            resizeTo                 :  false,
-            screen                   :  false,
-            scroll                   :  false,
-            scrollBy                 :  false,
-            scrollTo                 :  false,
-            sessionStorage           :  false,
-            setInterval              :  false,
-            setTimeout               :  false,
-            SharedWorker             :  false,
-            status                   :  false,
-            top                      :  false,
-            Uint16Array              :  false,
-            Uint32Array              :  false,
-            Uint8Array               :  false,
-            WebSocket                :  false,
-            window                   :  false,
-            Worker                   :  false,
-            XMLHttpRequest           :  false,
-            XMLSerializer            :  false,
-            XPathEvaluator           :  false,
-            XPathException           :  false,
-            XPathExpression          :  false,
-            XPathNamespace           :  false,
-            XPathNSResolver          :  false,
-            XPathResult              :  false
-        },
-
-        couch = {
-            "require" : false,
-            respond   : false,
-            getRow    : false,
-            emit      : false,
-            send      : false,
-            start     : false,
-            sum       : false,
-            log       : false,
-            exports   : false,
-            module    : false,
-            provides  : false
-        },
-
-        declared, // Globals that were declared using /*global ... */ syntax.
-
-        devel = {
-            alert   : false,
-            confirm : false,
-            console : false,
-            Debug   : false,
-            opera   : false,
-            prompt  : false
-        },
-
-        dojo = {
-            dojo      : false,
-            dijit     : false,
-            dojox     : false,
-            define    : false,
-            "require" : false
-        },
-
-        funct,          // The current function
-
-        functionicity = [
-            "closure", "exception", "global", "label",
-            "outer", "unused", "var"
-        ],
-
-        functions,      // All of the functions
-
-        global,         // The global scope
-        implied,        // Implied globals
-        inblock,
-        indent,
-        jsonmode,
-
-        jquery = {
-            "$"    : false,
-            jQuery : false
-        },
-
-        lines,
-        lookahead,
-        member,
-        membersOnly,
-
-        mootools = {
-            "$"             : false,
-            "$$"            : false,
-            Asset           : false,
-            Browser         : false,
-            Chain           : false,
-            Class           : false,
-            Color           : false,
-            Cookie          : false,
-            Core            : false,
-            Document        : false,
-            DomReady        : false,
-            DOMEvent        : false,
-            DOMReady        : false,
-            Drag            : false,
-            Element         : false,
-            Elements        : false,
-            Event           : false,
-            Events          : false,
-            Fx              : false,
-            Group           : false,
-            Hash            : false,
-            HtmlTable       : false,
-            Iframe          : false,
-            IframeShim      : false,
-            InputValidator  : false,
-            instanceOf      : false,
-            Keyboard        : false,
-            Locale          : false,
-            Mask            : false,
-            MooTools        : false,
-            Native          : false,
-            Options         : false,
-            OverText        : false,
-            Request         : false,
-            Scroller        : false,
-            Slick           : false,
-            Slider          : false,
-            Sortables       : false,
-            Spinner         : false,
-            Swiff           : false,
-            Tips            : false,
-            Type            : false,
-            typeOf          : false,
-            URI             : false,
-            Window          : false
-        },
-
-        nexttoken,
-
-        node = {
-            __filename    : false,
-            __dirname     : false,
-            Buffer        : false,
-            console       : false,
-            exports       : true,  // In Node it is ok to exports = module.exports = foo();
-            GLOBAL        : false,
-            global        : false,
-            module        : false,
-            process       : false,
-            require       : false,
-            setTimeout    : false,
-            clearTimeout  : false,
-            setInterval   : false,
-            clearInterval : false
-        },
-
-        noreach,
-        option,
-        predefined,     // Global variables defined by option
-        prereg,
-        prevtoken,
-
-        prototypejs = {
-            "$"               : false,
-            "$$"              : false,
-            "$A"              : false,
-            "$F"              : false,
-            "$H"              : false,
-            "$R"              : false,
-            "$break"          : false,
-            "$continue"       : false,
-            "$w"              : false,
-            Abstract          : false,
-            Ajax              : false,
-            Class             : false,
-            Enumerable        : false,
-            Element           : false,
-            Event             : false,
-            Field             : false,
-            Form              : false,
-            Hash              : false,
-            Insertion         : false,
-            ObjectRange       : false,
-            PeriodicalExecuter: false,
-            Position          : false,
-            Prototype         : false,
-            Selector          : false,
-            Template          : false,
-            Toggle            : false,
-            Try               : false,
-            Autocompleter     : false,
-            Builder           : false,
-            Control           : false,
-            Draggable         : false,
-            Draggables        : false,
-            Droppables        : false,
-            Effect            : false,
-            Sortable          : false,
-            SortableObserver  : false,
-            Sound             : false,
-            Scriptaculous     : false
-        },
-
-        quotmark,
-
-        rhino = {
-            defineClass  : false,
-            deserialize  : false,
-            gc           : false,
-            help         : false,
-            importPackage: false,
-            "java"       : false,
-            load         : false,
-            loadClass    : false,
-            print        : false,
-            quit         : false,
-            readFile     : false,
-            readUrl      : false,
-            runCommand   : false,
-            seal         : false,
-            serialize    : false,
-            spawn        : false,
-            sync         : false,
-            toint32      : false,
-            version      : false
-        },
-
-        scope,      // The current scope
-        stack,
-
-        // standard contains the global names that are provided by the
-        // ECMAScript standard.
-        standard = {
-            Array               : false,
-            Boolean             : false,
-            Date                : false,
-            decodeURI           : false,
-            decodeURIComponent  : false,
-            encodeURI           : false,
-            encodeURIComponent  : false,
-            Error               : false,
-            "eval"              : false,
-            EvalError           : false,
-            Function            : false,
-            hasOwnProperty      : false,
-            isFinite            : false,
-            isNaN               : false,
-            JSON                : false,
-            Map                 : false,
-            Math                : false,
-            NaN                 : false,
-            Number              : false,
-            Object              : false,
-            parseInt            : false,
-            parseFloat          : false,
-            RangeError          : false,
-            ReferenceError      : false,
-            RegExp              : false,
-            Set                 : false,
-            String              : false,
-            SyntaxError         : false,
-            TypeError           : false,
-            URIError            : false,
-            WeakMap             : false
-        },
-
-        // widely adopted global names that are not part of ECMAScript standard
-        nonstandard = {
-            escape              : false,
-            unescape            : false
-        },
-
-        directive,
-        syntax = {},
-        tab,
-        token,
-        unuseds,
-        urls,
-        useESNextSyntax,
-        warnings,
-
-        worker = {
-            importScripts       : true,
-            postMessage         : true,
-            self                : true
-        },
-
-        wsh = {
-            ActiveXObject             : true,
-            Enumerator                : true,
-            GetObject                 : true,
-            ScriptEngine              : true,
-            ScriptEngineBuildVersion  : true,
-            ScriptEngineMajorVersion  : true,
-            ScriptEngineMinorVersion  : true,
-            VBArray                   : true,
-            WSH                       : true,
-            WScript                   : true,
-            XDomainRequest            : true
-        },
-
-        yui = {
-            YUI             : false,
-            Y               : false,
-            YUI_config      : false
-        };
-    // Regular expressions. Some of these are stupidly long.
-    var ax, cx, tx, nx, nxg, lx, ix, jx, ft;
-    (function () {
-        /*jshint maxlen:300 */
-
-        // unsafe comment or string
-        ax = /@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i;
-
-        // unsafe characters that are silently deleted by one or more browsers
-        cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
-
-        // token
-        tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/=(?!(\S*\/[gim]?))|\/(\*(jshint|jslint|members?|global)?|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/;
-
-        // characters in strings that need escapement
-        nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/;
-        nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
-
-        // star slash
-        lx = /\*\//;
-
-        // identifier
-        ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/;
-
-        // javascript url
-        jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i;
-
-        // catches /* falls through */ comments
-        ft = /^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/;
-    }());
-
-    function F() {}     // Used by Object.create
-
-    function is_own(object, name) {
-        // The object.hasOwnProperty method fails when the property under consideration
-        // is named 'hasOwnProperty'. So we have to use this more convoluted form.
-        return Object.prototype.hasOwnProperty.call(object, name);
-    }
-
-    function checkOption(name, t) {
-        if (valOptions[name] === undefined && boolOptions[name] === undefined) {
-            warning("Bad option: '" + name + "'.", t);
-        }
-    }
-
-    function isString(obj) {
-        return Object.prototype.toString.call(obj) === "[object String]";
-    }
-
-    // Provide critical ES5 functions to ES3.
-
-    if (typeof Array.isArray !== "function") {
-        Array.isArray = function (o) {
-            return Object.prototype.toString.apply(o) === "[object Array]";
-        };
-    }
-
-    if (!Array.prototype.forEach) {
-        Array.prototype.forEach = function (fn, scope) {
-            var len = this.length;
-
-            for (var i = 0; i < len; i++) {
-                fn.call(scope || this, this[i], i, this);
-            }
-        };
-    }
-
-    if (!Array.prototype.indexOf) {
-        Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
-            if (this === null || this === undefined) {
-                throw new TypeError();
-            }
-
-            var t = new Object(this);
-            var len = t.length >>> 0;
-
-            if (len === 0) {
-                return -1;
-            }
-
-            var n = 0;
-            if (arguments.length > 0) {
-                n = Number(arguments[1]);
-                if (n != n) { // shortcut for verifying if it's NaN
-                    n = 0;
-                } else if (n !== 0 && n != Infinity && n != -Infinity) {
-                    n = (n > 0 || -1) * Math.floor(Math.abs(n));
-                }
-            }
-
-            if (n >= len) {
-                return -1;
-            }
-
-            var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
-            for (; k < len; k++) {
-                if (k in t && t[k] === searchElement) {
-                    return k;
-                }
-            }
-
-            return -1;
-        };
-    }
-
-    if (typeof Object.create !== "function") {
-        Object.create = function (o) {
-            F.prototype = o;
-            return new F();
-        };
-    }
-
-    if (typeof Object.keys !== "function") {
-        Object.keys = function (o) {
-            var a = [], k;
-            for (k in o) {
-                if (is_own(o, k)) {
-                    a.push(k);
-                }
-            }
-            return a;
-        };
-    }
-
-    // Non standard methods
-
-    function isAlpha(str) {
-        return (str >= "a" && str <= "z\uffff") ||
-            (str >= "A" && str <= "Z\uffff");
-    }
-
-    function isDigit(str) {
-        return (str >= "0" && str <= "9");
-    }
-
-    function isIdentifier(token, value) {
-        if (!token)
-            return false;
-
-        if (!token.identifier || token.value !== value)
-            return false;
-
-        return true;
-    }
-
-    function supplant(str, data) {
-        return str.replace(/\{([^{}]*)\}/g, function (a, b) {
-            var r = data[b];
-            return typeof r === "string" || typeof r === "number" ? r : a;
-        });
-    }
-
-    function combine(t, o) {
-        var n;
-        for (n in o) {
-            if (is_own(o, n) && !is_own(JSHINT.blacklist, n)) {
-                t[n] = o[n];
-            }
-        }
-    }
-
-    function updatePredefined() {
-        Object.keys(JSHINT.blacklist).forEach(function (key) {
-            delete predefined[key];
-        });
-    }
-
-    function assume() {
-        if (option.couch) {
-            combine(predefined, couch);
-        }
-
-        if (option.rhino) {
-            combine(predefined, rhino);
-        }
-
-        if (option.prototypejs) {
-            combine(predefined, prototypejs);
-        }
-
-        if (option.node) {
-            combine(predefined, node);
-            option.globalstrict = true;
-        }
-
-        if (option.devel) {
-            combine(predefined, devel);
-        }
-
-        if (option.dojo) {
-            combine(predefined, dojo);
-        }
-
-        if (option.browser) {
-            combine(predefined, browser);
-        }
-
-        if (option.nonstandard) {
-            combine(predefined, nonstandard);
-        }
-
-        if (option.jquery) {
-            combine(predefined, jquery);
-        }
-
-        if (option.mootools) {
-            combine(predefined, mootools);
-        }
-
-        if (option.worker) {
-            combine(predefined, worker);
-        }
-
-        if (option.wsh) {
-            combine(predefined, wsh);
-        }
-
-        if (option.esnext) {
-            useESNextSyntax();
-        }
-
-        if (option.globalstrict && option.strict !== false) {
-            option.strict = true;
-        }
-
-        if (option.yui) {
-            combine(predefined, yui);
-        }
-    }
-
-
-    // Produce an error warning.
-    function quit(message, line, chr) {
-        var percentage = Math.floor((line / lines.length) * 100);
-
-        throw {
-            name: "JSHintError",
-            line: line,
-            character: chr,
-            message: message + " (" + percentage + "% scanned).",
-            raw: message
-        };
-    }
-
-    function isundef(scope, m, t, a) {
-        return JSHINT.undefs.push([scope, m, t, a]);
-    }
-
-    function warning(m, t, a, b, c, d) {
-        var ch, l, w;
-        t = t || nexttoken;
-        if (t.id === "(end)") {  // `~
-            t = token;
-        }
-        l = t.line || 0;
-        ch = t.from || 0;
-        w = {
-            id: "(error)",
-            raw: m,
-            evidence: lines[l - 1] || "",
-            line: l,
-            character: ch,
-            scope: JSHINT.scope,
-            a: a,
-            b: b,
-            c: c,
-            d: d
-        };
-        w.reason = supplant(m, w);
-        JSHINT.errors.push(w);
-        if (option.passfail) {
-            quit("Stopping. ", l, ch);
-        }
-        warnings += 1;
-        if (warnings >= option.maxerr) {
-            quit("Too many errors.", l, ch);
-        }
-        return w;
-    }
-
-    function warningAt(m, l, ch, a, b, c, d) {
-        return warning(m, {
-            line: l,
-            from: ch
-        }, a, b, c, d);
-    }
-
-    function error(m, t, a, b, c, d) {
-        warning(m, t, a, b, c, d);
-    }
-
-    function errorAt(m, l, ch, a, b, c, d) {
-        return error(m, {
-            line: l,
-            from: ch
-        }, a, b, c, d);
-    }
-
-    // Tracking of "internal" scripts, like eval containing a static string
-    function addInternalSrc(elem, src) {
-        var i;
-        i = {
-            id: "(internal)",
-            elem: elem,
-            value: src
-        };
-        JSHINT.internals.push(i);
-        return i;
-    }
-
-
-// lexical analysis and token construction
-
-    var lex = (function lex() {
-        var character, from, line, s;
-
-// Private lex methods
-
-        function nextLine() {
-            var at,
-                match,
-                tw; // trailing whitespace check
-
-            if (line >= lines.length)
-                return false;
-
-            character = 1;
-            s = lines[line];
-            line += 1;
-
-            // If smarttabs option is used check for spaces followed by tabs only.
-            // Otherwise check for any occurence of mixed tabs and spaces.
-            // Tabs and one space followed by block comment is allowed.
-            if (option.smarttabs) {
-                // negative look-behind for "//"
-                match = s.match(/(\/\/)? \t/);
-                at = match && !match[1] ? 0 : -1;
-            } else {
-                at = s.search(/ \t|\t [^\*]/);
-            }
-
-            if (at >= 0)
-                warningAt("Mixed spaces and tabs.", line, at + 1);
-
-            s = s.replace(/\t/g, tab);
-            at = s.search(cx);
-
-            if (at >= 0)
-                warningAt("Unsafe character.", line, at);
-
-            if (option.maxlen && option.maxlen < s.length)
-                warningAt("Line too long.", line, s.length);
-
-            // Check for trailing whitespaces
-            tw = option.trailing && s.match(/^(.*?)\s+$/);
-            if (tw && !/^\s+$/.test(s)) {
-                warningAt("Trailing whitespace.", line, tw[1].length + 1);
-            }
-            return true;
-        }
-
-// Produce a token object.  The token inherits from a syntax symbol.
-
-        function it(type, value) {
-            var i, t;
-
-            function checkName(name) {
-                if (!option.proto && name === "__proto__") {
-                    warningAt("The '{a}' property is deprecated.", line, from, name);
-                    return;
-                }
-
-                if (!option.iterator && name === "__iterator__") {
-                    warningAt("'{a}' is only available in JavaScript 1.7.", line, from, name);
-                    return;
-                }
-
-                // Check for dangling underscores unless we're in Node
-                // environment and this identifier represents built-in
-                // Node globals with underscores.
-
-                var hasDangling = /^(_+.*|.*_+)$/.test(name);
-
-                if (option.nomen && hasDangling && name !== "_") {
-                    if (option.node && token.id !== "." && /^(__dirname|__filename)$/.test(name))
-                        return;
-
-                    warningAt("Unexpected {a} in '{b}'.", line, from, "dangling '_'", name);
-                    return;
-                }
-
-                // Check for non-camelcase names. Names like MY_VAR and
-                // _myVar are okay though.
-
-                if (option.camelcase) {
-                    if (name.replace(/^_+/, "").indexOf("_") > -1 && !name.match(/^[A-Z0-9_]*$/)) {
-                        warningAt("Identifier '{a}' is not in camel case.", line, from, value);
-                    }
-                }
-            }
-
-            if (type === "(color)" || type === "(range)") {
-                t = {type: type};
-            } else if (type === "(punctuator)" ||
-                    (type === "(identifier)" && is_own(syntax, value))) {
-                t = syntax[value] || syntax["(error)"];
-            } else {
-                t = syntax[type];
-            }
-
-            t = Object.create(t);
-
-            if (type === "(string)" || type === "(range)") {
-                if (!option.scripturl && jx.test(value)) {
-                    warningAt("Script URL.", line, from);
-                }
-            }
-
-            if (type === "(identifier)") {
-                t.identifier = true;
-                checkName(value);
-            }
-
-            t.value = value;
-            t.line = line;
-            t.character = character;
-            t.from = from;
-            i = t.id;
-            if (i !== "(endline)") {
-                prereg = i &&
-                    (("(,=:[!&|?{};".indexOf(i.charAt(i.length - 1)) >= 0) ||
-                    i === "return" ||
-                    i === "case");
-            }
-            return t;
-        }
-
-        // Public lex methods
-        return {
-            init: function (source) {
-                if (typeof source === "string") {
-                    lines = source
-                        .replace(/\r\n/g, "\n")
-                        .replace(/\r/g, "\n")
-                        .split("\n");
-                } else {
-                    lines = source;
-                }
-
-                // If the first line is a shebang (#!), make it a blank and move on.
-                // Shebangs are used by Node scripts.
-                if (lines[0] && lines[0].substr(0, 2) === "#!")
-                    lines[0] = "";
-
-                line = 0;
-                nextLine();
-                from = 1;
-            },
-
-            range: function (begin, end) {
-                var c, value = "";
-                from = character;
-                if (s.charAt(0) !== begin) {
-                    errorAt("Expected '{a}' and instead saw '{b}'.",
-                            line, character, begin, s.charAt(0));
-                }
-                for (;;) {
-                    s = s.slice(1);
-                    character += 1;
-                    c = s.charAt(0);
-                    switch (c) {
-                    case "":
-                        errorAt("Missing '{a}'.", line, character, c);
-                        break;
-                    case end:
-                        s = s.slice(1);
-                        character += 1;
-                        return it("(range)", value);
-                    case "\\":
-                        warningAt("Unexpected '{a}'.", line, character, c);
-                    }
-                    value += c;
-                }
-
-            },
-
-
-            // token -- this is called by advance to get the next token
-            token: function () {
-                var b, c, captures, d, depth, high, i, l, low, q, t, isLiteral, isInRange, n;
-
-                function match(x) {
-                    var r = x.exec(s), r1;
-
-                    if (r) {
-                        l = r[0].length;
-                        r1 = r[1];
-                        c = r1.charAt(0);
-                        s = s.substr(l);
-                        from = character + l - r1.length;
-                        character += l;
-                        return r1;
-                    }
-                }
-
-                function string(x) {
-                    var c, j, r = "", allowNewLine = false;
-
-                    if (jsonmode && x !== "\"") {
-                        warningAt("Strings must use doublequote.",
-                                line, character);
-                    }
-
-                    if (option.quotmark) {
-                        if (option.quotmark === "single" && x !== "'") {
-                            warningAt("Strings must use singlequote.",
-                                    line, character);
-                        } else if (option.quotmark === "double" && x !== "\"") {
-                            warningAt("Strings must use doublequote.",
-                                    line, character);
-                        } else if (option.quotmark === true) {
-                            quotmark = quotmark || x;
-                            if (quotmark !== x) {
-                                warningAt("Mixed double and single quotes.",
-                                        line, character);
-                            }
-                        }
-                    }
-
-                    function esc(n) {
-                        var i = parseInt(s.substr(j + 1, n), 16);
-                        j += n;
-                        if (i >= 32 && i <= 126 &&
-                                i !== 34 && i !== 92 && i !== 39) {
-                            warningAt("Unnecessary escapement.", line, character);
-                        }
-                        character += n;
-                        c = String.fromCharCode(i);
-                    }
-
-                    j = 0;
-
-unclosedString:
-                    for (;;) {
-                        while (j >= s.length) {
-                            j = 0;
-
-                            var cl = line, cf = from;
-                            if (!nextLine()) {
-                                errorAt("Unclosed string.", cl, cf);
-                                break unclosedString;
-                            }
-
-                            if (allowNewLine) {
-                                allowNewLine = false;
-                            } else {
-                                warningAt("Unclosed string.", cl, cf);
-                            }
-                        }
-
-                        c = s.charAt(j);
-                        if (c === x) {
-                            character += 1;
-                            s = s.substr(j + 1);
-                            return it("(string)", r, x);
-                        }
-
-                        if (c < " ") {
-                            if (c === "\n" || c === "\r") {
-                                break;
-                            }
-                            warningAt("Control character in string: {a}.",
-                                    line, character + j, s.slice(0, j));
-                        } else if (c === "\\") {
-                            j += 1;
-                            character += 1;
-                            c = s.charAt(j);
-                            n = s.charAt(j + 1);
-                            switch (c) {
-                            case "\\":
-                            case "\"":
-                            case "/":
-                                break;
-                            case "\'":
-                                if (jsonmode) {
-                                    warningAt("Avoid \\'.", line, character);
-                                }
-                                break;
-                            case "b":
-                                c = "\b";
-                                break;
-                            case "f":
-                                c = "\f";
-                                break;
-                            case "n":
-                                c = "\n";
-                                break;
-                            case "r":
-                                c = "\r";
-                                break;
-                            case "t":
-                                c = "\t";
-                                break;
-                            case "0":
-                                c = "\0";
-                                // Octal literals fail in strict mode
-                                // check if the number is between 00 and 07
-                                // where 'n' is the token next to 'c'
-                                if (n >= 0 && n <= 7 && directive["use strict"]) {
-                                    warningAt(
-                                    "Octal literals are not allowed in strict mode.",
-                                    line, character);
-                                }
-                                break;
-                            case "u":
-                                esc(4);
-                                break;
-                            case "v":
-                                if (jsonmode) {
-                                    warningAt("Avoid \\v.", line, character);
-                                }
-                                c = "\v";
-                                break;
-                            case "x":
-                                if (jsonmode) {
-                                    warningAt("Avoid \\x-.", line, character);
-                                }
-                                esc(2);
-                                break;
-                            case "":
-                                // last character is escape character
-                                // always allow new line if escaped, but show
-                                // warning if option is not set
-                                allowNewLine = true;
-                                if (option.multistr) {
-                                    if (jsonmode) {
-                                        warningAt("Avoid EOL escapement.", line, character);
-                                    }
-                                    c = "";
-                                    character -= 1;
-                                    break;
-                                }
-                                warningAt("Bad escapement of EOL. Use option multistr if needed.",
-                                    line, character);
-                                break;
-                            case "!":
-                                if (s.charAt(j - 2) === "<")
-                                    break;
-                                /*falls through*/
-                            default:
-                                warningAt("Bad escapement.", line, character);
-                            }
-                        }
-                        r += c;
-                        character += 1;
-                        j += 1;
-                    }
-                }
-
-                for (;;) {
-                    if (!s) {
-                        return it(nextLine() ? "(endline)" : "(end)", "");
-                    }
-
-                    t = match(tx);
-
-                    if (!t) {
-                        t = "";
-                        c = "";
-                        while (s && s < "!") {
-                            s = s.substr(1);
-                        }
-                        if (s) {
-                            errorAt("Unexpected '{a}'.", line, character, s.substr(0, 1));
-                            s = "";
-                        }
-                    } else {
-
-    //      identifier
-
-                        if (isAlpha(c) || c === "_" || c === "$") {
-                            return it("(identifier)", t);
-                        }
-
-    //      number
-
-                        if (isDigit(c)) {
-                            if (!isFinite(Number(t))) {
-                                warningAt("Bad number '{a}'.",
-                                    line, character, t);
-                            }
-                            if (isAlpha(s.substr(0, 1))) {
-                                warningAt("Missing space after '{a}'.",
-                                        line, character, t);
-                            }
-                            if (c === "0") {
-                                d = t.substr(1, 1);
-                                if (isDigit(d)) {
-                                    if (token.id !== ".") {
-                                        warningAt("Don't use extra leading zeros '{a}'.",
-                                            line, character, t);
-                                    }
-                                } else if (jsonmode && (d === "x" || d === "X")) {
-                                    warningAt("Avoid 0x-. '{a}'.",
-                                            line, character, t);
-                                }
-                            }
-                            if (t.substr(t.length - 1) === ".") {
-                                warningAt(
-"A trailing decimal point can be confused with a dot '{a}'.", line, character, t);
-                            }
-                            return it("(number)", t);
-                        }
-                        switch (t) {
-
-    //      string
-
-                        case "\"":
-                        case "'":
-                            return string(t);
-
-    //      // comment
-
-                        case "//":
-                            s = "";
-                            token.comment = true;
-                            break;
-
-    //      /* comment
-
-                        case "/*":
-                            for (;;) {
-                                i = s.search(lx);
-                                if (i >= 0) {
-                                    break;
-                                }
-                                if (!nextLine()) {
-                                    errorAt("Unclosed comment.", line, character);
-                                }
-                            }
-                            s = s.substr(i + 2);
-                            token.comment = true;
-                            break;
-
-    //      /*members /*jshint /*global
-
-                        case "/*members":
-                        case "/*member":
-                        case "/*jshint":
-                        case "/*jslint":
-                        case "/*global":
-                        case "*/":
-                            return {
-                                value: t,
-                                type: "special",
-                                line: line,
-                                character: character,
-                                from: from
-                            };
-
-                        case "":
-                            break;
-    //      /
-                        case "/":
-                            if (s.charAt(0) === "=") {
-                                errorAt("A regular expression literal can be confused with '/='.",
-                                    line, from);
-                            }
-
-                            if (prereg) {
-                                depth = 0;
-                                captures = 0;
-                                l = 0;
-                                for (;;) {
-                                    b = true;
-                                    c = s.charAt(l);
-                                    l += 1;
-                                    switch (c) {
-                                    case "":
-                                        errorAt("Unclosed regular expression.", line, from);
-                                        return quit("Stopping.", line, from);
-                                    case "/":
-                                        if (depth > 0) {
-                                            warningAt("{a} unterminated regular expression " +
-                                                "group(s).", line, from + l, depth);
-                                        }
-                                        c = s.substr(0, l - 1);
-                                        q = {
-                                            g: true,
-                                            i: true,
-                                            m: true
-                                        };
-                                        while (q[s.charAt(l)] === true) {
-                                            q[s.charAt(l)] = false;
-                                            l += 1;
-                                        }
-                                        character += l;
-                                        s = s.substr(l);
-                                        q = s.charAt(0);
-                                        if (q === "/" || q === "*") {
-                                            errorAt("Confusing regular expression.",
-                                                    line, from);
-                                        }
-                                        return it("(regexp)", c);
-                                    case "\\":
-                                        c = s.charAt(l);
-                                        if (c < " ") {
-                                            warningAt(
-"Unexpected control character in regular expression.", line, from + l);
-                                        } else if (c === "<") {
-                                            warningAt(
-"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
-                                        }
-                                        l += 1;
-                                        break;
-                                    case "(":
-                                        depth += 1;
-                                        b = false;
-                                        if (s.charAt(l) === "?") {
-                                            l += 1;
-                                            switch (s.charAt(l)) {
-                                            case ":":
-                                            case "=":
-                                            case "!":
-                                                l += 1;
-                                                break;
-                                            default:
-                                                warningAt(
-"Expected '{a}' and instead saw '{b}'.", line, from + l, ":", s.charAt(l));
-                                            }
-                                        } else {
-                                            captures += 1;
-                                        }
-                                        break;
-                                    case "|":
-                                        b = false;
-                                        break;
-                                    case ")":
-                                        if (depth === 0) {
-                                            warningAt("Unescaped '{a}'.",
-                                                    line, from + l, ")");
-                                        } else {
-                                            depth -= 1;
-                                        }
-                                        break;
-                                    case " ":
-                                        q = 1;
-                                        while (s.charAt(l) === " ") {
-                                            l += 1;
-                                            q += 1;
-                                        }
-                                        if (q > 1) {
-                                            warningAt(
-"Spaces are hard to count. Use {{a}}.", line, from + l, q);
-                                        }
-                                        break;
-                                    case "[":
-                                        c = s.charAt(l);
-                                        if (c === "^") {
-                                            l += 1;
-                                            if (s.charAt(l) === "]") {
-                                                errorAt("Unescaped '{a}'.",
-                                                    line, from + l, "^");
-                                            }
-                                        }
-                                        if (c === "]") {
-                                            warningAt("Empty class.", line,
-                                                    from + l - 1);
-                                        }
-                                        isLiteral = false;
-                                        isInRange = false;
-klass:
-                                        do {
-                                            c = s.charAt(l);
-                                            l += 1;
-                                            switch (c) {
-                                            case "[":
-                                            case "^":
-                                                warningAt("Unescaped '{a}'.",
-                                                        line, from + l, c);
-                                                if (isInRange) {
-                                                    isInRange = false;
-                                                } else {
-                                                    isLiteral = true;
-                                                }
-                                                break;
-                                            case "-":
-                                                if (isLiteral && !isInRange) {
-                                                    isLiteral = false;
-                                                    isInRange = true;
-                                                } else if (isInRange) {
-                                                    isInRange = false;
-                                                } else if (s.charAt(l) === "]") {
-                                                    isInRange = true;
-                                                } else {
-                                                    if (option.regexdash !== (l === 2 || (l === 3 &&
-                                                        s.charAt(1) === "^"))) {
-                                                        warningAt("Unescaped '{a}'.",
-                                                            line, from + l - 1, "-");
-                                                    }
-                                                    isLiteral = true;
-                                                }
-                                                break;
-                                            case "]":
-                                                if (isInRange && !option.regexdash) {
-                                                    warningAt("Unescaped '{a}'.",
-                                                            line, from + l - 1, "-");
-                                                }
-                                                break klass;
-                                            case "\\":
-                                                c = s.charAt(l);
-                                                if (c < " ") {
-                                                    warningAt(
-"Unexpected control character in regular expression.", line, from + l);
-                                                } else if (c === "<") {
-                                                    warningAt(
-"Unexpected escaped character '{a}' in regular expression.", line, from + l, c);
-                                                }
-                                                l += 1;
-
-                                                // \w, \s and \d are never part of a character range
-                                                if (/[wsd]/i.test(c)) {
-                                                    if (isInRange) {
-                                                        warningAt("Unescaped '{a}'.",
-                                                            line, from + l, "-");
-                                                        isInRange = false;
-                                                    }
-                                                    isLiteral = false;
-                                                } else if (isInRange) {
-                                                    isInRange = false;
-                                                } else {
-                                                    isLiteral = true;
-                                                }
-                                                break;
-                                            case "/":
-                                                warningAt("Unescaped '{a}'.",
-                                                        line, from + l - 1, "/");
-
-                                                if (isInRange) {
-                                                    isInRange = false;
-                                                } else {
-                                                    isLiteral = true;
-                                                }
-                                                break;
-                                            case "<":
-                                                if (isInRange) {
-                                                    isInRange = false;
-                                                } else {
-                                                    isLiteral = true;
-                                                }
-                                                break;
-                                            default:
-                                                if (isInRange) {
-                                                    isInRange = false;
-                                                } else {
-                                                    isLiteral = true;
-                                                }
-                                            }
-                                        } while (c);
-                                        break;
-                                    case ".":
-                                        if (option.regexp) {
-                                            warningAt("Insecure '{a}'.", line,
-                                                    from + l, c);
-                                        }
-                                        break;
-                                    case "]":
-                                    case "?":
-                                    case "{":
-                                    case "}":
-                                    case "+":
-                                    case "*":
-                                        warningAt("Unescaped '{a}'.", line,
-                                                from + l, c);
-                                    }
-                                    if (b) {
-                                        switch (s.charAt(l)) {
-                                        case "?":
-                                        case "+":
-                                        case "*":
-                                            l += 1;
-                                            if (s.charAt(l) === "?") {
-                                                l += 1;
-                                            }
-                                            break;
-                                        case "{":
-                                            l += 1;
-                                            c = s.charAt(l);
-                                            if (c < "0" || c > "9") {
-                                                warningAt(
-"Expected a number and instead saw '{a}'.", line, from + l, c);
-                                                break; // No reason to continue checking numbers.
-                                            }
-                                            l += 1;
-                                            low = +c;
-                                            for (;;) {
-                                                c = s.charAt(l);
-                                                if (c < "0" || c > "9") {
-                                                    break;
-                                                }
-                                                l += 1;
-                                                low = +c + (low * 10);
-                                            }
-                                            high = low;
-                                            if (c === ",") {
-                                                l += 1;
-                                                high = Infinity;
-                                                c = s.charAt(l);
-                                                if (c >= "0" && c <= "9") {
-                                                    l += 1;
-                                                    high = +c;
-                                                    for (;;) {
-                                                        c = s.charAt(l);
-                                                        if (c < "0" || c > "9") {
-                                                            break;
-                                                        }
-                                                        l += 1;
-                                                        high = +c + (high * 10);
-                                                    }
-                                                }
-                                            }
-                                            if (s.charAt(l) !== "}") {
-                                                warningAt(
-"Expected '{a}' and instead saw '{b}'.", line, from + l, "}", c);
-                                            } else {
-                                                l += 1;
-                                            }
-                                            if (s.charAt(l) === "?") {
-                                                l += 1;
-                                            }
-                                            if (low > high) {
-                                                warningAt(
-"'{a}' should not be greater than '{b}'.", line, from + l, low, high);
-                                            }
-                                        }
-                                    }
-                                }
-                                c = s.substr(0, l - 1);
-                                character += l;
-                                s = s.substr(l);
-                                return it("(regexp)", c);
-                            }
-                            return it("(punctuator)", t);
-
-    //      punctuator
-
-                        case "#":
-                            return it("(punctuator)", t);
-                        default:
-                            return it("(punctuator)", t);
-                        }
-                    }
-                }
-            }
-        };
-    }());
-
-
-    function addlabel(t, type, token) {
-        if (t === "hasOwnProperty") {
-            warning("'hasOwnProperty' is a really bad name.");
-        }
-
-        // Define t in the current function in the current scope.
-        if (type === "exception") {
-            if (is_own(funct["(context)"], t)) {
-                if (funct[t] !== true && !option.node) {
-                    warning("Value of '{a}' may be overwritten in IE.", nexttoken, t);
-                }
-            }
-        }
-
-        if (is_own(funct, t) && !funct["(global)"]) {
-            if (funct[t] === true) {
-                if (option.latedef)
-                    warning("'{a}' was used before it was defined.", nexttoken, t);
-            } else {
-                if (!option.shadow && type !== "exception") {
-                    warning("'{a}' is already defined.", nexttoken, t);
-                }
-            }
-        }
-
-        funct[t] = type;
-
-        if (token) {
-            funct["(tokens)"][t] = token;
-        }
-
-        if (funct["(global)"]) {
-            global[t] = funct;
-            if (is_own(implied, t)) {
-                if (option.latedef)
-                    warning("'{a}' was used before it was defined.", nexttoken, t);
-                delete implied[t];
-            }
-        } else {
-            scope[t] = funct;
-        }
-    }
-
-
-    function doOption() {
-        var nt = nexttoken;
-        var o  = nt.value;
-        var quotmarkValue = option.quotmark;
-        var predef = {};
-        var b, obj, filter, t, tn, v, minus;
-
-        switch (o) {
-        case "*/":
-            error("Unbegun comment.");
-            break;
-        case "/*members":
-        case "/*member":
-            o = "/*members";
-            if (!membersOnly) {
-                membersOnly = {};
-            }
-            obj = membersOnly;
-            option.quotmark = false;
-            break;
-        case "/*jshint":
-        case "/*jslint":
-            obj = option;
-            filter = boolOptions;
-            break;
-        case "/*global":
-            obj = predef;
-            break;
-        default:
-            error("What?");
-        }
-
-        t = lex.token();
-
-loop:
-        for (;;) {
-            minus = false;
-            for (;;) {
-                if (t.type === "special" && t.value === "*/") {
-                    break loop;
-                }
-                if (t.id !== "(endline)" && t.id !== ",") {
-                    break;
-                }
-                t = lex.token();
-            }
-
-            if (o === "/*global" && t.value === "-") {
-                minus = true;
-                t = lex.token();
-            }
-
-            if (t.type !== "(string)" && t.type !== "(identifier)" && o !== "/*members") {
-                error("Bad option.", t);
-            }
-
-            v = lex.token();
-            if (v.id === ":") {
-                v = lex.token();
-
-                if (obj === membersOnly) {
-                    error("Expected '{a}' and instead saw '{b}'.", t, "*/", ":");
-                }
-
-                if (o === "/*jshint") {
-                    checkOption(t.value, t);
-                }
-
-                var numericVals = [
-                    "maxstatements",
-                    "maxparams",
-                    "maxdepth",
-                    "maxcomplexity",
-                    "maxerr",
-                    "maxlen",
-                    "indent"
-                ];
-
-                if (numericVals.indexOf(t.value) > -1 && (o === "/*jshint" || o === "/*jslint")) {
-                    b = +v.value;
-
-                    if (typeof b !== "number" || !isFinite(b) || b <= 0 || Math.floor(b) !== b) {
-                        error("Expected a small integer and instead saw '{a}'.", v, v.value);
-                    }
-
-                    if (t.value === "indent")
-                        obj.white = true;
-
-                    obj[t.value] = b;
-                } else if (t.value === "validthis") {
-                    if (funct["(global)"]) {
-                        error("Option 'validthis' can't be used in a global scope.");
-                    } else {
-                        if (v.value === "true" || v.value === "false")
-                            obj[t.value] = v.value === "true";
-                        else
-                            error("Bad option value.", v);
-                    }
-                } else if (t.value === "quotmark" && (o === "/*jshint")) {
-                    switch (v.value) {
-                    case "true":
-                        obj.quotmark = true;
-                        break;
-                    case "false":
-                        obj.quotmark = false;
-                        break;
-                    case "double":
-                    case "single":
-                        obj.quotmark = v.value;
-                        break;
-                    default:
-                        error("Bad option value.", v);
-                    }
-                } else if (v.value === "true" || v.value === "false") {
-                    if (o === "/*jslint") {
-                        tn = renamedOptions[t.value] || t.value;
-                        obj[tn] = v.value === "true";
-                        if (invertedOptions[tn] !== undefined) {
-                            obj[tn] = !obj[tn];
-                        }
-                    } else {
-                        obj[t.value] = v.value === "true";
-                    }
-
-                    if (t.value === "newcap")
-                        obj["(explicitNewcap)"] = true;
-                } else {
-                    error("Bad option value.", v);
-                }
-                t = lex.token();
-            } else {
-                if (o === "/*jshint" || o === "/*jslint") {
-                    error("Missing option value.", t);
-                }
-
-                obj[t.value] = false;
-
-                if (o === "/*global" && minus === true) {
-                    JSHINT.blacklist[t.value] = t.value;
-                    updatePredefined();
-                }
-
-                t = v;
-            }
-        }
-
-        if (o === "/*members") {
-            option.quotmark = quotmarkValue;
-        }
-
-        combine(predefined, predef);
-
-        for (var key in predef) {
-            if (is_own(predef, key)) {
-                declared[key] = nt;
-            }
-        }
-
-        if (filter) {
-            assume();
-        }
-    }
-
-
-// We need a peek function. If it has an argument, it peeks that much farther
-// ahead. It is used to distinguish
-//     for ( var i in ...
-// from
-//     for ( var i = ...
-
-    function peek(p) {
-        var i = p || 0, j = 0, t;
-
-        while (j <= i) {
-            t = lookahead[j];
-            if (!t) {
-                t = lookahead[j] = lex.token();
-            }
-            j += 1;
-        }
-        return t;
-    }
-
-
-
-// Produce the next token. It looks for programming errors.
-
-    function advance(id, t) {
-        switch (token.id) {
-        case "(number)":
-            if (nexttoken.id === ".") {
-                warning("A dot following a number can be confused with a decimal point.", token);
-            }
-            break;
-        case "-":
-            if (nexttoken.id === "-" || nexttoken.id === "--") {
-                warning("Confusing minusses.");
-            }
-            break;
-        case "+":
-            if (nexttoken.id === "+" || nexttoken.id === "++") {
-                warning("Confusing plusses.");
-            }
-            break;
-        }
-
-        if (token.type === "(string)" || token.identifier) {
-            anonname = token.value;
-        }
-
-        if (id && nexttoken.id !== id) {
-            if (t) {
-                if (nexttoken.id === "(end)") {
-                    warning("Unmatched '{a}'.", t, t.id);
-                } else {
-                    warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
-                            nexttoken, id, t.id, t.line, nexttoken.value);
-                }
-            } else if (nexttoken.type !== "(identifier)" ||
-                            nexttoken.value !== id) {
-                warning("Expected '{a}' and instead saw '{b}'.",
-                        nexttoken, id, nexttoken.value);
-            }
-        }
-
-        prevtoken = token;
-        token = nexttoken;
-        for (;;) {
-            nexttoken = lookahead.shift() || lex.token();
-            if (nexttoken.id === "(end)" || nexttoken.id === "(error)") {
-                return;
-            }
-            if (nexttoken.type === "special") {
-                doOption();
-            } else {
-                if (nexttoken.id !== "(endline)") {
-                    break;
-                }
-            }
-        }
-    }
-
-
-// This is the heart of JSHINT, the Pratt parser. In addition to parsing, it
-// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is
-// like .nud except that it is only used on the first token of a statement.
-// Having .fud makes it much easier to define statement-oriented languages like
-// JavaScript. I retained Pratt's nomenclature.
-
-// .nud     Null denotation
-// .fud     First null denotation
-// .led     Left denotation
-//  lbp     Left binding power
-//  rbp     Right binding power
-
-// They are elements of the parsing method called Top Down Operator Precedence.
-
-    function expression(rbp, initial) {
-        var left, isArray = false, isObject = false;
-
-        if (nexttoken.id === "(end)")
-            error("Unexpected early end of program.", token);
-
-        advance();
-        if (initial) {
-            anonname = "anonymous";
-            funct["(verb)"] = token.value;
-        }
-        if (initial === true && token.fud) {
-            left = token.fud();
-        } else {
-            if (token.nud) {
-                left = token.nud();
-            } else {
-                if (nexttoken.type === "(number)" && token.id === ".") {
-                    warning("A leading decimal point can be confused with a dot: '.{a}'.",
-                            token, nexttoken.value);
-                    advance();
-                    return token;
-                } else {
-                    error("Expected an identifier and instead saw '{a}'.",
-                            token, token.id);
-                }
-            }
-            while (rbp < nexttoken.lbp) {
-                isArray = token.value === "Array";
-                isObject = token.value === "Object";
-
-                // #527, new Foo.Array(), Foo.Array(), new Foo.Object(), Foo.Object()
-                // Line breaks in IfStatement heads exist to satisfy the checkJSHint
-                // "Line too long." error.
-                if (left && (left.value || (left.first && left.first.value))) {
-                    // If the left.value is not "new", or the left.first.value is a "."
-                    // then safely assume that this is not "new Array()" and possibly
-                    // not "new Object()"...
-                    if (left.value !== "new" ||
-                      (left.first && left.first.value && left.first.value === ".")) {
-                        isArray = false;
-                        // ...In the case of Object, if the left.value and token.value
-                        // are not equal, then safely assume that this not "new Object()"
-                        if (left.value !== token.value) {
-                            isObject = false;
-                        }
-                    }
-                }
-
-                advance();
-                if (isArray && token.id === "(" && nexttoken.id === ")")
-                    warning("Use the array literal notation [].", token);
-                if (isObject && token.id === "(" && nexttoken.id === ")")
-                    warning("Use the object literal notation {}.", token);
-                if (token.led) {
-                    left = token.led(left);
-                } else {
-                    error("Expected an operator and instead saw '{a}'.",
-                        token, token.id);
-                }
-            }
-        }
-        return left;
-    }
-
-
-// Functions for conformance of style.
-
-    function adjacent(left, right) {
-        left = left || token;
-        right = right || nexttoken;
-        if (option.white) {
-            if (left.character !== right.from && left.line === right.line) {
-                left.from += (left.character - left.from);
-                warning("Unexpected space after '{a}'.", left, left.value);
-            }
-        }
-    }
-
-    function nobreak(left, right) {
-        left = left || token;
-        right = right || nexttoken;
-        if (option.white && (left.character !== right.from || left.line !== right.line)) {
-            warning("Unexpected space before '{a}'.", right, right.value);
-        }
-    }
-
-    function nospace(left, right) {
-        left = left || token;
-        right = right || nexttoken;
-        if (option.white && !left.comment) {
-            if (left.line === right.line) {
-                adjacent(left, right);
-            }
-        }
-    }
-
-    function nonadjacent(left, right) {
-        if (option.white) {
-            left = left || token;
-            right = right || nexttoken;
-            if (left.value === ";" && right.value === ";") {
-                return;
-            }
-            if (left.line === right.line && left.character === right.from) {
-                left.from += (left.character - left.from);
-                warning("Missing space after '{a}'.",
-                        left, left.value);
-            }
-        }
-    }
-
-    function nobreaknonadjacent(left, right) {
-        left = left || token;
-        right = right || nexttoken;
-        if (!option.laxbreak && left.line !== right.line) {
-            warning("Bad line breaking before '{a}'.", right, right.id);
-        } else if (option.white) {
-            left = left || token;
-            right = right || nexttoken;
-            if (left.character === right.from) {
-                left.from += (left.character - left.from);
-                warning("Missing space after '{a}'.",
-                        left, left.value);
-            }
-        }
-    }
-
-    function indentation(bias) {
-        var i;
-        if (option.white && nexttoken.id !== "(end)") {
-            i = indent + (bias || 0);
-            if (nexttoken.from !== i) {
-                warning(
-"Expected '{a}' to have an indentation at {b} instead at {c}.",
-                        nexttoken, nexttoken.value, i, nexttoken.from);
-            }
-        }
-    }
-
-    function nolinebreak(t) {
-        t = t || token;
-        if (t.line !== nexttoken.line) {
-            warning("Line breaking error '{a}'.", t, t.value);
-        }
-    }
-
-
-    function comma() {
-        if (token.line !== nexttoken.line) {
-            if (!option.laxcomma) {
-                if (comma.first) {
-                    warning("Comma warnings can be turned off with 'laxcomma'");
-                    comma.first = false;
-                }
-                warning("Bad line breaking before '{a}'.", token, nexttoken.id);
-            }
-        } else if (!token.comment && token.character !== nexttoken.from && option.white) {
-            token.from += (token.character - token.from);
-            warning("Unexpected space after '{a}'.", token, token.value);
-        }
-        advance(",");
-        nonadjacent(token, nexttoken);
-    }
-
-
-// Functional constructors for making the symbols that will be inherited by
-// tokens.
-
-    function symbol(s, p) {
-        var x = syntax[s];
-        if (!x || typeof x !== "object") {
-            syntax[s] = x = {
-                id: s,
-                lbp: p,
-                value: s
-            };
-        }
-        return x;
-    }
-
-
-    function delim(s) {
-        return symbol(s, 0);
-    }
-
-
-    function stmt(s, f) {
-        var x = delim(s);
-        x.identifier = x.reserved = true;
-        x.fud = f;
-        return x;
-    }
-
-
-    function blockstmt(s, f) {
-        var x = stmt(s, f);
-        x.block = true;
-        return x;
-    }
-
-
-    function reserveName(x) {
-        var c = x.id.charAt(0);
-        if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) {
-            x.identifier = x.reserved = true;
-        }
-        return x;
-    }
-
-
-    function prefix(s, f) {
-        var x = symbol(s, 150);
-        reserveName(x);
-        x.nud = (typeof f === "function") ? f : function () {
-            this.right = expression(150);
-            this.arity = "unary";
-            if (this.id === "++" || this.id === "--") {
-                if (option.plusplus) {
-                    warning("Unexpected use of '{a}'.", this, this.id);
-                } else if ((!this.right.identifier || this.right.reserved) &&
-                        this.right.id !== "." && this.right.id !== "[") {
-                    warning("Bad operand.", this);
-                }
-            }
-            return this;
-        };
-        return x;
-    }
-
-
-    function type(s, f) {
-        var x = delim(s);
-        x.type = s;
-        x.nud = f;
-        return x;
-    }
-
-
-    function reserve(s, f) {
-        var x = type(s, f);
-        x.identifier = x.reserved = true;
-        return x;
-    }
-
-
-    function reservevar(s, v) {
-        return reserve(s, function () {
-            if (typeof v === "function") {
-                v(this);
-            }
-            return this;
-        });
-    }
-
-
-    function infix(s, f, p, w) {
-        var x = symbol(s, p);
-        reserveName(x);
-        x.led = function (left) {
-            if (!w) {
-                nobreaknonadjacent(prevtoken, token);
-                nonadjacent(token, nexttoken);
-            }
-            if (s === "in" && left.id === "!") {
-                warning("Confusing use of '{a}'.", left, "!");
-            }
-            if (typeof f === "function") {
-                return f(left, this);
-            } else {
-                this.left = left;
-                this.right = expression(p);
-                return this;
-            }
-        };
-        return x;
-    }
-
-
-    function relation(s, f) {
-        var x = symbol(s, 100);
-        x.led = function (left) {
-            nobreaknonadjacent(prevtoken, token);
-            nonadjacent(token, nexttoken);
-            var right = expression(100);
-
-            if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) {
-                warning("Use the isNaN function to compare with NaN.", this);
-            } else if (f) {
-                f.apply(this, [left, right]);
-            }
-            if (left.id === "!") {
-                warning("Confusing use of '{a}'.", left, "!");
-            }
-            if (right.id === "!") {
-                warning("Confusing use of '{a}'.", right, "!");
-            }
-            this.left = left;
-            this.right = right;
-            return this;
-        };
-        return x;
-    }
-
-
-    function isPoorRelation(node) {
-        return node &&
-              ((node.type === "(number)" && +node.value === 0) ||
-               (node.type === "(string)" && node.value === "") ||
-               (node.type === "null" && !option.eqnull) ||
-                node.type === "true" ||
-                node.type === "false" ||
-                node.type === "undefined");
-    }
-
-
-    function assignop(s) {
-        symbol(s, 20).exps = true;
-
-        return infix(s, function (left, that) {
-            that.left = left;
-
-            if (predefined[left.value] === false &&
-                    scope[left.value]["(global)"] === true) {
-                warning("Read only.", left);
-            } else if (left["function"]) {
-                warning("'{a}' is a function.", left, left.value);
-            }
-
-            if (left) {
-                if (option.esnext && funct[left.value] === "const") {
-                    warning("Attempting to override '{a}' which is a constant", left, left.value);
-                }
-
-                if (left.id === "." || left.id === "[") {
-                    if (!left.left || left.left.value === "arguments") {
-                        warning("Bad assignment.", that);
-                    }
-                    that.right = expression(19);
-                    return that;
-                } else if (left.identifier && !left.reserved) {
-                    if (funct[left.value] === "exception") {
-                        warning("Do not assign to the exception parameter.", left);
-                    }
-                    that.right = expression(19);
-                    return that;
-                }
-
-                if (left === syntax["function"]) {
-                    warning(
-"Expected an identifier in an assignment and instead saw a function invocation.",
-                                token);
-                }
-            }
-
-            error("Bad assignment.", that);
-        }, 20);
-    }
-
-
-    function bitwise(s, f, p) {
-        var x = symbol(s, p);
-        reserveName(x);
-        x.led = (typeof f === "function") ? f : function (left) {
-            if (option.bitwise) {
-                warning("Unexpected use of '{a}'.", this, this.id);
-            }
-            this.left = left;
-            this.right = expression(p);
-            return this;
-        };
-        return x;
-    }
-
-
-    function bitwiseassignop(s) {
-        symbol(s, 20).exps = true;
-        return infix(s, function (left, that) {
-            if (option.bitwise) {
-                warning("Unexpected use of '{a}'.", that, that.id);
-            }
-            nonadjacent(prevtoken, token);
-            nonadjacent(token, nexttoken);
-            if (left) {
-                if (left.id === "." || left.id === "[" ||
-                        (left.identifier && !left.reserved)) {
-                    expression(19);
-                    return that;
-                }
-                if (left === syntax["function"]) {
-                    warning(
-"Expected an identifier in an assignment, and instead saw a function invocation.",
-                                token);
-                }
-                return that;
-            }
-            error("Bad assignment.", that);
-        }, 20);
-    }
-
-
-    function suffix(s) {
-        var x = symbol(s, 150);
-        x.led = function (left) {
-            if (option.plusplus) {
-                warning("Unexpected use of '{a}'.", this, this.id);
-            } else if ((!left.identifier || left.reserved) &&
-                    left.id !== "." && left.id !== "[") {
-                warning("Bad operand.", this);
-            }
-            this.left = left;
-            return this;
-        };
-        return x;
-    }
-
-
-    // fnparam means that this identifier is being defined as a function
-    // argument (see identifier())
-    function optionalidentifier(fnparam) {
-        if (nexttoken.identifier) {
-            advance();
-            if (token.reserved && !option.es5) {
-                // `undefined` as a function param is a common pattern to protect
-                // against the case when somebody does `undefined = true` and
-                // help with minification. More info: https://gist.github.com/315916
-                if (!fnparam || token.value !== "undefined") {
-                    warning("Expected an identifier and instead saw '{a}' (a reserved word).",
-                            token, token.id);
-                }
-            }
-            return token.value;
-        }
-    }
-
-    // fnparam means that this identifier is being defined as a function
-    // argument
-    function identifier(fnparam) {
-        var i = optionalidentifier(fnparam);
-        if (i) {
-            return i;
-        }
-        if (token.id === "function" && nexttoken.id === "(") {
-            warning("Missing name in function declaration.");
-        } else {
-            error("Expected an identifier and instead saw '{a}'.",
-                    nexttoken, nexttoken.value);
-        }
-    }
-
-
-    function reachable(s) {
-        var i = 0, t;
-        if (nexttoken.id !== ";" || noreach) {
-            return;
-        }
-        for (;;) {
-            t = peek(i);
-            if (t.reach) {
-                return;
-            }
-            if (t.id !== "(endline)") {
-                if (t.id === "function") {
-                    if (!option.latedef) {
-                        break;
-                    }
-                    warning(
-"Inner functions should be listed at the top of the outer function.", t);
-                    break;
-                }
-                warning("Unreachable '{a}' after '{b}'.", t, t.value, s);
-                break;
-            }
-            i += 1;
-        }
-    }
-
-
-    function statement(noindent) {
-        var i = indent, r, s = scope, t = nexttoken;
-
-        if (t.id === ";") {
-            advance(";");
-            return;
-        }
-
-        // Is this a labelled statement?
-
-        if (t.identifier && !t.reserved && peek().id === ":") {
-            advance();
-            advance(":");
-            scope = Object.create(s);
-            addlabel(t.value, "label");
-
-            if (!nexttoken.labelled && nexttoken.value !== "{") {
-                warning("Label '{a}' on {b} statement.", nexttoken, t.value, nexttoken.value);
-            }
-
-            if (jx.test(t.value + ":")) {
-                warning("Label '{a}' looks like a javascript url.", t, t.value);
-            }
-
-            nexttoken.label = t.value;
-            t = nexttoken;
-        }
-
-        // Is it a lonely block?
-
-        if (t.id === "{") {
-            block(true, true);
-            return;
-        }
-
-        // Parse the statement.
-
-        if (!noindent) {
-            indentation();
-        }
-        r = expression(0, true);
-
-        // Look for the final semicolon.
-
-        if (!t.block) {
-            if (!option.expr && (!r || !r.exps)) {
-                warning("Expected an assignment or function call and instead saw an expression.",
-                    token);
-            } else if (option.nonew && r.id === "(" && r.left.id === "new") {
-                warning("Do not use 'new' for side effects.", t);
-            }
-
-            if (nexttoken.id === ",") {
-                return comma();
-            }
-
-            if (nexttoken.id !== ";") {
-                if (!option.asi) {
-                    // If this is the last statement in a block that ends on
-                    // the same line *and* option lastsemic is on, ignore the warning.
-                    // Otherwise, complain about missing semicolon.
-                    if (!option.lastsemic || nexttoken.id !== "}" ||
-                            nexttoken.line !== token.line) {
-                        warningAt("Missing semicolon.", token.line, token.character);
-                    }
-                }
-            } else {
-                adjacent(token, nexttoken);
-                advance(";");
-                nonadjacent(token, nexttoken);
-            }
-        }
-
-// Restore the indentation.
-
-        indent = i;
-        scope = s;
-        return r;
-    }
-
-
-    function statements(startLine) {
-        var a = [], p;
-
-        while (!nexttoken.reach && nexttoken.id !== "(end)") {
-            if (nexttoken.id === ";") {
-                p = peek();
-                if (!p || p.id !== "(") {
-                    warning("Unnecessary semicolon.");
-                }
-                advance(";");
-            } else {
-                a.push(statement(startLine === nexttoken.line));
-            }
-        }
-        return a;
-    }
-
-
-    /*
-     * read all directives
-     * recognizes a simple form of asi, but always
-     * warns, if it is used
-     */
-    function directives() {
-        var i, p, pn;
-
-        for (;;) {
-            if (nexttoken.id === "(string)") {
-                p = peek(0);
-                if (p.id === "(endline)") {
-                    i = 1;
-                    do {
-                        pn = peek(i);
-                        i = i + 1;
-                    } while (pn.id === "(endline)");
-
-                    if (pn.id !== ";") {
-                        if (pn.id !== "(string)" && pn.id !== "(number)" &&
-                            pn.id !== "(regexp)" && pn.identifier !== true &&
-                            pn.id !== "}") {
-                            break;
-                        }
-                        warning("Missing semicolon.", nexttoken);
-                    } else {
-                        p = pn;
-                    }
-                } else if (p.id === "}") {
-                    // directive with no other statements, warn about missing semicolon
-                    warning("Missing semicolon.", p);
-                } else if (p.id !== ";") {
-                    break;
-                }
-
-                indentation();
-                advance();
-                if (directive[token.value]) {
-                    warning("Unnecessary directive \"{a}\".", token, token.value);
-                }
-
-                if (token.value === "use strict") {
-                    if (!option["(explicitNewcap)"])
-                        option.newcap = true;
-                    option.undef = true;
-                }
-
-                // there's no directive negation, so always set to true
-                directive[token.value] = true;
-
-                if (p.id === ";") {
-                    advance(";");
-                }
-                continue;
-            }
-            break;
-        }
-    }
-
-
-    /*
-     * Parses a single block. A block is a sequence of statements wrapped in
-     * braces.
-     *
-     * ordinary - true for everything but function bodies and try blocks.
-     * stmt     - true if block can be a single statement (e.g. in if/for/while).
-     * isfunc   - true if block is a function body
-     */
-    function block(ordinary, stmt, isfunc) {
-        var a,
-            b = inblock,
-            old_indent = indent,
-            m,
-            s = scope,
-            t,
-            line,
-            d;
-
-        inblock = ordinary;
-
-        if (!ordinary || !option.funcscope)
-            scope = Object.create(scope);
-
-        nonadjacent(token, nexttoken);
-        t = nexttoken;
-
-        var metrics = funct["(metrics)"];
-        metrics.nestedBlockDepth += 1;
-        metrics.verifyMaxNestedBlockDepthPerFunction();
-
-        if (nexttoken.id === "{") {
-            advance("{");
-            line = token.line;
-            if (nexttoken.id !== "}") {
-                indent += option.indent;
-                while (!ordinary && nexttoken.from > indent) {
-                    indent += option.indent;
-                }
-
-                if (isfunc) {
-                    m = {};
-                    for (d in directive) {
-                        if (is_own(directive, d)) {
-                            m[d] = directive[d];
-                        }
-                    }
-                    directives();
-
-                    if (option.strict && funct["(context)"]["(global)"]) {
-                        if (!m["use strict"] && !directive["use strict"]) {
-                            warning("Missing \"use strict\" statement.");
-                        }
-                    }
-                }
-
-                a = statements(line);
-
-                metrics.statementCount += a.length;
-
-                if (isfunc) {
-                    directive = m;
-                }
-
-                indent -= option.indent;
-                if (line !== nexttoken.line) {
-                    indentation();
-                }
-            } else if (line !== nexttoken.line) {
-                indentation();
-            }
-            advance("}", t);
-            indent = old_indent;
-        } else if (!ordinary) {
-            error("Expected '{a}' and instead saw '{b}'.",
-                  nexttoken, "{", nexttoken.value);
-        } else {
-            if (!stmt || option.curly)
-                warning("Expected '{a}' and instead saw '{b}'.",
-                        nexttoken, "{", nexttoken.value);
-
-            noreach = true;
-            indent += option.indent;
-            // test indentation only if statement is in new line
-            a = [statement(nexttoken.line === token.line)];
-            indent -= option.indent;
-            noreach = false;
-        }
-        funct["(verb)"] = null;
-        if (!ordinary || !option.funcscope) scope = s;
-        inblock = b;
-        if (ordinary && option.noempty && (!a || a.length === 0)) {
-            warning("Empty block.");
-        }
-        metrics.nestedBlockDepth -= 1;
-        return a;
-    }
-
-
-    function countMember(m) {
-        if (membersOnly && typeof membersOnly[m] !== "boolean") {
-            warning("Unexpected /*member '{a}'.", token, m);
-        }
-        if (typeof member[m] === "number") {
-            member[m] += 1;
-        } else {
-            member[m] = 1;
-        }
-    }
-
-
-    function note_implied(token) {
-        var name = token.value, line = token.line, a = implied[name];
-        if (typeof a === "function") {
-            a = false;
-        }
-
-        if (!a) {
-            a = [line];
-            implied[name] = a;
-        } else if (a[a.length - 1] !== line) {
-            a.push(line);
-        }
-    }
-
-
-    // Build the syntax table by declaring the syntactic elements of the language.
-
-    type("(number)", function () {
-        return this;
-    });
-
-    type("(string)", function () {
-        return this;
-    });
-
-    syntax["(identifier)"] = {
-        type: "(identifier)",
-        lbp: 0,
-        identifier: true,
-        nud: function () {
-            var v = this.value,
-                s = scope[v],
-                f;
-
-            if (typeof s === "function") {
-                // Protection against accidental inheritance.
-                s = undefined;
-            } else if (typeof s === "boolean") {
-                f = funct;
-                funct = functions[0];
-                addlabel(v, "var");
-                s = funct;
-                funct = f;
-            }
-
-            // The name is in scope and defined in the current function.
-            if (funct === s) {
-                // Change 'unused' to 'var', and reject labels.
-                switch (funct[v]) {
-                case "unused":
-                    funct[v] = "var";
-                    break;
-                case "unction":
-                    funct[v] = "function";
-                    this["function"] = true;
-                    break;
-                case "function":
-                    this["function"] = true;
-                    break;
-                case "label":
-                    warning("'{a}' is a statement label.", token, v);
-                    break;
-                }
-            } else if (funct["(global)"]) {
-                // The name is not defined in the function.  If we are in the global
-                // scope, then we have an undefined variable.
-                //
-                // Operators typeof and delete do not raise runtime errors even if
-                // the base object of a reference is null so no need to display warning
-                // if we're inside of typeof or delete.
-
-                if (option.undef && typeof predefined[v] !== "boolean") {
-                    // Attempting to subscript a null reference will throw an
-                    // error, even within the typeof and delete operators
-                    if (!(anonname === "typeof" || anonname === "delete") ||
-                        (nexttoken && (nexttoken.value === "." || nexttoken.value === "["))) {
-
-                        isundef(funct, "'{a}' is not defined.", token, v);
-                    }
-                }
-
-                note_implied(token);
-            } else {
-                // If the name is already defined in the current
-                // function, but not as outer, then there is a scope error.
-
-                switch (funct[v]) {
-                case "closure":
-                case "function":
-                case "var":
-                case "unused":
-                    warning("'{a}' used out of scope.", token, v);
-                    break;
-                case "label":
-                    warning("'{a}' is a statement label.", token, v);
-                    break;
-                case "outer":
-                case "global":
-                    break;
-                default:
-                    // If the name is defined in an outer function, make an outer entry,
-                    // and if it was unused, make it var.
-                    if (s === true) {
-                        funct[v] = true;
-                    } else if (s === null) {
-                        warning("'{a}' is not allowed.", token, v);
-                        note_implied(token);
-                    } else if (typeof s !== "object") {
-                        // Operators typeof and delete do not raise runtime errors even
-                        // if the base object of a reference is null so no need to
-                        // display warning if we're inside of typeof or delete.
-                        if (option.undef) {
-                            // Attempting to subscript a null reference will throw an
-                            // error, even within the typeof and delete operators
-                            if (!(anonname === "typeof" || anonname === "delete") ||
-                                (nexttoken &&
-                                    (nexttoken.value === "." || nexttoken.value === "["))) {
-
-                                isundef(funct, "'{a}' is not defined.", token, v);
-                            }
-                        }
-                        funct[v] = true;
-                        note_implied(token);
-                    } else {
-                        switch (s[v]) {
-                        case "function":
-                        case "unction":
-                            this["function"] = true;
-                            s[v] = "closure";
-                            funct[v] = s["(global)"] ? "global" : "outer";
-                            break;
-                        case "var":
-                        case "unused":
-                            s[v] = "closure";
-                            funct[v] = s["(global)"] ? "global" : "outer";
-                            break;
-                        case "closure":
-                            funct[v] = s["(global)"] ? "global" : "outer";
-                            break;
-                        case "label":
-                            warning("'{a}' is a statement label.", token, v);
-                        }
-                    }
-                }
-            }
-            return this;
-        },
-        led: function () {
-            error("Expected an operator and instead saw '{a}'.",
-                nexttoken, nexttoken.value);
-        }
-    };
-
-    type("(regexp)", function () {
-        return this;
-    });
-
-
-// ECMAScript parser
-
-    delim("(endline)");
-    delim("(begin)");
-    delim("(end)").reach = true;
-    delim("</").reach = true;
-    delim("<!");
-    delim("<!--");
-    delim("-->");
-    delim("(error)").reach = true;
-    delim("}").reach = true;
-    delim(")");
-    delim("]");
-    delim("\"").reach = true;
-    delim("'").reach = true;
-    delim(";");
-    delim(":").reach = true;
-    delim(",");
-    delim("#");
-    delim("@");
-    reserve("else");
-    reserve("case").reach = true;
-    reserve("catch");
-    reserve("default").reach = true;
-    reserve("finally");
-    reservevar("arguments", function (x) {
-        if (directive["use strict"] && funct["(global)"]) {
-            warning("Strict violation.", x);
-        }
-    });
-    reservevar("eval");
-    reservevar("false");
-    reservevar("Infinity");
-    reservevar("null");
-    reservevar("this", function (x) {
-        if (directive["use strict"] && !option.validthis && ((funct["(statement)"] &&
-                funct["(name)"].charAt(0) > "Z") || funct["(global)"])) {
-            warning("Possible strict violation.", x);
-        }
-    });
-    reservevar("true");
-    reservevar("undefined");
-    assignop("=", "assign", 20);
-    assignop("+=", "assignadd", 20);
-    assignop("-=", "assignsub", 20);
-    assignop("*=", "assignmult", 20);
-    assignop("/=", "assigndiv", 20).nud = function () {
-        error("A regular expression literal can be confused with '/='.");
-    };
-    assignop("%=", "assignmod", 20);
-    bitwiseassignop("&=", "assignbitand", 20);
-    bitwiseassignop("|=", "assignbitor", 20);
-    bitwiseassignop("^=", "assignbitxor", 20);
-    bitwiseassignop("<<=", "assignshiftleft", 20);
-    bitwiseassignop(">>=", "assignshiftright", 20);
-    bitwiseassignop(">>>=", "assignshiftrightunsigned", 20);
-    infix("?", function (left, that) {
-        that.left = left;
-        that.right = expression(10);
-        advance(":");
-        that["else"] = expression(10);
-        return that;
-    }, 30);
-
-    infix("||", "or", 40);
-    infix("&&", "and", 50);
-    bitwise("|", "bitor", 70);
-    bitwise("^", "bitxor", 80);
-    bitwise("&", "bitand", 90);
-    relation("==", function (left, right) {
-        var eqnull = option.eqnull && (left.value === "null" || right.value === "null");
-
-        if (!eqnull && option.eqeqeq)
-            warning("Expected '{a}' and instead saw '{b}'.", this, "===", "==");
-        else if (isPoorRelation(left))
-            warning("Use '{a}' to compare with '{b}'.", this, "===", left.value);
-        else if (isPoorRelation(right))
-            warning("Use '{a}' to compare with '{b}'.", this, "===", right.value);
-
-        return this;
-    });
-    relation("===");
-    relation("!=", function (left, right) {
-        var eqnull = option.eqnull &&
-                (left.value === "null" || right.value === "null");
-
-        if (!eqnull && option.eqeqeq) {
-            warning("Expected '{a}' and instead saw '{b}'.",
-                    this, "!==", "!=");
-        } else if (isPoorRelation(left)) {
-            warning("Use '{a}' to compare with '{b}'.",
-                    this, "!==", left.value);
-        } else if (isPoorRelation(right)) {
-            warning("Use '{a}' to compare with '{b}'.",
-                    this, "!==", right.value);
-        }
-        return this;
-    });
-    relation("!==");
-    relation("<");
-    relation(">");
-    relation("<=");
-    relation(">=");
-    bitwise("<<", "shiftleft", 120);
-    bitwise(">>", "shiftright", 120);
-    bitwise(">>>", "shiftrightunsigned", 120);
-    infix("in", "in", 120);
-    infix("instanceof", "instanceof", 120);
-    infix("+", function (left, that) {
-        var right = expression(130);
-        if (left && right && left.id === "(string)" && right.id === "(string)") {
-            left.value += right.value;
-            left.character = right.character;
-            if (!option.scripturl && jx.test(left.value)) {
-                warning("JavaScript URL.", left);
-            }
-            return left;
-        }
-        that.left = left;
-        that.right = right;
-        return that;
-    }, 130);
-    prefix("+", "num");
-    prefix("+++", function () {
-        warning("Confusing pluses.");
-        this.right = expression(150);
-        this.arity = "unary";
-        return this;
-    });
-    infix("+++", function (left) {
-        warning("Confusing pluses.");
-        this.left = left;
-        this.right = expression(130);
-        return this;
-    }, 130);
-    infix("-", "sub", 130);
-    prefix("-", "neg");
-    prefix("---", function () {
-        warning("Confusing minuses.");
-        this.right = expression(150);
-        this.arity = "unary";
-        return this;
-    });
-    infix("---", function (left) {
-        warning("Confusing minuses.");
-        this.left = left;
-        this.right = expression(130);
-        return this;
-    }, 130);
-    infix("*", "mult", 140);
-    infix("/", "div", 140);
-    infix("%", "mod", 140);
-
-    suffix("++", "postinc");
-    prefix("++", "preinc");
-    syntax["++"].exps = true;
-
-    suffix("--", "postdec");
-    prefix("--", "predec");
-    syntax["--"].exps = true;
-    prefix("delete", function () {
-        var p = expression(0);
-        if (!p || (p.id !== "." && p.id !== "[")) {
-            warning("Variables should not be deleted.");
-        }
-        this.first = p;
-        return this;
-    }).exps = true;
-
-    prefix("~", function () {
-        if (option.bitwise) {
-            warning("Unexpected '{a}'.", this, "~");
-        }
-        expression(150);
-        return this;
-    });
-
-    prefix("!", function () {
-        this.right = expression(150);
-        this.arity = "unary";
-        if (bang[this.right.id] === true) {
-            warning("Confusing use of '{a}'.", this, "!");
-        }
-        return this;
-    });
-    prefix("typeof", "typeof");
-    prefix("new", function () {
-        var c = expression(155), i;
-        if (c && c.id !== "function") {
-            if (c.identifier) {
-                c["new"] = true;
-                switch (c.value) {
-                case "Number":
-                case "String":
-                case "Boolean":
-                case "Math":
-                case "JSON":
-                    warning("Do not use {a} as a constructor.", prevtoken, c.value);
-                    break;
-                case "Function":
-                    if (!option.evil) {
-                        warning("The Function constructor is eval.");
-                    }
-                    break;
-                case "Date":
-                case "RegExp":
-                    break;
-                default:
-                    if (c.id !== "function") {
-                        i = c.value.substr(0, 1);
-                        if (option.newcap && (i < "A" || i > "Z") && !is_own(global, c.value)) {
-                            warning("A constructor name should start with an uppercase letter.",
-                                token);
-                        }
-                    }
-                }
-            } else {
-                if (c.id !== "." && c.id !== "[" && c.id !== "(") {
-                    warning("Bad constructor.", token);
-                }
-            }
-        } else {
-            if (!option.supernew)
-                warning("Weird construction. Delete 'new'.", this);
-        }
-        adjacent(token, nexttoken);
-        if (nexttoken.id !== "(" && !option.supernew) {
-            warning("Missing '()' invoking a constructor.",
-                token, token.value);
-        }
-        this.first = c;
-        return this;
-    });
-    syntax["new"].exps = true;
-
-    prefix("void").exps = true;
-
-    infix(".", function (left, that) {
-        adjacent(prevtoken, token);
-        nobreak();
-        var m = identifier();
-        if (typeof m === "string") {
-            countMember(m);
-        }
-        that.left = left;
-        that.right = m;
-        if (left && left.value === "arguments" && (m === "callee" || m === "caller")) {
-            if (option.noarg)
-                warning("Avoid arguments.{a}.", left, m);
-            else if (directive["use strict"])
-                error("Strict violation.");
-        } else if (!option.evil && left && left.value === "document" &&
-                (m === "write" || m === "writeln")) {
-            warning("document.write can be a form of eval.", left);
-        }
-        if (!option.evil && (m === "eval" || m === "execScript")) {
-            warning("eval is evil.");
-        }
-        return that;
-    }, 160, true);
-
-    infix("(", function (left, that) {
-        if (prevtoken.id !== "}" && prevtoken.id !== ")") {
-            nobreak(prevtoken, token);
-        }
-        nospace();
-        if (option.immed && !left.immed && left.id === "function") {
-            warning("Wrap an immediate function invocation in parentheses " +
-                "to assist the reader in understanding that the expression " +
-                "is the result of a function, and not the function itself.");
-        }
-        var n = 0,
-            p = [];
-        if (left) {
-            if (left.type === "(identifier)") {
-                if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) {
-                    if ("Number String Boolean Date Object".indexOf(left.value) === -1) {
-                        if (left.value === "Math") {
-                            warning("Math is not a function.", left);
-                        } else if (option.newcap) {
-                            warning("Missing 'new' prefix when invoking a constructor.", left);
-                        }
-                    }
-                }
-            }
-        }
-        if (nexttoken.id !== ")") {
-            for (;;) {
-                p[p.length] = expression(10);
-                n += 1;
-                if (nexttoken.id !== ",") {
-                    break;
-                }
-                comma();
-            }
-        }
-        advance(")");
-        nospace(prevtoken, token);
-        if (typeof left === "object") {
-            if (left.value === "parseInt" && n === 1) {
-                warning("Missing radix parameter.", token);
-            }
-            if (!option.evil) {
-                if (left.value === "eval" || left.value === "Function" ||
-                        left.value === "execScript") {
-                    warning("eval is evil.", left);
-
-                    if (p[0] && [0].id === "(string)") {
-                        addInternalSrc(left, p[0].value);
-                    }
-                } else if (p[0] && p[0].id === "(string)" &&
-                       (left.value === "setTimeout" ||
-                        left.value === "setInterval")) {
-                    warning(
-    "Implied eval is evil. Pass a function instead of a string.", left);
-                    addInternalSrc(left, p[0].value);
-
-                // window.setTimeout/setInterval
-                } else if (p[0] && p[0].id === "(string)" &&
-                       left.value === "." &&
-                       left.left.value === "window" &&
-                       (left.right === "setTimeout" ||
-                        left.right === "setInterval")) {
-                    warning(
-    "Implied eval is evil. Pass a function instead of a string.", left);
-                    addInternalSrc(left, p[0].value);
-                }
-            }
-            if (!left.identifier && left.id !== "." && left.id !== "[" &&
-                    left.id !== "(" && left.id !== "&&" && left.id !== "||" &&
-                    left.id !== "?") {
-                warning("Bad invocation.", left);
-            }
-        }
-        that.left = left;
-        return that;
-    }, 155, true).exps = true;
-
-    prefix("(", function () {
-        nospace();
-        if (nexttoken.id === "function") {
-            nexttoken.immed = true;
-        }
-        var v = expression(0);
-        advance(")", this);
-        nospace(prevtoken, token);
-        if (option.immed && v.id === "function") {
-            if (nexttoken.id !== "(" &&
-              (nexttoken.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) {
-                warning(
-"Do not wrap function literals in parens unless they are to be immediately invoked.",
-                        this);
-            }
-        }
-
-        return v;
-    });
-
-    infix("[", function (left, that) {
-        nobreak(prevtoken, token);
-        nospace();
-        var e = expression(0), s;
-        if (e && e.type === "(string)") {
-            if (!option.evil && (e.value === "eval" || e.value === "execScript")) {
-                warning("eval is evil.", that);
-            }
-            countMember(e.value);
-            if (!option.sub && ix.test(e.value)) {
-                s = syntax[e.value];
-                if (!s || !s.reserved) {
-                    warning("['{a}'] is better written in dot notation.",
-                            prevtoken, e.value);
-                }
-            }
-        }
-        advance("]", that);
-        nospace(prevtoken, token);
-        that.left = left;
-        that.right = e;
-        return that;
-    }, 160, true);
-
-    prefix("[", function () {
-        var b = token.line !== nexttoken.line;
-        this.first = [];
-        if (b) {
-            indent += option.indent;
-            if (nexttoken.from === indent + option.indent) {
-                indent += option.indent;
-            }
-        }
-        while (nexttoken.id !== "(end)") {
-            while (nexttoken.id === ",") {
-                if (!option.es5)
-                    warning("Extra comma.");
-                advance(",");
-            }
-            if (nexttoken.id === "]") {
-                break;
-            }
-            if (b && token.line !== nexttoken.line) {
-                indentation();
-            }
-            this.first.push(expression(10));
-            if (nexttoken.id === ",") {
-                comma();
-                if (nexttoken.id === "]" && !option.es5) {
-                    warning("Extra comma.", token);
-                    break;
-                }
-            } else {
-                break;
-            }
-        }
-        if (b) {
-            indent -= option.indent;
-            indentation();
-        }
-        advance("]", this);
-        return this;
-    }, 160);
-
-
-    function property_name() {
-        var id = optionalidentifier(true);
-        if (!id) {
-            if (nexttoken.id === "(string)") {
-                id = nexttoken.value;
-                advance();
-            } else if (nexttoken.id === "(number)") {
-                id = nexttoken.value.toString();
-                advance();
-            }
-        }
-        return id;
-    }
-
-
-    function functionparams() {
-        var next   = nexttoken;
-        var params = [];
-        var ident;
-
-        advance("(");
-        nospace();
-
-        if (nexttoken.id === ")") {
-            advance(")");
-            return;
-        }
-
-        for (;;) {
-            ident = identifier(true);
-            params.push(ident);
-            addlabel(ident, "unused", token);
-            if (nexttoken.id === ",") {
-                comma();
-            } else {
-                advance(")", next);
-                nospace(prevtoken, token);
-                return params;
-            }
-        }
-    }
-
-
-    function doFunction(name, statement) {
-        var f;
-        var oldOption = option;
-        var oldScope  = scope;
-
-        option = Object.create(option);
-        scope  = Object.create(scope);
-
-        funct = {
-            "(name)"     : name || "\"" + anonname + "\"",
-            "(line)"     : nexttoken.line,
-            "(character)": nexttoken.character,
-            "(context)"  : funct,
-            "(breakage)" : 0,
-            "(loopage)"  : 0,
-            "(metrics)"  : createMetrics(nexttoken),
-            "(scope)"    : scope,
-            "(statement)": statement,
-            "(tokens)"   : {}
-        };
-
-        f = funct;
-        token.funct = funct;
-
-        functions.push(funct);
-
-        if (name) {
-            addlabel(name, "function");
-        }
-
-        funct["(params)"] = functionparams();
-        funct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]);
-
-        block(false, false, true);
-
-        funct["(metrics)"].verifyMaxStatementsPerFunction();
-        funct["(metrics)"].verifyMaxComplexityPerFunction();
-
-        scope = oldScope;
-        option = oldOption;
-        funct["(last)"] = token.line;
-        funct["(lastcharacter)"] = token.character;
-        funct = funct["(context)"];
-
-        return f;
-    }
-
-    function createMetrics(functionStartToken) {
-        return {
-            statementCount: 0,
-            nestedBlockDepth: -1,
-            ComplexityCount: 1,
-            verifyMaxStatementsPerFunction: function () {
-                if (option.maxstatements &&
-                    this.statementCount > option.maxstatements) {
-                    var message = "Too many statements per function (" + this.statementCount + ").";
-                    warning(message, functionStartToken);
-                }
-            },
-
-            verifyMaxParametersPerFunction: function (params) {
-                params = params || [];
-
-                if (option.maxparams && params.length > option.maxparams) {
-                    var message = "Too many parameters per function (" + params.length + ").";
-                    warning(message, functionStartToken);
-                }
-            },
-
-            verifyMaxNestedBlockDepthPerFunction: function () {
-                if (option.maxdepth &&
-                    this.nestedBlockDepth > 0 &&
-                    this.nestedBlockDepth === option.maxdepth + 1) {
-                    var message = "Blocks are nested too deeply (" + this.nestedBlockDepth + ").";
-                    warning(message);
-                }
-            },
-
-            verifyMaxComplexityPerFunction: function () {
-                var max = option.maxcomplexity;
-                var cc = this.ComplexityCount;
-                if (max && cc > max) {
-                    var message = "Cyclomatic complexity is too high per function (" + cc + ").";
-                    warning(message, functionStartToken);
-                }
-            }
-        };
-    }
-
-    function increaseComplexityCount() {
-        funct["(metrics)"].ComplexityCount += 1;
-    }
-
-
-    (function (x) {
-        x.nud = function () {
-            var b, f, i, p, t;
-            var props = {}; // All properties, including accessors
-
-            function saveProperty(name, token) {
-                if (props[name] && is_own(props, name))
-                    warning("Duplicate member '{a}'.", nexttoken, i);
-                else
-                    props[name] = {};
-
-                props[name].basic = true;
-                props[name].basicToken = token;
-            }
-
-            function saveSetter(name, token) {
-                if (props[name] && is_own(props, name)) {
-                    if (props[name].basic || props[name].setter)
-                        warning("Duplicate member '{a}'.", nexttoken, i);
-                } else {
-                    props[name] = {};
-                }
-
-                props[name].setter = true;
-                props[name].setterToken = token;
-            }
-
-            function saveGetter(name) {
-                if (props[name] && is_own(props, name)) {
-                    if (props[name].basic || props[name].getter)
-                        warning("Duplicate member '{a}'.", nexttoken, i);
-                } else {
-                    props[name] = {};
-                }
-
-                props[name].getter = true;
-                props[name].getterToken = token;
-            }
-
-            b = token.line !== nexttoken.line;
-            if (b) {
-                indent += option.indent;
-                if (nexttoken.from === indent + option.indent) {
-                    indent += option.indent;
-                }
-            }
-            for (;;) {
-                if (nexttoken.id === "}") {
-                    break;
-                }
-                if (b) {
-                    indentation();
-                }
-                if (nexttoken.value === "get" && peek().id !== ":") {
-                    advance("get");
-                    if (!option.es5) {
-                        error("get/set are ES5 features.");
-                    }
-                    i = property_name();
-                    if (!i) {
-                        error("Missing property name.");
-                    }
-                    saveGetter(i);
-                    t = nexttoken;
-                    adjacent(token, nexttoken);
-                    f = doFunction();
-                    p = f["(params)"];
-                    if (p) {
-                        warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i);
-                    }
-                    adjacent(token, nexttoken);
-                } else if (nexttoken.value === "set" && peek().id !== ":") {
-                    advance("set");
-                    if (!option.es5) {
-                        error("get/set are ES5 features.");
-                    }
-                    i = property_name();
-                    if (!i) {
-                        error("Missing property name.");
-                    }
-                    saveSetter(i, nexttoken);
-                    t = nexttoken;
-                    adjacent(token, nexttoken);
-                    f = doFunction();
-                    p = f["(params)"];
-                    if (!p || p.length !== 1) {
-                        warning("Expected a single parameter in set {a} function.", t, i);
-                    }
-                } else {
-                    i = property_name();
-                    saveProperty(i, nexttoken);
-                    if (typeof i !== "string") {
-                        break;
-                    }
-                    advance(":");
-                    nonadjacent(token, nexttoken);
-                    expression(10);
-                }
-
-                countMember(i);
-                if (nexttoken.id === ",") {
-                    comma();
-                    if (nexttoken.id === ",") {
-                        warning("Extra comma.", token);
-                    } else if (nexttoken.id === "}" && !option.es5) {
-                        warning("Extra comma.", token);
-                    }
-                } else {
-                    break;
-                }
-            }
-            if (b) {
-                indent -= option.indent;
-                indentation();
-            }
-            advance("}", this);
-
-            // Check for lonely setters if in the ES5 mode.
-            if (option.es5) {
-                for (var name in props) {
-                    if (is_own(props, name) && props[name].setter && !props[name].getter) {
-                        warning("Setter is defined without getter.", props[name].setterToken);
-                    }
-                }
-            }
-            return this;
-        };
-        x.fud = function () {
-            error("Expected to see a statement and instead saw a block.", token);
-        };
-    }(delim("{")));
-
-// This Function is called when esnext option is set to true
-// it adds the `const` statement to JSHINT
-
-    useESNextSyntax = function () {
-        var conststatement = stmt("const", function (prefix) {
-            var id, name, value;
-
-            this.first = [];
-            for (;;) {
-                nonadjacent(token, nexttoken);
-                id = identifier();
-                if (funct[id] === "const") {
-                    warning("const '" + id + "' has already been declared");
-                }
-                if (funct["(global)"] && predefined[id] === false) {
-                    warning("Redefinition of '{a}'.", token, id);
-                }
-                addlabel(id, "const");
-                if (prefix) {
-                    break;
-                }
-                name = token;
-                this.first.push(token);
-
-                if (nexttoken.id !== "=") {
-                    warning("const " +
-                      "'{a}' is initialized to 'undefined'.", token, id);
-                }
-
-                if (nexttoken.id === "=") {
-                    nonadjacent(token, nexttoken);
-                    advance("=");
-                    nonadjacent(token, nexttoken);
-                    if (nexttoken.id === "undefined") {
-                        warning("It is not necessary to initialize " +
-                          "'{a}' to 'undefined'.", token, id);
-                    }
-                    if (peek(0).id === "=" && nexttoken.identifier) {
-                        error("Constant {a} was not declared correctly.",
-                                nexttoken, nexttoken.value);
-                    }
-                    value = expression(0);
-                    name.first = value;
-                }
-
-                if (nexttoken.id !== ",") {
-                    break;
-                }
-                comma();
-            }
-            return this;
-        });
-        conststatement.exps = true;
-    };
-
-    var varstatement = stmt("var", function (prefix) {
-        // JavaScript does not have block scope. It only has function scope. So,
-        // declaring a variable in a block can have unexpected consequences.
-        var id, name, value;
-
-        if (funct["(onevar)"] && option.onevar) {
-            warning("Too many var statements.");
-        } else if (!funct["(global)"]) {
-            funct["(onevar)"] = true;
-        }
-
-        this.first = [];
-
-        for (;;) {
-            nonadjacent(token, nexttoken);
-            id = identifier();
-
-            if (option.esnext && funct[id] === "const") {
-                warning("const '" + id + "' has already been declared");
-            }
-
-            if (funct["(global)"] && predefined[id] === false) {
-                warning("Redefinition of '{a}'.", token, id);
-            }
-
-            addlabel(id, "unused", token);
-
-            if (prefix) {
-                break;
-            }
-
-            name = token;
-            this.first.push(token);
-
-            if (nexttoken.id === "=") {
-                nonadjacent(token, nexttoken);
-                advance("=");
-                nonadjacent(token, nexttoken);
-                if (nexttoken.id === "undefined") {
-                    warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id);
-                }
-                if (peek(0).id === "=" && nexttoken.identifier) {
-                    error("Variable {a} was not declared correctly.",
-                            nexttoken, nexttoken.value);
-                }
-                value = expression(0);
-                name.first = value;
-            }
-            if (nexttoken.id !== ",") {
-                break;
-            }
-            comma();
-        }
-        return this;
-    });
-    varstatement.exps = true;
-
-    blockstmt("function", function () {
-        if (inblock) {
-            warning("Function declarations should not be placed in blocks. " +
-                "Use a function expression or move the statement to the top of " +
-                "the outer function.", token);
-
-        }
-        var i = identifier();
-        if (option.esnext && funct[i] === "const") {
-            warning("const '" + i + "' has already been declared");
-        }
-        adjacent(token, nexttoken);
-        addlabel(i, "unction", token);
-
-        doFunction(i, { statement: true });
-        if (nexttoken.id === "(" && nexttoken.line === token.line) {
-            error(
-"Function declarations are not invocable. Wrap the whole function invocation in parens.");
-        }
-        return this;
-    });
-
-    prefix("function", function () {
-        var i = optionalidentifier();
-        if (i) {
-            adjacent(token, nexttoken);
-        } else {
-            nonadjacent(token, nexttoken);
-        }
-        doFunction(i);
-        if (!option.loopfunc && funct["(loopage)"]) {
-            warning("Don't make functions within a loop.");
-        }
-        return this;
-    });
-
-    blockstmt("if", function () {
-        var t = nexttoken;
-        increaseComplexityCount();
-        advance("(");
-        nonadjacent(this, t);
-        nospace();
-        expression(20);
-        if (nexttoken.id === "=") {
-            if (!option.boss)
-                warning("Expected a conditional expression and instead saw an assignment.");
-            advance("=");
-            expression(20);
-        }
-        advance(")", t);
-        nospace(prevtoken, token);
-        block(true, true);
-        if (nexttoken.id === "else") {
-            nonadjacent(token, nexttoken);
-            advance("else");
-            if (nexttoken.id === "if" || nexttoken.id === "switch") {
-                statement(true);
-            } else {
-                block(true, true);
-            }
-        }
-        return this;
-    });
-
-    blockstmt("try", function () {
-        var b;
-
-        function doCatch() {
-            var oldScope = scope;
-            var e;
-
-            advance("catch");
-            nonadjacent(token, nexttoken);
-            advance("(");
-
-            scope = Object.create(oldScope);
-
-            e = nexttoken.value;
-            if (nexttoken.type !== "(identifier)") {
-                e = null;
-                warning("Expected an identifier and instead saw '{a}'.", nexttoken, e);
-            }
-
-            advance();
-            advance(")");
-
-            funct = {
-                "(name)"     : "(catch)",
-                "(line)"     : nexttoken.line,
-                "(character)": nexttoken.character,
-                "(context)"  : funct,
-                "(breakage)" : funct["(breakage)"],
-                "(loopage)"  : funct["(loopage)"],
-                "(scope)"    : scope,
-                "(statement)": false,
-                "(metrics)"  : createMetrics(nexttoken),
-                "(catch)"    : true,
-                "(tokens)"   : {}
-            };
-
-            if (e) {
-                addlabel(e, "exception");
-            }
-
-            token.funct = funct;
-            functions.push(funct);
-
-            block(false);
-
-            scope = oldScope;
-
-            funct["(last)"] = token.line;
-            funct["(lastcharacter)"] = token.character;
-            funct = funct["(context)"];
-        }
-
-        block(false);
-
-        if (nexttoken.id === "catch") {
-            increaseComplexityCount();
-            doCatch();
-            b = true;
-        }
-
-        if (nexttoken.id === "finally") {
-            advance("finally");
-            block(false);
-            return;
-        } else if (!b) {
-            error("Expected '{a}' and instead saw '{b}'.",
-                    nexttoken, "catch", nexttoken.value);
-        }
-
-        return this;
-    });
-
-    blockstmt("while", function () {
-        var t = nexttoken;
-        funct["(breakage)"] += 1;
-        funct["(loopage)"] += 1;
-        increaseComplexityCount();
-        advance("(");
-        nonadjacent(this, t);
-        nospace();
-        expression(20);
-        if (nexttoken.id === "=") {
-            if (!option.boss)
-                warning("Expected a conditional expression and instead saw an assignment.");
-            advance("=");
-            expression(20);
-        }
-        advance(")", t);
-        nospace(prevtoken, token);
-        block(true, true);
-        funct["(breakage)"] -= 1;
-        funct["(loopage)"] -= 1;
-        return this;
-    }).labelled = true;
-
-    blockstmt("with", function () {
-        var t = nexttoken;
-        if (directive["use strict"]) {
-            error("'with' is not allowed in strict mode.", token);
-        } else if (!option.withstmt) {
-            warning("Don't use 'with'.", token);
-        }
-
-        advance("(");
-        nonadjacent(this, t);
-        nospace();
-        expression(0);
-        advance(")", t);
-        nospace(prevtoken, token);
-        block(true, true);
-
-        return this;
-    });
-
-    blockstmt("switch", function () {
-        var t = nexttoken,
-            g = false;
-        funct["(breakage)"] += 1;
-        advance("(");
-        nonadjacent(this, t);
-        nospace();
-        this.condition = expression(20);
-        advance(")", t);
-        nospace(prevtoken, token);
-        nonadjacent(token, nexttoken);
-        t = nexttoken;
-        advance("{");
-        nonadjacent(token, nexttoken);
-        indent += option.indent;
-        this.cases = [];
-        for (;;) {
-            switch (nexttoken.id) {
-            case "case":
-                switch (funct["(verb)"]) {
-                case "break":
-                case "case":
-                case "continue":
-                case "return":
-                case "switch":
-                case "throw":
-                    break;
-                default:
-                    // You can tell JSHint that you don't use break intentionally by
-                    // adding a comment /* falls through */ on a line just before
-                    // the next `case`.
-                    if (!ft.test(lines[nexttoken.line - 2])) {
-                        warning(
-                            "Expected a 'break' statement before 'case'.",
-                            token);
-                    }
-                }
-                indentation(-option.indent);
-                advance("case");
-                this.cases.push(expression(20));
-                increaseComplexityCount();
-                g = true;
-                advance(":");
-                funct["(verb)"] = "case";
-                break;
-            case "default":
-                switch (funct["(verb)"]) {
-                case "break":
-                case "continue":
-                case "return":
-                case "throw":
-                    break;
-                default:
-                    if (!ft.test(lines[nexttoken.line - 2])) {
-                        warning(
-                            "Expected a 'break' statement before 'default'.",
-                            token);
-                    }
-                }
-                indentation(-option.indent);
-                advance("default");
-                g = true;
-                advance(":");
-                break;
-            case "}":
-                indent -= option.indent;
-                indentation();
-                advance("}", t);
-                if (this.cases.length === 1 || this.condition.id === "true" ||
-                        this.condition.id === "false") {
-                    if (!option.onecase)
-                        warning("This 'switch' should be an 'if'.", this);
-                }
-                funct["(breakage)"] -= 1;
-                funct["(verb)"] = undefined;
-                return;
-            case "(end)":
-                error("Missing '{a}'.", nexttoken, "}");
-                return;
-            default:
-                if (g) {
-                    switch (token.id) {
-                    case ",":
-                        error("Each value should have its own case label.");
-                        return;
-                    case ":":
-                        g = false;
-                        statements();
-                        break;
-                    default:
-                        error("Missing ':' on a case clause.", token);
-                        return;
-                    }
-                } else {
-                    if (token.id === ":") {
-                        advance(":");
-                        error("Unexpected '{a}'.", token, ":");
-                        statements();
-                    } else {
-                        error("Expected '{a}' and instead saw '{b}'.",
-                            nexttoken, "case", nexttoken.value);
-                        return;
-                    }
-                }
-            }
-        }
-    }).labelled = true;
-
-    stmt("debugger", function () {
-        if (!option.debug) {
-            warning("All 'debugger' statements should be removed.");
-        }
-        return this;
-    }).exps = true;
-
-    (function () {
-        var x = stmt("do", function () {
-            funct["(breakage)"] += 1;
-            funct["(loopage)"] += 1;
-            increaseComplexityCount();
-
-            this.first = block(true);
-            advance("while");
-            var t = nexttoken;
-            nonadjacent(token, t);
-            advance("(");
-            nospace();
-            expression(20);
-            if (nexttoken.id === "=") {
-                if (!option.boss)
-                    warning("Expected a conditional expression and instead saw an assignment.");
-                advance("=");
-                expression(20);
-            }
-            advance(")", t);
-            nospace(prevtoken, token);
-            funct["(breakage)"] -= 1;
-            funct["(loopage)"] -= 1;
-            return this;
-        });
-        x.labelled = true;
-        x.exps = true;
-    }());
-
-    blockstmt("for", function () {
-        var s, t = nexttoken;
-        funct["(breakage)"] += 1;
-        funct["(loopage)"] += 1;
-        increaseComplexityCount();
-        advance("(");
-        nonadjacent(this, t);
-        nospace();
-        if (peek(nexttoken.id === "var" ? 1 : 0).id === "in") {
-            if (nexttoken.id === "var") {
-                advance("var");
-                varstatement.fud.call(varstatement, true);
-            } else {
-                switch (funct[nexttoken.value]) {
-                case "unused":
-                    funct[nexttoken.value] = "var";
-                    break;
-                case "var":
-                    break;
-                default:
-                    warning("Bad for in variable '{a}'.",
-                            nexttoken, nexttoken.value);
-                }
-                advance();
-            }
-            advance("in");
-            expression(20);
-            advance(")", t);
-            s = block(true, true);
-            if (option.forin && s && (s.length > 1 || typeof s[0] !== "object" ||
-                    s[0].value !== "if")) {
-                warning("The body of a for in should be wrapped in an if statement to filter " +
-                        "unwanted properties from the prototype.", this);
-            }
-            funct["(breakage)"] -= 1;
-            funct["(loopage)"] -= 1;
-            return this;
-        } else {
-            if (nexttoken.id !== ";") {
-                if (nexttoken.id === "var") {
-                    advance("var");
-                    varstatement.fud.call(varstatement);
-                } else {
-                    for (;;) {
-                        expression(0, "for");
-                        if (nexttoken.id !== ",") {
-                            break;
-                        }
-                        comma();
-                    }
-                }
-            }
-            nolinebreak(token);
-            advance(";");
-            if (nexttoken.id !== ";") {
-                expression(20);
-                if (nexttoken.id === "=") {
-                    if (!option.boss)
-                        warning("Expected a conditional expression and instead saw an assignment.");
-                    advance("=");
-                    expression(20);
-                }
-            }
-            nolinebreak(token);
-            advance(";");
-            if (nexttoken.id === ";") {
-                error("Expected '{a}' and instead saw '{b}'.",
-                        nexttoken, ")", ";");
-            }
-            if (nexttoken.id !== ")") {
-                for (;;) {
-                    expression(0, "for");
-                    if (nexttoken.id !== ",") {
-                        break;
-                    }
-                    comma();
-                }
-            }
-            advance(")", t);
-            nospace(prevtoken, token);
-            block(true, true);
-            funct["(breakage)"] -= 1;
-            funct["(loopage)"] -= 1;
-            return this;
-        }
-    }).labelled = true;
-
-
-    stmt("break", function () {
-        var v = nexttoken.value;
-
-        if (funct["(breakage)"] === 0)
-            warning("Unexpected '{a}'.", nexttoken, this.value);
-
-        if (!option.asi)
-            nolinebreak(this);
-
-        if (nexttoken.id !== ";") {
-            if (token.line === nexttoken.line) {
-                if (funct[v] !== "label") {
-                    warning("'{a}' is not a statement label.", nexttoken, v);
-                } else if (scope[v] !== funct) {
-                    warning("'{a}' is out of scope.", nexttoken, v);
-                }
-                this.first = nexttoken;
-                advance();
-            }
-        }
-        reachable("break");
-        return this;
-    }).exps = true;
-
-
-    stmt("continue", function () {
-        var v = nexttoken.value;
-
-        if (funct["(breakage)"] === 0)
-            warning("Unexpected '{a}'.", nexttoken, this.value);
-
-        if (!option.asi)
-            nolinebreak(this);
-
-        if (nexttoken.id !== ";") {
-            if (token.line === nexttoken.line) {
-                if (funct[v] !== "label") {
-                    warning("'{a}' is not a statement label.", nexttoken, v);
-                } else if (scope[v] !== funct) {
-                    warning("'{a}' is out of scope.", nexttoken, v);
-                }
-                this.first = nexttoken;
-                advance();
-            }
-        } else if (!funct["(loopage)"]) {
-            warning("Unexpected '{a}'.", nexttoken, this.value);
-        }
-        reachable("continue");
-        return this;
-    }).exps = true;
-
-
-    stmt("return", function () {
-        if (this.line === nexttoken.line) {
-            if (nexttoken.id === "(regexp)")
-                warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator.");
-
-            if (nexttoken.id !== ";" && !nexttoken.reach) {
-                nonadjacent(token, nexttoken);
-                if (peek().value === "=" && !option.boss) {
-                    warningAt("Did you mean to return a conditional instead of an assignment?",
-                              token.line, token.character + 1);
-                }
-                this.first = expression(0);
-            }
-        } else if (!option.asi) {
-            nolinebreak(this); // always warn (Line breaking error)
-        }
-        reachable("return");
-        return this;
-    }).exps = true;
-
-
-    stmt("throw", function () {
-        nolinebreak(this);
-        nonadjacent(token, nexttoken);
-        this.first = expression(20);
-        reachable("throw");
-        return this;
-    }).exps = true;
-
-//  Superfluous reserved words
-
-    reserve("class");
-    reserve("const");
-    reserve("enum");
-    reserve("export");
-    reserve("extends");
-    reserve("import");
-    reserve("super");
-
-    reserve("let");
-    reserve("yield");
-    reserve("implements");
-    reserve("interface");
-    reserve("package");
-    reserve("private");
-    reserve("protected");
-    reserve("public");
-    reserve("static");
-
-
-// Parse JSON
-
-    function jsonValue() {
-
-        function jsonObject() {
-            var o = {}, t = nexttoken;
-            advance("{");
-            if (nexttoken.id !== "}") {
-                for (;;) {
-                    if (nexttoken.id === "(end)") {
-                        error("Missing '}' to match '{' from line {a}.",
-                                nexttoken, t.line);
-                    } else if (nexttoken.id === "}") {
-                        warning("Unexpected comma.", token);
-                        break;
-                    } else if (nexttoken.id === ",") {
-                        error("Unexpected comma.", nexttoken);
-                    } else if (nexttoken.id !== "(string)") {
-                        warning("Expected a string and instead saw {a}.",
-                                nexttoken, nexttoken.value);
-                    }
-                    if (o[nexttoken.value] === true) {
-                        warning("Duplicate key '{a}'.",
-                                nexttoken, nexttoken.value);
-                    } else if ((nexttoken.value === "__proto__" &&
-                        !option.proto) || (nexttoken.value === "__iterator__" &&
-                        !option.iterator)) {
-                        warning("The '{a}' key may produce unexpected results.",
-                            nexttoken, nexttoken.value);
-                    } else {
-                        o[nexttoken.value] = true;
-                    }
-                    advance();
-                    advance(":");
-                    jsonValue();
-                    if (nexttoken.id !== ",") {
-                        break;
-                    }
-                    advance(",");
-                }
-            }
-            advance("}");
-        }
-
-        function jsonArray() {
-            var t = nexttoken;
-            advance("[");
-            if (nexttoken.id !== "]") {
-                for (;;) {
-                    if (nexttoken.id === "(end)") {
-                        error("Missing ']' to match '[' from line {a}.",
-                                nexttoken, t.line);
-                    } else if (nexttoken.id === "]") {
-                        warning("Unexpected comma.", token);
-                        break;
-                    } else if (nexttoken.id === ",") {
-                        error("Unexpected comma.", nexttoken);
-                    }
-                    jsonValue();
-                    if (nexttoken.id !== ",") {
-                        break;
-                    }
-                    advance(",");
-                }
-            }
-            advance("]");
-        }
-
-        switch (nexttoken.id) {
-        case "{":
-            jsonObject();
-            break;
-        case "[":
-            jsonArray();
-            break;
-        case "true":
-        case "false":
-        case "null":
-        case "(number)":
-        case "(string)":
-            advance();
-            break;
-        case "-":
-            advance("-");
-            if (token.character !== nexttoken.from) {
-                warning("Unexpected space after '-'.", token);
-            }
-            adjacent(token, nexttoken);
-            advance("(number)");
-            break;
-        default:
-            error("Expected a JSON value.", nexttoken);
-        }
-    }
-
-
-    // The actual JSHINT function itself.
-    var itself = function (s, o, g) {
-        var a, i, k, x;
-        var optionKeys;
-        var newOptionObj = {};
-
-        if (o && o.scope) {
-            JSHINT.scope = o.scope;
-        } else {
-            JSHINT.errors = [];
-            JSHINT.undefs = [];
-            JSHINT.internals = [];
-            JSHINT.blacklist = {};
-            JSHINT.scope = "(main)";
-        }
-
-        predefined = Object.create(standard);
-        declared = Object.create(null);
-        combine(predefined, g || {});
-
-        if (o) {
-            a = o.predef;
-            if (a) {
-                if (!Array.isArray(a) && typeof a === "object") {
-                    a = Object.keys(a);
-                }
-                a.forEach(function (item) {
-                    var slice;
-                    if (item[0] === "-") {
-                        slice = item.slice(1);
-                        JSHINT.blacklist[slice] = slice;
-                    } else {
-                        predefined[item] = true;
-                    }
-                });
-            }
-
-            optionKeys = Object.keys(o);
-            for (x = 0; x < optionKeys.length; x++) {
-                newOptionObj[optionKeys[x]] = o[optionKeys[x]];
-
-                if (optionKeys[x] === "newcap" && o[optionKeys[x]] === false)
-                    newOptionObj["(explicitNewcap)"] = true;
-
-                if (optionKeys[x] === "indent")
-                    newOptionObj.white = true;
-            }
-        }
-
-        option = newOptionObj;
-
-        option.indent = option.indent || 4;
-        option.maxerr = option.maxerr || 50;
-
-        tab = "";
-        for (i = 0; i < option.indent; i += 1) {
-            tab += " ";
-        }
-        indent = 1;
-        global = Object.create(predefined);
-        scope = global;
-        funct = {
-            "(global)":   true,
-            "(name)":     "(global)",
-            "(scope)":    scope,
-            "(breakage)": 0,
-            "(loopage)":  0,
-            "(tokens)":   {},
-            "(metrics)":   createMetrics(nexttoken)
-        };
-        functions = [funct];
-        urls = [];
-        stack = null;
-        member = {};
-        membersOnly = null;
-        implied = {};
-        inblock = false;
-        lookahead = [];
-        jsonmode = false;
-        warnings = 0;
-        lines = [];
-        unuseds = [];
-
-        if (!isString(s) && !Array.isArray(s)) {
-            errorAt("Input is neither a string nor an array of strings.", 0);
-            return false;
-        }
-
-        if (isString(s) && /^\s*$/g.test(s)) {
-            errorAt("Input is an empty string.", 0);
-            return false;
-        }
-
-        if (s.length === 0) {
-            errorAt("Input is an empty array.", 0);
-            return false;
-        }
-
-        lex.init(s);
-
-        prereg = true;
-        directive = {};
-
-        prevtoken = token = nexttoken = syntax["(begin)"];
-
-        // Check options
-        for (var name in o) {
-            if (is_own(o, name)) {
-                checkOption(name, token);
-            }
-        }
-
-        assume();
-
-        // combine the passed globals after we've assumed all our options
-        combine(predefined, g || {});
-
-        //reset values
-        comma.first = true;
-        quotmark = undefined;
-
-        try {
-            advance();
-            switch (nexttoken.id) {
-            case "{":
-            case "[":
-                option.laxbreak = true;
-                jsonmode = true;
-                jsonValue();
-                break;
-            default:
-                directives();
-                if (directive["use strict"] && !option.globalstrict) {
-                    warning("Use the function form of \"use strict\".", prevtoken);
-                }
-
-                statements();
-            }
-            advance((nexttoken && nexttoken.value !== ".")  ? "(end)" : undefined);
-
-            var markDefined = function (name, context) {
-                do {
-                    if (typeof context[name] === "string") {
-                        // JSHINT marks unused variables as 'unused' and
-                        // unused function declaration as 'unction'. This
-                        // code changes such instances back 'var' and
-                        // 'closure' so that the code in JSHINT.data()
-                        // doesn't think they're unused.
-
-                        if (context[name] === "unused")
-                            context[name] = "var";
-                        else if (context[name] === "unction")
-                            context[name] = "closure";
-
-                        return true;
-                    }
-
-                    context = context["(context)"];
-                } while (context);
-
-                return false;
-            };
-
-            var clearImplied = function (name, line) {
-                if (!implied[name])
-                    return;
-
-                var newImplied = [];
-                for (var i = 0; i < implied[name].length; i += 1) {
-                    if (implied[name][i] !== line)
-                        newImplied.push(implied[name][i]);
-                }
-
-                if (newImplied.length === 0)
-                    delete implied[name];
-                else
-                    implied[name] = newImplied;
-            };
-
-            var warnUnused = function (name, token) {
-                var line = token.line;
-                var chr  = token.character;
-
-                if (option.unused)
-                    warningAt("'{a}' is defined but never used.", line, chr, name);
-
-                unuseds.push({
-                    name: name,
-                    line: line,
-                    character: chr
-                });
-            };
-
-            var checkUnused = function (func, key) {
-                var type = func[key];
-                var token = func["(tokens)"][key];
-
-                if (key.charAt(0) === "(")
-                    return;
-
-                if (type !== "unused" && type !== "unction")
-                    return;
-
-                // Params are checked separately from other variables.
-                if (func["(params)"] && func["(params)"].indexOf(key) !== -1)
-                    return;
-
-                warnUnused(key, token);
-            };
-
-            // Check queued 'x is not defined' instances to see if they're still undefined.
-            for (i = 0; i < JSHINT.undefs.length; i += 1) {
-                k = JSHINT.undefs[i].slice(0);
-
-                if (markDefined(k[2].value, k[0])) {
-                    clearImplied(k[2].value, k[2].line);
-                } else {
-                    warning.apply(warning, k.slice(1));
-                }
-            }
-
-            functions.forEach(function (func) {
-                for (var key in func) {
-                    if (is_own(func, key)) {
-                        checkUnused(func, key);
-                    }
-                }
-
-                if (!func["(params)"])
-                    return;
-
-                var params = func["(params)"].slice();
-                var param  = params.pop();
-                var type;
-
-                while (param) {
-                    type = func[param];
-
-                    // 'undefined' is a special case for (function (window, undefined) { ... })();
-                    // patterns.
-
-                    if (param === "undefined")
-                        return;
-
-                    if (type !== "unused" && type !== "unction")
-                        return;
-
-                    warnUnused(param, func["(tokens)"][param]);
-                    param = params.pop();
-                }
-            });
-
-            for (var key in declared) {
-                if (is_own(declared, key) && !is_own(global, key)) {
-                    warnUnused(key, declared[key]);
-                }
-            }
-        } catch (e) {
-            if (e) {
-                var nt = nexttoken || {};
-                JSHINT.errors.push({
-                    raw       : e.raw,
-                    reason    : e.message,
-                    line      : e.line || nt.line,
-                    character : e.character || nt.from
-                }, null);
-            }
-        }
-
-        // Loop over the listed "internals", and check them as well.
-
-        if (JSHINT.scope === "(main)") {
-            o = o || {};
-
-            for (i = 0; i < JSHINT.internals.length; i += 1) {
-                k = JSHINT.internals[i];
-                o.scope = k.elem;
-                itself(k.value, o, g);
-            }
-        }
-
-        return JSHINT.errors.length === 0;
-    };
-
-    // Data summary.
-    itself.data = function () {
-        var data = {
-            functions: [],
-            options: option
-        };
-        var implieds = [];
-        var members = [];
-        var fu, f, i, j, n, globals;
-
-        if (itself.errors.length) {
-            data.errors = itself.errors;
-        }
-
-        if (jsonmode) {
-            data.json = true;
-        }
-
-        for (n in implied) {
-            if (is_own(implied, n)) {
-                implieds.push({
-                    name: n,
-                    line: implied[n]
-                });
-            }
-        }
-
-        if (implieds.length > 0) {
-            data.implieds = implieds;
-        }
-
-        if (urls.length > 0) {
-            data.urls = urls;
-        }
-
-        globals = Object.keys(scope);
-        if (globals.length > 0) {
-            data.globals = globals;
-        }
-
-        for (i = 1; i < functions.length; i += 1) {
-            f = functions[i];
-            fu = {};
-
-            for (j = 0; j < functionicity.length; j += 1) {
-                fu[functionicity[j]] = [];
-            }
-
-            for (j = 0; j < functionicity.length; j += 1) {
-                if (fu[functionicity[j]].length === 0) {
-                    delete fu[functionicity[j]];
-                }
-            }
-
-            fu.name = f["(name)"];
-            fu.param = f["(params)"];
-            fu.line = f["(line)"];
-            fu.character = f["(character)"];
-            fu.last = f["(last)"];
-            fu.lastcharacter = f["(lastcharacter)"];
-            data.functions.push(fu);
-        }
-
-        if (unuseds.length > 0) {
-            data.unused = unuseds;
-        }
-
-        members = [];
-        for (n in member) {
-            if (typeof member[n] === "number") {
-                data.member = member;
-                break;
-            }
-        }
-
-        return data;
-    };
-
-    itself.jshint = itself;
-
-    return itself;
-}());
-
-// Make JSHINT a Node module, if possible.
-if (typeof exports === "object" && exports) {
-    exports.JSHINT = JSHINT;
-}
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.css b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.css
deleted file mode 100644
index d7fc0c8e..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.css
+++ /dev/null
@@ -1,244 +0,0 @@
-/**
- * QUnit v1.11.0 - A JavaScript Unit Testing Framework
- *
- * http://qunitjs.com
- *
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-/** Font Family and Sizes */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
-	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
-}
-
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
-#qunit-tests { font-size: smaller; }
-
-
-/** Resets */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
-	margin: 0;
-	padding: 0;
-}
-
-
-/** Header */
-
-#qunit-header {
-	padding: 0.5em 0 0.5em 1em;
-
-	color: #8699a4;
-	background-color: #0d3349;
-
-	font-size: 1.5em;
-	line-height: 1em;
-	font-weight: normal;
-
-	border-radius: 5px 5px 0 0;
-	-moz-border-radius: 5px 5px 0 0;
-	-webkit-border-top-right-radius: 5px;
-	-webkit-border-top-left-radius: 5px;
-}
-
-#qunit-header a {
-	text-decoration: none;
-	color: #c2ccd1;
-}
-
-#qunit-header a:hover,
-#qunit-header a:focus {
-	color: #fff;
-}
-
-#qunit-testrunner-toolbar label {
-	display: inline-block;
-	padding: 0 .5em 0 .1em;
-}
-
-#qunit-banner {
-	height: 5px;
-}
-
-#qunit-testrunner-toolbar {
-	padding: 0.5em 0 0.5em 2em;
-	color: #5E740B;
-	background-color: #eee;
-	overflow: hidden;
-}
-
-#qunit-userAgent {
-	padding: 0.5em 0 0.5em 2.5em;
-	background-color: #2b81af;
-	color: #fff;
-	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
-}
-
-#qunit-modulefilter-container {
-	float: right;
-}
-
-/** Tests: Pass/Fail */
-
-#qunit-tests {
-	list-style-position: inside;
-}
-
-#qunit-tests li {
-	padding: 0.4em 0.5em 0.4em 2.5em;
-	border-bottom: 1px solid #fff;
-	list-style-position: inside;
-}
-
-#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running  {
-	display: none;
-}
-
-#qunit-tests li strong {
-	cursor: pointer;
-}
-
-#qunit-tests li a {
-	padding: 0.5em;
-	color: #c2ccd1;
-	text-decoration: none;
-}
-#qunit-tests li a:hover,
-#qunit-tests li a:focus {
-	color: #000;
-}
-
-#qunit-tests li .runtime {
-	float: right;
-	font-size: smaller;
-}
-
-.qunit-assert-list {
-	margin-top: 0.5em;
-	padding: 0.5em;
-
-	background-color: #fff;
-
-	border-radius: 5px;
-	-moz-border-radius: 5px;
-	-webkit-border-radius: 5px;
-}
-
-.qunit-collapsed {
-	display: none;
-}
-
-#qunit-tests table {
-	border-collapse: collapse;
-	margin-top: .2em;
-}
-
-#qunit-tests th {
-	text-align: right;
-	vertical-align: top;
-	padding: 0 .5em 0 0;
-}
-
-#qunit-tests td {
-	vertical-align: top;
-}
-
-#qunit-tests pre {
-	margin: 0;
-	white-space: pre-wrap;
-	word-wrap: break-word;
-}
-
-#qunit-tests del {
-	background-color: #e0f2be;
-	color: #374e0c;
-	text-decoration: none;
-}
-
-#qunit-tests ins {
-	background-color: #ffcaca;
-	color: #500;
-	text-decoration: none;
-}
-
-/*** Test Counts */
-
-#qunit-tests b.counts                       { color: black; }
-#qunit-tests b.passed                       { color: #5E740B; }
-#qunit-tests b.failed                       { color: #710909; }
-
-#qunit-tests li li {
-	padding: 5px;
-	background-color: #fff;
-	border-bottom: none;
-	list-style-position: inside;
-}
-
-/*** Passing Styles */
-
-#qunit-tests li li.pass {
-	color: #3c510c;
-	background-color: #fff;
-	border-left: 10px solid #C6E746;
-}
-
-#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
-#qunit-tests .pass .test-name               { color: #366097; }
-
-#qunit-tests .pass .test-actual,
-#qunit-tests .pass .test-expected           { color: #999999; }
-
-#qunit-banner.qunit-pass                    { background-color: #C6E746; }
-
-/*** Failing Styles */
-
-#qunit-tests li li.fail {
-	color: #710909;
-	background-color: #fff;
-	border-left: 10px solid #EE5757;
-	white-space: pre;
-}
-
-#qunit-tests > li:last-child {
-	border-radius: 0 0 5px 5px;
-	-moz-border-radius: 0 0 5px 5px;
-	-webkit-border-bottom-right-radius: 5px;
-	-webkit-border-bottom-left-radius: 5px;
-}
-
-#qunit-tests .fail                          { color: #000000; background-color: #EE5757; }
-#qunit-tests .fail .test-name,
-#qunit-tests .fail .module-name             { color: #000000; }
-
-#qunit-tests .fail .test-actual             { color: #EE5757; }
-#qunit-tests .fail .test-expected           { color: green;   }
-
-#qunit-banner.qunit-fail                    { background-color: #EE5757; }
-
-
-/** Result */
-
-#qunit-testresult {
-	padding: 0.5em 0.5em 0.5em 2.5em;
-
-	color: #2b81af;
-	background-color: #D2E0E6;
-
-	border-bottom: 1px solid white;
-}
-#qunit-testresult .module-name {
-	font-weight: bold;
-}
-
-/** Fixture */
-
-#qunit-fixture {
-	position: absolute;
-	top: -10000px;
-	left: -10000px;
-	width: 1000px;
-	height: 1000px;
-}
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.js
deleted file mode 100644
index 302545f4..00000000
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/external/qunit.js
+++ /dev/null
@@ -1,2152 +0,0 @@
-/**
- * QUnit v1.11.0 - A JavaScript Unit Testing Framework
- *
- * http://qunitjs.com
- *
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- */
-
-(function( window ) {
-
-var QUnit,
-	assert,
-	config,
-	onErrorFnPrev,
-	testId = 0,
-	fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""),
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	// Keep a local reference to Date (GH-283)
-	Date = window.Date,
-	defined = {
-		setTimeout: typeof window.setTimeout !== "undefined",
-		sessionStorage: (function() {
-			var x = "qunit-test-string";
-			try {
-				sessionStorage.setItem( x, x );
-				sessionStorage.removeItem( x );
-				return true;
-			} catch( e ) {
-				return false;
-			}
-		}())
-	},
-	/**
-	 * Provides a normalized error string, correcting an issue
-	 * with IE 7 (and prior) where Error.prototype.toString is
-	 * not properly implemented
-	 *
-	 * Based on http://es5.github.com/#x15.11.4.4
-	 *
-	 * @param {String|Error} error
-	 * @return {String} error message
-	 */
-	errorString = function( error ) {
-		var name, message,
-			errorString = error.toString();
-		if ( errorString.substring( 0, 7 ) === "[object" ) {
-			name = error.name ? error.name.toString() : "Error";
-			message = error.message ? error.message.toString() : "";
-			if ( name && message ) {
-				return name + ": " + message;
-			} else if ( name ) {
-				return name;
-			} else if ( message ) {
-				return message;
-			} else {
-				return "Error";
-			}
-		} else {
-			return errorString;
-		}
-	},
-	/**
-	 * Makes a clone of an object using only Array or Object as base,
-	 * and copies over the own enumerable properties.
-	 *
-	 * @param {Object} obj
-	 * @return {Object} New object with only the own properties (recursively).
-	 */
-	objectValues = function( obj ) {
-		// Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392.
-		/*jshint newcap: false */
-		var key, val,
-			vals = QUnit.is( "array", obj ) ? [] : {};
-		for ( key in obj ) {
-			if ( hasOwn.call( obj, key ) ) {
-				val = obj[key];
-				vals[key] = val === Object(val) ? objectValues(val) : val;
-			}
-		}
-		return vals;
-	};
-
-function Test( settings ) {
-	extend( this, settings );
-	this.assertions = [];
-	this.testNumber = ++Test.count;
-}
-
-Test.count = 0;
-
-Test.prototype = {
-	init: function() {
-		var a, b, li,
-			tests = id( "qunit-tests" );
-
-		if ( tests ) {
-			b = document.createElement( "strong" );
-			b.innerHTML = this.nameHtml;
-
-			// `a` initialized at top of scope
-			a = document.createElement( "a" );
-			a.innerHTML = "Rerun";
-			a.href = QUnit.url({ testNumber: this.testNumber });
-
-			li = document.createElement( "li" );
-			li.appendChild( b );
-			li.appendChild( a );
-			li.className = "running";
-			li.id = this.id = "qunit-test-output" + testId++;
-
-			tests.appendChild( li );
-		}
-	},
-	setup: function() {
-		if ( this.module !== config.previousModule ) {
-			if ( config.previousModule ) {
-				runLoggingCallbacks( "moduleDone", QUnit, {
-					name: config.previousModule,
-					failed: config.moduleStats.bad,
-					passed: config.moduleStats.all - config.moduleStats.bad,
-					total: config.moduleStats.all
-				});
-			}
-			config.previousModule = this.module;
-			config.moduleStats = { all: 0, bad: 0 };
-			runLoggingCallbacks( "moduleStart", QUnit, {
-				name: this.module
-			});
-		} else if ( config.autorun ) {
-			runLoggingCallbacks( "moduleStart", QUnit, {
-				name: this.module
-			});
-		}
-
-		config.current = this;
-
-		this.testEnvironment = extend({
-			setup: function() {},
-			teardown: function() {}
-		}, this.moduleTestEnvironment );
-
-		this.started = +new Date();
-		runLoggingCallbacks( "testStart", QUnit, {
-			name: this.testName,
-			module: this.module
-		});
-
-		// allow utility functions to access the current test environment
-		// TODO why??
-		QUnit.current_testEnvironment = this.testEnvironment;
-
-		if ( !config.pollution ) {
-			saveGlobal();
-		}
-		if ( config.notrycatch ) {
-			this.testEnvironment.setup.call( this.testEnvironment );
-			return;
-		}
-		try {
-			this.testEnvironment.setup.call( this.testEnvironment );
-		} catch( e ) {
-			QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
-		}
-	},
-	run: function() {
-		config.current = this;
-
-		var running = id( "qunit-testresult" );
-
-		if ( running ) {
-			running.innerHTML = "Running: <br/>" + this.nameHtml;
-		}
-
-		if ( this.async ) {
-			QUnit.stop();
-		}
-
-		this.callbackStarted = +new Date();
-
-		if ( config.notrycatch ) {
-			this.callback.call( this.testEnvironment, QUnit.assert );
-			this.callbackRuntime = +new Date() - this.callbackStarted;
-			return;
-		}
-
-		try {
-			this.callback.call( this.testEnvironment, QUnit.assert );
-			this.callbackRuntime = +new Date() - this.callbackStarted;
-		} catch( e ) {
-			this.callbackRuntime = +new Date() - this.callbackStarted;
-
-			QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
-			// else next test will carry the responsibility
-			saveGlobal();
-
-			// Restart the tests if they're blocking
-			if ( config.blocking ) {
-				QUnit.start();
-			}
-		}
-	},
-	teardown: function() {
-		config.current = this;
-		if ( config.notrycatch ) {
-			if ( typeof this.callbackRuntime === "undefined" ) {
-				this.callbackRuntime = +new Date() - this.callbackStarted;
-			}
-			this.testEnvironment.teardown.call( this.testEnvironment );
-			return;
-		} else {
-			try {
-				this.testEnvironment.teardown.call( this.testEnvironment );
-			} catch( e ) {
-				QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) );
-			}
-		}
-		checkPollution();
-	},
-	finish: function() {
-		config.current = this;
-		if ( config.requireExpects && this.expected === null ) {
-			QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack );
-		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
-			QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack );
-		} else if ( this.expected === null && !this.assertions.length ) {
-			QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack );
-		}
-
-		var i, assertion, a, b, time, li, ol,
-			test = this,
-			good = 0,
-			bad = 0,
-			tests = id( "qunit-tests" );
-
-		this.runtime = +new Date() - this.started;
-		config.stats.all += this.assertions.length;
-		config.moduleStats.all += this.assertions.length;
-
-		if ( tests ) {
-			ol = document.createElement( "ol" );
-			ol.className = "qunit-assert-list";
-
-			for ( i = 0; i < this.assertions.length; i++ ) {
-				assertion = this.assertions[i];
-
-				li = document.createElement( "li" );
-				li.className = assertion.result ? "pass" : "fail";
-				li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" );
-				ol.appendChild( li );
-
-				if ( assertion.result ) {
-					good++;
-				} else {
-					bad++;
-					config.stats.bad++;
-					config.moduleStats.bad++;
-				}
-			}
-
-			// store result when possible
-			if ( QUnit.config.reorder && defined.sessionStorage ) {
-				if ( bad ) {
-					sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad );
-				} else {
-					sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName );
-				}
-			}
-
-			if ( bad === 0 ) {
-				addClass( ol, "qunit-collapsed" );
-			}
-
-			// `b` initialized at top of scope
-			b = document.createElement( "strong" );
-			b.innerHTML = this.nameHtml + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>";
-
-			addEvent(b, "click", function() {
-				var next = b.parentNode.lastChild,
-					collapsed = hasClass( next, "qunit-collapsed" );
-				( collapsed ? removeClass : addClass )( next, "qunit-collapsed" );
-			});
-
-			addEvent(b, "dblclick", function( e ) {
-				var target = e && e.target ? e.target : window.event.srcElement;
-				if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) {
-					target = target.parentNode;
-				}
-				if ( window.location && target.nodeName.toLowerCase() === "strong" ) {
-					window.location = QUnit.url({ testNumber: test.testNumber });
-				}
-			});
-
-			// `time` initialized at top of scope
-			time = document.createElement( "span" );
-			time.className = "runtime";
-			time.innerHTML = this.runtime + " ms";
-
-			// `li` initialized at top of scope
-			li = id( this.id );
-			li.className = bad ? "fail" : "pass";
-			li.removeChild( li.firstChild );
-			a = li.firstChild;
-			li.appendChild( b );
-			li.appendChild( a );
-			li.appendChild( time );
-			li.appendChild( ol );
-
-		} else {
-			for ( i = 0; i < this.assertions.length; i++ ) {
-				if ( !this.assertions[i].result ) {
-					bad++;
-					config.stats.bad++;
-					config.moduleStats.bad++;
-				}
-			}
-		}
-
-		runLoggingCallbacks( "testDone", QUnit, {
-			name: this.testName,
-			module: this.module,
-			failed: bad,
-			passed: this.assertions.length - bad,
-			total: this.assertions.length,
-			duration: this.runtime
-		});
-
-		QUnit.reset();
-
-		config.current = undefined;
-	},
-
-	queue: function() {
-		var bad,
-			test = this;
-
-		synchronize(function() {
-			test.init();
-		});
-		function run() {
-			// each of these can by async
-			synchronize(function() {
-				test.setup();
-			});
-			synchronize(function() {
-				test.run();
-			});
-			synchronize(function() {
-				test.teardown();
-			});
-			synchronize(function() {
-				test.finish();
-			});
-		}
-
-		// `bad` initialized at top of scope
-		// defer when previous test run passed, if storage is available
-		bad = QUnit.config.reorder && defined.sessionStorage &&
-						+sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName );
-
-		if ( bad ) {
-			run();
-		} else {
-			synchronize( run, true );
-		}
-	}
-};
-
-// Root QUnit object.
-// `QUnit` initialized at top of scope
-QUnit = {
-
-	// call on start of module test to prepend name to all tests
-	module: function( name, testEnvironment ) {
-		config.currentModule = name;
-		config.currentModuleTestEnvironment = testEnvironment;
-		config.modules[name] = true;
-	},
-
-	asyncTest: function( testName, expected, callback ) {
-		if ( arguments.length === 2 ) {
-			callback = expected;
-			expected = null;
-		}
-
-		QUnit.test( testName, expected, callback, true );
-	},
-
-	test: function( testName, expected, callback, async ) {
-		var test,
-			nameHtml = "<span class='test-name'>" + escapeText( testName ) + "</span>";
-
-		if ( arguments.length === 2 ) {
-			callback = expected;
-			expected = null;
-		}
-
-		if ( config.currentModule ) {
-			nameHtml = "<span class='module-name'>" + escapeText( config.currentModule ) + "</span>: " + nameHtml;
-		}
-
-		test = new Test({
-			nameHtml: nameHtml,
-			testName: testName,
-			expected: expected,
-			async: async,
-			callback: callback,
-			module: config.currentModule,
-			moduleTestEnvironment: config.currentModuleTestEnvironment,
-			stack: sourceFromStacktrace( 2 )
-		});
-
-		if ( !validTest( test ) ) {
-			return;
-		}
-
-		test.queue();
-	},
-
-	// Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
-	expect: function( asserts ) {
-		if (arguments.length === 1) {
-			config.current.expected = asserts;
-		} else {
-			return config.current.expected;
-		}
-	},
-
-	start: function( count ) {
-		// QUnit hasn't been initialized yet.
-		// Note: RequireJS (et al) may delay onLoad
-		if ( config.semaphore === undefined ) {
-			QUnit.begin(function() {
-				// This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first
-				setTimeout(function() {
-					QUnit.start( count );
-				});
-			});
-			return;
-		}
-
-		config.semaphore -= count || 1;
-		// don't start until equal number of stop-calls
-		if ( config.semaphore > 0 ) {
-			return;
-		}
-		// ignore if start is called more often then stop
-		if ( config.semaphore < 0 ) {
-			config.semaphore = 0;
-			QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) );
-			return;
-		}
-		// A slight delay, to avoid any current callbacks
-		if ( defined.setTimeout ) {
-			window.setTimeout(function() {
-				if ( config.semaphore > 0 ) {
-					return;
-				}
-				if ( config.timeout ) {
-					clearTimeout( config.timeout );
-				}
-
-				config.blocking = false;
-				process( true );
-			}, 13);
-		} else {
-			config.blocking = false;
-			process( true );
-		}
-	},
-
-	stop: function( count ) {
-		config.semaphore += count || 1;
-		config.blocking = true;
-
-		if ( config.testTimeout && defined.setTimeout ) {
-			clearTimeout( config.timeout );
-			config.timeout = window.setTimeout(function() {
-				QUnit.ok( false, "Test timed out" );
-				config.semaphore = 1;
-				QUnit.start();
-			}, config.testTimeout );
-		}
-	}
-};
-
-// `assert` initialized at top of scope
-// Asssert helpers
-// All of these must either call QUnit.push() or manually do:
-// - runLoggingCallbacks( "log", .. );
-// - config.current.assertions.push({ .. });
-// We attach it to the QUnit object *after* we expose the public API,
-// otherwise `assert` will become a global variable in browsers (#341).
-assert = {
-	/**
-	 * Asserts rough true-ish result.
-	 * @name ok
-	 * @function
-	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
-	 */
-	ok: function( result, msg ) {
-		if ( !config.current ) {
-			throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) );
-		}
-		result = !!result;
-
-		var source,
-			details = {
-				module: config.current.module,
-				name: config.current.testName,
-				result: result,
-				message: msg
-			};
-
-		msg = escapeText( msg || (result ? "okay" : "failed" ) );
-		msg = "<span class='test-message'>" + msg + "</span>";
-
-		if ( !result ) {
-			source = sourceFromStacktrace( 2 );
-			if ( source ) {
-				details.source = source;
-				msg += "<table><tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr></table>";
-			}
-		}
-		runLoggingCallbacks( "log", QUnit, details );
-		config.current.assertions.push({
-			result: result,
-			message: msg
-		});
-	},
-
-	/**
-	 * Assert that the first two arguments are equal, with an optional message.
-	 * Prints out both actual and expected values.
-	 * @name equal
-	 * @function
-	 * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" );
-	 */
-	equal: function( actual, expected, message ) {
-		/*jshint eqeqeq:false */
-		QUnit.push( expected == actual, actual, expected, message );
-	},
-
-	/**
-	 * @name notEqual
-	 * @function
-	 */
-	notEqual: function( actual, expected, message ) {
-		/*jshint eqeqeq:false */
-		QUnit.push( expected != actual, actual, expected, message );
-	},
-
-	/**
-	 * @name propEqual
-	 * @function
-	 */
-	propEqual: function( actual, expected, message ) {
-		actual = objectValues(actual);
-		expected = objectValues(expected);
-		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
-	},
-
-	/**
-	 * @name notPropEqual
-	 * @function
-	 */
-	notPropEqual: function( actual, expected, message ) {
-		actual = objectValues(actual);
-		expected = objectValues(expected);
-		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
-	},
-
-	/**
-	 * @name deepEqual
-	 * @function
-	 */
-	deepEqual: function( actual, expected, message ) {
-		QUnit.push( QUnit.equiv(actual, expected), actual, expected, message );
-	},
-
-	/**
-	 * @name notDeepEqual
-	 * @function
-	 */
-	notDeepEqual: function( actual, expected, message ) {
-		QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message );
-	},
-
-	/**
-	 * @name strictEqual
-	 * @function
-	 */
-	strictEqual: function( actual, expected, message ) {
-		QUnit.push( expected === actual, actual, expected, message );
-	},
-
-	/**
-	 * @name notStrictEqual
-	 * @function
-	 */
-	notStrictEqual: function( actual, expected, message ) {
-		QUnit.push( expected !== actual, actual, expected, message );
-	},
-
-	"throws": function( block, expected, message ) {
-		var actual,
-			expectedOutput = expected,
-			ok = false;
-
-		// 'expected' is optional
-		if ( typeof expected === "string" ) {
-			message = expected;
-			expected = null;
-		}
-
-		config.current.ignoreGlobalErrors = true;
-		try {
-			block.call( config.current.testEnvironment );
-		} catch (e) {
-			actual = e;
-		}
-		config.current.ignoreGlobalErrors = false;
-
-		if ( actual ) {
-			// we don't want to validate thrown error
-			if ( !expected ) {
-				ok = true;
-				expectedOutput = null;
-			// expected is a regexp
-			} else if ( QUnit.objectType( expected ) === "regexp" ) {
-				ok = expected.test( errorString( actual ) );
-			// expected is a constructor
-			} else if ( actual instanceof expected ) {
-				ok = true;
-			// expected is a validation function which returns true is validation passed
-			} else if ( expected.call( {}, actual ) === true ) {
-				expectedOutput = null;
-				ok = true;
-			}
-
-			QUnit.push( ok, actual, expectedOutput, message );
-		} else {
-			QUnit.pushFailure( message, null, 'No exception was thrown.' );
-		}
-	}
-};
-
-/**
- * @deprecate since 1.8.0
- * Kept assertion helpers in root for backwards compatibility.
- */
-extend( QUnit, assert );
-
-/**
- * @deprecated since 1.9.0
- * Kept root "raises()" for backwards compatibility.
- * (Note that we don't introduce assert.raises).
- */
-QUnit.raises = assert[ "throws" ];
-
-/**
- * @deprecated since 1.0.0, replaced with error pushes since 1.3.0
- * Kept to avoid TypeErrors for undefined methods.
- */
-QUnit.equals = function() {
-	QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" );
-};
-QUnit.same = function() {
-	QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" );
-};
-
-// We want access to the constructor's prototype
-(function() {
-	function F() {}
-	F.prototype = QUnit;
-	QUnit = new F();
-	// Make F QUnit's constructor so that we can add to the prototype later
-	QUnit.constructor = F;
-}());
-
-/**
- * Config object: Maintain internal state
- * Later exposed as QUnit.config
- * `config` initialized at top of scope
- */
-config = {
-	// The queue of tests to run
-	queue: [],
-
-	// block until document ready
-	blocking: true,
-
-	// when enabled, show only failing tests
-	// gets persisted through sessionStorage and can be changed in UI via checkbox
-	hidepassed: false,
-
-	// by default, run previously failed tests first
-	// very useful in combination with "Hide passed tests" checked
-	reorder: true,
-
-	// by default, modify document.title when suite is done
-	altertitle: true,
-
-	// when enabled, all tests must call expect()
-	requireExpects: false,
-
-	// add checkboxes that are persisted in the query-string
-	// when enabled, the id is set to `true` as a `QUnit.config` property
-	urlConfig: [
-		{
-			id: "noglobals",
-			label: "Check for Globals",
-			tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings."
-		},
-		{
-			id: "notrycatch",
-			label: "No try-catch",
-			tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings."
-		}
-	],
-
-	// Set of all modules.
-	modules: {},
-
-	// logging callback queues
-	begin: [],
-	done: [],
-	log: [],
-	testStart: [],
-	testDone: [],
-	moduleStart: [],
-	moduleDone: []
-};
-
-// Export global variables, unless an 'exports' object exists,
-// in that case we assume we're in CommonJS (dealt with on the bottom of the script)
-if ( typeof exports === "undefined" ) {
-	extend( window, QUnit );
-
-	// Expose QUnit object
-	window.QUnit = QUnit;
-}
-
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
-	var i,
-		location = window.location || { search: "", protocol: "file:" },
-		params = location.search.slice( 1 ).split( "&" ),
-		length = params.length,
-		urlParams = {},
-		current;
-
-	if ( params[ 0 ] ) {
-		for ( i = 0; i < length; i++ ) {
-			current = params[ i ].split( "=" );
-			current[ 0 ] = decodeURIComponent( current[ 0 ] );
-			// allow just a key to turn on a flag, e.g., test.html?noglobals
-			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
-			urlParams[ current[ 0 ] ] = current[ 1 ];
-		}
-	}
-
-	QUnit.urlParams = urlParams;
-
-	// String search anywhere in moduleName+testName
-	config.filter = urlParams.filter;
-
-	// Exact match of the module name
-	config.module = urlParams.module;
-
-	config.testNumber = parseInt( urlParams.testNumber, 10 ) || null;
-
-	// Figure out if we're running the tests from a server or not
-	QUnit.isLocal = location.protocol === "file:";
-}());
-
-// Extend QUnit object,
-// these after set here because they should not be exposed as global functions
-extend( QUnit, {
-	assert: assert,
-
-	config: config,
-
-	// Initialize the configuration options
-	init: function() {
-		extend( config, {
-			stats: { all: 0, bad: 0 },
-			moduleStats: { all: 0, bad: 0 },
-			started: +new Date(),
-			updateRate: 1000,
-			blocking: false,
-			autostart: true,
-			autorun: false,
-			filter: "",
-			queue: [],
-			semaphore: 1
-		});
-
-		var tests, banner, result,
-			qunit = id( "qunit" );
-
-		if ( qunit ) {
-			qunit.innerHTML =
-				"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
-				"<h2 id='qunit-banner'></h2>" +
-				"<div id='qunit-testrunner-toolbar'></div>" +
-				"<h2 id='qunit-userAgent'></h2>" +
-				"<ol id='qunit-tests'></ol>";
-		}
-
-		tests = id( "qunit-tests" );
-		banner = id( "qunit-banner" );
-		result = id( "qunit-testresult" );
-
-		if ( tests ) {
-			tests.innerHTML = "";
-		}
-
-		if ( banner ) {
-			banner.className = "";
-		}
-
-		if ( result ) {
-			result.parentNode.removeChild( result );
-		}
-
-		if ( tests ) {
-			result = document.createElement( "p" );
-			result.id = "qunit-testresult";
-			result.className = "result";
-			tests.parentNode.insertBefore( result, tests );
-			result.innerHTML = "Running...<br/>&nbsp;";
-		}
-	},
-
-	// Resets the test setup. Useful for tests that modify the DOM.
-	reset: function() {
-		var fixture = id( "qunit-fixture" );
-		if ( fixture ) {
-			fixture.innerHTML = config.fixture;
-		}
-	},
-
-	// Trigger an event on an element.
-	// @example triggerEvent( document.body, "click" );
-	triggerEvent: function( elem, type, event ) {
-		if ( document.createEvent ) {
-			event = document.createEvent( "MouseEvents" );
-			event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
-				0, 0, 0, 0, 0, false, false, false, false, 0, null);
-
-			elem.dispatchEvent( event );
-		} else if ( elem.fireEvent ) {
-			elem.fireEvent( "on" + type );
-		}
-	},
-
-	// Safe object type checking
-	is: function( type, obj ) {
-		return QUnit.objectType( obj ) === type;
-	},
-
-	objectType: function( obj ) {
-		if ( typeof obj === "undefined" ) {
-				return "undefined";
-		// consider: typeof null === object
-		}
-		if ( obj === null ) {
-				return "null";
-		}
-
-		var match = toString.call( obj ).match(/^\[object\s(.*)\]$/),
-			type = match && match[1] || "";
-
-		switch ( type ) {
-			case "Number":
-				if ( isNaN(obj) ) {
-					return "nan";
-				}
-				return "number";
-			case "String":
-			case "Boolean":
-			case "Array":
-			case "Date":
-			case "RegExp":
-			case "Function":
-				return type.toLowerCase();
-		}
-		if ( typeof obj === "object" ) {
-			return "object";
-		}
-		return undefined;
-	},
-
-	push: function( result, actual, expected, message ) {
-		if ( !config.current ) {
-			throw new Error( "assertion outside test context, was " + sourceFromStacktrace() );
-		}
-
-		var output, source,
-			details = {
-				module: config.current.module,
-				name: config.current.testName,
-				result: result,
-				message: message,
-				actual: actual,
-				expected: expected
-			};
-
-		message = escapeText( message ) || ( result ? "okay" : "failed" );
-		message = "<span class='test-message'>" + message + "</span>";
-		output = message;
-
-		if ( !result ) {
-			expected = escapeText( QUnit.jsDump.parse(expected) );
-			actual = escapeText( QUnit.jsDump.parse(actual) );
-			output += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" + expected + "</pre></td></tr>";
-
-			if ( actual !== expected ) {
-				output += "<tr class='test-actual'><th>Result: </th><td><pre>" + actual + "</pre></td></tr>";
-				output += "<tr class='test-diff'><th>Diff: </th><td><pre>" + QUnit.diff( expected, actual ) + "</pre></td></tr>";
-			}
-
-			source = sourceFromStacktrace();
-
-			if ( source ) {
-				details.source = source;
-				output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
-			}
-
-			output += "</table>";
-		}
-
-		runLoggingCallbacks( "log", QUnit, details );
-
-		config.current.assertions.push({
-			result: !!result,
-			message: output
-		});
-	},
-
-	pushFailure: function( message, source, actual ) {
-		if ( !config.current ) {
-			throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) );
-		}
-
-		var output,
-			details = {
-				module: config.current.module,
-				name: config.current.testName,
-				result: false,
-				message: message
-			};
-
-		message = escapeText( message ) || "error";
-		message = "<span class='test-message'>" + message + "</span>";
-		output = message;
-
-		output += "<table>";
-
-		if ( actual ) {
-			output += "<tr class='test-actual'><th>Result: </th><td><pre>" + escapeText( actual ) + "</pre></td></tr>";
-		}
-
-		if ( source ) {
-			details.source = source;
-			output += "<tr class='test-source'><th>Source: </th><td><pre>" + escapeText( source ) + "</pre></td></tr>";
-		}
-
-		output += "</table>";
-
-		runLoggingCallbacks( "log", QUnit, details );
-
-		config.current.assertions.push({
-			result: false,
-			message: output
-		});
-	},
-
-	url: function( params ) {
-		params = extend( extend( {}, QUnit.urlParams ), params );
-		var key,
-			querystring = "?";
-
-		for ( key in params ) {
-			if ( !hasOwn.call( params, key ) ) {
-				continue;
-			}
-			querystring += encodeURIComponent( key ) + "=" +
-				encodeURIComponent( params[ key ] ) + "&";
-		}
-		return window.location.protocol + "//" + window.location.host +
-			window.location.pathname + querystring.slice( 0, -1 );
-	},
-
-	extend: extend,
-	id: id,
-	addEvent: addEvent
-	// load, equiv, jsDump, diff: Attached later
-});
-
-/**
- * @deprecated: Created for backwards compatibility with test runner that set the hook function
- * into QUnit.{hook}, instead of invoking it and passing the hook function.
- * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here.
- * Doing this allows us to tell if the following methods have been overwritten on the actual
- * QUnit object.
- */
-extend( QUnit.constructor.prototype, {
-
-	// Logging callbacks; all receive a single argument with the listed properties
-	// run test/logs.html for any related changes
-	begin: registerLoggingCallback( "begin" ),
-
-	// done: { failed, passed, total, runtime }
-	done: registerLoggingCallback( "done" ),
-
-	// log: { result, actual, expected, message }
-	log: registerLoggingCallback( "log" ),
-
-	// testStart: { name }
-	testStart: registerLoggingCallback( "testStart" ),
-
-	// testDone: { name, failed, passed, total, duration }
-	testDone: registerLoggingCallback( "testDone" ),
-
-	// moduleStart: { name }
-	moduleStart: registerLoggingCallback( "moduleStart" ),
-
-	// moduleDone: { name, failed, passed, total }
-	moduleDone: registerLoggingCallback( "moduleDone" )
-});
-
-if ( typeof document === "undefined" || document.readyState === "complete" ) {
-	config.autorun = true;
-}
-
-QUnit.load = function() {
-	runLoggingCallbacks( "begin", QUnit, {} );
-
-	// Initialize the config, saving the execution queue
-	var banner, filter, i, label, len, main, ol, toolbar, userAgent, val,
-		urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter,
-		numModules = 0,
-		moduleFilterHtml = "",
-		urlConfigHtml = "",
-		oldconfig = extend( {}, config );
-
-	QUnit.init();
-	extend(config, oldconfig);
-
-	config.blocking = false;
-
-	len = config.urlConfig.length;
-
-	for ( i = 0; i < len; i++ ) {
-		val = config.urlConfig[i];
-		if ( typeof val === "string" ) {
-			val = {
-				id: val,
-				label: val,
-				tooltip: "[no tooltip available]"
-			};
-		}
-		config[ val.id ] = QUnit.urlParams[ val.id ];
-		urlConfigHtml += "<input id='qunit-urlconfig-" + escapeText( val.id ) +
-			"' name='" + escapeText( val.id ) +
-			"' type='checkbox'" + ( config[ val.id ] ? " checked='checked'" : "" ) +
-			" title='" + escapeText( val.tooltip ) +
-			"'><label for='qunit-urlconfig-" + escapeText( val.id ) +
-			"' title='" + escapeText( val.tooltip ) + "'>" + val.label + "</label>";
-	}
-
-	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label><select id='qunit-modulefilter' name='modulefilter'><option value='' " +
-		( config.module === undefined  ? "selected='selected'" : "" ) +
-		">< All Modules ></option>";
-
-	for ( i in config.modules ) {
-		if ( config.modules.hasOwnProperty( i ) ) {
-			numModules += 1;
-			moduleFilterHtml += "<option value='" + escapeText( encodeURIComponent(i) ) + "' " +
-				( config.module === i ? "selected='selected'" : "" ) +
-				">" + escapeText(i) + "</option>";
-		}
-	}
-	moduleFilterHtml += "</select>";
-
-	// `userAgent` initialized at top of scope
-	userAgent = id( "qunit-userAgent" );
-	if ( userAgent ) {
-		userAgent.innerHTML = navigator.userAgent;
-	}
-
-	// `banner` initialized at top of scope
-	banner = id( "qunit-header" );
-	if ( banner ) {
-		banner.innerHTML = "<a href='" + QUnit.url({ filter: undefined, module: undefined, testNumber: undefined }) + "'>" + banner.innerHTML + "</a> ";
-	}
-
-	// `toolbar` initialized at top of scope
-	toolbar = id( "qunit-testrunner-toolbar" );
-	if ( toolbar ) {
-		// `filter` initialized at top of scope
-		filter = document.createElement( "input" );
-		filter.type = "checkbox";
-		filter.id = "qunit-filter-pass";
-
-		addEvent( filter, "click", function() {
-			var tmp,
-				ol = document.getElementById( "qunit-tests" );
-
-			if ( filter.checked ) {
-				ol.className = ol.className + " hidepass";
-			} else {
-				tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " ";
-				ol.className = tmp.replace( / hidepass /, " " );
-			}
-			if ( defined.sessionStorage ) {
-				if (filter.checked) {
-					sessionStorage.setItem( "qunit-filter-passed-tests", "true" );
-				} else {
-					sessionStorage.removeItem( "qunit-filter-passed-tests" );
-				}
-			}
-		});
-
-		if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) {
-			filter.checked = true;
-			// `ol` initialized at top of scope
-			ol = document.getElementById( "qunit-tests" );
-			ol.className = ol.className + " hidepass";
-		}
-		toolbar.appendChild( filter );
-
-		// `label` initialized at top of scope
-		label = document.createElement( "label" );
-		label.setAttribute( "for", "qunit-filter-pass" );
-		label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." );
-		label.innerHTML = "Hide passed tests";
-		toolbar.appendChild( label );
-
-		urlConfigCheckboxesContainer = document.createElement("span");
-		urlConfigCheckboxesContainer.innerHTML = urlConfigHtml;
-		urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input");
-		// For oldIE support:
-		// * Add handlers to the individual elements instead of the container
-		// * Use "click" instead of "change"
-		// * Fallback from event.target to event.srcElement
-		addEvents( urlConfigCheckboxes, "click", function( event ) {
-			var params = {},
-				target = event.target || event.srcElement;
-			params[ target.name ] = target.checked ? true : undefined;
-			window.location = QUnit.url( params );
-		});
-		toolbar.appendChild( urlConfigCheckboxesContainer );
-
-		if (numModules > 1) {
-			moduleFilter = document.createElement( 'span' );
-			moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' );
-			moduleFilter.innerHTML = moduleFilterHtml;
-			addEvent( moduleFilter.lastChild, "change", function() {
-				var selectBox = moduleFilter.getElementsByTagName("select")[0],
-					selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value);
-
-				window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } );
-			});
-			toolbar.appendChild(moduleFilter);
-		}
-	}
-
-	// `main` initialized at top of scope
-	main = id( "qunit-fixture" );
-	if ( main ) {
-		config.fixture = main.innerHTML;
-	}
-
-	if ( config.autostart ) {
-		QUnit.start();
-	}
-};
-
-addEvent( window, "load", QUnit.load );
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will surpress the default browser handler,
-// returning false will let it run.
-window.onerror = function ( error, filePath, linerNr ) {
-	var ret = false;
-	if ( onErrorFnPrev ) {
-		ret = onErrorFnPrev( error, filePath, linerNr );
-	}
-
-	// Treat return value as window.onerror itself does,
-	// Only do our handling if not surpressed.
-	if ( ret !== true ) {
-		if ( QUnit.config.current ) {
-			if ( QUnit.config.current.ignoreGlobalErrors ) {
-				return true;
-			}
-			QUnit.pushFailure( error, filePath + ":" + linerNr );
-		} else {
-			QUnit.test( "global failure", extend( function() {
-				QUnit.pushFailure( error, filePath + ":" + linerNr );
-			}, { validTest: validTest } ) );
-		}
-		return false;
-	}
-
-	return ret;
-};
-
-function done() {
-	config.autorun = true;
-
-	// Log the last module results
-	if ( config.currentModule ) {
-		runLoggingCallbacks( "moduleDone", QUnit, {
-			name: config.currentModule,
-			failed: config.moduleStats.bad,
-			passed: config.moduleStats.all - config.moduleStats.bad,
-			total: config.moduleStats.all
-		});
-	}
-
-	var i, key,
-		banner = id( "qunit-banner" ),
-		tests = id( "qunit-tests" ),
-		runtime = +new Date() - config.started,
-		passed = config.stats.all - config.stats.bad,
-		html = [
-			"Tests completed in ",
-			runtime,
-			" milliseconds.<br/>",
-			"<span class='passed'>",
-			passed,
-			"</span> assertions of <span class='total'>",
-			config.stats.all,
-			"</span> passed, <span class='failed'>",
-			config.stats.bad,
-			"</span> failed."
-		].join( "" );
-
-	if ( banner ) {
-		banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" );
-	}
-
-	if ( tests ) {
-		id( "qunit-testresult" ).innerHTML = html;
-	}
-
-	if ( config.altertitle && typeof document !== "undefined" && document.title ) {
-		// show ✖ for good, ✔ for bad suite result in title
-		// use escape sequences in case file gets loaded with non-utf-8-charset
-		document.title = [
-			( config.stats.bad ? "\u2716" : "\u2714" ),
-			document.title.replace( /^[\u2714\u2716] /i, "" )
-		].join( " " );
-	}
-
-	// clear own sessionStorage items if all tests passed
-	if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) {
-		// `key` & `i` initialized at top of scope
-		for ( i = 0; i < sessionStorage.length; i++ ) {
-			key = sessionStorage.key( i++ );
-			if ( key.indexOf( "qunit-test-" ) === 0 ) {
-				sessionStorage.removeItem( key );
-			}
-		}
-	}
-
-	// scroll back to top to show results
-	if ( window.scrollTo ) {
-		window.scrollTo(0, 0);
-	}
-
-	runLoggingCallbacks( "done", QUnit, {
-		failed: config.stats.bad,
-		passed: passed,
-		total: config.stats.all,
-		runtime: runtime
-	});
-}
-
-/** @return Boolean: true if this test should be ran */
-function validTest( test ) {
-	var include,
-		filter = config.filter && config.filter.toLowerCase(),
-		module = config.module && config.module.toLowerCase(),
-		fullName = (test.module + ": " + test.testName).toLowerCase();
-
-	// Internally-generated tests are always valid
-	if ( test.callback && test.callback.validTest === validTest ) {
-		delete test.callback.validTest;
-		return true;
-	}
-
-	if ( config.testNumber ) {
-		return test.testNumber === config.testNumber;
-	}
-
-	if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) {
-		return false;
-	}
-
-	if ( !filter ) {
-		return true;
-	}
-
-	include = filter.charAt( 0 ) !== "!";
-	if ( !include ) {
-		filter = filter.slice( 1 );
-	}
-
-	// If the filter matches, we need to honour include
-	if ( fullName.indexOf( filter ) !== -1 ) {
-		return include;
-	}
-
-	// Otherwise, do the opposite
-	return !include;
-}
-
-// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions)
-// Later Safari and IE10 are supposed to support error.stack as well
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
-	offset = offset === undefined ? 3 : offset;
-
-	var stack, include, i;
-
-	if ( e.stacktrace ) {
-		// Opera
-		return e.stacktrace.split( "\n" )[ offset + 3 ];
-	} else if ( e.stack ) {
-		// Firefox, Chrome
-		stack = e.stack.split( "\n" );
-		if (/^error$/i.test( stack[0] ) ) {
-			stack.shift();
-		}
-		if ( fileName ) {
-			include = [];
-			for ( i = offset; i < stack.length; i++ ) {
-				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
-					break;
-				}
-				include.push( stack[ i ] );
-			}
-			if ( include.length ) {
-				return include.join( "\n" );
-			}
-		}
-		return stack[ offset ];
-	} else if ( e.sourceURL ) {
-		// Safari, PhantomJS
-		// hopefully one day Safari provides actual stacktraces
-		// exclude useless self-reference for generated Error objects
-		if ( /qunit.js$/.test( e.sourceURL ) ) {
-			return;
-		}
-		// for actual exceptions, this is useful
-		return e.sourceURL + ":" + e.line;
-	}
-}
-function sourceFromStacktrace( offset ) {
-	try {
-		throw new Error();
-	} catch ( e ) {
-		return extractStacktrace( e, offset );
-	}
-}
-
-/**
- * Escape text for attribute or text content.
- */
-function escapeText( s ) {
-	if ( !s ) {
-		return "";
-	}
-	s = s + "";
-	// Both single quotes and double quotes (for attributes)
-	return s.replace( /['"<>&]/g, function( s ) {
-		switch( s ) {
-			case '\'':
-				return '&#039;';
-			case '"':
-				return '&quot;';
-			case '<':
-				return '&lt;';
-			case '>':
-				return '&gt;';
-			case '&':
-				return '&amp;';
-		}
-	});
-}
-
-function synchronize( callback, last ) {
-	config.queue.push( callback );
-
-	if ( config.autorun && !config.blocking ) {
-		process( last );
-	}
-}
-
-function process( last ) {
-	function next() {
-		process( last );
-	}
-	var start = new Date().getTime();
-	config.depth = config.depth ? config.depth + 1 : 1;
-
-	while ( config.queue.length && !config.blocking ) {
-		if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) {
-			config.queue.shift()();
-		} else {
-			window.setTimeout( next, 13 );
-			break;
-		}
-	}
-	config.depth--;
-	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
-		done();
-	}
-}
-
-function saveGlobal() {
-	config.pollution = [];
-
-	if ( config.noglobals ) {
-		for ( var key in window ) {
-			// in Opera sometimes DOM element ids show up here, ignore them
-			if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) {
-				continue;
-			}
-			config.pollution.push( key );
-		}
-	}
-}
-
-function checkPollution() {
-	var newGlobals,
-		deletedGlobals,
-		old = config.pollution;
-
-	saveGlobal();
-
-	newGlobals = diff( config.pollution, old );
-	if ( newGlobals.length > 0 ) {
-		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") );
-	}
-
-	deletedGlobals = diff( old, config.pollution );
-	if ( deletedGlobals.length > 0 ) {
-		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") );
-	}
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
-	var i, j,
-		result = a.slice();
-
-	for ( i = 0; i < result.length; i++ ) {
-		for ( j = 0; j < b.length; j++ ) {
-			if ( result[i] === b[j] ) {
-				result.splice( i, 1 );
-				i--;
-				break;
-			}
-		}
-	}
-	return result;
-}
-
-function extend( a, b ) {
-	for ( var prop in b ) {
-		if ( b[ prop ] === undefined ) {
-			delete a[ prop ];
-
-		// Avoid "Member not found" error in IE8 caused by setting window.constructor
-		} else if ( prop !== "constructor" || a !== window ) {
-			a[ prop ] = b[ prop ];
-		}
-	}
-
-	return a;
-}
-
-/**
- * @param {HTMLElement} elem
- * @param {string} type
- * @param {Function} fn
- */
-function addEvent( elem, type, fn ) {
-	// Standards-based browsers
-	if ( elem.addEventListener ) {
-		elem.addEventListener( type, fn, false );
-	// IE
-	} else {
-		elem.attachEvent( "on" + type, fn );
-	}
-}
-
-/**
- * @param {Array|NodeList} elems
- * @param {string} type
- * @param {Function} fn
- */
-function addEvents( elems, type, fn ) {
-	var i = elems.length;
-	while ( i-- ) {
-		addEvent( elems[i], type, fn );
-	}
-}
-
-function hasClass( elem, name ) {
-	return (" " + elem.className + " ").indexOf(" " + name + " ") > -1;
-}
-
-function addClass( elem, name ) {
-	if ( !hasClass( elem, name ) ) {
-		elem.className += (elem.className ? " " : "") + name;
-	}
-}
-
-function removeClass( elem, name ) {
-	var set = " " + elem.className + " ";
-	// Class name may appear multiple times
-	while ( set.indexOf(" " + name + " ") > -1 ) {
-		set = set.replace(" " + name + " " , " ");
-	}
-	// If possible, trim it for prettiness, but not neccecarily
-	elem.className = window.jQuery ? jQuery.trim( set ) : ( set.trim ? set.trim() : set );
-}
-
-function id( name ) {
-	return !!( typeof document !== "undefined" && document && document.getElementById ) &&
-		document.getElementById( name );
-}
-
-function registerLoggingCallback( key ) {
-	return function( callback ) {
-		config[key].push( callback );
-	};
-}
-
-// Supports deprecated method of completely overwriting logging callbacks
-function runLoggingCallbacks( key, scope, args ) {
-	var i, callbacks;
-	if ( QUnit.hasOwnProperty( key ) ) {
-		QUnit[ key ].call(scope, args );
-	} else {
-		callbacks = config[ key ];
-		for ( i = 0; i < callbacks.length; i++ ) {
-			callbacks[ i ].call( scope, args );
-		}
-	}
-}
-
-// Test for equality any JavaScript type.
-// Author: Philippe Rathé <prathe@gmail.com>
-QUnit.equiv = (function() {
-
-	// Call the o related callback with the given arguments.
-	function bindCallbacks( o, callbacks, args ) {
-		var prop = QUnit.objectType( o );
-		if ( prop ) {
-			if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
-				return callbacks[ prop ].apply( callbacks, args );
-			} else {
-				return callbacks[ prop ]; // or undefined
-			}
-		}
-	}
-
-	// the real equiv function
-	var innerEquiv,
-		// stack to decide between skip/abort functions
-		callers = [],
-		// stack to avoiding loops from circular referencing
-		parents = [],
-
-		getProto = Object.getPrototypeOf || function ( obj ) {
-			return obj.__proto__;
-		},
-		callbacks = (function () {
-
-			// for string, boolean, number and null
-			function useStrictEquality( b, a ) {
-				/*jshint eqeqeq:false */
-				if ( b instanceof a.constructor || a instanceof b.constructor ) {
-					// to catch short annotaion VS 'new' annotation of a
-					// declaration
-					// e.g. var i = 1;
-					// var j = new Number(1);
-					return a == b;
-				} else {
-					return a === b;
-				}
-			}
-
-			return {
-				"string": useStrictEquality,
-				"boolean": useStrictEquality,
-				"number": useStrictEquality,
-				"null": useStrictEquality,
-				"undefined": useStrictEquality,
-
-				"nan": function( b ) {
-					return isNaN( b );
-				},
-
-				"date": function( b, a ) {
-					return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
-				},
-
-				"regexp": function( b, a ) {
-					return QUnit.objectType( b ) === "regexp" &&
-						// the regex itself
-						a.source === b.source &&
-						// and its modifers
-						a.global === b.global &&
-						// (gmi) ...
-						a.ignoreCase === b.ignoreCase &&
-						a.multiline === b.multiline &&
-						a.sticky === b.sticky;
-				},
-
-				// - skip when the property is a method of an instance (OOP)
-				// - abort otherwise,
-				// initial === would have catch identical references anyway
-				"function": function() {
-					var caller = callers[callers.length - 1];
-					return caller !== Object && typeof caller !== "undefined";
-				},
-
-				"array": function( b, a ) {
-					var i, j, len, loop;
-
-					// b could be an object literal here
-					if ( QUnit.objectType( b ) !== "array" ) {
-						return false;
-					}
-
-					len = a.length;
-					if ( len !== b.length ) {
-						// safe and faster
-						return false;
-					}
-
-					// track reference to avoid circular references
-					parents.push( a );
-					for ( i = 0; i < len; i++ ) {
-						loop = false;
-						for ( j = 0; j < parents.length; j++ ) {
-							if ( parents[j] === a[i] ) {
-								loop = true;// dont rewalk array
-							}
-						}
-						if ( !loop && !innerEquiv(a[i], b[i]) ) {
-							parents.pop();
-							return false;
-						}
-					}
-					parents.pop();
-					return true;
-				},
-
-				"object": function( b, a ) {
-					var i, j, loop,
-						// Default to true
-						eq = true,
-						aProperties = [],
-						bProperties = [];
-
-					// comparing constructors is more strict than using
-					// instanceof
-					if ( a.constructor !== b.constructor ) {
-						// Allow objects with no prototype to be equivalent to
-						// objects with Object as their constructor.
-						if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) ||
-							( getProto(b) === null && getProto(a) === Object.prototype ) ) ) {
-								return false;
-						}
-					}
-
-					// stack constructor before traversing properties
-					callers.push( a.constructor );
-					// track reference to avoid circular references
-					parents.push( a );
-
-					for ( i in a ) { // be strict: don't ensures hasOwnProperty
-									// and go deep
-						loop = false;
-						for ( j = 0; j < parents.length; j++ ) {
-							if ( parents[j] === a[i] ) {
-								// don't go down the same path twice
-								loop = true;
-							}
-						}
-						aProperties.push(i); // collect a's properties
-
-						if (!loop && !innerEquiv( a[i], b[i] ) ) {
-							eq = false;
-							break;
-						}
-					}
-
-					callers.pop(); // unstack, we are done
-					parents.pop();
-
-					for ( i in b ) {
-						bProperties.push( i ); // collect b's properties
-					}
-
-					// Ensures identical properties name
-					return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
-				}
-			};
-		}());
-
-	innerEquiv = function() { // can take multiple arguments
-		var args = [].slice.apply( arguments );
-		if ( args.length < 2 ) {
-			return true; // end transition
-		}
-
-		return (function( a, b ) {
-			if ( a === b ) {
-				return true; // catch the most you can
-			} else if ( a === null || b === null || typeof a === "undefined" ||
-					typeof b === "undefined" ||
-					QUnit.objectType(a) !== QUnit.objectType(b) ) {
-				return false; // don't lose time with error prone cases
-			} else {
-				return bindCallbacks(a, callbacks, [ b, a ]);
-			}
-
-			// apply transition with (1..n) arguments
-		}( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) );
-	};
-
-	return innerEquiv;
-}());
-
-/**
- * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
- * http://flesler.blogspot.com Licensed under BSD
- * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
- *
- * @projectDescription Advanced and extensible data dumping for Javascript.
- * @version 1.0.0
- * @author Ariel Flesler
- * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
- */
-QUnit.jsDump = (function() {
-	function quote( str ) {
-		return '"' + str.toString().replace( /"/g, '\\"' ) + '"';
-	}
-	function literal( o ) {
-		return o + "";
-	}
-	function join( pre, arr, post ) {
-		var s = jsDump.separator(),
-			base = jsDump.indent(),
-			inner = jsDump.indent(1);
-		if ( arr.join ) {
-			arr = arr.join( "," + s + inner );
-		}
-		if ( !arr ) {
-			return pre + post;
-		}
-		return [ pre, inner + arr, base + post ].join(s);
-	}
-	function array( arr, stack ) {
-		var i = arr.length, ret = new Array(i);
-		this.up();
-		while ( i-- ) {
-			ret[i] = this.parse( arr[i] , undefined , stack);
-		}
-		this.down();
-		return join( "[", ret, "]" );
-	}
-
-	var reName = /^function (\w+)/,
-		jsDump = {
-			// type is used mostly internally, you can fix a (custom)type in advance
-			parse: function( obj, type, stack ) {
-				stack = stack || [ ];
-				var inStack, res,
-					parser = this.parsers[ type || this.typeOf(obj) ];
-
-				type = typeof parser;
-				inStack = inArray( obj, stack );
-
-				if ( inStack !== -1 ) {
-					return "recursion(" + (inStack - stack.length) + ")";
-				}
-				if ( type === "function" )  {
-					stack.push( obj );
-					res = parser.call( this, obj, stack );
-					stack.pop();
-					return res;
-				}
-				return ( type === "string" ) ? parser : this.parsers.error;
-			},
-			typeOf: function( obj ) {
-				var type;
-				if ( obj === null ) {
-					type = "null";
-				} else if ( typeof obj === "undefined" ) {
-					type = "undefined";
-				} else if ( QUnit.is( "regexp", obj) ) {
-					type = "regexp";
-				} else if ( QUnit.is( "date", obj) ) {
-					type = "date";
-				} else if ( QUnit.is( "function", obj) ) {
-					type = "function";
-				} else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) {
-					type = "window";
-				} else if ( obj.nodeType === 9 ) {
-					type = "document";
-				} else if ( obj.nodeType ) {
-					type = "node";
-				} else if (
-					// native arrays
-					toString.call( obj ) === "[object Array]" ||
-					// NodeList objects
-					( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) )
-				) {
-					type = "array";
-				} else if ( obj.constructor === Error.prototype.constructor ) {
-					type = "error";
-				} else {
-					type = typeof obj;
-				}
-				return type;
-			},
-			separator: function() {
-				return this.multiline ?	this.HTML ? "<br />" : "\n" : this.HTML ? "&nbsp;" : " ";
-			},
-			// extra can be a number, shortcut for increasing-calling-decreasing
-			indent: function( extra ) {
-				if ( !this.multiline ) {
-					return "";
-				}
-				var chr = this.indentChar;
-				if ( this.HTML ) {
-					chr = chr.replace( /\t/g, "   " ).replace( / /g, "&nbsp;" );
-				}
-				return new Array( this._depth_ + (extra||0) ).join(chr);
-			},
-			up: function( a ) {
-				this._depth_ += a || 1;
-			},
-			down: function( a ) {
-				this._depth_ -= a || 1;
-			},
-			setParser: function( name, parser ) {
-				this.parsers[name] = parser;
-			},
-			// The next 3 are exposed so you can use them
-			quote: quote,
-			literal: literal,
-			join: join,
-			//
-			_depth_: 1,
-			// This is the list of parsers, to modify them, use jsDump.setParser
-			parsers: {
-				window: "[Window]",
-				document: "[Document]",
-				error: function(error) {
-					return "Error(\"" + error.message + "\")";
-				},
-				unknown: "[Unknown]",
-				"null": "null",
-				"undefined": "undefined",
-				"function": function( fn ) {
-					var ret = "function",
-						// functions never have name in IE
-						name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1];
-
-					if ( name ) {
-						ret += " " + name;
-					}
-					ret += "( ";
-
-					ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" );
-					return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" );
-				},
-				array: array,
-				nodelist: array,
-				"arguments": array,
-				object: function( map, stack ) {
-					var ret = [ ], keys, key, val, i;
-					QUnit.jsDump.up();
-					keys = [];
-					for ( key in map ) {
-						keys.push( key );
-					}
-					keys.sort();
-					for ( i = 0; i < keys.length; i++ ) {
-						key = keys[ i ];
-						val = map[ key ];
-						ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) );
-					}
-					QUnit.jsDump.down();
-					return join( "{", ret, "}" );
-				},
-				node: function( node ) {
-					var len, i, val,
-						open = QUnit.jsDump.HTML ? "&lt;" : "<",
-						close = QUnit.jsDump.HTML ? "&gt;" : ">",
-						tag = node.nodeName.toLowerCase(),
-						ret = open + tag,
-						attrs = node.attributes;
-
-					if ( attrs ) {
-						for ( i = 0, len = attrs.length; i < len; i++ ) {
-							val = attrs[i].nodeValue;
-							// IE6 includes all attributes in .attributes, even ones not explicitly set.
-							// Those have values like undefined, null, 0, false, "" or "inherit".
-							if ( val && val !== "inherit" ) {
-								ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" );
-							}
-						}
-					}
-					ret += close;
-
-					// Show content of TextNode or CDATASection
-					if ( node.nodeType === 3 || node.nodeType === 4 ) {
-						ret += node.nodeValue;
-					}
-
-					return ret + open + "/" + tag + close;
-				},
-				// function calls it internally, it's the arguments part of the function
-				functionArgs: function( fn ) {
-					var args,
-						l = fn.length;
-
-					if ( !l ) {
-						return "";
-					}
-
-					args = new Array(l);
-					while ( l-- ) {
-						// 97 is 'a'
-						args[l] = String.fromCharCode(97+l);
-					}
-					return " " + args.join( ", " ) + " ";
-				},
-				// object calls it internally, the key part of an item in a map
-				key: quote,
-				// function calls it internally, it's the content of the function
-				functionCode: "[code]",
-				// node calls it internally, it's an html attribute value
-				attribute: quote,
-				string: quote,
-				date: quote,
-				regexp: literal,
-				number: literal,
-				"boolean": literal
-			},
-			// if true, entities are escaped ( <, >, \t, space and \n )
-			HTML: false,
-			// indentation unit
-			indentChar: "  ",
-			// if true, items in a collection, are separated by a \n, else just a space.
-			multiline: true
-		};
-
-	return jsDump;
-}());
-
-// from jquery.js
-function inArray( elem, array ) {
-	if ( array.indexOf ) {
-		return array.indexOf( elem );
-	}
-
-	for ( var i = 0, length = array.length; i < length; i++ ) {
-		if ( array[ i ] === elem ) {
-			return i;
-		}
-	}
-
-	return -1;
-}
-
-/*
- * Javascript Diff Algorithm
- *  By John Resig (http://ejohn.org/)
- *  Modified by Chu Alan "sprite"
- *
- * Released under the MIT license.
- *
- * More Info:
- *  http://ejohn.org/projects/javascript-diff-algorithm/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
- */
-QUnit.diff = (function() {
-	/*jshint eqeqeq:false, eqnull:true */
-	function diff( o, n ) {
-		var i,
-			ns = {},
-			os = {};
-
-		for ( i = 0; i < n.length; i++ ) {
-			if ( !hasOwn.call( ns, n[i] ) ) {
-				ns[ n[i] ] = {
-					rows: [],
-					o: null
-				};
-			}
-			ns[ n[i] ].rows.push( i );
-		}
-
-		for ( i = 0; i < o.length; i++ ) {
-			if ( !hasOwn.call( os, o[i] ) ) {
-				os[ o[i] ] = {
-					rows: [],
-					n: null
-				};
-			}
-			os[ o[i] ].rows.push( i );
-		}
-
-		for ( i in ns ) {
-			if ( !hasOwn.call( ns, i ) ) {
-				continue;
-			}
-			if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) {
-				n[ ns[i].rows[0] ] = {
-					text: n[ ns[i].rows[0] ],
-					row: os[i].rows[0]
-				};
-				o[ os[i].rows[0] ] = {
-					text: o[ os[i].rows[0] ],
-					row: ns[i].rows[0]
-				};
-			}
-		}
-
-		for ( i = 0; i < n.length - 1; i++ ) {
-			if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null &&
-						n[ i + 1 ] == o[ n[i].row + 1 ] ) {
-
-				n[ i + 1 ] = {
-					text: n[ i + 1 ],
-					row: n[i].row + 1
-				};
-				o[ n[i].row + 1 ] = {
-					text: o[ n[i].row + 1 ],
-					row: i + 1
-				};
-			}
-		}
-
-		for ( i = n.length - 1; i > 0; i-- ) {
-			if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null &&
-						n[ i - 1 ] == o[ n[i].row - 1 ]) {
-
-				n[ i - 1 ] = {
-					text: n[ i - 1 ],
-					row: n[i].row - 1
-				};
-				o[ n[i].row - 1 ] = {
-					text: o[ n[i].row - 1 ],
-					row: i - 1
-				};
-			}
-		}
-
-		return {
-			o: o,
-			n: n
-		};
-	}
-
-	return function( o, n ) {
-		o = o.replace( /\s+$/, "" );
-		n = n.replace( /\s+$/, "" );
-
-		var i, pre,
-			str = "",
-			out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ),
-			oSpace = o.match(/\s+/g),
-			nSpace = n.match(/\s+/g);
-
-		if ( oSpace == null ) {
-			oSpace = [ " " ];
-		}
-		else {
-			oSpace.push( " " );
-		}
-
-		if ( nSpace == null ) {
-			nSpace = [ " " ];
-		}
-		else {
-			nSpace.push( " " );
-		}
-
-		if ( out.n.length === 0 ) {
-			for ( i = 0; i < out.o.length; i++ ) {
-				str += "<del>" + out.o[i] + oSpace[i] + "</del>";
-			}
-		}
-		else {
-			if ( out.n[0].text == null ) {
-				for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) {
-					str += "<del>" + out.o[n] + oSpace[n] + "</del>";
-				}
-			}
-
-			for ( i = 0; i < out.n.length; i++ ) {
-				if (out.n[i].text == null) {
-					str += "<ins>" + out.n[i] + nSpace[i] + "</ins>";
-				}
-				else {
-					// `pre` initialized at top of scope
-					pre = "";
-
-					for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) {
-						pre += "<del>" + out.o[n] + oSpace[n] + "</del>";
-					}
-					str += " " + out.n[i].text + nSpace[i] + pre;
-				}
-			}
-		}
-
-		return str;
-	};
-}());
-
-// for CommonJS enviroments, export everything
-if ( typeof exports !== "undefined" ) {
-	extend( exports, QUnit );
-}
-
-// get at whatever the global object is, like window in browsers
-}( (function() {return this;}.call()) ));
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.accordion.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.accordion.js
index dbec1c05..20eecc4f 100644
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.accordion.js
+++ b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/jquery.ui.accordion.js
@@ -31,7 +31,7 @@ $.widget( "ui.accordion", {
 		collapsible: false,
 		event: "click",
 		header: "> li > :first-child,> :not(li):even",
-		heightStyle: "auto",
+		heightStyle: "content",
 		icons: {
 			activeHeader: "ui-icon-triangle-1-s",
 			header: "ui-icon-triangle-1-e"
diff --git a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js
index 9dd38622..ee61ece7 100644
--- a/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js
+++ b/profiles/wcm_base/modules/contrib/jquery_update/replace/ui/ui/minified/jquery.ui.accordion.min.js
@@ -1,4 +1,4 @@
 /*! jQuery UI - v1.10.2 - 2013-03-14
 * http://jqueryui.com
 * Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
-(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),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").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().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(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),(e.active===!1&&e.collapsible===!0||!this.headers.length)&&(e.active=!1,this.active=t()),e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);
\ No newline at end of file
+(function(t){var e=0,i={},s={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",s.height=s.paddingTop=s.paddingBottom=s.borderTopWidth=s.borderBottomWidth="show",t.widget("ui.accordion",{version:"1.10.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"content",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t(),content:this.active.length?this.active.next():t()}},_createIcons:function(){var e=this.options.icons;e&&(t("<span>").addClass("ui-accordion-header-icon ui-icon "+e.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(e.header).addClass(e.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),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").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),t=this.headers.next().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(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),undefined):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),"disabled"===t&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!e),undefined)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),a=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(t(e.target).attr("tabIndex",-1),t(a).attr("tabIndex",0),a.focus(),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().focus()},refresh:function(){var e=this.options;this._processPanels(),(e.active===!1&&e.collapsible===!0||!this.headers.length)&&(e.active=!1,this.active=t()),e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,s=this.options,n=s.heightStyle,a=this.element.parent(),o=this.accordionId="ui-accordion-"+(this.element.attr("id")||++e);this.active=this._findActive(s.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(e){var i=t(this),s=i.attr("id"),n=i.next(),a=n.attr("id");s||(s=o+"-header-"+e,i.attr("id",s)),a||(a=o+"-panel-"+e,n.attr("id",a)),i.attr("aria-controls",a),n.attr("aria-labelledby",s)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(s.event),"fill"===n?(i=a.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(i=0,this.headers.next().each(function(){i=Math.max(i,t(this).css("height","").height())}).height(i))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?t():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?t():n,newPanel:r};e.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",e,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?t():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-expanded":"false","aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(t,e,n){var a,o,r,h=this,l=0,c=t.length&&(!e.length||t.index()<e.index()),u=this.options.animate||{},d=c&&u.down||u,p=function(){h._toggleComplete(n)};return"number"==typeof d&&(r=d),"string"==typeof d&&(o=d),o=o||d.easing||u.easing,r=r||d.duration||u.duration,e.length?t.length?(a=t.show().outerHeight(),e.animate(i,{duration:r,easing:o,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(s,{duration:r,easing:o,complete:p,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(a-e.outerHeight()-l),l=0)}}),undefined):e.animate(i,r,o,p):t.animate(s,r,o,p)},_toggleComplete:function(t){var e=t.oldPanel;e.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}})})(jQuery);
diff --git a/profiles/wcm_base/modules/contrib/simplified_menu_admin/LICENSE.txt b/profiles/wcm_base/modules/contrib/simplified_menu_admin/LICENSE.txt
index 2c095c8d..d159169d 100644
--- a/profiles/wcm_base/modules/contrib/simplified_menu_admin/LICENSE.txt
+++ b/profiles/wcm_base/modules/contrib/simplified_menu_admin/LICENSE.txt
@@ -1,274 +1,339 @@
-GNU GENERAL PUBLIC LICENSE
-
-              Version 2, June 1991
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave,
-Cambridge, MA 02139, USA. Everyone is permitted to copy and distribute
-verbatim copies of this license document, but changing it is not allowed.
-
-                  Preamble
-
-The licenses for most software are designed to take away your freedom to
-share and change it. By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free software--to
-make sure the software is free for all its users. This General Public License
-applies to most of the Free Software Foundation's software and to any other
-program whose authors commit to using it. (Some other Free Software
-Foundation software is covered by the GNU Library General Public License
-instead.) You can apply it to your programs, too.
-
-When we speak of free software, we are referring to freedom, not price. Our
-General Public Licenses are designed to make sure that you have the
-freedom to distribute copies of free software (and charge for this service if
-you wish), that you receive source code or can get it if you want it, that you
-can change the software or use pieces of it in new free programs; and that
-you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to
-deny you these rights or to ask you to surrender the rights. These restrictions
-translate to certain responsibilities for you if you distribute copies of the
-software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis or for
-a fee, you must give the recipients all the rights that you have. You must make
-sure that they, too, receive or can get the source code. And you must show
-them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the software, and (2)
-offer you this license which gives you legal permission to copy, distribute
-and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain that
-everyone understands that there is no warranty for this free software. If the
-software is modified by someone else and passed on, we want its recipients
-to know that what they have is not the original, so that any problems
-introduced by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We
-wish to avoid the danger that redistributors of a free program will individually
-obtain patent licenses, in effect making the program proprietary. To prevent
-this, we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and modification
-follow.
-
-           GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
-               MODIFICATION
-
-0. This License applies to any program or other work which contains a notice
-placed by the copyright holder saying it may be distributed under the terms
-of this General Public License. The "Program", below, refers to any such
-program or work, and a "work based on the Program" means either the
-Program or any derivative work under copyright law: that is to say, a work
-containing the Program or a portion of it, either verbatim or with
-modifications and/or translated into another language. (Hereinafter, translation
-is included without limitation in the term "modification".) Each licensee is
-addressed as "you".
-
-Activities other than copying, distribution and modification are not covered
-by this License; they are outside its scope. The act of running the Program is
-not restricted, and the output from the Program is covered only if its contents
-constitute a work based on the Program (independent of having been made
-by running the Program). Whether that is true depends on what the Program
-does.
-
-1. You may copy and distribute verbatim copies of the Program's source
-code as you receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this License
-and to the absence of any warranty; and give any other recipients of the
-Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and you
-may at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Program or any portion of it,
-thus forming a work based on the Program, and copy and distribute such
-modifications or work under the terms of Section 1 above, provided that you
-also meet all of these conditions:
-
-a) You must cause the modified files to carry prominent notices stating that
-you changed the files and the date of any change.
-
-b) You must cause any work that you distribute or publish, that in whole or in
-part contains or is derived from the Program or any part thereof, to be
-licensed as a whole at no charge to all third parties under the terms of this
-License.
-
-c) If the modified program normally reads commands interactively when run,
-you must cause it, when started running for such interactive use in the most
-ordinary way, to print or display an announcement including an appropriate
-copyright notice and a notice that there is no warranty (or else, saying that
-you provide a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this License.
-(Exception: if the Program itself is interactive but does not normally print such
-an announcement, your work based on the Program is not required to print
-an announcement.)
-
-These requirements apply to the modified work as a whole. If identifiable
-sections of that work are not derived from the Program, and can be
-reasonably considered independent and separate works in themselves, then
-this License, and its terms, do not apply to those sections when you distribute
-them as separate works. But when you distribute the same sections as part
-of a whole which is a work based on the Program, the distribution of the
-whole must be on the terms of this License, whose permissions for other
-licensees extend to the entire whole, and thus to each and every part
-regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your rights to
-work written entirely by you; rather, the intent is to exercise the right to
-control the distribution of derivative or collective works based on the
-Program.
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
 
 In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of a
-storage or distribution medium does not bring the other work under the scope
-of this License.
-
-3. You may copy and distribute the Program (or a work based on it, under
-Section 2) in object code or executable form under the terms of Sections 1
-and 2 above provided that you also do one of the following:
-
-a) Accompany it with the complete corresponding machine-readable source
-code, which must be distributed under the terms of Sections 1 and 2 above
-on a medium customarily used for software interchange; or,
-
-b) Accompany it with a written offer, valid for at least three years, to give
-any third party, for a charge no more than your cost of physically performing
-source distribution, a complete machine-readable copy of the corresponding
-source code, to be distributed under the terms of Sections 1 and 2 above on
-a medium customarily used for software interchange; or,
-
-c) Accompany it with the information you received as to the offer to distribute
-corresponding source code. (This alternative is allowed only for
-noncommercial distribution and only if you received the program in object
-code or executable form with such an offer, in accord with Subsection b
-above.)
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
 
 The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source code
-means all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation and
-installation of the executable. However, as a special exception, the source
-code distributed need not include anything that is normally distributed (in
-either source or binary form) with the major components (compiler, kernel,
-and so on) of the operating system on which the executable runs, unless that
-component itself accompanies the executable.
-
-If distribution of executable or object code is made by offering access to
-copy from a designated place, then offering equivalent access to copy the
-source code from the same place counts as distribution of the source code,
-even though third parties are not compelled to copy the source along with the
-object code.
-
-4. You may not copy, modify, sublicense, or distribute the Program except as
-expressly provided under this License. Any attempt otherwise to copy,
-modify, sublicense or distribute the Program is void, and will automatically
-terminate your rights under this License. However, parties who have received
-copies, or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-5. You are not required to accept this License, since you have not signed it.
-However, nothing else grants you permission to modify or distribute the
-Program or its derivative works. These actions are prohibited by law if you
-do not accept this License. Therefore, by modifying or distributing the
-Program (or any work based on the Program), you indicate your acceptance
-of this License to do so, and all its terms and conditions for copying,
-distributing or modifying the Program or works based on it.
-
-6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the original
-licensor to copy, distribute or modify the Program subject to these terms and
-conditions. You may not impose any further restrictions on the recipients'
-exercise of the rights granted herein. You are not responsible for enforcing
-compliance by third parties to this License.
-
-7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues), conditions
-are imposed on you (whether by court order, agreement or otherwise) that
-contradict the conditions of this License, they do not excuse you from the
-conditions of this License. If you cannot distribute so as to satisfy
-simultaneously your obligations under this License and any other pertinent
-obligations, then as a consequence you may not distribute the Program at all.
-For example, if a patent license would not permit royalty-free redistribution
-of the Program by all those who receive copies directly or indirectly through
-you, then the only way you could satisfy both it and this License would be to
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
 refrain entirely from distribution of the Program.
 
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply and
-the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or
-other property right claims or to contest validity of any such claims; this
-section has the sole purpose of protecting the integrity of the free software
-distribution system, which is implemented by public license practices. Many
-people have made generous contributions to the wide range of software
-distributed through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing to
-distribute software through any other system and a licensee cannot impose
-that choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is restricted in certain
-countries either by patents or by copyrighted interfaces, the original copyright
-holder who places the Program under this License may add an explicit
-geographical distribution limitation excluding those countries, so that
-distribution is permitted only in or among countries not thus excluded. In such
-case, this License incorporates the limitation as if written in the body of this
-License.
-
-9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will be
-similar in spirit to the present version, but may differ in detail to address new
-problems or concerns.
-
-Each version is given a distinguishing version number. If the Program specifies
-a version number of this License which applies to it and "any later version",
-you have the option of following the terms and conditions either of that
-version or of any later version published by the Free Software Foundation. If
-the Program does not specify a version number of this License, you may
-choose any version ever published by the Free Software Foundation.
-
-10. If you wish to incorporate parts of the Program into other free programs
-whose distribution conditions are different, write to the author to ask for
-permission. For software which is copyrighted by the Free Software
-Foundation, write to the Free Software Foundation; we sometimes make
-exceptions for this. Our decision will be guided by the two goals of
-preserving the free status of all derivatives of our free software and of
-promoting the sharing and reuse of software generally.
-
-               NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE,
-THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT
-PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
-STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
-WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
-NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR
-AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR
-ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
-LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
-SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OR INABILITY TO USE THE
-PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
-OR DATA BEING RENDERED INACCURATE OR LOSSES
-SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
-PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN
-IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.
-
-          END OF TERMS AND CONDITIONS
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/profiles/wcm_base/modules/contrib/simplified_menu_admin/PATCHES.txt b/profiles/wcm_base/modules/contrib/simplified_menu_admin/PATCHES.txt
deleted file mode 100644
index 5c4d5006..00000000
--- a/profiles/wcm_base/modules/contrib/simplified_menu_admin/PATCHES.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-The following patches have been applied to this project:
-- https://www.drupal.org/files/issues/simplified_menu_admin-form-hierarchy-not-preserved-1256700-13.patch
-
-This file was automatically generated by Drush Make (http://drupal.org/project/drush).
\ No newline at end of file
diff --git a/profiles/wcm_base/modules/contrib/simplified_menu_admin/simplified_menu_admin.info b/profiles/wcm_base/modules/contrib/simplified_menu_admin/simplified_menu_admin.info
index 0bf1ed4e..5e62fc16 100644
--- a/profiles/wcm_base/modules/contrib/simplified_menu_admin/simplified_menu_admin.info
+++ b/profiles/wcm_base/modules/contrib/simplified_menu_admin/simplified_menu_admin.info
@@ -2,9 +2,9 @@ name = Simplified menu administration
 description = Simplifies the Menu and Shortcut modules by merging "List links" and "Edit menu" into a single administration page.
 core = 7.x
 
-; Information added by drupal.org packaging script on 2011-06-24
-version = "7.x-1.0-beta2"
+; Information added by Drupal.org packaging script on 2015-08-17
+version = "7.x-1.0"
 core = "7.x"
 project = "simplified_menu_admin"
-datestamp = "1308938520"
+datestamp = "1439833140"
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc
index 3f106265..cb2a7d83 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/ckeditor.inc
@@ -37,15 +37,15 @@ function wysiwyg_ckeditor_editor() {
     'settings form callback' => 'wysiwyg_ckeditor_settings_form',
     'init callback' => 'wysiwyg_ckeditor_init',
     'settings callback' => 'wysiwyg_ckeditor_settings',
-    'plugin callback' => 'wysiwyg_ckeditor_plugins',
-    'plugin settings callback' => 'wysiwyg_ckeditor_plugin_settings',
+    'plugin callback' => '_wysiwyg_ckeditor_plugins',
+    'plugin meta callback' => '_wysiwyg_ckeditor_plugin_meta',
     'proxy plugin' => array(
       'drupal' => array(
         'load' => TRUE,
         'proxy' => TRUE,
       ),
     ),
-    'proxy plugin settings callback' => 'wysiwyg_ckeditor_proxy_plugin_settings',
+    'proxy plugin settings callback' => '_wysiwyg_ckeditor_proxy_plugin_settings',
     'versions' => array(
       '3.0.0.3665' => array(
         'js files' => array('ckeditor-3.0.js'),
@@ -546,46 +546,37 @@ function wysiwyg_ckeditor_settings_parse_styles($css_classes) {
 }
 
 /**
- * Build a JS settings array of native external plugins that need to be loaded separately.
+ * Build a JS settings array with global metadata for native external plugins.
  */
-function wysiwyg_ckeditor_plugin_settings($editor, $profile, $plugins) {
-  $settings = array();
-  foreach ($plugins as $name => $plugin) {
-    // Register all plugins that need to be loaded.
-    if (!empty($plugin['load'])) {
-      $settings[$name] = array();
-      // Add path for native external plugins.
-      if (empty($plugin['internal']) && isset($plugin['path'])) {
-        $settings[$name]['path'] = base_path() . $plugin['path'] . '/';
-      }
-      // Force native internal plugins to use the standard path.
-      else {
-        $settings[$name]['path'] = base_path() . $editor['library path'] . '/plugins/' . $name . '/';
-      }
-      // CKEditor defaults to 'plugin.js' on its own when filename is not set.
-      if (!empty($plugin['filename'])) {
-        $settings[$name]['fileName'] = $plugin['filename'];
-      }
+function _wysiwyg_ckeditor_plugin_meta($editor, $plugin) {
+  $meta = array();
+  $name = $plugin['name'];
+  // Register all plugins that need to be loaded.
+  if (!empty($plugin['load'])) {
+    // Add path for native external plugins.
+    if (empty($plugin['internal']) && isset($plugin['path'])) {
+      $meta['path'] = base_path() . $plugin['path'] . '/';
+    }
+    // Force native internal plugins to use the standard path.
+    else {
+      $meta['path'] = base_path() . $editor['library path'] . '/plugins/' . $name . '/';
+    }
+    // CKEditor defaults to 'plugin.js' on its own when filename is not set.
+    if (!empty($plugin['filename'])) {
+      $meta['fileName'] = $plugin['filename'];
     }
   }
-  return $settings;
+  return $meta;
 }
 
 /**
  * Build a JS settings array for Drupal plugins loaded via the proxy plugin.
  */
-function wysiwyg_ckeditor_proxy_plugin_settings($editor, $profile, $plugins) {
+function _wysiwyg_ckeditor_proxy_plugin_settings($editor, $profile, $plugins) {
   $settings = array();
   foreach ($plugins as $name => $plugin) {
-    // Populate required plugin settings.
-    $settings[$name] = $plugin['dialog settings'] + array(
-      'title' => $plugin['title'],
-      'icon' => base_path() . $plugin['icon path'] . '/' . $plugin['icon file'],
-      'iconTitle' => $plugin['icon title'],
-    );
-    if (!empty($plugin['css path']) && !empty($plugin['css file'])) {
-      $settings[$name]['css'] = base_path() . $plugin['css path'] . '/' . $plugin['css file'];
-    }
+    // Just need a list of all enabled plugins for each instance.
+    $settings[$name] = TRUE;
   }
   return $settings;
 }
@@ -593,22 +584,22 @@ function wysiwyg_ckeditor_proxy_plugin_settings($editor, $profile, $plugins) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_ckeditor_plugins($editor) {
+function _wysiwyg_ckeditor_plugins($editor) {
   $plugins = array(
     'default' => array(
       'buttons' => array(
         'Bold' => t('Bold'), 'Italic' => t('Italic'), 'Underline' => t('Underline'),
-        'Strike' => t('Strike-through'),
-        'JustifyLeft' => t('Align left'), 'JustifyCenter' => t('Align center'), 'JustifyRight' => t('Align right'), 'JustifyBlock' => t('Justify'),
+        'Strike' => t('Strike through'),
+        'JustifyLeft' => t('Align left'), 'JustifyCenter' => t('Center'), 'JustifyRight' => t('Align right'), 'JustifyBlock' => t('Justify'),
+        'BulletedList' => t('Insert/Remove Bullet list'), 'NumberedList' => t('Insert/Remove Numbered list'),
         'BidiLtr' => t('Left-to-right'), 'BidiRtl' => t('Right-to-left'),
-        'BulletedList' => t('Bullet list'), 'NumberedList' => t('Numbered list'),
         'Outdent' => t('Outdent'), 'Indent' => t('Indent'),
         'Undo' => t('Undo'), 'Redo' => t('Redo'),
         'Link' => t('Link'), 'Unlink' => t('Unlink'), 'Anchor' => t('Anchor'),
         'Image' => t('Image'),
-        'TextColor' => t('Forecolor'), 'BGColor' => t('Backcolor'),
+        'TextColor' => t('Text color'), 'BGColor' => t('Background color'),
         'Superscript' => t('Superscript'), 'Subscript' => t('Subscript'),
-        'Blockquote' => t('Blockquote'), 'Source' => t('Source code'),
+        'Blockquote' => t('Block quote'), 'Source' => t('Source code'),
         'HorizontalRule' => t('Horizontal rule'),
         'Cut' => t('Cut'), 'Copy' => t('Copy'), 'Paste' => t('Paste'),
         'PasteText' => t('Paste Text'), 'PasteFromWord' => t('Paste from Word'),
@@ -620,9 +611,9 @@ function wysiwyg_ckeditor_plugins($editor) {
         'SelectAll' => t('Select all'), 'Find' => t('Search'), 'Replace' => t('Replace'),
         'Flash' => t('Flash'), 'Smiley' => t('Smiley'),
         'CreateDiv' => t('Div container'),
-        'Iframe' => t('iFrame'),
+        'Iframe' => t('IFrame'),
         'Maximize' => t('Maximize'),
-        'SpellChecker' => t('Check spelling'), 'Scayt' => t('Check spelling as you type'),
+        'SpellChecker' => t('Check spelling'), 'Scayt' => t('Spell check as you type'),
         'About' => t('About'),
         'Templates' => t('Templates'),
       ),
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/fckeditor.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/fckeditor.inc
index 672e6d1d..b8780017 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/fckeditor.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/fckeditor.inc
@@ -23,15 +23,16 @@ function wysiwyg_fckeditor_editor() {
     'themes callback' => 'wysiwyg_fckeditor_themes',
     'settings form callback' => 'wysiwyg_fckeditor_settings_form',
     'settings callback' => 'wysiwyg_fckeditor_settings',
-    'plugin callback' => 'wysiwyg_fckeditor_plugins',
-    'plugin settings callback' => 'wysiwyg_fckeditor_plugin_settings',
+    'plugin callback' => '_wysiwyg_fckeditor_plugins',
+    'plugin meta callback' => '_wysiwyg_fckeditor_plugin_meta',
+    'plugin settings callback' => '_wysiwyg_fckeditor_plugin_settings',
     'proxy plugin' => array(
       'drupal' => array(
         'load' => TRUE,
         'proxy' => TRUE,
       ),
     ),
-    'proxy plugin settings callback' => 'wysiwyg_fckeditor_proxy_plugin_settings',
+    'proxy plugin settings callback' => '_wysiwyg_fckeditor_proxy_plugin_settings',
     'versions' => array(
       '2.6' => array(
         'js files' => array('fckeditor-2.6.js'),
@@ -236,22 +237,30 @@ function wysiwyg_fckeditor_settings($editor, $config, $theme) {
 }
 
 /**
- * Build a JS settings array of native external plugins that need to be loaded separately.
+ * Build a JS settings array with global metadata for native external plugins.
  */
-function wysiwyg_fckeditor_plugin_settings($editor, $profile, $plugins) {
+function _wysiwyg_fckeditor_plugin_meta($editor, $plugin) {
+  $meta = array();
+  // Add path for native external plugins; internal ones do not need a path.
+  if (empty($plugin['internal']) && isset($plugin['path'])) {
+    // All native FCKeditor plugins use the filename fckplugin.js.
+    $meta['path'] = base_path() . $plugin['path'] . '/';
+  }
+  if (!empty($plugin['languages'])) {
+    $meta['languages'] = $plugin['languages'];
+  }
+  return $meta;
+}
+
+/**
+ * Build a JS settings array for native external plugins.
+ */
+function _wysiwyg_fckeditor_plugin_settings($editor, $profile, $plugins) {
   $settings = array();
   foreach ($plugins as $name => $plugin) {
-    // Register all plugins that need to be loaded.
     if (!empty($plugin['load'])) {
-      $settings[$name] = array();
-      // Add path for native external plugins; internal ones do not need a path.
-      if (empty($plugin['internal']) && isset($plugin['path'])) {
-        // All native FCKeditor plugins use the filename fckplugin.js.
-        $settings[$name]['path'] = base_path() . $plugin['path'] . '/';
-      }
-      if (!empty($plugin['languages'])) {
-        $settings[$name]['languages'] = $plugin['languages'];
-      }
+      // Just need a list of all enabled plugins for each instance.
+      $settings[$name] = TRUE;
     }
   }
   return $settings;
@@ -260,25 +269,20 @@ function wysiwyg_fckeditor_plugin_settings($editor, $profile, $plugins) {
 /**
  * Build a JS settings array for Drupal plugins loaded via the proxy plugin.
  */
-function wysiwyg_fckeditor_proxy_plugin_settings($editor, $profile, $plugins) {
+function _wysiwyg_fckeditor_proxy_plugin_settings($editor, $profile, $plugins) {
   $settings = array();
   foreach ($plugins as $name => $plugin) {
-    // Populate required plugin settings.
-    $settings[$name] = $plugin['dialog settings'] + array(
-      'title' => $plugin['title'],
-      'icon' => base_path() . $plugin['icon path'] . '/' . $plugin['icon file'],
-      'iconTitle' => $plugin['icon title'],
-      // @todo These should only be set if the plugin defined them.
-      'css' => base_path() . $plugin['css path'] . '/' . $plugin['css file'],
-    );
+    // Just need a list of all enabled plugins for each instance.
+    $settings[$name] = TRUE;
   }
   return $settings;
 }
 
+
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_fckeditor_plugins($editor) {
+function _wysiwyg_fckeditor_plugins($editor) {
   $plugins = array(
     'default' => array(
       'buttons' => array(
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/ckeditor-3.0.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/ckeditor-3.0.js
index 36e0d8cc..519a62ca 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/ckeditor-3.0.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/ckeditor-3.0.js
@@ -5,37 +5,34 @@ CKEDITOR.disableAutoInline = true;
 // Exclude every id starting with 'cke_' in ajax_html_ids during AJAX requests.
 Drupal.wysiwyg.excludeIdSelectors.wysiwyg_ckeditor = ['[id^="cke_"]'];
 
-Drupal.wysiwyg.editor.init.ckeditor = function(settings) {
-  // Plugins must only be loaded once. Only the settings from the first format
-  // will be used but they're identical anyway.
-  var registeredPlugins = {};
-  for (var format in settings) {
-    if (Drupal.settings.wysiwyg.plugins[format]) {
-      // Register native external plugins.
-      // Array syntax required; 'native' is a predefined token in JavaScript.
-      for (var pluginName in Drupal.settings.wysiwyg.plugins[format]['native']) {
-        if (!registeredPlugins[pluginName]) {
-          var plugin = Drupal.settings.wysiwyg.plugins[format]['native'][pluginName];
-          CKEDITOR.plugins.addExternal(pluginName, plugin.path, plugin.fileName);
-          registeredPlugins[pluginName] = true;
-        }
-      }
-      // Register Drupal plugins.
-      for (var pluginName in Drupal.settings.wysiwyg.plugins[format].drupal) {
-        if (!registeredPlugins[pluginName]) {
-          Drupal.wysiwyg.editor.instance.ckeditor.addPlugin(pluginName, Drupal.settings.wysiwyg.plugins[format].drupal[pluginName], Drupal.settings.wysiwyg.plugins.drupal[pluginName]);
-          registeredPlugins[pluginName] = true;
-        }
-      }
+/**
+ * Initialize the editor library.
+ */
+Drupal.wysiwyg.editor.init.ckeditor = function (settings, pluginInfo) {
+  // Register native external plugins.
+  // Array syntax required; 'native' is a predefined token in JavaScript.
+  for (var pluginId in pluginInfo['native']) {
+    if (!pluginInfo['native'].hasOwnProperty(pluginId)) {
+      continue;
     }
-    // Register Font styles (versions 3.2.1 and above).
-    if (Drupal.settings.wysiwyg.configs.ckeditor[format].stylesSet) {
-      CKEDITOR.stylesSet.add(format, Drupal.settings.wysiwyg.configs.ckeditor[format].stylesSet);
+    var plugin = pluginInfo['native'][pluginId];
+    CKEDITOR.plugins.addExternal(pluginId, plugin.path, plugin.fileName);
+  }
+  // Build and register Drupal plugin wrappers.
+  for (var pluginId in pluginInfo.drupal) {
+    if (!pluginInfo.drupal.hasOwnProperty(pluginId)) {
+      continue;
+    }
+    Drupal.wysiwyg.editor.instance.ckeditor.addPlugin(pluginId, pluginInfo.drupal[pluginId]);
+  }
+  // Register Font styles (versions 3.2.1 and above).
+  for (var format in settings) {
+    if (settings[format].stylesSet) {
+      CKEDITOR.stylesSet.add(format, settings[format].stylesSet);
     }
   }
 };
 
-
 /**
  * Attach this editor to a target element.
  */
@@ -92,16 +89,18 @@ Drupal.wysiwyg.editor.attach.ckeditor = function(context, params, settings) {
     },
 
     pluginsLoaded: function(ev) {
+      var wysiwygInstance = this._drupalWysiwygInstance;
+      var enabledPlugins = wysiwygInstance.pluginInfo.instances.drupal;
       // Override the conversion methods to let Drupal plugins modify the data.
       var editor = ev.editor;
-      if (editor.dataProcessor && Drupal.settings.wysiwyg.plugins[params.format]) {
+      if (editor.dataProcessor && enabledPlugins) {
         editor.dataProcessor.toHtml = CKEDITOR.tools.override(editor.dataProcessor.toHtml, function(originalToHtml) {
           // Convert raw data for display in WYSIWYG mode.
           return function(data, fixForBody) {
-            for (var plugin in Drupal.settings.wysiwyg.plugins[params.format].drupal) {
+            for (var plugin in enabledPlugins) {
               if (typeof Drupal.wysiwyg.plugins[plugin].attach == 'function') {
-                data = Drupal.wysiwyg.plugins[plugin].attach(data, Drupal.settings.wysiwyg.plugins.drupal[plugin], editor.name);
-                data = Drupal.wysiwyg.instances[params.field].prepareContent(data);
+                data = Drupal.wysiwyg.plugins[plugin].attach(data, wysiwygInstance.pluginInfo.global.drupal[plugin], editor.name);
+                data = wysiwygInstance.prepareContent(data);
               }
             }
             return originalToHtml.call(this, data, fixForBody);
@@ -111,9 +110,9 @@ Drupal.wysiwyg.editor.attach.ckeditor = function(context, params, settings) {
           // Convert WYSIWYG mode content to raw data.
           return function(data, fixForBody) {
             data = originalToDataFormat.call(this, data, fixForBody);
-            for (var plugin in Drupal.settings.wysiwyg.plugins[params.format].drupal) {
+            for (var plugin in enabledPlugins) {
               if (typeof Drupal.wysiwyg.plugins[plugin].detach == 'function') {
-                data = Drupal.wysiwyg.plugins[plugin].detach(data, Drupal.settings.wysiwyg.plugins.drupal[plugin], editor.name);
+                data = Drupal.wysiwyg.plugins[plugin].detach(data, wysiwygInstance.pluginInfo.global.drupal[plugin], editor.name);
               }
             }
             return data;
@@ -123,16 +122,15 @@ Drupal.wysiwyg.editor.attach.ckeditor = function(context, params, settings) {
     },
 
     selectionChange: function (event) {
-      var pluginSettings = Drupal.settings.wysiwyg.plugins[params.format];
-      if (pluginSettings && pluginSettings.drupal) {
-        $.each(pluginSettings.drupal, function (name) {
-          var plugin = Drupal.wysiwyg.plugins[name];
-          if ($.isFunction(plugin.isNode)) {
-            var node = event.data.selection.getSelectedElement();
-            var state = plugin.isNode(node ? node.$ : null) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
-            event.editor.getCommand(name).setState(state);
-          }
-        });
+      var wysiwygInstance = this._drupalWysiwygInstance;
+      var enabledPlugins = wysiwygInstance.pluginInfo.instances.drupal;
+      for (var name in enabledPlugins) {
+        var plugin = Drupal.wysiwyg.plugins[name];
+        if ($.isFunction(plugin.isNode)) {
+          var node = event.data.selection.getSelectedElement();
+          var state = plugin.isNode(node ? node.$ : null) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
+          event.editor.getCommand(name).setState(state);
+        }
       }
     },
 
@@ -151,11 +149,17 @@ Drupal.wysiwyg.editor.attach.ckeditor = function(context, params, settings) {
       else {
         $drupalToolbars.show();
       }
+    },
+
+    destroy: function (event) {
+      // Free our reference to the private instance to not risk memory leaks.
+      delete this._drupalWysiwygInstance;
     }
   };
 
   // Attach editor.
-  CKEDITOR.replace(params.field, settings);
+  var editorInstance = CKEDITOR.replace(params.field, settings);
+  editorInstance._drupalWysiwygInstance = this;
 };
 
 /**
@@ -183,16 +187,16 @@ Drupal.wysiwyg.editor.detach.ckeditor = function (context, params, trigger) {
 };
 
 Drupal.wysiwyg.editor.instance.ckeditor = {
-  addPlugin: function(pluginName, settings, pluginSettings) {
+  addPlugin: function (pluginName, pluginSettings) {
     CKEDITOR.plugins.add(pluginName, {
       // Wrap Drupal plugin in a proxy pluygin.
       init: function(editor) {
-        if (settings.css) {
+        if (pluginSettings.css) {
           editor.on('mode', function(ev) {
             if (ev.editor.mode == 'wysiwyg') {
               // Inject CSS files directly into the editing area head tag.
               var iframe = $('#cke_contents_' + ev.editor.name + ' iframe, #' + ev.editor.id + '_contents iframe');
-              $('head', iframe.eq(0).contents()).append('<link rel="stylesheet" href="' + settings.css + '" type="text/css" >');
+              $('head', iframe.eq(0).contents()).append('<link rel="stylesheet" href="' + pluginSettings.css + '" type="text/css" >');
             }
           });
         }
@@ -220,9 +224,9 @@ Drupal.wysiwyg.editor.instance.ckeditor = {
           editor.addCommand(pluginName, pluginCommand);
         }
         editor.ui.addButton(pluginName, {
-          label: settings.iconTitle,
+          label: pluginSettings.title,
           command: pluginName,
-          icon: settings.icon
+          icon: pluginSettings.icon
         });
 
         // @todo Add button state handling.
@@ -271,6 +275,11 @@ Drupal.wysiwyg.editor.instance.ckeditor = {
 
   getContent: function () {
     return CKEDITOR.instances[this.field].getData();
+  },
+
+  isFullscreen: function () {
+    var cmd = CKEDITOR.instances[this.field].commands.maximize;
+    return !!(cmd && cmd.state == CKEDITOR.TRISTATE_ON);
   }
 };
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor-2.6.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor-2.6.js
index 47a4f008..618f515f 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor-2.6.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor-2.6.js
@@ -8,6 +8,10 @@ Drupal.wysiwyg.editor.attach.fckeditor = function(context, params, settings) {
     settings.Height = $('#' + params.field).height();
   }
   var FCKinstance = new FCKeditor(params.field, settings.Width, settings.Height, settings.ToolbarSet);
+  // Keep track of the settings for this instance.
+  this.editorSettings = settings;
+  // Temporarily store the private instance for use in the config file.
+  $('#' + params.field, context).data('wysiwygInstance', this);
   // Apply editor instance settings.
   FCKinstance.BasePath = settings.EditorPath;
   FCKinstance.Config.wysiwygFormat = params.format;
@@ -68,6 +72,9 @@ Drupal.wysiwyg.editor.detach.fckeditor = function (context, params, trigger) {
 
 Drupal.wysiwyg.editor.instance.fckeditor = {
   init: function(instance) {
+    var wysiwygInstance = instance.wysiwygInstance;
+    var pluginInfo = wysiwygInstance.pluginInfo;
+    var enabledPlugins = pluginInfo.instances.drupal;
     // Track which editor instance is active.
     instance.FCK.Events.AttachEvent('OnFocus', function(editorInstance) {
       Drupal.wysiwyg.activeId = editorInstance.Name;
@@ -82,12 +89,10 @@ Drupal.wysiwyg.editor.instance.fckeditor = {
       // Called from SetData() with stripped comments/scripts, revert those
       // manipulations and attach Drupal plugins.
       var data = instance.FCKConfig.ProtectedSource.Revert(data);
-      if (Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat] && Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat].drupal) {
-        for (var plugin in Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat].drupal) {
-          if (typeof Drupal.wysiwyg.plugins[plugin].attach == 'function') {
-            data = Drupal.wysiwyg.plugins[plugin].attach(data, Drupal.settings.wysiwyg.plugins.drupal[plugin], instance.FCK.Name);
-            data = Drupal.wysiwyg.editor.instance.fckeditor.prepareContent(data);
-          }
+      for (var plugin in enabledPlugins) {
+        if (typeof Drupal.wysiwyg.plugins[plugin].attach == 'function') {
+          data = Drupal.wysiwyg.plugins[plugin].attach(data, pluginInfo.global.drupal[plugin], instance.FCK.Name);
+          data = Drupal.wysiwyg.editor.instance.fckeditor.prepareContent(data);
         }
       }
       // Re-protect the source and use the original data processor to convert it
@@ -100,11 +105,9 @@ Drupal.wysiwyg.editor.instance.fckeditor = {
       // Called from GetData(), convert the content's DOM into a XHTML string
       // using the original data processor and detach Drupal plugins.
       var data = instance.FCKDataProcessor.prototype.ConvertToDataFormat.call(this, rootNode, excludeRoot, ignoreIfEmptyParagraph, format);
-      if (Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat] && Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat].drupal) {
-        for (var plugin in Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat].drupal) {
-          if (typeof Drupal.wysiwyg.plugins[plugin].detach == 'function') {
-            data = Drupal.wysiwyg.plugins[plugin].detach(data, Drupal.settings.wysiwyg.plugins.drupal[plugin], instance.FCK.Name);
-          }
+      for (var plugin in enabledPlugins) {
+        if (typeof Drupal.wysiwyg.plugins[plugin].detach == 'function') {
+          data = Drupal.wysiwyg.plugins[plugin].detach(data, pluginInfo.global.drupal[plugin], instance.FCK.Name);
         }
       }
       return data;
@@ -112,13 +115,13 @@ Drupal.wysiwyg.editor.instance.fckeditor = {
     instance.FCK.DataProcessor = new wysiwygDataProcessor();
   },
 
-  addPlugin: function(plugin, settings, pluginSettings, instance) {
+  addPlugin: function(plugin, pluginSettings, instance) {
     if (typeof Drupal.wysiwyg.plugins[plugin] != 'object') {
       return;
     }
 
-    if (Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat].drupal[plugin].css) {
-      instance.FCKConfig.EditorAreaCSS += ',' + Drupal.settings.wysiwyg.plugins[instance.wysiwygFormat].drupal[plugin].css;
+    if (pluginSettings.css) {
+      instance.FCKConfig.EditorAreaCSS += ',' + pluginSettings.css;
     }
 
     // @see fckcommands.js, fck_othercommands.js, fckpastewordcommand.js
@@ -163,7 +166,7 @@ Drupal.wysiwyg.editor.instance.fckeditor = {
 
     // Register the plugin button.
     // Arguments: commandName, label, tooltip, style, sourceView, contextSensitive, icon.
-    instance.FCKToolbarItems.RegisterItem(plugin, new instance.FCKToolbarButton(plugin, settings.iconTitle, settings.iconTitle, null, false, true, settings.icon));
+    instance.FCKToolbarItems.RegisterItem(plugin, new instance.FCKToolbarButton(plugin, pluginSettings.title, pluginSettings.title, null, false, true, pluginSettings.icon));
   },
 
   openDialog: function(dialog, params) {
@@ -193,6 +196,11 @@ Drupal.wysiwyg.editor.instance.fckeditor = {
   setContent: function (content) {
     var instance = FCKeditorAPI.GetInstance(this.field);
     instance.SetHTML(content);
+  },
+
+  isFullscreen: function () {
+    var cmd = FCKeditorAPI.GetInstance(this.field).Commands.LoadedCommands.FitWindow;
+    return !!(cmd && cmd.IsMaximized);
   }
 };
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor.config.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor.config.js
index d4410550..a36916aa 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor.config.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/fckeditor.config.js
@@ -8,9 +8,12 @@ Drupal = window.parent.Drupal;
  * Instance settings passed to FCKinstance.Config are temporarily stored in
  * FCKConfig.PageConfig.
  */
-var wysiwygFormat = FCKConfig.PageConfig.wysiwygFormat;
-var wysiwygSettings = Drupal.settings.wysiwyg.configs.fckeditor[wysiwygFormat];
-var pluginSettings = (Drupal.settings.wysiwyg.plugins[wysiwygFormat] ? Drupal.settings.wysiwyg.plugins[wysiwygFormat] : { 'native': {}, 'drupal': {} });
+// Fetch the private instance and make sure nothing can tamper with it.
+var $field = window.parent.jQuery(FCK.LinkedField);
+var wysiwygInstance = $field.data('wysiwygInstance');
+$field.removeData('wysiwygInstance');
+var wysiwygSettings = wysiwygInstance.editorSettings;
+var pluginInfo = wysiwygInstance.pluginInfo;
 
 /**
  * Apply format-specific settings.
@@ -56,7 +59,7 @@ FCKFitWindow.prototype.Execute = function() {
 /**
  * Initialize this editor instance.
  */
-Drupal.wysiwyg.editor.instance.fckeditor.init(window);
+wysiwygInstance.init(window);
 
 /**
  * Register native plugins for this input format.
@@ -66,9 +69,9 @@ Drupal.wysiwyg.editor.instance.fckeditor.init(window);
  * - Languages the plugin is available in.
  * - Location of the plugin folder; <plugin_name>/fckplugin.js is appended.
  */
-for (var plugin in pluginSettings['native']) {
+for (var pluginId in pluginInfo.instances['native']) {
   // Languages and path may be undefined for internal plugins.
-  FCKConfig.Plugins.Add(plugin, pluginSettings['native'][plugin].languages, pluginSettings['native'][plugin].path);
+  FCKConfig.Plugins.Add(pluginId, pluginInfo.global['native'][pluginId].languages, pluginInfo.global['native'][pluginId].path);
 }
 
 /**
@@ -80,7 +83,8 @@ for (var plugin in pluginSettings['native']) {
  * - General plugin settings.
  * - A reference to this window so the plugin setup can access FCKConfig.
  */
-for (var plugin in pluginSettings.drupal) {
-  Drupal.wysiwyg.editor.instance.fckeditor.addPlugin(plugin, pluginSettings.drupal[plugin], Drupal.settings.wysiwyg.plugins.drupal[plugin], window);
+for (var pluginId in pluginInfo.instances.drupal) {
+  var plugin = pluginInfo.instances.drupal[pluginId];
+  Drupal.wysiwyg.editor.instance.fckeditor.addPlugin(pluginId, pluginInfo.global.drupal[pluginId], window);
 }
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/openwysiwyg.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/openwysiwyg.js
index 1e963366..947824e7 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/openwysiwyg.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/openwysiwyg.js
@@ -135,6 +135,10 @@ Drupal.wysiwyg.editor.instance.openwysiwyg = {
       content = content.replace(/(\r\n)|(\n)/ig, '');
     }
     return content;
+  },
+
+  isFullscreen: function () {
+    return !!(WYSIWYG.maximized[this.field]);
   }
 };
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/tinymce-3.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/tinymce-3.js
index e1ec9670..d7f3b1b4 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/tinymce-3.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/tinymce-3.js
@@ -9,8 +9,10 @@
  *
  * @param editorSettings
  *   An object containing editor settings for each input format.
+ * @param pluginInfo
+ *   An object containing global plugin configuration.
  */
-Drupal.wysiwyg.editor.init.tinymce = function(settings) {
+Drupal.wysiwyg.editor.init.tinymce = function(settings, pluginInfo) {
   // Fix Drupal toolbar obscuring editor toolbar in fullscreen mode.
   var $drupalToolbars = $('#toolbar, #admin-menu', Drupal.overlayChild ? window.parent.document : document);
   tinyMCE.onAddEditor.add(function (mgr, ed) {
@@ -22,21 +24,20 @@ Drupal.wysiwyg.editor.init.tinymce = function(settings) {
     if (ed.id == 'mce_fullscreen') {
       $drupalToolbars.show();
     }
+    else {
+      // Free our reference to the private instance to not risk memory leaks.
+      delete ed._drupalWysiwygInstance;
+    }
   });
 
-  // Initialize editor configurations.
-  for (var format in settings) {
-    if (Drupal.settings.wysiwyg.plugins[format]) {
-      // Load native external plugins.
-      // Array syntax required; 'native' is a predefined token in JavaScript.
-      for (var plugin in Drupal.settings.wysiwyg.plugins[format]['native']) {
-        tinymce.PluginManager.load(plugin, Drupal.settings.wysiwyg.plugins[format]['native'][plugin]);
-      }
-      // Load Drupal plugins.
-      for (var plugin in Drupal.settings.wysiwyg.plugins[format].drupal) {
-        Drupal.wysiwyg.editor.instance.tinymce.addPlugin(plugin, Drupal.settings.wysiwyg.plugins[format].drupal[plugin], Drupal.settings.wysiwyg.plugins.drupal[plugin]);
-      }
-    }
+  // Load native external plugins.
+  // Array syntax required; 'native' is a predefined token in JavaScript.
+  for (var plugin in pluginInfo['native']) {
+    tinymce.PluginManager.load(plugin, pluginInfo['native'][plugin]);
+  }
+  // Load Drupal plugins.
+  for (var plugin in pluginInfo.drupal) {
+    Drupal.wysiwyg.editor.instance.tinymce.addPlugin(plugin, pluginInfo.drupal[plugin]);
   }
 };
 
@@ -48,6 +49,7 @@ Drupal.wysiwyg.editor.init.tinymce = function(settings) {
 Drupal.wysiwyg.editor.attach.tinymce = function(context, params, settings) {
   // Configure editor settings for this input format.
   var ed = new tinymce.Editor(params.field, settings);
+  ed._drupalWysiwygInstance = this;
   // Reset active instance id on any event.
   ed.onEvent.add(function(ed, e) {
     Drupal.wysiwyg.activeId = ed.id;
@@ -113,7 +115,7 @@ Drupal.wysiwyg.editor.detach.tinymce = function (context, params, trigger) {
 };
 
 Drupal.wysiwyg.editor.instance.tinymce = {
-  addPlugin: function(plugin, settings, pluginSettings) {
+  addPlugin: function(plugin, pluginSettings) {
     if (typeof Drupal.wysiwyg.plugins[plugin] != 'object') {
       return;
     }
@@ -139,15 +141,15 @@ Drupal.wysiwyg.editor.instance.tinymce = {
 
         // Register the plugin button.
         ed.addButton(plugin, {
-          title : settings.iconTitle,
+          title : pluginSettings.title,
           cmd : plugin,
-          image : settings.icon
+          image : pluginSettings.icon
         });
 
         // Load custom CSS for editor contents on startup.
         ed.onInit.add(function() {
-          if (settings.css) {
-            ed.dom.loadCSS(settings.css);
+          if (pluginSettings.css) {
+            ed.dom.loadCSS(pluginSettings.css);
           }
         });
 
@@ -156,7 +158,7 @@ Drupal.wysiwyg.editor.instance.tinymce = {
           var editorId = (ed.id == 'mce_fullscreen' ? ed.getParam('fullscreen_editor_id') : ed.id);
           if (typeof Drupal.wysiwyg.plugins[plugin].attach == 'function') {
             data.content = Drupal.wysiwyg.plugins[plugin].attach(data.content, pluginSettings, editorId);
-            data.content = Drupal.wysiwyg.editor.instance.tinymce.prepareContent(data.content);
+            data.content = ed._drupalWysiwygInstance.prepareContent(data.content);
           }
         });
 
@@ -182,7 +184,7 @@ Drupal.wysiwyg.editor.instance.tinymce = {
        */
       getInfo: function() {
         return {
-          longname: settings.title
+          longname: pluginSettings.title
         };
       }
     });
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-56.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-56.js
index 5916a99b..8eb8e38c 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-56.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-56.js
@@ -73,8 +73,7 @@ Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
   wysiwygWhizzywig.fields[wysiwygWhizzywig.currentField] = '';
   // Whizzywig needs to have the width set 'inline'.
   var $field = $('#' + params.field);
-  var originalValues = Drupal.wysiwyg.instances[params.field];
-  originalValues.originalStyle = $field.attr('style');
+  this.originalStyle = $field.attr('style');
   $field.css('width', $field.width() + 'px');
 
   // Attach editor.
@@ -87,8 +86,9 @@ Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
  * Detach a single or all editors.
  */
 Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
+  var instance = this;
   var detach = function (index) {
-    var id = whizzies[index], $field = $('#' + id), instance = Drupal.wysiwyg.instances[id];
+    var id = whizzies[index], $field = $('#' + id);
 
     // Save contents of editor back into textarea.
     $field.val(instance.getContent());
@@ -101,7 +101,9 @@ Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
     whizzies.splice(index, 1);
 
     // Restore original textarea styling.
-    $field.removeAttr('style').attr('style', instance.originalStyle);
+    if ('originalStyle' in instance) {
+      $field.removeAttr('style').attr('style', instance.originalStyle);
+    }
   };
 
   if (typeof params != 'undefined') {
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-60.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-60.js
index dfe32e36..4062a59c 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-60.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig-60.js
@@ -22,8 +22,7 @@ Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
   }
   // Whizzywig needs to have the width set 'inline'.
   var $field = $('#' + params.field);
-  var originalValues = Drupal.wysiwyg.instances[params.field];
-  originalValues.originalStyle = $field.attr('style');
+  this.originalStyle = $field.attr('style');
   $field.css('width', $field.width() + 'px');
 
   // Attach editor.
@@ -36,8 +35,9 @@ Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
  * Detach a single or all editors.
  */
 Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
+  var instance = this;
   var detach = function (index) {
-    var id = whizzies[index], $field = $('#' + id), instance = Drupal.wysiwyg.instances[id];
+    var id = whizzies[index], $field = $('#' + id);
 
     // Save contents of editor back into textarea.
     $field.val(instance.getContent());
@@ -53,7 +53,9 @@ Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
     whizzies.splice(index, 1);
 
     // Restore original textarea styling.
-    $field.removeAttr('style').attr('style', instance.originalStyle);
+    if ('originalStyle' in instance) {
+      $field.removeAttr('style').attr('style', instance.originalStyle);
+    }
   }
 
   if (typeof params != 'undefined') {
@@ -103,6 +105,15 @@ Drupal.wysiwyg.editor.instance.whizzywig = {
      clone.body.innerHTML = $field.val();
     }
     return tidyH(clone);
+  },
+
+  isFullscreen: function () {
+    // This relies on a global function which uses a global variable...
+    var idTa_old = idTa;
+    idTa = this.field;
+    var fullscreen = isFullscreen();
+    idTa = idTa_old;
+    return fullscreen;
   }
 };
 })(jQuery);
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig.js
index 5cce0b2f..49719f72 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/whizzywig.js
@@ -64,8 +64,7 @@ Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
   wysiwygWhizzywig.fields[wysiwygWhizzywig.currentField] = '';
   // Whizzywig needs to have the width set 'inline'.
   var $field = $('#' + params.field);
-  var originalValues = Drupal.wysiwyg.instances[params.field];
-  originalValues.originalStyle = $field.attr('style');
+  this.originalStyle = $field.attr('style');
   $field.css('width', $field.width() + 'px');
 
   // Attach editor.
@@ -78,8 +77,9 @@ Drupal.wysiwyg.editor.attach.whizzywig = function(context, params, settings) {
  * Detach a single or all editors.
  */
 Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
+  var instance = this;
   var detach = function (index) {
-    var id = whizzies[index], $field = $('#' + id), instance = Drupal.wysiwyg.instances[id];
+    var id = whizzies[index], $field = $('#' + id);
 
     // Save contents of editor back into textarea.
     $field.val(instance.getContent());
@@ -92,7 +92,9 @@ Drupal.wysiwyg.editor.detach.whizzywig = function (context, params, trigger) {
     whizzies.splice(index, 1);
 
     // Restore original textarea styling.
-    $field.removeAttr('style').attr('style', instance.originalStyle);
+    if ('originalStyle' in instance) {
+      $field.removeAttr('style').attr('style', instance.originalStyle);
+    }
   };
 
   if (typeof params != 'undefined') {
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/yui.js b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/yui.js
index 83094bbf..ac675468 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/yui.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/js/yui.js
@@ -10,53 +10,53 @@ Drupal.wysiwyg.editor.attach.yui = function(context, params, settings) {
   // Apply theme.
   $('#' + params.field).parent().addClass('yui-skin-' + settings.theme);
 
+  var wysiwygInstance = this;
+  var enabledPlugins = wysiwygInstance.pluginInfo.instances;
   // Load plugins stylesheet.
-  if (Drupal.settings.wysiwyg.plugins[params.format]) {
-    for (var plugin in Drupal.settings.wysiwyg.plugins[params.format].drupal) {
-      settings.extracss += settings.extracss+' @import "'+Drupal.settings.wysiwyg.plugins[params.format].drupal[plugin].css+'"; ';
+  for (var pluginId in enabledPlugins.drupal) {
+    if (wysiwygInstance.pluginInfo.global.drupal[pluginId].css) {
+      settings.extracss += ' @import "' + wysiwygInstance.pluginInfo.global.drupal[pluginId].css + '"; ';
     }
   }
 
   // Attach editor.
   var editor = new YAHOO.widget.Editor(params.field, settings);
 
-  editor.on('toolbarLoaded', function() {
-    // Load Drupal plugins.
-    if (Drupal.settings.wysiwyg.plugins[params.format]) {
-      for (var plugin in Drupal.settings.wysiwyg.plugins[params.format].drupal) {
-        Drupal.wysiwyg.instances[params.field].addPlugin(plugin, Drupal.settings.wysiwyg.plugins[params.format].drupal[plugin], Drupal.settings.wysiwyg.plugins.drupal[plugin]);
+  if (enabledPlugins) {
+    editor.on('toolbarLoaded', function() {
+      // 'this' will reference the toolbar while inside the event handler.
+      var instanceId = params.field;
+      // Load Drupal plugins.
+      for (var plugin in enabledPlugins.drupal) {
+        wysiwygInstance.addPlugin(plugin, wysiwygInstance.pluginInfo.global.drupal[plugin]);
       }
-    }
-  });
+    });
 
-  // Allow plugins to act on setEditorHTML.
-  var oldSetEditorHTML = editor.setEditorHTML;
-  editor.setEditorHTML = function (content) {
-    if (Drupal.settings.wysiwyg.plugins[params.format]) {
-      for (var plugin in Drupal.settings.wysiwyg.plugins[params.format].drupal) {
-        var pluginSettings = Drupal.settings.wysiwyg.plugins.drupal[plugin];
+    // Allow plugins to act on setEditorHTML.
+    var oldSetEditorHTML = editor.setEditorHTML;
+    editor.setEditorHTML = function (content) {
+      for (var plugin in enabledPlugins.drupal) {
+        var pluginSettings = wysiwygInstance.pluginInfo.global.drupal[plugin];
         if (typeof Drupal.wysiwyg.plugins[plugin].attach == 'function') {
           content = Drupal.wysiwyg.plugins[plugin].attach(content, pluginSettings, params.field);
-          content = Drupal.wysiwyg.instances[params.field].prepareContent(content);
+          content = wysiwygInstance.prepareContent(content);
         }
       }
-    }
-    oldSetEditorHTML.call(this, content);
-  };
-
-  // Allow plugins to act on getEditorHTML.
-  var oldGetEditorHTML = editor.getEditorHTML;
-  editor.getEditorHTML = function () {
-    var content = oldGetEditorHTML.call(this);
-    if (Drupal.settings.wysiwyg.plugins[params.format]) {
-      for (var plugin in Drupal.settings.wysiwyg.plugins[params.format].drupal) {
-        var pluginSettings = Drupal.settings.wysiwyg.plugins.drupal[plugin];
+      oldSetEditorHTML.call(this, content);
+    };
+
+    // Allow plugins to act on getEditorHTML.
+    var oldGetEditorHTML = editor.getEditorHTML;
+    editor.getEditorHTML = function () {
+      var content = oldGetEditorHTML.call(this);
+      for (var plugin in enabledPlugins.drupal) {
+        var pluginSettings = wysiwygInstance.pluginInfo.global.drupal[plugin];
         if (typeof Drupal.wysiwyg.plugins[plugin].detach == 'function') {
           content = Drupal.wysiwyg.plugins[plugin].detach(content, pluginSettings, params.field);
         }
       }
+      return content;
     }
-    return content;
   }
 
   // Reload the editor contents to give Drupal plugins a chance to act.
@@ -65,18 +65,18 @@ Drupal.wysiwyg.editor.attach.yui = function(context, params, settings) {
   });
 
   editor.on('afterNodeChange', function (e) {
-    if (Drupal.settings.wysiwyg.plugins[params.format]) {
-      for (var plugin in Drupal.settings.wysiwyg.plugins[params.format].drupal) {
-        if (typeof Drupal.wysiwyg.plugins[plugin].isNode == 'function') {
-          if (Drupal.wysiwyg.plugins[plugin].isNode(e.target._getSelectedElement())) {
-            this.toolbar.selectButton(plugin);
-          }
+    for (var plugin in enabledPlugins.drupal) {
+      if (typeof Drupal.wysiwyg.plugins[plugin].isNode == 'function') {
+        if (Drupal.wysiwyg.plugins[plugin].isNode(e.target._getSelectedElement())) {
+          this.toolbar.selectButton(plugin);
         }
       }
     }
   });
 
   editor.render();
+  // This event never gets fired if loaded into a dialog, harmless otherwise.
+  editor.fireEvent('contentReady');
 };
 
 /**
@@ -111,13 +111,13 @@ Drupal.wysiwyg.editor.detach.yui = function (context, params, trigger) {
  * Instance methods for YUI Editor.
  */
 Drupal.wysiwyg.editor.instance.yui = {
-  addPlugin: function (plugin, settings, pluginSettings) {
+  addPlugin: function (plugin, pluginSettings) {
     if (typeof Drupal.wysiwyg.plugins[plugin] != 'object') {
       return;
     }
     var editor = YAHOO.widget.EditorInfo.getEditorById(this.field);
     var button = editor.toolbar.getButtonByValue(plugin);
-    $(button._button).parent().css('background', 'transparent url(' + settings.icon + ') no-repeat center');
+    $(button._button).parent().css('background', 'transparent url(' + pluginSettings.icon + ') no-repeat center');
     // 'this' will reference the toolbar while inside the event handler.
     var instanceId = this.field;
     editor.toolbar.on(plugin + 'Click', function (e) {
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/jwysiwyg.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/jwysiwyg.inc
index ae7ebda0..75c0fd57 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/jwysiwyg.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/jwysiwyg.inc
@@ -11,24 +11,20 @@
 function wysiwyg_jwysiwyg_editor() {
   $editor['jwysiwyg'] = array(
     'title' => 'jWYSIWYG',
-    'vendor url' => 'http://code.google.com/p/jwysiwyg/',
-    'download url' => 'http://code.google.com/p/jwysiwyg/downloads/list',
+    'vendor url' => 'http://github.com/akzhan/jwysiwyg',
+    'download url' => 'http://github.com/akzhan/jwysiwyg/tags',
     'libraries' => array(
       '' => array(
         'title' => 'Source',
         'files' => array('jquery.wysiwyg.js'),
       ),
-      'pack' => array(
-        'title' => 'Packed',
-        'files' => array('jquery.wysiwyg.pack.js'),
-      ),
     ),
     'version callback' => 'wysiwyg_jwysiwyg_version',
     'settings form callback' => 'wysiwyg_jwysiwyg_settings_form',
     // @todo Wrong property; add separate properties for editor requisites.
     'css path' => wysiwyg_get_path('jwysiwyg'),
     'versions' => array(
-      '0.5' => array(
+      '0.97' => array(
         'js files' => array('jwysiwyg.js'),
         'css files' => array('jquery.wysiwyg.css'),
       ),
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/markitup.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/markitup.inc
index faa35b45..ba5e9a38 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/markitup.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/markitup.inc
@@ -29,7 +29,7 @@ function wysiwyg_markitup_editor() {
     'themes callback' => 'wysiwyg_markitup_themes',
     'settings form callback' => 'wysiwyg_markitup_settings_form',
     'settings callback' => 'wysiwyg_markitup_settings',
-    'plugin callback' => 'wysiwyg_markitup_plugins',
+    'plugin callback' => '_wysiwyg_markitup_plugins',
     'versions' => array(
       '1.1.5' => array(
         'js files' => array('markitup.js'),
@@ -188,7 +188,7 @@ function wysiwyg_markitup_settings($editor, $config, $theme) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_markitup_plugins($editor) {
+function _wysiwyg_markitup_plugins($editor) {
   return array(
     'default' => array(
       'buttons' => array(
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/nicedit.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/nicedit.inc
index 8a77564c..208fc531 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/nicedit.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/nicedit.inc
@@ -22,7 +22,7 @@ function wysiwyg_nicedit_editor() {
     'version callback' => 'wysiwyg_nicedit_version',
     'settings form callback' => 'wysiwyg_nicedit_settings_form',
     'settings callback' => 'wysiwyg_nicedit_settings',
-    'plugin callback' => 'wysiwyg_nicedit_plugins',
+    'plugin callback' => '_wysiwyg_nicedit_plugins',
     'versions' => array(
       '0.9' => array(
         'js files' => array('nicedit.js'),
@@ -107,7 +107,7 @@ function wysiwyg_nicedit_settings($editor, $config, $theme) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_nicedit_plugins($editor) {
+function _wysiwyg_nicedit_plugins($editor) {
   return array(
     'default' => array(
       'buttons' => array(
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/openwysiwyg.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/openwysiwyg.inc
index 5aae0ed8..562012eb 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/openwysiwyg.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/openwysiwyg.inc
@@ -24,7 +24,7 @@ function wysiwyg_openwysiwyg_editor() {
     'themes callback' => 'wysiwyg_openwysiwyg_themes',
     'settings form callback' => 'wysiwyg_openwysiwyg_settings_form',
     'settings callback' => 'wysiwyg_openwysiwyg_settings',
-    'plugin callback' => 'wysiwyg_openwysiwyg_plugins',
+    'plugin callback' => '_wysiwyg_openwysiwyg_plugins',
     'versions' => array(
       '1.4.7' => array(
         'js files' => array('openwysiwyg.js'),
@@ -157,7 +157,7 @@ function wysiwyg_openwysiwyg_settings($editor, $config, $theme) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_openwysiwyg_plugins($editor) {
+function _wysiwyg_openwysiwyg_plugins($editor) {
   $plugins = array(
     'default' => array(
       'buttons' => array(
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc
index 3316aa2c..5a21da4b 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/tinymce.inc
@@ -31,15 +31,14 @@ function wysiwyg_tinymce_editor() {
     'settings form callback' => 'wysiwyg_tinymce_settings_form',
     'init callback' => 'wysiwyg_tinymce_init',
     'settings callback' => 'wysiwyg_tinymce_settings',
-    'plugin callback' => 'wysiwyg_tinymce_plugins',
-    'plugin settings callback' => 'wysiwyg_tinymce_plugin_settings',
+    'plugin callback' => '_wysiwyg_tinymce_plugins',
+    'plugin meta callback' => '_wysiwyg_tinymce_plugin_meta',
     'proxy plugin' => array(
       'drupal' => array(
         'load' => TRUE,
         'proxy' => TRUE,
       ),
     ),
-    'proxy plugin settings callback' => 'wysiwyg_tinymce_proxy_plugin_settings',
     'versions' => array(
       '2.1' => array(
         'js files' => array('tinymce-2.js'),
@@ -478,42 +477,18 @@ function wysiwyg_tinymce_settings($editor, $config, $theme) {
 }
 
 /**
- * Build a JS settings array of native external plugins that need to be loaded separately.
- *
- * TinyMCE requires that external plugins (i.e. not residing in the editor's
- * directory) are loaded (once) upon initializing the editor.
+ * Build a JS settings array with global metadata for native external plugins.
  */
-function wysiwyg_tinymce_plugin_settings($editor, $profile, $plugins) {
-  $settings = array();
-  foreach ($plugins as $name => $plugin) {
-    if (!empty($plugin['load'])) {
-      // Add path for native external plugins; internal ones are loaded
-      // automatically.
-      if (empty($plugin['internal']) && isset($plugin['filename'])) {
-        $settings[$name] = base_path() . $plugin['path'] . '/' . $plugin['filename'];
-      }
+function _wysiwyg_tinymce_plugin_meta($editor, $plugin) {
+  $meta = NULL;
+  if (!empty($plugin['load'])) {
+    // Add path for native external plugins; internal ones are loaded
+    // automatically.
+    if (empty($plugin['internal']) && isset($plugin['filename'])) {
+      $meta = base_path() . $plugin['path'] . '/' . $plugin['filename'];
     }
   }
-  return $settings;
-}
-
-/**
- * Build a JS settings array for Drupal plugins loaded via the proxy plugin.
- */
-function wysiwyg_tinymce_proxy_plugin_settings($editor, $profile, $plugins) {
-  $settings = array();
-  foreach ($plugins as $name => $plugin) {
-    // Populate required plugin settings.
-    $settings[$name] = $plugin['dialog settings'] + array(
-      'title' => $plugin['title'],
-      'icon' => base_path() . $plugin['icon path'] . '/' . $plugin['icon file'],
-      'iconTitle' => $plugin['icon title'],
-    );
-    if (isset($plugin['css file'])) {
-      $settings[$name]['css'] = base_path() . $plugin['css path'] . '/' . $plugin['css file'];
-    }
-  }
-  return $settings;
+  return $meta;
 }
 
 /**
@@ -545,30 +520,30 @@ function _wysiwyg_tinymce_plugin_name($op, $name) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_tinymce_plugins($editor) {
+function _wysiwyg_tinymce_plugins($editor) {
   $plugins = array(
     'default' => array(
       'path' => $editor['library path'] . '/themes/advanced',
       'buttons' => array(
         'bold' => t('Bold'), 'italic' => t('Italic'), 'underline' => t('Underline'),
-        'strikethrough' => t('Strike-through'),
-        'justifyleft' => t('Align left'), 'justifycenter' => t('Align center'), 'justifyright' => t('Align right'), 'justifyfull' => t('Justify'),
-        'bullist' => t('Bullet list'), 'numlist' => t('Numbered list'),
+        'strikethrough' => t('Strikethrough'),
+        'justifyleft' => t('Align left'), 'justifycenter' => t('Align center'), 'justifyright' => t('Align right'), 'justifyfull' => t('Align full'),
+        'bullist' => t('Unordered list'), 'numlist' => t('Ordered list'),
         'outdent' => t('Outdent'), 'indent' => t('Indent'),
         'undo' => t('Undo'), 'redo' => t('Redo'),
         'link' => t('Link'), 'unlink' => t('Unlink'), 'anchor' => t('Anchor'),
         'image' => t('Image'),
-        'cleanup' => t('Clean-up'),
+        'cleanup' => t('Cleanup messy code'),
+        'forecolor' => t('Select text color'), 'backcolor' => t('Select background color'),
         'formatselect' => t('Block format'), 'styleselect' => t('Styles'),
         'fontselect' => t('Font'), 'fontsizeselect' => t('Font size'),
-        'forecolor' => t('Forecolor'), 'backcolor' => t('Backcolor'),
         'sup' => t('Superscript'), 'sub' => t('Subscript'),
-        'blockquote' => t('Blockquote'), 'code' => t('Source code'),
-        'hr' => t('Horizontal rule'),
+        'blockquote' => t('Blockquote'), 'code' => t('Edit HTML Source'),
+        'hr' => t('Insert horizontal ruler'),
         'cut' => t('Cut'), 'copy' => t('Copy'), 'paste' => t('Paste'),
-        'visualaid' => t('Visual aid'),
-        'removeformat' => t('Remove format'),
-        'charmap' => t('Character map'),
+        'visualaid' => t('Toggle guidelines/invisible elements'),
+        'removeformat' => t('Remove formatting'),
+        'charmap' => t('Insert custom character'),
         'help' => t('Help'),
       ),
       'internal' => TRUE,
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/whizzywig.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/whizzywig.inc
index 3c627c40..c5e43c2b 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/whizzywig.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/whizzywig.inc
@@ -16,16 +16,22 @@ function wysiwyg_whizzywig_editor() {
     'libraries' => array(
       '' => array(
         'title' => 'Default',
-        'files' => array('whizzywig.js', 'xhtml.js'),
+        'files' => array('whizzywig.js'),
       ),
     ),
     'version callback' => 'wysiwyg_whizzywig_version',
     'settings form callback' => 'wysiwyg_whizzywig_settings_form',
     'settings callback' => 'wysiwyg_whizzywig_settings',
-    'plugin callback' => 'wysiwyg_whizzywig_plugins',
+    'plugin callback' => '_wysiwyg_whizzywig_plugins',
     'versions' => array(
       '55' => array(
         'js files' => array('whizzywig.js'),
+        'libraries' => array(
+          '' => array(
+            'title' => 'Default',
+            'files' => array('whizzywig.js', 'xhtml.js'),
+          ),
+        ),
       ),
       '56' => array(
         'js files' => array('whizzywig-56.js'),
@@ -131,7 +137,7 @@ function wysiwyg_whizzywig_settings($editor, $config, $theme) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_whizzywig_plugins($editor) {
+function _wysiwyg_whizzywig_plugins($editor) {
   return array(
     'default' => array(
       'buttons' => array(
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/wymeditor.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/wymeditor.inc
index d317d26b..a22348f1 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/wymeditor.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/wymeditor.inc
@@ -32,7 +32,7 @@ function wysiwyg_wymeditor_editor() {
     'themes callback' => 'wysiwyg_wymeditor_themes',
     'settings form callback' => 'wysiwyg_wymeditor_settings_form',
     'settings callback' => 'wysiwyg_wymeditor_settings',
-    'plugin callback' => 'wysiwyg_wymeditor_plugins',
+    'plugin callback' => '_wysiwyg_wymeditor_plugins',
     'versions' => array(
       '0.5-rc1' => array(
         'js files' => array('wymeditor.js'),
@@ -216,7 +216,7 @@ function wysiwyg_wymeditor_settings($editor, $config, $theme) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_wymeditor_plugins($editor) {
+function _wysiwyg_wymeditor_plugins($editor) {
   $plugins = array(
     'default' => array(
       'buttons' => array(
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/editors/yui.inc b/profiles/wcm_base/modules/contrib/wysiwyg/editors/yui.inc
index db952b60..54ce7cae 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/editors/yui.inc
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/editors/yui.inc
@@ -45,15 +45,15 @@ function wysiwyg_yui_editor() {
     'settings form callback' => 'wysiwyg_yui_settings_form',
     'load callback' => 'wysiwyg_yui_load',
     'settings callback' => 'wysiwyg_yui_settings',
-    'plugin callback' => 'wysiwyg_yui_plugins',
-    'plugin settings callback' => 'wysiwyg_yui_plugin_settings',
+    'plugin callback' => '_wysiwyg_yui_plugins',
+    'plugin meta callback' => '_wysiwyg_yui_plugin_meta',
     'proxy plugin' => array(
       'drupal' => array(
         'load' => TRUE,
         'proxy' => TRUE,
       ),
     ),
-    'proxy plugin settings callback' => 'wysiwyg_yui_proxy_plugin_settings',
+    'proxy plugin settings callback' => '_wysiwyg_yui_proxy_plugin_settings',
     'versions' => array(
       '2.7.0' => array(
         'js files' => array('yui.js'),
@@ -307,36 +307,27 @@ function wysiwyg_yui_button_setting($editor, $plugin, $button, $extra = array())
 }
 
 /**
- * Build a JS settings array of native external plugins that need to be loaded separately.
+ * Build a JS settings array with global metadata for native external plugins.
  */
-function wysiwyg_yui_plugin_settings($editor, $profile, $plugins) {
-  $settings = array();
-  foreach ($plugins as $name => $plugin) {
-    if (!empty($plugin['load'])) {
-      // Add path for native external plugins; internal ones are loaded
-      // automatically.
-      if (empty($plugin['internal']) && isset($plugin['path'])) {
-        $settings[$name] = base_path() . $plugin['path'];
-      }
+function _wysiwyg_yui_plugin_meta($editor, $plugin) {
+  $meta = NULL;
+  if (!empty($plugin['load'])) {
+    // Add path for native external plugins; internal ones are loaded
+    // automatically.
+    if (empty($plugin['internal']) && isset($plugin['path'])) {
+      $meta = base_path() . $plugin['path'];
     }
   }
-  return $settings;
+  return $meta;
 }
 
 /**
  * Build a JS settings array for Drupal plugins loaded via the proxy plugin.
  */
-function wysiwyg_yui_proxy_plugin_settings($editor, $profile, $plugins) {
+function _wysiwyg_yui_proxy_plugin_settings($editor, $profile, $plugins) {
   $settings = array();
   foreach ($plugins as $name => $plugin) {
-    // Populate required plugin settings.
-    $settings[$name] = $plugin['dialog settings'] + array(
-      'title' => $plugin['title'],
-      'icon' => base_path() . $plugin['icon path'] . '/' . $plugin['icon file'],
-      'iconTitle' => $plugin['icon title'],
-      // @todo These should only be set if the plugin defined them.
-      'css' => base_path() . $plugin['css path'] . '/' . $plugin['css file'],
-    );
+    $settings[$name] = array();
   }
   return $settings;
 }
@@ -344,7 +335,7 @@ function wysiwyg_yui_proxy_plugin_settings($editor, $profile, $plugins) {
 /**
  * Return internal plugins for this editor; semi-implementation of hook_wysiwyg_plugin().
  */
-function wysiwyg_yui_plugins($editor) {
+function _wysiwyg_yui_plugins($editor) {
   return array(
     'default' => array(
       'buttons' => array(
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info b/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info
index b957f8be..98011820 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/tests/wysiwyg_test.info
@@ -6,9 +6,9 @@ hidden = TRUE
 dependencies[] = wysiwyg
 files[] = wysiwyg_test.module
 
-; Information added by Drupal.org packaging script on 2015-07-03
-version = "7.x-2.2+63-dev"
+; Information added by Drupal.org packaging script on 2015-10-25
+version = "7.x-2.2+70-dev"
 core = "7.x"
 project = "wysiwyg"
-datestamp = "1435932899"
+datestamp = "1445739545"
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.api.php b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.api.php
index 53e81a96..0ed07bd2 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.api.php
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.api.php
@@ -224,8 +224,10 @@ function hook_INCLUDE_editor() {
     'settings callback' => 'wysiwyg_ckeditor_settings',
     // A callback to supply definitions of available editor plugins.
     'plugin callback' => 'wysiwyg_ckeditor_plugins',
-    // A callback to convert administrative plugin settings for a editor profile
-    // into JavaScript settings.
+    // A callback to supply global metadata for a single native external plugin.
+    'plugin meta callback' => 'wysiwyg_ckeditor_plugin_meta',
+    // A callback to convert administrative plugin settings for an editor
+    // profile into JavaScript settings per profile.
     'plugin settings callback' => 'wysiwyg_ckeditor_plugin_settings',
     // (optional) Defines the proxy plugin that handles plugins provided by
     // Drupal modules, which work in all editors that support proxy plugins.
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info
index 620e071f..f852be42 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.info
@@ -9,9 +9,9 @@ configure = admin/config/content/wysiwyg
 files[] = wysiwyg.module
 files[] = tests/wysiwyg.test
 
-; Information added by Drupal.org packaging script on 2015-07-03
-version = "7.x-2.2+63-dev"
+; Information added by Drupal.org packaging script on 2015-10-25
+version = "7.x-2.2+70-dev"
 core = "7.x"
 project = "wysiwyg"
-datestamp = "1435932899"
+datestamp = "1445739545"
 
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js
index f43a2e91..cfb848de 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.js
@@ -1,11 +1,29 @@
 (function($) {
 
+// Check if this file has already been loaded.
+if (typeof Drupal.wysiwygAttach !== 'undefined') {
+  return;
+}
+
 // Keeps track of editor status during AJAX operations, active format and more.
 // Always use getFieldInfo() to get a valid reference to the correct data.
-var _fieldInfoStorage = Drupal.wysiwyg._fieldInfoStorage = (Drupal.wysiwyg._fieldInfoStorage || {});
+var _fieldInfoStorage = {};
 // Keeps track of information relevant to each format, such as editor settings.
 // Always use getFormatInfo() to get a reference to a format's data.
-var _formatInfoStorage = _formatInfoStorage = (Drupal.wysiwyg._formatInfoStorage || {});
+var _formatInfoStorage = {};
+
+// Keeps track of global and per format plugin configurations.
+// Always use getPluginInfo() tog get a valid reference to the correct data.
+var _pluginInfoStorage = {'global': {'drupal': {}, 'native': {}}};
+
+// Keeps track of private instance information.
+var _internalInstances = {};
+
+// Keeps track of initialized editor libraries.
+var _initializedLibraries = {};
+
+// Keeps a map between format selectboxes and fields.
+var _selectToField = {};
 
 /**
  * Returns field specific editor data.
@@ -23,13 +41,8 @@ var _formatInfoStorage = _formatInfoStorage = (Drupal.wysiwyg._formatInfoStorage
  * No external code should need access to this, and it may likely change in the
  * future.
  *
- * Can be used to just test if data exists for a field by passing false/null as
- * the defaultData argument and check if the return value evaluates to true.
- *
  * @param fieldId
  *   The id of the field to get data for.
- * @param defaultData
- *   Used internally to set initial data for a field.
  *
  * @returns
  *   A reference to an object with the following properties:
@@ -41,20 +54,15 @@ var _formatInfoStorage = _formatInfoStorage = (Drupal.wysiwyg._formatInfoStorage
  *   - trigger: A string with the id of the format selector for the field.
  *   - getFormatInfo: Shortcut method to getFormatInfo(fieldInfo.activeFormat).
  */
-function getFieldInfo(fieldId, defaultData) {
-  if (!_fieldInfoStorage[fieldId]) {
-    var baseFieldId = (fieldId.indexOf('--') === -1 ? fieldId : fieldId.substr(0, fieldId.indexOf('--')));
-    if (!_fieldInfoStorage[baseFieldId]) {
-      if (typeof defaultData !== 'undefined') {
-        _fieldInfoStorage[baseFieldId] = defaultData;
-      }
-      else {
-        throw new Error('Wysiwyg module has no information about field "' + fieldId + '"');
-      }
-    }
+function getFieldInfo(fieldId) {
+  if (_fieldInfoStorage[fieldId]) {
+    return _fieldInfoStorage[fieldId];
+  }
+  var baseFieldId = (fieldId.indexOf('--') === -1 ? fieldId : fieldId.substr(0, fieldId.indexOf('--')));
+  if (_fieldInfoStorage[baseFieldId]) {
     return _fieldInfoStorage[baseFieldId];
   }
-  return _fieldInfoStorage[fieldId];
+  throw new Error('Wysiwyg module has no information about field "' + fieldId + '"');
 }
 
 /**
@@ -64,13 +72,8 @@ function getFieldInfo(fieldId, defaultData) {
  * No external code should need access to this, and it may likely change in the
  * future.
  *
- * Can be used to just test if data exists for a format by passing false/null as
- * the defaultData argument and check if the return value evaluates to true.
- *
  * @param formatId
  *   The id of a format to get data for.
- * @param defaultData
- *   Used internally to set initial data for a format.
  *
  * @returns
  *   A reference to an object with the following properties:
@@ -79,37 +82,66 @@ function getFieldInfo(fieldId, defaultData) {
  *   - enabled: True if the editor is active.
  *   - toggle: True if the editor can be toggled on/off by the user.
  *   - editorSettings: A structure holding editor settings for this format.
+ *   - getPluginInfo: Shortcut method to get plugin config for the this format.
  */
-function getFormatInfo(formatId, defaultData) {
-  if (!_formatInfoStorage[formatId]) {
-    if (typeof defaultData !== 'undefined') {
-      _formatInfoStorage[formatId] = defaultData;
-    }
-    else {
-      return {
-        editor: 'none'
-      };
-    }
+function getFormatInfo(formatId) {
+  if (_formatInfoStorage[formatId]) {
+    return _formatInfoStorage[formatId];
   }
-  return _formatInfoStorage[formatId];
+  return {
+    editor: 'none',
+    getPluginInfo: function () {
+      return getPluginInfo(formatId);
+    }
+  };
 }
 
 /**
- * Initialize editor libraries.
+ * Returns plugin configuration for a specific format, or the global values.
+ *
+ * @param formatId
+ *   The id of a format to get data for, or 'global' to get data common to all
+ *   formats and editors. Use 'global:editorname' to limit it to one editor.
  *
- * Some editors need to be initialized before the DOM is fully loaded. The
- * init hook gives them a chance to do so.
+ * @return
+ *   The returned object will have the sub-objects 'drupal' and 'native', each
+ *   with properties matching names of plugins.
+ *   Global data for Drupal (cross-editor) plugins will have the following keys:
+ *   - title: A human readable name for the button.
+ *   - internalName: The unique name of a native plugin wrapper, used in editor
+ *     profiles and when registering the plugin with the editor API to avoid
+ *     possible id conflicts with native plugins.
+ *   - css: A stylesheet needed by the plugin.
+ *   - icon path: The path where button icons are stored.
+ *   - path: The path to the plugin's main folder.
+ *   - buttons: An object with button data, keyed by name with the properties:
+ *     - description: A human readable string describing the button's function.
+ *     - title: A human readable string with the name of the button.
+ *     - icon: An object with one or more of the following properties:
+ *       - src: An absolute (begins with '/') or relative path to the icon.
+ *       - path: An absolute path to a folder containing the button.
+ *
+ *   When formatId matched a format with an assigned editor, values for plugins
+ *   match the return value of the editor integration's [proxy] plugin settings
+ *   callbacks.
+ *
+ *   @see Drupal.wysiwyg.utilities.getPluginInfo()
+ *   @see Drupal.wyswiyg.utilities.extractButtonSettings()
  */
-Drupal.wysiwygInit = function() {
-  // This breaks in Konqueror. Prevent it from running.
-  if (/KDE/.test(navigator.vendor)) {
-    return;
+function getPluginInfo(formatId) {
+  var match, editor;
+  if ((match = formatId.match(/^global:(\w+)$/))) {
+    formatId = 'global';
+    editor = match[1];
   }
-  jQuery.each(Drupal.wysiwyg.editor.init, function(editor) {
-    // Clone, so original settings are not overwritten.
-    this(jQuery.extend(true, {}, Drupal.settings.wysiwyg.configs[editor]));
-  });
-};
+  if (!_pluginInfoStorage[formatId]) {
+    return {};
+  }
+  if (formatId === 'global' && typeof editor !== 'undefined') {
+    return { 'drupal': _pluginInfoStorage.global.drupal, 'native': (_pluginInfoStorage.global['native'][editor]) };
+  }
+  return _pluginInfoStorage[formatId];
+}
 
 /**
  * Attach editors to input formats and target elements (f.e. textareas).
@@ -136,103 +168,29 @@ Drupal.behaviors.attachWysiwyg = {
     if (/KDE/.test(navigator.vendor)) {
       return;
     }
-
+    updateInternalState(settings.wysiwyg, context);
     $('.wysiwyg:input', context).once('wysiwyg', function () {
-      // Skip processing if the trigger is unknown or does not exist in this
+      // Skip processing if the element is unknown or does not exist in this
       // document. Can happen after a form was removed but Drupal.ajax keeps a
       // lingering reference to the form and calls Drupal.attachBehaviors().
-      var $this = $('#' + this.id, document), trigger = settings.wysiwyg.triggers[this.id];
-      if (!trigger || !$this.length) {
+      var $this = $('#' + this.id, document);
+      if (!$this.length) {
         return;
       }
-
-      var $selectbox;
-      if (trigger.select) {
-        // Specifically target input elements in case selectbox wrappers have
-        // hidden the real element and cloned its attributes.
-        $selectbox = $('#' + trigger.select + ':input', context);
-      }
-
-      // Create the field info if this field (or one with the same base id)
-      // does not already exist.
-      var fieldInfo = getFieldInfo(trigger.field, {
-        activeFormat: 'format' + ($selectbox ? $selectbox.val() : trigger.activeFormat),
-        formats: {},
-        resizable: trigger.resizable,
-        getFormatInfo: function () {
-          return getFormatInfo(this.activeFormat);
-        }
-      });
-      // Always update these since Drupal generates new ids on AJAX calls.
-      if (trigger.select) {
-        fieldInfo.select = trigger.select;
-      }
-      fieldInfo.summary = trigger.summary;
-      for (var format in trigger) {
-        if (format.indexOf('format') != 0) {
-          continue;
-        }
-        if (!fieldInfo.formats[format]) {
-          fieldInfo.formats[format] = {
-            'enabled': trigger[format].status
-          }
-          if (trigger[format].skip_summary) {
-            fieldInfo.formats[format].skip_summary = true;
-          }
-        }
-        // Build the cache of format/profile settings.
-        var formatInfo = getFormatInfo(format, null);
-        if (!formatInfo) {
-          var formatSettings = {};
-          // Settings can be missing if the editor isn't configured yet.
-          if (settings.wysiwyg.configs[trigger[format].editor]) {
-            formatSettings = settings.wysiwyg.configs[trigger[format].editor][format];
-          }
-          formatInfo = getFormatInfo(format, {
-            editor: trigger[format].editor,
-            toggle: trigger[format].toggle,
-            editorSettings: processObjectTypes(formatSettings)
-          });
-        }
-      }
-      fieldInfo.enabled = fieldInfo.formats[fieldInfo.activeFormat] && fieldInfo.formats[fieldInfo.activeFormat].enabled;
       // Directly attach this editor, if the input format is enabled or there is
       // only one input format at all.
-      Drupal.wysiwygAttach(context, trigger.field);
-      // Attach onChange handlers to input format selector elements.
-      if ($selectbox && $selectbox.is('select')) {
-        $selectbox.change((function(context, fieldId) {
-          return function (event) {
-            // Field state is fetched by reference.
-            var currentField = getFieldInfo(fieldId);
-            // Save the state of the current format.
-            if (currentField.formats[currentField.activeFormat]) {
-              currentField.formats[currentField.activeFormat].enabled = currentField.enabled;
-            }
-            // Switch format/profile.
-            currentField.activeFormat = 'format' + this.value;
-            // Load the state from the new format.
-            if (currentField.formats[currentField.activeFormat]) {
-              currentField.enabled = currentField.formats[currentField.activeFormat].enabled;
-            }
-            else {
-              currentField.enabled = false;
-            }
-            // Attaching again will use the changed field state.
-            Drupal.wysiwygAttach(context, fieldId);
-          }
-        })(context, trigger.field));
-      }
+      Drupal.wysiwygAttach(context, this.id);
+    })
+    .closest('form').submit(function (event) {
       // Detach any editor when the containing form is submitted.
-      $this.closest('form').submit((function (context, fieldId) {
-        return function (event) {
-          // Do not detach if the event was cancelled.
-          if (event.isDefaultPrevented()) {
-            return;
-          }
-          Drupal.wysiwygDetach(context, fieldId, 'serialize');
-        }
-      })(context, trigger.field));
+      // Do not detach if the event was cancelled.
+      if (event.isDefaultPrevented()) {
+        return;
+      }
+      var form = this;
+      $('.wysiwyg:input', this).each(function () {
+        Drupal.wysiwygDetach(form, this.id, 'serialize');
+      });
     });
   },
 
@@ -259,7 +217,7 @@ Drupal.behaviors.attachWysiwyg = {
  *
  * Detaches any existing instance for the field before attaching a new instance
  * based on the current state of the field. Editor settings and state
- * information is fetched  based on the element id and get cloned first, so they
+ * information is fetched based on the element id and get cloned first, so they
  * cannot be overridden. After attaching the editor, the toggle link is shown
  * again, except in case we are attaching no editor.
  *
@@ -273,21 +231,22 @@ Drupal.behaviors.attachWysiwyg = {
 Drupal.wysiwygAttach = function(context, fieldId) {
   var fieldInfo = getFieldInfo(fieldId),
       formatInfo = fieldInfo.getFormatInfo(),
+      editorSettings = formatInfo.editorSettings,
       editor = formatInfo.editor,
-      previousStatus = status,
+      previousStatus = false,
       previousEditor = 'none',
       doSummary = (fieldInfo.summary && (!fieldInfo.formats[fieldInfo.activeFormat] || !fieldInfo.formats[fieldInfo.activeFormat].skip_summary));
-  if (Drupal.wysiwyg.instances[fieldId]) {
-    previousStatus = Drupal.wysiwyg.instances[fieldId]['status'];
-    previousEditor = Drupal.wysiwyg.instances[fieldId].editor;
+  if (_internalInstances[fieldId]) {
+    previousStatus = _internalInstances[fieldId]['status'];
+    previousEditor = _internalInstances[fieldId].editor;
   }
   // Detach any previous editor instance if enabled, else remove the grippie.
   detachFromField(context, {'editor': previousEditor, 'status': previousStatus, 'field': fieldId, 'resizable': fieldInfo.resizable}, 'unload');
   if (doSummary) {
     // Summary instances may have a different status if no real editor was
     // attached yet because the field was hidden.
-    if (Drupal.wysiwyg.instances[fieldInfo.summary]) {
-      previousStatus = Drupal.wysiwyg.instances[fieldInfo.summary]['status'];
+    if (_internalInstances[fieldInfo.summary]) {
+      previousStatus = _internalInstances[fieldInfo.summary]['status'];
     }
     detachFromField(context, {'editor': previousEditor, 'status': previousStatus, 'field': fieldInfo.summary, 'resizable': fieldInfo.resizable}, 'unload');
   }
@@ -297,8 +256,6 @@ Drupal.wysiwygAttach = function(context, fieldId) {
   Drupal.wysiwyg.activeId = fieldId;
   // Attach or update toggle link, if enabled.
   Drupal.wysiwygAttachToggleLink(context, fieldId);
-  // Clone editor settings to be sure they don't get altered.
-  var editorSettings = jQuery.extend(true, {}, formatInfo.editorSettings);
   // Attach to main field.
   attachToField(context, {'status': fieldInfo.enabled, 'editor': editor, 'field': fieldId, 'format': fieldInfo.activeFormat, 'resizable': fieldInfo.resizable}, editorSettings);
   // Attach to summary field.
@@ -321,6 +278,258 @@ Drupal.wysiwygAttach = function(context, fieldId) {
   }
 };
 
+/**
+ * The public API exposed for an editor-enabled field.
+ *
+ * Properties should be treated as read-only state and changing them will not
+ * have any effect on how the instance behaves.
+ *
+ * Note: The attach() and detach() methods are not part of the public API and
+ * should not be called directly to avoid synchronization issues.
+ * Use Drupal.wysiwygAttach() and Drupal.wysiwygDetach() to activate or
+ * deactivate editor instances. Externally switching the active editor is not
+ * supported other than changing the format using the select element.
+ */
+function WysiwygInstance(internalInstance) {
+  // The id of the field the instance manipulates.
+  this.field = internalInstance.field;
+  // The internal name of the attached editor.
+  this.editor = internalInstance.editor;
+  // If the editor is currently enabled or not.
+  this['status'] = internalInstance['status'];
+  // The id of the text format the editor is attached to.
+  this.format = internalInstance.format;
+  // If the field is resizable without an editor attached.
+  this.resizable = internalInstance.resizable;
+
+  // Methods below here redirect to the 'none' editor which handles plain text
+  // fields when the editor is disabled.
+
+   /**
+    * Insert content at the cursor position.
+    *
+    * @param content
+    *   An HTML markup string.
+    */
+  this.insert = function (content) {
+    return internalInstance['status'] ? internalInstance.insert(content) : Drupal.wysiwyg.editor.instance.none.insert.call(internalInstance, content);
+  }
+
+  /**
+   * Get all content from the editor.
+   *
+   * @return
+   *   An HTML markup string.
+   */
+  this.getContent = function () {
+    return internalInstance['status'] ? internalInstance.getContent() : Drupal.wysiwyg.editor.instance.none.getContent.call(internalInstance);
+  }
+
+  /**
+   * Replace all content in the editor.
+   *
+   * @param content
+   *   An HTML markup string.
+   */
+  this.setContent = function (content) {
+    return internalInstance['status'] ? internalInstance.setContent(content) : Drupal.wysiwyg.editor.instance.none.setContent.call(internalInstance, content);
+  }
+
+  /**
+   * Check if the editor is in fullscreen mode.
+   *
+   * @return bool
+   *  True if the editor is considered to be in fullscreen mode.
+   */
+  this.isFullscreen = function (content) {
+    return internalInstance['status'] && $.isFunction(internalInstance.isFullscreen) ? internalInstance.isFullscreen() : false;
+  }
+
+  // @todo The methods below only work for TinyMCE, deprecate?
+
+  /**
+   * Open a native editor dialog.
+   *
+   * Use of this method i not recomended due to limited editor support.
+   *
+   * @param dialog
+   *   An object with dialog settings. Keys used:
+   *   - url: The url of the dialog template.
+   *   - width: Width in pixels.
+   *   - height: Height in pixels.
+   */
+  this.openDialog = function (dialog, params) {
+    if ($.isFunction(internalInstance.openDialog)) {
+      return internalInstance.openDialog(dialog, params)
+    }
+  }
+
+  /**
+   * Close an opened dialog.
+   *
+   * @param dialog
+   *   Same options as for opening a dialog.
+   */
+  this.closeDialog = function (dialog) {
+    if ($.isFunction(internalInstance.closeDialog)) {
+      return internalInstance.closeDialog(dialog)
+    }
+  }
+}
+
+/**
+ * The private base for editor instances.
+ *
+ * An instance of this object is used as the context for all calls into the
+ * editor instances (including attach() and detach() when only one instance is
+ * asked to detach).
+ *
+ * Anything added to Drupal.wysiwyg.editor.instance[editorName] is cloned into
+ * an instance of this function.
+ *
+ * Editor state parameters are cloned into the instance after that.
+ */
+function WysiwygInternalInstance(params) {
+  $.extend(true, this, Drupal.wysiwyg.editor.instance[params.editor]);
+  $.extend(true, this, params);
+  this.pluginInfo = {
+    'global': getPluginInfo('global:' + params.editor),
+    'instances': getPluginInfo(params.format)
+  };
+  // Keep track of the public face to keep it synced.
+  this.publicInstance = new WysiwygInstance(this);
+}
+
+/**
+ * Updates internal settings and state caches with new information.
+ *
+ * Attaches selection change handler to format selector to track state changes.
+ *
+ * @param settings
+ *   A structure like Drupal.settigns.wysiwyg.
+ * @param context
+ *   The context given from Drupal.attachBehaviors().
+ */
+function updateInternalState(settings, context) {
+  var pluginData = settings.plugins;
+  for (var plugin in pluginData.drupal) {
+    if (!(plugin in _pluginInfoStorage.global.drupal)) {
+      _pluginInfoStorage.global.drupal[plugin] = pluginData.drupal[plugin];
+    }
+  }
+  // To make sure we don't rely on Drupal.settings, uncomment these for testing.
+  //pluginData.drupal = {};
+  for (var editorId in pluginData['native']) {
+    for (var plugin in pluginData['native'][editorId]) {
+      _pluginInfoStorage.global['native'][editorId] = (_pluginInfoStorage.global['native'][editorId] || {});
+      if (!(plugin in _pluginInfoStorage.global['native'][editorId])) {
+        _pluginInfoStorage.global['native'][editorId][plugin] = pluginData['native'][editorId][plugin];
+      }
+    }
+  }
+  //pluginData['native'] = {};
+  for (var fmatId in pluginData) {
+    if (fmatId.substr(0, 6) !== 'format') {
+      continue;
+    }
+    _pluginInfoStorage[fmatId] = (_pluginInfoStorage[fmatId] || {'drupal': {}, 'native': {}});
+    for (var plugin in pluginData[fmatId].drupal) {
+      if (!(plugin in _pluginInfoStorage[fmatId].drupal)) {
+        _pluginInfoStorage[fmatId].drupal[plugin] = pluginData[fmatId].drupal[plugin];
+      }
+    }
+    for (var plugin in pluginData[fmatId]['native']) {
+      if (!(plugin in _pluginInfoStorage[fmatId]['native'])) {
+        _pluginInfoStorage[fmatId]['native'][plugin] = pluginData[fmatId]['native'][plugin];
+      }
+    }
+    delete pluginData[fmatId];
+  }
+  // Build the cache of format/profile settings.
+  for (var editor in settings.configs) {
+    if (!settings.configs.hasOwnProperty(editor)) {
+      continue;
+    }
+    for (var format in settings.configs[editor]) {
+      if (_formatInfoStorage[format] || !settings.configs[editor].hasOwnProperty(format)) {
+        continue;
+      }
+      _formatInfoStorage[format] = {
+        editor: editor,
+        toggle: true, // Overridden by triggers.
+        editorSettings: processObjectTypes(settings.configs[editor][format])
+      };
+    }
+    // Initialize editor libraries if not already done.
+    if (!_initializedLibraries[editor] && typeof Drupal.wysiwyg.editor.init[editor] === 'function') {
+      // Clone, so original settings are not overwritten.
+      Drupal.wysiwyg.editor.init[editor](jQuery.extend(true, {}, settings.configs[editor]), getPluginInfo('global:' + editor));
+      _initializedLibraries[editor] = true;
+    }
+  }
+  //settings.configs = {};
+  for (var triggerId in settings.triggers) {
+    var trigger = settings.triggers[triggerId];
+    var fieldId = trigger.field;
+    var baseFieldId = (fieldId.indexOf('--') === -1 ? fieldId : fieldId.substr(0, fieldId.indexOf('--')));
+    var fieldInfo = null;
+    if (!(fieldInfo = _fieldInfoStorage[baseFieldId])) {
+      fieldInfo = _fieldInfoStorage[baseFieldId] = {
+        formats: {},
+        select: trigger.select,
+        resizable: trigger.resizable,
+        summary: trigger.summary,
+        getFormatInfo: function () {
+          if (this.select) {
+            this.activeFormat = 'format' + $('#' + this.select + ':input').val();
+          }
+          return getFormatInfo(this.activeFormat);
+        }
+        // 'activeFormat' and 'enabled' added below.
+      }
+    };
+    for (var format in trigger) {
+      if (format.indexOf('format') != 0 || fieldInfo.formats[format]) {
+        continue;
+      }
+      fieldInfo.formats[format] = {
+        'enabled': trigger[format].status
+      }
+      if (!_formatInfoStorage[format]) {
+        _formatInfoStorage[format] = {
+          editor: trigger[format].editor,
+          editorSettings: {},
+          getPluginInfo: function () {
+            return getPluginInfo(formatId);
+          }
+        };
+      }
+      // Always update these since they are stored as state.
+      _formatInfoStorage[format].toggle = trigger[format].toggle;
+      if (trigger[format].skip_summary) {
+        fieldInfo.formats[format].skip_summary = true;
+      }
+    }
+    var $selectbox = null;
+    // Always update these since Drupal generates new ids on AJAX calls.
+    fieldInfo.summary = trigger.summary;
+    if (trigger.select) {
+      _selectToField[trigger.select.replace(/--\d+$/,'')] = trigger.field;
+      fieldInfo.select = trigger.select;
+      // Specifically target input elements in case selectbox wrappers have
+      // hidden the real element and cloned its attributes.
+      $selectbox = $('#' + trigger.select + ':input', context).filter('select');
+      // Attach onChange handlers to input format selector elements.
+      $selectbox.unbind('change.wysiwyg').bind('change.wysiwyg', formatChanged);
+    }
+    // Always update the active format to ensure the righ profile is used if a
+    // field was removed and gets re-added and the instance was left behind.
+    fieldInfo.activeFormat = 'format' + ($selectbox ? $selectbox.val() : trigger.activeFormat);
+    fieldInfo.enabled = fieldInfo.formats[fieldInfo.activeFormat] && fieldInfo.formats[fieldInfo.activeFormat].enabled;
+  }
+  //settings.triggers = {};
+}
+
 /**
  * Helper to prepare and attach an editor for a single field.
  *
@@ -335,7 +544,7 @@ Drupal.wysiwygAttach = function(context, fieldId) {
  *     false, the default textarea behaviors will be attached instead (aka the
  *     'none' editor implementation).
  *   - 'editor': The internal name of the editor to attach when active.
- *   - 'field': The field id to use as a output target for the editor.
+ *   - 'field': The field id to use as an output target for the editor.
  *   - 'format': The name of the active text format (prefixed 'format').
  *   - 'resizable': A boolean indicating whether the original textarea was
  *      resizable.
@@ -348,18 +557,15 @@ Drupal.wysiwygAttach = function(context, fieldId) {
 function attachToField(context, params, editorSettings) {
   // If the editor isn't active, attach default behaviors instead.
   var editor = (params.status ? params.editor : 'none');
-  // (Re-)initialize field instance.
-  Drupal.wysiwyg.instances[params.field] = {};
-  // Provide all input format parameters to editor instance.
-  jQuery.extend(true, Drupal.wysiwyg.instances[params.field], params);
-  // Provide editor callbacks for plugins, if available.
-  if (typeof Drupal.wysiwyg.editor.instance[editor] == 'object') {
-    jQuery.extend(true, Drupal.wysiwyg.instances[params.field], Drupal.wysiwyg.editor.instance[editor]);
-  }
   // Settings are deep merged (cloned) to prevent editor implementations from
   // permanently modifying them while attaching.
-  if (typeof Drupal.wysiwyg.editor.attach[editor] == 'function') {
-    Drupal.wysiwyg.editor.attach[editor](context, params, params.status ? jQuery.extend(true, {}, editorSettings) : {});
+  var clonedSettings = jQuery.extend(true, {}, editorSettings);
+  // (Re-)initialize field instance.
+  var internalInstance = new WysiwygInternalInstance(params);
+  _internalInstances[params.field] = internalInstance;
+  Drupal.wysiwyg.instances[params.field] = internalInstance.publicInstance;
+  if ($.isFunction(Drupal.wysiwyg.editor.attach[editor])) {
+    Drupal.wysiwyg.editor.attach[editor].call(internalInstance, context, params, params.status ? clonedSettings : {});
   }
 }
 
@@ -388,7 +594,7 @@ Drupal.wysiwygDetach = function (context, fieldId, trigger) {
   var fieldInfo = getFieldInfo(fieldId),
       editor = fieldInfo.getFormatInfo().editor,
       trigger = trigger || 'unload',
-      previousStatus = (Drupal.wysiwyg.instances[fieldId] && Drupal.wysiwyg.instances[fieldId]['status']);
+      previousStatus = (_internalInstances[fieldId] && _internalInstances[fieldId]['status']);
   // Detach from main field.
   detachFromField(context, {'editor': editor, 'status': previousStatus, 'field': fieldId, 'resizable': fieldInfo.resizable}, trigger);
   if (trigger == 'unload') {
@@ -398,13 +604,13 @@ Drupal.wysiwygDetach = function (context, fieldId, trigger) {
     Drupal.wysiwygAttachToggleLink(context, fieldId);
   }
   // Detach from summary field.
-  if (fieldInfo.summary && Drupal.wysiwyg.instances[fieldInfo.summary]) {
+  if (fieldInfo.summary && _internalInstances[fieldInfo.summary]) {
     // The "Edit summary" click handler could re-enable the editor by mistake.
     $('#' + fieldId).parents('.text-format-wrapper').find('.link-edit-summary').unbind('click.wysiwyg');
     // Summary instances may have a different status if no real editor was
     // attached yet because the field was hidden.
-    if (Drupal.wysiwyg.instances[fieldInfo.summary]) {
-      previousStatus = Drupal.wysiwyg.instances[fieldInfo.summary]['status'];
+    if (_internalInstances[fieldInfo.summary]) {
+      previousStatus = _internalInstances[fieldInfo.summary]['status'];
     }
     detachFromField(context, {'editor': editor, 'status': previousStatus, 'field': fieldInfo.summary, 'resizable': fieldInfo.resizable}, trigger);
     if (trigger == 'unload') {
@@ -427,7 +633,7 @@ Drupal.wysiwygDetach = function (context, fieldId, trigger) {
  *     false, the default textarea behaviors will be attached instead (aka the
  *     'none' editor implementation).
  *   - 'editor': The internal name of the editor to attach when active.
- *   - 'field': The field id to use as a output target for the editor.
+ *   - 'field': The field id to use as an output target for the editor.
  *   - 'format': The name of the active text format (prefixed 'format').
  *   - 'resizable': A boolean indicating whether the original textarea was
  *      resizable.
@@ -441,14 +647,15 @@ Drupal.wysiwygDetach = function (context, fieldId, trigger) {
  *     textarea restored.
  *
  * @see Drupal.wysiwygDetach()
- **/
+ */
 function detachFromField(context, params, trigger) {
   var editor = (params.status ? params.editor : 'none');
   if (jQuery.isFunction(Drupal.wysiwyg.editor.detach[editor])) {
-    Drupal.wysiwyg.editor.detach[editor](context, params, trigger);
+    Drupal.wysiwyg.editor.detach[editor].call(_internalInstances[params.field], context, params, trigger);
   }
   if (trigger == 'unload') {
     delete Drupal.wysiwyg.instances[params.field];
+    delete _internalInstances[params.field];
   }
 }
 
@@ -509,6 +716,32 @@ Drupal.wysiwyg.toggleWysiwyg = function (event) {
   fieldInfo.formats[fieldInfo.activeFormat].enabled = fieldInfo.enabled;
 }
 
+
+/**
+ * Event handler for when the selected format is changed.
+ */
+function formatChanged(event) {
+  var fieldId = _selectToField[this.id.replace(/--\d+$/,'')];
+  var context = $(this).closest('form');
+  // Field state is fetched by reference.
+  var currentField = getFieldInfo(fieldId);
+  // Save the state of the current format.
+  if (currentField.formats[currentField.activeFormat]) {
+    currentField.formats[currentField.activeFormat].enabled = currentField.enabled;
+  }
+  // Switch format/profile.
+  currentField.activeFormat = 'format' + this.value;
+  // Load the state from the new format.
+  if (currentField.formats[currentField.activeFormat]) {
+    currentField.enabled = currentField.formats[currentField.activeFormat].enabled;
+  }
+  else {
+    currentField.enabled = false;
+  }
+  // Attaching again will use the changed field state.
+  Drupal.wysiwygAttach(context, fieldId);
+}
+
 /**
  * Convert JSON type placeholders into the actual types.
  *
@@ -637,14 +870,16 @@ if (oldBeforeSerialize) {
   }
 }
 
-/**
- * Allow certain editor libraries to initialize before the DOM is loaded.
- */
-Drupal.wysiwygInit();
-
 // Respond to CTools detach behaviors event.
 $(document).unbind('CToolsDetachBehaviors.wysiwyg').bind('CToolsDetachBehaviors.wysiwyg', function(event, context) {
-  Drupal.behaviors.attachWysiwyg.detach(context, {}, 'unload');
+  $('.wysiwyg:input', context).removeOnce('wysiwyg').each(function () {
+    Drupal.wysiwygDetach(context, this.id, 'unload');
+    // The 'none' instances are destroyed with the dialog.
+    delete Drupal.wysiwyg.instances[this.id];
+    delete _internalInstances[this.id];
+    var baseFieldId = (this.id.indexOf('--') === -1 ? this.id : this.id.substr(0, this.id.indexOf('--')));
+    delete _fieldInfoStorage[baseFieldId];
+  });
 });
 
 })(jQuery);
diff --git a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.module b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.module
index ce897469..c9e34e9a 100644
--- a/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.module
+++ b/profiles/wcm_base/modules/contrib/wysiwyg/wysiwyg.module
@@ -195,7 +195,8 @@ function wysiwyg_pre_render_text_format($element) {
   // filter_process_format() copies properties to the expanded 'value' child
   // element. Skip this text format widget, if it contains no 'format' or when
   // the current user does not have access to edit the value.
-  if (!isset($element['format']) || !empty($element['value']['#disabled'])) {
+  // Simplify module creates an extra incomplete 'format' on the base field.
+  if (!isset($element['format']['format']) || !empty($element['value']['#disabled'])) {
     return $element;
   }
   // Allow modules to programmatically enforce no client-side editor by setting
@@ -399,6 +400,11 @@ function wysiwyg_load_editor($profile) {
     }
   }
 
+  // Check if settings were already added on the page that makes an AJAX call.
+  if (isset($_POST['ajax_page_state']) && !empty($_POST['ajax_page_state']['js'][$path . '/wysiwyg.js'])) {
+    $settings_added = TRUE;
+  }
+
   // Add basic Wysiwyg settings if any editor has been added.
   if (!isset($settings_added) && $loaded[$name]) {
     drupal_add_js(array('wysiwyg' => array(
@@ -500,24 +506,32 @@ function wysiwyg_add_plugin_settings($profile) {
   $proxy = (isset($editor['proxy plugin']) ? key($editor['proxy plugin']) : '');
 
   // Process native editor plugins.
-  if (isset($editor['plugin settings callback'])) {
-    // @todo Require PHP 5.1 in 3.x and use array_intersect_key().
-    $profile_plugins_native = array();
-    foreach ($plugins[$editor['name']] as $plugin => $meta) {
-      // Skip Drupal plugins (handled below).
-      if ($plugin === $proxy) {
-        continue;
-      }
-      // Only keep native plugins that are enabled in this profile.
-      if (isset($profile->settings['buttons'][$plugin])) {
-        $profile_plugins_native[$plugin] = $meta;
+  $profile_plugins_native = array();
+  foreach ($plugins[$editor['name']] as $plugin => $meta) {
+    // Skip Drupal plugins (handled below) and 'core' functionality.
+    if ($plugin === $proxy || $plugin === 'default') {
+      continue;
+    }
+    // Only keep native plugins that are enabled in this profile.
+    if (isset($profile->settings['buttons'][$plugin])) {
+      $profile_plugins_native[$plugin] = $meta;
+      if (!isset($processed_plugins[$editor['name']][$plugin])) {
+        if (isset($editor['plugin meta callback'])) {
+          // Invoke the editor's plugin meta callback, so it can populate the
+          // global metadata for native plugins with required values.
+          $meta['name'] = $plugin;
+          if (($native_meta = call_user_func($editor['plugin meta callback'], $editor, $meta))) {
+            drupal_add_js(array('wysiwyg' => array('plugins' => array('native' => array($editor['name'] => array($plugin => $native_meta))))), 'setting');
+          }
+        }
+        $processed_plugins[$editor['name']][$plugin] = $meta;
       }
     }
+  }
+  if (!empty($profile_plugins_native) && isset($editor['plugin settings callback'])) {
     // Invoke the editor's plugin settings callback, so it can populate the
-    // settings for native external plugins with required values.
-    $settings_native = call_user_func($editor['plugin settings callback'], $editor, $profile, $profile_plugins_native);
-
-    if ($settings_native) {
+    // format specific settings for native plugins with required values.
+    if (($settings_native = call_user_func($editor['plugin settings callback'], $editor, $profile, $profile_plugins_native))) {
       drupal_add_js(array('wysiwyg' => array('plugins' => array('format' . $profile->format => array('native' => $settings_native)))), 'setting');
     }
   }
@@ -535,9 +549,13 @@ function wysiwyg_add_plugin_settings($profile) {
           // Load the Drupal plugin's JavaScript.
           drupal_add_js($meta['js path'] . '/' . $meta['js file']);
           // Add plugin-specific settings.
-          if (isset($meta['settings'])) {
-            drupal_add_js(array('wysiwyg' => array('plugins' => array('drupal' => array($plugin => $meta['settings'])))), 'setting');
+          $settings = (isset($meta['settings']) ? $meta['settings'] : array());
+          $settings['title'] = $meta['title'];
+          $settings['icon'] = base_path() . $meta['icon path'] . '/' . $meta['icon file'];
+          if (!empty($meta['css path']) && !empty($meta['css file'])) {
+            $settings['css'] = base_path() . $meta['css path'] . '/' . $meta['css file'];
           }
+          drupal_add_js(array('wysiwyg' => array('plugins' => array('drupal' => array($plugin => $settings)))), 'setting');
         }
         else {
           $profile_plugins_drupal[$plugin] = $processed_plugins[$proxy][$plugin];
@@ -1018,51 +1036,56 @@ function wysiwyg_get_path($library, $base_path = FALSE) {
  * @ingroup libraries
  */
 function wysiwyg_get_libraries() {
-  global $profile;
-
-  // When this function is called during Drupal's initial installation process,
-  // the name of the profile that is about to be installed is stored in the
-  // global $profile variable. At all other times, the regular system variable
-  // contains the name of the current profile, and we can call variable_get()
-  // to determine the profile.
-  if (!isset($profile)) {
-    $profile = variable_get('install_profile', 'default');
+  if (function_exists('libraries_get_libraries')) {
+    $directories = libraries_get_libraries();
   }
+  else {
+    global $profile;
+
+    // When this function is called during Drupal's initial installation process,
+    // the name of the profile that is about to be installed is stored in the
+    // global $profile variable. At all other times, the regular system variable
+    // contains the name of the current profile, and we can call variable_get()
+    // to determine the profile.
+    if (!isset($profile)) {
+      $profile = variable_get('install_profile', 'default');
+    }
 
-  $directory = 'libraries';
-  $searchdir = array();
-  $config = conf_path();
+    $directory = 'libraries';
+    $searchdir = array();
+    $config = conf_path();
 
-  // The 'profiles' directory contains pristine collections of modules and
-  // themes as organized by a distribution.  It is pristine in the same way
-  // that /modules is pristine for core; users should avoid changing anything
-  // there in favor of sites/all or sites/<domain> directories.
-  if (file_exists("profiles/$profile/$directory")) {
-    $searchdir[] = "profiles/$profile/$directory";
-  }
+    // The 'profiles' directory contains pristine collections of modules and
+    // themes as organized by a distribution.  It is pristine in the same way
+    // that /modules is pristine for core; users should avoid changing anything
+    // there in favor of sites/all or sites/<domain> directories.
+    if (file_exists("profiles/$profile/$directory")) {
+      $searchdir[] = "profiles/$profile/$directory";
+    }
 
-  // Always search sites/all/*.
-  $searchdir[] = 'sites/all/' . $directory;
+    // Always search sites/all/*.
+    $searchdir[] = 'sites/all/' . $directory;
 
-  // Also search sites/<domain>/*.
-  if (file_exists("$config/$directory")) {
-    $searchdir[] = "$config/$directory";
-  }
+    // Also search sites/<domain>/*.
+    if (file_exists("$config/$directory")) {
+      $searchdir[] = "$config/$directory";
+    }
 
-  // Retrieve list of directories.
-  // @todo Core: Allow to scan for directories.
-  $directories = array();
-  $nomask = array('CVS');
-  foreach ($searchdir as $dir) {
-    if (is_dir($dir) && $handle = opendir($dir)) {
-      while (FALSE !== ($file = readdir($handle))) {
-        if (!in_array($file, $nomask) && $file[0] != '.') {
-          if (is_dir("$dir/$file")) {
-            $directories[$file] = "$dir/$file";
+    // Retrieve list of directories.
+    // @todo Core: Allow to scan for directories.
+    $directories = array();
+    $nomask = array('CVS');
+    foreach ($searchdir as $dir) {
+      if (is_dir($dir) && $handle = opendir($dir)) {
+        while (FALSE !== ($file = readdir($handle))) {
+          if (!in_array($file, $nomask) && $file[0] != '.') {
+            if (is_dir("$dir/$file")) {
+              $directories[$file] = "$dir/$file";
+            }
           }
         }
+        closedir($handle);
       }
-      closedir($handle);
     }
   }
 
diff --git a/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.context.inc b/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.context.inc
index 326aa069..cdfc7fd1 100644
--- a/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.context.inc
+++ b/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.context.inc
@@ -30,7 +30,7 @@ function ocio_featured_slideshow_context_default_contexts() {
           'module' => 'views',
           'delta' => 'featured_slideshow-block',
           'region' => 'content',
-          'weight' => '-10',
+          'weight' => '-24',
         ),
       ),
     ),
diff --git a/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.features.field_instance.inc b/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.features.field_instance.inc
index 87777697..54f9f0eb 100644
--- a/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.features.field_instance.inc
+++ b/profiles/wcm_base/modules/custom/ocio_featured_slideshow/ocio_featured_slideshow.features.field_instance.inc
@@ -57,11 +57,11 @@ function ocio_featured_slideshow_field_default_field_instances() {
     'settings' => array(
       'alt_field' => 0,
       'default_image' => 0,
-      'file_directory' => '',
-      'file_extensions' => 'png gif jpg jpeg',
-      'max_filesize' => '',
+      'file_directory' => 'slideshow-images',
+      'file_extensions' => 'png jpg jpeg',
+      'max_filesize' => '3mb',
       'max_resolution' => '',
-      'min_resolution' => '',
+      'min_resolution' => '2000x320',
       'title_field' => 0,
       'user_register_form' => FALSE,
     ),
@@ -70,18 +70,28 @@ function ocio_featured_slideshow_field_default_field_instances() {
       'module' => 'media',
       'settings' => array(
         'allowed_schemes' => array(
-          0 => 'public',
-          1 => 'private',
+          'private' => 'private',
+          'public' => 'public',
+          'vimeo' => 0,
+          'youtube' => 0,
         ),
         'allowed_types' => array(
-          0 => 'image',
+          'audio' => 0,
+          'document' => 0,
+          'image' => 'image',
+          'video' => 0,
+        ),
+        'browser_plugins' => array(
+          'media_default--media_browser_1' => 0,
+          'media_default--media_browser_my_files' => 0,
+          'media_internet' => 0,
+          'upload' => 0,
         ),
-        'browser_plugins' => array(),
         'manualcrop_crop_info' => 1,
         'manualcrop_default_crop_area' => 1,
         'manualcrop_enable' => 0,
         'manualcrop_inline_crop' => 0,
-        'manualcrop_instant_crop' => 0,
+        'manualcrop_instant_crop' => FALSE,
         'manualcrop_instant_preview' => 1,
         'manualcrop_keyboard' => 1,
         'manualcrop_maximize_default_crop_area' => 0,
@@ -89,8 +99,6 @@ function ocio_featured_slideshow_field_default_field_instances() {
         'manualcrop_styles_list' => array(),
         'manualcrop_styles_mode' => 'include',
         'manualcrop_thumblist' => 0,
-        'preview_image_style' => 'thumbnail',
-        'progress_indicator' => 'throbber',
       ),
       'type' => 'media_generic',
       'weight' => 2,
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
index f72e2765..aa1abe96 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/CHANGELOG.txt
@@ -1,3 +1,10 @@
+Panopoly Admin 7.x-1.28, 2015-10-21
+----------------------------
+- Update to Drupal 7.41 for SA-CORE-2015-004 and jquery_update for SA-
+  CONTRIB-2015-158.
+- Remove question mark from Enable/Disable link on pane library.
+- Update to simplified_menu_admin 1.0.
+
 Panopoly Admin 7.x-1.27, 2015-09-02
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
index 1907ce9d..8de7d5fa 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.info
@@ -38,9 +38,9 @@ features[page_manager_pages][] = panopoly_admin_page_library
 features[page_manager_pages][] = panopoly_admin_pane_library
 features[variable][] = user_admin_role
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_admin"
-datestamp = "1441223655"
+datestamp = "1445465042"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.make b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.make
index c0d13d03..f5110007 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.make
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.make
@@ -11,9 +11,8 @@ projects[backports][subdir] = contrib
 projects[module_filter][version] = 2.0
 projects[module_filter][subdir] = contrib
 
-projects[simplified_menu_admin][version] = 1.0-beta2
+projects[simplified_menu_admin][version] = 1.0
 projects[simplified_menu_admin][subdir] = contrib
-projects[simplified_menu_admin][patch][1256700] = https://www.drupal.org/files/issues/simplified_menu_admin-form-hierarchy-not-preserved-1256700-13.patch
 
 projects[date_popup_authored][version] = 1.x-dev
 projects[date_popup_authored][subdir] = contrib
@@ -51,7 +50,7 @@ projects[admin_menu][subdir] = contrib
 ; jQuery Update was moved to Panopoly Core, but is left in Panopoly Admin's
 ; .make file to retain a stable 1.x branch of Panopoly. See the following URL
 ; for more information: http://drupal.org/node/2492811
-projects[jquery_update][version] = 2.6
+projects[jquery_update][version] = 2.7
 projects[jquery_update][subdir] = contrib
 
 ; Libraries
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.module b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.module
index 339fccc7..e9e9b759 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.module
+++ b/profiles/wcm_base/modules/panopoly/panopoly_admin/panopoly_admin.module
@@ -738,7 +738,7 @@ function _panopoly_admin_general_panes_get_status($plugin_name, $category_name,
   if ($status == 'enable') {
     $link = array(
       '#type' => 'link',
-      '#title' => t('Disable?'),
+      '#title' => t('Disable'),
       '#href' => 'admin/panopoly/panes/pane/disable/' . $category_name . '/' . $plugin_name . '/' . drupal_get_token($plugin_name),
       '#ajax' => array(
         'wrapper' => 'panopoly-admin-pane-response-' . $category_name . '-' . str_replace(':', '_', $plugin_name),
@@ -751,7 +751,7 @@ function _panopoly_admin_general_panes_get_status($plugin_name, $category_name,
   else {
     $link = array(
       '#type' => 'link',
-      '#title' => t('Enable?'),
+      '#title' => t('Enable'),
       '#href' => 'admin/panopoly/panes/pane/enable/' . $category_name . '/' . $plugin_name . '/' . drupal_get_token($plugin_name),
       '#ajax' => array(
         'wrapper' => 'panopoly-admin-pane-response-' . $category_name . '-' . str_replace(':', '_', $plugin_name),
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
index 1c1ae2cb..6da35a4e 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/CHANGELOG.txt
@@ -1,3 +1,14 @@
+Panopoly Core 7.x-1.28, 2015-10-21
+---------------------------
+- Update to Drupal 7.41 for SA-CORE-2015-004 and jquery_update for SA-
+  CONTRIB-2015-158.
+- Missing file access checks for private files attached to Fieldable Panel
+  Panes.
+- Can't distinguish reusable content without admin title when previews are in
+  single mode.
+- CTools "Undefined index: access callback in
+  ctools_entity_from_field_context()".
+
 Panopoly Core 7.x-1.27, 2015-09-02
 ---------------------------
 - Update to fieldable_panels_panes version 1.7 for SA-CONTRIB-2015-145.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
index 0c3658d6..8a81a3c6 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.info
@@ -74,9 +74,9 @@ features[variable][] = panelizer_taxonomy_term:panopoly_categories_allowed_layou
 features[variable][] = panelizer_taxonomy_term:panopoly_categories_allowed_types_default
 features[views_view][] = panopoly_taxonomy
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_core"
-datestamp = "1441223664"
+datestamp = "1445465055"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
index 56bb3597..6c3e8964 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
+++ b/profiles/wcm_base/modules/panopoly/panopoly_core/panopoly_core.make
@@ -7,6 +7,7 @@ core = 7.x
 
 projects[ctools][version] = 1.8
 projects[ctools][subdir] = contrib
+projects[ctools][patch][2209775] = https://www.drupal.org/files/issues/ctools-readd_access_callback_params-2209775-24.patch
 
 projects[panels][version] = 3.5
 projects[panels][subdir] = contrib
@@ -23,6 +24,8 @@ projects[panelizer][patch][2416505] = http://www.drupal.org/files/issues/paneliz
 
 projects[fieldable_panels_panes][version] = 1.7
 projects[fieldable_panels_panes][subdir] = contrib
+projects[fieldable_panels_panes][patch][2562717] = https://www.drupal.org/files/issues/fpp-empty-admin-title-2562717-2.patch
+projects[fieldable_panels_panes][patch][2381433] = https://www.drupal.org/files/issues/fieldable_panels_panes_patch-2381433-1_0.patch
 
 projects[pm_existing_pages][version] = 1.4
 projects[pm_existing_pages][subdir] = contrib
@@ -112,7 +115,7 @@ projects[migrate_extras][subdir] = "contrib"
 ; jQuery Update was moved to Panopoly Core, but is left in Panopoly Admin's
 ; .make file to retain a stable 1.x branch of Panopoly. See the following URL
 ; for more information: http://drupal.org/node/2492811
-projects[jquery_update][version] = 2.6
+projects[jquery_update][version] = 2.7
 projects[jquery_update][subdir] = contrib
 
 ; Recommended Modules
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
index dd98668b..07113156 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Magic 7.x-1.28, 2015-10-21
+----------------------------
+- No changes since last release.
+
 Panopoly Magic 7.x-1.27, 2015-09-02
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
index abf20fa1..fa6d6897 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_magic/panopoly_magic.info
@@ -15,9 +15,9 @@ stylesheets[all][] = css/panopoly-modal.css
 features[features_api][] = api:2
 files[] = plugins/views/panopoly_magic_plugin_display_panel_pane.inc
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_magic"
-datestamp = "1441223978"
+datestamp = "1445465075"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
index 70366708..1c3872d9 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_pages/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Pages 7.x-1.28, 2015-10-21
+----------------------------
+- No changes since last release.
+
 Panopoly Pages 7.x-1.27, 2015-09-02
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info b/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
index f29dd6ea..eb2a7d0b 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_pages/panopoly_pages.info
@@ -67,9 +67,9 @@ features[variable][] = panelizer_node:panopoly_page_allowed_layouts_default
 features[variable][] = panelizer_node:panopoly_page_allowed_types_default
 features[variable][] = save_continue_panopoly_page
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_pages"
-datestamp = "1441223984"
+datestamp = "1445465352"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
index 0956ecfe..87d481d6 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/CHANGELOG.txt
@@ -1,3 +1,8 @@
+Panopoly Search 7.x-1.28, 2015-10-21
+-----------------------------
+- Search block pane config ignores prompt override.
+- Performance issues when indexing HTML-heavy sites.
+
 Panopoly Search 7.x-1.27, 2015-09-02
 -----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.features.inc b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.features.inc
index d13d0cc9..7095ed19 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.features.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.features.inc
@@ -39,7 +39,7 @@ function panopoly_search_default_search_api_index() {
     "item_type" : "node",
     "options" : {
       "index_directly" : 1,
-      "cron_limit" : "50",
+      "cron_limit" : "20",
       "fields" : {
         "author" : { "type" : "integer", "entity_type" : "user" },
         "body:summary" : { "type" : "text" },
@@ -157,7 +157,7 @@ function panopoly_search_default_search_api_index() {
     "item_type" : "node",
     "options" : {
       "index_directly" : 1,
-      "cron_limit" : "50",
+      "cron_limit" : "20",
       "fields" : {
         "author" : { "type" : "integer", "entity_type" : "user" },
         "body:summary" : { "type" : "text" },
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
index 09b83ba8..8734096c 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.info
@@ -50,12 +50,13 @@ features[variable][] = facetapi:block_cache:search_api@database_node_index
 features[variable][] = facetapi:block_cache:search_api@node_index
 features[variable][] = search_active_modules
 features[variable][] = search_api_facets_search_ids
+features[variable][] = search_cron_limit
 features[views_view][] = panopoly_database_search
 features[views_view][] = panopoly_search
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_search"
-datestamp = "1441223990"
+datestamp = "1445465648"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.install b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.install
index ed968e8a..cb5b7bc6 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.install
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.install
@@ -171,3 +171,24 @@ function panopoly_search_update_7007() {
     return t('All items in the search indexes have been queued for reindexing.');
   }
 }
+
+/**
+ * Throttle unneeded indexing by core search. Update index options to
+ * process fewer items per cron run.
+ */
+function panopoly_search_update_7008() {
+  if (module_exists('search_api')) {
+    variable_set('search_cron_limit', '10');
+    foreach (search_api_index_load_multiple(array('database_node_index', 'node_index')) as $index) {
+      // If the index configuration is stored in the database, also update it
+      // there. Only update it if it matches the previous default.
+      if ($index->status & EXPORT_IN_DATABASE) {
+        $options = $index->options;
+        if ($options['cron_limit'] == "50") {
+          $options['cron_limit'] = "20";
+          $index->update(array('options' => $options));
+        }
+      }
+    }
+  }
+}
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.pages_default.inc b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.pages_default.inc
index 119b7934..0ddfe8e7 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.pages_default.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.pages_default.inc
@@ -135,7 +135,7 @@ function panopoly_search_default_page_manager_pages() {
     'form' => 'simple',
     'path_type' => 'default',
     'path' => '',
-    'override_prompt' => 1,
+    'override_prompt' => FALSE,
     'prompt' => '',
     'context' => array(),
     'override_title' => 1,
@@ -286,7 +286,7 @@ function panopoly_search_default_page_manager_pages() {
     'form' => 'simple',
     'path_type' => 'default',
     'path' => '',
-    'override_prompt' => 1,
+    'override_prompt' => FALSE,
     'prompt' => '',
     'context' => array(),
     'override_title' => 1,
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.strongarm.inc b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.strongarm.inc
index 898d07b4..7fb30363 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.strongarm.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/panopoly_search.strongarm.inc
@@ -52,5 +52,12 @@ function panopoly_search_strongarm() {
   );
   $export['search_api_facets_search_ids'] = $strongarm;
 
+  $strongarm = new stdClass();
+  $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */
+  $strongarm->api_version = 1;
+  $strongarm->name = 'search_cron_limit';
+  $strongarm->value = '10';
+  $export['search_cron_limit'] = $strongarm;
+
   return $export;
 }
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_search/plugins/content_types/search_box/search_box.inc b/profiles/wcm_base/modules/panopoly/panopoly_search/plugins/content_types/search_box/search_box.inc
index acf0c032..cf6c5bff 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_search/plugins/content_types/search_box/search_box.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_search/plugins/content_types/search_box/search_box.inc
@@ -68,7 +68,7 @@ function panopoly_search_search_box_content_type_render($subtype, $conf, $panel_
   module_load_include('inc', 'search', 'search.pages');
 
   $block->content = drupal_build_form('search_form', $form_state);
-  $block->content['basic']['keys']['#title'] = t('Enter your keywords');
+  $block->content['basic']['keys']['#title'] = $conf['override_prompt'] ? $prompt : t('Enter your keywords');
   if ($conf['form'] == 'simple' && isset($block->content['advanced'])) {
     $block->content['advanced']['#access'] = FALSE;
   }
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
index d643641c..d6798398 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Test 7.x-1.28, 2015-10-21
+---------------------------
+- Migrate to new Travis infrastructure.
+
 Panopoly Test 7.x-1.27, 2015-09-02
 ---------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info b/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
index a729565c..3317d8b7 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/panopoly_test.info
@@ -99,9 +99,9 @@ features_exclude[dependencies][panopoly_pages] = panopoly_pages
 features_exclude[dependencies][panelizer] = panelizer
 hidden = 1
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_test"
-datestamp = "1441224278"
+datestamp = "1445465657"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.travis.yml b/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.travis.yml
deleted file mode 100644
index 53761cf7..00000000
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/behat.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-imports:
-    - behat.common.yml
-
-default:
-  extensions:
-    Behat\MinkExtension:
-      base_url: http://127.0.0.1:8888
-      files_path: './profiles/panopoly/modules/panopoly/panopoly_test/tests'
-    Drupal\DrupalExtension:
-      drush:
-        alias: self
-      # This will be setup using the BEHAT_PARAMS environment variable.
-      #drupal:
-      #  drupal_root: "/path/to/drupal/root"
-
-      # Look in the profile modules directory and pull in module subcontexts.
-      subcontexts:
-        paths:
-          - "./profiles/panopoly"
-
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_panels.behat.inc b/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_panels.behat.inc
index d6952ed9..baa12ed7 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_panels.behat.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_test/tests/steps/panopoly_test_panels.behat.inc
@@ -51,6 +51,8 @@ class PanelsSubContext extends RawDrupalContext implements DrupalSubContextInter
    * @When I customize this page with the Panels IPE
    */
   public function customizeThisPageIPE() {
+    $this->getSession()->getDriver()->maximizeWindow();
+    $this->waitForIPEtoDeactivate();
     $this->getSession()->getPage()->clickLink('Customize this page');
     $this->waitForIPEtoActivate();
   }
@@ -61,8 +63,9 @@ class PanelsSubContext extends RawDrupalContext implements DrupalSubContextInter
    * @When I change layout with the Panels IPE
    */
   public function changeLayoutIPE() {
-    $this->getSession()->getPage()->clickLink('Change layout');
     $this->getSession()->wait(5000, 'jQuery(".panels-choose-layout").length === 0');
+    $this->getSession()->getPage()->clickLink('Change layout');
+    $this->getSession()->wait(5000, 'jQuery(".panels-choose-layout").length > 0');
   }
 
 }
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
index b4e9052b..1e3434e7 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/CHANGELOG.txt
@@ -1,3 +1,8 @@
+Panopoly Theme 7.x-1.28, 2015-10-21
+----------------------------
+- Don't rebuild accordions on AJAX requests.
+- Convert accordion "heightAuto" to "heightStyle" for jQuery UI >= 1.9.
+
 Panopoly Theme 7.x-1.27, 2015-09-02
 ----------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/js/panopoly-accordion.js b/profiles/wcm_base/modules/panopoly/panopoly_theme/js/panopoly-accordion.js
index 633a878b..4798bafd 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/js/panopoly-accordion.js
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/js/panopoly-accordion.js
@@ -1,12 +1,16 @@
 (function ($) {
 
- Drupal.behaviors.PanelsAccordionStyle = {
-   attach: function (context, settings) {
-     for ( region_id in Drupal.settings.accordion ) {
-    		var accordion = Drupal.settings.accordion[region_id] ;
-		    jQuery('#'+region_id).accordion(accordion.options);
-  	 }
-   }
-  }
+  Drupal.behaviors.PanelsAccordionStyle = {
+    attach: function (context, settings) {
+      for (region_id in Drupal.settings.accordion) {
+        var accordion = Drupal.settings.accordion[region_id];
+        if (jQuery('#'+region_id).hasClass("ui-accordion")) {
+          jQuery('#'+region_id).accordion("refresh");
+        } else {
+          jQuery('#'+region_id).accordion(accordion.options);
+        }
+      }
+    }
+  };
 
 })(jQuery);
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
index 26c5cc94..4ad75aa4 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/panopoly_theme.info
@@ -11,9 +11,9 @@ stylesheets[all][] = css/panopoly-accordian.css
 stylesheets[all][] = css/panopoly-layouts.css
 features[features_api][] = api:2
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_theme"
-datestamp = "1441224284"
+datestamp = "1445465662"
 
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_theme/plugins/styles/accordion/panopoly_accordion.inc b/profiles/wcm_base/modules/panopoly/panopoly_theme/plugins/styles/accordion/panopoly_accordion.inc
index 468c3c6a..c16ed225 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_theme/plugins/styles/accordion/panopoly_accordion.inc
+++ b/profiles/wcm_base/modules/panopoly/panopoly_theme/plugins/styles/accordion/panopoly_accordion.inc
@@ -62,6 +62,18 @@ function theme_panopoly_theme_panopoly_accordion_style_render_region($vars) {
       $settings_js['accordion'][$region_id]['options']['active'] = (int)$settings_js['accordion'][$region_id]['options']['active'];
     }
   }
+  if (empty($settings_js['accordion'][$region_id]['options']['heightStyle'])) {
+    if (!empty($settings_js['accordion'][$region_id]['options']['fillSpace'])) {
+      $settings_js['accordion'][$region_id]['options']['heightStyle'] = 'fill';
+    }
+    else if (!empty($settings_js['accordion'][$region_id]['options']['clearStyle'])) {
+      $settings_js['accordion'][$region_id]['options']['heightStyle'] = 'content';
+    }
+    else {
+      $settings_js['accordion'][$region_id]['options']['heightStyle'] = 'auto';
+    }
+  }
+  unset($settings_js['accordion'][$region_id]['options']['fillSpace'], $settings_js['accordion'][$region_id]['options']['clearStyle'], $settings_js['accordion'][$region_id]['options']['autoHeight']);
   drupal_add_js($settings_js, 'setting');
   return $output;
 }
@@ -73,18 +85,25 @@ function panopoly_theme_panopoly_accordion_style_settings_form($style_settings)
     '#description' => t('Set to -1 if you want no pane active'),  
     '#default_value' => (isset($style_settings['active'])) ? $style_settings['active'] : 0,
   );
-  $form['autoHeight'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Set to autoheight'),  
-    '#return_value' => 1,  
-    '#default_value' => (isset($style_settings['autoHeight'])) ? $style_settings['autoHeight'] : 1,
+  $height_options = array(
+    'auto' => t('All panels will be set to the height of the tallest panel.'),
+    'fill' => t('Expand to the available height based on the accordion\'s parent height.'),
+    'content' => t('Each panel will be only as tall as its content.'),
   );
-  $form['clearStyle'] = array(
-    '#type' => 'checkbox',
-    '#description' => t("If set, clears height and overflow styles after finishing animations. This enables accordions to work with dynamic content. Won't work together with autoHeight."),
-    '#title' => t('Clear heights after animation'),  
-    '#return_value' => 1,  
-    '#default_value' => (isset($style_settings['clearStyle'])) ? $style_settings['clearStyle'] : 0,
+  if ($style_settings['fillSpace']) {
+    $height_default = 'fill';
+  }
+  else if ($style_settings['clearStyle']) {
+    $height_default = 'content';
+  }
+  else {
+    $height_default = 'auto';
+  }
+  $form['heightStyle'] = array(
+    '#type' => 'radios',
+    '#title' => t('Set accordion height style'),
+    '#options' => $height_options,
+    '#default_value' => (isset($style_settings['heightStyle'])) ? $style_settings['heightStyle'] : $height_default,
   );
   $form['collapsible'] = array(
     '#type' => 'checkbox',
@@ -99,12 +118,6 @@ function panopoly_theme_panopoly_accordion_style_settings_form($style_settings)
     '#options' => array('click' => t('On click'), 'mouseover' => t('On mouse over')),
     '#default_value' => (isset($style_settings['event'])) ? $style_settings['event'] : 'click',
   );
-  $form['fillSpace'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('If set, the accordion completely fills the height of the parent element. Overrides autoheight.'),  
-    '#return_value' => TRUE,
-    '#default_value' => (isset($style_settings['event'])) ? $style_settings['event'] : FALSE,
-  );
   $form['navigation'] = array(
     '#type' => 'checkbox',
     '#title' => t('If set, looks for the anchor that matches location.href and activates it. Great for href-based state-saving. Use navigationFilter to implement your own matcher..'),  
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt b/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
index 45403d7e..0ee53a09 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/CHANGELOG.txt
@@ -1,3 +1,7 @@
+Panopoly Widgets 7.x-1.28, 2015-10-21
+------------------------------
+- Text on tabs on Media Browser is lower than it is on other interfaces.
+
 Panopoly Widgets 7.x-1.27, 2015-09-02
 ------------------------------
 - No changes since last release.
diff --git a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
index c7b292d0..7133b814 100644
--- a/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
+++ b/profiles/wcm_base/modules/panopoly/panopoly_widgets/panopoly_widgets.info
@@ -118,9 +118,9 @@ features[file_display][] = video__teaser__media_youtube_image
 features[file_display][] = video__teaser__media_youtube_video
 features[views_view][] = panopoly_widgets_general_content
 
-; Information added by Drupal.org packaging script on 2015-09-02
-version = "7.x-1.27"
+; Information added by Drupal.org packaging script on 2015-10-21
+version = "7.x-1.28"
 core = "7.x"
 project = "panopoly_widgets"
-datestamp = "1441224547"
+datestamp = "1445465949"
 
diff --git a/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full-layout.tpl.php b/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full-layout.tpl.php
index d21c4a90..c417e300 100755
--- a/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full-layout.tpl.php
+++ b/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full-layout.tpl.php
@@ -59,6 +59,9 @@
       </div>
     </div>
   </div>
+  <div class="l-region--pre-footer-wrapper <?php print $main_classes; ?>">
+    <?php print render($page['pre_footer']); ?>
+  </div>
   <footer class="l-footer-wrapper" role="contentinfo">
     <div class="l-constrained">
       <?php print render($page['footer_1']); ?>
diff --git a/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full.layout.inc b/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full.layout.inc
index 997a9911..ef7b94db 100755
--- a/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full.layout.inc
+++ b/profiles/wcm_base/themes/ocio_omega_1/layouts/ocio-full/ocio-full.layout.inc
@@ -1,5 +1,5 @@
 name = OCIO Full
-description = Full width layout used by OCIO Theme 1. 
+description = Full width layout used by OCIO Theme 1.
 preview = preview.png
 template = ocio-full-layout
 
@@ -12,6 +12,7 @@ regions[hero]	= Hero
 regions[content] = Content
 regions[sidebar_1] = Sidebar 1
 regions[sidebar_2] = Sidebar 2
+regions[pre_footer] = Pre-Footer
 regions[search] = Search
 regions[footer_1] = Footer 1
 regions[footer_2] = Footer 2
diff --git a/profiles/wcm_base/themes/ocio_omega_1/ocio_1.info b/profiles/wcm_base/themes/ocio_omega_1/ocio_1.info
index d0709463..550d0b90 100755
--- a/profiles/wcm_base/themes/ocio_omega_1/ocio_1.info
+++ b/profiles/wcm_base/themes/ocio_omega_1/ocio_1.info
@@ -30,6 +30,7 @@ regions[workbench] = Workbench Info
 regions[content] = Content
 regions[sidebar_1] = Sidebar 1
 regions[sidebar_2] = Sidebar 2
+regions[pre_footer] = Pre-Footer
 regions[search] = Search
 regions[footer_1] = Footer 1
 regions[footer_2] = Footer 2
diff --git a/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default-layout.tpl.php b/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default-layout.tpl.php
deleted file mode 100644
index c912a6a8..00000000
--- a/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default-layout.tpl.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<div<?php print $attributes; ?>>
-  <header class="l-header" role="banner">
-  	<?php print render($page['osu_navbar']); ?>
-		<?php print render($page['masthead']); ?>
-		<?php print render($page['main_menu']); ?>
-  </header>
-
-	<div class="l-region--hero-wrapper <?php print $main_classes; ?>">
-		<?php print render($page['hero']); ?>
-	</div>
-
-  <?php if (!empty($page['highlighted'])): ?>
-    <div class="l-highlighted-wrapper">
-      <?php print render($page['highlighted']); ?>
-    </div>
-  <?php endif; ?>
-
-  <div class="l-main  <?php print $main_classes; ?>">
-    <a id="main-content"></a>
-
-    <div class="l-constrained max-width">
-    	<?php print $breadcrumb; ?>
-			<?php print render($tabs); ?>
-			<?php print render($page['help']); ?>
-			<?php print $messages; ?>
-			<?php print render($page['workbench']); ?>
-    </div>
-
-    <div class="l-constrained max-width">
-			<div class="l-content" role="main">
-      	<?php if (!$is_front && !empty($title)): ?>
-      		<?php if ($landing_page) :?>
-						<h1 class="title l-constrained max-width" id="page-title"><?php print $title; ?></h1>
-					<?php else: ?>
-						<h1 class="title" id="page-title"><?php print $title; ?></h1>
-					<?php endif; ?>
-				<?php endif; ?>
-
-				<?php if ($action_links): ?>
-					<ul class="action-links"><?php print render($action_links); ?></ul>
-				<?php endif; ?>
-
-				<?php print render($page['content']); ?>
-				<?php print $feed_icons; ?>
-    	</div>
-
-			<?php print render($page['sidebar_1']); ?>
-			<?php print render($page['sidebar_2']); ?>
-
-  </div>
-
-  <div class="l-region--pre-footer-wrapper <?php print $main_classes; ?>">
-		<?php print render($page['pre_footer']); ?>
-	</div>
-
-  <footer class="l-footer-wrapper" role="contentinfo">
-  	<div class="l-constrained max-width">
-    	<?php print render($page['footer_1']); ?>
-			<?php print render($page['footer_2']); ?>
-			<?php print render($page['footer_3']); ?>
-  	</div>
-  </footer>
-</div>
diff --git a/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default.layout.inc b/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default.layout.inc
deleted file mode 100644
index 8ff75c87..00000000
--- a/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/ocio-default.layout.inc
+++ /dev/null
@@ -1,24 +0,0 @@
-name = OCIO Default
-description = Default layout with two optional sidebars. 
-preview = preview.png
-template = ocio-default-layout
-
-; Regions
-regions[osu_navbar] = OSU Navbar
-regions[masthead] = Masthead
-regions[main_menu] = Main Menu
-regions[hero] = Hero
-regions[workbench] = Workbench Info
-regions[content] = Content
-regions[sidebar_1] = Sidebar 1
-regions[sidebar_2] = Sidebar 2
-regions[pre_footer] = Pre-Footer
-regions[footer_1] = Footer 1
-regions[footer_2] = Footer 2
-regions[footer_3] = Footer 3
-regions[user] = User
-
-
-; Stylesheets
-stylesheets[all][] = css/layouts/ocio-default/ocio-default.layout.css
-stylesheets[all][] = css/layouts/ocio-default/ocio-default.layout.no-query.css
diff --git a/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/preview.png b/profiles/wcm_base/themes/ocio_omega_2/libraries/ocio-default/preview.png
deleted file mode 100644
index 363f682ba910b40ad70350a5a575e512303a0754..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2900
zcmZWrcQhRO68^bF@4ZB>UN%@=bawR`tXM6&B_c{BT8M6yOGNankVG#LVr7*??^cVt
zO7tLjQ9`0U_nq_JJMX+dX1<v@^Ua)@Gk;9NZ4+G@N=`}u0FAz$miZNGU5N=f>6Okw
z*L=AG3ST|zhX7D9{VhZw_a!?3l%}3=`0d*sJ^?-tJ$!t5^x<$GUw<EW&--ow1kGYB
zPzZ}nR@LK$Lzp2t;)S7)ISV<DIV>rHIZX({OF?gd<}I9IF>7Pc)+XWVEkF~eq(mgM
zn2Av*Qcjbt^1e=qeuGZzKV1ra<2BiQygqbMKc%)&d4Q=KCTk_9&eW4JlZ&7(gWX{G
z8r{>`y|gN!5lJcF3+Tz~TzMa!^AmxSa21uCe63`k08!956**`%&TEyt9)C%<1<SD`
ziija<4M@9XNFKoqG(u8f#Xv)cC<2o$WC03Dfa8FR^9r~v4jhG_u8)HV%t=lt5wLy1
z%R*F;26&j<&|1Jl8B`A6Nz?{NNx<xG*r^Dn#et;0mAf9OX#lNwda7DLP7Nf@(6OR`
zBosLI^799Qm>j^Yvu~yH<7PGe2IOi}IkhS{0Y&XdTXJzfGAk>I8zOjpwwuiIPJcM%
zYDlyP=Ws|z%F=y37zCgojpb_EgYzIfZ8aV*pMs@z5a0StddcVPymGNNT;Zz$z*0c?
z=!F=xjx$1;G{XDhwcsv^$6cy|N5@I-wR9TwpkQ;>>cIE!-Dnp+!_CaBt*%ZRbi!<%
z`mMq)Q0)$_R_FJBg{zz$AAS9_ED$MeAE`@n^0j^N(5UG8@N<e7=ehM%-LnR&%QNnA
zzD|8-91_C3V#er~qLrI`AYH_l0DCUlB{+8Jy1XcMO02dh2WsxA5rw9Sm)g4!|1=b)
zM+USm9|N%8<kR*=gq%3SBYJ5#@N!T6T(>|FM7Zle_XFUrmVgAJzfQe}{OTABA|W-J
zT!(G!Vy&dt+pf*EQJp!;$G`+S+hO!DO4o?%{*I!RQ81CXp&D+8BlL>~w`{AKM_jru
ztwg)!M_N^1y5COZ`E4T2krX7Fz2r<zyt8N`=R_ob3OQR&><Mq19tmTT08by9*^JLH
zO-@hBJQ2ZTsmHyq>i>sgyq!*CnsP6Yjyj8L)|Gk@S!<^Hg}NS&D^=i((RocZ;u;{8
zo61^{H{$<+Q#Dz>aATyxgKjoe4c;T!`i-4Trt`j}M0W@5{Vg$ybeDnme3jG{-JCUd
zDv6sCj$DS{2a+&GYPV9zlLW$eoNj39A&rnG(|V;m*9Bx5W+@aXh-1v!h56D;4L=Aq
zGW_afcb1llN9u|3Pco)5LFq%$@J<B*#ss*uFz(qO`tRQ&#u&$R#vYjSZ;F-W$?9?P
zr}xdedexFCz7XTN*&DlxS?ySrS>;;g-M6L0IBWR5J+W98G4H=;z_CWZCc8%JmMyJm
z`6kzVzO)d*AeU+bt185rzcY(3Ws-fAt2h+Rs&80S^*Upm(}T_9*z?`DfJTP-j2k9d
zBUWPro4Vh!z7Zb=Qq#n-ME9UkA{=?_Wb7!8K=yapM#UWCNgO>0Nd>9x?2R0{93M+0
z1Pgh>lGaa|VUQt|!3BXL%F2t&7s{zD4=e`|sbzO9!m4#FWh_?8D86J?Se9dMZ(DF#
zpvsg><I7Q{J_z-<;nwE~q}Clq9j5TNW(DsZR+_tcs9ZSeg2Z^eXe#0!Map#wy&sx+
z@)**Tea_vKq*`89s0f!akg=*WKX~D;PPUTmck(j8gknRaB<mnNae;YHbXk<ESk?$9
z<!0wqo|%=2tkA14tI*wUk+0q<!4$V>H(8%X(rWe?2-^wkqEhkKFdG&#7V{;PC9KA(
zN=MZa<z7Wxg-u$4pC6R$X6Jvp8<B71Q?d};vhn+R81x)*?)|&uNS7K(T1PEFN}$HG
zt8~fv`KWM1dk8<w;PxFF@FJ%Sr>v!zG~B4ln+cu2bm)>jyX{s4R=m5tyWa?r3h@dV
z8gCiz=9(Mhibac+jg*agh6aaT4^8IC<*7<dNpIwB<W1!*HaOY@*@$6Fu^-*^YgcWG
zt#`4_4`OW;t&5PBHuiNoRhTNl$)>8N5{43-NxDfz{v@iS<_ES9Th_o)vo=jisK$C@
z!<<mgY^a8=>W<y?mh`a3u)oe#$!OwdXe+pFxWgZQ@Ml)KqqLBVf4Qq3)^(V<2}L1?
z>4&FfR<KM1qMe=?i@b4N6dMZnF!}(UlwcS&Ad#gek;m0N-`lck5OCyYzZ5cdgvqPR
zYu_m)yxW!E_1ul0do?KgN;KbE=HW<3FZ`?7+Ne6!s|-o6#maC~xM?J+euE$C0!_23
znyP6i3M@Z%+GA7uspkJ`MQuezVL^Jq+F?+kwV}6Rz_i0B-ywDp{*?dH^)lpg6qG~=
z5}}9_A~hpz|2RDfdBXcSMO}&D_Oo_oM>Dwqr^%w38dVjw)>g&q(fj>b74PvzHa-pS
zNgI1R{M+ORnbW#cQb#zoaBO_6Rh)W?FB-`?DwQP{I64P^xTy78D^qJB4<%))_)gqF
z4x&~raZhDdp;5L`y<5WFdT;`XLF(T(ysjt#sg{3m|I^~x&O!V#W|?Xwlr0<DYwsIe
zh;KiPEnzK_U=&lz)G$Ju+<Ng3O?pTvYqH=zQ=ni9WpF!pJBklFDnE*zhTB1InC$C8
zj6<G(PivM77U+^G5?jN?2$wx;Hli__&r`~0&3(+{Ev>55A{G5S?U^5}oYy!Vi`qi1
zyFVVNbc?OM=z5UU0KJhx*5_6Ctn!+*I3*TV{0(6vG6f;4MY&nIe;!KcSIn%)zd5us
zSl3T@rtos_)#VOjJLA%GY*Cz{l{hzYy`}P=Vy%i_FoAM~<=V}-JEWB=9}}?<?+Me2
z9jmPB@D`yEW3R}&ZT(Sg^+aCVRF;%$v0>YDQ#<yiNT~H<z0>bF43`>9LSi*Dfh~*W
z>9ojP&>B~~PygqfxfdVGDmrnl!|r45o9heW`L?u~<yq@lv=3-zW<Ss@-ubX|^i!Jv
z%^DIRG(}_KxHq3wJ~q3R^x=n;)e&zIhlt+@`Q5SkdZ($A2cx@Oq0K*KzfTZsn~%@c
z`aTgXi7bsL+$Y>l^-t@L)vFWAH%~H8z3r<^y#021h{uS}$@popQ@Ae^++(T;^VG?k
z+q$$pe}1~a>;;O`$kSN<^|E`J-&ZSmb@P~F@%RRf((L2p(8?vU@joAPqqw2>V7dFb
zI(Zhkr?$?vji!TYqmx?;A!oXTKj~h|s#pgb93c8UXE&q9(^31w$(RgGSh&QmIY+{4
zZ0Lpye(@fi&t4;az|xrZWzvRnvohXp|6{;@En$tx>Z4WeJ0%D2t$;0+i}Z2Ro~D;g
zxz#v3FWhcOOMR&O@g`Tk0)GCmCHM#H<>W-ZqUwChL5R<B*YVLJ>wLJs@Hu{<X(mv3
zx2oB++2K%QM{@=~A3vdPdoee?H}~{jYhb~_=$!5`X>9cHMcPp+9sF8qPU=7$P26_=
zEj2~OWp)4a&9f5tu<Ni;KHJ6Xi-Br3R%rOi#P$?^G<&o#Yd<Ufv-gvt^R3oxj(3Fa
z_U;>>`hsMn?jGJb-DwM)3*_E=vq)#U`h@4H$fd`x_eT~ZC8y~e>FJjw#MuXDE;8bT
ztACTnMbF$AfDl0dBBBBKb$NxG06dZeV9OBzrECD$e4aaW>0ISL)z{KQ1kHXQks<<s
z1W0m!m@t(vVNg-N<Cr$lK|ukFA!p#zLeum9*U<XENDR5=|784&L;hdJe`?VGyVS3`
dtKOHF!~iW!MB&M5-ErjteQgu1YM5ixKLMW?M_2#=

diff --git a/profiles/wcm_base/themes/ocio_omega_2/ocio_2.info b/profiles/wcm_base/themes/ocio_omega_2/ocio_2.info
index 6d1ea97c..79428957 100644
--- a/profiles/wcm_base/themes/ocio_omega_2/ocio_2.info
+++ b/profiles/wcm_base/themes/ocio_omega_2/ocio_2.info
@@ -29,6 +29,7 @@ regions[workbench] = Workbench Info
 regions[content] = Content
 regions[sidebar_1] = Sidebar 1
 regions[sidebar_2] = Sidebar 2
+regions[pre_footer] = Pre-Footer
 regions[footer_1] = Footer 1
 regions[footer_2] = Footer 2
 regions[footer_3] = Footer 3
diff --git a/profiles/wcm_base/wcm_base.make b/profiles/wcm_base/wcm_base.make
index cdff2583..2184cd72 100644
--- a/profiles/wcm_base/wcm_base.make
+++ b/profiles/wcm_base/wcm_base.make
@@ -20,9 +20,8 @@ projects[context][subdir] = contrib
 projects[context_omega][version] = 1.1
 projects[context_omega][subdir] = contrib
 
-projects[date][version] = 2.8
+projects[date][version] = 2.9
 projects[date][subdir] = contrib
-projects[date][patch][2294973] = http://drupal.org/files/issues/date-title_date_formats-2294973-70.patch
 
 projects[defaultconfig][version] = 1.0-alpha9
 projects[defaultconfig][subdir] = contrib
@@ -51,6 +50,10 @@ projects[fieldable_panels_panes][subdir] = contrib
 projects[google_analytics][version] = 2.1
 projects[google_analytics][subdir] = contrib
 
+projects[jquery_update][version] = 2.7
+projects[jquery_update][subdir] = contrib
+projects[jquery_update][patch][2241973] = http://drupal.org/files/issues/jquery_update-autoheight_fix-2241973-7.patch
+
 projects[mailsystem][version] = 2.34
 projects[mailsystem][subdir] = contrib
 
@@ -378,33 +381,32 @@ libraries[ocio_modernizr][download][branch] = 7.x-1.x
 
 ; The Panopoly Foundation
 
-projects[panopoly_core][version] = 1.27
+projects[panopoly_core][version] = 1.28
 projects[panopoly_core][subdir] = panopoly
 
-projects[panopoly_theme][version] = 1.27
+projects[panopoly_theme][version] = 1.28
 projects[panopoly_theme][subdir] = panopoly
 
-projects[panopoly_magic][version] = 1.27
+projects[panopoly_magic][version] = 1.28
 projects[panopoly_magic][subdir] = panopoly
 
-projects[panopoly_widgets][version] = 1.27
+projects[panopoly_widgets][version] = 1.28
 projects[panopoly_widgets][subdir] = panopoly
-projects[panopoly_widgets][patch][2528248] = http://drupal.org/files/issues/panopoly_widgets-media-browser-tabs-2528248-1.patch
 
-projects[panopoly_admin][version] = 1.27
+projects[panopoly_admin][version] = 1.28
 projects[panopoly_admin][subdir] = panopoly
 
 
 ; The Panopoly Toolset
 
-projects[panopoly_pages][version] = 1.27
+projects[panopoly_pages][version] = 1.28
 projects[panopoly_pages][subdir] = panopoly
 
-projects[panopoly_search][version] = 1.27
+projects[panopoly_search][version] = 1.28
 projects[panopoly_search][subdir] = panopoly
 
 
 ; For running the automated tests.
 
-projects[panopoly_test][version] = 1.27
+projects[panopoly_test][version] = 1.28
 projects[panopoly_test][subdir] = panopoly
-- 
GitLab